| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2007 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.library.edit.process; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.common.util.UniqueEList; |
| import org.eclipse.emf.edit.provider.ITreeItemContentProvider; |
| import org.eclipse.epf.common.utils.StrUtil; |
| |
| /** |
| * @author Phong Nguyen Le |
| * |
| * @since 1.2 |
| */ |
| public class ComposedBreakdownElementWrapperItemProvider extends |
| BreakdownElementWrapperItemProvider { |
| private List values = new ArrayList(); |
| |
| /** |
| * @param value |
| * @param owner |
| * @param adapterFactory |
| */ |
| public ComposedBreakdownElementWrapperItemProvider(Object value, |
| Object owner, AdapterFactory adapterFactory) { |
| super(value, owner, adapterFactory); |
| addElement(value); |
| } |
| |
| public List getValues() { |
| return values; |
| } |
| |
| public void addElement(Object e) { |
| getValues().add(e); |
| } |
| |
| /** |
| * Decides if the values of the given property of all elements in this composed wrapper can be merged. |
| * @param property |
| * @return |
| */ |
| protected boolean canMerge(String property) { |
| return property == IBSItemProvider.COL_MODEL_INFO; |
| } |
| |
| @Override |
| public String getAttribute(Object object, String property) { |
| if(!values.isEmpty()) { |
| if(canMerge(property)) { |
| UniqueEList modelInfos = new UniqueEList(); |
| for (Iterator iter = values.iterator(); iter.hasNext();) { |
| Object o = iter.next(); |
| String info; |
| if(o instanceof IBSItemProvider) { |
| info = ((IBSItemProvider)o).getAttribute(o, property); |
| } |
| else { |
| IBSItemProvider ip = (IBSItemProvider) adapterFactory.adapt(o, ITreeItemContentProvider.class); |
| info = ip.getAttribute(o, property); |
| } |
| if(!StrUtil.isBlank(info)) { |
| modelInfos.add(info); |
| } |
| } |
| if(!modelInfos.isEmpty()) { |
| StringBuffer modelInfo = new StringBuffer((String)modelInfos.get(0)); |
| int max = modelInfos.size(); |
| for (int i = 1; i < max; i++) { |
| modelInfo.append(',').append(modelInfos.get(i)); |
| } |
| return modelInfo.toString(); |
| } |
| return ""; //$NON-NLS-1$ |
| } |
| } |
| return super.getAttribute(object, property); |
| } |
| |
| @Override |
| public boolean isInherited() { |
| for(int i = values.size() - 1; i > -1; i--) { |
| Object o = values.get(i); |
| if(!(o instanceof DescribableElementWrapperItemProvider) |
| || !((DescribableElementWrapperItemProvider)o).isInherited()) { |
| return false; |
| } |
| } |
| return true; |
| } |
| } |