All Downloads are FREE. Search and download functionalities are using the official Maven repository.

generators.JPAResourceClassGenerator Maven / Gradle / Ivy

The newest version!
/**
 *
 * 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 columnFields=new ArrayList();
		List fieldGetters=new ArrayList();
		List fieldSetters=new ArrayList();
		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 ids;");
			classStr=addLines(classStr,tabs(2)+"if (identifier instanceof Map) {");
			classStr=addLines(classStr,tabs(3)+"ids = (HashMap) 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 ids;");
			classStr=addLines(classStr,tabs(2)+"if (identifier instanceof Map) {");
			classStr=addLines(classStr,tabs(3)+"ids = (HashMap) 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 get(String fieldName, Object value) throws "+getExceptionClassName()+" {");
		
		String resultListVarName=createVarNameFromClassName(model.className)+"s";
		classStr=addLines(classStr,tabs(2)+"List "+resultListVarName+" = new ArrayList();");
		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 fieldNameValidations=new ArrayList();
		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 getIds(String fieldName, Object value) throws "+getExceptionClassName()+" {");
		
		resultListVarName=createVarNameFromClassName(model.className)+"IDs";
		classStr=addLines(classStr,tabs(2)+"List "+resultListVarName+" = new ArrayList();");
		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();
		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 fieldStrings=new ArrayList();
			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 ids;");
			classStr=addLines(classStr,tabs(2)+"if (identifier instanceof Map) {");
			classStr=addLines(classStr,tabs(3)+"ids = (HashMap) 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 fieldStrings=new ArrayList();
			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;
	}
	

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy