Author: rwesten
Date: Mon Feb 24 05:16:07 2014
New Revision: 1571146

URL: http://svn.apache.org/r1571146
Log:
STANBOL-1280: first implementation of EnhancementProperties for the 0.12 branch 
(sheduled for 0.12.1 release)

Added:
    
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EnhancementPropertyException.java
Modified:
    
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EngineException.java
    
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ContentItemHelper.java
    
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/EnhancementEngineHelper.java
    
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
    
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/utils/EnhancementPropertiesHelper.java

Modified: 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EngineException.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EngineException.java?rev=1571146&r1=1571145&r2=1571146&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EngineException.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EngineException.java
 Mon Feb 24 05:16:07 2014
@@ -29,15 +29,33 @@ package org.apache.stanbol.enhancer.serv
 public class EngineException extends EnhancementException {
 
     private static final long serialVersionUID = 1L;
-
+    private EnhancementEngine enhancementEngine;
+    private ContentItem contentItem;
+    /**
+     * 
+     * @param message
+     * @deprecated use the constructor with {@link EnhancementEngine} and 
+     * {@link ContentItem} instead
+     */
     public EngineException(String message) {
         super(message);
     }
-
+    /**
+     * 
+     * @param message
+     * @param cause
+     * @deprecated use the constructor with {@link EnhancementEngine} and 
+     * {@link ContentItem} instead
+     */
     public EngineException(String message, Throwable cause) {
         super(message, cause);
     }
-
+    /**
+     * 
+     * @param cause
+     * @deprecated use the constructor with {@link EnhancementEngine} and 
+     * {@link ContentItem} instead
+     */
     public EngineException(Throwable cause) {
         super(cause);
     }
@@ -50,5 +68,26 @@ public class EngineException extends Enh
                 "'%s' failed to process content item '%s' with type '%s': %s",
                 ee.getClass().getSimpleName(), ci.getUri().getUnicodeString(), 
ci.getMimeType(),
                 message == null ? cause : message), cause);
+        this.enhancementEngine = ee;
+        this.contentItem = ci;
+        
+    }
+    
+    /**
+     * The EnhancementEngine parsed to the Exception
+     * @return
+     * @since 0.12.1
+     */
+    public EnhancementEngine getEnhancementEngine() {
+        return enhancementEngine;
+    }
+    
+    /**
+     * The ContentITem parsed to the Exception
+     * @return
+     * @since 0.12.1
+     */
+    public ContentItem getContentItem() {
+        return contentItem;
     }
 }

Added: 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EnhancementPropertyException.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EnhancementPropertyException.java?rev=1571146&view=auto
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EnhancementPropertyException.java
 (added)
+++ 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/EnhancementPropertyException.java
 Mon Feb 24 05:16:07 2014
@@ -0,0 +1,28 @@
+package org.apache.stanbol.enhancer.servicesapi;
+
+/**
+ * Exection thorwn if the an Enhancement Property parsed to an engine is
+ * missing or has an invalid value
+ * 
+ * @since 0.12.1
+ *
+ */
+public class EnhancementPropertyException extends EngineException {
+    
+    private static final long serialVersionUID = 1L;
+    
+    private String property;
+
+    public EnhancementPropertyException(EnhancementEngine ee, ContentItem ci, 
String property, String reason, Throwable t){
+        super(ee,ci, new StringBuilder("Enhancement Property '")
+        .append(property).append("' - ").append(reason).toString(),t);
+        this.property = property;
+        
+    }
+    
+    public String getProperty() {
+        return property;
+    }
+
+    
+}

Modified: 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ContentItemHelper.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ContentItemHelper.java?rev=1571146&r1=1571145&r2=1571146&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ContentItemHelper.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/ContentItemHelper.java
 Mon Feb 24 05:16:07 2014
@@ -351,4 +351,74 @@ public class ContentItemHelper {
         return mimeType.toString();
     }
 
