Author: husted
Date: Mon Dec  3 03:18:37 2007
New Revision: 600483

URL: http://svn.apache.org/viewvc?rev=600483&view=rev
Log:
WW-1399 Add interfaces for the entity objects, mainly to separate the concerns 
of API and JavaDoc from the grunge work of the implementation, but also to 
annoy Tom :)

Added:
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolImpl.java
      - copied, changed from r599722, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionImpl.java
      - copied, changed from r599470, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserImpl.java
      - copied, changed from r599470, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
    
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/BootstrapDataTest.java
      - copied, changed from r599722, 
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java
Removed:
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
    
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java
Modified:
    struts/sandbox/trunk/jpa-mailreader/src/main/java/META-INF/persistence.xml
    struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityService.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolService.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolServiceImpl.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionServiceImpl.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserServiceImpl.java
    
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
    
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/UserServiceTest.java
    struts/sandbox/trunk/jpa-mailreader/src/test/java/hello/MessageTest.java

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/META-INF/persistence.xml
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/META-INF/persistence.xml?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/META-INF/persistence.xml 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/META-INF/persistence.xml 
Mon Dec  3 03:18:37 2007
@@ -20,15 +20,18 @@
 -->
 
        <persistence-unit name="entity" transaction-type="RESOURCE_LOCAL">
-           <provider>org.hibernate.ejb.HibernatePersistence</provider>
-               <properties>
-                       <property name = "hibernate.connection.driver_class" 
value = "org.apache.derby.jdbc.ClientDriver"/>
-                       <property name = "hibernate.connection.url" value = 
"jdbc:derby://localhost:1527/mailreader;create=true"/>
-                       <property name = "hibernate.connection.username" value 
= "app"/>
-                       <property name = "hibernate.connection.password" value 
= "app"/>
-                   <property name = "hibernate.dialect" 
value="org.hibernate.dialect.DerbyDialect"/>
-                       <property name = "hibernate.hbm2ddl.auto" value = 
"update"/>
-               </properties>
+               <provider>org.hibernate.ejb.HibernatePersistence</provider>
+               <properties>
+                       <property name="hibernate.connection.driver_class"
+                               value="org.apache.derby.jdbc.ClientDriver" />
+                       <property name="hibernate.connection.url"
+                               
value="jdbc:derby://localhost:1527/mailreader;create=true" />
+                       <property name="hibernate.connection.username" 
value="app" />
+                       <property name="hibernate.connection.password" 
value="app" />
+                       <property name="hibernate.dialect"
+                               value="org.hibernate.dialect.DerbyDialect" />
+                       <property name="hibernate.hbm2ddl.auto" value="update" 
/>
+               </properties>
        </persistence-unit>
-       
+
 </persistence>

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java Mon Dec 
 3 03:18:37 2007
@@ -41,7 +41,7 @@
  * <p>
  * The application is entity or resource-orientated. Subclasses provide
  * additional logic specific to each entity or resource. Persistence system
