001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019:
020: package org.apache.geronimo.j2ee.deployment.annotation;
021:
022: import java.lang.reflect.Field;
023: import java.lang.reflect.Method;
024:
025: import org.apache.geronimo.common.DeploymentException;
026: import org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil;
027: import org.apache.geronimo.xbeans.javaee.FullyQualifiedClassType;
028: import org.apache.geronimo.xbeans.javaee.InjectionTargetType;
029: import org.apache.geronimo.xbeans.javaee.JavaIdentifierType;
030: import org.apache.xmlbeans.XmlException;
031:
032: /**
033: * @version $Rev: 522642 $ $Date: 2007-03-26 15:08:52 -0700 (Mon, 26 Mar 2007) $
034: */
035: public class AnnotationHelper {
036: protected static String getInjectionJavaType(Method method,
037: Field field) {
038: if (method != null) {
039: String injectionJavaType = method.getName().substring(3);
040: StringBuilder stringBuilder = new StringBuilder(
041: injectionJavaType);
042: stringBuilder.setCharAt(0, Character
043: .toLowerCase(stringBuilder.charAt(0)));
044: return stringBuilder.toString();
045: } else if (field != null) {
046: return field.getName();
047: } else {
048: throw new IllegalArgumentException(
049: "You must supply exactly one of Method, Field");
050: }
051: }
052:
053: protected static String getInjectionClass(Method method, Field field) {
054: if (method != null) {
055: return method.getDeclaringClass().getName();
056: } else if (field != null) {
057: return field.getDeclaringClass().getName();
058: } else {
059: throw new IllegalArgumentException(
060: "You must supply exactly one of Method, Field");
061: }
062: }
063:
064: protected static boolean hasTarget(Method method, Field field,
065: InjectionTargetType[] targets) {
066: String injectionJavaType = getInjectionJavaType(method, field);
067: String injectionClass = getInjectionClass(method, field);
068: for (InjectionTargetType target : targets) {
069: if (injectionClass.equals(target.getInjectionTargetClass()
070: .getStringValue().trim())
071: && injectionJavaType.equals(target
072: .getInjectionTargetName().getStringValue()
073: .trim())) {
074: return true;
075: }
076: }
077: return false;
078: }
079:
080: /**
081: * Configure Injection Target
082: *
083: * @param injectionTarget
084: * @param method
085: * @param field
086: */
087: protected static void configureInjectionTarget(
088: InjectionTargetType injectionTarget, Method method,
089: Field field) {
090:
091: String injectionJavaType = getInjectionJavaType(method, field);
092: String injectionClass = getInjectionClass(method, field);
093:
094: FullyQualifiedClassType qualifiedClass = injectionTarget
095: .addNewInjectionTargetClass();
096: JavaIdentifierType javaType = injectionTarget
097: .addNewInjectionTargetName();
098: qualifiedClass.setStringValue(injectionClass);
099: javaType.setStringValue(injectionJavaType);
100: }
101:
102: /**
103: * Validate deployment descriptor
104: *
105: * @param annotatedApp the wrapped deployment descriptor
106: * @throws org.apache.geronimo.common.DeploymentException
107: * thrown if deployment descriptor cannot be parsed
108: */
109: protected static void validateDD(AnnotatedApp annotatedApp)
110: throws DeploymentException {
111: try {
112: XmlBeansUtil.parse(annotatedApp.toString());
113: } catch (XmlException e) {
114: throw new DeploymentException(
115: "Result of processing web service refs invalid.", e);
116: }
117: }
118: }
|