//------------------------------------------------------------------------------
// 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.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.VariabilityElement;
/**
* realized feature value for a toMany feature
*
* @author Jinhua Xi
* @since 1.0
*
*/
public class ToManyFeatureValue extends FeatureValue {
List values = new ArrayList();
/**
* @see org.eclipse.epf.library.configuration.FeatureValue#FeatureValue(MethodElement, MethodElement, Object, ElementRealizer)
* @param element
* @param ownerElement
* @param feature
* @param realizer
*/
public ToManyFeatureValue(MethodElement element, MethodElement ownerElement, Object feature, ElementRealizer realizer) {
super(element, ownerElement, feature, realizer);
}
/**
* add a feature value to the value list
* @param owner VariabilityElement
* @param value Object
*/
public void add(VariabilityElement owner, Object value) {
if ( !(value instanceof List) ) {
return;
}
HashSet seenValues = new HashSet(values);
for (Iterator it = ((List) value).iterator(); it.hasNext();) {
Object obj = it.next();
if ( obj instanceof MethodElement ) {
MethodElement e = (MethodElement) obj;
//MethodElement ce = realizer.realize(e);
MethodElement ce = ConfigurationHelper.getCalculatedElement(e, realizer);
// calculated element can be null if it can't show
if (ce != null && !seenValues.contains(ce)) {
values.add(ce);
seenValues.add(ce);
}
}
}
if ( (owner instanceof ContentElement)
&& (feature == UmaPackage.eINSTANCE
.getContentDescription_Sections())) {
ConfigurationHelper.orderSections((ContentElement) owner, values);
}
}
/**
* get the realized value
* @return Object
*/
public Object getValue() {
if ( isExtendReplaceEnabled() ) {
List items = new ArrayList();
// remove the _NULL_ item. that is used as an indicator to blank out the base
// for the extend-replace
for (Iterator it = values.iterator(); it.hasNext(); ) {
Object o = (Object) it.next();
if ( isBlankIndicator(o) ) {
continue;
}
items.add(o);
}
return items;
}
return values;
}
/**
* get the size of the value list.
*/
public int size() {
return values.size();
}
}