public String generateJPAResourceClass()

in modules/registry/registry-tools/jpa-gen/src/main/java/generators/JPAResourceClassGenerator.java [68:440]


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