Repository: cxf
Updated Branches:
  refs/heads/master 855ab395b -> 2cd4f136a


[CXF-6064] Making it simpler to customize WADL resource ids


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2cd4f136
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2cd4f136
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2cd4f136

Branch: refs/heads/master
Commit: 2cd4f136a29eaf898c37d92ae0eed926874a8111
Parents: 855ab39
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Fri Nov 14 17:12:34 2014 +0000
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Fri Nov 14 17:12:34 2014 +0000

----------------------------------------------------------------------
 .../cxf/jaxrs/model/wadl/WadlGenerator.java     | 61 +++++++++++++-------
 1 file changed, 41 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/2cd4f136/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
----------------------------------------------------------------------
diff --git 
a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
 
b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
index 4c15480..fa9e295 100644
--- 
a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
+++ 
b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java
@@ -147,7 +147,6 @@ public class WadlGenerator implements 
ContainerRequestFilter {
     private boolean singleResourceMultipleMethods = true;
     private boolean useSingleSlashResource;
     private boolean ignoreForwardSlash;
-    private boolean addResourceAndMethodIds;
     private boolean ignoreRequests;
     private boolean linkAnyMediaTypeToXmlSchema;
     private boolean useJaxbContextForQnames = true;
@@ -170,7 +169,8 @@ public class WadlGenerator implements 
ContainerRequestFilter {
     private MediaType defaultRepMediaType = MediaType.WILDCARD_TYPE;
     private Bus bus;
     private DocumentationProvider docProvider;
-        
+    private ResourceIdGenerator idGenerator;     
+    
     public WadlGenerator() {
     }
     
@@ -266,7 +266,7 @@ public class WadlGenerator implements 
ContainerRequestFilter {
         Map<Class<?>, QName> clsMap = new IdentityHashMap<Class<?>, QName>();
         Set<ClassResourceInfo> visitedResources = new 
LinkedHashSet<ClassResourceInfo>();
         for (ClassResourceInfo cri : cris) {
-            startResourceTag(sbResources, cri.getServiceClass(), 
cri.getURITemplate().getValue());
+            startResourceTag(sbResources, cri, 
cri.getURITemplate().getValue());
             
             Annotation description = 
AnnotationUtils.getClassAnnotation(cri.getServiceClass(), Description.class);
             if (description == null) {
@@ -350,7 +350,7 @@ public class WadlGenerator implements 
ContainerRequestFilter {
                 Class<?> cls = getMethod(ori).getReturnType();
                 ClassResourceInfo subcri = cri.findResource(cls, cls);
                 if (subcri != null && !visitedResources.contains(subcri)) {
-                    startResourceTag(sb, subcri.getServiceClass(), 
ori.getURITemplate().getValue());
+                    startResourceTag(sb, subcri, 
ori.getURITemplate().getValue());
                     handleDocs(subcri.getServiceClass().getAnnotations(), sb, 
DocTarget.RESOURCE, true,
                                isJson);
                     handlePathAndMatrixParams(sb, ori, isJson);
@@ -380,18 +380,11 @@ public class WadlGenerator implements 
ContainerRequestFilter {
         return classParams;
     }
 
-    private void startResourceTag(StringBuilder sb, Class<?> serviceClass, 
String path) {
+    protected void startResourceTag(StringBuilder sb, ClassResourceInfo cri, 
String path) {
         sb.append("<resource path=\"").append(getPath(path)).append("\"");
-        if (addResourceAndMethodIds) {
-            QName jaxbQname = null;
-            if (useJaxbContextForQnames) {
-                jaxbQname = getJaxbQName(null, serviceClass, new 
HashMap<Class<?>, QName>(0));
-            }
-            String pName = jaxbQname == null ? 
PackageUtils.getPackageName(serviceClass) : jaxbQname
-                .getNamespaceURI();
-            String localName = jaxbQname == null ? 
serviceClass.getSimpleName() : jaxbQname.getLocalPart();
-            String finalName = jaxbQname == null ? pName + "." : "{" + pName + 
"}";
-            sb.append(" id=\"").append(finalName + localName).append("\"");
+        if (idGenerator != null) {
+            String id = idGenerator.getClassResourceId(cri);
+            sb.append(" id=\"").append(id).append("\"");
         }
         sb.append(">");
     }
@@ -469,8 +462,9 @@ public class WadlGenerator implements 
ContainerRequestFilter {
     
     protected void startMethodTag(StringBuilder sb, OperationResourceInfo ori) 
{
         sb.append("<method name=\"").append(ori.getHttpMethod()).append("\"");
-        if (addResourceAndMethodIds) {
-            sb.append(" id=\"").append(getMethod(ori).getName()).append("\"");
+        if (idGenerator != null) {
+            String id = idGenerator.getMethodResourceId(ori);
+            sb.append(" id=\"").append(id).append("\"");
         }
         sb.append(">");
     }
@@ -620,8 +614,7 @@ public class WadlGenerator implements 
ContainerRequestFilter {
                 sb.append("<!-- Dynamic subresource -->");
             }
         }
-        startResourceTag(sb, subcri != null ? subcri.getServiceClass() : 
Object.class, ori.getURITemplate()
-            .getValue());
+        startResourceTag(sb, subcri, ori.getURITemplate().getValue());
         handlePathAndMatrixParams(sb, ori, isJson);
         sb.append("</resource>");
     }
@@ -1949,8 +1942,13 @@ public class WadlGenerator implements 
ContainerRequestFilter {
         return privateAddresses;
     }
 
+    
     public void setAddResourceAndMethodIds(boolean addResourceAndMethodIds) {
-        this.addResourceAndMethodIds = addResourceAndMethodIds;
+        ResourceIdGenerator idGen = addResourceAndMethodIds ? new 
ResourceIdGeneratorImpl() : null; 
+        setResourceIdGenerator(idGen);
+    }
+    public void setResourceIdGenerator(ResourceIdGenerator idGen) {
+        this.idGenerator = idGen;
     }
 
     private Method getMethod(OperationResourceInfo ori) {
@@ -2037,4 +2035,27 @@ public class WadlGenerator implements 
ContainerRequestFilter {
     }
 
     
+    private class ResourceIdGeneratorImpl implements ResourceIdGenerator {
+
+        @Override
+        public String getClassResourceId(ClassResourceInfo cri) {
+            Class<?> serviceClass = cri != null ? cri.getServiceClass() : 
Object.class;
+            QName jaxbQname = null;
+            if (useJaxbContextForQnames) {
+                jaxbQname = getJaxbQName(null, serviceClass, new 
HashMap<Class<?>, QName>(0));
+            }
+            String pName = jaxbQname == null ? 
PackageUtils.getPackageName(serviceClass) : jaxbQname
+                .getNamespaceURI();
+            String localName = jaxbQname == null ? 
serviceClass.getSimpleName() : jaxbQname.getLocalPart();
+            String nsName = jaxbQname == null ? pName + "." : "{" + pName + 
"}";
+            return nsName + localName;
+        }
+
+        @Override
+        public String getMethodResourceId(OperationResourceInfo ori) {
+            return getMethod(ori).getName();
+        }
+        
+    }
+    
 }

Reply via email to