From: <ro...@us...> - 2009-05-13 12:07:38
|
Revision: 210 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=210&view=rev Author: roekens Date: 2009-05-13 12:07:28 +0000 (Wed, 13 May 2009) Log Message: ----------- refactoring and further implementation of cdmm: (still in progress) - fixed some implementation in DMMBean - added new messages: EntityEventMessage and ReferenceEventMessage with supertype Eventmessage to represent event for creating and deleting references of objects - added methods to EventBuilder and EventBuilderBean to add these events - fixed logic in ModelMergerBean - changed several visitors to allow return values (events) to handle changed references, attributes and entities (needs more work...) Modified Paths: -------------- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/DataModelManagerBean.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilder.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilderBean.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/ReferencesVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EventMessage.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/EventBuilderBeanTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java Added Paths: ----------- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Reference.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EntityEventMessage.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/ReferenceEventMessage.java Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/DataModelManagerBean.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/DataModelManagerBean.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/DataModelManagerBean.java 2009-05-13 12:07:28 UTC (rev 210) @@ -57,8 +57,26 @@ @Override public List<EventMessage> delete(InputMessage message) { - throw new NotImplementedException(); - // TODO Auto-generated method stub + if (logger.isDebugEnabled()) { + logger.debug("Received delete message: "+message); + } + + Entity input = message.getEntity(); + Entity loaded = entityDao.find(input.getClass(), input.getId()); + + EventBuilder eventBuilder = new EventBuilderBean(); + eventBuilder.setEventTime(message.getEventTime()); + +// FIXME implement for delete +// if (loaded.isOlder(input.getDate())) { +// ModelMergerBean merger = new ModelMergerBean(); +// merger.setEventBuilder(eventBuilder); +// merger.merge(input); +// +// entityDao.persist(loaded); +// } + + return eventBuilder.build(); } } Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilder.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilder.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilder.java 2009-05-13 12:07:28 UTC (rev 210) @@ -4,7 +4,9 @@ import java.util.List; import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.domain.ReferenceType; import de.campussource.cse.cdmm.messages.EventMessage; +import de.campussource.cse.cdmm.messages.OutputEventType; /** * Builder to create events lists during entity merge analyse. @@ -37,6 +39,22 @@ * @return List of Events. If no events were added the list is empty. */ public List<EventMessage> build(); + + /** + * Add an create/update event for a reference + * @param source entity + * @param target entity + * @param referenceType + */ + public void addSaveReferenceEvent(Entity source, Entity target, ReferenceType referenceType, OutputEventType type); + + /** + * Add an delete event for a reference + * @param source entity + * @param target entity + * @param referenceType + */ + public void addDeleteReferenceEvent(Entity source, Entity target, ReferenceType referenceType, OutputEventType type); /** * Define the Event time Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilderBean.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilderBean.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/EventBuilderBean.java 2009-05-13 12:07:28 UTC (rev 210) @@ -7,8 +7,11 @@ import org.apache.log4j.Logger; import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.domain.ReferenceType; +import de.campussource.cse.cdmm.messages.EntityEventMessage; import de.campussource.cse.cdmm.messages.EventMessage; import de.campussource.cse.cdmm.messages.OutputEventType; +import de.campussource.cse.cdmm.messages.ReferenceEventMessage; /** * Default implementation of an Event Builder @@ -57,7 +60,7 @@ throw new IllegalArgumentException("Parameter source must not be null!"); } - EventMessage event = new EventMessage(); + EntityEventMessage event = new EntityEventMessage(); event.setEventTime(eventTime); event.setEntity(entity); @@ -72,4 +75,62 @@ public void setEventTime(Date eventTime) { this.eventTime = eventTime; } + + @Override + public void addDeleteReferenceEvent(Entity source, Entity target, + ReferenceType referenceType, OutputEventType type) { + assert type != null; + if (eventTime == null) { + throw new IllegalStateException("EventTime must be defined first!"); + } + if (source == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + if (target == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + if (referenceType == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + + ReferenceEventMessage refMessage = new ReferenceEventMessage(); + refMessage.setSource(source); + refMessage.setTarget(target); + refMessage.setReferenceType(referenceType); + refMessage.setEventTime(eventTime); + refMessage.setOutputEvent(type); + + events.add(refMessage); + if (logger.isDebugEnabled()) + logger.debug("Created output event message "+refMessage); + } + + @Override + public void addSaveReferenceEvent(Entity source, Entity target, + ReferenceType referenceType, OutputEventType type) { + assert type != null; + if (eventTime == null) { + throw new IllegalStateException("EventTime must be defined first!"); + } + if (source == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + if (target == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + if (referenceType == null) { + throw new IllegalArgumentException("Parameter source must not be null!"); + } + + ReferenceEventMessage refMessage = new ReferenceEventMessage(); + refMessage.setSource(source); + refMessage.setTarget(target); + refMessage.setReferenceType(referenceType); + refMessage.setEventTime(eventTime); + refMessage.setOutputEvent(type); + + events.add(refMessage); + if (logger.isDebugEnabled()) + logger.debug("Created output event message "+refMessage); + } } Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java 2009-05-13 12:07:28 UTC (rev 210) @@ -1,5 +1,11 @@ package de.campussource.cse.cdmm; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Stateless; @@ -7,10 +13,12 @@ import de.campussource.cse.cdmm.dao.EntityDao; import de.campussource.cse.cdmm.domain.AddReferenceVisitor; import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.domain.Reference; import de.campussource.cse.cdmm.domain.ReferenceType; import de.campussource.cse.cdmm.domain.ReferencesVisitor; import de.campussource.cse.cdmm.domain.State; import de.campussource.cse.cdmm.domain.Visitor; +import de.campussource.cse.cdmm.messages.OutputEventType; /** * Merger @@ -28,23 +36,24 @@ @SuppressWarnings("unchecked") public <E extends Entity> E merge(E input) { - E entity = (E) dao.find(input.getClass(), input.getId()); - mergeEntities(input, entity); - return entity; + E loaded = (E) dao.find(input.getClass(), input.getId()); + mergeEntities(input, loaded); + return loaded; } /* * TODO - * 1. Traverse all references of the input message and select them in a list - * 2. Traverse all references of the entity and check if there in this list - * 3. Remove all not existing references + * 1. Traverse all references of the entity in the input message and collect them in a list + * 2. Traverse all references of the loaded entity and check if they are in this list + * 3. Add all new references and remove all not existing references */ - private <E extends Entity> void mergeEntities(E input, E loaded) { switch (loaded.getState()) { case NOT_EXISTS: eventBuilder.addCreateEvent(loaded); - checkReferences(input, loaded); + for (Reference ref : checkReferences(input, loaded)){ + eventBuilder.addSaveReferenceEvent(ref.getSource(), ref.getTarget(), ref.getReferenceType(), OutputEventType.CREATE); + } // loaded.setId(input.getId()); is already set by the find method loaded.setAttributes(input.getAttributes()); loaded.setDate(input.getDate()); // TODO may be the input message event time is to use. @@ -73,10 +82,11 @@ } } - public <E extends Entity> void checkReferences(final E input, final E loaded) { -// Map<Entity, Entity> foundReferences; - - Visitor visitor = new ReferencesVisitor() { + + + public <E extends Entity> List<Reference> checkReferences(final E input, final E loaded) { + + ReferencesVisitor visitor = new ReferencesVisitor() { @Override public void foundReference(Entity target, Entity source, ReferenceType type) { Entity entity = dao.find(target.getClass(), target.getId()); @@ -84,14 +94,17 @@ entity.setState(State.KNOWN); entity.setDate(input.getDate()); } - // TODO Is it possible that the reference allready exists? - loaded.accept(new AddReferenceVisitor(entity, target, type)); + // TODO Is it possible that the reference already exists? + AddReferenceVisitor addReferenceVisitor = new AddReferenceVisitor(entity, target, type); + loaded.accept(addReferenceVisitor); // add to reference found list - + this.setSavedReferences(addReferenceVisitor.getSavedReferences()); } }; input.accept(visitor); + return visitor.getSavedReferences(); +// // Visitor deleteReferences = new ReferencesVisitor() { // // public void foundReference(Entity target, Entity source, ReferenceType type) { @@ -102,6 +115,7 @@ // }; // // loaded.accept(visitor); + } public void setEntityDao(EntityDao dao) { Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java 2009-05-13 12:07:28 UTC (rev 210) @@ -1,5 +1,8 @@ package de.campussource.cse.cdmm.domain; +import java.util.ArrayList; +import java.util.List; + /** * Visitor to add Reference to an entity object. * @@ -7,7 +10,9 @@ * @author Sebastian Roekens */ public class AddReferenceVisitor implements Visitor { - + + private List<Reference> savedReferences = new ArrayList<Reference>(); + private ReferenceType type; /** @@ -38,12 +43,14 @@ switch (type) { case GROUP: account.addToGroup((Group) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case ROLE: ((Role)persistentTarget).setAccount(((Role)associatedTarget).getAccount()); ((Role)persistentTarget).setCourse(((Role)associatedTarget).getCourse()); ((Role)persistentTarget).setType(((Role)associatedTarget).getType()); account.addRole((Role) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; default: throw new IllegalStateException("Reference type doesn't apply to entity."); @@ -55,12 +62,15 @@ switch (type) { case PARENT: category.addToParentCategory((Category) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case COURSE: ((Course)persistentTarget).addToCategory(category); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case CHILD: ((Category) persistentTarget).addToParentCategory(category); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; default: throw new IllegalStateException("Reference type doesn't apply to entity."); @@ -72,18 +82,22 @@ switch (type) { case CATEGORY: course.addToCategory((Category) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case WORKGROUP: ((Course) persistentTarget).addAsWorkgroupTo(course); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case PARENT: course.setParent((Course) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case ROLE: ((Role)persistentTarget).setAccount(((Role)associatedTarget).getAccount()); ((Role)persistentTarget).setCourse(((Role)associatedTarget).getCourse()); ((Role)persistentTarget).setType(((Role)associatedTarget).getType()); course.addRole((Role) persistentTarget); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; default: throw new IllegalStateException("Reference type doesn't apply to entity."); @@ -95,6 +109,7 @@ switch (type){ case MEMBER: ((Account)persistentTarget).addToGroup(group); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; default: throw new IllegalStateException("Reference type doesn't apply to entity."); @@ -106,13 +121,23 @@ switch (type){ case ACCOUNT: ((Account)persistentTarget).addRole(role); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; case COURSE: ((Course)persistentTarget).addRole(role); + savedReferences.add(new Reference(persistentTarget, associatedTarget, type)); break; default: throw new IllegalStateException("Reference type doesn't apply to entity."); } } + public List<Reference> getSavedReferences() { + return savedReferences; + } + + public void setSavedReferences(List<Reference> savedReferences) { + this.savedReferences = savedReferences; + } + } Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Reference.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Reference.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Reference.java 2009-05-13 12:07:28 UTC (rev 210) @@ -0,0 +1,80 @@ +package de.campussource.cse.cdmm.domain; + +public class Reference { + + private Entity source; + + private Entity target; + + private ReferenceType referenceType; + + public Reference(Entity source, Entity target, ReferenceType referenceType){ + this.source = source; + this.target = target; + this.referenceType = referenceType; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((referenceType == null) ? 0 : referenceType.hashCode()); + result = prime * result + ((source == null) ? 0 : source.hashCode()); + result = prime * result + ((target == null) ? 0 : target.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Reference other = (Reference) obj; + if (referenceType == null) { + if (other.referenceType != null) + return false; + } else if (!referenceType.equals(other.referenceType)) + return false; + if (source == null) { + if (other.source != null) + return false; + } else if (!source.equals(other.source)) + return false; + if (target == null) { + if (other.target != null) + return false; + } else if (!target.equals(other.target)) + return false; + return true; + } + + public Entity getSource() { + return source; + } + + public void setSource(Entity source) { + this.source = source; + } + + public Entity getTarget() { + return target; + } + + public void setTarget(Entity target) { + this.target = target; + } + + public ReferenceType getReferenceType() { + return referenceType; + } + + public void setReferenceType(ReferenceType referenceType) { + this.referenceType = referenceType; + } + + +} \ No newline at end of file Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/ReferencesVisitor.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/ReferencesVisitor.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/ReferencesVisitor.java 2009-05-13 12:07:28 UTC (rev 210) @@ -1,6 +1,9 @@ package de.campussource.cse.cdmm.domain; +import java.util.ArrayList; +import java.util.List; + /** * Traverse References of the Entity an calls perform method with reference * target and source entity. @@ -10,6 +13,9 @@ */ public abstract class ReferencesVisitor implements Visitor { + private List<Reference> savedReferences = new ArrayList<Reference>(); + + /** * Is call for each endpoint of outgoing references of an entity * @param target entity of the reference @@ -75,5 +81,15 @@ foundReference(role.getAccount(), role, ReferenceType.ACCOUNT); } } + + + public List<Reference> getSavedReferences() { + return savedReferences; + } + + + public void setSavedReferences(List<Reference> savedReferences) { + this.savedReferences = savedReferences; + } } Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EntityEventMessage.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EntityEventMessage.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EntityEventMessage.java 2009-05-13 12:07:28 UTC (rev 210) @@ -0,0 +1,89 @@ +package de.campussource.cse.cdmm.messages; + +import java.util.Date; + +import javax.xml.bind.annotation.XmlElement; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +import de.campussource.cse.cdmm.domain.Constants; +import de.campussource.cse.cdmm.domain.Entity; + +public class EntityEventMessage extends EventMessage { + private Entity entity; + + private Date eventTime; + + private OutputEventType outputEvent; + + @XmlElement(name=Constants.ENTITY) + public Entity getEntity() { + return entity; + } + + public void setEntity(Entity entity) { + this.entity = entity; + } + + @XmlElement(name=Constants.OUTPUT_EVENT) + public OutputEventType getOutputEvent() { + return outputEvent; + } + + public void setOutputEvent(OutputEventType outputEvent) { + this.outputEvent = outputEvent; + } + + @XmlElement(name=Constants.EVENT_TIME) + public Date getEventTime() { + return eventTime; + } + + public void setEventTime(Date eventTime) { + this.eventTime = eventTime; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((entity == null) ? 0 : entity.hashCode()); + result = prime * result + ((eventTime == null) ? 0 : eventTime.hashCode()); + result = prime * result + ((outputEvent == null) ? 0 : outputEvent.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + EntityEventMessage other = (EntityEventMessage) obj; + if (entity == null) { + if (other.entity != null) + return false; + } else if (!entity.equals(other.entity)) + return false; + if (eventTime == null) { + if (other.eventTime != null) + return false; + } else if (!eventTime.equals(other.eventTime)) + return false; + if (outputEvent == null) { + if (other.outputEvent != null) + return false; + } else if (!outputEvent.equals(other.outputEvent)) + return false; + return true; + } + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append(outputEvent).append(eventTime).append(entity).toString(); + } +} Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EventMessage.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EventMessage.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/EventMessage.java 2009-05-13 12:07:28 UTC (rev 210) @@ -1,16 +1,9 @@ package de.campussource.cse.cdmm.messages; -import java.util.Date; - -import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; -import org.apache.commons.lang.builder.ToStringBuilder; -import org.apache.commons.lang.builder.ToStringStyle; - import de.campussource.cse.cdmm.domain.Constants; -import de.campussource.cse.cdmm.domain.Entity; /** * Event message object @@ -21,80 +14,4 @@ @XmlType(name=Constants.EVENT_MESSAGE_TYPE, propOrder={}) public class EventMessage{ - private Entity entity; - - private Date eventTime; - - private OutputEventType outputEvent; - - @XmlElement(name=Constants.ENTITY) - public Entity getEntity() { - return entity; - } - - public void setEntity(Entity entity) { - this.entity = entity; - } - - @XmlElement(name=Constants.OUTPUT_EVENT) - public OutputEventType getOutputEvent() { - return outputEvent; - } - - public void setOutputEvent(OutputEventType outputEvent) { - this.outputEvent = outputEvent; - } - - @XmlElement(name=Constants.EVENT_TIME) - public Date getEventTime() { - return eventTime; - } - - public void setEventTime(Date eventTime) { - this.eventTime = eventTime; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((entity == null) ? 0 : entity.hashCode()); - result = prime * result + ((eventTime == null) ? 0 : eventTime.hashCode()); - result = prime * result + ((outputEvent == null) ? 0 : outputEvent.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - EventMessage other = (EventMessage) obj; - if (entity == null) { - if (other.entity != null) - return false; - } else if (!entity.equals(other.entity)) - return false; - if (eventTime == null) { - if (other.eventTime != null) - return false; - } else if (!eventTime.equals(other.eventTime)) - return false; - if (outputEvent == null) { - if (other.outputEvent != null) - return false; - } else if (!outputEvent.equals(other.outputEvent)) - return false; - return true; - } - - - @Override - public String toString() { - return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append(outputEvent).append(eventTime).append(entity).toString(); - } - } Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/ReferenceEventMessage.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/ReferenceEventMessage.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/messages/ReferenceEventMessage.java 2009-05-13 12:07:28 UTC (rev 210) @@ -0,0 +1,120 @@ +package de.campussource.cse.cdmm.messages; + +import java.util.Date; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.domain.ReferenceType; + +public class ReferenceEventMessage extends EventMessage { + + private Entity source; + + public Entity getSource() { + return source; + } + + public void setSource(Entity source) { + this.source = source; + } + + public Entity getTarget() { + return target; + } + + public void setTarget(Entity target) { + this.target = target; + } + + public ReferenceType getReferenceType() { + return referenceType; + } + + public void setReferenceType(ReferenceType referenceType) { + this.referenceType = referenceType; + } + + public Date getEventTime() { + return eventTime; + } + + public void setEventTime(Date eventTime) { + this.eventTime = eventTime; + } + + public OutputEventType getOutputEvent() { + return outputEvent; + } + + public void setOutputEvent(OutputEventType outputEvent) { + this.outputEvent = outputEvent; + } + + private Entity target; + + private ReferenceType referenceType; + + private Date eventTime; + + private OutputEventType outputEvent; + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((eventTime == null) ? 0 : eventTime.hashCode()); + result = prime * result + + ((outputEvent == null) ? 0 : outputEvent.hashCode()); + result = prime * result + + ((referenceType == null) ? 0 : referenceType.hashCode()); + result = prime * result + ((source == null) ? 0 : source.hashCode()); + result = prime * result + ((target == null) ? 0 : target.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ReferenceEventMessage other = (ReferenceEventMessage) obj; + if (eventTime == null) { + if (other.eventTime != null) + return false; + } else if (!eventTime.equals(other.eventTime)) + return false; + if (outputEvent == null) { + if (other.outputEvent != null) + return false; + } else if (!outputEvent.equals(other.outputEvent)) + return false; + if (referenceType == null) { + if (other.referenceType != null) + return false; + } else if (!referenceType.equals(other.referenceType)) + return false; + if (source == null) { + if (other.source != null) + return false; + } else if (!source.equals(other.source)) + return false; + if (target == null) { + if (other.target != null) + return false; + } else if (!target.equals(other.target)) + return false; + return true; + } + + @Override + public String toString(){ + return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append(outputEvent).append(eventTime).append(source).append(target).append(referenceType).toString(); + } + +} Modified: trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/EventBuilderBeanTest.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/EventBuilderBeanTest.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/EventBuilderBeanTest.java 2009-05-13 12:07:28 UTC (rev 210) @@ -12,6 +12,7 @@ import de.campussource.cse.cdmm.domain.Category; import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.messages.EntityEventMessage; import de.campussource.cse.cdmm.messages.EventMessage; import de.campussource.cse.cdmm.messages.OutputEventType; @@ -63,8 +64,8 @@ assertFalse(events.isEmpty()); assertEquals(3, events.size()); - assertEquals(OutputEventType.CREATE, events.get(0).getOutputEvent()); - assertEquals(OutputEventType.UPDATE, events.get(1).getOutputEvent()); - assertEquals(OutputEventType.DELETE, events.get(2).getOutputEvent()); + assertEquals(OutputEventType.CREATE, ((EntityEventMessage)events.get(0)).getOutputEvent()); + assertEquals(OutputEventType.UPDATE, ((EntityEventMessage)events.get(1)).getOutputEvent()); + assertEquals(OutputEventType.DELETE, ((EntityEventMessage)events.get(2)).getOutputEvent()); } } Modified: trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java 2009-05-04 14:50:46 UTC (rev 209) +++ trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/ModelMergerTest.java 2009-05-13 12:07:28 UTC (rev 210) @@ -14,9 +14,11 @@ import de.campussource.cse.cdmm.domain.Category; import de.campussource.cse.cdmm.domain.Course; import de.campussource.cse.cdmm.domain.Entity; +import de.campussource.cse.cdmm.domain.ReferenceType; import de.campussource.cse.cdmm.domain.Role; import de.campussource.cse.cdmm.domain.State; import de.campussource.cse.cdmm.messages.EventMessage; +import de.campussource.cse.cdmm.messages.OutputEventType; public class ModelMergerTest { @@ -185,6 +187,8 @@ public void addCreateEvent(Entity source) { } public void addDeleteEvent(Entity source) { } public void addUpdateEvent(Entity source) { } + public void addSaveReferenceEvent(Entity source, Entity target, ReferenceType referenceType, OutputEventType type) { } + public void addDeleteReferenceEvent(Entity source, Entity target, ReferenceType referenceType, OutputEventType type) { } public List<EventMessage> build() { return null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |