org.drools.workbench.jcr2vfsmigration.xml.format.DataModelAssetFormat.java Source code

Java tutorial

Introduction

Here is the source code for org.drools.workbench.jcr2vfsmigration.xml.format.DataModelAssetFormat.java

Source

/*
 * Copyright 2014 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.drools.workbench.jcr2vfsmigration.xml.format;

import java.util.Date;
import java.util.Iterator;

import org.apache.commons.lang3.StringUtils;
import org.drools.workbench.jcr2vfsmigration.xml.model.asset.DataModelAsset;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import static org.drools.workbench.jcr2vfsmigration.xml.ExportXmlUtils.*;

public class DataModelAssetFormat extends XmlAssetFormat {

    private static final String MODEL_OBJ = "modelObject";
    private static final String MODEL_OBJ_NAME = "objName";
    private static final String MODEL_OBJ_SUPERTYPE = "objSuperType";

    private static final String MODEL_OBJ_PROP = "objProperty";
    private static final String MODEL_OBJ_PROP_NAME = "objPropName";
    private static final String MODEL_OBJ_PROP_TYPE = "objPropType";

    private static final String MODEL_OBJ_ANN = "objAnnotation";
    private static final String MODEL_OBJ_ANN_NAME = "objAnnName";
    private static final String MODEL_OBJ_ANN_KEY = "objAnnKey";
    private static final String MODEL_OBJ_ANN_VALUE = "objAnnValue";

    protected String doFormat(DataModelAsset dataModelAsset) {
        StringBuilder sb = new StringBuilder();

        for (Iterator<DataModelAsset.DataModelObject> objectIt = dataModelAsset.modelObjects(); objectIt
                .hasNext();) {
            DataModelAsset.DataModelObject obj = objectIt.next();
            String objSuperType = StringUtils.isNotBlank(obj.getSuperType()) ? obj.getSuperType() : "";
            sb.append(LT).append(MODEL_OBJ).append(" ").append(MODEL_OBJ_NAME).append("=\"").append(obj.getName())
                    .append("\"").append(" ").append(MODEL_OBJ_SUPERTYPE).append("=\"").append(objSuperType)
                    .append("\"").append(GT);

            for (Iterator<DataModelAsset.DataObjectProperty> propIt = obj.properties(); propIt.hasNext();) {
                DataModelAsset.DataObjectProperty prop = propIt.next();
                sb.append(LT).append(MODEL_OBJ_PROP).append(" ").append(MODEL_OBJ_PROP_NAME).append("=\"")
                        .append(prop.getName()).append("\"").append(" ").append(MODEL_OBJ_PROP_TYPE).append("=\"")
                        .append(prop.getType()).append("\"").append(SLASH_GT);
            }

            for (Iterator<DataModelAsset.DataObjectAnnotation> annIt = obj.annotations(); annIt.hasNext();) {
                DataModelAsset.DataObjectAnnotation ann = annIt.next();
                sb.append(LT).append(MODEL_OBJ_ANN).append(" ").append(MODEL_OBJ_ANN_NAME).append("=\"")
                        .append(ann.getName()).append("\"").append(" ").append(MODEL_OBJ_ANN_KEY).append("=\"")
                        .append(escapeXml(ann.getKey())).append("\"").append(" ").append(MODEL_OBJ_ANN_VALUE)
                        .append("=\"").append(escapeXml(ann.getValue())).append("\"").append(SLASH_GT);
            }

            sb.append(LT_SLASH).append(MODEL_OBJ).append(GT);
        }
        return sb.toString();
    }

    protected DataModelAsset doParse(String name, String format, String lastContributor, String checkinComment,
            Date lastModified, Node assetNode) {

        DataModelAsset dataModel = new DataModelAsset(name, format, lastContributor, checkinComment, lastModified);

        NodeList modelNodeList = assetNode.getChildNodes();
        for (int i = 0; i < modelNodeList.getLength(); i++) {
            Node objNode = modelNodeList.item(i);
            if (MODEL_OBJ.equalsIgnoreCase(objNode.getNodeName())) {
                NamedNodeMap objAttribs = objNode.getAttributes();
                String objName = objAttribs.getNamedItem(MODEL_OBJ_NAME).getNodeValue();
                String objSuperType = objAttribs.getNamedItem(MODEL_OBJ_SUPERTYPE).getNodeValue();

                DataModelAsset.DataModelObject obj = dataModel.addDataModelObject(objName, objSuperType);

                NodeList objNodeList = objNode.getChildNodes();
                for (int j = 0; j < objNodeList.getLength(); j++) {
                    Node objChildNode = objNodeList.item(j);
                    NamedNodeMap childNodeAttribs = objChildNode.getAttributes();

                    if (MODEL_OBJ_PROP.equalsIgnoreCase(objChildNode.getNodeName())) {
                        obj.addObjectProperty(childNodeAttribs.getNamedItem(MODEL_OBJ_PROP_NAME).getNodeValue(),
                                childNodeAttribs.getNamedItem(MODEL_OBJ_PROP_TYPE).getNodeValue());

                    } else if (MODEL_OBJ_ANN.equalsIgnoreCase(objChildNode.getNodeName())) {
                        obj.addObjectAnnotation(childNodeAttribs.getNamedItem(MODEL_OBJ_ANN_NAME).getNodeValue(),
                                unEscapeXml(childNodeAttribs.getNamedItem(MODEL_OBJ_ANN_KEY).getNodeValue()),
                                unEscapeXml(childNodeAttribs.getNamedItem(MODEL_OBJ_ANN_VALUE).getNodeValue()));
                    }
                }
            }
        }
        return dataModel;
    }
}