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);