| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 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.category; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| |
| import com.ibm.uma.ContentCategory; |
| import com.ibm.uma.ContentPackage; |
| import com.ibm.uma.RoleSet; |
| import com.ibm.uma.RoleSetGrouping; |
| import com.ibm.uma.UmaFactory; |
| import com.ibm.uma.VariabilityElement; |
| import com.ibm.uma.util.AssociationHelper; |
| |
| /** |
| * @author Phong Nguyen Le |
| * @since 1.0 |
| */ |
| public class InheritedRoleSetPackageListener extends |
| InheritedCategoryPackageListener { |
| |
| /** |
| * @param pkg |
| */ |
| public InheritedRoleSetPackageListener(ContentPackage pkg) { |
| super(pkg); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.category.InheritedCategoryPackageListener#isEmpty(com.ibm.uma.ContentCategory) |
| */ |
| public boolean isEmpty(ContentCategory element) { |
| if (element instanceof RoleSetGrouping) { |
| for (Iterator iter = ((RoleSetGrouping) element).getRoleSets() |
| .iterator(); iter.hasNext();) { |
| RoleSet category = (RoleSet) iter.next(); |
| if (category.getVariabilityBasedOnElement() == null |
| || !category.getRoles().isEmpty()) { |
| return false; |
| } |
| } |
| return true; |
| } else if (element instanceof RoleSet) { |
| return ((RoleSet) element).getRoles().isEmpty(); |
| } |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.category.InheritedCategoryPackageListener#accept(java.lang.Object) |
| */ |
| public boolean accept(Object obj) { |
| return (obj instanceof RoleSetGrouping || obj instanceof RoleSet) |
| && ((ContentCategory) obj).getVariabilityBasedOnElement() == null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.category.InheritedCategoryPackageListener#createCategory(com.ibm.uma.ContentCategory) |
| */ |
| protected ContentCategory createCategory(ContentCategory targetCategory) { |
| if (targetCategory instanceof RoleSetGrouping) { |
| return UmaFactory.eINSTANCE.createRoleSetGrouping(); |
| } else if (targetCategory instanceof RoleSet) { |
| return UmaFactory.eINSTANCE.createRoleSet(); |
| } |
| return null; |
| } |
| |
| // /* (non-Javadoc) |
| // * @see |
| // com.ibm.library.edit.category.InheritedCategoryPackageListener#addInherited(com.ibm.uma.ContentCategory) |
| // */ |
| // protected void addInherited(ContentCategory targetCategory) { |
| // ContentCategory category = createInherited(targetCategory); |
| // ContentElement baseCategory = category.getVariabilityBasedOnElement(); |
| // if(baseCategory instanceof RoleSetGrouping) { |
| // RoleSetGrouping grouping = (RoleSetGrouping) category; |
| // for (Iterator iterator = |
| // ((RoleSetGrouping)baseCategory).getRoleSets().iterator(); |
| // iterator.hasNext();) { |
| // RoleSet element = (RoleSet) iterator.next(); |
| // grouping.getRoleSets().add(TngUtil.findInherited(categoryPackage.getContentElements(), |
| // element)); |
| // } |
| // } |
| // else if(baseCategory instanceof RoleSet) { |
| // RoleSet e = (RoleSet) category; |
| // for (Iterator iter = |
| // ((Discipline)baseCategory).getDisciplineGroups().iterator(); |
| // iter.hasNext();) { |
| // RoleSetGrouping element = (RoleSetGrouping) iter.next(); |
| // e.getRoleSetGroups().add(TngUtil.findInherited(categoryPackage.getContentElements(), |
| // element)); |
| // } |
| // } |
| // categoryPackage.getContentElements().add(category); |
| // |
| // } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.category.InheritedCategoryPackageListener#prepareInherited(java.util.Collection) |
| */ |
| protected void prepareInherited(Collection inheritedList) { |
| ArrayList categories = new ArrayList(inheritedList); |
| categories.addAll(categoryPackage.getContentElements()); |
| for (Iterator iter = inheritedList.iterator(); iter.hasNext();) { |
| ContentCategory category = (ContentCategory) iter.next(); |
| VariabilityElement baseCategory = category |
| .getVariabilityBasedOnElement(); |
| if (baseCategory instanceof RoleSetGrouping) { |
| RoleSetGrouping grouping = (RoleSetGrouping) category; |
| for (Iterator iterator = ((RoleSetGrouping) baseCategory) |
| .getRoleSets().iterator(); iterator.hasNext();) { |
| RoleSet element = (RoleSet) iterator.next(); |
| grouping.getRoleSets().add( |
| TngUtil.findInherited(categories, element)); |
| } |
| } else if (baseCategory instanceof RoleSet) { |
| RoleSet e = (RoleSet) category; |
| for (Iterator iterator = AssociationHelper.getRoleSetGroups( |
| (RoleSet) baseCategory).iterator(); iterator.hasNext();) { |
| RoleSetGrouping element = (RoleSetGrouping) iterator.next(); |
| // MethodLibraryHelper.getRoleSetGroups(e).add(TngUtil.findInherited(categories, |
| // element)); |
| RoleSetGrouping inherited = (RoleSetGrouping) TngUtil |
| .findInherited(categories, element); |
| if (inherited != null) { |
| inherited.getRoleSets().add(e); |
| } |
| } |
| } |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see com.ibm.library.edit.category.InheritedCategoryPackageListener#prepareRemove(com.ibm.uma.ContentCategory) |
| */ |
| protected void prepareRemove(ContentCategory element) { |
| if (element instanceof RoleSet) { |
| AssociationHelper.getRoleSetGroups((RoleSet) element).clear(); |
| } |
| } |
| |
| } |