FeaturedItemProviderAdapterFactory

简介:

如果想在viewer里过滤掉一些不需要的元素,除了直接修改XXXItemProvider(因为程序的其他地方也会用到这个类,修改它可能会带来问题),另一个办法是通过覆盖XXXItemProviderAdapterFactory,以使用自己继承自XXXItemProvider的ItemProvider,下面的例子是只显示一种类型的child:

/**
 * Adapter factory that only have one kind of child displayed
 * @author zhanghao
 *
 */
class FeaturedItemProviderAdapterFactory extends BMItemProviderAdapterFactory{
    EStructuralFeature feature;
    
    /**
     * @param feature
     */
    public FeaturedItemProviderAdapterFactory(EStructuralFeature feature) {
        super();
        this.feature = feature;
    }

    @Override
    public Adapter createBusinessModelAdapter() {
        if (businessModelItemProvider == null) {
            businessModelItemProvider = new FeaturedBusinessModelItemProvider(this, feature);
        }
        return businessModelItemProvider;
    }
    
    class FeaturedBusinessModelItemProvider extends BusinessModelItemProvider{
        EStructuralFeature feature;
        /**
         * @param adapterFactory
         */
        public FeaturedBusinessModelItemProvider(AdapterFactory adapterFactory, EStructuralFeature reference) {
            super(adapterFactory);
            this.feature=reference;
        }

        @Override
        public Collection getChildrenFeatures(Object object) {
            Collection collection = super.getChildrenFeatures(object);
            for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
                EStructuralFeature feature = (EStructuralFeature) iterator.next();
                if(this.feature != feature)
                    iterator.remove();
            }
            return childrenFeatures;
        }
    }
}

使用的时候一般还是要用ComposedAdapterFactory:

List list = new ArrayList();
list.add(new ResourceItemProviderAdapterFactory());
list.add(new FeaturedItemProviderAdapterFactory(BMPackage.Literals.BUSINESS_MODEL__ENTITIES));//提供一个feature作为参数
list.add(new ReflectiveItemProviderAdapterFactory());
ComposedAdapterFactory factory=new ComposedAdapterFactory(list);
entityViewer.setContentProvider(new AdapterFactoryContentProvider(factory));

注:另一个方法是:

viewer.setInput(new ItemProvider(model.getXXXChildren()));

但这样一些notification会得不到响应,例如新增一个XXX元素后,viewer没有得到刷新。

本文转自博客园八进制的博客,原文链接:FeaturedItemProviderAdapterFactory,如需转载请自行联系原博主。

相关文章
|
Java 应用服务中间件
Error:Unable to connect to the localhost:1099
Error:Unable to connect to the localhost:1099
274 0
|
自然语言处理 前端开发 JavaScript
【畅购电商】项目总结(一 )
【畅购电商】项目总结
245 0
50Linux - 系统管理(检测磁盘空间:df)
50Linux - 系统管理(检测磁盘空间:df)
33 0
|
缓存 网络协议 前端开发
浅谈 Web 前端性能优化
浅谈 Web 前端性能优化
169 1
|
弹性计算 负载均衡 监控
部署RDS 服务
前言:了解RDS服务和相关配置以及原理。
552 0
部署RDS 服务
|
iOS开发
iOS开发 - 数字跳变器
iOS开发 - 数字跳变器
88 0
iOS开发 - 数字跳变器
|
设计模式 Java Spring
CompletableFuture与Spring的Sleuth结合工具类
CompletableFuture与Spring的Sleuth结合工具类
|
存储 开发工具 git
Git避免多次输入账号密码
Git避免多次输入账号密码
|
弹性计算 Oracle Java
对于ECS的一次浅略尝试
对于ECS的一次简短尝试,总结了这个半个月对ECS的使用经历与方法,对土木工程的未来の思考
|
安全 Java 数据库
HTTP 认证
HTTP 认证
256 0