| /******************************************************************************* |
| * Copyright (c) 2012 Oracle. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0, which accompanies this distribution |
| * and is available at http://www.eclipse.org/legal/epl-v10.html. |
| * |
| * Contributors: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.jpa.eclipselink.ui.internal.entity.data.model; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jdt.core.IPackageFragmentRoot; |
| import org.eclipse.jem.util.emf.workbench.ProjectUtilities; |
| import org.eclipse.jpt.common.utility.internal.StringTools; |
| import org.eclipse.jpt.jpa.core.JptJpaCorePlugin; |
| import org.eclipse.jpt.jpa.ui.internal.wizards.entity.data.model.IEntityDataModelProperties; |
| import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; |
| import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; |
| import org.eclipse.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties; |
| import org.eclipse.wst.common.frameworks.datamodel.IDataModel; |
| |
| public class DynamicEntityTemplateModel { |
| |
| protected IDataModel dataModel; |
| |
| private static final String DOT = "."; //$NON-NLS-1$ |
| private static final String PK_SUFFIX = "PK"; //$NON-NLS-1$ |
| private static final String DEFAULT_EMBEDDED_ID_NAME = "id"; //$NON-NLS-1$ |
| |
| /** |
| * Constructs entity model as expansion of the data model |
| * @param dataModel |
| */ |
| public DynamicEntityTemplateModel(IDataModel dataModel) { |
| this.dataModel = dataModel; |
| } |
| |
| /** |
| * @return class name of the dynamic entity |
| */ |
| public String getClassName() { |
| return getProperty(INewJavaClassDataModelProperties.CLASS_NAME).trim(); |
| } |
| |
| /** |
| * @return package name when the dynamic entity will be generated |
| */ |
| public String getJavaPackageName() { |
| return getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE).trim(); |
| } |
| |
| /** |
| * @return fully qualified Java class name |
| */ |
| public String getQualifiedJavaClassName() { |
| if (!getJavaPackageName().equals(IEntityDataModelProperties.EMPTY_STRING)) { |
| return getJavaPackageName() + DOT + getClassName(); |
| } |
| return getClassName(); |
| } |
| |
| /** |
| * Returns the value of the specified string property |
| * @param propertyName |
| * @return string value of the specified property |
| */ |
| protected String getProperty(String propertyName) { |
| return dataModel.getStringProperty(propertyName); |
| } |
| |
| public boolean isMappingXMLDefault() { |
| if (getMappingXMLName().equals(IEntityDataModelProperties.EMPTY_STRING)) { |
| return true; |
| } |
| return getMappingXMLName().equals(JptJpaCorePlugin.DEFAULT_ORM_XML_RUNTIME_PATH.toString()); |
| } |
| |
| public String getMappingXMLName() { |
| return dataModel.getStringProperty(IEntityDataModelProperties.XML_NAME).trim(); |
| } |
| |
| public IFile getMappingXmlFile() { |
| IFile ormFile = null; |
| IProject project = getProject(); |
| IPackageFragmentRoot[] sourceFragments = J2EEProjectUtilities.getSourceContainers(project); |
| for (IPackageFragmentRoot packageFragmentRoot : sourceFragments) { |
| ormFile = project.getFile(packageFragmentRoot.getResource().getName() + File.separator + getMappingXMLName()); |
| if (ormFile.exists()) { |
| break; |
| } |
| } |
| return ormFile; |
| } |
| |
| /** |
| * @return the dynamic entity name (could be different from the class name) |
| * See <code>isEntityNameSet()<code> |
| */ |
| public String getEntityName() { |
| return getProperty(IEntityDataModelProperties.ENTITY_NAME).trim(); |
| } |
| |
| /** |
| * @return whether the dynamic entity name is different than class name |
| */ |
| public boolean isEntityNameSet() { |
| boolean result = false; |
| if (!StringTools.stringIsEmpty(getEntityName()) && !getClassName().equals(getEntityName())) { |
| result = true; |
| } |
| return result; |
| } |
| |
| /** |
| * @return whether the table name is specified explicitly |
| */ |
| public boolean isTableNameSet() { |
| return !dataModel.getBooleanProperty(IEntityDataModelProperties.TABLE_NAME_DEFAULT); |
| } |
| |
| /** |
| * @return the table name (if it is specified) |
| * See <code>isTableNameSet()<code> |
| */ |
| public String getTableName() { |
| return getProperty(IEntityDataModelProperties.TABLE_NAME).trim(); |
| } |
| |
| /** |
| * @return list of the dynamic entity fields |
| */ |
| public List<DynamicEntityField> getEntityFields() { |
| ArrayList<DynamicEntityField> fields = (ArrayList<DynamicEntityField>) dataModel.getProperty(IEntityDataModelProperties.ENTITY_FIELDS); |
| if (fields == null){ |
| return new ArrayList<DynamicEntityField>(); |
| } else |
| return fields; |
| } |
| |
| /** |
| * @return the primary key is composite (more than one set as primary key field) |
| */ |
| public boolean isCompositePK() { |
| return getPKFields().size() > 1; |
| } |
| |
| /** |
| * @return list of primary key fields |
| */ |
| public List<DynamicEntityField> getPKFields() { |
| return (ArrayList<DynamicEntityField>) dataModel.getProperty(IEntityDataModelProperties.PK_FIELDS); |
| } |
| |
| /** |
| * @return constructed name of the mapping file embeddable class (package name + entity name + PK as suffix) |
| */ |
| public String getEmbeddableClassName() { |
| return getQualifiedJavaClassName() + PK_SUFFIX; |
| } |
| |
| /** |
| * @return constructed the default name of the embedded id mapping |
| */ |
| public String getDefaultEmbeddedIdName() { |
| return DEFAULT_EMBEDDED_ID_NAME; |
| } |
| |
| /** |
| * @return IProject presentation of JPA project |
| */ |
| public IProject getProject() { |
| String projectName = dataModel.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME); |
| return ProjectUtilities.getProject(projectName); |
| } |
| |
| } |