`
xuwhyse
  • 浏览: 778 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于OSGI 框架 的客户端接口设计

    博客分类:
  • OSGI
阅读更多
package com.dahua.ibp.client.base.services.base;


/**
* 所有接口的基类
* @author 18002
*
*/
public interface BaseService {

/**
* 获取当前实现Bundle的名字,用来区分实现同一接口的不同组件,<br>
* 实现同一接口的不同组件的该方法返回值必须不同,否则程序中无法区分
* @sample: HelloWorld,HelloBigWorld
* @return String 组件名称
*/
public String getBundleName();

/**
* 获取当前实现接口的名字,实现同一接口表示组件的功能类似
* @sample: HelloWorldService
* @return String 接口名称
*/
public String getInterfaceName();

}
//==========================================================
package com.dahua.ibp.client.base.services.base;

public abstract interface UICommon extends BaseService{
/**
* 更新界面组件语言
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*         IBPClientConstant.SUCCESS 执行成功
*/
public int updateLanguage();

/**
* 更新界面组件的皮肤
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*     IBPClientConstant.SUCCESS 执行成功
*/
public int updateSkin();

/**
* 释放当前类的实例
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*     IBPClientConstant.SUCCESS 执行成功
*/
public int free();
}
//==========================================================
package com.dahua.ibp.client.base.services.base;

/**
* 用来创建组件并能对所有由它组件出来的组件进行管理
* @author 18002
*
*/
public interface UICreateService extends UICommon{
/**
* 创建当前类的实例
* @param parent 界面意义上的父窗口,SWT中如composite、shell等
* @return UIBaseService 界面基础接口的对象
*/
public UIBaseService create(Object parent);

/**
* create的重载,增加类型参数,支持组件多样化
* @param parent 界面意义上的父窗口,SWT中如composite、shell等
* @param style 组件类型,由组件自身定义
* @return UIBaseService 界面基础接口的对象
*/
public UIBaseService create(Object parent,int style);
}
//==========================================================
package com.dahua.ibp.client.base.services.base;

/**
* 所有界面接口的基类
* @author 18002
*
*/
public interface UIBaseService extends UICommon{
/**
* 设置当前对象的父窗口,将改变当前对象的显示位置
*
* @param parent 父窗口对象,SWT中如composite、shell等
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*     IBPClientConstant.SUCCESS 执行成功 <br>
*     IBPClientConstant.ERROR_ISNULL 参数为空,不合法
*/
public int setParent(Object parent);

/**
* 获取当前对象的父窗口
*
* @return Object 父窗口对象,SWT中如composite、shell等 <br>
*         null   获取父窗口失败
*/
public Object getParent();

/**
* 显示该组件
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*     IBPClientConstant.SUCCESS 执行成功 <br>
*/
public int show();

/**
* 设置组件是否可见
* @param visible true可见,false不可见
* @return IBPClientConstant.ERROR_ISFREE 组件已被释放 <br>
*     IBPClientConstant.SUCCESS 执行成功 <br>
*/
public int setVisable(Boolean visible);

/**
* 判断该组件是否被释放
* @return true 已经释放 <br>
*    false 未释放
*/
public boolean isFree();

/**
* 返回承载组建的容器
* @return Object 承载组建的容器,SWT中如composite、shell等
*/
public Object getComp();

/**
* 获取创建UI实例的类,以备在检测到创建的对象被释放后可以再次创建
* @return UICreateService 返回创建组件的实例
*/
public UICreateService getCreator();

/**
* 返回组件对用户的显示名称,支持换语言
* @return String 组件对用户的显示名称
*/
public String getDisplayName();

/**
* 返回用户看到的组件小图标的路径,支持换皮肤
* @return String 用户看到的组件小图标的路径
*/
public String getDisplayImage();
// /**
// * 对应create方法中的style,没有用到的返回0
// * @return
// */
// public int getStyle();

}
//==========================================================
package com.dahua.ibp.client.base.services.base;

/**
* 用来创建功能组件并能对所有由它组件出来的组件进行管理
* @author 18002
*
*/
public interface NUICreateService extends BaseService{
/**
* 创建当前类的实例
* @return NUIBaseService 功能组件基础接口的对象
*/
public NUIBaseService create();
}
//==========================================================
package com.dahua.ibp.client.base.services.base;

/**
* 所有功能组件接口的基类
* @author 18002
*
*/
public interface NUIBaseService extends BaseService{

}


//==========================================================
接下来是两个抽象类,简化具体类的实现

package com.dahua.ibp.client.base.services.base;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public  abstract class UICreator  implements UICreateService{

private List<UIBaseService>  myList = new ArrayList<UIBaseService>();
protected UIBaseService myCom = null;// 被创建的组件的接口引用

public UICreator() {
}

public abstract void setMyCom(Object parent, int style);

@Override
public int updateLanguage() {
RemoveFreeOnes();
Iterator<UIBaseService> iterator = myList.iterator();
while(iterator.hasNext()){
iterator.next().updateLanguage();
}
return IBPClientConstant.SUCCESS;
}

/**
* 从myList中移除已经被自己释放的对象
*/
private void RemoveFreeOnes() {
Iterator<UIBaseService> iterator = myList.iterator();
while(iterator.hasNext()){
//使用迭代的方法操作节点没有副作用
if(iterator.next().isFree())
iterator.remove();
}
}

@Override
public int updateSkin() {
RemoveFreeOnes();
Iterator<UIBaseService> iterator = myList.iterator();
while(iterator.hasNext()){
iterator.next().updateSkin();
}
return IBPClientConstant.SUCCESS;
}

@Override
public int free() {
RemoveFreeOnes();
Iterator<UIBaseService> iterator = myList.iterator();
while(iterator.hasNext()){
iterator.next().free();
}
return IBPClientConstant.SUCCESS;
}

@Override
public UIBaseService create(Object parent) {
setMyCom(parent, 0);
if(myCom!=null){
myList.add((UIBaseService)myCom);
myCom.updateLanguage();//这里已经调用,所以不需要在里面调用了
myCom.updateSkin();
return myCom;
}
return null;
}

@Override
public UIBaseService create(Object parent, int style) {
setMyCom(parent, style);
if(myCom!=null){
myList.add((UIBaseService)myCom);
myCom.updateLanguage();
myCom.updateSkin();
return myCom;
}
return null;
}

}

//==========================================================
package com.dahua.ibp.client.base.services.base;

import org.eclipse.swt.widgets.Composite;

public abstract class UIBaser implements UIBaseService{

protected Composite myComposite=null;

@Override
public int free() {
if (isFree())
return IBPClientConstant.ERROR_ISFREE;
myComposite.dispose();
myComposite = null;
return IBPClientConstant.SUCCESS;
}

@Override
public int setParent(Object parent) {
if (isFree())
return IBPClientConstant.ERROR_ISFREE;
if(parent!=null){
myComposite.setParent((Composite) parent);
myComposite.layout();
return IBPClientConstant.SUCCESS;
}
return IBPClientConstant.ERROR_ISNULL;
}

@Override
public Object getParent() {
if (isFree())
return null;
return myComposite.getParent();
}

@Override
public int setVisable(Boolean visible) {
if (isFree())
return IBPClientConstant.ERROR_ISFREE;
myComposite.setVisible(visible);
return IBPClientConstant.SUCCESS;
}

@Override
public boolean isFree() {
if (myComposite == null || myComposite.isDisposed()) {
return true;
}
return false;
}

@Override
public Object getComp() {
if (isFree())
return null;
return myComposite;
}
}
分享到:
评论

相关推荐

    Equinox OSGi应用嵌入Jersey框架搭建REST服务

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,强调资源的表示和状态转移。通过使用HTTP方法(如GET、POST、PUT、DELETE等),我们可以操作这些资源来完成业务...

    学习SpringDM+OSGI的总结

    1. **建立第一个Plug-in项目**:使用Eclipse自带的OSGI框架建立第一个插件项目。该插件项目会在控制台输出“HelloWorld”以表示启动成功,关闭时输出“GoodbyeWorld”。 2. **Activator类的作用**:Activator类用于...

    OSGi core

    OSGi(Open Service Gateway Initiative)是一个模块化系统和能力框架,最初是为服务网关设备设计的,但后来扩展到其他领域,如企业应用服务器、富客户端系统以及运行在嵌入式设备中的Java平台。OSGi的主要目标是...

    osgi集成servlet在karaf容器发布

    Karaf是Apache软件基金会的一个项目,是一个基于OSGi的轻量级运行时容器,用于部署和管理服务。在Karaf容器中集成Servlet并发布REST接口是一项常见的任务,下面我们将详细讨论这个过程。 首先,我们需要理解OSGi与...

    osgi in practice

    - **服务代理**:OSGi框架可以创建服务代理对象,这些代理可以缓存服务状态,并处理并发访问。 ##### 2.3 示例分析 假设我们有一个简单的计数器服务,它可以增加或减少计数值。为了实现这个服务,我们可以定义一个...

    基于Android平台的OSGi架构中间件的研究与应用.pdf

    本文主要研究了基于Android平台的OSGi架构中间件的设计和实现,旨在满足不同的Java环境和平台的需求,屏蔽了底层技术的复杂性,极大降低了智能家居应用系统的开发难度。 OSGi架构是一个由OSGi联盟发起的以Java为...

    OSGI原理及实战

    - **面向服务的组件模型**: 设计基于服务的组件模型,促进组件间的松耦合。 - **动态性设计**: 实现动态部署、更新和卸载组件的能力。 - **面向接口开发**: 通过定义清晰的接口来实现服务的提供者和消费者分离。 ##...

    以 OSGi 包的形式开发和部署 Web 服务

    1. **环境搭建**:安装Eclipse 3.5(Galileo),其中包含了Equinox OSGi框架。此外,还需要下载cxf-dosgi单包发行版和osgicompendium包,以及Apache Tomcat 5.5.9。 2. **配置OSGi容器**:使用Eclipse导入cxf-dosgi...

    httpcomponents-client-4.5.5-osgi-bin

    6. **OSGi 兼容**:"osgi-bin" 表明此版本已优化为 OSGi(Open Service Gateway Initiative)兼容,方便在 OSGi 框架下使用,如 Eclipse Equinox 或 Apache Felix。 7. **可扩展性**:HttpClient 设计为模块化,...

    OSGI.基于ECF的分布式服务开发指南

    ### OSGi与ECF:基于分布式服务的开发实践 #### 一、前言 随着企业应用日益复杂,分布式服务架构成为了许多系统的核心设计模式之一。为了满足这种需求,OSGi(Open Service Gateway Initiative)框架提供了强大的...

    基于Spring-DM实现分布式服务框架(DSF).pdf

    它基于Spring-DM(Spring Dynamic Modules),这是一个为OSGi(Open Services Gateway Initiative)环境提供的扩展,使得在OSGi容器中使用Spring框架变得更加简便。Spring-DM在2008年1月29日发布了1.0版本,其稳定性...

    JMX.rar_jmx_osgi

    Connectors则提供了与MBeans交互的接口,允许远程或本地客户端连接到MBeans Server。 2. **MBean类型**:MBeans有三种类型:Standard MBeans、Dynamic MBeans和Open MBeans。Standard MBeans通过接口定义其管理属性...

    OSGI AND EQUINOX

    OSGi最初是为了满足嵌入式设备的需求而设计的,如家庭网关和机顶盒等。自诞生以来,OSGi迅速发展,经过多次重大修订和完善,逐渐形成了一个成熟的模块化运行时规范。这一规范不仅覆盖了基础的服务,还涉及到了不同的...

    httpcomponents-client-4.1.2-osgi-bin.tar.gz

    1. `httpclient-osgi.jar`:这是HttpClient的核心模块,封装了HTTP客户端接口和实现。 2. `httpcore-osgi.jar`:HttpClient依赖于HttpCore,这是一个轻量级的HTTP协议处理库。 3. `httpmime-osgi.jar`:用于处理MIME...

    OSGi 分布式通讯组件 R-OSGi

    R-OSGi,即Remote OSGi,是OSGi框架的一个扩展,它为分布式通信提供了一种强大的解决方案。在Java开发中,R-OSGi允许服务在不同的OSGi容器之间进行交互,从而实现跨网络的分布式系统。 **OSGi基础概念** 1. **模块...

    面向普适计算环境的Android平台服务编排框架.pdf

    5. **OSGi Felix框架集成**:为了实现A SOF,文章中提到了基于OSGi Felix框架的标准实现。OSGi是一种服务导向的模块化系统,它允许在运行时动态地发现、组合和管理服务,非常适合用于服务编排。 6. **案例验证**:...

    openstack4j-3.0.3.zip

    2. **OSGi框架**:理解OSGi的核心概念,如服务、模块(bundle)和依赖管理,是掌握Blended的关键。OSGi允许动态加载、卸载和更新组件,从而实现更灵活的系统架构。 3. **集成测试**:Blended强调在测试过程中使用...

Global site tag (gtag.js) - Google Analytics