- * logic is delegated to a helper class for each entity. The Action classes
+ * logic is delegated to a service class for each entity. The Action classes
  * interact only with the entity helpers, and not the underlying JPA.
  * </p>
  */

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java 
Mon Dec  3 03:18:37 2007
@@ -22,7 +22,7 @@
 
 /**
  * <p>
- * Comparion interface to <code>EntityInterceptor</code> that provides access
+ * Companion interface to <code>EntityInterceptor</code> that provides access
  * to an <code>EntityManager</code> for this thread.
  * </p>
  */

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java 
(original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java 
Mon Dec  3 03:18:37 2007
@@ -26,7 +26,7 @@
 
 /**
  * <p>
- * A "single transaction per view" Interceptor for a JPA application.
+ * "Single transaction per view" Interceptor for a JPA application.
  * </p>
  * <p>
  * This class creates an EntityManager for each thread, and begins a 
transation.

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityService.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityService.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityService.java 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityService.java 
Mon Dec  3 03:18:37 2007
@@ -27,25 +27,26 @@
 
 /**
  * <p>
- * A set of generic CRUD operations that can operate on any entity in the
- * default persistence unit.
+ * A set of generic CRUD methods that can operate on any entity in the default
+ * persistence unit.
  * </p>
  * <p>
  * If an application needs only basic CRUD operations, this class (and its
  * companion the <code>EntityManagerHelper</code>) may be the only "data
- * access object" the applications needs.
+ * access object" the application needs.
  * </p>
  * <p>
  * This implementation delegates transaction management and exception handling
  * to another component, such as an Interceptor or Filter, or the setUp and
- * tearDown methods of a TestCase. See <code>EntityInterceptor</code> for an
- * example.
+ * tearDown methods of a TestCase. See
+ * [EMAIL PROTECTED] entity.EntityInterceptor EntityInterceptor} and
+ * [EMAIL PROTECTED] entity.EntityTestCase EntityTestCase} for examples.
  * </p>
  * <p>
- * In extending this service class, or other service classes, we should avoid 
+ * In extending this service class, or other service classes, we should avoid
  * the <a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html";>
- * Anemic Domain Model anti-pattern</a>, and keep both business logic and 
- * business state in the Entity objects. 
+ * Anemic Domain Model anti-pattern</a>, and keep both business logic and
+ * business state in the Entity objects.
  * </p>
  * 
  */

Added: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java?rev=600483&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java 
(added)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java 
Mon Dec  3 03:18:37 2007
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ */
+package entity;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
[EMAIL PROTECTED]
+/**
+ * <p>
+ * POJO base class with helper methods for managing an ID property based on a
+ * universally unique identifier (UUID).
+ * </p>
+ * <p>
+ * UUIDs are particulary useful in RESTful application designs, since an object
+ * instance can assign its own primary key without interacting with a
+ * persistence unit. This base class is intended as a convenience only, and the
+ * class type should not be referred by the API. Instances of this class should
+ * be treated as ordinary POJOs (which they are!).
+ * </p>
+ */
+public class UuidEntity implements Serializable {
+
+    @Transient
+    private UUID uuid;
+
+    @Id
+    @Column(length = 36)
+    // @GeneratedValue(generator="system-uuid")
+    // @GenericGenerator(name="system-uuid", strategy = "uuid")
+    private String id;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String value) {
+        id = value;
+    }
+
+    @Version()
+    private Timestamp last_update;
+
+    public Timestamp getLastUpdate() {
+        return last_update;
+    }
+
+    public void setLastUpdate(Timestamp value) {
+        last_update = value;
+    }
+
+    public boolean equals(Object obj) {
+        if ((obj instanceof UuidEntity) && (getId() != null)) {
+            return getId().equals(((UuidEntity) obj).getId());
+        } else {
+            return false;
+        }
+    }
+
+    public int hashCode() {
+        if (getId() != null) {
+            if (uuid == null)
+                uuid = UUID.fromString(id);
+            return uuid.hashCode();
+        } else {
+            return super.hashCode();
+        }
+    }
+
+    public String toString() {
+        return "entity.UuidEntity[id=" + getId() + "]";
+    }
+
+    public UuidEntity() {
+        String id = UUID.randomUUID().toString();
+        setId(id);
+    }
+}

