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