/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.InterfaceDescriptorCreationException; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptorInheritancePolicy; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMappingFactory; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWEisMappingFactory; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWEisOneToManyMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWEisOneToOneMapping; import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClass; import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassAttribute; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.xml.MWEisProject; import org.eclipse.persistence.descriptors.ClassDescriptor; import org.eclipse.persistence.eis.EISDescriptor; import org.eclipse.persistence.eis.mappings.EISCompositeCollectionMapping; import org.eclipse.persistence.eis.mappings.EISCompositeDirectCollectionMapping; import org.eclipse.persistence.eis.mappings.EISCompositeObjectMapping; import org.eclipse.persistence.eis.mappings.EISDirectMapping; import org.eclipse.persistence.eis.mappings.EISTransformationMapping; import org.eclipse.persistence.mappings.foundation.AbstractCompositeCollectionMapping; import org.eclipse.persistence.mappings.foundation.AbstractCompositeDirectCollectionMapping; import org.eclipse.persistence.mappings.foundation.AbstractCompositeObjectMapping; import org.eclipse.persistence.mappings.foundation.AbstractDirectMapping; import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping; public abstract class MWEisDescriptor extends MWXmlDescriptor { // **************** Constructors ************** MWEisDescriptor() { super(); } protected MWEisDescriptor(MWEisProject project, MWClass type, String name) { super(project, type, name); } // **************** Inheritance policy ************************************ protected MWDescriptorInheritancePolicy buildInheritancePolicy() { return new MWEisDescriptorInheritancePolicy(this); } // **************** morphing ************** public MWCompositeEisDescriptor asCompositeEisDescriptor() throws InterfaceDescriptorCreationException { MWCompositeEisDescriptor newDescriptor= (MWCompositeEisDescriptor) this.getProject().addDescriptorForType(this.getMWClass()); this.initializeDescriptorAfterMorphing(newDescriptor); return newDescriptor; } public MWRootEisDescriptor asRootEisDescriptor() { MWRootEisDescriptor newDescriptor = ((MWEisProject) this.getProject()).addRootEisDescriptorForType(this.getMWClass()); this.initializeDescriptorAfterMorphing(newDescriptor); return newDescriptor; } public void initializeOn(MWDescriptor newDescriptor) { ((MWEisDescriptor) newDescriptor).initializeFromMWEisDescriptor(this); } protected void initializeFromMWEisDescriptor(MWEisDescriptor oldDescriptor) { super.initializeFromMWXmlDescriptor(oldDescriptor); } // **************** runtime conversion ************************************ protected ClassDescriptor buildBasicRuntimeDescriptor() { EISDescriptor runtimeDescriptor = new EISDescriptor(); runtimeDescriptor.setJavaClassName(getMWClass().getName()); return runtimeDescriptor; } public ClassDescriptor buildRuntimeDescriptor() { EISDescriptor runtimeDescriptor = (EISDescriptor) super.buildRuntimeDescriptor(); runtimeDescriptor.setNamespaceResolver(this.runtimeNamespaceResolver()); return runtimeDescriptor; } protected void adjustRuntimeDescriptorRootProperties(ClassDescriptor runtimeDescriptor) { super.adjustRuntimeDescriptorRootProperties(runtimeDescriptor); EISDescriptor runtimeEisDescriptor = (EISDescriptor) runtimeDescriptor; if (this.getDefaultRootElement() != null) { runtimeEisDescriptor.setDataTypeName(this.getDefaultRootElement().qName()); } else if (this.getSchemaContext() != null) { // an eis descriptor always needs a data type - use the schema context element/complex type runtimeEisDescriptor.setDataTypeName(this.getSchemaContext().qName()); } } public AbstractDirectMapping buildDefaultRuntimeDirectMapping() { return new EISDirectMapping(); } public AbstractCompositeDirectCollectionMapping buildDefaultRuntimeDirectCollectionMapping() { return new EISCompositeDirectCollectionMapping(); } public AbstractCompositeObjectMapping buildDefaultRuntimeCompositeObjectMapping() { return new EISCompositeObjectMapping(); } public AbstractCompositeCollectionMapping buildDefaultRuntimeCompositeCollectionMapping() { return new EISCompositeCollectionMapping(); } public AbstractTransformationMapping buildDefaultRuntimeTransformationMapping() { return new EISTransformationMapping(); } // **************** mappings *************** public MWMappingFactory mappingFactory() { return MWEisMappingFactory.instance(); } public MWEisOneToOneMapping addEisOneToOneMapping(MWClassAttribute attribute) { MWEisOneToOneMapping mapping = ((MWEisMappingFactory) mappingFactory()).createEisOneToOneMapping(this, attribute, attribute.getName()); addMapping(mapping); return mapping; } public MWEisOneToManyMapping addEisOneToManyMapping(MWClassAttribute attribute) { MWEisOneToManyMapping mapping = ((MWEisMappingFactory) mappingFactory()).createEisOneToManyMapping(this, attribute, attribute.getName()); addMapping(mapping); return mapping; } @Override public boolean isEisDescriptor() { return true; } }