Search in sources :

Example 1 with Out

use of jodd.madvoc.meta.Out in project jodd by oblac.

the class ScopeDataResolverTest method testGenericAction.

@Test
public void testGenericAction() {
    ScopeDataResolver scopeDataResolver = new ScopeDataResolver();
    ScopeData[] scopeData = scopeDataResolver.resolveScopeData(GenAction.class);
    ScopeData.In[] in1 = scopeData[ScopeType.REQUEST.value()].in;
    ScopeData.Out[] out1 = scopeData[ScopeType.REQUEST.value()].out;
    ScopeData.In in = in1[0];
    ScopeData.Out out = out1[0];
    assertEquals("input", in.name);
    assertEquals(String.class, in.type);
    assertEquals("output", out.name);
    assertEquals(Integer.class, out.type);
}
Also used : ScopeDataResolver(jodd.madvoc.component.ScopeDataResolver) In(jodd.madvoc.meta.In) ScopeData(jodd.madvoc.ScopeData) Out(jodd.madvoc.meta.Out) Test(org.junit.Test)

Example 2 with Out

use of jodd.madvoc.meta.Out in project jodd by oblac.

the class ScopeDataResolver method inspectOut.

/**
	 * Inspects single INOUT annotation as OUT.
	 * @see #inspectOut(jodd.madvoc.meta.Out, jodd.madvoc.ScopeType, String, Class)
	 */
protected ScopeData.Out inspectOut(InOut inOut, ScopeType scopeType, String propertyName, Class propertyType) {
    if (inOut == null) {
        return null;
    }
    ScopeType scope = inOut.scope();
    if (scope != scopeType) {
        return null;
    }
    ScopeData.Out oi = new ScopeData.Out();
    saveNameTarget(oi, inOut.value(), propertyName);
    oi.type = propertyType;
    return oi;
}
Also used : ScopeType(jodd.madvoc.ScopeType) ScopeData(jodd.madvoc.ScopeData) Out(jodd.madvoc.meta.Out) InOut(jodd.madvoc.meta.InOut)

Example 3 with Out

use of jodd.madvoc.meta.Out in project jodd by oblac.

the class ScopeDataResolver method inspectOut.

/**
	 * Inspects single OUT annotation for a property.
	 */
protected ScopeData.Out inspectOut(Out out, ScopeType scopeType, String propertyName, Class propertyType) {
    if (out == null) {
        return null;
    }
    ScopeType scope = out.scope();
    if (scope != scopeType) {
        return null;
    }
    ScopeData.Out oi = new ScopeData.Out();
    saveNameTarget(oi, out.value(), propertyName);
    oi.type = propertyType;
    return oi;
}
Also used : ScopeType(jodd.madvoc.ScopeType) ScopeData(jodd.madvoc.ScopeData) Out(jodd.madvoc.meta.Out) InOut(jodd.madvoc.meta.InOut)

Example 4 with Out

use of jodd.madvoc.meta.Out in project jodd by oblac.

the class ScopeDataResolver method inspectMethodParameterScopeData.

// ---------------------------------------------------------------- inspect method
/**
	 * Inspects all method parameters for scope type.
	 */
protected ScopeData inspectMethodParameterScopeData(String name, Class type, Annotation[] annotations, ScopeType scopeType) {
    ScopeData sd = new ScopeData();
    int count = 0;
    for (Annotation annotation : annotations) {
        if (annotation instanceof In) {
            ScopeData.In scopeDataIn = inspectIn((In) annotation, scopeType, name, type);
            if (scopeDataIn != null) {
                count++;
                sd.in = new ScopeData.In[] { scopeDataIn };
            }
        } else if (annotation instanceof Out) {
            ScopeData.Out scopeDataOut = inspectOut((Out) annotation, scopeType, name, type);
            if (scopeDataOut != null) {
                count++;
                sd.out = new ScopeData.Out[] { scopeDataOut };
            }
        } else if (annotation instanceof InOut) {
            ScopeData.In scopeDataIn = inspectIn((InOut) annotation, scopeType, name, type);
            if (scopeDataIn != null) {
                count++;
                sd.in = new ScopeData.In[] { scopeDataIn };
            }
            ScopeData.Out scopeDataOut = inspectOut((InOut) annotation, scopeType, name, type);
            if (scopeDataOut != null) {
                count++;
                sd.out = new ScopeData.Out[] { scopeDataOut };
            }
        }
    }
    if (count == 0) {
        return null;
    }
    return sd;
}
Also used : In(jodd.madvoc.meta.In) ScopeData(jodd.madvoc.ScopeData) Annotation(java.lang.annotation.Annotation) InOut(jodd.madvoc.meta.InOut) Out(jodd.madvoc.meta.Out) InOut(jodd.madvoc.meta.InOut)

Example 5 with Out

use of jodd.madvoc.meta.Out in project jodd by oblac.

