Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
vertigo - simple java starter Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com) KleeGroup, Centre d'affaire la Boursidiere - BP 159 - 92357 Le Plessis Robinson Cedex - France 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 io.vertigo.studio.plugins.mda.domain.templates;
 
 
 import java.util.List;

Gestion centralisée des annotations sur les objets générés. Cette implémentation complète les annotations standards et rajoute celles propre à JPA.

Author(s):
pchretien, npiedeloup
 
 final class JpaAnnotationWriter extends AnnotationWriter {
 	private static final String SEQUENCE_PREFIX = "SEQ_";

Ectiture des annotations sur une DT_DEFINITION.

Parameters:
dtDefinition DtDefinition
Returns:
Liste des lignes de code java à ajouter.
 
 	List<StringwriteAnnotations(final DtDefinition dtDefinition) {
 		final List<Stringlines;
 		lines = writeJpaAnnotations(dtDefinition);
 		lines.addAll(super.writeAnnotations(dtDefinition));
 		return lines;
 	}

Ectiture des annotations sur une DT_DEFINITION.

Parameters:
dtDefinition DtDefinition
Returns:
Liste des lignes de code java à ajouter.
 
 	private static List<StringwriteJpaAnnotations(final DtDefinition dtDefinition) {
 		final List<Stringlines = new ArrayList<>();
 		if (dtDefinition.getIdField().isDefined()) { //Il faut un Id pour déclarer l'élément comme Entity. Nous faisons le choix de déclarer comme Entity même les Objects non persistant.
 			lines.add("@javax.persistence.Entity");
 			if (dtDefinition.isPersistent()) {
 				lines.add("@javax.persistence.Table (name = \"" + getTableName(dtDefinition) + "\")");
 				if (containsDataStreamField(dtDefinition)) {
 					lines.add("@org.hibernate.annotations.TypeDefs(value = { @org.hibernate.annotations.TypeDef(name = \"DO_STREAM\", typeClass = io.vertigo.dynamo.plugins.database.connection.hibernate.DataStreamType.class) })");
 				}
 			}
 		}
 		return lines;
 	}
 
 	private static boolean containsDataStreamField(final DtDefinition dtDefinition) {
 		for (final DtField field : dtDefinition.getFields()) {
 			if (field.isPersistent() && field.getDomain().getDataType() == .) {
 				return true;
 			}
 		}
 		return false;
 	}

Ecriture des annotations sur un DT_FIELD.

Parameters:
dtField Champ de la DT_DEFINITION
Returns:
Liste des lignes de code java à ajouter.
 
 	List<StringwriteAnnotations(final DtField dtFieldfinal DtDefinition dtDefinition) {
 		final List<Stringlines;
 		lines = writeJpaAnnotations(dtFielddtDefinition);
 		lines.addAll(super.writeAnnotations(dtFielddtDefinition));
 		return lines;
 	}

Ectiture des annotations sur un DT_FIELD.

Parameters:
field Champ de la DT_DEFINITION
Returns:
Liste des lignes de code java à ajouter.
 
 	private List<StringwriteJpaAnnotations(final DtField fieldfinal DtDefinition dtDefinition) {
 		final List<Stringlines = new ArrayList<>();
 
 		//Générations des annotations JPA / hibernate
		if (field.getType() == ..) {
			lines.add("@javax.persistence.Id");
			//TODO la gestion des sequences est propre à Oracle, HSQL, PostgreSql : autres bdd, autres stratégies
			if (dtDefinition.isPersistent()) {
				final String sequence = getSequenceName(dtDefinition);
				lines.add("@javax.persistence.SequenceGenerator(name = \"sequence\", sequenceName = \"" + sequence + "\")");
				lines.add("@javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO, generator = \"sequence\")");
			}
		}
		if (dtDefinition.isPersistent()) {
			final String fieldName = field.getName();
			lines.add("@javax.persistence.Column(name = \"" + fieldName + "\")");
			if (!field.isPersistent()) {
				lines.add("@javax.persistence.Transient");
			}
			if (field.isPersistent() && field.getDomain().getDataType() == .) {
				lines.add("@org.hibernate.annotations.Type(type = \"DO_STREAM\")");
			}
		}
		return lines;
	}

Ectiture des annotations sur un DT_FIELD gérant une association.

Parameters:
associationNode Noeud de l'association
Returns:
Liste des lignes de code java à ajouter.
	List<StringwriteAnnotations(final AssociationNode associationNode) {
		final List<Stringlines;
		lines = writeJpaAnnotations(associationNode);
		lines.addAll(super.writeAnnotations(associationNode));
		return lines;
	}

Ectiture des annotations sur un DT_FIELD gérant une association.

Parameters:
associationNode Noeud de l'association
Returns:
Liste des lignes de code java à ajouter.
	private static List<StringwriteJpaAnnotations(final AssociationNode associationNode) {
		final List<Stringlines = new ArrayList<>();
		lines.add("@javax.persistence.Transient"); //On ne crée pas de grappe d'objet
		return lines;
	}

Nom de la table en fonction de la définition du DT mappé.

Parameters:
dtDefinition Définition du DT mappé
Returns:
Nom de la table
	private static String getTableName(final DtDefinition dtDefinition) {
		return dtDefinition.getLocalName();
	}

Nom de la séquence utilisée lors des inserts

Parameters:
dtDefinition Définition du DT mappé
Returns:
String Nom de la sequence
	private String getSequenceName(final DtDefinition dtDefinition) {
		//oracle n'autorise pas de sequence de plus de 30 char.
		String seqName =  + getTableName(dtDefinition);
		if (seqName.length() > 30) {
			seqName = seqName.substring(0, 30);
		}
		return seqName;
	}
New to GrepCode? Check out our FAQ X