/******************************************************************************* * 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.mapping; import java.util.List; import org.eclipse.persistence.tools.workbench.mappingsmodel.MWModel; import org.eclipse.persistence.tools.workbench.mappingsmodel.MWNode; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.AggregateRuntimeFieldNameGenerator; import org.eclipse.persistence.descriptors.InheritancePolicy; import org.eclipse.persistence.internal.helper.DatabaseField; import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping; import org.eclipse.persistence.oxm.XMLDescriptor; public abstract class MWTransformer extends MWModel implements AggregateRuntimeFieldNameGenerator { public final static String TRANSFORMER_PROPERTY = "transformer"; // **************** Constructors ****************************************** /** Default constructor - for TopLink use only */ protected MWTransformer() { super(); } protected MWTransformer(Parent parent) { super(parent); } // **************** Containment ********************************************* protected Parent getTransformerParent() { return (Parent) this.getParent(); } private MWTransformationMapping transformationMapping() { return this.getTransformerParent().transformationMapping(); } protected MWMappingDescriptor parentDescriptor() { return this.transformationMapping().getParentDescriptor(); } // **************** Aggregate Support ************************************* public MWDescriptor owningDescriptor() { throw new UnsupportedOperationException(); } // **************** UI support ********************************************* public abstract String transformerDisplayString(); // **************** Problems ********************************************* public abstract void addAttributeTransformerProblemsForMapping(List newProblems, MWTransformationMapping mapping); public abstract void addFieldTransformerProblemsForAssociation(List newProblems, MWFieldTransformerAssociation association); // **************** Runtime conversion ************************************ public abstract void setRuntimeAttributeTransformer(AbstractTransformationMapping mapping); public abstract void addRuntimeFieldTransformer(AbstractTransformationMapping mapping, DatabaseField runtimeField); // **************** TopLink Methods *************************************** public static XMLDescriptor buildDescriptor() { XMLDescriptor descriptor = new XMLDescriptor(); descriptor.setJavaClass(MWTransformer.class); InheritancePolicy ip = (InheritancePolicy)descriptor.getInheritancePolicy(); ip.setClassIndicatorFieldName("@type"); ip.addClassIndicator(MWMethodBasedTransformer.class, "method-based"); ip.addClassIndicator(MWClassBasedTransformer.class, "class-based"); return descriptor; } public MWTransformer valueForTopLink() { return this; } public static MWTransformer buildTransformerForTopLink(MWTransformer transformer) { return (transformer == null) ? new MWNullTransformer() : transformer; } // **************** Member Interface *************************************** /** * the transformer's parent should be able to return the appropriate * transformation mapping */ public interface Parent extends MWNode { MWTransformationMapping transformationMapping(); } }