blob: 4c0fcc4427af4cb776ab59283bc3be7659753c2b [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.publishing.services;
import java.util.List;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.configuration.DefaultElementRealizer;
import org.eclipse.epf.library.configuration.ElementRealizer;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
/**
* Realizer for publishing.
* Realizes the element based on the configuration and realize options.
*
* @author Jinhua Xi
* @since 1.0
*/
public class PublishingElementRealizer extends DefaultElementRealizer {
PublishingContentValidator validator;
/**
* constructor
*
* @param config MethodConfiguration
* @param validator PublishingContentValidator
*/
protected PublishingElementRealizer(MethodConfiguration config, PublishingContentValidator validator) {
super(config);
this.validator = validator;
}
public static final ElementRealizer newPublishingElementRealizer(MethodConfiguration config,
PublishingContentValidator validator) {
PublishingElementRealizer realizer = (PublishingElementRealizer) createElementRealizerExtension(config, PublishingElementRealizer_Type);
if (realizer == null) {
realizer = new PublishingElementRealizer(config, null);
}
realizer.validator = validator;
return realizer;
}
/**
* realize the element
*
* @param element MethodElement
*/
public MethodElement realize(MethodElement element) {
element = super.realize(element);
if ( element == null ) {
return null;
}
// Publishing should not generate links to unpublished categories
if ( validator.isDiscarded(null, null, element) ) {
return null;
}
return element;
}
/**
* realize the list of feature values and returns a new list of values
* The new might be a re-sorting of the original list
* or some of the values can be filtered out, depending on the detail implementation
* Note: the list value passed in might be updated as well.
* @param element MethodElement
* @param feature EStructuralFeature
* @param values List
* @return List
*/
public List realize(MethodElement element,
EStructuralFeature feature, List values)
{
if ( values == null || values.size() == 0 ) {
return values;
}
List items = super.realize(element, feature, values);
if ( validator.hasClosure() ) {
int i = 0;
while ( i < items.size() ) {
MethodElement e = (MethodElement)items.get(i);
if ( validator.isDiscarded(null, feature, e) ) {
items.remove(i);
} else {
i++;
}
}
}
return items;
}
}