package hu.sztaki.ilab.longneck.bootstrap;
import hu.sztaki.ilab.longneck.process.FrameAddressResolver;
import hu.sztaki.ilab.longneck.process.LongneckPackage;
import hu.sztaki.ilab.longneck.process.LongneckProcess;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
*
* @author Molnár Péter <molnarp@sztaki.mta.hu>
*/
public class CompactProcess {
private final LongneckProcess process;
private final Repository repository;
private final Properties runtimeProperties;
private final FrameAddressResolver frameAddressResolver;
public CompactProcess(LongneckProcess process, Repository repository,
FrameAddressResolver frameAddressResolver, Properties runtimeProperties) {
this.process = process;
this.repository = repository;
this.frameAddressResolver = frameAddressResolver;
this.runtimeProperties = runtimeProperties;
}
public CompactProcess(LongneckProcess process, List<LongneckPackage> packages,
FrameAddressResolver frameAddressResolver, Properties runtimeProperties) {
this.process = process;
this.repository = new Repository(packages);
this.frameAddressResolver = frameAddressResolver;
this.runtimeProperties = runtimeProperties;
}
public Repository getRepository() {
return repository;
}
public LongneckProcess getProcess() {
return process;
}
public Properties getRuntimeProperties() {
return runtimeProperties;
}
public FrameAddressResolver getFrameAddressResolver() {
return frameAddressResolver;
}
public Document getDocument() throws ParserConfigurationException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
// Add root
Element root = doc.createElementNS(XMLDocumentLoader.NS, "compact-process");
doc.appendChild(root);
// Add properties
Element propertiesRoot = doc.createElement("runtime-properties");
root.appendChild(propertiesRoot);
for (Map.Entry entry : runtimeProperties.entrySet()) {
Element propertyElem = doc.createElement("property");
propertyElem.setAttribute("key", (String) entry.getKey());
propertyElem.appendChild(doc.createTextNode((String) entry.getValue()));
}
// Add process and required packages
root.appendChild(doc.importNode(process.getDomDocument().getDocumentElement(), true));
for (LongneckPackage pkg : repository.getSources()) {
root.appendChild(doc.importNode(pkg.getDomDocument().getDocumentElement(), true));
}
return doc;
}
}