Author: tfischer
Date: Wed Sep  3 21:00:19 2014
New Revision: 1622356

URL: http://svn.apache.org/r1622356
Log:
TORQUE-309 Add interface to generated peer classes
Thanks to Georg Kallidis for providing the basis for this feature

Added:
    
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/skipdecider/PeerInterfaceSkipDecider.java
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/peerInterface.xml
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/interface/peerInterface.vm
Modified:
    
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/control.xml
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/xsd/database-4-0.xsd
    
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java

Modified: 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java?rev=1622356&r1=1622355&r2=1622356&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
 (original)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/TorqueSchemaAttributeName.java
 Wed Sep  3 21:00:19 2014
@@ -62,6 +62,8 @@ public enum TorqueSchemaAttributeName im
     INHERITANCE("inheritance"),
     /** attribute interface. */
     INTERFACE("interface"),
+    /** attribute peerInterface. */
+    PEER_INTERFACE("peerInterface"),
     /** attribute protected. */
     PROTECTED("protected"),
     /** attribute default. */

Added: 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/skipdecider/PeerInterfaceSkipDecider.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/skipdecider/PeerInterfaceSkipDecider.java?rev=1622356&view=auto
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/skipdecider/PeerInterfaceSkipDecider.java
 (added)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/java/org/apache/torque/templates/skipdecider/PeerInterfaceSkipDecider.java
 Wed Sep  3 21:00:19 2014
@@ -0,0 +1,50 @@
+package org.apache.torque.templates.skipdecider;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.torque.generator.control.ControllerState;
+import org.apache.torque.generator.source.SourceElement;
+import org.apache.torque.generator.source.skipDecider.SkipDecider;
+import org.apache.torque.templates.TorqueSchemaAttributeName;
+
+/**
+ * A skip decider which returns true if the attribute "peerInterface"
+ * is set on the current source element and if the name does not contain
+ * a dot.
+ *
+ * @version $Id$
+ */
+public class PeerInterfaceSkipDecider implements SkipDecider
+{
+    public boolean proceed(ControllerState controllerState)
+    {
+        SourceElement sourceElement
+                = (SourceElement) controllerState.getModel();
+        String interfaceName
+                = (String) sourceElement.getAttribute(
+                        TorqueSchemaAttributeName.PEER_INTERFACE.getName());
+        if (interfaceName == null)
+        {
+            return false;
+        }
+        boolean containsDot = interfaceName.indexOf('.') != -1;
+        return !containsDot;
+    }
+}

Modified: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/control.xml
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/control.xml?rev=1622356&r1=1622355&r2=1622356&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/control.xml
 (original)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/conf/control.xml
 Wed Sep  3 21:00:19 2014
@@ -227,6 +227,35 @@
     <postprocessor 
class="org.apache.torque.generator.processor.string.RemoveUnusedImportsProcessor"
 />
   </output>
   
+  <output name="torque.om.peerInterface" existingTargetStrategy="skip" 
outputDirKey="modifiable">
+    <filenameOutlet
+        xsi:type="javaOutlet"
+        class="org.apache.torque.generator.outlet.java.JavaFilenameOutlet">
+      <mergepoint name="package">
+        <action
+            xsi:type="sourceElementAttributeAction"
+            element="."
+            attribute="peerPackage"
+            acceptNotSet="false"/>
+      </mergepoint>
+      <mergepoint name="classname">
+        <action
+            xsi:type="sourceElementAttributeAction"
+            element="."
+            attribute="peerInterface"
+            acceptNotSet="true"/>
+      </mergepoint>
+    </filenameOutlet>
+    <source xsi:type="fileSource" elements="all-tables/table"
+        
skipDecider="org.apache.torque.templates.skipdecider.PeerInterfaceSkipDecider">
+      <transformer 
class="org.apache.torque.templates.transformer.om.OMTransformer"/>
+      <include>*schema.xml</include>
+      <exclude>id-table-schema.xml</exclude>
+    </source>
+    <outlet name="torque.om.peerInterface"/>
+    <postprocessor 
class="org.apache.torque.generator.processor.string.RemoveUnusedImportsProcessor"
 />
+  </output>
+
   <output name="torque.om.peer" existingTargetStrategy="skip" 
outputDirKey="modifiable">
     <filenameOutlet
         xsi:type="javaOutlet"

Added: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/peerInterface.xml
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/peerInterface.xml?rev=1622356&view=auto
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/peerInterface.xml
 (added)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/outlets/peerInterface.xml
 Wed Sep  3 21:00:19 2014
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<outlets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    
xsi:schemaLocation="http://db.apache.org/torque/4.0/generator/configuration 
http://db.apache.org/torque/4.0/generator/configuration.xsd";
+    xmlns="http://db.apache.org/torque/4.0/generator/configuration";>
+  <outlet name="torque.om.peerInterface"
+      xsi:type="velocityOutlet"
+      path="interface/peerInterface.vm">
+   </outlet>
+</outlets>
\ No newline at end of file

