blob: 3dacf08f42efadbe05d38a2acea74d186acdf904 [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.LinkedHashMap;
import java.util.Map;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.VariabilityElement;
/**
* realized feature value for a to-one feature
*
* @author Jinhua Xi
* @since 1.0
*
*/
public class ToOneFeatureValue extends FeatureValue {
// map of element and the value
LinkedHashMap valueMap = new LinkedHashMap();
/**
* construct the object for a to-one feature value
* @param element
* @param ownerElement
* @param feature
* @param realizer
*/
public ToOneFeatureValue(MethodElement element, MethodElement ownerElement, Object feature, ElementRealizer realizer) {
super(element, ownerElement, feature, realizer);
}
/**
* @see org.eclipse.epf.library.configuration.FeatureValue#add(VariabilityElement, Object)
*/
public void add(VariabilityElement owner, Object value) {
if ( (value == null) || !(value instanceof MethodElement) ) {
return;
}
// since this is a to one association, if the base of the owner already has one,
// no contributing value should be added
// 172602 - Variability: Primary role missing in the transitive case of contributing tasks
if ( ConfigurationHelper.isContributor(owner) ) {
VariabilityElement base = owner.getVariabilityBasedOnElement();
if ( base != null && valueMap.containsKey(base) ) {
return;
}
}
//MethodElement e = super.realizer.realize((MethodElement)value);
MethodElement e = ConfigurationHelper.getCalculatedElement((MethodElement)value, super.realizer);
if ( e != null ) {
Object key = (owner==null) ? element : owner;
if ( !valueMap.containsKey(key) ) {
valueMap.put(key, e);
}
}
}
/**
* @see org.eclipse.epf.library.configuration.FeatureValue#getValue()
*/
public Object getValue() {
Object v = null;
if ( size() == 0 ) {
return v;
}
Object[] entries = valueMap.entrySet().toArray();
if ( size() == 1 ) {
// if just one entry, return it
v = ((Map.Entry)entries[0]).getValue();
} else {
// if more than one entry, if the first entry is from the element itself, then return the value
// otherwise, return null
Map.Entry entry = (Map.Entry)entries[0];
if ( entry.getKey() == super.element ) {
v = entry.getValue();
}
}
if ( isExtendReplaceEnabled() ) {
if ( isBlankIndicator(v) ) {
// remove the _NULL_ item. that is used as an indicator to blank out the base
// for the extend-replace
v = null;
}
}
return v;
}
public int size() {
return valueMap.size();
}
}