From: <id...@us...> - 2009-02-19 23:35:15
|
Revision: 18 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=18&view=rev Author: idueppe Date: 2009-02-19 23:35:04 +0000 (Thu, 19 Feb 2009) Log Message: ----------- in progress - development of idmapper service component Modified Paths: -------------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml Added Paths: ----------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java 2009-02-19 23:02:14 UTC (rev 17) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java 2009-02-19 23:35:04 UTC (rev 18) @@ -1,5 +1,6 @@ package de.campussource.cse.idmapper; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -32,7 +33,7 @@ @Column(name = "BUS_ID", nullable = false) private Long busId; - @ManyToOne + @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} ) @JoinColumn(name = "CLIENT_INSTANCE_ID") private ClientInstance clientInstance; Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java 2009-02-19 23:35:04 UTC (rev 18) @@ -0,0 +1,26 @@ +package de.campussource.cse.idmapper; + +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +@Stateless +public class ClientObjectDao { + + @PersistenceContext + private EntityManager entityManager; + + @TransactionAttribute(TransactionAttributeType.MANDATORY) + public void persist(ClientObject clientObject) { + entityManager.persist(clientObject); + } + + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public ClientObject find(final Long id) { + return entityManager.find(ClientObject.class, id); + } + + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java 2009-02-19 23:35:04 UTC (rev 18) @@ -0,0 +1,48 @@ +package de.campussource.cse.idmapper; + +import java.lang.reflect.Field; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.PersistenceContext; + +import org.junit.Before; + +public class AbstractPersistentUnitTest { + + protected EntityManagerFactory entityManagerFactory; + protected EntityManager entityManager; + + @Before + public void retrieveEntityManager() { + entityManagerFactory = Persistence.createEntityManagerFactory("cseip"); + entityManager = entityManagerFactory.createEntityManager(); + } + + protected void injectPersistenceContext(Object object) { + Field[] fields = object.getClass().getDeclaredFields(); + for (Field field : fields) { + if (field.isAnnotationPresent(PersistenceContext.class)) { + field.setAccessible(true); + try { + field.set(object, entityManager); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + field.setAccessible(false); + } + } + } + + protected void txBegin() { + entityManager.getTransaction().begin(); + } + + protected void txCommit() { + entityManager.getTransaction().commit(); + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java 2009-02-19 23:35:04 UTC (rev 18) @@ -0,0 +1,77 @@ +package de.campussource.cse.idmapper; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.net.MalformedURLException; +import java.net.URL; + +import javax.persistence.RollbackException; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class ClientObjectDaoTest extends AbstractPersistentUnitTest { + + private ClientObjectDao dao; + + @Before + public void setUp() { + dao = new ClientObjectDao(); + injectPersistenceContext(dao); + txBegin(); + } + + @After + public void tearDown() { + entityManager.close(); + entityManagerFactory.close(); + } + + @Test + public void testCreateClientObject() { + ClientObject clientObject = newClientObject("OPENUSS::COURSE::10", 1L); + dao.persist(clientObject); + assertNotNull(clientObject.getId()); + txCommit(); + } + + @Test + public void testFindClientObject() { + ClientObject clientObject = newClientObject("OPENUSS::COURSE::10", 1L); + dao.persist(clientObject); + assertNotNull(clientObject.getId()); + txCommit(); + txBegin(); + ClientObject coid = dao.find(clientObject.getId()); + assertEquals(clientObject, coid); + } + + @Test(expected=RollbackException.class) + public void testCreateClientObjectUniqueConstraintError() { + ClientInstance instance = createClientInstance("TEST","http://test.de"); + dao.persist(newClientObject("TEST::COURSE::1", 1L, instance )); + dao.persist(newClientObject("TEST::COURSE::1", 1L, instance )); + txCommit(); + } + + private ClientInstance createClientInstance(final String name, final String url) { + try { + return new ClientInstance(name, new URL(url)); + } catch (MalformedURLException e) { + fail(e.getMessage()); + throw new RuntimeException(e); + } + } + + private ClientObject newClientObject(final String COID, final long BUS_ID, ClientInstance... instance) { + if (instance.length > 0) { + return new ClientObject(BUS_ID, COID, instance[0]); + } else { + return new ClientObject(BUS_ID, COID, createClientInstance("default","http://www.default.de")); + } + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java 2009-02-19 23:02:14 UTC (rev 17) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java 2009-02-19 23:35:04 UTC (rev 18) @@ -1,25 +1,21 @@ package de.campussource.cse.idmapper; -import static org.junit.Assert.*; -import org.junit.Test; +import static org.junit.Assert.assertNotNull; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; +import org.junit.Test; -public class PersistentUnitTest { + +public class PersistentUnitTest extends AbstractPersistentUnitTest { @Test public void testConfiguration() { - EntityManagerFactory emf = Persistence.createEntityManagerFactory("cseip"); - EntityManager em = emf.createEntityManager(); - List<ClientInstance> mappings = em.createQuery("SELECT m FROM ClientInstance m").getResultList(); + List<ClientInstance> mappings = entityManager.createQuery("SELECT m FROM ClientInstance m").getResultList(); assertNotNull(mappings); - em.close(); + entityManager.close(); } } Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml 2009-02-19 23:02:14 UTC (rev 17) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml 2009-02-19 23:35:04 UTC (rev 18) @@ -9,10 +9,10 @@ <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables" /> <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver" /> +<!-- <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/cseip?profileSQL=true&createDatabaseIfNotExist=true" />--> <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/cseip?createDatabaseIfNotExist=true" /> <property name="toplink.jdbc.user" value="root" /> <property name="toplink.jdbc.password" value="masterkey" /> - <property name="toplink.logging.level" value="FINEST"/> </properties> </persistence-unit> </persistence> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <id...@us...> - 2009-02-20 16:34:51
|
Revision: 26 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=26&view=rev Author: idueppe Date: 2009-02-20 16:34:38 +0000 (Fri, 20 Feb 2009) Log Message: ----------- Implement some prototype features Modified Paths: -------------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstance.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java Added Paths: ----------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstanceDao.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAO.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAOJPA.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapper.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapperBean.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/IdMapperBeanTest.java Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstance.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstance.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstance.java 2009-02-20 16:34:38 UTC (rev 26) @@ -19,7 +19,7 @@ @Id @GeneratedValue(strategy=GenerationType.SEQUENCE) @Column(name="ID") - private long id; + private Long id; @Column(name="CLIENT_NAME") private String name; @@ -37,7 +37,7 @@ this.url = url; } - public long getId() { + public Long getId() { return id; } Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstanceDao.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstanceDao.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstanceDao.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,5 @@ +package de.campussource.cse.idmapper; + +public class ClientInstanceDao extends DAOJPA<ClientInstance> { + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientInstanceDao.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObject.java 2009-02-20 16:34:38 UTC (rev 26) @@ -8,6 +8,8 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.UniqueConstraint; @@ -15,29 +17,43 @@ import org.apache.commons.lang.builder.ToStringStyle; @Entity -@Table( - name = "IDMAPPER_CLIENT_OBJECT", - uniqueConstraints = @UniqueConstraint(columnNames = { "CLIENT_OBJECT_ID", "CLIENT_INSTANCE_ID" }) +@Table(name = "IDMAPPER_CLIENT_OBJECT", uniqueConstraints = @UniqueConstraint(columnNames = { "CLIENT_OBJECT_ID", + "CLIENT_INSTANCE_ID" })) +@NamedQueries( + value = { + @NamedQuery( + name = "ClientObject.findByBusIdAndInstanceId", + query = "select c from ClientObject c where c.busId=:busId and c.clientInstance.id = :instanceId"), + @NamedQuery( + name = "ClientObject.findByCOIDAndInstanceId", + query = "select c from ClientObject c where c.clientObjectId=:clientObjectId and c.clientInstance.id = :instanceId") + } + + ) public class ClientObject { + public static final String FIND_BY_BUSID_AND_INSTANCEID = "ClientObject.findByBusIdAndInstanceId"; + public static final String FIND_BY_CLIENT_OBJECT_ID_AND_INSTANCEID = "ClientObject.findByCOIDAndInstanceId"; + private static final long serialVersionUID = 8965520237595716111L; @Id - @GeneratedValue(strategy=GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.AUTO) private Long id; - + @Column(name = "CLIENT_OBJECT_ID", length = 128) private String clientObjectId; @Column(name = "BUS_ID", nullable = false) private Long busId; - @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} ) + @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) @JoinColumn(name = "CLIENT_INSTANCE_ID") private ClientInstance clientInstance; - protected ClientObject() {} + protected ClientObject() { + } public ClientObject(long busId, String clientObjectId, ClientInstance clientInstance) { this.busId = busId; @@ -69,7 +85,7 @@ public void setBusId(Long busId) { this.busId = busId; } - + public Long getId() { return id; } @@ -101,11 +117,20 @@ } public String toString() { - return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE) - .append(id) - .append(clientObjectId) - .append(busId) - .append(clientInstance.getName()).toString(); + return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(id).append(clientObjectId).append(busId) + .append(clientInstance.getName()).toString(); } + /** + * + * @return the associated InstanceId or null + */ + public Long getInstanceId() { + if (clientInstance != null) { + return clientInstance.getId(); + } else { + return null; + } + } + } Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ClientObjectDao.java 2009-02-20 16:34:38 UTC (rev 26) @@ -1,26 +1,24 @@ package de.campussource.cse.idmapper; import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; @Stateless -public class ClientObjectDao { +public class ClientObjectDao extends DAOJPA<ClientObject> { - @PersistenceContext - private EntityManager entityManager; - - @TransactionAttribute(TransactionAttributeType.MANDATORY) - public void persist(ClientObject clientObject) { - entityManager.persist(clientObject); + public ClientObject findByBusIdAndInstanceId(Long busId, Long instanceId) { + return (ClientObject) entityManager + .createNamedQuery(ClientObject.FIND_BY_BUSID_AND_INSTANCEID) + .setParameter("busId", busId) + .setParameter("instanceId", instanceId) + .getSingleResult(); } - @TransactionAttribute(TransactionAttributeType.SUPPORTS) - public ClientObject find(final Long id) { - return entityManager.find(ClientObject.class, id); + public ClientObject findByClientObjectIdAndInstanceId(String coid, Long instanceId) { + return (ClientObject) entityManager + .createNamedQuery(ClientObject.FIND_BY_CLIENT_OBJECT_ID_AND_INSTANCEID) + .setParameter("clientObjectId", coid) + .setParameter("instanceId", instanceId) + .getSingleResult(); } - } Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAO.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAO.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAO.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,13 @@ +package de.campussource.cse.idmapper; + +import java.io.Serializable; + +public interface DAO<T> { + + public T find(Serializable id); + + public void persist(T entity); + + public void remove(T entity); + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAO.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAOJPA.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAOJPA.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAOJPA.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,42 @@ +package de.campussource.cse.idmapper; + +import java.io.Serializable; +import java.lang.reflect.ParameterizedType; + +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + + +public abstract class DAOJPA<E> implements DAO<E> { + + @PersistenceContext + protected EntityManager entityManager; + + private Class<E> persistentClass; + + public DAOJPA() { + this.persistentClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + } + + @Override + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public E find(Serializable id) { + return entityManager.find(persistentClass, id); + } + + @Override + @TransactionAttribute(TransactionAttributeType.MANDATORY) + public void persist(E entity) { + entityManager.persist(entity); + } + + @Override + public void remove(E entity) { + entityManager.remove(entity); + } + + + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/DAOJPA.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapper.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapper.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapper.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,26 @@ +package de.campussource.cse.idmapper; + +import java.util.Set; + +import javax.ejb.Remote; + +@Remote +public interface IdMapper { + + public Long toBusId(String clientObjectId, long clientInstanceId); + + public String toClientObjectId(long busId, long clientInstanceId); + + public void persistClientObjectId(String clientObjectId, long clientInstanceId, long busId); + + public void removeClientObjectId(String clientObjectId, long clientInstanceId); + + public void persistClientInstance(ClientInstance clientInstance); + + public void removeClientInstance(ClientInstance clientInstance); + + public ClientInstance findClientInstance(Long instanceId); + + public Set<ClientInstance> listClientInstance(); + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapper.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapperBean.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapperBean.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapperBean.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,64 @@ +package de.campussource.cse.idmapper; + +import java.util.Set; + +import javax.ejb.EJB; +import javax.ejb.Stateless; + +@Stateless +public class IdMapperBean implements IdMapper { + + @EJB + private ClientObjectDao objectDao; + + @EJB + private ClientInstanceDao instanceDao; + + @Override + public ClientInstance findClientInstance(Long instanceId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Set<ClientInstance> listClientInstance() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void persistClientInstance(ClientInstance clientInstance) { + instanceDao.persist(clientInstance); + } + + @Override + public void persistClientObjectId(String clientObjectId, long clientInstanceId, long busId) { + ClientInstance instance = instanceDao.find(clientInstanceId); + ClientObject object = new ClientObject(busId, clientObjectId, instance); + objectDao.persist(object); + } + + @Override + public void removeClientInstance(ClientInstance clientInstance) { + // TODO Auto-generated method stub + + } + + @Override + public void removeClientObjectId(String clientObjectId, long clientInstanceId) { + // TODO Auto-generated method stub + + } + + @Override + public Long toBusId(String clientObjectId, long clientInstanceId) { + return objectDao.findByClientObjectIdAndInstanceId(clientObjectId, clientInstanceId).getBusId(); + } + + @Override + public String toClientObjectId(long busId, long clientInstanceId) { + return objectDao.findByBusIdAndInstanceId(busId, clientInstanceId).getClientObjectId(); + } + + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/IdMapperBean.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/AbstractPersistentUnitTest.java 2009-02-20 16:34:38 UTC (rev 26) @@ -1,42 +1,103 @@ package de.campussource.cse.idmapper; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.ejb.EJB; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.PersistenceContext; +import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; +import org.junit.BeforeClass; public class AbstractPersistentUnitTest { - protected EntityManagerFactory entityManagerFactory; + protected static EntityManagerFactory entityManagerFactory; protected EntityManager entityManager; + @BeforeClass + public static void retrieveEntityManagerFactory() { + entityManagerFactory = Persistence.createEntityManagerFactory("cseip"); + } + @Before public void retrieveEntityManager() { - entityManagerFactory = Persistence.createEntityManagerFactory("cseip"); entityManager = entityManagerFactory.createEntityManager(); } + + @After + public void closeEntity() { + entityManager.close(); + } + + @AfterClass + public static void closeFactory() { + entityManagerFactory.close(); + } - protected void injectPersistenceContext(Object object) { - Field[] fields = object.getClass().getDeclaredFields(); + // FIXME Extract to Util class + private void injectField(Object object, Field field, Object reference) { + boolean accessible = field.isAccessible(); + field.setAccessible(true); + try { + field.set(object, reference); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + field.setAccessible(accessible); + } + + // FIXME Extract to Util class + private Map<String, Object> context = new HashMap<String, Object>(); + + // FIXME Extract to Util class + protected void autowireByType(Object object) { + Field[] fields = retrieveAllDeclaredFieldsIncludedInheritance(object); for (Field field : fields) { if (field.isAnnotationPresent(PersistenceContext.class)) { - field.setAccessible(true); + injectField(object, field, entityManager); + } + if (field.isAnnotationPresent(EJB.class)) { try { - field.set(object, entityManager); - } catch (IllegalArgumentException e) { + Class fieldClass = field.getType(); + Object target = context.get(fieldClass.getName()); + if (target == null) { + target = fieldClass.newInstance(); + autowireByType(target); + context.put(fieldClass.getName(), target); + } + injectField(object, field, target); + } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } - field.setAccessible(false); } } } + // FIXME Extract to Util class + private Field[] retrieveAllDeclaredFieldsIncludedInheritance(Object object) { + List<Field> fields = new ArrayList<Field>(); + Class clazz = object.getClass(); + while (clazz != null) { + fields.addAll(Arrays.asList(clazz.getDeclaredFields())); + clazz = clazz.getSuperclass(); + } + + return (Field[]) fields.toArray(new Field[fields.size()]); + } + protected void txBegin() { entityManager.getTransaction().begin(); } @@ -45,4 +106,9 @@ entityManager.getTransaction().commit(); } + protected void commitAndBeginTx() { + txCommit(); + txBegin(); + } + } Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ClientObjectDaoTest.java 2009-02-20 16:34:38 UTC (rev 26) @@ -2,6 +2,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.net.MalformedURLException; @@ -9,42 +10,45 @@ import javax.persistence.RollbackException; -import org.junit.After; import org.junit.Before; import org.junit.Test; public class ClientObjectDaoTest extends AbstractPersistentUnitTest { private ClientObjectDao dao; + private ClientObject clientObject; @Before public void setUp() { + clientObject = newClientObject("OPENUSS::COURSE::10", 1L); dao = new ClientObjectDao(); - injectPersistenceContext(dao); + autowireByType(dao); txBegin(); } - @After - public void tearDown() { - entityManager.close(); - entityManagerFactory.close(); + @Test + public void testPersistClientObject() { + dao.persist(clientObject); + assertNotNull(clientObject.getId()); + txCommit(); } - + @Test - public void testCreateClientObject() { - ClientObject clientObject = newClientObject("OPENUSS::COURSE::10", 1L); + public void testPersistDetachedClientObject() { dao.persist(clientObject); assertNotNull(clientObject.getId()); + commitAndBeginTx(); + clientObject.setBusId(20L); + dao.persist(clientObject); txCommit(); + clientObject = dao.find(clientObject.getId()); } @Test public void testFindClientObject() { - ClientObject clientObject = newClientObject("OPENUSS::COURSE::10", 1L); dao.persist(clientObject); assertNotNull(clientObject.getId()); - txCommit(); - txBegin(); + commitAndBeginTx(); ClientObject coid = dao.find(clientObject.getId()); assertEquals(clientObject, coid); } @@ -56,6 +60,49 @@ dao.persist(newClientObject("TEST::COURSE::1", 1L, instance )); txCommit(); } + + @Test + public void testRemoveClientObject() { + dao.persist(clientObject); + assertNotNull(clientObject.getId()); + commitAndBeginTx(); + dao.remove(clientObject); + commitAndBeginTx(); + assertNull(dao.find(clientObject.getId())); + } + + @Test + public void testFindByBusIdAndInstanceId() { + dao.persist(clientObject); + commitAndBeginTx(); + Long busId = clientObject.getBusId(); + Long instanceId = clientObject.getInstanceId(); + ClientObject object = dao.findByBusIdAndInstanceId(busId, instanceId); + assertNotNull(object); + assertEquals(busId, object.getBusId()); + assertEquals(instanceId, object.getInstanceId()); + assertEquals(clientObject.getClientObjectId(), object.getClientObjectId()); + } + + @Test(expected=javax.persistence.NoResultException.class) + public void testDoNotFindByBusIsAndInstanceId() { + dao.findByBusIdAndInstanceId(-1L, -1L); + } + + @Test + public void testFindByClientObjectIdAndInstanceId() { + dao.persist(clientObject); + commitAndBeginTx(); + String coid = clientObject.getClientObjectId(); + Long instanceId = clientObject.getInstanceId(); + + ClientObject object = dao.findByClientObjectIdAndInstanceId(coid,instanceId); + assertNotNull(object); + assertEquals(clientObject.getBusId(), object.getBusId()); + assertEquals(clientObject.getClientObjectId(), object.getClientObjectId()); + assertEquals(clientObject.getInstanceId(), object.getInstanceId()); + } + private ClientInstance createClientInstance(final String name, final String url) { try { Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/IdMapperBeanTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/IdMapperBeanTest.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/IdMapperBeanTest.java 2009-02-20 16:34:38 UTC (rev 26) @@ -0,0 +1,38 @@ +package de.campussource.cse.idmapper; + +import static org.junit.Assert.assertEquals; + +import java.net.MalformedURLException; +import java.net.URL; + +import org.junit.Before; +import org.junit.Test; + +public class IdMapperBeanTest extends AbstractPersistentUnitTest { + + private IdMapperBean mapper; + + @Before + public void setUp() { + mapper = new IdMapperBean(); + autowireByType(mapper); + txBegin(); + } + + @Test + public void testPersistClientObjectId() throws MalformedURLException { + ClientInstance clientInstance = new ClientInstance("TEST",new URL("http://www.test.de")); + mapper.persistClientInstance(clientInstance); + + Long busId = 20L; + String clientObjectId = "TEST::COURSE::123456"; + commitAndBeginTx(); + + mapper.persistClientObjectId(clientObjectId, clientInstance.getId(), busId); + commitAndBeginTx(); + + assertEquals(clientObjectId, mapper.toClientObjectId(busId, clientInstance.getId())); + assertEquals(busId, mapper.toBusId(clientObjectId, clientInstance.getId())); + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/IdMapperBeanTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java 2009-02-20 16:23:43 UTC (rev 25) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitTest.java 2009-02-20 16:34:38 UTC (rev 26) @@ -15,7 +15,6 @@ public void testConfiguration() { List<ClientInstance> mappings = entityManager.createQuery("SELECT m FROM ClientInstance m").getResultList(); assertNotNull(mappings); - entityManager.close(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <id...@us...> - 2009-03-17 14:30:16
|
Revision: 88 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=88&view=rev Author: idueppe Date: 2009-03-17 14:29:47 +0000 (Tue, 17 Mar 2009) Log Message: ----------- Refactoring of the IdentityMapper interface. Modified Paths: -------------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/IdentityMapperTest.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml Added Paths: ----------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdNotFoundException.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapper.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperBean.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperLocal.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObject.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObjectPK.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MapperException.java cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/PersistentUnitConfigurationTest.java Removed Paths: ------------- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/idmapper/ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/ Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdNotFoundException.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdNotFoundException.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdNotFoundException.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,26 @@ +package de.campussource.cse.mapper; + + +/** + * + * @author Ingo Dueppe + */ +public class IdNotFoundException extends MapperException { + + private static final long serialVersionUID = 3260263352045745855L; + + public IdNotFoundException() {} + + public IdNotFoundException(String message) { + super(message); + } + + public IdNotFoundException(Throwable cause) { + super(cause); + } + + public IdNotFoundException(String message, Throwable cause) { + super(message, cause); + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdNotFoundException.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapper.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapper.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapper.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,45 @@ +package de.campussource.cse.mapper; + +import javax.ejb.Remote; + +/** + * IdentityMapper manage the administration of mappings between the global + * unique busId and client specific object ids. Each mapping exists of three + * ids. The global unique bus id, the client instance unique object id, and the + * client unique instance id. + * + * @author Ingo Dueppe + */ +@Remote +public interface IdentityMapper { + + /** + * Convert a clientInstanceId and a clientObjectId to a busID. If the busId + * doesn't exist for the given combination of the parameters then a new busId will be generated. + * + * @param clientInstanceId the Id of the client instance. + * @param clientObjectId the Id of the client object. The id can be any arbitrary string. + * @return busId according to the clientInstance- and clientObjectId. + */ + public Long toBusId(Long clientInstanceId, String clientObjectId); + + /** + * Convert the combination of busId and clientInstanceId to a clientObjectId. + * + * @param busId a existing bus id. + * @param clientInstanceId a existing client instance id. + * @return the corresponding clientObjectID + * @throws IdNotFoundException thrown if either the busId or the clientInstanceId doesn't exists. + */ + public String toClientObjectId(Long busId, Long clientInstanceId) throws IdNotFoundException; + + /** + * Save or update the clientObjectId according to the given busId and clientInstanceId. + * + * @param busId the global unique busId. + * @param clientInstanceId the global unique client instance id. + * @param clientObjectId the client unique object id. + */ + public void persistClientObjectId(Long busId, Long clientInstanceId, String clientObjectId); + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapper.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperBean.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperBean.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperBean.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,78 @@ +package de.campussource.cse.mapper; + +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityExistsException; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.apache.commons.lang.Validate; + +/** + * Standard IdentityMapper implementation + * @author Ingo Dueppe + */ +@Stateless +public class IdentityMapperBean implements IdentityMapper { + + @PersistenceContext + private EntityManager em; + + @Override + @TransactionAttribute(TransactionAttributeType.REQUIRED) + public void persistClientObjectId(Long busId, Long clientInstanceId, String clientObjectId) { + Validate.notNull(busId, "IdentityMapper.persistClientObjectId: Parameter busId is mandatory."); + Validate.notNull(clientInstanceId, "IdentityMapper.persistClientObjectId: Parameter clientInstanceId is mandatory."); + Validate.notEmpty(clientObjectId, "IdentityMapper.persistClientObjectId: Parameter clientObjectId is mandatory."); + MappedClientObject mapped = new MappedClientObject(busId, clientInstanceId, clientObjectId); + try { + em.persist(mapped); + } catch (EntityExistsException eee) { + em.merge(mapped); + } + System.out.println("MappedClientObject "+mapped.toString()); + } + + @Override + @TransactionAttribute(TransactionAttributeType.REQUIRED) + public Long toBusId(Long clientInstanceId, String clientObjectId) { + Validate.notNull(clientInstanceId, "IdentityMapper.toBusId: Parameter clientInstanceId is mandatory."); + Validate.notNull(clientObjectId, "IdentityMapper.toBusId: Parameter clientObjectId is mandatory."); + try { + Query query = em.createNamedQuery(MappedClientObject.FIND_BUSID); + query.setParameter("clientInstanceId", clientInstanceId); + query.setParameter("clientObjectId", clientObjectId); + return (Long) query.getSingleResult(); + } catch (NoResultException nre) { + return createMapping(clientInstanceId, clientObjectId); + } + } + + private Long createMapping(Long clientInstanceId, String clientObjectId) { + MappedClientObject mapped = new MappedClientObject(); + mapped.setClientInstanceId(clientInstanceId); + mapped.setClientObjectId(clientObjectId); + em.persist(mapped); + return mapped.getBusId(); + } + + @Override + @TransactionAttribute(TransactionAttributeType.REQUIRED) + public String toClientObjectId(Long busId, Long clientInstanceId) throws IdNotFoundException { + Validate.notNull(busId,"IdentityMapper.toClientObjectId: Parameter busId is mandatory."); + Validate.notNull(clientInstanceId,"IdentityMapper.toClientObjectId: Parameter clientInstanceId is mandatory."); + try { + Query query = em.createNamedQuery(MappedClientObject.FIND_OBJECTID); + query.setParameter("clientInstanceId", clientInstanceId); + query.setParameter("busId", busId); + return (String) query.getSingleResult(); + } catch (NoResultException nre) { + throw new IdNotFoundException(nre); + } + + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperBean.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperLocal.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperLocal.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperLocal.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,13 @@ +package de.campussource.cse.mapper; + +import javax.ejb.Local; + +/** + * The local interface of IdentityMapper + * @see de.campussource.cse.mapper.IdentityMapper + * @author Ingo Dueppe + */ +@Local +public interface IdentityMapperLocal extends IdentityMapper { + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/IdentityMapperLocal.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObject.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObject.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObject.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,102 @@ +package de.campussource.cse.mapper; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.persistence.UniqueConstraint; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +@Entity(name="MappedClientObject") +@Table(name = "MAPPED_CLIENT_OBJECT", + uniqueConstraints = @UniqueConstraint(columnNames = { "CLIENT_OBJECT_ID", "CLIENT_INSTANCE_ID" })) +@NamedQueries(value = { + @NamedQuery( + name = "MappedClientObject.findObjectId", + query = "select c.clientObjectId from MappedClientObject c where c.busId=:busId and c.clientInstanceId = :clientInstanceId"), + @NamedQuery( + name = "MappedClientObject.findBusId", + query = "select c.busId from MappedClientObject c where c.clientObjectId=:clientObjectId and c.clientInstanceId = :clientInstanceId") }) +@IdClass(value=MappedClientObjectPK.class) +public class MappedClientObject { + + public static final String FIND_OBJECTID = "MappedClientObject.findObjectId"; + public static final String FIND_BUSID = "MappedClientObject.findBusId"; + + private Long busId; + + private Long clientInstanceId; + + private String clientObjectId; + + public MappedClientObject() { + }; + + public MappedClientObject(Long busId, Long clientInstanceId, String clientObjectId) { + this.busId = busId; + this.clientInstanceId = clientInstanceId; + this.clientObjectId = clientObjectId; + } + + @Id + @Column(name="BUS_ID", nullable = false) + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getBusId() { + return busId; + } + + public void setBusId(Long busId) { + this.busId = busId; + } + + @Id + @Column(name="CLIENT_INSTANCE_ID", nullable=false) + public Long getClientInstanceId() { + return clientInstanceId; + } + + public void setClientInstanceId(Long clientInstanceId) { + this.clientInstanceId = clientInstanceId; + } + + @Column(name="CLIENT_OBJECT_ID", nullable=false) + public String getClientObjectId() { + return clientObjectId; + } + + public void setClientObjectId(String clientObjectId) { + this.clientObjectId = clientObjectId; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof MappedClientObject)) { + return false; + } else { + MappedClientObject other = (MappedClientObject) obj; + return new EqualsBuilder().append(busId, other.busId).append(clientInstanceId, other.clientInstanceId) + .append(clientObjectId, other.clientObjectId).isEquals(); + } + } + + public int hashCode() { + return new HashCodeBuilder().append(busId).append(clientInstanceId).append(clientObjectId).toHashCode(); + } + + public String toString() { + return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(busId).append(clientInstanceId).append( + clientObjectId).toString(); + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObject.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObjectPK.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObjectPK.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObjectPK.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,60 @@ +package de.campussource.cse.mapper; + +import java.io.Serializable; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +/** + * @author Ingo Dueppe + */ +public class MappedClientObjectPK implements Serializable { + + private static final long serialVersionUID = 4835950977456597594L; + + private Long busId; + private Long clientInstanceId; + + public MappedClientObjectPK() {} + + public Long getBusId() { + return busId; + } + + public void setBusId(Long busId) { + this.busId = busId; + } + + public Long getClientInstanceId() { + return clientInstanceId; + } + + public void setClientInstanceId(Long clientInstanceId) { + this.clientInstanceId = clientInstanceId; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof MappedClientObjectPK)) { + return false; + } else { + MappedClientObjectPK other = (MappedClientObjectPK) obj; + return new EqualsBuilder().append(busId, other.busId).append(clientInstanceId, other.clientInstanceId) + .isEquals(); + } + } + + public int hashCode() { + return new HashCodeBuilder().append(busId).append(clientInstanceId).toHashCode(); + } + + public String toString() { + return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(busId).append(clientInstanceId).toString(); + } + + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MappedClientObjectPK.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MapperException.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MapperException.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MapperException.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,26 @@ +package de.campussource.cse.mapper; + +/** + * General mapper exception + * @author Ingo Dueppe + */ +public class MapperException extends Exception { + + private static final long serialVersionUID = -2553188081269164040L; + + public MapperException() { + } + + public MapperException(String message) { + super(message); + } + + public MapperException(Throwable cause) { + super(cause); + } + + public MapperException(String message, Throwable cause) { + super(message, cause); + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/main/java/de/campussource/cse/mapper/MapperException.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/IdentityMapperTest.java =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/IdentityMapperTest.java 2009-03-17 14:28:11 UTC (rev 87) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/IdentityMapperTest.java 2009-03-17 14:29:47 UTC (rev 88) @@ -1,21 +1,93 @@ package de.campussource.cse.mapper; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; -import java.net.MalformedURLException; -import java.net.URL; - import org.junit.Before; import org.junit.Test; -import de.campussource.cse.idmapper.ClientInstance; -import de.campussource.cse.idmapper.IdMapperBean; +import de.campussource.cse.common.test.AbstractPersistentUnitTest; +public class IdentityMapperTest extends AbstractPersistentUnitTest { -public class IdentityMapperTest { + private static final Long UNKNOWN_BUS_ID = -1000L; + private static final Long BUS_ID = 1000L; + private static final Long CLIENT_INSTANCE_ID = 1000L; + private static final String CLIENT_OBJECT_ID = "CSE:SYSTEM:CLIENTID"; + + private IdentityMapper mapper; + + @Before + public void setUp() { + txBegin(); + mapper = new IdentityMapperBean(); + autowireByType(mapper); + } + @Test - public void testPersistClientObjectId() throws MalformedURLException { + public void testBusToClientMapping() throws MapperException { + Long busId = mapper.toBusId(CLIENT_INSTANCE_ID, CLIENT_OBJECT_ID); + String clientId = mapper.toClientObjectId(busId, CLIENT_INSTANCE_ID); + assertEquals(CLIENT_OBJECT_ID, clientId); } - + @Test(expected = IdNotFoundException.class) + public void testBusIdNotFound() throws IdNotFoundException { + mapper.toClientObjectId(CLIENT_INSTANCE_ID, UNKNOWN_BUS_ID); + } + + @Test(expected = IdNotFoundException.class) + public void testClientObjectIdNotFound() throws IdNotFoundException { + Long busId = mapper.toBusId(CLIENT_INSTANCE_ID, CLIENT_OBJECT_ID); + assertNotNull(busId); + mapper.toClientObjectId(busId, CLIENT_INSTANCE_ID + uniqueId()); + } + + @Test + public void testPersistClientObjectId() throws MapperException { + // Persist a new mapping of client object id to a given bus id and verify the results + mapper.persistClientObjectId(BUS_ID, CLIENT_INSTANCE_ID, CLIENT_OBJECT_ID); + commitAndBeginTx(); + assertEquals(BUS_ID, mapper.toBusId(CLIENT_INSTANCE_ID, CLIENT_OBJECT_ID)); + assertEquals(CLIENT_OBJECT_ID, mapper.toClientObjectId(BUS_ID, CLIENT_INSTANCE_ID)); + // Override the existing mapping to a new client object id and verify the results + mapper.persistClientObjectId(BUS_ID, CLIENT_INSTANCE_ID, "NEW:CLIENT:OBJECT:ID"); + assertEquals(BUS_ID, mapper.toBusId(CLIENT_INSTANCE_ID, "NEW:CLIENT:OBJECT:ID")); + assertEquals("NEW:CLIENT:OBJECT:ID", mapper.toClientObjectId(BUS_ID, CLIENT_INSTANCE_ID)); + } + + @Test(expected = IllegalArgumentException.class) + public void testToBusNoClientInstanceParameter() throws IdNotFoundException { + mapper.toBusId(null, CLIENT_OBJECT_ID); + } + + @Test(expected = IllegalArgumentException.class) + public void testToBusNoObjectIdParameter() throws IdNotFoundException { + mapper.toBusId(CLIENT_INSTANCE_ID, null); + } + + @Test(expected = IllegalArgumentException.class) + public void testToClientNoBusIdParameter() throws IdNotFoundException { + mapper.toClientObjectId(null, CLIENT_INSTANCE_ID); + } + + @Test(expected = IllegalArgumentException.class) + public void testToClientNoInstanceIdParameter() throws IdNotFoundException { + mapper.toClientObjectId(BUS_ID, null); + } + + @Test(expected = IllegalArgumentException.class) + public void testPersistNoBusIdParameter() throws IdNotFoundException { + mapper.persistClientObjectId(null, CLIENT_INSTANCE_ID, CLIENT_OBJECT_ID); + } + + @Test(expected = IllegalArgumentException.class) + public void testPersistNoInstanceIdParameter() throws IdNotFoundException { + mapper.persistClientObjectId(BUS_ID, null, CLIENT_OBJECT_ID); + } + + @Test(expected = IllegalArgumentException.class) + public void testPersistNoObjectIdParameter() throws IdNotFoundException { + mapper.persistClientObjectId(BUS_ID, CLIENT_INSTANCE_ID, ""); + } } Copied: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/PersistentUnitConfigurationTest.java (from rev 78, cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/idmapper/PersistentUnitConfigurationTest.java) =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/PersistentUnitConfigurationTest.java (rev 0) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/PersistentUnitConfigurationTest.java 2009-03-17 14:29:47 UTC (rev 88) @@ -0,0 +1,32 @@ +package de.campussource.cse.mapper; + +import static org.junit.Assert.assertNotNull; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.junit.Test; + +public class PersistentUnitConfigurationTest { + + @Test + public void testConfiguration() { + try { + EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cseip"); + EntityManager entityManager = entityManagerFactory.createEntityManager(); + + List<MappedClientObject> mappings = entityManager.createQuery("SELECT m FROM MapperClientObject m").getResultList(); + assertNotNull(mappings); + + entityManager.close(); + entityManagerFactory.close(); + } catch (RuntimeException rt) { + rt.printStackTrace(); + throw rt; + } + } + +} Property changes on: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/java/de/campussource/cse/mapper/PersistentUnitConfigurationTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml =================================================================== --- cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml 2009-03-17 14:28:11 UTC (rev 87) +++ cse-ip/trunk/sandbox/cse-ip/sc-idmapper/src/test/resources/META-INF/persistence.xml 2009-03-17 14:29:47 UTC (rev 88) @@ -4,12 +4,10 @@ version="1.0"> <persistence-unit name="cseip" transaction-type="RESOURCE_LOCAL"> <provider>oracle.toplink.essentials.PersistenceProvider</provider> - <class>de.campussource.cse.idmapper.ClientInstance</class> - <class>de.campussource.cse.idmapper.ClientObject</class> + <class>de.campussource.cse.mapper.MappedClientObject</class> <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables" /> <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver" /> -<!-- <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/cseip?profileSQL=true&createDatabaseIfNotExist=true" />--> <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/cseip?createDatabaseIfNotExist=true" /> <property name="toplink.jdbc.user" value="root" /> <property name="toplink.jdbc.password" value="masterkey" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |