blob: 3aca24143caef79a08704f3d3f72c055d074f731 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 generators;
import java.util.ArrayList;
import java.util.List;
import model.JPAClassField;
import model.JPAClassModel;
import model.JPAResourceClassModel;
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*/
public class JPAResourceClassGenerator extends AbstractGenerator {
private String exceptionClassName;
private String jpaUtilsClassName;
private String resourceTypeClassName;
private String queryGeneratorClassName;
public JPAResourceClassModel createJPAResourceClassModel(JPAClassModel jpaClassModel) {
JPAResourceClassModel jpaResourceClassModel = new JPAResourceClassModel();
jpaResourceClassModel.jpaClassModel = jpaClassModel;
jpaResourceClassModel.className = jpaClassModel.className + "Resource";
jpaClassModel.classNameConstant = convertToJavaConstantNameCaseStringConvention(jpaClassModel.className);
for (JPAClassField jpaField : jpaClassModel.fields) {
jpaField.fieldNameConstant = convertToJavaConstantNameCaseStringConvention(jpaField.fieldName);
}
jpaResourceClassModel.jpaClassConstantClassName = jpaClassModel.className + "Constants";
return jpaResourceClassModel;
}
public String generateJPAResourceClass(JPAResourceClassModel model) {
String classStr = null;
String className = model.className;
classStr = addLines(classStr, "public class " + className + " extends AbstractResource {");
classStr = addLines(
classStr,
tabs(1) + "private final static Logger logger = LoggerFactory.getLogger(" + className + ".class);");
List<String> columnFields = new ArrayList<String>();
List<String> fieldGetters = new ArrayList<String>();
List<String> fieldSetters = new ArrayList<String>();
for (JPAClassField jpaField : model.jpaClassModel.fields) {
String fieldName = jpaField.fieldName;
String dataType = jpaField.fieldDataType;
String fieldTitleString = jpaField.fieldTitle;
String fieldString = tabs(1) + createFieldVarString(dataType, fieldName);
columnFields.add(fieldString);
fieldGetters.add(createGetterString(1, fieldName, dataType, fieldTitleString));
fieldSetters.add(createSetterString(1, fieldName, dataType, fieldTitleString));
if (jpaField.foriegnKey) {
fieldName = createVarNameFromClassName(jpaField.foriegnKeyJPAResourceClass);
dataType = jpaField.foriegnKeyJPAResourceClass;
fieldTitleString = jpaField.foriegnKeyJPAResourceClass;
fieldString = tabs(1) + createFieldVarString(dataType, fieldName);
columnFields.add(fieldString);
fieldGetters.add(createGetterString(1, fieldName, dataType, fieldTitleString));
fieldSetters.add(createSetterString(1, fieldName, dataType, fieldTitleString));
}
}
classStr = addLines(classStr, columnFields.toArray(new String[] {}));
// remove method
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(
classStr, tabs(1) + "public void remove(Object identifier) throws " + getExceptionClassName() + " {");
if (model.jpaClassModel.generatePKClass) {
classStr = addLines(classStr, tabs(2) + "HashMap<String, String> ids;");
classStr = addLines(classStr, tabs(2) + "if (identifier instanceof Map) {");
classStr = addLines(classStr, tabs(3) + "ids = (HashMap<String, String>) identifier;");
classStr = addLines(classStr, tabs(2) + "} else {");
classStr = addLines(
classStr,
tabs(3) + "logger.error(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(
classStr,
tabs(3) + "throw new " + getExceptionClassName()
+ "(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(classStr, tabs(2) + "}");
}
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().begin();");
classStr = addLines(
classStr,
tabs(3) + "" + getQueryGeneratorClassName() + " generator = new " + getQueryGeneratorClassName() + "("
+ model.jpaClassModel.classNameConstant + ");");
if (model.jpaClassModel.generatePKClass) {
for (JPAClassField field : model.jpaClassModel.pkClassModel.pkFields) {
classStr = addLines(
classStr,
tabs(3) + "generator.setParameter(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + ", ids.get(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + "));");
}
} else {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.primaryKey) {
classStr = addLines(
classStr,
tabs(3) + "generator.setParameter(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + ", identifier);");
}
}
}
classStr = addLines(classStr, tabs(3) + "Query q = generator.deleteQuery(em);");
classStr = addLines(classStr, tabs(3) + "q.executeUpdate();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(2) + "} catch (ApplicationSettingsException e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(1) + "}");
// get method for resource class
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(
classStr, tabs(1) + "public Resource get(Object identifier) throws " + getExceptionClassName() + " {");
if (model.jpaClassModel.generatePKClass) {
classStr = addLines(classStr, tabs(2) + "HashMap<String, String> ids;");
classStr = addLines(classStr, tabs(2) + "if (identifier instanceof Map) {");
classStr = addLines(classStr, tabs(3) + "ids = (HashMap<String, String>) identifier;");
classStr = addLines(classStr, tabs(2) + "} else {");
classStr = addLines(
classStr,
tabs(3) + "logger.error(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(
classStr,
tabs(3) + "throw new " + getExceptionClassName()
+ "(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(classStr, tabs(2) + "}");
}
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().begin();");
classStr = addLines(
classStr,
tabs(3) + "" + getQueryGeneratorClassName() + " generator = new " + getQueryGeneratorClassName() + "("
+ model.jpaClassModel.classNameConstant + ");");
if (model.jpaClassModel.generatePKClass) {
for (JPAClassField field : model.jpaClassModel.pkClassModel.pkFields) {
classStr = addLines(
classStr,
tabs(3) + "generator.setParameter(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + ", ids.get(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + "));");
}
} else {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.primaryKey) {
classStr = addLines(
classStr,
tabs(3) + "generator.setParameter(" + model.jpaClassConstantClassName + "."
+ field.fieldNameConstant + ", identifier);");
}
}
}
classStr = addLines(classStr, tabs(3) + "Query q = generator.selectQuery(em);");
String jpaObjVar = createVarNameFromClassName(model.jpaClassModel.className);
classStr = addLines(
classStr,
tabs(3) + model.jpaClassModel.className + " " + jpaObjVar + " = (" + model.jpaClassModel.className
+ ") q.getSingleResult();");
String jpaObjVarResource = createVarNameFromClassName(model.className);
classStr = addLines(
classStr,
tabs(3) + model.className + " " + jpaObjVarResource + " = (" + model.className + ") "
+ getJpaUtilsClassName() + ".getResource(" + getResourceTypeClassName() + "."
+ model.jpaClassModel.classNameConstant + ", " + jpaObjVar + ");");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(3) + "return " + jpaObjVarResource + ";");
classStr = addLines(classStr, tabs(2) + "} catch (ApplicationSettingsException e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(1) + "}");
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(
classStr,
tabs(1) + "public List<Resource> get(String fieldName, Object value) throws " + getExceptionClassName()
+ " {");
String resultListVarName = createVarNameFromClassName(model.className) + "s";
classStr =
addLines(classStr, tabs(2) + "List<Resource> " + resultListVarName + " = new ArrayList<Resource>();");
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().begin();");
classStr = addLines(
classStr,
tabs(3) + "" + getQueryGeneratorClassName() + " generator = new " + getQueryGeneratorClassName() + "("
+ model.jpaClassModel.classNameConstant + ");");
classStr = addLines(classStr, tabs(3) + "Query q;");
List<String> fieldNameValidations = new ArrayList<String>();
for (JPAClassField field : model.jpaClassModel.fields) {
fieldNameValidations.add(
"(fieldName.equals(" + model.jpaClassConstantClassName + "." + field.fieldNameConstant + "))");
}
String fieldNameValidationLogic = commaSeperatedString(fieldNameValidations, " || ");
classStr = addLines(classStr, tabs(3) + "if (" + fieldNameValidationLogic + ") {");
classStr = addLines(classStr, tabs(4) + "generator.setParameter(fieldName, value);");
classStr = addLines(classStr, tabs(4) + "q = generator.selectQuery(em);");
classStr = addLines(classStr, tabs(4) + "List<?> results = q.getResultList();");
classStr = addLines(classStr, tabs(4) + "for (Object result : results) {");
classStr = addLines(
classStr,
tabs(5) + model.jpaClassModel.className + " " + jpaObjVar + " = (" + model.jpaClassModel.className
+ ") result;");
classStr = addLines(
classStr,
tabs(5) + model.className + " " + jpaObjVarResource + " = (" + model.className + ") "
+ getJpaUtilsClassName() + ".getResource(" + getResourceTypeClassName() + "."
+ model.jpaClassModel.classNameConstant + ", " + jpaObjVar + ");");
classStr = addLines(classStr, tabs(5) + resultListVarName + ".add(" + jpaObjVarResource + ");");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(3) + "} else {");
classStr = addLines(classStr, tabs(4) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(5) + "em.close();");
classStr = addLines(
classStr,
tabs(4) + "logger.error(\"Unsupported field name for " + convertToTitleCaseString(model.className)
+ ".\", new IllegalArgumentException());");
classStr = addLines(
classStr,
tabs(4) + "throw new IllegalArgumentException(\"Unsupported field name for "
+ convertToTitleCaseString(model.className) + ".\");");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(2) + "} catch (ApplicationSettingsException e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(2) + "return " + resultListVarName + ";");
classStr = addLines(classStr, tabs(1) + "}");
// id list method
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(
classStr,
tabs(1) + "public List<String> getIds(String fieldName, Object value) throws " + getExceptionClassName()
+ " {");
resultListVarName = createVarNameFromClassName(model.className) + "IDs";
classStr = addLines(classStr, tabs(2) + "List<String> " + resultListVarName + " = new ArrayList<String>();");
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().begin();");
classStr = addLines(
classStr,
tabs(3) + "" + getQueryGeneratorClassName() + " generator = new " + getQueryGeneratorClassName() + "("
+ model.jpaClassModel.classNameConstant + ");");
classStr = addLines(classStr, tabs(3) + "Query q;");
fieldNameValidations = new ArrayList<String>();
for (JPAClassField field : model.jpaClassModel.fields) {
fieldNameValidations.add(
"(fieldName.equals(" + model.jpaClassConstantClassName + "." + field.fieldNameConstant + "))");
}
fieldNameValidationLogic = commaSeperatedString(fieldNameValidations, " || ");
classStr = addLines(classStr, tabs(3) + "if (" + fieldNameValidationLogic + ") {");
classStr = addLines(classStr, tabs(4) + "generator.setParameter(fieldName, value);");
classStr = addLines(classStr, tabs(4) + "q = generator.selectQuery(em);");
classStr = addLines(classStr, tabs(4) + "List<?> results = q.getResultList();");
classStr = addLines(classStr, tabs(4) + "for (Object result : results) {");
classStr = addLines(
classStr,
tabs(5) + model.jpaClassModel.className + " " + jpaObjVar + " = (" + model.jpaClassModel.className
+ ") result;");
classStr = addLines(
classStr,
tabs(5) + model.className + " " + jpaObjVarResource + " = (" + model.className + ") "
+ getJpaUtilsClassName() + ".getResource(" + getResourceTypeClassName() + "."
+ model.jpaClassModel.classNameConstant + ", " + jpaObjVar + ");");
String idFieldToAdd = null;
if (model.jpaClassModel.generatePKClass) {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.foriegnKey) {
idFieldToAdd = jpaObjVarResource + ".get" + field.fieldTitle + "()";
break;
}
}
} else {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.primaryKey) {
idFieldToAdd = jpaObjVarResource + ".get" + field.fieldTitle + "()";
}
}
}
classStr = addLines(classStr, tabs(5) + resultListVarName + ".add(" + idFieldToAdd + ");");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(3) + "} else {");
classStr = addLines(classStr, tabs(4) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(5) + "em.close();");
classStr = addLines(
classStr,
tabs(4) + "logger.error(\"Unsupported field name for " + convertToTitleCaseString(model.className)
+ ".\", new IllegalArgumentException());");
classStr = addLines(
classStr,
tabs(4) + "throw new IllegalArgumentException(\"Unsupported field name for "
+ convertToTitleCaseString(model.className) + ".\");");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(2) + "} catch (ApplicationSettingsException e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(2) + "return " + resultListVarName + ";");
classStr = addLines(classStr, tabs(1) + "}");
// save method
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(classStr, tabs(1) + "public void save() throws " + getExceptionClassName() + " {");
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
String existingJPAObjVar = "existing" + model.jpaClassModel.className;
String primaryKeySearchString = null;
if (model.jpaClassModel.generatePKClass) {
List<String> fieldStrings = new ArrayList<String>();
for (JPAClassField field : model.jpaClassModel.pkClassModel.pkFields) {
fieldStrings.add(field.fieldName);
}
primaryKeySearchString = "new " + model.jpaClassModel.pkClassModel.className + "("
+ commaSeperatedString(fieldStrings, ", ") + ")";
} else {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.primaryKey) {
primaryKeySearchString = field.fieldName;
}
}
}
classStr = addLines(
classStr,
tabs(3) + model.jpaClassModel.className + " " + existingJPAObjVar + " = em.find("
+ model.jpaClassModel.className + ".class, " + primaryKeySearchString + ");");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(3) + model.jpaClassModel.className + " " + jpaObjVar + ";");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().begin();");
classStr = addLines(classStr, tabs(3) + "if (" + existingJPAObjVar + " == null) {");
classStr = addLines(classStr, tabs(4) + jpaObjVar + " = new " + model.jpaClassModel.className + "();");
classStr = addLines(classStr, tabs(3) + "} else {");
classStr = addLines(classStr, tabs(4) + jpaObjVar + " = " + existingJPAObjVar + ";");
classStr = addLines(classStr, tabs(3) + "}");
for (JPAClassField field : model.jpaClassModel.fields) {
classStr = addLines(
classStr, tabs(3) + jpaObjVar + ".set" + field.fieldTitle + "(get" + field.fieldTitle + "());");
if (field.foriegnKey) {
String varNameForForiegnKeyObj = createVarNameFromClassName(field.foriegnKeyJPAClass);
classStr = addLines(
classStr,
tabs(3) + field.foriegnKeyJPAClass + " " + varNameForForiegnKeyObj + " = em.find("
+ field.foriegnKeyJPAClass + ".class, get" + field.fieldTitle + "());");
classStr = addLines(
classStr,
tabs(3) + jpaObjVar + ".set" + field.foriegnKeyJPAClass + "(" + varNameForForiegnKeyObj + ");");
}
}
classStr = addLines(classStr, tabs(3) + "if (" + existingJPAObjVar + " == null) {");
classStr = addLines(classStr, tabs(4) + "em.persist(" + jpaObjVar + ");");
classStr = addLines(classStr, tabs(3) + "} else {");
classStr = addLines(classStr, tabs(4) + "em.merge(" + jpaObjVar + ");");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(3) + "em.getTransaction().commit();");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(2) + "} catch (Exception e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(1) + "}");
// isexist method
classStr = addLines(classStr, tabs(1));
classStr = addLines(classStr, tabs(1) + "@Override");
classStr = addLines(
classStr,
tabs(1) + "public boolean isExists(Object identifier) throws " + getExceptionClassName() + " {");
if (model.jpaClassModel.generatePKClass) {
classStr = addLines(classStr, tabs(2) + "HashMap<String, String> ids;");
classStr = addLines(classStr, tabs(2) + "if (identifier instanceof Map) {");
classStr = addLines(classStr, tabs(3) + "ids = (HashMap<String, String>) identifier;");
classStr = addLines(classStr, tabs(2) + "} else {");
classStr = addLines(
classStr,
tabs(3) + "logger.error(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(
classStr,
tabs(3) + "throw new " + getExceptionClassName()
+ "(\"Identifier should be a map with the field name and it's value\");");
classStr = addLines(classStr, tabs(2) + "}");
}
primaryKeySearchString = null;
if (model.jpaClassModel.generatePKClass) {
List<String> fieldStrings = new ArrayList<String>();
for (JPAClassField field : model.jpaClassModel.pkClassModel.pkFields) {
fieldStrings.add("ids.get(" + model.jpaClassConstantClassName + "." + field.fieldNameConstant + ")");
}
primaryKeySearchString = "new " + model.jpaClassModel.pkClassModel.className + "("
+ commaSeperatedString(fieldStrings, ", ") + ")";
} else {
for (JPAClassField field : model.jpaClassModel.fields) {
if (field.primaryKey) {
primaryKeySearchString = "identifier";
}
}
}
classStr = addLines(classStr, tabs(2) + "EntityManager em = null;");
classStr = addLines(classStr, tabs(2) + "try {");
classStr = addLines(classStr, tabs(3) + "em = " + getJpaUtilsClassName() + ".getEntityManager();");
classStr = addLines(
classStr,
tabs(3) + model.jpaClassModel.className + " " + jpaObjVar + " = em.find("
+ model.jpaClassModel.className + ".class, " + primaryKeySearchString + ");");
classStr = addLines(classStr, tabs(3) + "em.close();");
classStr = addLines(classStr, tabs(3) + "return " + jpaObjVar + " != null;");
classStr = addLines(classStr, tabs(2) + "} catch (ApplicationSettingsException e) {");
classStr = addLines(classStr, tabs(3) + "logger.error(e.getMessage(), e);");
classStr = addLines(classStr, tabs(3) + "throw new " + getExceptionClassName() + "(e);");
classStr = addLines(classStr, tabs(2) + "} finally {");
classStr = addLines(classStr, tabs(3) + "if (em != null && em.isOpen()) {");
classStr = addLines(classStr, tabs(4) + "if (em.getTransaction().isActive()) {");
classStr = addLines(classStr, tabs(5) + "em.getTransaction().rollback();");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(4) + "em.close();");
classStr = addLines(classStr, tabs(3) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(1) + "}");
classStr = addLines(classStr, fieldGetters.toArray(new String[] {}));
classStr = addLines(classStr, fieldSetters.toArray(new String[] {}));
classStr = addLines(classStr, "}");
return classStr;
}
public String generateAbstractResourceClassUpdates(JPAResourceClassModel model) {
String classStr = null;
classStr = addLines(classStr, "public abstract class AbstractResource implements Resource {");
classStr = addLines(
classStr,
tabs(1) + "public static final String " + model.jpaClassModel.classNameConstant + " = \""
+ model.jpaClassModel.className + "\";");
classStr = addLines(
classStr, tabs(1) + "// " + convertToTitleCaseString(model.jpaClassModel.className) + " Table");
classStr = addLines(classStr, tabs(1) + "public final class " + model.jpaClassConstantClassName + " {");
for (JPAClassField jpaField : model.jpaClassModel.fields) {
classStr = addLines(
classStr,
tabs(2) + "public static final String " + jpaField.fieldNameConstant + " = \"" + jpaField.fieldName
+ "\";");
}
classStr = addLines(classStr, tabs(1) + "}");
classStr = addLines(classStr, "}");
return classStr;
}
public String generateAppCatalogJPAUtilUpdates(JPAResourceClassModel model) {
String classStr = null;
String conversionMethodName = "create" + model.jpaClassModel.className;
classStr = addLines(classStr, "public class " + getJpaUtilsClassName() + " {");
classStr = addLines(
classStr,
tabs(1) + "public static Resource getResource(" + getResourceTypeClassName() + " type, Object o) {");
classStr = addLines(classStr, tabs(2) + "switch (type){");
classStr = addLines(classStr, tabs(3) + "case " + model.jpaClassModel.classNameConstant + ":");
classStr = addLines(classStr, tabs(4) + "if (o instanceof " + model.jpaClassModel.className + "){");
classStr = addLines(
classStr, tabs(5) + "return " + conversionMethodName + "((" + model.jpaClassModel.className + ") o);");
classStr = addLines(classStr, tabs(4) + "}else{");
classStr = addLines(
classStr,
tabs(5) + "logger.error(\"Object should be a " + convertToTitleCaseString(model.jpaClassModel.className)
+ ".\", new IllegalArgumentException());");
classStr = addLines(
classStr,
tabs(5) + "throw new IllegalArgumentException(\"Object should be a "
+ convertToTitleCaseString(model.jpaClassModel.className) + ".\");");
classStr = addLines(classStr, tabs(4) + "}");
classStr = addLines(classStr, tabs(2) + "}");
classStr = addLines(classStr, tabs(1) + "}");
classStr = addLines(classStr, tabs(1));
String resourceVariableName = createVarNameFromClassName(model.className);
classStr = addLines(
classStr,
tabs(1) + "private static Resource " + conversionMethodName + "(" + model.jpaClassModel.className
+ " o) {");
classStr = addLines(
classStr, tabs(2) + model.className + " " + resourceVariableName + " = new " + model.className + "();");
for (JPAClassField field : model.jpaClassModel.fields) {
classStr = addLines(
classStr,
tabs(2) + resourceVariableName + ".set" + field.fieldTitle + "(o.get" + field.fieldTitle + "());");
if (field.foriegnKey) {
classStr = addLines(
classStr,
tabs(2) + resourceVariableName + ".set" + field.foriegnKeyJPAResourceClass + "(("
+ field.foriegnKeyJPAResourceClass + ")create" + field.foriegnKeyJPAClass + "(o.get"
+ field.foriegnKeyJPAClass + "()));");
}
}
classStr = addLines(classStr, tabs(2) + "return " + resourceVariableName + ";");
classStr = addLines(classStr, tabs(1) + "}");
classStr = addLines(classStr, "}");
return classStr;
}
public String generateAppCatalogResourceTypeUpdates(JPAResourceClassModel model) {
String classStr = null;
classStr = addLines(classStr, "public enum " + getResourceTypeClassName() + " {");
classStr = addLines(classStr, tabs(1) + model.jpaClassModel.classNameConstant);
classStr = addLines(classStr, "}");
return classStr;
}
public String getExceptionClassName() {
return exceptionClassName;
}
public void setExceptionClassName(String exceptionClassName) {
this.exceptionClassName = exceptionClassName;
}
public String getJpaUtilsClassName() {
return jpaUtilsClassName;
}
public void setJpaUtilsClassName(String jpaUtilsClassName) {
this.jpaUtilsClassName = jpaUtilsClassName;
}
public String getResourceTypeClassName() {
return resourceTypeClassName;
}
public void setResourceTypeClassName(String resourceTypeClassName) {
this.resourceTypeClassName = resourceTypeClassName;
}
public String getQueryGeneratorClassName() {
return queryGeneratorClassName;
}
public void setQueryGeneratorClassName(String queryGeneratorClassName) {
this.queryGeneratorClassName = queryGeneratorClassName;
}
}