blob: b5d63362ef22024e001b638dfb907ef03de965bb [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.layout.elements;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.configuration.ConfigurationHelper;
import org.eclipse.epf.library.configuration.ElementRealizer;
import org.eclipse.epf.library.edit.util.Comparators;
import org.eclipse.epf.library.layout.ElementLayoutManager;
import org.eclipse.epf.library.layout.IElementLayout;
import org.eclipse.epf.library.layout.diagram.MethodElementDiagram;
import org.eclipse.epf.library.layout.diagram.RoleDiagramPublisher;
import org.eclipse.epf.library.layout.util.XmlElement;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.WorkProduct;
import org.eclipse.epf.uma.ecore.util.OppositeFeature;
import org.eclipse.epf.uma.util.AssociationHelper;
/**
* The element layout for a Role.
*
* @author Jinhua Xi
* @author Kelvin Low
* @author Weiping Lu
* @since 1.0
*/
public class RoleLayout extends AbstractElementLayout {
protected Map referenceMap = new HashMap();
public RoleLayout() {
super();
}
public void init(ElementLayoutManager layoutManager, MethodElement element) {
super.__init(layoutManager, element);
}
/**
* @see org.eclipse.epf.library.layout.IElementLayout#getXmlElement(boolean)
*/
public XmlElement getXmlElement(boolean includeReferences) {
XmlElement elementXml = super.getXmlElement(includeReferences);
if (includeReferences) {
List performs = ConfigurationHelper.calc0nFeatureValue(
super.element, AssociationHelper.Role_Primary_Tasks,
layoutManager.getElementRealizer());
referenceMap.put("performs", performs); //$NON-NLS-1$
// NO, this is wrong! should calculate the realized feature value!
// moved to acceptFeatureValue to get the realized value and save to
// the map
// if (super.element instanceof RoleImpl)
// {
// referenceMap.put("responsibleFor",
// ((RoleImpl)super.element).getResponsibleFor());
// }
List additionallyPerforms = ConfigurationHelper.calc0nFeatureValue(
super.element, AssociationHelper.Role_Secondary_Tasks,
layoutManager.getElementRealizer());
// referenceMap.put("additionallyPerforms", additionallyPerforms);
// //$NON-NLS-1$
addReferences(AssociationHelper.Role_Secondary_Tasks, elementXml,
"additionallyPerforms", additionallyPerforms); //$NON-NLS-1$
RoleDiagramPublisher diagramPublisher = new RoleDiagramPublisher();
MethodElementDiagram diagram = diagramPublisher.publish(this,
new File(layoutManager.getPublishDir()));
if (diagram != null)
elementXml.setContent("diagram", diagram.getHTML()); //$NON-NLS-1$
List roleSets = ConfigurationHelper.calc0nFeatureValue(
super.element, AssociationHelper.Role_RoleSets,
layoutManager.getElementRealizer());
addReferences(AssociationHelper.Role_RoleSets, elementXml,
"roleSets", roleSets); //$NON-NLS-1$
// add the descriptors referencing this element
super.processDescriptors(elementXml);
}
elementXml.setAttribute("ShowFullMethodContent", (layoutManager.getValidator().showExtraInfoForDescriptors()) ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return elementXml;
}
public List getPerforms() {
List list = (List) referenceMap.get("performs"); //$NON-NLS-1$
Collections.sort(list, Comparators.PRESENTATION_NAME_COMPARATOR);
return list;
}
public List getAdditionallyPerforms() {
List list = (List) referenceMap.get("additionallyPerforms"); //$NON-NLS-1$
Collections.sort(list, Comparators.PRESENTATION_NAME_COMPARATOR);
return list;
}
public List getResponsibleFor() {
List list = (List) referenceMap.get("responsibleFor"); //$NON-NLS-1$
Collections.sort(list, Comparators.PRESENTATION_NAME_COMPARATOR);
return list;
}
public List getModifies() {
List list = (List) referenceMap.get("modifies"); //$NON-NLS-1$
Collections.sort(list, Comparators.PRESENTATION_NAME_COMPARATOR);
return list;
}
/**
* some layout need to have the feature values for further processing. So
* this method will be called when a feature is calculated in this abstract
* class
*
* @param name
* @param value
*/
protected void notifyFeatureValue(String name, Object value) {
referenceMap.put(name, value);
}
/**
* some layout need to have the feature values for further processing. So
* this method will be called when a feature is calculated in this abstract
* class
*
* @param name
* @param value
*/
protected boolean acceptFeatureValue(EStructuralFeature feature,
Object value) {
// save the feature value for diagram generation
if (feature == UmaPackage.eINSTANCE.getRole_ResponsibleFor()) {
referenceMap.put("responsibleFor", value); //$NON-NLS-1$
}
return super.acceptFeatureValue(feature, value);
}
protected boolean acceptFeatureValue(OppositeFeature feature, Object value) {
return super.acceptFeatureValue(feature, value);
}
protected void processGrandChild(Object feature,
MethodElement childElememt, IElementLayout childLayout,
XmlElement childXmlElement) {
if (!(childLayout instanceof WorkProductLayout)
|| childXmlElement == null
|| !(childElememt instanceof WorkProduct)) {
return;
}
if (! ((WorkProduct)childElememt).getIsAbstract()) {
return;
}
WorkProductLayout wpChildLayout = (WorkProductLayout) childLayout;
ElementRealizer realizer = wpChildLayout.layoutManager
.getElementRealizer();
if (feature == UmaPackage.eINSTANCE.getRole_ResponsibleFor() ||
feature == UmaPackage.eINSTANCE.getRole_Modifies()) {
OppositeFeature oFulfillingFeature = AssociationHelper.FulFills_FullFillableElements;
List items = wpChildLayout.calc0nFeatureValue(childElememt, oFulfillingFeature, realizer);
wpChildLayout.addReferences(oFulfillingFeature, childXmlElement, oFulfillingFeature
.getName(), items);
}
}
}