/*******************************************************************************
* 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.parser;
import java.net.URL;
import org.eclipse.buckminster.core.mspec.builder.MaterializationSpecBuilder;
import org.eclipse.buckminster.core.mspec.model.MaterializationSpec;
import org.eclipse.buckminster.sax.AbstractHandler;
import org.eclipse.buckminster.sax.ChildHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Thomas Hallgren
*/
public class MaterializationSpecHandler extends MaterializationDirectiveHandler {
public static final String TAG = MaterializationSpec.TAG;
private final URL contextURL;
public MaterializationSpecHandler(AbstractHandler parent, URL contextURL) {
super(parent, TAG, new MaterializationSpecBuilder());
this.contextURL = contextURL;
}
@Override
public ChildHandler createHandler(String uri, String localName, Attributes attrs) throws SAXException {
ChildHandler ch;
if (MaterializationNodeHandler.TAG.equals(localName))
ch = new MaterializationNodeHandler(this, ((MaterializationSpecBuilder) getBuilder()).addNodeBuilder());
else
ch = super.createHandler(uri, localName, attrs);
return ch;
}
public MaterializationSpec getMaterializationSpec() {
return new MaterializationSpec((MaterializationSpecBuilder) getBuilder());
}
@Override
public void handleAttributes(Attributes attrs) throws SAXException {
super.handleAttributes(attrs);
MaterializationSpecBuilder builder = (MaterializationSpecBuilder) getBuilder();
builder.setContextURL(contextURL);
builder.setName(getStringValue(attrs, MaterializationSpec.ATTR_NAME));
builder.setShortDesc(getOptionalStringValue(attrs, MaterializationSpec.ATTR_SHORT_DESC));
builder.setURL(getStringValue(attrs, MaterializationSpec.ATTR_URL));
}
}