/******************************************************************************* * 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.mspec.model; import java.util.regex.Pattern; import org.eclipse.buckminster.core.mspec.IMaterializationNode; import org.eclipse.buckminster.core.mspec.builder.MaterializationNodeBuilder; import org.eclipse.buckminster.osgi.filter.Filter; import org.eclipse.buckminster.sax.Utils; import org.eclipse.core.runtime.IPath; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; /** * @author Thomas Hallgren */ public class MaterializationNode extends MaterializationDirective implements IMaterializationNode { public static final String TAG = "mspecNode"; //$NON-NLS-1$ public static final String ATTR_NAME_PATTERN = "namePattern"; //$NON-NLS-1$ public static final String ATTR_FILTER = "filter"; //$NON-NLS-1$ public static final String ATTR_LEAF_ARTIFACT = "leafArtifact"; //$NON-NLS-1$ public static final String ATTR_COMPONENT_TYPE = "componentType"; //$NON-NLS-1$ public static final String ATTR_EXCLUDE = "exclude"; //$NON-NLS-1$ public static final String ATTR_RESOURCE_PATH = "resourcePath"; //$NON-NLS-1$ public static final String ATTR_BINDING_NAME_PATTERN = "bindingNamePattern"; //$NON-NLS-1$ public static final String ATTR_BINDING_NAME_REPLACEMENT = "bindingNameReplacement"; //$NON-NLS-1$ public static final String ELEM_UNPACK = "unpack"; //$NON-NLS-1$ public static final String ATTR_SUFFIX = "suffix"; //$NON-NLS-1$ public static final String ATTR_EXPAND = "expand"; //$NON-NLS-1$ private final Pattern namePattern; private final Filter filter; private final IPath leafArtifact; private final String componentTypeID; private final boolean exclude; private final IPath resourcePath; private final Pattern bindingNamePattern; private final String bindingNameReplacement; private final String suffix; private final boolean unpack; private final boolean expand; public MaterializationNode(MaterializationNodeBuilder builder) { super(builder); namePattern = builder.getNamePattern(); filter = builder.getFilter(); leafArtifact = builder.getLeafArtifact(); componentTypeID = builder.getComponentTypeID(); exclude = builder.isExclude(); resourcePath = builder.getResourcePath(); bindingNamePattern = builder.getBindingNamePattern(); bindingNameReplacement = builder.getBindingNameReplacement(); suffix = builder.getSuffix(); unpack = builder.isUnpack(); expand = builder.isExpand(); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Object getAdapter(Class adapter) { if (adapter.isAssignableFrom(MaterializationNodeBuilder.class)) { MaterializationNodeBuilder bld = new MaterializationNodeBuilder(); bld.initFrom(this); return bld; } return super.getAdapter(adapter); } @Override public Pattern getBindingNamePattern() { return bindingNamePattern; } @Override public String getBindingNameReplacement() { return bindingNameReplacement; } @Override public String getComponentTypeID() { return componentTypeID; } @Override public String getDefaultTag() { return TAG; } @Override public Filter getFilter() { return filter; } @Override public IPath getLeafArtifact() { return leafArtifact; } @Override public Pattern getNamePattern() { return namePattern; } @Override public IPath getResourcePath() { return resourcePath; } @Override public String getSuffix() { return suffix; } @Override public boolean isExclude() { return exclude; } @Override public boolean isExpand() { return expand; } @Override public boolean isUnpack() { return unpack; } @Override protected void addAttributes(AttributesImpl attrs) throws SAXException { super.addAttributes(attrs); if (namePattern != null) Utils.addAttribute(attrs, ATTR_NAME_PATTERN, namePattern.toString()); if (filter != null) Utils.addAttribute(attrs, ATTR_FILTER, filter.toString()); if (componentTypeID != null) Utils.addAttribute(attrs, ATTR_COMPONENT_TYPE, componentTypeID); if (leafArtifact != null) Utils.addAttribute(attrs, ATTR_LEAF_ARTIFACT, leafArtifact.toPortableString()); if (resourcePath != null) Utils.addAttribute(attrs, ATTR_RESOURCE_PATH, resourcePath.toPortableString()); if (exclude) Utils.addAttribute(attrs, ATTR_EXCLUDE, "true"); //$NON-NLS-1$ if (bindingNamePattern != null) Utils.addAttribute(attrs, ATTR_BINDING_NAME_PATTERN, bindingNamePattern.toString()); if (bindingNameReplacement != null) Utils.addAttribute(attrs, ATTR_BINDING_NAME_REPLACEMENT, bindingNameReplacement); } @Override protected void emitElements(ContentHandler receiver, String namespace, String prefix) throws SAXException { super.emitElements(receiver, namespace, prefix); if (unpack) { AttributesImpl attrs = new AttributesImpl(); if (!expand) Utils.addAttribute(attrs, ATTR_EXPAND, "false"); //$NON-NLS-1$ if (suffix != null) Utils.addAttribute(attrs, ATTR_SUFFIX, suffix); String qName = Utils.makeQualifiedName(prefix, ELEM_UNPACK); receiver.startElement(namespace, ELEM_UNPACK, qName, attrs); receiver.endElement(namespace, ELEM_UNPACK, qName); } } }