/* * Lokomo OneCMDB - An Open Source Software for Configuration * Management of Datacenter Resources * * Copyright (C) 2006 Lokomo Systems AB * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via * paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33 * Danderyd, Sweden. * */ package org.onecmdb.ui.gwt.desktop.server.service.model.mdr; import java.io.File; import java.io.StringReader; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.onecmdb.core.utils.bean.CiBean; import org.onecmdb.ui.gwt.desktop.client.service.model.AttributeModel; import org.onecmdb.ui.gwt.desktop.client.service.model.CIModel; import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.TransformConfig; import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.transform.AttributeSelectorModel; import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.transform.DataSetModel; import org.onecmdb.ui.gwt.desktop.client.service.model.mdr.transform.TransformModel; import org.onecmdb.ui.gwt.desktop.server.service.change.ICIMDR; import org.onecmdb.ui.gwt.desktop.server.service.model.Transform; import org.onecmdb.utils.xml.XMLUtils; public class TransformConverter { private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; private static final String TRANSFORM_HEAD = "<onecmdb-transform"; private static final String TRANSFORM_FOOTER = "</onecmdb-transform>"; public static String toXML(String sourceType, TransformModel transform) { StringBuffer buffer = new StringBuffer(); buffer.append(XML_HEADER); buffer.append("\n"); buffer.append(TRANSFORM_HEAD + " name=\"" + transform.getName() + "\">"); buffer.append("\n"); for (DataSetModel ds : transform.getDataSets()) { CIModel model = ds.getTemplate(); if (model == null) { continue; } // Don't add emtpy dataset's if (ds.getAttributeSelector() == null || ds.getAttributeSelector().size() == 0) { continue; } String name = ds.getName(); buffer.append("\t<DataSet name=\"" + name + "\">"); buffer.append("\n"); buffer.append("\t\t<InstanceSelector template=\"" + model.getAlias() + "\"/>"); buffer.append("\n"); for (AttributeSelectorModel as : ds.getAttributeSelector()) { AttributeModel a = as.getAttribute(); if (a == null) { continue; } as.isNaturalKey(); if (a.isComplex()) { buffer.append("\t\t\t<ComplexAttributeSelector name=\"" + a.getAlias() + "\" naturalKey=\"" + as.isNaturalKey() + "\" dataSet=\"" + as.getSelector() + "\"/>"); } else { String type = as.getSelectorType(); if (AttributeSelectorModel.AS_TYPE_VALUE.equals(type)) { buffer.append("\t\t\t<DefaultAttributeSelector name=\"" + a.getAlias() + "\" naturalKey=\"" + as.isNaturalKey() + "\" value=\"" + as.getValue() + "\"/>"); } else { String selector = "selector"; if (as.isUseSelectorName()) { selector = "selectorName"; } buffer.append("\t\t\t<AttributeSelector name=\"" + a.getAlias() + "\" naturalKey=\"" + as.isNaturalKey() + "\" " + selector +"=\"" + as.getSelector() + "\"/>"); } } buffer.append("\n"); } buffer.append("\t</DataSet>"); buffer.append("\n"); /* <AttributeSelector name="rxSpeed" naturalKey="false" selector="5" /> <ComplexAttributeSelector name="partOf" naturalKey="true" dataSet="platform"/> */ } buffer.append(TRANSFORM_FOOTER); buffer.append("\n"); return(buffer.toString()); } public static TransformModel fromXML(String token, ICIMDR mdr, String content) throws DocumentException { TransformModel model = new TransformModel(); SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(content)); Element root = document.getRootElement(); String name = XMLUtils.getAttributeValue(null, root, "name", false); if (name != null && name.length() > 0) { model.setName(name); } for (Element el : (List<Element>)root.elements()) { if (el.getName().equals("DataSet")) { DataSetModel ds = parseDataSet(token, mdr, el); if (ds != null) { model.addDataSet(ds); } } } return(model); } private static DataSetModel parseDataSet(String token, ICIMDR mdr, Element root) { DataSetModel ds = new DataSetModel(); String name = XMLUtils.getAttributeValue(null, root, "name", false); ds.setName(name); // Handle Instance Selector Element ins = root.element("InstanceSelector"); if (ins == null) { return(ds); } String alias = XMLUtils.getAttributeValue(null, ins, "template", false); CiBean template = mdr.getCI(token, alias); // Convert to CIModel.... if (template == null) { return(ds); } Transform t = new Transform(); CIModel ci = t.convert(mdr, token, template, template); ds.setTemplate(ci); for (Element el : (List<Element>)root.elements()) { if (el.getName().equals("AttributeSelector")) { AttributeSelectorModel as = getASModel(el, ci); String selector = XMLUtils.getAttributeValue(null, el, "selector", false); as.setUseSelectorName(false); if (selector == null) { selector = XMLUtils.getAttributeValue(null, el, "selectorName", false); as.setUseSelectorName(true); } as.setSelector(selector); as.setSelectorType(AttributeSelectorModel.AS_TYPE_SELECTOR); ds.addAttributeSelector(as); } if (el.getName().equals("ComplexAttributeSelector")) { AttributeSelectorModel as = getASModel(el, ci); String dataSet = XMLUtils.getAttributeValue(null, el, "dataSet", false); as.setSelector(dataSet); ds.addAttributeSelector(as); } if (el.getName().equals("DefaultAttributeSelector")) { AttributeSelectorModel as = getASModel(el, ci); String value = XMLUtils.getAttributeValue(null, el, "value", false); as.setValue(value); as.setSelectorType(AttributeSelectorModel.AS_TYPE_VALUE); ds.addAttributeSelector(as); } } return(ds); } private static AttributeSelectorModel getASModel(Element el, CIModel ci) { AttributeSelectorModel as = new AttributeSelectorModel(); String naturalKey = XMLUtils.getAttributeValue(null, el, "naturalKey", false); String attAlias = XMLUtils.getAttributeValue(null, el, "name", false); AttributeModel at = ci.getAttribute(attAlias); as.setNaturalKey("true".equals(naturalKey)); as.setAttribute(at); return(as); } }