SLING-5061 - HApiType.getUrl() should be an absolute URL - contributed by Andrei Dulvac, thanks!

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1705296 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/hapi/impl/HApiTypeImpl.java b/src/main/java/org/apache/sling/hapi/impl/HApiTypeImpl.java
index 8648179..0d25645 100644
--- a/src/main/java/org/apache/sling/hapi/impl/HApiTypeImpl.java
+++ b/src/main/java/org/apache/sling/hapi/impl/HApiTypeImpl.java
@@ -22,6 +22,7 @@
 import org.apache.sling.hapi.HApiType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import java.util.*;
 
 /**
@@ -30,32 +31,36 @@
 public class HApiTypeImpl implements HApiType {
 
     public static final Logger LOG = LoggerFactory.getLogger(HApiTypeImpl.class);
-
     private HApiType parent;
 
     private String name;
 
     private String description;
+
+    private final String serverUrl;
     private String path;
     private String fqdn;
     private List<String> parameters;
     private Map<String, HApiProperty> properties;
     private boolean isAbstract;
 
+
     /**
      * A new HApiType
      * @param name
      * @param description
+     * @param serverUrl
      * @param path
      * @param fqdn
      * @param parameters
      * @param properties
      * @param parent
      */
-    public HApiTypeImpl(String name, String description, String path, String fqdn, List<String> parameters, Map<String,
+    public HApiTypeImpl(String name, String description, String serverUrl, String path, String fqdn, List<String> parameters, Map<String,
             HApiProperty> properties, HApiType parent, boolean isAbstract) {
         this.name = name;
         this.description = description;
+        this.serverUrl = serverUrl.substring(0, serverUrl.length() - (serverUrl.endsWith("/") ? 1 : 0));
         this.path = path;
         this.fqdn = fqdn;
         this.parameters = parameters;
@@ -94,7 +99,7 @@
      */
     @Override
     public String getUrl() {
-        return getPath() + ".html";
+        return this.serverUrl + getPath() + ".html";
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/hapi/impl/HApiUtilImpl.java b/src/main/java/org/apache/sling/hapi/impl/HApiUtilImpl.java
index 7b448f5..c6810ea 100644
--- a/src/main/java/org/apache/sling/hapi/impl/HApiUtilImpl.java
+++ b/src/main/java/org/apache/sling/hapi/impl/HApiUtilImpl.java
@@ -46,18 +46,24 @@
     @Property(label = "HApi Resource Type", cardinality = 0, value = DEFAULT_RESOURCE_TYPE)
     public static final String HAPI_RESOURCE_TYPE = "org.apache.sling.hapi.tools.resourcetype";
 
-
     @Property(label = "HApi Types Search Paths", cardinality=50, value = {"/libs/sling/hapi/types"})
     public static final String HAPI_PATHS = "org.apache.sling.hapi.tools.searchpaths";
 
+
+    private static final String DEFAULT_SERVER_URL = "http://localhost:8080";
+    @Property(label = "External server URL", cardinality = 0, value = DEFAULT_SERVER_URL)
+    public static final String HAPI_EXTERNAL_URL = "org.apache.sling.hapi.tools.externalurl";
+
     public static String resourceType;
     public static String[] hApiPaths;
+    public static String serverContextPath;
 
 
     @Activate
     private void activate(ComponentContext context, Map<String, Object> configuration) {
         resourceType = PropertiesUtil.toString(configuration.get(HAPI_RESOURCE_TYPE), DEFAULT_RESOURCE_TYPE);
         hApiPaths = PropertiesUtil.toStringArray(configuration.get(HAPI_PATHS));
+        serverContextPath = PropertiesUtil.toString(configuration.get(HAPI_EXTERNAL_URL), DEFAULT_SERVER_URL);
     }
 
     /**
@@ -133,7 +139,7 @@
         for (Value p : Arrays.asList(parameterValues)) {
             parameters.add(p.getString());
         }
-        HApiTypeImpl newType = new HApiTypeImpl(name, description, path, fqdn, parameters, null, null, false);
+        HApiTypeImpl newType = new HApiTypeImpl(name, description, serverContextPath, path, fqdn, parameters, null, null, false);
         TypesCache.getInstance(this).addType(newType);
 
         try {
@@ -151,7 +157,6 @@
             Iterator<Node> it = typeNode.getNodes();
             while (it.hasNext()) {
                 Node propNode = it.next();
-                System.out.println("Node=" + propNode);
                 String propName = propNode.getName();
                 String propDescription = propNode.hasProperty("description") ? propNode.getProperty("description").getString() : "";
 
diff --git a/src/main/java/org/apache/sling/hapi/impl/MicrodataAttributeHelperImpl.java b/src/main/java/org/apache/sling/hapi/impl/MicrodataAttributeHelperImpl.java
index 4d3b8b7..85ae13d 100644
--- a/src/main/java/org/apache/sling/hapi/impl/MicrodataAttributeHelperImpl.java
+++ b/src/main/java/org/apache/sling/hapi/impl/MicrodataAttributeHelperImpl.java
@@ -35,6 +35,7 @@
     private final ResourceResolver resolver;
     HApiType type;
 
+
     /**
      * Get a new microdata html attributes helper for the given HApiType object.
      * <p>Provides convenience methods to get the html attributes needed for instrumenting the markup with a Hypermedia API</p>
@@ -58,7 +59,7 @@
      */
     public Map<String, String> itemtypeMap() {
         Map<String, String> attrMap = new AttrMap(2);
-        attrMap.put("itemtype", type.getPath() + ".html");
+        attrMap.put("itemtype", type.getUrl());
         attrMap.put("itemscope", String.valueOf(!type.getAllProperties().isEmpty()));
         
         return attrMap;