From 16591a86df73e7b7587ae58709e775b610123e3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 3 Jun 2009 16:01:15 +0200 Subject: [PATCH] ItEr11S12ArquitecturaClientesItEr09S11: Moving links support classes to their own package and renaming several classes. --- .../web/common/IRedirectorRegistry.java | 12 ---- .../org/navalplanner/web/common/Linked.java | 19 ------ .../common/{ => converters}/Converter.java | 2 +- .../{ => converters}/ConverterFactory.java | 2 +- .../{ => converters}/IConverterFactory.java | 3 +- .../{ => converters}/ResourceConverter.java | 2 +- .../DefaultExecutorRetriever.java | 2 +- .../EntryPoint.java} | 4 +- .../EntryPoints.java} | 6 +- .../{ => entrypoints}/ExecutorRetriever.java | 2 +- .../entrypoints/IURLHandlerRegistry.java | 12 ++++ .../{ => entrypoints}/MatrixParameters.java | 2 +- .../RedirectorSynthetiser.java | 42 +++++------- .../URLHandler.java} | 68 ++++++++++--------- .../URLHandlerRegistry.java} | 16 +++-- .../criterion/CriterionWorkersController.java | 4 +- ... => IWorkerCRUDControllerEntryPoints.java} | 14 ++-- .../worker/WorkerCRUDController.java | 14 ++-- .../navalplanner-webapp-spring-config.xml | 2 +- ...rixParametersSupportSeveralParameters.java | 1 + ...xParametersSupportsOneParameterTheory.java | 1 + ...ametersSupportsParametersWithoutValue.java | 1 + 22 files changed, 107 insertions(+), 124 deletions(-) delete mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/IRedirectorRegistry.java delete mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/Linked.java rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => converters}/Converter.java (87%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => converters}/ConverterFactory.java (96%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => converters}/IConverterFactory.java (81%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => converters}/ResourceConverter.java (96%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => entrypoints}/DefaultExecutorRetriever.java (92%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{LinkToState.java => entrypoints/EntryPoint.java} (84%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{LinksDefiner.java => entrypoints/EntryPoints.java} (73%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => entrypoints}/ExecutorRetriever.java (83%) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/IURLHandlerRegistry.java rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => entrypoints}/MatrixParameters.java (94%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{ => entrypoints}/RedirectorSynthetiser.java (79%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{Redirector.java => entrypoints/URLHandler.java} (62%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/common/{RedirectorRegistry.java => entrypoints/URLHandlerRegistry.java} (58%) rename navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/{WorkerCRUDLinks.java => IWorkerCRUDControllerEntryPoints.java} (54%) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IRedirectorRegistry.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IRedirectorRegistry.java deleted file mode 100644 index 38155d04b..000000000 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IRedirectorRegistry.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.navalplanner.web.common; - -/** - * Contract for {@link RedirectorRegistry}
- * @author Óscar González Fernández - */ -public interface IRedirectorRegistry { - - public abstract Redirector getRedirectorFor( - Class klassWithLinkableMetadata); - -} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Linked.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Linked.java deleted file mode 100644 index 8436bf956..000000000 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Linked.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.navalplanner.web.common; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.beans.factory.annotation.Qualifier; - -/** - * Marks a controller that redirects to the real controller
- * @author Óscar González Fernández - */ -@Qualifier("linked") -@Retention(RetentionPolicy.RUNTIME) -@Target( { ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE }) -public @interface Linked { - -} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Converter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/Converter.java similarity index 87% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/Converter.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/Converter.java index 9c185a05a..d919ee1b6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Converter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/Converter.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.converters; /** * Converts from an object to an string representation, and converts the object diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ConverterFactory.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ConverterFactory.java similarity index 96% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/ConverterFactory.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ConverterFactory.java index 32237ec32..46392cbcc 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ConverterFactory.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ConverterFactory.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.converters; import java.util.HashMap; import java.util.List; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IConverterFactory.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/IConverterFactory.java similarity index 81% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/IConverterFactory.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/IConverterFactory.java index 34a07fcdc..78a9f32e6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IConverterFactory.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/IConverterFactory.java @@ -1,4 +1,5 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.converters; + /** * Retrieves a Converter given a type
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ResourceConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java similarity index 96% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/ResourceConverter.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java index 0f9369259..f9cd216bf 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ResourceConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/converters/ResourceConverter.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.converters; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.resources.entities.Resource; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/DefaultExecutorRetriever.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/DefaultExecutorRetriever.java similarity index 92% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/DefaultExecutorRetriever.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/DefaultExecutorRetriever.java index 88621fe59..6528ca8fb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/DefaultExecutorRetriever.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/DefaultExecutorRetriever.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinkToState.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoint.java similarity index 84% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinkToState.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoint.java index 0db2a38e0..9241980e6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinkToState.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoint.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -13,6 +13,6 @@ import java.lang.annotation.Target; @Target(ElementType.METHOD) @Documented @Retention(RetentionPolicy.RUNTIME) -public @interface LinkToState { +public @interface EntryPoint { public String[] value(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinksDefiner.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoints.java similarity index 73% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinksDefiner.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoints.java index 7605d3b5b..da0879c2d 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LinksDefiner.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/EntryPoints.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.lang.annotation.Documented; import java.lang.annotation.Retention; @@ -10,10 +10,10 @@ import java.lang.annotation.RetentionPolicy; */ @Documented @Retention(RetentionPolicy.RUNTIME) -public @interface LinksDefiner { +public @interface EntryPoints { public String page(); - public String beanName(); + public String registerAs(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ExecutorRetriever.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/ExecutorRetriever.java similarity index 83% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/ExecutorRetriever.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/ExecutorRetriever.java index bffefc923..19ead33eb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/ExecutorRetriever.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/ExecutorRetriever.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import org.zkoss.zk.ui.Execution; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/IURLHandlerRegistry.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/IURLHandlerRegistry.java new file mode 100644 index 000000000..22c4f722f --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/IURLHandlerRegistry.java @@ -0,0 +1,12 @@ +package org.navalplanner.web.common.entrypoints; + +/** + * Contract for {@link URLHandlerRegistry}
+ * @author Óscar González Fernández + */ +public interface IURLHandlerRegistry { + + public abstract URLHandler getRedirectorFor( + Class klassWithLinkableMetadata); + +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MatrixParameters.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/MatrixParameters.java similarity index 94% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/MatrixParameters.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/MatrixParameters.java index 555dfa19d..61d6ebfeb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MatrixParameters.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/MatrixParameters.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.util.HashMap; import java.util.Map; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorSynthetiser.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/RedirectorSynthetiser.java similarity index 79% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorSynthetiser.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/RedirectorSynthetiser.java index 3394c40b5..d6de9856f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorSynthetiser.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/RedirectorSynthetiser.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.io.IOException; import java.lang.reflect.InvocationHandler; @@ -10,6 +10,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.core.io.Resource; @@ -34,7 +35,7 @@ public class RedirectorSynthetiser implements BeanFactoryPostProcessor { private final Class pageInterface; - private Redirector redirector; + private URLHandler urlHandler; private SynthetizedImplementation( ConfigurableListableBeanFactory beanFactory, @@ -46,26 +47,25 @@ public class RedirectorSynthetiser implements BeanFactoryPostProcessor { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Redirector redirector = getRedirector(); - redirector.doRedirect(method.getName(), args); + URLHandler redirector = getHandler(); + redirector.doTransition(method.getName(), args); return null; } - private Redirector getRedirector() { - if (redirector != null) - return redirector; - RedirectorRegistry redirectorRegistry = (RedirectorRegistry) beanFactory - .getBean(getSpringDefaultName(RedirectorRegistry.class), - RedirectorRegistry.class); - redirector = redirectorRegistry.getRedirectorFor(pageInterface); - return redirector; + private URLHandler getHandler() { + if (urlHandler != null) + return urlHandler; + URLHandlerRegistry registry = (URLHandlerRegistry) BeanFactoryUtils + .beanOfType(beanFactory, URLHandlerRegistry.class); + urlHandler = registry.getRedirectorFor(pageInterface); + return urlHandler; } } public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory) throws BeansException { long elapsedTime = System.currentTimeMillis(); - for (Class pageInterface : findInterfacesMarkedWithLinkable()) { + for (Class pageInterface : findInterfacesMarkedEntryPoints()) { beanFactory.registerSingleton(getBeanName(pageInterface), createRedirectorImplementationFor(beanFactory, pageInterface)); @@ -73,10 +73,10 @@ public class RedirectorSynthetiser implements BeanFactoryPostProcessor { elapsedTime = System.currentTimeMillis() - elapsedTime; LOG.debug("Took " + elapsedTime + " ms to search for interfaces annotated with " - + LinksDefiner.class.getSimpleName()); + + EntryPoints.class.getSimpleName()); } - private List> findInterfacesMarkedWithLinkable() { + private List> findInterfacesMarkedEntryPoints() { List> result = new ArrayList>(); PathMatchingResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); CachingMetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory( @@ -112,7 +112,7 @@ public class RedirectorSynthetiser implements BeanFactoryPostProcessor { ClassMetadata classMetadata = metadataReader.getClassMetadata(); if (classMetadata.isInterface() && annotationMetadata.getAnnotationTypes().contains( - LinksDefiner.class.getName())) { + EntryPoints.class.getName())) { Class klass = Class .forName(classMetadata.getClassName()); if (klass.isInterface()) { @@ -134,14 +134,8 @@ public class RedirectorSynthetiser implements BeanFactoryPostProcessor { beanFactory, pageInterface)); } - private static String getSpringDefaultName(Class klass) { - String simpleName = klass.getSimpleName(); - return simpleName.substring(0, 1).toLowerCase() - + simpleName.substring(1); - } - private static String getBeanName(Class pageInterface) { - LinksDefiner annotation = pageInterface.getAnnotation(LinksDefiner.class); - return annotation.beanName(); + EntryPoints annotation = pageInterface.getAnnotation(EntryPoints.class); + return annotation.registerAs(); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Redirector.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandler.java similarity index 62% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/Redirector.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandler.java index 220b199fb..efdd45e5e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Redirector.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandler.java @@ -1,4 +1,4 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.lang.reflect.Method; import java.util.Arrays; @@ -13,22 +13,24 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.navalplanner.web.common.converters.Converter; +import org.navalplanner.web.common.converters.IConverterFactory; import org.zkoss.zk.ui.Execution; /** *
* @author Óscar González Fernández */ -public class Redirector { +public class URLHandler { - private static final Log LOG = LogFactory.getLog(Redirector.class); + private static final Log LOG = LogFactory.getLog(URLHandler.class); - private static class LinkMetadata { + private static class EntryPointMetadata { private final Method method; - private final LinkToState annotation; + private final EntryPoint annotation; - private LinkMetadata(Method method, LinkToState annotation) { + private EntryPointMetadata(Method method, EntryPoint annotation) { this.method = method; this.annotation = annotation; } @@ -36,42 +38,42 @@ public class Redirector { private final ExecutorRetriever executorRetriever; - private Map metadata = new HashMap(); + private Map metadata = new HashMap(); private final String page; private final IConverterFactory converterFactory; - public Redirector(IConverterFactory converterFactory, - ExecutorRetriever executorRetriever, Class interfaceDefiningLinks) { - Validate.isTrue(interfaceDefiningLinks.isInterface()); + public URLHandler(IConverterFactory converterFactory, + ExecutorRetriever executorRetriever, + Class interfaceDefiningEntryPoints) { + Validate.isTrue(interfaceDefiningEntryPoints.isInterface()); this.converterFactory = converterFactory; this.executorRetriever = executorRetriever; - LinksDefiner linkDefiner = interfaceDefiningLinks - .getAnnotation(LinksDefiner.class); - Validate - .notNull(linkDefiner, LinksDefiner.class.getName() - + " annotation required on " - + interfaceDefiningLinks.getName()); - this.page = linkDefiner.page(); - for (Method method : interfaceDefiningLinks.getMethods()) { - LinkToState linkToState = method.getAnnotation(LinkToState.class); - if (linkToState != null) { - metadata.put(method.getName(), new LinkMetadata(method, - linkToState)); + EntryPoints entryPoints = interfaceDefiningEntryPoints + .getAnnotation(EntryPoints.class); + Validate.notNull(entryPoints, EntryPoints.class.getName() + + " annotation required on " + + interfaceDefiningEntryPoints.getName()); + this.page = entryPoints.page(); + for (Method method : interfaceDefiningEntryPoints.getMethods()) { + EntryPoint entryPoint = method.getAnnotation(EntryPoint.class); + if (entryPoint != null) { + metadata.put(method.getName(), new EntryPointMetadata(method, + entryPoint)); } } } - public void doRedirect(String methodName, Object... values) { + public void doTransition(String methodName, Object... values) { if (!metadata.containsKey(methodName)) { LOG.error("Method " + methodName + "doesn't represent a state(It doesn't have a " - + LinkToState.class.getSimpleName() + + EntryPoint.class.getSimpleName() + " annotation). Nothing will be done"); return; } - LinkMetadata linkableMetadata = metadata.get(methodName); + EntryPointMetadata linkableMetadata = metadata.get(methodName); Class[] types = linkableMetadata.method.getParameterTypes(); String[] parameterNames = linkableMetadata.annotation.value(); String[] stringRepresentations = new String[parameterNames.length]; @@ -102,28 +104,28 @@ public class Redirector { } } - public void applyTo(S controller) { + public void applyIfMatches(S controller) { Execution current = executorRetriever.getCurrent(); Map matrixParams = MatrixParameters .extract((HttpServletRequest) current.getNativeRequest()); Set matrixParamsNames = matrixParams.keySet(); - for (Entry entry : metadata.entrySet()) { - LinkMetadata linkMetadata = entry.getValue(); - LinkToState linkToStateAnnotation = linkMetadata.annotation; + for (Entry entry : metadata.entrySet()) { + EntryPointMetadata entryPointMetadata = entry.getValue(); + EntryPoint entryPointAnnotation = entryPointMetadata.annotation; HashSet requiredParams = new HashSet(Arrays - .asList(linkToStateAnnotation.value())); + .asList(entryPointAnnotation.value())); if (matrixParamsNames.equals(requiredParams)) { Object[] arguments = retrieveArguments(matrixParams, - linkToStateAnnotation, linkMetadata.method + entryPointAnnotation, entryPointMetadata.method .getParameterTypes()); - callMethod(controller, linkMetadata.method, arguments); + callMethod(controller, entryPointMetadata.method, arguments); return; } } } private Object[] retrieveArguments(Map matrixParams, - LinkToState linkToStateAnnotation, Class[] parameterTypes) { + EntryPoint linkToStateAnnotation, Class[] parameterTypes) { Object[] result = new Object[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; i++) { Object argumentName = linkToStateAnnotation.value()[i]; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorRegistry.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandlerRegistry.java similarity index 58% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorRegistry.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandlerRegistry.java index 2d8527cd8..629fd0892 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/RedirectorRegistry.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/entrypoints/URLHandlerRegistry.java @@ -1,20 +1,21 @@ -package org.navalplanner.web.common; +package org.navalplanner.web.common.entrypoints; import java.util.HashMap; import java.util.Map; +import org.navalplanner.web.common.converters.IConverterFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** - * Registry of {@link Redirector}
+ * Registry of {@link URLHandler}
* @author Óscar González Fernández */ @Component @Scope(BeanDefinition.SCOPE_SINGLETON) -public class RedirectorRegistry implements IRedirectorRegistry { +public class URLHandlerRegistry implements IURLHandlerRegistry { @Autowired private ExecutorRetriever executorRetriever; @@ -22,12 +23,13 @@ public class RedirectorRegistry implements IRedirectorRegistry { @Autowired private IConverterFactory converterFactory; - private Map, Redirector> cached = new HashMap, Redirector>();; + private Map, URLHandler> cached = new HashMap, URLHandler>();; - public Redirector getRedirectorFor(Class klassWithLinkableMetadata) { + @SuppressWarnings("unchecked") + public URLHandler getRedirectorFor(Class klassWithLinkableMetadata) { if (cached.containsKey(klassWithLinkableMetadata)) - return cached.get(klassWithLinkableMetadata); - Redirector result = new Redirector(converterFactory, + return (URLHandler) cached.get(klassWithLinkableMetadata); + URLHandler result = new URLHandler(converterFactory, executorRetriever, klassWithLinkableMetadata); cached.put(klassWithLinkableMetadata, result); return result; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionWorkersController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionWorkersController.java index a2610dba4..27dc83249 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionWorkersController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/criterion/CriterionWorkersController.java @@ -9,7 +9,7 @@ import java.util.Set; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.web.common.Util; -import org.navalplanner.web.resources.worker.WorkerCRUDLinks; +import org.navalplanner.web.resources.worker.IWorkerCRUDControllerEntryPoints; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; @@ -34,7 +34,7 @@ public class CriterionWorkersController extends GenericForwardComposer { private Button cancelListButton; - private WorkerCRUDLinks workerCRUD; + private IWorkerCRUDControllerEntryPoints workerCRUD; public void showList(Event event) { loadDataToList(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDLinks.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java similarity index 54% rename from navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDLinks.java rename to navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java index 1491e3e20..60cd7581d 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDLinks.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java @@ -1,23 +1,23 @@ package org.navalplanner.web.resources.worker; import org.navalplanner.business.resources.entities.Worker; -import org.navalplanner.web.common.LinksDefiner; -import org.navalplanner.web.common.LinkToState; +import org.navalplanner.web.common.entrypoints.EntryPoint; +import org.navalplanner.web.common.entrypoints.EntryPoints; /** * Contract for {@link WorkerCRUDController}.
* @author Óscar González Fernández */ -@LinksDefiner(page = "/resources/worker/worker.zul", beanName = "workerCRUD") -public interface WorkerCRUDLinks { +@EntryPoints(page = "/resources/worker/worker.zul", registerAs = "workerCRUD") +public interface IWorkerCRUDControllerEntryPoints { - @LinkToState("edit") + @EntryPoint("edit") public abstract void goToEditForm(Worker worker); - @LinkToState("workRelationships") + @EntryPoint("workRelationships") public abstract void goToWorkRelationshipsForm(Worker worker); - @LinkToState("create") + @EntryPoint("create") public abstract void goToCreateForm(); } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java index 5839fefa2..bc230877a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java @@ -14,12 +14,12 @@ import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.resources.entities.WorkingRelationship; import org.navalplanner.business.resources.services.CriterionService; import org.navalplanner.web.common.IMessagesForUser; -import org.navalplanner.web.common.IRedirectorRegistry; import org.navalplanner.web.common.Level; import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.OnlyOneVisible; -import org.navalplanner.web.common.Redirector; import org.navalplanner.web.common.Util; +import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry; +import org.navalplanner.web.common.entrypoints.URLHandler; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.api.Window; @@ -29,7 +29,7 @@ import org.zkoss.zul.api.Window; * @author Óscar González Fernández */ public class WorkerCRUDController extends GenericForwardComposer implements - WorkerCRUDLinks { + IWorkerCRUDControllerEntryPoints { private Window createWindow; @@ -45,7 +45,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements private IWorkerModel workerModel; - private IRedirectorRegistry redirectorRegistry; + private IURLHandlerRegistry URLHandlerRegistry; private OnlyOneVisible visibility; @@ -179,9 +179,9 @@ public class WorkerCRUDController extends GenericForwardComposer implements new WorkRelationshipsController(this.workerModel,this); this.workRelationship.doAfterCompose( comp.getFellow("addWorkRelationshipWindow")); - Redirector redirector = redirectorRegistry - .getRedirectorFor(WorkerCRUDLinks.class); - redirector.applyTo(this); + URLHandler handler = URLHandlerRegistry + .getRedirectorFor(IWorkerCRUDControllerEntryPoints.class); + handler.applyIfMatches(this); } private LocalizationsController createLocalizationsController( diff --git a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml index f65f8c252..828662434 100644 --- a/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml +++ b/navalplanner-webapp/src/main/resources/navalplanner-webapp-spring-config.xml @@ -13,7 +13,7 @@ required for "@Autowired") --> - + \ No newline at end of file diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportSeveralParameters.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportSeveralParameters.java index a3e6dd211..e78359682 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportSeveralParameters.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportSeveralParameters.java @@ -9,6 +9,7 @@ import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; +import org.navalplanner.web.common.entrypoints.MatrixParameters; /** * Tests that {@link MatrixParameters} supports extracting several diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsOneParameterTheory.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsOneParameterTheory.java index 38c7b1a38..d470b7537 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsOneParameterTheory.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsOneParameterTheory.java @@ -9,6 +9,7 @@ import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; +import org.navalplanner.web.common.entrypoints.MatrixParameters; /** * Test that {@link MatrixParameters} support one parameter
diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsParametersWithoutValue.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsParametersWithoutValue.java index d0ec9cf31..0531c378d 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsParametersWithoutValue.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/common/MatrixParametersSupportsParametersWithoutValue.java @@ -11,6 +11,7 @@ import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; +import org.navalplanner.web.common.entrypoints.MatrixParameters; /** * Tests that {@link MatrixParameters} supports matrix parameters