Added: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/interface/peerInterface.vm
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/interface/peerInterface.vm?rev=1622356&view=auto
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/interface/peerInterface.vm
 (added)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/interface/peerInterface.vm
 Wed Sep  3 21:00:19 2014
@@ -0,0 +1,47 @@
+## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##   http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.
+##
+######
+##
+## version $Id$
+##
+## This template creates source code for a Interface for a Peer object. 
+## The generated code is intended to be modified by the user. 
+## The template expects as input a "table" element from the torque schema
+## which was processed by the OMTransformer.  
+##
+
+package ${peerPackage};
+
+/**
+#if ($description)
+ * $description
+ *
+#end
+ * This is an interface that should be filled with the public api of the
+ * $peerImplClassName objects.
+ * The skeleton for this class was autogenerated by Torque #if 
($torqueGen.booleanOption("torque.om.addTimeStamp"))on:
+ *
+ * [${torqueGen.now()}]
+ * #end
+ * You should add additional methods to this class to meet the
+ * application requirements.  This class will only be generated as
+ * long as it does not already exist in the output directory.
+ */
+public interface ${peerInterface}
+{
+}

Modified: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/xsd/database-4-0.xsd
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/xsd/database-4-0.xsd?rev=1622356&r1=1622355&r2=1622356&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/xsd/database-4-0.xsd
 (original)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/xsd/database-4-0.xsd
 Wed Sep  3 21:00:19 2014
@@ -316,6 +316,20 @@ other applications or APIs.
         </xs:documentation>
       </xs:annotation>
     </xs:attribute>
+        <xs:attribute name="peerInterface" type="javaQualifiedNameType"
+                  use="optional" >
+      <xs:annotation>
+        <xs:documentation xml:lang="en">
+The interface attribute specifies an interface that should be referenced in
+the implements section of the generated peer class. If this is a fully
+qualified class name (i. e. the string contains dots), the interface will
+simply be implemented by the peer object. If the interface is a simple
+class name (without dots), an empty interface file will be generated in the
+peer package. This feature allows to use Torque generated peer classes
+in the context of other applications or APIs.
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="baseClass" type="javaQualifiedNameType" use="optional">
       <xs:annotation>
         <xs:documentation xml:lang="en">

Modified: 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java?rev=1622356&r1=1622355&r2=1622356&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
 (original)
+++ 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
 Wed Sep  3 21:00:19 2014
@@ -62,10 +62,13 @@ import org.apache.torque.test.peer.Bigin
 import org.apache.torque.test.peer.BookPeer;
 import org.apache.torque.test.peer.CompPkContainsFkPeer;
 import org.apache.torque.test.peer.IfcTablePeer;
+import org.apache.torque.test.peer.IfcTablePeerImpl;
 import org.apache.torque.test.peer.InheritanceClassnameTestPeer;
 import org.apache.torque.test.peer.InheritanceTestPeer;
 import org.apache.torque.test.peer.IntegerTypePeer;
 import org.apache.torque.test.peer.LocalIfcTablePeer;
+import org.apache.torque.test.peer.LocalIfcTablePeerImpl;
+import org.apache.torque.test.peer.LocalTestPeerInterface;
 import org.apache.torque.test.peer.MultiPkPeer;
 import org.apache.torque.test.peer.NopkPeer;
 import org.apache.torque.test.peer.VarcharTypePeer;
@@ -1056,7 +1059,8 @@ public class DataTest extends BaseDataba
 
         IfcTable ifc = new IfcTable();
 
-        assertTrue("IfcTable should be an instance of TestInterface", ifc 
instanceof TestInterface);
+        assertTrue("IfcTable should be an instance of TestInterface",
+                ifc instanceof TestInterface);
 
         ifc.setID(1);
         ifc.setName("John Doe");
@@ -1071,6 +1075,11 @@ public class DataTest extends BaseDataba
                 ifcTable instanceof TestInterface);
         }
 
+        IfcTablePeerImpl peerImpl = IfcTablePeer.getIfcTablePeerImpl();
+        assertTrue("IfcTablePeerImpl should be an instance of "
+                + "TestPeerInterface",
+                peerImpl instanceof TestPeerInterface);
+
         LocalIfcTable localIfc = new LocalIfcTable();
 
         assertTrue("LocalIfcTable should be an instance of LocalTestInterface",
@@ -1084,6 +1093,11 @@ public class DataTest extends BaseDataba
                     + " instances of LocalTestInterface",
                     readLocalIfcTable instanceof LocalTestInterface);
         }
+
+        LocalIfcTablePeerImpl localPeerImpl = 
LocalIfcTablePeer.getLocalIfcTablePeerImpl();
+        assertTrue("LocalIfcTablePeerImpl should be an instance of "
+                     + "LocalTestPeerInterface",
+                     localPeerImpl instanceof LocalTestPeerInterface);
     }
 
     public void testInheritanceWithKeys() throws Exception



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscr...@db.apache.org
For additional commands, e-mail: torque-dev-h...@db.apache.org

Reply via email to