/* * Copyright 2015 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.kie.workbench.common.screens.datamodeller.util; import java.util.List; import org.kie.workbench.common.screens.datamodeller.model.persistence.CachingType; import org.kie.workbench.common.screens.datamodeller.model.persistence.PersistenceDescriptorModel; import org.kie.workbench.common.screens.datamodeller.model.persistence.PersistenceUnitModel; import org.kie.workbench.common.screens.datamodeller.model.persistence.Property; import org.kie.workbench.common.screens.datamodeller.model.persistence.ValidationMode; import org.w3c.dom.Document; import org.w3c.dom.Element; public class PersistenceDescriptor2DOMVisitor { Document document; PersistenceDescriptorModel descriptorModel; public PersistenceDescriptor2DOMVisitor( PersistenceDescriptorModel descriptorModel, Document document ) { this.descriptorModel = descriptorModel; this.document = document; } public Document visit() { Element element = document.createElement( PersistenceDescriptorXMLMarshaller.PERSISTENCE ); element.setAttribute( PersistenceDescriptorXMLMarshaller.VERSION, descriptorModel.getVersion() ); element.setAttribute( "xmlns", "http://java.sun.com/xml/ns/persistence" ); element.setAttribute( "xmlns:orm", "http://java.sun.com/xml/ns/persistence/orm" ); element.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); element.setAttribute( "xsi:schemaLocation", "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" ); document.appendChild( element ); if ( descriptorModel.getPersistenceUnit() != null ) { visitPersistenceUnit( element, descriptorModel.getPersistenceUnit() ); } return document; } private void visitPersistenceUnit( Element parent, PersistenceUnitModel persistenceUnit ) { Element persistenceUnitElement = document.createElement( PersistenceDescriptorXMLMarshaller.PERSISTENCE_UNIT ); parent.appendChild( persistenceUnitElement ); persistenceUnitElement.setAttribute( PersistenceDescriptorXMLMarshaller.NAME, persistenceUnit.getName() ); if ( persistenceUnit.getTransactionType() != null ) { persistenceUnitElement.setAttribute( PersistenceDescriptorXMLMarshaller.TRANSACTION_TYPE, persistenceUnit.getTransactionType().name() ); } visitDescription( persistenceUnitElement, persistenceUnit.getDescription() ); visitProvider( persistenceUnitElement, persistenceUnit.getProvider() ); visitJTADataSource( persistenceUnitElement, persistenceUnit.getJtaDataSource() ); visitNonJTADataSource( persistenceUnitElement, persistenceUnit.getNonJtaDataSource() ); if ( persistenceUnit.getMappingFile() != null ) { for ( String mappingFile : persistenceUnit.getMappingFile() ) { visitMappingFile( persistenceUnitElement, mappingFile ); } } if ( persistenceUnit.getJarFile() != null ) { for ( String jarFile : persistenceUnit.getJarFile() ) { visitJarFile( persistenceUnitElement, jarFile ); } } if ( persistenceUnit.getClasses() != null ) { for ( String clazz : persistenceUnit.getClasses() ) { visitClass( persistenceUnitElement, clazz ); } } visitExcludeUnlistedClasses( persistenceUnitElement, persistenceUnit.getExcludeUnlistedClasses() ); visitSharedChacheMode( persistenceUnitElement, persistenceUnit.getSharedCacheMode() ); visitValidationMode( persistenceUnitElement, persistenceUnit.getValidationMode() ); visitProperties( persistenceUnitElement, persistenceUnit.getProperties() ); } private void visitDescription( Element element, String description ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.DESCRIPTION, description, false ); } private void visitProvider( Element element, String provider ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.PROVIDER, provider, true ); } private void visitJTADataSource( Element element, String jtaDataSource ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.JTA_DATA_SOURCE, jtaDataSource, false ); } private void visitNonJTADataSource( Element element, String nonJtaDataSource ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.NON_JTA_DATA_SOURCE, nonJtaDataSource, false ); } private void visitJarFile( Element element, String jarFile ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.JAR_FILE, jarFile, false ); } private void visitClass( Element element, String clazz ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.CLASS, clazz, false ); } private void visitExcludeUnlistedClasses( Element element, Boolean excludeUnlistedClasses ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.EXCLUDE_UNLISTED_CLASSES, excludeUnlistedClasses != null ? excludeUnlistedClasses.toString(): null , false ); } private void visitSharedChacheMode( Element element, CachingType sharedCacheMode ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.SHARED_CACHE_MODE, sharedCacheMode != null ? sharedCacheMode.name() : null, false ); } private void visitValidationMode( Element element, ValidationMode validationMode ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.VALIDATION_MODE, validationMode != null ? validationMode.name() : null, false ); } private void visitProperties( Element element, List<Property> properties ) { if ( properties != null && properties.size() > 0 ) { Element propertiesElement = document.createElement( PersistenceDescriptorXMLMarshaller.PROPERTIES ); element.appendChild( propertiesElement ); for ( Property property : properties ) { visitProperty( propertiesElement, property ); } } } private void visitProperty( Element element, Property property ) { Element propertyElement = document.createElement( PersistenceDescriptorXMLMarshaller.PROPERTY ); element.appendChild( propertyElement ); propertyElement.setAttribute( PersistenceDescriptorXMLMarshaller.NAME, property.getName() ); propertyElement.setAttribute( PersistenceDescriptorXMLMarshaller.VALUE, property.getValue() ); } void createSimpleTextElement( Element element, String elementName, String elementValue, boolean includeIfNull ) { if ( elementValue != null || includeIfNull ) { Element childElement = document.createElement( elementName ); if ( elementValue != null ) { childElement.setTextContent( elementValue ); } element.appendChild( childElement ); } } private void visitMappingFile( Element element, String mappingFile ) { createSimpleTextElement( element, PersistenceDescriptorXMLMarshaller.MAPPING_FILE, mappingFile, false ); } }