/* * 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; } }