+    /*
+     * EnhancementProperties support for 0.12 (see STANBOL-1280) 
+     */
+    /**
+     * URI used to register an {@link ContentItem#getPart(int, Class) 
contentPart}
+     * of the type {@link Map Map<String,Objext>} containing the
+     * EnhancementEngine properties <p>
+     */
+    public static final UriRef ENHANCEMENT_PROPERTIES_URI = new UriRef(
+            "urn:apache.org:stanbol.web:enhancement.properties");
+
+    /**
+     * Getter for the EnhancementProperties content part
+     * @param ci the content item
+     * @return the content part or <code>null</code> if not present.
+     */
+    @SuppressWarnings("unchecked")
+    public static Map<String,Object> 
getEnhancementPropertiesContentPart(ContentItem ci){
+        if(ci == null){
+            throw new IllegalArgumentException("The parsed ContentItem MUST 
NOT be NULL!");
+        }
+        ci.getLock().readLock().lock();
+        try {
+            return ci.getPart(ENHANCEMENT_PROPERTIES_URI, Map.class);
+        } catch (NoSuchPartException e) {
+            return null;
+        } finally{
+            ci.getLock().readLock().unlock();
+        }
+        
+    }
+    
+    /**
+     * Initialises the EnhancementProperties ContentPart for an {@link 
ContentItem}.
+     * If the content part is already present it will just return the 
existing. If
+     * not it will register an empty one. The content part is registered with
+     * the URI {@link #ENHANCEMENT_PROPERTIES_URI}
+     * @param ci the contentItem MUST NOT be NULL
+     * @return the enhancement properties
+     * @throws IllegalArgumentException if <code>null</code> is parsed as 
{@link ContentItem}.
+     */
+    @SuppressWarnings("unchecked")
+    public static Map<String,Object> 
initEnhancementPropertiesContentPart(ContentItem ci){
+        if(ci == null){
+            throw new IllegalArgumentException("The parsed ContentItem MUST 
NOT be NULL!");
+        }
+        Map<String,Object> enhancementProperties;
+        ci.getLock().readLock().lock();
+        try {
+            enhancementProperties = ci.getPart(ENHANCEMENT_PROPERTIES_URI, 
Map.class);
+        } catch (NoSuchPartException e) {
+            enhancementProperties = null;
+        } finally{
+            ci.getLock().readLock().unlock();
+        }
+        if(enhancementProperties == null){
+            ci.getLock().writeLock().lock();
+            try { //check again ... maybe an other thread has added this part
+                enhancementProperties = ci.getPart(ENHANCEMENT_PROPERTIES_URI, 
Map.class);
+            } catch (NoSuchPartException e) {
+                enhancementProperties = new HashMap<String,Object>();
+                ci.addPart(ENHANCEMENT_PROPERTIES_URI, enhancementProperties);
+            } finally{
+                ci.getLock().writeLock().unlock();
+            }
+        } //else was already present
+        return enhancementProperties;
+    }
+    
+    
 }

Modified: 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/EnhancementEngineHelper.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/EnhancementEngineHelper.java?rev=1571146&r1=1571145&r2=1571146&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/EnhancementEngineHelper.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/generic/servicesapi/src/main/java/org/apache/stanbol/enhancer/servicesapi/helper/EnhancementEngineHelper.java
 Mon Feb 24 05:16:07 2014
@@ -29,6 +29,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Random;
 import java.util.UUID;
 
@@ -760,4 +761,63 @@ public class EnhancementEngineHelper {
             ci.getLock().readLock().unlock();
         }
     }
