package i5.las2peer.services.ocd.adapters.coverOutput; import java.util.Map; import i5.las2peer.services.ocd.adapters.AdapterException; import i5.las2peer.services.ocd.graphs.Cover; import i5.las2peer.services.ocd.metrics.OcdMetricLog; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * A cover output adapter for the meta XML format. * The output contains meta information about the cover in XML format, including the community count, but not the actual community structure or other community meta data. * @author Sebastian * */ public class MetaXmlCoverOutputAdapter extends AbstractCoverOutputAdapter { @Override public void writeCover(Cover cover) throws AdapterException { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document doc = builder.newDocument(); Element coverElt = doc.createElement("Cover"); doc.appendChild(coverElt); /* * Basic Attributes */ Element idElt = doc.createElement("Id"); Element coverIdElt = doc.createElement("CoverId"); coverIdElt.appendChild(doc.createTextNode(Long.toString(cover.getId()))); idElt.appendChild(coverIdElt); Element graphIdElt = doc.createElement("GraphId"); graphIdElt.appendChild(doc.createTextNode(Long.toString(cover.getGraph().getId()))); idElt.appendChild(graphIdElt); coverElt.appendChild(idElt); Element coverNameElt = doc.createElement("Name"); coverNameElt.appendChild(doc.createTextNode(cover.getName())); coverElt.appendChild(coverNameElt); // Element coverDescrElt = doc.createElement("Description"); // coverDescrElt.appendChild(doc.createTextNode(cover.getDescription())); // coverElt.appendChild(coverDescrElt); Element graphElt = doc.createElement("Graph"); Element graphNameElt = doc.createElement("Name"); graphNameElt.appendChild(doc.createTextNode(cover.getGraph().getName())); graphElt.appendChild(graphNameElt); coverElt.appendChild(graphElt); // Element lastUpdateElt = doc.createElement("LastUpdate"); // if(cover.getLastUpdate() != null) { // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss"); // lastUpdateElt.appendChild(doc.createTextNode(dateFormat.format(cover.getLastUpdate()))); // coverElt.appendChild(lastUpdateElt); // } /* * Creation Method */ Element creationMethodElt = doc.createElement("CreationMethod"); Element creationMethodTypeElt = doc.createElement("Type"); creationMethodTypeElt.appendChild(doc.createTextNode(cover.getCreationMethod().getType().name())); creationMethodElt.appendChild(creationMethodTypeElt); Element creationMethodStatusElt = doc.createElement("Status"); creationMethodStatusElt.appendChild(doc.createTextNode(cover.getCreationMethod().getStatus().name())); creationMethodElt.appendChild(creationMethodStatusElt); coverElt.appendChild(creationMethodElt); /* * Metrics */ Element metricsElt = doc.createElement("Metrics"); for(int i=0; i<cover.getMetrics().size(); i++) { OcdMetricLog metric = cover.getMetrics().get(i); Element metricElt = doc.createElement("Metric"); Element metricIdElt = doc.createElement("Id"); metricIdElt.appendChild(doc.createTextNode(Long.toString(metric.getId()))); metricElt.appendChild(metricIdElt); Element metricTypeElt = doc.createElement("Type"); metricTypeElt.appendChild(doc.createTextNode(metric.getType().name())); metricElt.appendChild(metricTypeElt); Element metricStatusElt = doc.createElement("Status"); metricStatusElt.appendChild(doc.createTextNode(metric.getStatus().name())); metricElt.appendChild(metricStatusElt); Element metricValueElt = doc.createElement("Value"); metricValueElt.appendChild(doc.createTextNode(Double.toString(metric.getValue()))); metricElt.appendChild(metricValueElt); /* * Metric Parameters */ Element metricParamsElt = doc.createElement("Parameters"); for(Map.Entry<String, String> entry: metric.getParameters().entrySet()) { Element metricParamElt = doc.createElement("Parameter"); Element metricParamNameElt = doc.createElement("Name"); metricParamNameElt.appendChild(doc.createTextNode(entry.getKey())); metricParamElt.appendChild(metricParamNameElt); Element metricParamValueElt = doc.createElement("Value"); metricParamValueElt.appendChild(doc.createTextNode(entry.getValue())); metricParamElt.appendChild(metricParamValueElt); metricParamsElt.appendChild(metricParamElt); } metricElt.appendChild(metricParamsElt); metricsElt.appendChild(metricElt); } coverElt.appendChild(metricsElt); /* * Communities */ Element communityCountElement = doc.createElement("CommunityCount"); communityCountElement.appendChild(doc.createTextNode(Integer.toString(cover.communityCount()))); coverElt.appendChild(communityCountElement); /* * XML output */ TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource domSource = new DOMSource(doc); StreamResult streamResult = new StreamResult(this.writer); transformer.transform(domSource, streamResult); } catch(Exception e) { throw new AdapterException(e); } } }