一个接口多个实现

-----------------------------------------
 接口的实现部分
-------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.cvicse.usap.framework.views.MyAccordionView">
   <implementation class="com.cvicse.usap.framework.views.MyAccordionView"/>
   <service>
      <provide interface="com.cvicse.usap.framework.myapplication.api.IMyAccordionView"/>
   </service>
</scr:component>


-------------------------------------------
类com.cvicse.usap.framework.MyVappcation
-------------------------------------------

------------------------------------
  实现类中引入了其他的service
------------------------------------

  <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="myVapplication" factory='vaadin.app'>
   <implementation class="com.cvicse.usap.framework.MyVappcation"/>
   <reference bind="bindAccordionTab" cardinality="0..n" interface="com.cvicse.usap.framework.myapplication.api.IMyAccordionView" name="com.cvicse.usap.framework.myapplication.api.IMyAccordionView" policy="dynamic" unbind="unbindAccordionTab"/>
   <reference bind="bindTabsheetTab" cardinality="0..n" interface="com.cvicse.usap.framework.myapplication.api.IMyTabsheetView" name="com.cvicse.usap.framework.myapplication.api.IMyTabsheetView" policy="dynamic" unbind="unbindTabsheetTab"/>
 
</scr:component>

------------------------------------
   定义了一个集合
------------------------------------

// 左侧导航菜单内容集合--单例对象--小心使用
    public List<IAccordionView> accordionContributions = Collections
            .synchronizedList(new ArrayList<IAccordionView>());



------------------------------------------------------------------------------------------------------------
 bind="bindAccordionTab" 对应的方法。 bind是指bundle加载时注册用的也就是向集合中增加实现的方法。
 如果有多个实现,该方法会被调用多次。
------------------------------------------------------------------------------------------------------------

    /**
     * 注册左侧Accordion菜单
     *
     * @param accordionView
     */
    public void bindAccordionTab(IAccordionView accordionView) {
        // 将要绑定的菜单页加入集合中
        accordionContributions.add(accordionView);
        // Component component = accordionView.getView(this);

        if (initialized) {
            try {
                // TODO 从OSGI DS 获取
                Component component = accordionView.getView(this);

                // 判断权限,如果有权限,就增加到导航菜单
                if (getSecurity().isPermitted(accordionView.getResourceURI())) {
                    accordionComponentMap.put(accordionView.getResourceURI(),
                            component);
                    doAccordionClick(component);

                    if (null == accordionView.getIconPathType()) {
                        homeScreen.getNavigationAccorion().addTab(component,
                                accordionView.getName(), null);
                    } else if (accordionView.THEME_RESOURCE
                            .equals(accordionView.getIconPathType())) {
                        homeScreen.getNavigationAccorion().addTab(component,
                                accordionView.getName(),
                                new ThemeResource(accordionView.getIconPath()));
                    } else {
                        homeScreen.getNavigationAccorion().addTab(
                                component,
                                accordionView.getName(),
                                new ClassResource(accordionView.getClass(),
                                        accordionView.getIconPath(), this));
                    }

                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
 

猜你喜欢

转载自marsvaadin.iteye.com/blog/1418373
今日推荐