/** * * 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; } }