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

generators.JPAClassGenerator Maven / Gradle / Ivy

package generators;
import java.util.ArrayList;
import java.util.List;

import model.JPAClassField;
import model.JPAClassModel;
import model.JPAPKClassModel;
import model.SQLData;


/*
 *
 * 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 JPAClassGenerator extends AbstractGenerator{
//    private static final Logger log = LoggerFactory.getLogger(JPAClassGenerator.class);
	private String jpaClassPackageName;
	
    public JPAClassModel createJPAClassModel(SQLData sqlData){
		JPAClassModel model = new JPAClassModel();
		model.generatePKClass=sqlData.getPrimaryKeys().size()>1;
		model.tableName=sqlData.getTableName();
		model.className = convertToJavaTitleCaseStringConvention(sqlData.getTableName());
		if (model.generatePKClass) {
			model.pkClassModel.className=model.className+"_PK";
		}
		for (String field : sqlData.getFieldData().keySet()) {
		    String dataType = null;
		    SQLGenerator.DataTypes sqlDataType = SQLGenerator.DataTypes.valueOf(sqlData.getFieldData().get(field).get(0));
		    switch (sqlDataType){
		    case LONGTEXT:case VARCHAR:
		    	dataType="String"; break;
		    case INTEGER: 
		    	dataType="int"; break;
		    case SMALLINT:
		    	dataType="boolean"; break;
		    case TIMESTAMP: 
		    	dataType="Timestamp"; break;
		    case CLOB:
		    	dataType="String"; break;
		    }
		    String fieldTitleString = convertToJavaTitleCaseStringConvention(field);
		    String fieldName = convertToJavaVariableNameCaseStringConvention(field);

		    
		    boolean foriegnKey = sqlData.getForiegnKeys().containsKey(field);
			JPAClassField jpaField = new JPAClassField(field,fieldName,dataType,fieldTitleString,sqlData.getPrimaryKeys().contains(field),
		    		foriegnKey,(foriegnKey?sqlData.getForiegnKeys().get(field).jpaClassName:null),
		    		(foriegnKey?sqlData.getForiegnKeys().get(field).jpaResourceClassName:null));
			model.fields.add(jpaField);
		    if (model.generatePKClass){
		    	if (sqlData.getPrimaryKeys().contains(field)){
		    		model.pkClassModel.pkFields.add(jpaField);
		    	}
		    }
		    
		}
		return model;
	}
    
	public String generateJPAClass(JPAClassModel model){
		String classStr = null;
		String pkClassName = null;
		classStr=addLines(classStr,"@DataCache");
		classStr=addLines(classStr,"@Entity");
		classStr=addLines(classStr,"@Table(name = \""+model.tableName+"\")");
		String className = model.className;
		if (model.generatePKClass) {
			pkClassName=model.pkClassModel.className;
			classStr = addLines(classStr,"@IdClass("+pkClassName+".class)");
		}
		classStr=addLines(classStr,"public class "+className+" implements Serializable {");
		
		List columnFields=new ArrayList();
		List fieldGetters=new ArrayList();
		List fieldSetters=new ArrayList();
		for (JPAClassField jpaField : model.fields) {
			String field=jpaField.tableColumnName;
		    String fieldString=null;
		    
		    String fieldName = jpaField.fieldName;
		    String dataType = jpaField.fieldDataType;
		    String fieldTitleString = jpaField.fieldTitle;

		    
		    fieldString=addLines(fieldString, tabs(1));
		    if (jpaField.primaryKey){
		    	fieldString=addLines(fieldString,tabs(1)+"@Id");	
		    }
		    fieldString=addLines(fieldString,tabs(1)+"@Column(name = \""+field+"\")");
			fieldString=addLines(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){
			    fieldString=null;
			    
			    fieldName = createVarNameFromClassName(jpaField.foriegnKeyJPAClass);
			    dataType = jpaField.foriegnKeyJPAClass;
			    fieldTitleString = jpaField.foriegnKeyJPAClass;
			    
			    
			    fieldString=addLines(fieldString, tabs(1));
			    fieldString=addLines(fieldString,tabs(1)+"@ManyToOne(cascade= CascadeType.MERGE)");
			    fieldString=addLines(fieldString,tabs(1)+"@JoinColumn(name = \""+jpaField.tableColumnName+"\")");
				fieldString=addLines(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[]{}));
		classStr=addLines(classStr,fieldGetters.toArray(new String[]{}));
		classStr=addLines(classStr,fieldSetters.toArray(new String[]{}));
		
		classStr=addLines(classStr,"}");
		return classStr;
	}

	public String generateJPAPKClass(JPAPKClassModel model){
		if (model.pkFields.size()==0){
			return "";
		}
		String classStr=null;
		classStr=addLines(classStr,"public class "+model.className+" implements Serializable {");
		
		List columnFields=new ArrayList();
		List fieldGetters=new ArrayList();
		List fieldSetters=new ArrayList();
		List parameterList=new ArrayList();
		String constructorMethod=null;
		for (JPAClassField jpaField : model.pkFields) {
		    
		    String dataType = jpaField.fieldDataType;
		    String fieldTitleString = jpaField.fieldTitle;
		    String fieldName = jpaField.fieldName;
		    
		    String fieldString=tabs(1)+createFieldVarString(dataType ,fieldName);
		    columnFields.add(fieldString);
		    
		    
		    fieldGetters.add(createGetterString(1, fieldName, dataType, fieldTitleString));

		    fieldSetters.add(createSetterString(1, fieldName,	dataType, fieldTitleString));

		    parameterList.add(dataType+" "+fieldName);
		    constructorMethod=addLines(constructorMethod, tabs(2)+"this."+fieldName+" = "+fieldName+";");
		}
		classStr=addLines(classStr,columnFields.toArray(new String[]{}));
		String constructorParametersString=commaSeperatedString(parameterList,", ");
		constructorMethod=addLines(tabs(1), tabs(1)+"public "+model.className+"("+constructorParametersString+"){",constructorMethod);
		constructorMethod=addLines(constructorMethod, tabs(1)+"}");
		String emptyConstructorMethod=null;
		emptyConstructorMethod=addLines(tabs(1),tabs(1)+"public "+model.className+"(){",tabs(1)+"}");
		
		classStr=addLines(classStr,emptyConstructorMethod);
		classStr=addLines(classStr,constructorMethod);
		



		classStr=addLines(classStr,tabs(1));
		classStr=addLines(classStr,tabs(1)+"@Override");
		classStr=addLines(classStr,tabs(1)+"public boolean equals(Object o) {");
		classStr=addLines(classStr,tabs(2)+"return false;");
		classStr=addLines(classStr,tabs(1)+"}");

		classStr=addLines(classStr,tabs(1));
		classStr=addLines(classStr,tabs(1)+"@Override");
		classStr=addLines(classStr,tabs(1)+"public int hashCode() {");
		classStr=addLines(classStr,tabs(2)+"return 1;");
		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 generatePersistenceXmlEntry(JPAClassModel model){
		String xmlEntry=null;
		xmlEntry=addLines(xmlEntry,"");
		xmlEntry=addLines(xmlEntry,tabs(1)+"");
		xmlEntry=addLines(xmlEntry,tabs(2)+"org.apache.openjpa.persistence.PersistenceProviderImpl");
		xmlEntry=addLines(xmlEntry,tabs(2)+""+getJpaClassPackageName()+"."+model.className+"");
		xmlEntry=addLines(xmlEntry,tabs(2)+"true");
		xmlEntry=addLines(xmlEntry,tabs(1)+"");
		xmlEntry=addLines(xmlEntry,"");
		return xmlEntry;
	}
	
	public String getJpaClassPackageName() {
		return jpaClassPackageName;
	}

	public void setJpaClassPackageName(String jpaClassPackageName) {
		this.jpaClassPackageName = jpaClassPackageName;
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy