blob: f9778051364a9f43cd45d0b8e01945dd0d95f79b [file] [log] [blame]
//------------------------------------------------------------------------------
// 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();
}
}
}