package de.FeatureModellingTool.Customize.store;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import component.FComponent;
import de.FeatureModellingTool.Customize.Customization;
import de.FeatureModellingTool.Customize.CustomizationModel;
import de.FeatureModellingTool.Customize.CustomizationModelImplementation;
import de.FeatureModellingTool.Customize.CustomizationVersion;
import de.FeatureModellingTool.Customize.CustomizationModelImplementation.CustomizationVersionImplementation;
public class CmdlParserPrototype implements CmdlParser {
public String getCustomizationVersionFileName(String id) {
return "CustomizationVersion-" + id + ".xml";
}
public Collection<String> openCustomizationVersionIds(
InputStream inputstream) throws IOException, JDOMException {
Collection<String> result = new LinkedList<String>();
Namespace cmd = Namespace.getNamespace("cmd",
"http://sei.pku.edu.cn/DomainEngineering/customizationmodel");
SAXBuilder saxBuilder = new SAXBuilder(false);
Document doc = saxBuilder.build(inputstream);
Element root = doc.getRootElement();
for (Iterator itVersion = root.getChildren(
"customizationVersion", cmd).iterator(); itVersion
.hasNext();) {
Element version = (Element) itVersion.next();
String id = version.getAttributeValue("id");
result.add(id);
}
return result;
}
public void openCustomizationVersion(InputStream inputstream,
FComponent featureModel) throws IOException, JDOMException {
CustomizationModelImplementation cmi = (CustomizationModelImplementation)featureModel.getInterface(de.FeatureModellingTool.FeatureModel.Manager.CUSTOMIZATION_MODEL_INTERFACE);
Namespace cmd = Namespace.getNamespace("cmd",
"http://sei.pku.edu.cn/DomainEngineering/customizationversion");
SAXBuilder saxBuilder = new SAXBuilder(false);
Document doc = saxBuilder.build(inputstream);
Element root = doc.getRootElement();
CustomizationVersion result = cmi.newCustomizationVersion(root.getAttributeValue("parentid") , root.getAttributeValue("id") , root.getAttributeValue("name") , root.getAttributeValue("bindingtimeid"));
for (Iterator itCustomization = root.getChildren(
"customization", cmd).iterator(); itCustomization.hasNext();) {
Element customization = (Element) itCustomization.next();
String id = customization.getAttributeValue("id");
String state = customization.getAttributeValue("state");
result.setCustomization(id, Customization.getInstance(state));
}
}
public void saveCustomizationModel(OutputStream outStream,
CustomizationModel cCustomizationModel) throws IOException,
JDOMException {
Namespace xsi = Namespace.getNamespace("xsi",
"http://www.w3.org/2001/XMLSchema-instance");
Namespace cmd = Namespace.getNamespace("cmd",
"http://sei.pku.edu.cn/DomainEngineering/customizationmodel");
Document doc = new Document(new Element("root", cmd));
Element root = doc.getRootElement();
root
.setAttribute(
"schemaLocation",
"http://sei.pku.edu.cn/DomainEngineering/customizationmodel customizationmodel.xsd",
xsi);
for (Iterator<String> itVersionId = cCustomizationModel
.getCustomizationVersionIds().iterator(); itVersionId.hasNext();) {
Element version = new Element("customizationVersion", cmd);
version.setAttribute("id" , itVersionId.next());
root.addContent(version);
}
XMLOutputter fmt = new XMLOutputter(" ", true, "GB2312");
fmt.output(doc, outStream);
}
public void saveCustomizationVersion(OutputStream outStream,
CustomizationVersion customizationVersion) throws IOException,
JDOMException {
Namespace xsi = Namespace.getNamespace("xsi",
"http://www.w3.org/2001/XMLSchema-instance");
Namespace cmd = Namespace.getNamespace("cmd",
"http://sei.pku.edu.cn/DomainEngineering/customizationversion");
Document doc = new Document(new Element("CustomizationVersion", cmd));
Element root = doc.getRootElement();
root
.setAttribute(
"schemaLocation",
"http://sei.pku.edu.cn/DomainEngineering/CustomizationVersion CustomizationVersion.xsd",
xsi);
root.setAttribute("id", customizationVersion.getId());
root.setAttribute("name", customizationVersion.getName());
root.setAttribute("parentid", customizationVersion.getParent() == null ? "" : customizationVersion.getParent().getId());
root.setAttribute("bindingtimeid", customizationVersion.getBindingTime().getName());
for (Iterator<String> itKey = customizationVersion.getCustomizationIds()
.iterator(); itKey.hasNext();) {
String id = itKey.next();
String name = customizationVersion.getCustomizationById(id)
.getName();
Element customization = new Element("customization", cmd);
customization.setAttribute("id" , id);
customization.setAttribute("state" , name);
root.addContent(customization);
}
XMLOutputter fmt = new XMLOutputter(" ", true, "GB2312");
fmt.output(doc, outStream);
}
protected static String _encode(String in) {
String out = in;
out = out.replaceAll("\u0020", "#x20");
out = out.replaceAll("\u0009", "#x09");
out = out.replaceAll("\n", "#x0a");
out = out.replaceAll("\r", "#x0d");
return out;
}
}