You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by nf...@apache.org on 2009/07/15 13:59:00 UTC

svn commit: r794241 - in /incubator/wink/trunk: wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/ wink-common/src/main/java/org/apache/wink/common/internal/registry/ wink-common/src/main/java/org/apache/wink/common/internal/re...

Author: nfischer
Date: Wed Jul 15 11:58:59 2009
New Revision: 794241

URL: http://svn.apache.org/viewvc?rev=794241&view=rev
Log:
Apply @DefaultValue also to methods [WINK-98]

Added:
    incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java
Modified:
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/AssetProvider.java Wed Jul 15 11:58:59 2009
@@ -314,7 +314,7 @@
             Type[] paramTypes = method.getGenericParameterTypes();
             for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
                 Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
-                    parameterAnnotations[pos], method, false);
+                    parameterAnnotations[pos], method, false, null);
                 formalParameters.add(fp);
             }
         }

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/InjectableFactory.java Wed Jul 15 11:58:59 2009
@@ -70,7 +70,7 @@
     }
 
     public Injectable create(Type genericType, Annotation[] annotations, Member member,
-        boolean enclosingEncoded) {
+        boolean encoded, String defaultValue) {
         Class<?> classType = GenericsUtils.getClassType(genericType);
 
         MatrixParam matrix = null;
@@ -80,8 +80,6 @@
         CookieParam cookie = null;
         FormParam form = null;
         Context context = null;
-        Encoded encodedAnn = null;
-        DefaultValue defaultValueAnn = null;
 
         Injectable injectable = null;
         int annotationsCounter = 0;
@@ -108,9 +106,9 @@
                 context = (Context) annotations[i];
                 ++annotationsCounter;
             } else if (annotations[i].annotationType().equals(Encoded.class)) {
-                encodedAnn = (Encoded) annotations[i];
+                encoded = true;
             } else if (annotations[i].annotationType().equals(DefaultValue.class)) {
-                defaultValueAnn = (DefaultValue) annotations[i];
+                defaultValue = ((DefaultValue) annotations[i]).value();
             }
         }
 
@@ -143,12 +141,8 @@
 
         if (injectable instanceof BoundInjectable) {
             BoundInjectable binding = (BoundInjectable) injectable;
-            if (enclosingEncoded || encodedAnn != null) {
-                binding.setEncoded(true);
-            }
-            if (defaultValueAnn != null) {
-                binding.setDefaultValue(defaultValueAnn.value());
-            }
+            binding.setEncoded(encoded);
+            binding.setDefaultValue(defaultValue);
         }
 
         return injectable;

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadata.java Wed Jul 15 11:58:59 2009
@@ -34,12 +34,15 @@
     private List<String>   paths;
     private Set<MediaType> consumes;
     private Set<MediaType> produces;
-    private boolean        encoded = false;
+    private boolean        encoded;
+    private String         defaultValue;
 
     public AbstractMetadata() {
         paths = new ArrayList<String>();
         consumes = new LinkedHashSet<MediaType>();
         produces = new LinkedHashSet<MediaType>();
+        encoded = false;
+        defaultValue = null;
     }
 
     public String getPath() {
@@ -91,4 +94,12 @@
     public boolean isEncoded() {
         return encoded;
     }
+
+    public String getDefaultValue() {
+        return defaultValue;
+    }
+
+    public void setDefaultValue(String defaultValue) {
+        this.defaultValue = defaultValue;
+    }
 }

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/AbstractMetadataCollector.java Wed Jul 15 11:58:59 2009
@@ -128,7 +128,7 @@
             for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
                 Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
                     parameterAnnotations[pos], constructor,
-                    getMetadata().isEncoded() || constructorMetadata.isEncoded());
+                    getMetadata().isEncoded() || constructorMetadata.isEncoded(), null);
 
                 if (!isConstructorParameterValid(fp)) {
                     continue L1;

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java?rev=794241&r1=794240&r2=794241&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/metadata/ResourceMetadataCollector.java Wed Jul 15 11:58:59 2009
@@ -30,6 +30,7 @@
 import java.util.Set;
 
 import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
 import javax.ws.rs.Encoded;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.Path;
@@ -79,7 +80,7 @@
     @Override
     protected final Injectable parseAccessibleObject(AccessibleObject field, Type fieldType) {
         Injectable injectable = InjectableFactory.getInstance().create(fieldType,
-            field.getAnnotations(), (Member) field, getMetadata().isEncoded());
+            field.getAnnotations(), (Member) field, getMetadata().isEncoded(), null);
         if (injectable.getParamType() == Injectable.ParamType.ENTITY) {
             // EntityParam should be ignored for fields (see JSR-311 3.2)
             return null;
@@ -213,6 +214,12 @@
             hasAnnotation = true;
             metadata.addProduces(MediaType.valueOf(mediaType));
         }
+        
+        String defaultValue = getDefaultValue(method);
+        if (defaultValue != null) {
+            metadata.setDefaultValue(defaultValue);
+            hasAnnotation = true;
+        }
 
         if (method.getAnnotation(Encoded.class) != null) {
             metadata.setEncoded(true);
@@ -328,6 +335,14 @@
         }
         return null;
     }
