Author: aadamchik
Date: Thu Mar  1 10:20:23 2012
New Revision: 1295494

URL: http://svn.apache.org/viewvc?rev=1295494&view=rev
Log:
CAY-1679 A notion of default node

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Mar  1 
10:20:23 2012
@@ -41,6 +41,7 @@ CAY-1666 Fix problem with tests on ingre
 CAY-1667 Expression parser performance optimization
 CAY-1669 RuntimeProperties use of System properties becomes a contention point 
when creating query translators 
 CAY-1670 Non-blocking DataRowStore
+CAY-1679 A notion of default node
 CAY-1680 Get rid of shared locks in DataDomain metadata lookups
 
 Bug Fixes Since 3.1M3:

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
 Thu Mar  1 10:20:23 2012
@@ -83,6 +83,7 @@ public class DataDomain implements Query
 
     protected Map<String, DataNode> nodes;
     protected Map<String, DataNode> nodesByDataMapName;
+    protected DataNode defaultNode;
     protected Map<String, String> properties;
 
     protected EntityResolver entityResolver;
@@ -636,6 +637,20 @@ public class DataDomain implements Query
                     break;
                 }
             }
+
+            if (node == null) {
+
+                if (defaultNode != null) {
+                    nodesByDataMapName.put(map.getName(), defaultNode);
+                    node = defaultNode;
+                }
+                else {
+                    throw new CayenneRuntimeException(
+                            "No DataNode configured for DataMap '"
+                                    + map.getName()
+                                    + "' and no default DataNode set");
+                }
+            }
         }
 
         return node;
@@ -1002,4 +1017,21 @@ public class DataDomain implements Query
                     "It is illegal to call 'onQuery' inside 'onSync' chain");
         }
     }
+
+    /**
+     * An optional DataNode that is used for DataMaps that are not linked to a 
DataNode
+     * explicitly.
+     * 
+     * @since 3.1
+     */
+    public DataNode getDefaultNode() {
+        return defaultNode;
+    }
+
+    /**
+     * @since 3.1
+     */
+    public void setDefaultNode(DataNode defaultNode) {
+        this.defaultNode = defaultNode;
+    }
 }

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/DataChannelDescriptor.java
 Thu Mar  1 10:20:23 2012
@@ -44,6 +44,7 @@ public class DataChannelDescriptor imple
     protected Collection<DataMap> dataMaps;
     protected Collection<DataNodeDescriptor> nodeDescriptors;
     protected Resource configurationSource;
+    protected String defaultNodeName;
 
     public DataChannelDescriptor() {
         properties = new HashMap<String, String>();
@@ -158,4 +159,16 @@ public class DataChannelDescriptor imple
     public void setConfigurationSource(Resource configurationSource) {
         this.configurationSource = configurationSource;
     }
+
+    /**
+     * Returns the name of the DataNode that should be used as the default if 
a DataMap is
+     * not explicitly linked to a node.
+     */
+    public String getDefaultNodeName() {
+        return defaultNodeName;
+    }
+
+    public void setDefaultNodeName(String defaultDataNodeName) {
+        this.defaultNodeName = defaultDataNodeName;
+    }
 }

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java?rev=1295494&r1=1295493&r2=1295494&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
 Thu Mar  1 10:20:23 2012
@@ -98,10 +98,10 @@ public class DataDomainProvider implemen
 
     @Inject
     protected Injector injector;
-    
+
     @Inject
     protected JdbcEventLogger jdbcEventLogger;
-    
+
     @Inject
     protected QueryCache queryCache;
 
@@ -114,8 +114,10 @@ public class DataDomainProvider implemen
             throw e;
         }
         catch (Exception e) {
-            throw new DataDomainLoadException("Error loading DataChannel: 
'%s'", e, e
-                    .getMessage());
+            throw new DataDomainLoadException(
+                    "Error loading DataChannel: '%s'",
+                    e,
+                    e.getMessage());
         }
     }
 
@@ -234,6 +236,22 @@ public class DataDomainProvider implemen
             dataDomain.addNode(dataNode);
         }
 
+        // init default node
+        DataNode defaultNode = null;
+
+        if (descriptor.getDefaultNodeName() != null) {
+            defaultNode = dataDomain.getNode(descriptor.getDefaultNodeName());
+        }
+
+        if (defaultNode == null) {
+            Collection<DataNode> allNodes = dataDomain.getDataNodes();
+            if (allNodes.size() == 1) {
+                defaultNode = allNodes.iterator().next();
+            }
+        }
+
+        dataDomain.setDefaultNode(defaultNode);
+
         for (DataChannelFilter filter : filters) {
             dataDomain.addFilter(filter);
         }


Reply via email to