+    
+    /* 
+     * Helper Methods for retrieving EnhancementProperties in 0.12 from the
+     * parsed ContentItem (see STANBOL-1280).
+     * NOTE: in 1.0.0 those are obsolete as EnhancementProperties will be 
parsed
+     * as additional parameter to the computeEnhancement method.
+     */
+    /**
+     * Retrieves the Enhancement Properties for the parsed Engine from the 
ContentItem.
+     * <p>
+     * The returned map will contain: <ul>
+     * <li> all properties with a key that does NOT include a '<code>:</code>'
+     * <li> all properties with a key starting with 
'<code>{engine-name}:</code>'
+     * </ul>
+     * NOTE: that only properties containing '<code>enhancer.</code>' will get 
+     * parsed from Enhancement Requests.<p>
+     * See <a 
href="https://issues.apache.org/jira/browse/STANBOL-488";>STANBOL-488</a> 
+     * for the specification of Enhancement Properties and 
+     * <a 
href="https://issues.apache.org/jira/browse/STANBOL-1280";>STANBOL-1280</a> 
+     * for the list of features supported inStanbol version 
<code>0.12.1+</code>
+     * @param engine the enhancement engine requesting the properties
+     * @param ci the content item (representing the enhancement request).
+     * @return The enhancement properties. This is a read/write copy of the
+     * read-only content part.
+     */
+    public static Map<String,Object> 
getEnhancementProperties(EnhancementEngine engine, ContentItem ci){
+        if(engine == null){
+            throw new IllegalArgumentException("The parsed EnhancementEngine 
MUST NOT be NULL");
+        }
+        if(ci == null){
+            throw new IllegalArgumentException("The parsed ContentItem MUST 
NOT be NULL");
+        }
+        Map<String,Object> epContentPart = 
ContentItemHelper.getEnhancementPropertiesContentPart(ci);
+        if(epContentPart == null){
+            log.debug("no EnhancementProperties for ContentItem",ci.getUri());
+            return Collections.emptyMap();
+        }
+        String prefix = new 
StringBuilder(engine.getName()).append(':').toString();
+        Map<String,Object> properties = new HashMap<String,Object>();
+        log.debug("Retrieve EnhancementProperties for Engine {} and 
ContentItem {}", 
+            engine.getName(), ci.getUri());
+        for(Entry<String,Object> entry : epContentPart.entrySet()){
+            String key = entry.getKey();
+            int sepIndex = key.indexOf(':');
+            if(sepIndex < 0){
+                log.debug(" - include chain property '{}'",key);
+                properties.put(key, entry.getValue());
+            } else if(key.startsWith(prefix) && key.length() > 
prefix.length()){
+                key = key.substring(prefix.length(),key.length());
+                log.debug(" - include engine property '{}'",key);
+                properties.put(key, entry.getValue());
+            } else {
+                log.debug(" - exclude engine property '{}'",key);
+            }
+        }
+        return properties;
+    }
+    
+    
 }

Modified: 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java?rev=1571146&r1=1571145&r2=1571146&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/reader/ContentItemReader.java
 Mon Feb 24 05:16:07 2014
@@ -27,12 +27,15 @@ import java.io.InputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
@@ -264,8 +267,9 @@ public class ContentItemReader implement
             parsedContentIds.add(contentItem.getPartUri(0).getUnicodeString());
         }
         //set the parsed contentIDs to the EnhancementProperties
