package org.jboss.resteasy.test.cdi.generic.resource; import org.jboss.logging.Logger; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; import java.util.ArrayList; @Path("concrete") @Dependent public class ConcreteResource implements ConcreteResourceIntf { private static Logger log = Logger.getLogger(ConcreteResource.class); @Inject @HolderBinding ObjectHolder<?> wildcardObject; @Inject @HolderBinding ObjectHolder<Object> objectObject; @Inject @HolderBinding HierarchyHolder<?> wildcardHierarchy; @Inject @HolderBinding HierarchyHolder<Primate> primateHierarchy; @Inject @HolderBinding HierarchyHolder<? super Australopithecus> lowerBoundHierarchy; @Inject @HolderBinding HierarchyHolder<? extends Animal> upperBoundHierarchy; @Inject @HolderBinding NestedHierarchyHolder<?> wildcardNested; @Inject @HolderBinding NestedHierarchyHolder<HierarchyHolder<Primate>> primateNested; @Inject @HolderBinding NestedHierarchyHolder<HierarchyHolder<? super Australopithecus>> lowerBoundNested; @Inject @HolderBinding NestedHierarchyHolder<HierarchyHolder<? extends Animal>> upperBoundNested; @Inject @HolderBinding UpperBoundHierarchyHolder<?> wildcardUpperBound; @Inject @HolderBinding UpperBoundHierarchyHolder<HierarchyHolder<Primate>> primateUpperBound; @Inject @HolderBinding UpperBoundHierarchyHolder<? extends HierarchyHolder<? extends Animal>> upperBoundUpperBound; @Inject @HolderBinding UpperBoundHierarchyHolder<? extends HierarchyHolder<? super Australopithecus>> lowerBoundUpperBound; @Inject @HolderBinding LowerBoundHierarchyHolder<?> wildcardLowerBound; @Inject @HolderBinding LowerBoundHierarchyHolder<HierarchyHolder<Primate>> primateLowerBound; @Inject @HolderBinding LowerBoundHierarchyHolder<? extends HierarchyHolder<? extends Animal>> upperBoundLowerBound; @Inject @HolderBinding LowerBoundHierarchyHolder<? extends HierarchyHolder<? super Australopithecus>> lowerBoundLowerBound; @Override @GET @Path("injection") public Response testGenerics() { log.info("entering ConcreteResource.testGenerics()"); log.info(wildcardObject.getTypeArgument().toString()); log.info(objectObject.getTypeArgument().toString()); log.info(wildcardHierarchy.getTypeArgument().toString()); log.info(primateHierarchy.getTypeArgument().toString()); log.info(lowerBoundHierarchy.getTypeArgument().toString()); log.info(upperBoundHierarchy.getTypeArgument().toString()); log.info(wildcardNested.getTypeArgument().toString()); log.info(primateNested.getTypeArgument().toString()); log.info(lowerBoundNested.getTypeArgument().toString()); log.info(upperBoundNested.getTypeArgument().toString()); log.info(wildcardUpperBound.getTypeArgument().toString()); log.info(primateUpperBound.getTypeArgument().toString()); log.info(lowerBoundUpperBound.getTypeArgument().toString()); log.info(upperBoundUpperBound.getTypeArgument().toString()); log.info(wildcardLowerBound.getTypeArgument().toString()); log.info(primateLowerBound.getTypeArgument().toString()); log.info(lowerBoundLowerBound.getTypeArgument().toString()); log.info(upperBoundLowerBound.getTypeArgument().toString()); boolean result = true; if (!wildcardObject.getTypeArgument().equals(Object.class)) { log.info("wildcardObject type argument class should be Object instead of " + wildcardObject.getTypeArgument()); result = false; } if (!objectObject.getTypeArgument().equals(Object.class)) { log.info("objectObject type argument class should be Object instead of " + objectObject.getTypeArgument()); result = false; } if (!wildcardHierarchy.getTypeArgument().equals(Primate.class)) { log.info("wildcardHierarchy type argument class should be Primate instead of " + wildcardHierarchy.getTypeArgument()); result = false; } if (!primateHierarchy.getTypeArgument().equals(Primate.class)) { log.info("primateHierarchy type argument class should be Primate instead of " + primateHierarchy.getTypeArgument()); result = false; } if (!lowerBoundHierarchy.getTypeArgument().equals(Primate.class)) { log.info("lowerBoundHierarchy type argument class should be Primate instead of " + lowerBoundHierarchy.getTypeArgument()); result = false; } if (!upperBoundHierarchy.getTypeArgument().equals(Primate.class)) { log.info("upperBoundHierarchy type argument class should be Primate instead of " + upperBoundHierarchy.getTypeArgument()); result = false; } if (!wildcardNested.getTypeArgument().equals(Primate.class)) { log.info("wildcardNested type argument class should be Primate instead of " + wildcardNested.getTypeArgument()); result = false; } if (!primateNested.getTypeArgument().equals(Primate.class)) { log.info("primateNested type argument class should be Primate instead of " + primateNested.getTypeArgument()); result = false; } if (!lowerBoundNested.getTypeArgument().equals(Primate.class)) { log.info("lowerBoundNested type argument class should be Primate instead of " + lowerBoundNested.getTypeArgument()); result = false; } if (!upperBoundNested.getTypeArgument().equals(Primate.class)) { log.info("upperBoundNested type argument class should be Primate instead of " + upperBoundNested.getTypeArgument()); result = false; } if (!wildcardUpperBound.getTypeArgument().equals(Primate.class)) { log.info("wildcardUpperBound type argument class should be Primate instead of " + wildcardUpperBound.getTypeArgument()); result = false; } if (!primateUpperBound.getTypeArgument().equals(Primate.class)) { log.info("primateUpperBound type argument class should be Primate instead of " + primateUpperBound.getTypeArgument()); result = false; } if (!lowerBoundUpperBound.getTypeArgument().equals(Primate.class)) { log.info("lowerBoundUpperBound type argument class should be Primate instead of " + lowerBoundUpperBound.getTypeArgument()); result = false; } if (!upperBoundUpperBound.getTypeArgument().equals(Primate.class)) { log.info("upperBoundUpperBound type argument class should be Primate instead of " + upperBoundUpperBound.getTypeArgument()); result = false; } if (!wildcardLowerBound.getTypeArgument().equals(Primate.class)) { log.info("wildcardLowerBound type argument class should be Primate instead of " + wildcardLowerBound.getTypeArgument()); result = false; } if (!primateLowerBound.getTypeArgument().equals(Primate.class)) { log.info("primateLowerBound type argument class should be Primate instead of " + primateLowerBound.getTypeArgument()); result = false; } if (!lowerBoundLowerBound.getTypeArgument().equals(Primate.class)) { log.info("lowerBoundLowerBound type argument class should be Primate instead of " + lowerBoundLowerBound.getTypeArgument()); result = false; } if (!upperBoundLowerBound.getTypeArgument().equals(Primate.class)) { log.info("upperBoundLowerBound type argument class should be Primate instead of " + upperBoundLowerBound.getTypeArgument()); result = false; } return result ? Response.ok().build() : Response.serverError().build(); } @GET @Path("decorators/clear") public Response clear() { log.info("entering ConcreteResource.clear()"); VisitList.clear(); return Response.ok().build(); } @GET @Path("decorators/execute") public Response execute() { log.info("entering ConcreteResource.execute()"); return Response.ok().build(); } @Override @GET @Path("decorators/test") public Response testDecorators() { log.info("entering ConcreteResource.testDecorators()"); ArrayList<String> expectedList = new ArrayList<String>(); expectedList.add(VisitList.CONCRETE_DECORATOR_ENTER); expectedList.add(VisitList.CONCRETE_DECORATOR_LEAVE); ArrayList<String> visitList = VisitList.getList(); boolean status = expectedList.size() == visitList.size(); if (!status) { log.info("expectedList.size() [" + expectedList.size() + "] != visitList.size() [" + visitList.size() + "]"); } else { for (int i = 0; i < expectedList.size(); i++) { if (!expectedList.get(i).equals(visitList.get(i))) { status = false; log.info("visitList.get(" + i + ") incorrect: should be: " + expectedList.get(i) + ", is: " + visitList.get(i)); break; } } } if (!status) { log.info("\rexpectedList: "); for (int i = 0; i < expectedList.size(); i++) { log.info(i + ": " + expectedList.get(i).toString()); } log.info("\rvisitList:"); for (int i = 0; i < visitList.size(); i++) { log.info(i + ": " + visitList.get(i).toString()); } } return status == true ? Response.ok().build() : Response.serverError().build(); } }