001: /**
002: * EasyBeans
003: * Copyright (C) 2006 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: JavaxPersistencePersistenceContextVisitor.java 2059 2007-11-22 17:22:33Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.deployment.annotations.analyzer;
025:
026: import javax.persistence.PersistenceContextType;
027:
028: import org.ow2.easybeans.deployment.annotations.impl.JavaxPersistenceContext;
029: import org.ow2.easybeans.deployment.annotations.metadata.interfaces.IPersistenceContext;
030:
031: /**
032: * This class manages the handling of @{@link javax.persistence.PersistenceContext}
033: * annotation.
034: * @param <T> An implementation of IPersistenceContext interface.
035: * @author Florent Benoit
036: */
037: public class JavaxPersistencePersistenceContextVisitor<T extends IPersistenceContext>
038: extends AbsAnnotationVisitor<T> implements AnnotationType {
039:
040: /**
041: * Type of annotation.
042: */
043: public static final String TYPE = "Ljavax/persistence/PersistenceContext;";
044:
045: /**
046: * name attribute of the annotation.
047: */
048: private static final String NAME = "name";
049:
050: /**
051: * UnitName attribute of the annotation.
052: */
053: private static final String UNIT_NAME = "unitName";
054:
055: /**
056: * Persistence Context type attribute of the annotation.
057: */
058: private static final String PERSISTENCECONTEXT_TYPE = "type";
059:
060: /**
061: * Transaction type.
062: */
063: private static final String PERSISTENCECONTEXT_TTRANSACTION_TYPE = "TRANSACTION";
064:
065: /**
066: * Persistence context information.
067: */
068: private JavaxPersistenceContext javaxPersistenceContext = null;
069:
070: /**
071: * Constructor.
072: * @param annotationMetadata linked to a class or method or field metadata
073: */
074: public JavaxPersistencePersistenceContextVisitor(
075: final T annotationMetadata) {
076: super (annotationMetadata);
077: javaxPersistenceContext = new JavaxPersistenceContext();
078: }
079:
080: /**
081: * Visits a primitive value of the annotation.<br>
082: * @param name the value name.
083: * @param value the actual value, whose type must be {@link Byte},
084: * {@link Boolean}, {@link Character}, {@link Short},
085: * {@link Integer}, {@link Long}, {@link Float}, {@link Double},
086: * {@link String} or {@link org.ow2.easybeans.asm.Type}.
087: */
088: @Override
089: public void visit(final String name, final Object value) {
090: if (UNIT_NAME.equals(name)) {
091: javaxPersistenceContext.setUnitName((String) value);
092: } else if (NAME.equals(name)) {
093: javaxPersistenceContext.setName((String) value);
094: }
095: }
096:
097: /**
098: * Visits an enumeration value of the annotation.
099: * @param name the value name.
100: * @param desc the class descriptor of the enumeration class.
101: * @param value the actual enumeration value.
102: */
103: @Override
104: public void visitEnum(final String name, final String desc,
105: final String value) {
106: if (name.equals(PERSISTENCECONTEXT_TYPE)) {
107: if (PERSISTENCECONTEXT_TTRANSACTION_TYPE.equals(value)) {
108: javaxPersistenceContext
109: .setType(PersistenceContextType.TRANSACTION);
110: } else {
111: javaxPersistenceContext
112: .setType(PersistenceContextType.EXTENDED);
113: }
114:
115: }
116: }
117:
118: /**
119: * @return Internal object used representing @{@link javax.persistence.PersistenceContext} annotation.
120: */
121: protected JavaxPersistenceContext getJavaxPersistenceContext() {
122: return javaxPersistenceContext;
123: }
124:
125: /**
126: * Sets the javaxPersistenceContext object.
127: * @param javaxPersistenceContext the object which replaced the previous one.
128: */
129: protected void setJavaxPersistenceContext(
130: final JavaxPersistenceContext javaxPersistenceContext) {
131: this .javaxPersistenceContext = javaxPersistenceContext;
132: }
133:
134: /**
135: * Visits the end of the annotation.<br>
136: * Creates the object and store it.
137: */
138: @Override
139: public void visitEnd() {
140: // set flag on field
141: getAnnotationMetadata().setJavaxPersistenceContext(
142: javaxPersistenceContext);
143: }
144:
145: /**
146: * @return type of the annotation (its description)
147: */
148: public String getType() {
149: return TYPE;
150: }
151:
152: }
|