Search in sources :

Example 1 with InOut

use of jodd.madvoc.meta.InOut 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 2 with InOut

use of jodd.madvoc.meta.InOut 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 3 with InOut

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

ScopeData (jodd.madvoc.ScopeData)3 InOut (jodd.madvoc.meta.InOut)3 Out (jodd.madvoc.meta.Out)3 In (jodd.madvoc.meta.In)2 Annotation (java.lang.annotation.Annotation)1 ArrayList (java.util.ArrayList)1 ClassDescriptor (jodd.introspector.ClassDescriptor)1 PropertyDescriptor (jodd.introspector.PropertyDescriptor)1 MadvocException (jodd.madvoc.MadvocException)1 ScopeType (jodd.madvoc.ScopeType)1