+    
+    private String getDefaultValue(Method method) {
+        DefaultValue defaultValueAnn = method.getAnnotation(DefaultValue.class);
+        if (defaultValueAnn != null) {
+            return defaultValueAnn.value();
+        }
+        return null;
+    }
 
     private void parseMethodParameters(Method method, MethodMetadata methodMetadata) {
         Annotation[][] parameterAnnotations = method.getParameterAnnotations();
@@ -336,7 +351,8 @@
         for (int pos = 0, limit = paramTypes.length; pos < limit; pos++) {
             Injectable fp = InjectableFactory.getInstance().create(paramTypes[pos],
                 parameterAnnotations[pos], method,
-                getMetadata().isEncoded() || methodMetadata.isEncoded());
+                getMetadata().isEncoded() || methodMetadata.isEncoded(),
+                methodMetadata.getDefaultValue());
             if (fp.getParamType() == Injectable.ParamType.ENTITY) {
                 if (entityParamExists) {
                     // we are allowed to have only one entity parameter

Added: incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java?rev=794241&view=auto
==============================================================================
--- incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java (added)
+++ incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/registry/DefaultValueTest.java Wed Jul 15 11:58:59 2009
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.wink.server.internal.registry;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
+import org.apache.wink.test.mock.MockRequestConstructor;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+public class DefaultValueTest extends MockServletInvocationTest {
+
+    private static final String   DEFAULT_VALUE = "MyDefaultValue";
+    private static List<Class<?>> resources     = new LinkedList<Class<?>>();
+
+    static {
+        for (Class<?> cls : DefaultValueTest.class.getClasses()) {
+            if (cls.getSimpleName().endsWith("Resource")) {
+                resources.add(cls);
+            }
+        }
+    }
+
+    @Override
+    protected Class<?>[] getClasses() {
+        return resources.toArray(new Class<?>[resources.size()]);
+    }
+
+    @Path("/a")
+    public static class AResource {
+
+        @QueryParam("hulu")
+        String      noDefault;
+
+        @DefaultValue(DEFAULT_VALUE)
+        @QueryParam("bulu")
+        String      defaultValue;
+
+        @QueryParam("mulu")
+        Set<String> noDefaultSet;
+
+        @DefaultValue(DEFAULT_VALUE)
+        @QueryParam("mulu")
+        Set<String> defaultSet;
+
+        @GET
+        @Produces(MediaType.TEXT_PLAIN)
+        public String get(@DefaultValue("12345") @QueryParam("qulu") int defaultQueryParam,
+                          @HeaderParam("hulu") int noDefaultQueryParam) {
+            return noDefault + ":"
+                + defaultValue
+                + ":"
+                + noDefaultSet
+                + ":"
+                + defaultSet
+                + ":"
+                + defaultQueryParam
+                + ":"
+                + noDefaultQueryParam;
+        }
+
+        @GET
+        @Produces(MediaType.TEXT_HTML)
+        @DefaultValue("98765")
+        public String getParam(@QueryParam("qulu") Integer qulu, @HeaderParam("hulu") int x) {
+            return noDefault + ":"
+                + defaultValue
+                + ":"
+                + noDefaultSet
+                + ":"
+                + defaultSet
+                + ":"
+                + qulu
+                + ":"
+                + x;
+        }
+
+    }
+
+    public void testAll() throws Exception {
+        MockHttpServletRequest mockRequest =
+            MockRequestConstructor.constructMockRequest("GET", "/a", MediaType.TEXT_PLAIN);
+        MockHttpServletResponse mockResponse = invoke(mockRequest);
+        assertEquals(200, mockResponse.getStatus());
+        assertEquals("null:" + DEFAULT_VALUE + ":[]:[" + DEFAULT_VALUE + "]:12345:0", mockResponse
+            .getContentAsString());
+
+        // Test @DefaultValue on method
+        mockRequest = MockRequestConstructor.constructMockRequest("GET", "/a", MediaType.TEXT_HTML);
+        mockResponse = invoke(mockRequest);
+        assertEquals(200, mockResponse.getStatus());
+        assertEquals("null:" + DEFAULT_VALUE + ":[]:[" + DEFAULT_VALUE + "]:98765:98765",
+                     mockResponse.getContentAsString());
+    }
+}