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

nz.co.gregs.dbvolution.generation.DBTableClass Maven / Gradle / Ivy

/*
 * Copyright 2013 Gregory Graham.
 *
 * Licensed 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 nz.co.gregs.dbvolution.generation;

import java.util.ArrayList;
import java.util.List;
import nz.co.gregs.dbvolution.DBRow;
import nz.co.gregs.dbvolution.annotations.*;
import nz.co.gregs.dbvolution.datatypes.DBUnknownDatatype;

/**
 *
 * 

Support DBvolution at * Patreon

* * @author Gregory Graham */ public class DBTableClass { private static final long serialVersionUID = 1L; private final Class unknownDatatype = DBUnknownDatatype.class; private String packageName; private String className; private String tableName; private final String tableSchema; private String javaSource; private final List fields = new ArrayList(); private final String lineSeparator = System.getProperty("line.separator"); private final String conceptBreak = lineSeparator + lineSeparator; /** * Constructor with required information for automatically creating a DBRow * class. * * @param tableName tableName * @param tableSchema * @param packageName packageName * @param className className */ public DBTableClass(String tableName, String tableSchema, String packageName, String className) { this.tableName = tableName; this.tableSchema = tableSchema; this.packageName = packageName; this.className = className; } /** * Returns the package and class name formatted for use in Java code. * *

* For a class named AClass in the package com.acme.database {@link #getFullyQualifiedName() * } will return "com.acme.database.AClass". * *

Support DBvolution at * Patreon

* * @return a String of the fully qualified class name. */ public String getFullyQualifiedName() { return this.getPackageName() + "." + getClassName(); } /** * Transforms the information encapsulated within the DBTableClass into valid * Java source code. * *

* After all available information has been set for this DBTableClass, this * method is called to generate the required Java source. * * @param options *

Support DBvolution at * Patreon

* @return a String of the source code of the new DBRow class. */ public String generateJavaSource(DBTableClassGenerator.Options options) { StringBuilder javaSrc = new StringBuilder(); final String outputPackageName = this.getPackageName(); if (outputPackageName != null) { javaSrc.append("package ").append(outputPackageName).append(";"); javaSrc.append(conceptBreak); } final String importPackageName = DBRow.class.getPackage().getName(); javaSrc.append("import ").append(importPackageName).append(".*;"); javaSrc.append(lineSeparator); javaSrc.append("import ").append(importPackageName).append(".datatypes.*;"); javaSrc.append(lineSeparator); javaSrc.append("import ").append(importPackageName).append(".datatypes.spatial2D.*;"); javaSrc.append(lineSeparator); javaSrc.append("import ").append(importPackageName).append(".annotations.*;"); javaSrc.append(conceptBreak); final String tableNameAnnotation = DBTableName.class.getSimpleName(); final String dbRowClassName = DBRow.class.getSimpleName(); final String dbColumnAnnotation = DBColumn.class.getSimpleName(); final String primaryKeyAnnotation = DBPrimaryKey.class.getSimpleName(); final String autoIncrementAnnotation = DBAutoIncrement.class.getSimpleName(); final String foreignKeyAnnotation = DBForeignKey.class.getSimpleName(); final String unknownJavaSQLTypeAnnotation = DBUnknownJavaSQLType.class.getSimpleName(); if (this.tableSchema == null || "PUBLIC".equals(tableSchema.toUpperCase()) || "dbo".equals(tableSchema)) { javaSrc.append("@").append(tableNameAnnotation).append("(\"").append(this.getTableName()).append("\") "); } else { javaSrc.append("@").append(tableNameAnnotation).append("(value=\"").append(this.getTableName()).append("\", schema=\"").append(this.tableSchema).append("\") "); } javaSrc.append(lineSeparator); javaSrc.append("public class ").append(this.getClassName()).append(" extends ").append(dbRowClassName).append(" {"); javaSrc.append(conceptBreak); javaSrc.append(" public static final long serialVersionUID = ").append(options.versionNumber).append("L;"); javaSrc.append(conceptBreak); for (DBTableField field : getFields()) { if (field.comments == null || field.comments.isEmpty()) { javaSrc.append(" @").append(dbColumnAnnotation).append("(\"").append(field.columnName).append("\")"); } else { javaSrc.append(" @").append(dbColumnAnnotation).append("(value=\"").append(field.columnName).append("\"") .append(", comments=\"").append(field.comments.replaceAll("\"", "\\\"")).append(")"); } javaSrc.append(lineSeparator); if (field.isPrimaryKey) { javaSrc.append(" @").append(primaryKeyAnnotation).append(lineSeparator); } if (field.isAutoIncrement) { javaSrc.append(" @").append(autoIncrementAnnotation).append(lineSeparator); } if (field.isForeignKey) { if (options.includeForeignKeyColumnName) { javaSrc.append(" @").append(foreignKeyAnnotation).append("(value = ").append(field.referencesClass).append(".class, column = \"").append(field.referencesField).append("\")"); } else { javaSrc.append(" @").append(foreignKeyAnnotation).append("(").append(field.referencesClass).append(".class)"); } javaSrc.append(lineSeparator); } if (unknownDatatype.equals(field.columnType)) { javaSrc.append(" @").append(unknownJavaSQLTypeAnnotation).append("(").append(field.javaSQLDatatype).append(")"); javaSrc.append(lineSeparator); } javaSrc.append(" public ").append(field.columnType.getSimpleName()).append(" ").append(field.fieldName).append(" = new ").append(field.columnType.getSimpleName()).append("();"); javaSrc.append(conceptBreak); } javaSrc.append("}"); javaSrc.append(conceptBreak); this.javaSource = javaSrc.toString(); return this.getJavaSource(); } /** *

Support DBvolution at * Patreon

* * @return the packageName */ public String getPackageName() { return packageName; } /** * @param packageName the packageName to set */ private void setPackageName(String packageName) { this.packageName = packageName; } /** *

Support DBvolution at * Patreon

* * @return the fields */ public List getFields() { return fields; } /** *

Support DBvolution at * Patreon

* * @return the javaSource */ public String getJavaSource() { return javaSource; } /** *

Support DBvolution at * Patreon

* * @return the tableName */ public String getTableName() { return tableName; } /** * @param tableName the tableName to set */ private void setTableName(String tableName) { this.tableName = tableName; } /** *

Support DBvolution at * Patreon

* * @return the className */ public String getClassName() { return className; } /** * @param className the className to set */ private void setClassName(String className) { this.className = className; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy