blob: 430ba9b66ce48578bdfcb9cb3754b38d8c1d30fb [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.configuration;
import java.util.List;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.epf.library.edit.IConfigurationApplicator;
import org.eclipse.epf.library.edit.util.ProcessUtil;
import org.eclipse.epf.uma.BreakdownElement;
import org.eclipse.epf.uma.ContentDescription;
import org.eclipse.epf.uma.DescribableElement;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.epf.uma.ecore.util.OppositeFeature;
/**
* @author Phong Nguyen Le
* @since 1.1
*/
public class ConfigurationApplicator implements IConfigurationApplicator {
public static final IConfigurationApplicator INSTANCE = new ConfigurationApplicator();
public Object getAttribute(VariabilityElement e, EAttribute attribute,
MethodConfiguration config) {
// special handling for presentation name of breakdown element
//
if(attribute == UmaPackage.eINSTANCE.getMethodElement_PresentationName()) {
if(e instanceof BreakdownElement) {
return ProcessUtil.getPresentationName((BreakdownElement) e);
}
else {
return ConfigurationHelper.getPresentationName(e, config);
}
}
return ConfigurationHelper.calcAttributeFeatureValue(e, attribute,
config);
}
public Object getReference(VariabilityElement e, EReference ref,
MethodConfiguration config) {
if (ConfigurationHelper.is0nFeature(ref)) {
return ConfigurationHelper.calc0nFeatureValue(e, ref,
DefaultElementRealizer.newElementRealizer(config));
} else if (ConfigurationHelper.is01Feature(ref)) {
return ConfigurationHelper.calc01FeatureValue(e, ref,
DefaultElementRealizer.newElementRealizer(config));
}
return null;
}
public Object getReference(ContentDescription desc,
DescribableElement owner, EReference ref, MethodConfiguration config) {
List values = ConfigurationHelper.calc0nFeatureValue(desc, owner, ref,
DefaultElementRealizer.newElementRealizer(config));
if (ref.isMany()) {
return values;
}
if (values.isEmpty())
return null;
return values;
}
public Object getReference(MethodElement element, OppositeFeature feature,
MethodConfiguration config) {
List values = ConfigurationHelper.calc0nFeatureValue(element, feature,
DefaultElementRealizer.newElementRealizer(config));
return values;
}
public Object resolve(Object object, MethodConfiguration config) {
if (object instanceof MethodElement) {
Object resolved = ConfigurationHelper.getCalculatedElement(
(MethodElement) object, config);
if (resolved == null) {
return object;
} else {
return resolved;
}
} else {
return object;
}
}
public Object getAttribute(ContentDescription desc,
DescribableElement owner, EAttribute attr,
MethodConfiguration config) {
return ConfigurationHelper.calcAttributeFeatureValue(desc, owner, attr,
config);
}
}