/******************************************************************************* * Copyright (c) 2013, 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: * Guy Pelletier - initial API and implementation ******************************************************************************/ package org.eclipse.persistence.internal.jpa.config.classes; import java.util.ArrayList; import org.eclipse.persistence.internal.jpa.config.AbstractAccessorImpl; import org.eclipse.persistence.internal.jpa.config.changetracking.ChangeTrackingImpl; import org.eclipse.persistence.internal.jpa.config.columns.AssociationOverrideImpl; import org.eclipse.persistence.internal.jpa.config.columns.AttributeOverrideImpl; import org.eclipse.persistence.internal.jpa.config.copypolicy.CloneCopyPolicyImpl; import org.eclipse.persistence.internal.jpa.config.copypolicy.CopyPolicyImpl; import org.eclipse.persistence.internal.jpa.config.copypolicy.InstantiationCopyPolicyImpl; import org.eclipse.persistence.internal.jpa.config.mappings.BasicImpl; import org.eclipse.persistence.internal.jpa.config.mappings.ElementCollectionImpl; import org.eclipse.persistence.internal.jpa.config.mappings.EmbeddedIdImpl; import org.eclipse.persistence.internal.jpa.config.mappings.EmbeddedImpl; import org.eclipse.persistence.internal.jpa.config.mappings.IdImpl; import org.eclipse.persistence.internal.jpa.config.mappings.ManyToManyImpl; import org.eclipse.persistence.internal.jpa.config.mappings.ManyToOneImpl; import org.eclipse.persistence.internal.jpa.config.mappings.OneToManyImpl; import org.eclipse.persistence.internal.jpa.config.mappings.OneToOneImpl; import org.eclipse.persistence.internal.jpa.config.mappings.TransformationImpl; import org.eclipse.persistence.internal.jpa.config.mappings.TransientImpl; import org.eclipse.persistence.internal.jpa.config.mappings.VariableOneToOneImpl; import org.eclipse.persistence.internal.jpa.config.mappings.VersionImpl; import org.eclipse.persistence.internal.jpa.config.nosql.NoSqlImpl; import org.eclipse.persistence.internal.jpa.config.queries.OracleArrayImpl; import org.eclipse.persistence.internal.jpa.config.queries.OracleObjectImpl; import org.eclipse.persistence.internal.jpa.config.queries.PlsqlRecordImpl; import org.eclipse.persistence.internal.jpa.config.queries.PlsqlTableImpl; import org.eclipse.persistence.internal.jpa.config.structures.ArrayImpl; import org.eclipse.persistence.internal.jpa.config.structures.StructImpl; import org.eclipse.persistence.internal.jpa.config.structures.StructureImpl; import org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor; import org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.IdAccessor; import org.eclipse.persistence.internal.jpa.metadata.columns.AssociationOverrideMetadata; import org.eclipse.persistence.internal.jpa.metadata.columns.AttributeOverrideMetadata; import org.eclipse.persistence.internal.jpa.metadata.queries.OracleArrayTypeMetadata; import org.eclipse.persistence.internal.jpa.metadata.queries.OracleObjectTypeMetadata; import org.eclipse.persistence.internal.jpa.metadata.queries.PLSQLRecordMetadata; import org.eclipse.persistence.internal.jpa.metadata.queries.PLSQLTableMetadata; import org.eclipse.persistence.jpa.config.Array; import org.eclipse.persistence.jpa.config.AssociationOverride; import org.eclipse.persistence.jpa.config.AttributeOverride; import org.eclipse.persistence.jpa.config.Basic; import org.eclipse.persistence.jpa.config.ChangeTracking; import org.eclipse.persistence.jpa.config.CloneCopyPolicy; import org.eclipse.persistence.jpa.config.CopyPolicy; import org.eclipse.persistence.jpa.config.ElementCollection; import org.eclipse.persistence.jpa.config.Embedded; import org.eclipse.persistence.jpa.config.EmbeddedId; import org.eclipse.persistence.jpa.config.Id; import org.eclipse.persistence.jpa.config.InstantiationCopyPolicy; import org.eclipse.persistence.jpa.config.ManyToMany; import org.eclipse.persistence.jpa.config.ManyToOne; import org.eclipse.persistence.jpa.config.NoSql; import org.eclipse.persistence.jpa.config.OneToMany; import org.eclipse.persistence.jpa.config.OneToOne; import org.eclipse.persistence.jpa.config.OracleArray; import org.eclipse.persistence.jpa.config.OracleObject; import org.eclipse.persistence.jpa.config.PlsqlRecord; import org.eclipse.persistence.jpa.config.PlsqlTable; import org.eclipse.persistence.jpa.config.Struct; import org.eclipse.persistence.jpa.config.Structure; import org.eclipse.persistence.jpa.config.Transformation; import org.eclipse.persistence.jpa.config.Transient; import org.eclipse.persistence.jpa.config.VariableOneToOne; import org.eclipse.persistence.jpa.config.Version; /** * JPA scripting API implementation. * * @author Guy Pelletier * @since EclipseLink 2.5.1 */ @SuppressWarnings("unchecked") public abstract class AbstractClassImpl<T extends ClassAccessor, R> extends AbstractAccessorImpl<T, R> { public AbstractClassImpl(T t) { super(t); getMetadata().setAttributes(new Attributes()); getMetadata().setAssociationOverrides(new ArrayList<AssociationOverrideMetadata>()); getMetadata().setAttributeOverrides(new ArrayList<AttributeOverrideMetadata>()); getMetadata().setOracleArrayTypes(new ArrayList<OracleArrayTypeMetadata>()); getMetadata().setOracleObjectTypes(new ArrayList<OracleObjectTypeMetadata>()); getMetadata().setPLSQLRecords(new ArrayList<PLSQLRecordMetadata>()); getMetadata().setPLSQLTables(new ArrayList<PLSQLTableMetadata>()); } public Array addArray() { ArrayImpl array = new ArrayImpl(); getMetadata().getAttributes().getArrays().add(array.getMetadata()); return array; } public AssociationOverride addAssociationOverride() { AssociationOverrideImpl associationOverride = new AssociationOverrideImpl(); getMetadata().getAssociationOverrides().add(associationOverride.getMetadata()); return associationOverride; } public AttributeOverride addAttributeOverride() { AttributeOverrideImpl attributeOverride = new AttributeOverrideImpl(); getMetadata().getAttributeOverrides().add(attributeOverride.getMetadata()); return attributeOverride; } public Basic addBasic() { BasicImpl basic = new BasicImpl(); getMetadata().getAttributes().getBasics().add(basic.getMetadata()); return basic; } public ElementCollection addElementCollection() { ElementCollectionImpl elementCollection = new ElementCollectionImpl(); getMetadata().getAttributes().getElementCollections().add(elementCollection.getMetadata()); return elementCollection; } public Embedded addEmbedded() { EmbeddedImpl embedded = new EmbeddedImpl(); getMetadata().getAttributes().getEmbeddeds().add(embedded.getMetadata()); return embedded; } public Id addId() { IdImpl id = new IdImpl(); getMetadata().getAttributes().getIds().add((IdAccessor) id.getMetadata()); return id; } public ManyToMany addManyToMany() { ManyToManyImpl manyToMany = new ManyToManyImpl(); getMetadata().getAttributes().getManyToManys().add(manyToMany.getMetadata()); return manyToMany; } public ManyToOne addManyToOne() { ManyToOneImpl manyToOne = new ManyToOneImpl(); getMetadata().getAttributes().getManyToOnes().add(manyToOne.getMetadata()); return manyToOne; } public OneToMany addOneToMany() { OneToManyImpl oneToMany = new OneToManyImpl(); getMetadata().getAttributes().getOneToManys().add(oneToMany.getMetadata()); return oneToMany; } public OneToOne addOneToOne() { OneToOneImpl oneToOne = new OneToOneImpl(); getMetadata().getAttributes().getOneToOnes().add(oneToOne.getMetadata()); return oneToOne; } public OracleArray addOracleArray() { OracleArrayImpl oracleArray = new OracleArrayImpl(); getMetadata().getOracleArrayTypes().add(oracleArray.getMetadata()); return oracleArray; } public OracleObject addOracleObject() { OracleObjectImpl oracleObject = new OracleObjectImpl(); getMetadata().getOracleObjectTypes().add(oracleObject.getMetadata()); return oracleObject; } public PlsqlRecord addPlsqlRecord() { PlsqlRecordImpl plsqlRecord = new PlsqlRecordImpl(); getMetadata().getPLSQLRecords().add(plsqlRecord.getMetadata()); return plsqlRecord; } public PlsqlTable addPlsqlTable() { PlsqlTableImpl plsqlTable = new PlsqlTableImpl(); getMetadata().getPLSQLTables().add(plsqlTable.getMetadata()); return plsqlTable; } public Structure addStructure() { StructureImpl structure = new StructureImpl(); getMetadata().getAttributes().getStructures().add(structure.getMetadata()); return structure; } public Transformation addTransformation() { TransformationImpl transformation = new TransformationImpl(); getMetadata().getAttributes().getTransformations().add(transformation.getMetadata()); return transformation; } public Transient addTransient() { TransientImpl trans = new TransientImpl(); getMetadata().getAttributes().getTransients().add(trans.getMetadata()); return trans; } public VariableOneToOne addVariableOneToOne() { VariableOneToOneImpl variableOneToOne = new VariableOneToOneImpl(); getMetadata().getAttributes().getVariableOneToOnes().add(variableOneToOne.getMetadata()); return variableOneToOne; } public Version addVersion() { VersionImpl version = new VersionImpl(); getMetadata().getAttributes().getVersions().add(version.getMetadata()); return version; } public ChangeTracking setChangeTracking() { ChangeTrackingImpl changeTracking = new ChangeTrackingImpl(); getMetadata().setChangeTracking(changeTracking.getMetadata()); return changeTracking; } public R setClass(String cls) { getMetadata().setClassName(cls); return (R) this; } public CloneCopyPolicy setCloneCopyPolicy() { CloneCopyPolicyImpl cloneCopyPolicy = new CloneCopyPolicyImpl(); getMetadata().setCloneCopyPolicy(cloneCopyPolicy.getMetadata()); return cloneCopyPolicy; } public CopyPolicy setCopyPolicy() { CopyPolicyImpl copyPolicy = new CopyPolicyImpl(); getMetadata().setCustomCopyPolicy(copyPolicy.getMetadata()); return copyPolicy; } public R setCustomizer(String customizer) { getMetadata().setCustomizerClassName(customizer); return (R) this; } public EmbeddedId setEmbeddedId() { EmbeddedIdImpl embeddedId = new EmbeddedIdImpl(); getMetadata().getAttributes().setEmbeddedId(embeddedId.getMetadata()); return embeddedId; } public R setExcludeDefaultMappings(Boolean excludeDefaultMappings) { getMetadata().setExcludeDefaultMappings(excludeDefaultMappings); return (R) this; } public InstantiationCopyPolicy setInstantiationCopyPolicy() { InstantiationCopyPolicyImpl copyPolicy = new InstantiationCopyPolicyImpl(); getMetadata().setInstantiationCopyPolicy(copyPolicy.getMetadata()); return copyPolicy; } public NoSql setNoSql() { NoSqlImpl noSql = new NoSqlImpl(); getMetadata().setNoSql(noSql.getMetadata()); return noSql; } public R setMetadataComplete(Boolean metadataComplete) { getMetadata().setMetadataComplete(metadataComplete); return (R) this; } public R setParentClass(String parentClass) { getMetadata().setParentClassName(parentClass); return (R) this; } public Struct setStruct() { StructImpl struct = new StructImpl(); getMetadata().setStruct(struct.getMetadata()); return struct; } }