Author: lfryc(a)redhat.com
Date: 2010-07-30 11:36:03 -0400 (Fri, 30 Jul 2010)
New Revision: 18300
Modified:
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/AbstractMetamerTest.java
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/MatrixConfigurator.java
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/annotations/Templates.java
Log:
support for parametrization of classes and methods with @Templates
Modified:
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/AbstractMetamerTest.java
===================================================================
---
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/AbstractMetamerTest.java 2010-07-30
15:35:17 UTC (rev 18299)
+++
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/AbstractMetamerTest.java 2010-07-30
15:36:03 UTC (rev 18300)
@@ -54,8 +54,8 @@
public static final long TIMEOUT = 5000;
@Inject
- @Templates(include = { "plain", "richDataTable1,redDiv",
"richDataTable2,redDiv", "a4jRepeat1", "a4jRepeat2",
- "hDataTable1", "hDataTable2", "uiRepeat1",
"uiRepeat2" })
+ @Templates({ "plain", "richDataTable1,redDiv",
"richDataTable2,redDiv", "a4jRepeat1", "a4jRepeat2",
"hDataTable1",
+ "hDataTable2", "uiRepeat1", "uiRepeat2" })
private TemplatesList template;
/**
Modified:
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/MatrixConfigurator.java
===================================================================
---
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/MatrixConfigurator.java 2010-07-30
15:35:17 UTC (rev 18299)
+++
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/MatrixConfigurator.java 2010-07-30
15:36:03 UTC (rev 18300)
@@ -70,6 +70,7 @@
Map<Class<?>, Map<Method, Configuration>> configurations = new
HashMap<Class<?>, Map<Method, Configuration>>();
LinkedList<Method> methods = new LinkedList<Method>();
boolean methodConfigured = false;
+ Field templatesField = null;
public static Map<Field, Object> getCurrentConfiguration() {
@@ -157,21 +158,30 @@
parameters.put(field, getUseParameter(realClass, field.getType(),
field.getAnnotation(Use.class)));
} else if (field.getAnnotation(Templates.class) != null) {
parameters.put(field,
- getTemplatesParameter(realClass, field.getType(),
field.getAnnotation(Templates.class)));
+ getTemplatesParameter(realClass, field.getType(),
field.getAnnotation(Templates.class), parameters));
+ templatesField = field;
} else {
parameters.put(field, null);
unsatisfied.add(field);
}
}
}
+
+ if (templatesField == null) {
+ throw new IllegalStateException("there is no field annotated @Templates
in " + realClass.getName());
+ }
- // fulfill parameters by super classes' annotations
- fulfillParametersFromAnnotations(realClass, parameters, unsatisfied,
- getAnnotationsForAllSuperClasses(realClass));
+ try {
+ // fulfill parameters by super classes' annotations
+ fulfillParametersFromAnnotations(realClass, parameters, unsatisfied,
+ getAnnotationsForAllSuperClasses(realClass));
- // fulfill parameters by method annotations
- fulfillParametersFromAnnotations(realClass, parameters, unsatisfied,
realMethod.getAnnotations());
-
+ // fulfill parameters by method annotations
+ fulfillParametersFromAnnotations(realClass, parameters, unsatisfied,
realMethod.getAnnotations());
+ } finally {
+ templatesField = null;
+ }
+
if (!unsatisfied.isEmpty()) {
throw new IllegalStateException("cannot satisfy following injection
points: " + unsatisfied.toString());
}
@@ -210,6 +220,10 @@
}
}
}
+ if (annotation.annotationType() == Templates.class) {
+ Templates templatesAnnotation = (Templates) annotation;
+ parameters.put(templatesField, getTemplatesParameter(testClass,
templatesField.getType(), templatesAnnotation, parameters));
+ }
}
}
@@ -340,17 +354,54 @@
}
private List<TemplatesList> getTemplatesParameter(Class<?> testClass,
Class<?> parameterType,
- Templates templatesAnnotation) {
+ Templates templatesAnnotation, Map<Field, List<? extends Object>>
parameters) {
if (parameterType != TemplatesList.class) {
throw new IllegalStateException("only " + Template.class.getName()
+ " fields can be annotated with @Inject @Templates");
}
- List<TemplatesList> templates = MetamerProperties.getTemplates();
-
- if (templates == null) {
- templates = MetamerProperties.parseTemplates(templatesAnnotation.include());
+ List<TemplatesList> templates = null;
+
+ // if templates was already set, load them
+ if (templatesField != null) {
+ templates = (List<TemplatesList>) parameters.get(templatesField);
}
+
+ // get user defined templates
+ List<TemplatesList> userTemplates = MetamerProperties.getTemplates();
+
+ // if "value" is defined, takes precedens
+ if (templatesAnnotation.value().length > 0) {
+ templates = MetamerProperties.parseTemplates(templatesAnnotation.value());
+ }
+
+ // include all "include" to current list
+ if (templatesAnnotation.include().length > 0) {
+ List<TemplatesList> includeTemplates =
MetamerProperties.parseTemplates(templatesAnnotation.include());
+ if (templates == null) {
+ templates = includeTemplates;
+ } else {
+ includeTemplates.removeAll(templates);
+ templates.addAll(includeTemplates);
+ }
+ }
+
+ // exclude all "exclude" from current list
+ if (templatesAnnotation.exclude().length > 0) {
+ List<TemplatesList> excludeTemplates =
MetamerProperties.parseTemplates(templatesAnnotation.exclude());
+ if (templates != null) {
+ templates.removeAll(excludeTemplates);
+ }
+ }
+
+ // remove all templates which wasn't in user defined set
+ if (userTemplates != null) {
+ if (templates == null) {
+ templates = userTemplates;
+ } else {
+ templates.retainAll(userTemplates);
+ }
+ }
return templates;
}
Modified:
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/annotations/Templates.java
===================================================================
---
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/annotations/Templates.java 2010-07-30
15:35:17 UTC (rev 18299)
+++
root/tests/metamer/trunk/ftest-source/src/main/java/org/richfaces/tests/metamer/ftest/annotations/Templates.java 2010-07-30
15:36:03 UTC (rev 18300)
@@ -34,6 +34,7 @@
@Target({ TYPE, FIELD, METHOD, PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface Templates {
+ String[] value() default {};
String[] include() default {};
String[] exclude() default {};
}