/***************************************************************************** * Copyright (c) 2006-2013, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. *****************************************************************************/ package org.eclipse.buckminster.core.cspecext.builder; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import org.eclipse.buckminster.core.cspec.builder.CSpecBuilder; import org.eclipse.buckminster.core.cspec.model.TopLevelAttribute; import org.eclipse.buckminster.core.cspecext.model.AlterAttribute; import org.eclipse.buckminster.core.cspecext.model.AlterDependency; import org.eclipse.buckminster.core.cspecext.model.CSpecExtension; import org.eclipse.core.runtime.CoreException; /** * @author Thomas Hallgren */ public class AlterCSpecBuilder { private final CSpecBuilder baseBuilder; private final HashSet<String> removedDependencies = new HashSet<String>(); private final HashSet<String> removedAttributes = new HashSet<String>(); private final Map<String, String> renamedAttributes = new HashMap<String, String>(); private final Map<String, AlterAttributeBuilder> alteredAttributes = new HashMap<String, AlterAttributeBuilder>(); private final Map<String, AlterDependencyBuilder> alteredDependencies = new HashMap<String, AlterDependencyBuilder>(); private String name; public AlterCSpecBuilder(CSpecBuilder baseBuilder) { this.baseBuilder = baseBuilder; } public void addAlterAttribute(AlterAttributeBuilder value) { alteredAttributes.put(value.getName(), value); } public void addAlterDependency(AlterDependencyBuilder value) { alteredDependencies.put(value.getName(), value); } public void addRemoveAttribute(String key) { removedAttributes.add(key); } public void addRemoveDependency(String key) { removedDependencies.add(key); } public void addRenameAttribute(String oldName, String newName) { renamedAttributes.put(oldName, newName); } public void clear() { removedAttributes.clear(); renamedAttributes.clear(); alteredAttributes.clear(); removedDependencies.clear(); alteredDependencies.clear(); baseBuilder.clear(); name = null; } public CSpecExtension createAlteredCSpec() throws CoreException { HashMap<String, AlterAttribute<? extends TopLevelAttribute>> alterAttributes = new HashMap<String, AlterAttribute<? extends TopLevelAttribute>>( alteredAttributes.size()); for (Map.Entry<String, AlterAttributeBuilder> entry : alteredAttributes.entrySet()) alterAttributes.put(entry.getKey(), entry.getValue().createAlterAttribute()); HashMap<String, AlterDependency> alterDependencies = new HashMap<String, AlterDependency>(alteredDependencies.size()); for (Map.Entry<String, AlterDependencyBuilder> entry : alteredDependencies.entrySet()) alterDependencies.put(entry.getKey(), entry.getValue().createAlterDependency()); return new CSpecExtension(baseBuilder.createCSpec(), removedDependencies, alterDependencies, removedAttributes, renamedAttributes, alterAttributes); } public CSpecBuilder getBaseBuilder() { return baseBuilder; } public final String getName() { return name; } public void setName(String name) { this.name = name; } }