Author: supun
Date: Wed Nov  3 10:03:35 2010
New Revision: 1030381

URL: http://svn.apache.org/viewvc?rev=1030381&view=rev
Log:
applying patch SYNAPSE-697, many thanks Kasun for the contribution

Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/Entry.java
 Wed Nov  3 10:03:35 2010
@@ -25,6 +25,8 @@ import org.apache.synapse.SynapseArtifac
 import org.apache.synapse.SynapseException;
 
 import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
 
 /**
  * Represents an Entry contained in the local registry used by Synapse
@@ -54,6 +56,12 @@ public class Entry implements SynapseArt
     /** The description of the local entry */
     private String description;
 
+    /**
+     * Registry resource properties
+    */
+    private Properties entryProperties;
+
+
     public Entry() {}
     
     public Entry(String key) {
@@ -166,13 +174,28 @@ public class Entry implements SynapseArt
         this.description = description;
     }
 
+    public Properties getEntryProperties() {
+        return entryProperties;
+    }
+
+    public void setEntryProperties(Properties entryProperties) {
+        this.entryProperties = entryProperties;
+    }
+
     public boolean isExpired() {
         return getType() == REMOTE_ENTRY && getExpiryTime() > 0
                 && System.currentTimeMillis() > expiryTime;
     }
 
     public boolean isCached() {
-        return value != null;
+        if (value != null) {
+            return true;
+        } else if (entryProperties != null) {
+            if (!entryProperties.isEmpty()) {
+                return true;
+            }
+        }
+        return false;
     }
 
     public void clearCache() {

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
 Wed Nov  3 10:03:35 2010
@@ -43,6 +43,9 @@ public class XMLConfigConstants {
     public static final String SCOPE_CLIENT = "axis2-client";
     /** The scope name for transport header properties */
     public static final String SCOPE_TRANSPORT = "transport";
+    /** The scope name for registry properties */
+    public static final String SCOPE_REGISTRY = "registry";
+
     /** The set of supported data types */
     public static enum DATA_TYPES {
         STRING, BOOLEAN, INTEGER, LONG, SHORT, FLOAT, DOUBLE, OM

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/GetPropertyFunction.java
 Wed Nov  3 10:03:35 2010
@@ -19,6 +19,7 @@
 
 package org.apache.synapse.mediators;
 
+import org.apache.axiom.om.OMText;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.transport.base.BaseConstants;
@@ -26,6 +27,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.config.Entry;
 import org.apache.synapse.config.xml.XMLConfigConstants;
 import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.jaxen.Context;
@@ -38,6 +40,7 @@ import java.text.Format;
 import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 /**
  * Implements the XPath extension function 
synapse:get-property(scope,prop-name)
@@ -99,7 +102,8 @@ public class GetPropertyFunction impleme
                 if (argOne != null) {
                     if (!XMLConfigConstants.SCOPE_AXIS2.equals(argOne) &&
                         !XMLConfigConstants.SCOPE_DEFAULT.equals(argOne) &&
-                        !XMLConfigConstants.SCOPE_TRANSPORT.equals(argOne)) {
+                        !XMLConfigConstants.SCOPE_TRANSPORT.equals(argOne) &&
+                            !XMLConfigConstants.SCOPE_REGISTRY.equals(argOne)) 
{
                         return evaluate(XMLConfigConstants.SCOPE_DEFAULT, 
args.get(0),
                             args.get(1), context.getNavigator());
                     } else {
@@ -217,9 +221,9 @@ public class GetPropertyFunction impleme
                     return SynapseConstants.TRUE;
                 } else if (synCtx instanceof Axis2MessageContext) {
                     org.apache.axis2.context.MessageContext axis2MessageContext
-                        = ((Axis2MessageContext) 
synCtx).getAxis2MessageContext();
+                            = ((Axis2MessageContext) 
synCtx).getAxis2MessageContext();
                     if 
(axis2MessageContext.getProperty(BaseConstants.FAULT_MESSAGE) != null
-                        && SynapseConstants.TRUE.equals(
+                            && SynapseConstants.TRUE.equals(
                             
axis2MessageContext.getProperty(BaseConstants.FAULT_MESSAGE))) {
                         return SynapseConstants.TRUE;
                     }
@@ -236,10 +240,10 @@ public class GetPropertyFunction impleme
                 else
                     return SynapseConstants.FORMAT_SOAP12;
             } else if (SynapseConstants.PROPERTY_OPERATION_NAME.equals(key) ||
-                       
SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key)) {
+                    SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key)) 
{
                 if (synCtx instanceof Axis2MessageContext) {
                     AxisOperation axisOperation
-                        = 
((Axis2MessageContext)synCtx).getAxis2MessageContext().getAxisOperation();
+                            = 
((Axis2MessageContext)synCtx).getAxis2MessageContext().getAxisOperation();
                     if (axisOperation != null) {
                         if 
(SynapseConstants.PROPERTY_OPERATION_NAMESPACE.equals(key)) {
                             return axisOperation.getName().getNamespaceURI();
@@ -257,29 +261,66 @@ public class GetPropertyFunction impleme
                 }
             }
         } else if (XMLConfigConstants.SCOPE_AXIS2.equals(scope)
-            && synCtx instanceof Axis2MessageContext) {
+                && synCtx instanceof Axis2MessageContext) {
 
             org.apache.axis2.context.MessageContext axis2MessageContext
-                = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+                    = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
             return axis2MessageContext.getProperty(key);
 
         } else if (XMLConfigConstants.SCOPE_TRANSPORT.equals(scope)
-            && synCtx instanceof Axis2MessageContext) {
+                && synCtx instanceof Axis2MessageContext) {
 
             org.apache.axis2.context.MessageContext axis2MessageContext
-                = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+                    = ((Axis2MessageContext) synCtx).getAxis2MessageContext();
             Object headers = axis2MessageContext.getProperty(
-                org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+                    org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
 
             if (headers != null && headers instanceof Map) {
                 Map headersMap = (Map) headers;
                 return headersMap.get(key);
             }
 
+        } else if (XMLConfigConstants.SCOPE_REGISTRY.equals(scope)) {
+            String[] regParam = key.split("@");
+            String regPath = null;
+            String propName = null;
+            if (regParam.length == 2) {
+                regPath = regParam[0];
+                propName = regParam[1];
+            } else if (regParam.length == 1) {
+                regPath = regParam[0];
+            }
+
+            Entry propEntry = 
synCtx.getConfiguration().getEntryDefinition(regPath);
+            if (propEntry == null) {
+                propEntry = new Entry();
+                propEntry.setType(Entry.REMOTE_ENTRY);
+                propEntry.setKey(key);
+            }
+
+            if (synCtx.getConfiguration().getRegistry() != null) {
+                synCtx.getConfiguration().getRegistry().getResource(propEntry, 
new Properties());
+            }
+            synCtx.getConfiguration().getRegistry().getResource(propEntry, new 
Properties());
+            if (null != propEntry.getEntryProperties()) {
+                if (propName != null) {
+                    Properties reqProperties = propEntry.getEntryProperties();
+                    if (reqProperties != null) {
+                        if (reqProperties.get(propName) != null) {
+                            return reqProperties.get(propName);
+                        }
+                    }
+                } else if (propEntry.getValue()!= null) {
+                    if (propEntry.getValue() instanceof OMText) {
+                        return ((OMText) propEntry.getValue()).getText();
+                    }
+                    return propEntry.getValue().toString();
+                }
+            }
         } else {
             if (traceOrDebugOn) {
                 traceOrDebug(traceOn, "Invalid scope : '" + scope + "' has 
been set for the " +
-                    "synapse:get-property(scope,prop-name) XPath function");
+                        "synapse:get-property(scope,prop-name) XPath 
function");
             }
         }
         return NULL_STRING;

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/AbstractRegistry.java
 Wed Nov  3 10:03:35 2010
@@ -27,6 +27,7 @@ import org.apache.synapse.config.XMLToOb
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.synapse.mediators.base.SequenceMediator;
 
+import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -60,6 +61,21 @@ public abstract class AbstractRegistry i
         // if we have not cached the referenced object, fetch it and its 
RegistryEntry
         } else if (!entry.isCached()) {
             omNode = lookup(entry.getKey());
+            entry.setEntryProperties(getResourceProperties(entry.getKey()));
+            if (omNode == null && entry.getEntryProperties() != null &&
+                    !entry.getEntryProperties().isEmpty()) {
+                // Collection
+                re = getRegistryEntry(entry.getKey());
+                if (re != null) {
+                    if (re.getCachableDuration() > 0) {
+                        entry.setExpiryTime(System.currentTimeMillis() + 
re.getCachableDuration());
+                    } else {
+                        entry.setExpiryTime(-1);
+                    }
+                    entry.setVersion(re.getVersion());
+                }
+            }
+
             if (omNode == null) {
                 return null;
             } else {
@@ -172,4 +188,8 @@ public abstract class AbstractRegistry i
     public void init(Properties properties) {
         this.properties.putAll(properties);
     }
+
+    public Properties getResourceProperties(String entryKey) {
+        return null;
+    }
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java?rev=1030381&r1=1030380&r2=1030381&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/registry/Registry.java
 Wed Nov  3 10:03:35 2010
@@ -122,4 +122,11 @@ public interface Registry {
      * @param entry The registry entry
      */
     public void updateRegistryEntry(RegistryEntry entry);
+
+    /**
+     * Get the resource properties of a given resource
+     *
+     * @param entryKey The registry entry
+     */
+    public Properties getResourceProperties(String entryKey);
 }


Reply via email to