Search in sources :

Example 1 with In

use of jodd.madvoc.meta.In 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 In

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

the class ScopeDataResolver method inspectIn.

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

Example 3 with In

use of jodd.madvoc.meta.In 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 4 with In

use of jodd.madvoc.meta.In 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)

Example 5 with In

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

the class ScopeDataResolver method inspectIn.

/**
	 * Inspects single IN annotation for a property.
	 */
protected ScopeData.In inspectIn(In in, ScopeType scopeType, String propertyName, Class propertyType) {
    if (in == null) {
        return null;
    }
    ScopeType scope = in.scope();
    if (scope != scopeType) {
        return null;
    }
    ScopeData.In ii = new ScopeData.In();
    saveNameTarget(ii, in.value(), propertyName);
    ii.type = propertyType;
    return ii;
}
Also used : ScopeType(jodd.madvoc.ScopeType) In(jodd.madvoc.meta.In) ScopeData(jodd.madvoc.ScopeData)

Aggregations

In (jodd.madvoc.meta.In)8 ScopeData (jodd.madvoc.ScopeData)6 Out (jodd.madvoc.meta.Out)5 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 ScopeDataResolver (jodd.madvoc.component.ScopeDataResolver)2 InjectionPoint (jodd.madvoc.config.InjectionPoint)2 ScopeData (jodd.madvoc.config.ScopeData)2 InOut (jodd.madvoc.meta.InOut)2 Test (org.junit.Test)2 Field (java.lang.reflect.Field)1 Method (java.lang.reflect.Method)1 MadvocException (jodd.madvoc.MadvocException)1