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);
}
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;
}
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;
}
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;
}
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;
}
Aggregations