Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.    
  */
 
 package org.apache.tuscany.sca.implementation.web.runtime.utils;
 
 
 import  javax.servlet.ServletContext;
 
 
 public class ContextHelper {
 
     public static final String COMPONENT_ATTR = "org.apache.tuscany.sca.implementation.web.RuntimeComponent";
 
     public static ComponentContext getComponentContext(ServletContext sc) {
         RuntimeComponent rc = (RuntimeComponent)sc.getAttribute();
         return rc.getComponentContext();
     }
 
     public static <T> T getReference(String nameClass<T> type, ServletContext sc) {
         ServiceReference<T> sr = getComponentContext(sc).getServiceReference(typename);
         if (sr == null) {
             throw new ServiceRuntimeException("Reference '" + name + "' undefined");
         }
         return sr.getService();
     }
 
     public static Object getProperty(String name, ServletContext sc) {
         RuntimeComponent rc = (RuntimeComponent)sc.getAttribute();
         for (ComponentProperty p : rc.getProperties()) {
             if (name.equals(p.getName())) {
                 return p.getValue();
             }
         }
         return null;
     }
 
     public static void inject(Object instance, ServletContext scthrows IllegalArgumentExceptionIllegalAccessExceptionInvocationTargetException {
 
         Class<?> clazz = instance.getClass();
         for (Field field : clazz.getDeclaredFields()) {
             if (field.isAnnotationPresent(Reference.class)) {
                 Reference ref = field.getAnnotation(Reference.class);
                 String name = ref.name() != null && !ref.name().equals("") ? ref.name() : field.getName();
                 Object value = getReference(namefield.getType(), sc);
                 setField(instancefieldvalue);
             } else if (field.isAnnotationPresent(Property.class)) {
                 Property prop = field.getAnnotation(Property.class);
                 String name = prop.name() != null && !prop.name().equals("") ? prop.name() : field.getName();
                 Object value = getProperty(namesc);
                 setField(instancefieldvalue);
             } else if (field.isAnnotationPresent(ComponentName.class)) {
                 RuntimeComponent rc = (RuntimeComponent)sc.getAttribute();
                 setField(instancefieldrc.getName());
             } else if (field.isAnnotationPresent(Context.class)) {
                 setField(instancefieldgetComponentContext(sc));
             }
         }
 
         for (Method method : clazz.getDeclaredMethods()) {
             if (!method.getName().startsWith("set") || method.getParameterTypes().length != 1) {
                 continue;
             }
             String targetName = method.getName().substring(3);
             Class<?> type = method.getParameterTypes()[0];
 
             if (method.isAnnotationPresent(Reference.class)) {
                 Reference ref = method.getAnnotation(Reference.class);
                 String name = ref.name() != null && !ref.name().equals("") ? ref.name() : targetName;
                 Object value = getReference(nametypesc);
                 setMethod(instancemethodvalue);
             } else if (method.isAnnotationPresent(Property.class)) {
                Property prop = method.getAnnotation(Property.class);
                String name = prop.name() != null && !prop.name().equals("") ? prop.name() : targetName;
                Object value = getProperty(namesc);
                setMethod(instancemethodvalue);
            } else if (method.isAnnotationPresent(ComponentName.class)) {
                RuntimeComponent rc = (RuntimeComponent)sc.getAttribute();
                setMethod(instancemethodrc.getName());
            } else if (method.isAnnotationPresent(Context.class)) {
                setMethod(instancemethodgetComponentContext(sc));
            }
        }
    }
    private static void setMethod(Object instanceMethod methodObject valuethrows IllegalArgumentExceptionIllegalAccessExceptionInvocationTargetException {
        if (method.isAccessible()) {
            method.invoke(instancenew Object[] {value});
        } else {
            method.setAccessible(true);
            method.invoke(instancenew Object[] {value});
            method.setAccessible(false);
        }
    }
    private static void setField(Object instanceField fieldObject valuethrows IllegalArgumentExceptionIllegalAccessException {
        if (field.isAccessible()) {
            field.set(instancevalue);
        } else {
            field.setAccessible(true);
            field.set(instancevalue);
            field.setAccessible(false);
        }
    }
New to GrepCode? Check out our FAQ X