Copied: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolImpl.java
 (from r599722, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java)
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolImpl.java?p2=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolImpl.java&p1=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java&r1=599722&r2=600483&rev=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/Protocol.java 
(original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolImpl.java
 Mon Dec  3 03:18:37 2007
@@ -29,9 +29,6 @@
 
 /**
  * <p>
- * Describes an email server protocol, such as POP or SMTP.
- * </p>
- * <p>
  * JPA entity class for the <code>APP_PROTOCOL</code> table. This class
  * contains sufficient detail to regenerate the database schema (top-down
  * development). The annotation mode is by field.
@@ -39,9 +36,9 @@
  */
 @Entity(name = "APP_PROTOCOL")
 @NamedQueries( {
-        @NamedQuery(name = Protocol.COUNT, query = Protocol.COUNT_QUERY),
-        @NamedQuery(name = Protocol.FIND_ALL, query = Protocol.FIND_ALL_QUERY) 
})
-public class Protocol extends UuidEntity implements Serializable {
+        @NamedQuery(name = ProtocolImpl.COUNT, query = 
ProtocolImpl.COUNT_QUERY),
+        @NamedQuery(name = ProtocolImpl.FIND_ALL, query = 
ProtocolImpl.FIND_ALL_QUERY) })
+public class ProtocolImpl extends UuidEntity implements Serializable, Protocol 
{
 
     // ---- STATICS ----
 
@@ -85,7 +82,7 @@
      * Instantiate a default <code>Protocol</code> object.
      * </p>
      */
-    public Protocol() {
+    public ProtocolImpl() {
         super();
     }
 
@@ -94,7 +91,7 @@
      * Instantiate a default <code>Protocol</code> object, and load values.
      * </p>
      */
-    public Protocol(String description) {
+    public ProtocolImpl(String description) {
         super();
         setDescription(description);
     }

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolService.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolService.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolService.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolService.java
 Mon Dec  3 03:18:37 2007
@@ -27,7 +27,7 @@
  * <p>
  * Facade providing custom operations involving the <code>Protocol</code>
  * object.
- * <p>
+ * </p>
  */
 // @WebService
 public interface ProtocolService {

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolServiceImpl.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolServiceImpl.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolServiceImpl.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolServiceImpl.java
 Mon Dec  3 03:18:37 2007
@@ -23,36 +23,34 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.persistence.EntityManager;
 import javax.persistence.PersistenceException;
 
 import entity.EntityService;
-import entity.EntityManagerHelper;
 
 /**
  * <p>
- * Default JPA implementation of <code>ProtocolHelper</code>.
+ * Default JPA implementation of <code>ProtocolService</code>.
  * </p>
  */
-// @WebService(serviceName = "protocol", endpointInterface = 
"entity.protocol.ProtocolService")
-public class ProtocolServiceImpl extends EntityService implements 
ProtocolService {
+// @WebService(serviceName = "protocol", endpointInterface =
+// "entity.protocol.ProtocolService")
+public class ProtocolServiceImpl extends EntityService implements
+        ProtocolService {
 
     public int count() throws PersistenceException {
-        Long count = (Long) singleResult(Protocol.COUNT, null, null);
+        Long count = (Long) singleResult(ProtocolImpl.COUNT, null, null);
         int result = count.intValue();
         return result;
     }
 
     public Protocol find(String value) {
-        Protocol result = (Protocol) readEntity(Protocol.class, value);
+        Protocol result = (Protocol) readEntity(ProtocolImpl.class, value);
         return result;
     }
 
     @SuppressWarnings("unchecked")
     public List<Protocol> findAll() {
-        EntityManager manager = EntityManagerHelper.getEntityManager();
-        List<Protocol> protocols = manager.createNamedQuery(Protocol.FIND_ALL)
-                .getResultList();
+        List<Protocol> protocols = resultList(ProtocolImpl.FIND_ALL, null, 
null);
         if (protocols == null) {
             protocols = new ArrayList<Protocol>();
         }

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
 Mon Dec  3 03:18:37 2007
@@ -35,9 +35,9 @@
      * persistence database, given a String ID.
      */
     public Object convertFromString(Map context, String[] values, Class 
toClass) {
-        ProtocolService manager = new ProtocolServiceImpl();
+        ProtocolService service = new ProtocolServiceImpl();
         String id = values[0];
-        Protocol target = manager.find(id);
+        Protocol target = service.find(id);
         return target;
     }
 
@@ -45,7 +45,7 @@
      * Provide the String ID for a <code>Protocol</code> object.
      */
     public String convertToString(Map context, Object o) {
-        Protocol value = (Protocol) o;
+        ProtocolImpl value = (ProtocolImpl) o;
         String id = value.getId();
         return id;
     }

Copied: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionImpl.java
 (from r599470, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java)
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionImpl.java?p2=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionImpl.java&p1=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java&r1=599470&r2=600483&rev=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionImpl.java
 Mon Dec  3 03:18:37 2007
@@ -19,6 +19,7 @@
 package entity.subscription;
 
 import java.io.Serializable;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.JoinColumn;
@@ -29,65 +30,35 @@
 
 import entity.UuidEntity;
 import entity.protocol.Protocol;
+import entity.protocol.ProtocolImpl;
 import entity.user.User;
+import entity.user.UserImpl;
 
 /**
  * <p>
- * An entity representing an email account.
- * </p>
- * <p>
- * JPA entity class for the <code>APP_SUBSCRIPTION</code> table. TThis class
+ * JPA entity class for the <code>APP_SUBSCRIPTION</code> table. This class
  * contains sufficient detail to regenerate the database schema (top-down
  * development). The annotation mode is by field.
  * </p>
  */
 @NamedQueries( {
-        @NamedQuery(name = Subscription.COUNT, query = 
Subscription.COUNT_QUERY),
-        @NamedQuery(name = Subscription.FIND_ALL, query = 
Subscription.FIND_ALL_QUERY),
-        @NamedQuery(name = Subscription.FIND_BY_NAME, query = 
Subscription.FIND_BY_NAME_QUERY) })
+        @NamedQuery(name = Subscription.COUNT, query = 
SubscriptionImpl.COUNT_QUERY),
+        @NamedQuery(name = Subscription.FIND_ALL, query = 
SubscriptionImpl.FIND_ALL_QUERY),
+        @NamedQuery(name = Subscription.FIND_BY_NAME, query = 
SubscriptionImpl.FIND_BY_NAME_QUERY) })
 @Entity(name = "APP_SUBSCRIPTION")
-public class Subscription extends UuidEntity implements Serializable {
+public class SubscriptionImpl extends UuidEntity implements Serializable,
+        Subscription {
 
     // ---- STATICS ----
 
-    /**
-     * <p>
-     * Named query for counting <code>Subscription</code> entities for all
-     * Users.
-     * </p>
-     */
-    public static final String COUNT = "Subscription.COUNT";
-
     private static final String COUNT_QUERY = "SELECT COUNT(*) FROM 
APP_SUBSCRIPTION";
 
-    /**
-     * <p>
-     * Named query for finding a <code>User</code> by username.
-     * </p>
-     */
-    public static final String FIND_ALL = "Subscription.FIND_ALL";
-
     private static final String FIND_ALL_QUERY = "SELECT s FROM 
APP_SUBSCRIPTION s";
 
-    /**
-     * <p>
-     * Named query for finding a <code>User</code> by username.
-     * </p>
-     */
-    public static final String FIND_BY_NAME = "Subscription.FIND_BY_HOST";
-
     private static final String FIND_BY_NAME_QUERY = "SELECT s FROM 
APP_SUBSCRIPTION s WHERE s.host = :host";
 
-    /**
-     * <p>
-     * Token represnting the "host" or "name" attribute.
-     * </p>
-     */
-    public static final String NAME = "host";
-
     // ---- FIELDS ----
 
-    @Column
     private boolean auto_connect;
 
     @Column(nullable = false)
@@ -96,12 +67,12 @@
     @Column(nullable = false)
     private String password;
 
-    @JoinColumn(name = "protocol_id")
-    @OneToOne
+    @JoinColumn
+    @OneToOne(targetEntity = ProtocolImpl.class)
     private Protocol protocol;
 
-    @JoinColumn(name = "user_id", nullable = false)
-    @ManyToOne
+    @JoinColumn(nullable = false)
+    @ManyToOne(targetEntity = UserImpl.class)
     private User user;
 
     @Column(nullable = false)
@@ -164,7 +135,7 @@
      * Instantiate a default <code>Subscription</code> object.
      * </p>
      */
-    public Subscription() {
+    public SubscriptionImpl() {
         super();
     }
 
@@ -175,7 +146,7 @@
      * </p>
      * 
      */
-    public Subscription(String host, User user, String username,
+    public SubscriptionImpl(String host, User user, String username,
             String password, Protocol protocol, boolean autoConnect) {
         super();
         setHost(host);

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionServiceImpl.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionServiceImpl.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionServiceImpl.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionServiceImpl.java
 Mon Dec  3 03:18:37 2007
@@ -18,23 +18,22 @@
  */
 package entity.subscription;
 
-import javax.persistence.EntityManager;
 import javax.persistence.PersistenceException;
 
 import entity.EntityService;
-import entity.EntityManagerHelper;
 
 /**
  * <p>
- * Default JPA implementation of <code>UserHelper</code>.
+ * Default JPA implementation of <code>SubscriptionService</code>.
  * </p>
  */
-// @WebService(serviceName = "subscription", endpointInterface = 
"entity.subscription.SubscriptionService")
+// @WebService(serviceName = "subscription", endpointInterface =
+// "entity.subscription.SubscriptionService")
 public class SubscriptionServiceImpl extends EntityService implements
         SubscriptionService {
 
     public int count() throws PersistenceException {
-        Long count = (Long) singleResult(Subscription.COUNT, null, null);
+        Long count = (Long) singleResult(SubscriptionImpl.COUNT, null, null);
         int result = count.intValue();
         return result;
     }
@@ -44,21 +43,20 @@
     }
 
     public Subscription delete(Subscription value) throws Exception {
-        EntityManager manager = EntityManagerHelper.getEntityManager();
-        manager.merge(value);
+        updateEntity(value);
         value.getUser().removeSubscription(value);
         return (Subscription) deleteEntity(value);
     }
 
     public Subscription find(String value) {
-        Subscription result = (Subscription) readEntity(Subscription.class,
+        Subscription result = (Subscription) readEntity(SubscriptionImpl.class,
                 value);
         return result;
     }
 
     public Subscription findByName(String value) {
         Subscription result = (Subscription) singleResult(
-                Subscription.FIND_BY_NAME, Subscription.NAME, value);
+                SubscriptionImpl.FIND_BY_NAME, SubscriptionImpl.NAME, value);
         return result;
     }
 

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
 Mon Dec  3 03:18:37 2007
@@ -36,9 +36,9 @@
      * persistence database, fiven a host name.
      */
     public Object convertFromString(Map context, String[] values, Class 
toClass) {
-        SubscriptionService manager = new SubscriptionServiceImpl();
+        SubscriptionService service = new SubscriptionServiceImpl();
         String name = String.valueOf(values[0]);
-        Subscription result = manager.findByName(name);
+        Subscription result = service.findByName(name);
         return result;
     }
 

Copied: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserImpl.java 
(from r599470, 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java)
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserImpl.java?p2=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserImpl.java&p1=struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java&r1=599470&r2=600483&rev=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserImpl.java 
Mon Dec  3 03:18:37 2007
@@ -32,13 +32,10 @@
 
 import entity.UuidEntity;
 import entity.subscription.Subscription;
+import entity.subscription.SubscriptionImpl;
 
 /**
  * <p>
- * Entity representing an account that maintains zero or more
- * <code>Subscription</code>s.
- * </p>
- * <p>
  * JPA entity class for the <code>APP_USER</code> table. This class contains
  * sufficient detail to regenerate the database schema (top-down development).
  * The annotation mode is by field.
@@ -46,47 +43,19 @@
  */
 @Entity(name = "APP_USER")
 @NamedQueries( {
-        @NamedQuery(name = User.FIND_ALL, query = User.FIND_ALL_QUERY),
-        @NamedQuery(name = User.FIND_BY_NAME, query = User.FIND_BY_NAME_QUERY),
-        @NamedQuery(name = User.COUNT, query = User.COUNT_QUERY) })
-public class User extends UuidEntity implements Serializable {
+        @NamedQuery(name = User.FIND_ALL, query = UserImpl.FIND_ALL_QUERY),
+        @NamedQuery(name = User.FIND_BY_NAME, query = 
UserImpl.FIND_BY_NAME_QUERY),
+        @NamedQuery(name = User.COUNT, query = UserImpl.COUNT_QUERY) })
+public class UserImpl extends UuidEntity implements Serializable, User {
 
     // ---- STATICS ----
 
-    /**
-     * <p>
-     * Named query for counting <code>User</code> entities.
-     * </p>
-     */
-    public static final String COUNT = "User.COUNT";
-
     private static final String COUNT_QUERY = "SELECT COUNT(*) FROM APP_USER";
 
-    /**
-     * <p>
-     * Named query for finding a <code>User</code> by username.
-     * </p>
-     */
-    public static final String FIND_ALL = "User.FIND_ALL";
-
     private static final String FIND_ALL_QUERY = "SELECT u FROM APP_USER u";
 
-    /**
-     * <p>
-     * Named query for finding a <code>User</code> by username.
-     * </p>
-     */
-    public static final String FIND_BY_NAME = "User.FIND_BY_USERNAME";
-
     private static final String FIND_BY_NAME_QUERY = "SELECT u FROM APP_USER u 
WHERE u.username = :username";
 
-    /**
-     * <p>
-     * Token representing the "username" attribute.
-     * </p>
-     */
-    static final String NAME = "username";
-
     // --- FIELDS ----
 
     @Column(length = 64)
@@ -101,7 +70,7 @@
     @Column(length = 64)
     private String reply_to_address;
 
-    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, targetEntity = 
SubscriptionImpl.class)
     private List<Subscription> subscriptions;
 
     @Column(length = 16, nullable = false, unique = true)
@@ -181,15 +150,6 @@
 
     // ---- METHODS ----
 
-    /**
-     * <p>
-     * Add the specified <code>Subscription</code> to the set of subscriptions
-     * associated with this <code>User</code>.
-     * </p>
-     * <p>
-     * A duplicate <code>Subscription</code> is not added but quietly ignored.
-     * </p>
-     */
     public void addSubscription(Subscription subscription) {
         List<Subscription> subscriptions = getSubscriptions();
         if (subscriptions == null) {
@@ -202,15 +162,6 @@
         }
     }
 
-    /**
-     * <p>
-     * Add the specified <code>Subscriptions</code> to the set of
-     * subscriptions associated with this <code>User</code>.
-     * </p>
-     * <p>
-     * A duplicate <code>Subscription</code> is not added but quietly ignored.
-     * </p>
-     */
     public void addSubscriptions(List<Subscription> subscriptions) {
         if (subscriptions == null)
             return;
@@ -219,15 +170,6 @@
         }
     }
 
-    /**
-     * <p>
-     * Remove the specified <code>Subscription</code> from the set of
-     * subscriptions associated with this <code>User</code>.
-     * </p>
-     * <p>
-     * A duplicate <code>Subscription</code> is not added but quietly ignored.
-     * </p>
-     */
     public void removeSubscription(Subscription subscription) {
         List<Subscription> subscriptions = getSubscriptions();
         if (subscriptions.contains(subscription)) {
@@ -240,7 +182,7 @@
      * Instantiate a default <code>User</code> object.
      * </p>
      */
-    public User() {
+    public UserImpl() {
         super();
     }
 
@@ -252,7 +194,7 @@
      * This constructor does not set the ID value.
      * </p>
      */
-    public User(String username, String password) {
+    public UserImpl(String username, String password) {
         super();
         setUsername(username);
         setPassword(password);
@@ -263,7 +205,7 @@
      * Instantiate a <code>User</code> object, and load values.
      * </p>
      */
-    public User(String username, String password, String fullName,
+    public UserImpl(String username, String password, String fullName,
             String fromAddress, String replyToAddress) {
         super();
         setUsername(username);

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserServiceImpl.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserServiceImpl.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserServiceImpl.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserServiceImpl.java
 Mon Dec  3 03:18:37 2007
@@ -27,11 +27,12 @@
  * Default JPA implementation of <code>UserHelper</code>.
  * </p>
  */
-// @WebService(serviceName = "user", endpointInterface = 
"entity.user.UserSession")
+// @WebService(serviceName = "user", endpointInterface =
+// "entity.user.UserSession")
 public class UserServiceImpl extends EntityService implements UserService {
 
     public int count() throws PersistenceException {
-        Long count = (Long) singleResult(User.COUNT, null, null);
+        Long count = (Long) singleResult(UserImpl.COUNT, null, null);
         int result = count.intValue();
         return result;
     }
@@ -45,12 +46,13 @@
     }
 
     public User find(String value) {
-        User result = (User) readEntity(User.class, value);
+        User result = (User) readEntity(UserImpl.class, value);
         return result;
     }
 
-    public User findByName(String value) {
-        User result = (User) singleResult(User.FIND_BY_NAME, User.NAME, value);
+    public UserImpl findByName(String value) {
+        UserImpl result = (UserImpl) singleResult(UserImpl.FIND_BY_NAME,
+                UserImpl.NAME, value);
         return result;
     }
 

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
 (original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
 Mon Dec  3 03:18:37 2007
@@ -37,9 +37,9 @@
      * </p>
      */
     public Object convertFromString(Map context, String[] values, Class 
toClass) {
-        UserService manager = new UserServiceImpl();
+        UserService service = new UserServiceImpl();
         String name = values[0];
-        User result = manager.findByName(name);
+        User result = service.findByName(name);
         return result;
     }
 

Copied: 
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/BootstrapDataTest.java 
(from r599722, 
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java)
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/BootstrapDataTest.java?p2=struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/BootstrapDataTest.java&p1=struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java&r1=599722&r2=600483&rev=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/test/java/action/BootstrapDataTest.java 
(original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/BootstrapDataTest.java 
Mon Dec  3 03:18:37 2007
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package action;
+package entity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -26,10 +26,12 @@
 import javax.persistence.EntityTransaction;
 
 import junit.framework.TestCase;
-import entity.EntityManagerHelper;
 import entity.protocol.Protocol;
+import entity.protocol.ProtocolImpl;
 import entity.subscription.Subscription;
+import entity.subscription.SubscriptionImpl;
 import entity.user.User;
+import entity.user.UserImpl;
 
 public class BootstrapDataTest extends TestCase {
 
@@ -63,17 +65,17 @@
 
         // Create the basic protocol data
         Protocol protocol1 = null;
-        protocol1 = new Protocol();
+        protocol1 = new ProtocolImpl();
         protocol1.setId(getUUID());
         protocol1.setDescription("IMAP Protocol");
         em.persist(protocol1);
-        Protocol protocol2 = new Protocol();
+        Protocol protocol2 = new ProtocolImpl();
         protocol2.setId(getUUID());
         protocol2.setDescription("POP3 Protocol");
         em.persist(protocol2);
 
         // Set up the initial user and subscriptions
-        User user = new User();
+        User user = new UserImpl();
         user.setId(getUUID());
         user.setUsername("user");
         user.setPassword("pass");
@@ -82,7 +84,7 @@
         List<Subscription> list = new ArrayList<Subscription>();
         user.setSubscriptions(list);
         Subscription sub = null;
-        sub = new Subscription();
+        sub = new SubscriptionImpl();
         sub.setId(getUUID());
         sub.setUser(user);
         sub.setHost("mail.yahoo.com");
@@ -90,7 +92,7 @@
         sub.setUsername("jquser");
         sub.setPassword("foo");
         list.add(sub);
-        sub = new Subscription();
+        sub = new SubscriptionImpl();
         sub.setId(getUUID());
         sub.setUser(user);
         sub.setHost("mail.hotmail.com");
@@ -104,7 +106,7 @@
         et.commit();
 
         // Test commit
-        List<Protocol> protocols2 = em.createNamedQuery(Protocol.FIND_ALL)
+        List<Protocol> protocols2 = em.createNamedQuery(ProtocolImpl.FIND_ALL)
                 .getResultList();
         boolean updated = ((protocols2 != null) && (protocols2.size() > 0));
         assertTrue("Commit not successful!", updated);

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/UserServiceTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/UserServiceTest.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- 
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/UserServiceTest.java 
(original)
+++ 
struts/sandbox/trunk/jpa-mailreader/src/test/java/entity/UserServiceTest.java 
Mon Dec  3 03:18:37 2007
@@ -11,7 +11,9 @@
 import entity.protocol.ProtocolService;
 import entity.protocol.ProtocolServiceImpl;
 import entity.subscription.Subscription;
+import entity.subscription.SubscriptionImpl;
 import entity.user.User;
+import entity.user.UserImpl;
 import entity.user.UserService;
 import entity.user.UserServiceImpl;
 
@@ -26,14 +28,14 @@
         beforeCount = helper.count();
     }
 
-    private User newUser() {
-        return new User("user_" + base, "pass_" + base);
+    private UserImpl newUser() {
+        return new UserImpl("user_" + base, "pass_" + base);
     }
 
     public void testCount() throws Exception {
         EntityManager manager = EntityManagerHelper.getEntityManager();
         Object result = null;
-        Query query = manager.createNamedQuery(User.COUNT);
+        Query query = manager.createNamedQuery(UserImpl.COUNT);
         try {
             result = query.getSingleResult();
         } catch (NoResultException e) {
@@ -45,7 +47,7 @@
     }
 
     public void testCreate() throws Exception {
-        User user = newUser();
+        UserImpl user = newUser();
         String before = user.getId();
         assertTrue("ID not assigned on New", isNotEmpty(before));
         helper.create(user);
@@ -66,29 +68,27 @@
             String base = String.valueOf(i + 1);
             autoConnect = !autoConnect;
             int protocolIndex = (i % protocolMax);
-            Subscription sub = new Subscription("host_" + base, user, "user_"
-                    + base, "pass_" + base, protocols.get(protocolIndex),
-                    autoConnect);
+            SubscriptionImpl sub = new SubscriptionImpl("host_" + base, user,
+                    "user_" + base, "pass_" + base, protocols
+                            .get(protocolIndex), autoConnect);
             subscriptions.add(sub);
         }
         return subscriptions;
     }
 
     public void testCreateWithSubscriptions() throws Exception {
-        User user = newUser();
+        UserImpl user = newUser();
         helper.create(user);
         List<Subscription> subscriptions = getSubscriptions(user);
         user.addSubscriptions(subscriptions);
         helper.update(user);
         assertTrue("Expected ID", user.getId() != null);
         assertTrue(user.getSubscriptions() != null);
-        String qname =user.getQualifiedName(); 
-        assertTrue(qname !=null);
     }
 
     public void testCreateDelete() throws Exception {
         // rollback = true;
-        User user = new User();
+        User user = new UserImpl();
         user.setUsername("user_" + base);
         user.setPassword("pass_" + base);
         helper.create(user);

Modified: 
struts/sandbox/trunk/jpa-mailreader/src/test/java/hello/MessageTest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/test/java/hello/MessageTest.java?rev=600483&r1=600482&r2=600483&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/test/java/hello/MessageTest.java 
(original)
+++ struts/sandbox/trunk/jpa-mailreader/src/test/java/hello/MessageTest.java 
Mon Dec  3 03:18:37 2007
@@ -63,22 +63,22 @@
     public void testUpdate() throws Exception {
         final String MESSAGE = "Update me!";
         final String UPDATE = "Hey! I've been updated!";
-        
+
         Message message = new Message(MESSAGE);
         manager.persist(message);
-        manager.flush();        
+        manager.flush();
+
+        Long id = message.getId();
+        Message update = manager.find(Message.class, id);
+        assertSame("Expected same instance", message, update);
 
-        Long id = message.getId(); 
-        Message update = manager.find(Message.class, id);        
-        assertSame("Expected same instance",message,update);
-        
         update.setText(UPDATE);
         manager.flush();
-        
+
         Message result = manager.find(Message.class, id);
-        assertEquals(UPDATE,result.getText());        
+        assertEquals(UPDATE, result.getText());
     }
-    
+
     public void testCreateDelete() throws Exception {
         final String MESSAGE = "Delete me!";
         Message message = new Message(MESSAGE);


Reply via email to