the class ScopeDataResolver method inspectClassScopeData.

/**
	 * Inspect action for all In/Out annotations.
	 * Returns <code>null</code> if there are no In and Out data.
	 */
protected ScopeData inspectClassScopeData(Class actionClass, ScopeType scopeType) {
    ClassDescriptor cd = ClassIntrospector.lookup(actionClass);
    PropertyDescriptor[] allProperties = cd.getAllPropertyDescriptors();
    List<ScopeData.In> listIn = new ArrayList<>(allProperties.length);
    List<ScopeData.Out> listOut = new ArrayList<>(allProperties.length);
    for (PropertyDescriptor pd : allProperties) {
        // collect annotations
        In in = null;
        if (pd.getFieldDescriptor() != null) {
            in = pd.getFieldDescriptor().getField().getAnnotation(In.class);
        }
        if (in == null && pd.getWriteMethodDescriptor() != null) {
            in = pd.getWriteMethodDescriptor().getMethod().getAnnotation(In.class);
        }
        if (in == null && pd.getReadMethodDescriptor() != null) {
            in = pd.getReadMethodDescriptor().getMethod().getAnnotation(In.class);
        }
        InOut inout = null;
        if (pd.getFieldDescriptor() != null) {
            inout = pd.getFieldDescriptor().getField().getAnnotation(InOut.class);
        }
        if (inout == null && pd.getWriteMethodDescriptor() != null) {
            inout = pd.getWriteMethodDescriptor().getMethod().getAnnotation(InOut.class);
        }
        if (inout == null && pd.getReadMethodDescriptor() != null) {
            inout = pd.getReadMethodDescriptor().getMethod().getAnnotation(InOut.class);
        }
        Out out = null;
        if (pd.getFieldDescriptor() != null) {
            out = pd.getFieldDescriptor().getField().getAnnotation(Out.class);
        }
        if (out == null && pd.getWriteMethodDescriptor() != null) {
            out = pd.getWriteMethodDescriptor().getMethod().getAnnotation(Out.class);
        }
        if (out == null && pd.getReadMethodDescriptor() != null) {
            out = pd.getReadMethodDescriptor().getMethod().getAnnotation(Out.class);
        }
        if (inout != null) {
            if (in != null || out != null) {
                throw new MadvocException("@InOut can not be used with @In or @Out: " + pd.getClassDescriptor().getClass() + '#' + pd.getName());
            }
        }
        // inspect all
        ScopeData.In ii = inspectIn(in, scopeType, pd.getName(), pd.getType());
        if (ii != null) {
            listIn.add(ii);
        }
        ii = inspectIn(inout, scopeType, pd.getName(), pd.getType());
        if (ii != null) {
            listIn.add(ii);
        }
        ScopeData.Out oi = inspectOut(out, scopeType, pd.getName(), pd.getType());
        if (oi != null) {
            listOut.add(oi);
        }
        oi = inspectOut(inout, scopeType, pd.getName(), pd.getType());
        if (oi != null) {
            listOut.add(oi);
        }
    }
    if ((listIn.isEmpty()) && (listOut.isEmpty())) {
        return null;
    }
    ScopeData scopeData = new ScopeData();
    if (!listIn.isEmpty()) {
        scopeData.in = listIn.toArray(new ScopeData.In[listIn.size()]);
    }
    if (!listOut.isEmpty()) {
        scopeData.out = listOut.toArray(new ScopeData.Out[listOut.size()]);
    }
    return scopeData;
}
Also used : ClassDescriptor(jodd.introspector.ClassDescriptor) PropertyDescriptor(jodd.introspector.PropertyDescriptor) In(jodd.madvoc.meta.In) ArrayList(java.util.ArrayList) Out(jodd.madvoc.meta.Out) InOut(jodd.madvoc.meta.InOut) ScopeData(jodd.madvoc.ScopeData) InOut(jodd.madvoc.meta.InOut) MadvocException(jodd.madvoc.MadvocException)

Aggregations

Out (jodd.madvoc.meta.Out)8 ScopeData (jodd.madvoc.ScopeData)5 In (jodd.madvoc.meta.In)5 InOut (jodd.madvoc.meta.InOut)4 Annotation (java.lang.annotation.Annotation)2 ArrayList (java.util.ArrayList)2 ClassDescriptor (jodd.introspector.ClassDescriptor)2 PropertyDescriptor (jodd.introspector.PropertyDescriptor)2 ScopeType (jodd.madvoc.ScopeType)2 InjectionPoint (jodd.madvoc.config.InjectionPoint)2 ScopeData (jodd.madvoc.config.ScopeData)2 Field (java.lang.reflect.Field)1 Method (java.lang.reflect.Method)1 MadvocException (jodd.madvoc.MadvocException)1 ScopeDataResolver (jodd.madvoc.component.ScopeDataResolver)1 Target (jodd.madvoc.injector.Target)1 Test (org.junit.Test)1