-        getEnhancementProperties(contentItem).put(PARSED_CONTENT_URIS, 
-            Collections.unmodifiableSet(parsedContentIds));
+        Map<String,Object> ep = getEnhancementProperties(contentItem);
+        parseEnhancementPropertiesFromParameters(ep);
+        ep.put(PARSED_CONTENT_URIS, 
Collections.unmodifiableSet(parsedContentIds));
         return contentItem;
     }
     /**
@@ -278,6 +282,46 @@ public class ContentItemReader implement
         String ciUri = request == null ? null : request.getParameter("uri");
         return ciUri == null ? null : new UriRef(ciUri);
     }
+    
+    /**
+     * Parsed EnhancementProperties from the request parameters. <p>
+     * This does NOT override existing values in the parsed map.
+     * @param ep the map to add the properties
+     */
+    private void parseEnhancementPropertiesFromParameters(Map<String,Object> 
ep){
+        if(request == null) {
+            return; //for unit tests
+        }
+        @SuppressWarnings("unchecked")
+        Map<String,String[]> parameters = 
(Map<String,String[]>)request.getParameterMap();
+        log.debug("read EnhancementPropertis from Request Parameters:");
+        for(Entry<String,String[]> entry : parameters.entrySet()){
+            if(entry.getKey().contains("enhancer.")){
+                if(!ep.containsKey(entry.getKey())){
+                    log.debug(" + {}",entry.getKey());
+                    Object value;
+                    if(entry.getValue() == null || entry.getValue().length < 
1){
+                        value = null;
+                    } if(entry.getValue().length == 1){
+                        value = entry.getValue()[0];
+                    } else {
+                        List<String> values = new 
ArrayList<String>(entry.getValue().length);
+                        Collections.addAll(values,entry.getValue());
+                        value = Collections.unmodifiableList(values);
+                    }
+                    log.debug("      value: {}", value);
+                    ep.put(entry.getKey(), value);
+                } else if(log.isDebugEnabled()){
+                    log.debug(" - ignore key {} because it is already 
present");
+                    log.debug("   current value: {}",ep.get(entry.getKey()));
+                    log.debug("   request value: {} (ignored)", 
Arrays.toString(entry.getValue()));
+                }
+            } else {
+                log.debug(" - {}", entry.getKey());
+            }
+        }
+    }
+    
     /**
      * Creates a ContentItem
      * @param id the ID or <code>null</code> if not known

Modified: 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/utils/EnhancementPropertiesHelper.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/utils/EnhancementPropertiesHelper.java?rev=1571146&r1=1571145&r2=1571146&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/utils/EnhancementPropertiesHelper.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/jersey/src/main/java/org/apache/stanbol/enhancer/jersey/utils/EnhancementPropertiesHelper.java
 Mon Feb 24 05:16:07 2014
@@ -29,6 +29,7 @@ import org.apache.clerezza.rdf.core.Trip
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.stanbol.enhancer.servicesapi.Blob;
 import org.apache.stanbol.enhancer.servicesapi.ContentItem;
+import org.apache.stanbol.enhancer.servicesapi.helper.ContentItemHelper;
 import org.apache.stanbol.enhancer.servicesapi.rdf.ExecutionMetadata;
 import org.apache.stanbol.enhancer.servicesapi.rdf.ExecutionPlan;
 
@@ -39,14 +40,10 @@ public final class EnhancementProperties
 
     private EnhancementPropertiesHelper(){/* no instances allowed*/}
     /**
-     * URI used to register an {@link ContentItem#getPart(int, Class) 
contentPart}
-     * of the type {@link Map Map&lt;String,Objext&gt;} that contains 
properties
-     * for the enhancement process. <p>
-     * TODO: This might move to servicesapi and also accessible to enhancement
-     * engines
+     * @see ContentItemHelper#ENHANCEMENT_PROPERTIES_URI
      */
-    public static final UriRef ENHANCEMENT_PROPERTIES_URI = new UriRef(
-            "urn:apache.org:stanbol.web:enhancement.properties");
+    public static final UriRef ENHANCEMENT_PROPERTIES_URI =
+            ContentItemHelper.ENHANCEMENT_PROPERTIES_URI;
     /**
      * Boolean switch parsed as {@link QueryParam} tha allows to deactivate the
      * inclusion of the {@link ContentItem#getMetadata()} in the Response
@@ -97,26 +94,14 @@ public final class EnhancementProperties
     public static final String PARSED_CONTENT_URIS = 
"stanbol.enhancer.web.parsedContentURIs";
     
     /**
-     * Getter for the EnhancementProperties for an {@link ContentItem}. If they
-     * do not already exist they are created and added to the ContentItem as
-     * contentPart with the URI {@link #ENHANCEMENT_PROPERTIES_URI}
+     * Inits (get or creates) the content part holding the 
EnhancementProperties
      * @param ci the contentItem MUST NOT be NULL
      * @return the enhancement properties
      * @throws IllegalArgumentException if <code>null</code> is parsed as 
{@link ContentItem}.
+     * @see ContentItemHelper#initEnhancementPropertiesContentPart(ContentItem)
      */
-    @SuppressWarnings("unchecked")
     public static Map<String,Object> getEnhancementProperties(ContentItem ci){
-        if(ci == null){
-            throw new IllegalArgumentException("The parsed ContentItem MUST 
NOT be NULL!");
-        }
-        Map<String,Object> enhancementProperties;
-        try {
-            enhancementProperties = ci.getPart(ENHANCEMENT_PROPERTIES_URI, 
Map.class);
-        } catch (RuntimeException e) {
-           enhancementProperties = new HashMap<String,Object>();
-           ci.addPart(ENHANCEMENT_PROPERTIES_URI, enhancementProperties);
-        }
-        return enhancementProperties;
+        return ContentItemHelper.initEnhancementPropertiesContentPart(ci);
     }
     
     


Reply via email to