blob: 84993c3c00d09483dc58d00d7679c0580bf755f9 [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;
}
}