//------------------------------------------------------------------------------ // 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; } }