From: <ro...@us...> - 2009-05-20 14:14:27
|
Revision: 216 http://cse-ip.svn.sourceforge.net/cse-ip/?rev=216&view=rev Author: roekens Date: 2009-05-20 13:52:31 +0000 (Wed, 20 May 2009) Log Message: ----------- massive changes - introduced decorators (see gof decorator pattern) for domain objects -> with these decorators the annotations for jaxb and jpa are separated this forced several changes in all parts of cdmm - fixed all equals, hashCode and toString methods - fixed several tests (more to come, some xml and jpa tests are ignored atm) - introduced new package structure and refactored cdmm - etc... more to come bugfixing in progress Modified Paths: -------------- 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/Account.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Attribute.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Course.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Entity.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Group.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Role.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/ModelManagerTest.java 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/TestXmlConversion.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/dao/EntityDaoTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/AddReferenceVisitorTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/DeleteReferenceVisitorTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/DomainTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/domain/ReferencesVisitorTest.java trunk/cse-ip/sc-cdmm/src/test/java/de/campussource/cse/cdmm/webservice/DataModelManagerWebServiceTest.java trunk/cse-ip/sc-cdmm/src/test/resources/META-INF/persistence.xml Added Paths: ----------- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DomainFactory.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/AttributeAdapter.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/IdAdapter.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AccountJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AttributeJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CategoryJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CourseJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/GroupJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/RoleJAXBDecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/AccountJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/AttributeJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/CategoryJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/CourseJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/GroupJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jpa/RoleJPADecorator.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/visitors/ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/visitors/AddReferenceVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/visitors/DeleteReferenceVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/visitors/ReferencesVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/visitors/Visitor.java Removed Paths: ------------- 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/AttributeAdapter.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DeleteReferenceVisitor.java trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/IdAdapter.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/domain/Visitor.java 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-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/ModelMergerBean.java 2009-05-20 13:52:31 UTC (rev 216) @@ -7,11 +7,11 @@ import javax.ejb.Stateless; import de.campussource.cse.cdmm.dao.EntityDao; -import de.campussource.cse.cdmm.domain.AddReferenceVisitor; +import de.campussource.cse.cdmm.domain.visitors.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.visitors.ReferencesVisitor; import de.campussource.cse.cdmm.domain.State; import de.campussource.cse.cdmm.messages.OutputEventType; Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Account.java 2009-05-20 13:52:31 UTC (rev 216) @@ -3,45 +3,22 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlIDREF; -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.visitors.Visitor; + /** * Account entity object * @author Sebastian Roekens * */ -@Entity(name=Constants.ACCOUNT) -@Table(name = Constants.TABLENAME_ACCOUNT) -@Inheritance(strategy=InheritanceType.JOINED) -@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(name=Constants.ACCOUNT_TYPE, propOrder={Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES) + public class Account extends de.campussource.cse.cdmm.domain.Entity{ - @OneToMany(mappedBy=Constants.ACCOUNT, cascade=CascadeType.REMOVE) private List<Role> roles = new ArrayList<Role>(); - @ManyToMany - @JoinTable( - name = Constants.TABLENAME_GROUP2ACCOUNT, - joinColumns={@JoinColumn(name=Constants.COLUMNNAME_ACCOUNT_ID)}, - inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_GROUP_ID)}) private List<Group> groups = new ArrayList<Group>(); public Account(){ @@ -51,8 +28,6 @@ setId(id); } - @XmlElementWrapper(name=Constants.ROLES) - @XmlElement(name=Constants.ROLE) public List<Role> getRoles() { return roles; } @@ -140,9 +115,6 @@ return true; } - @XmlElementWrapper(name=Constants.GROUPS) - @XmlElement(name=Constants.GROUP) - @XmlIDREF public List<Group> getGroups() { return groups; } @@ -155,22 +127,22 @@ visitor.visit(this); } - @Override + @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Account)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Account)other).getId()); - } + if (this == other) return true; + if (!(other instanceof Account)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Account)other).getId() ); } - + + @Override + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); + } + public String toString() { return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(this.getId()).toString(); } Deleted: 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-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AddReferenceVisitor.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,143 +0,0 @@ -package de.campussource.cse.cdmm.domain; - -import java.util.ArrayList; -import java.util.List; - -/** - * Visitor to add Reference to an entity object. - * - * @author Ingo Dueppe - * @author Sebastian Roekens - */ -public class AddReferenceVisitor implements Visitor { - - private List<Reference> savedReferences = new ArrayList<Reference>(); - - private ReferenceType type; - - /** - * represents associated target entity in persistence - */ - private Entity persistentTarget; - - /** - * represents associated target entity in given object structure - */ - private Entity associatedTarget; - - /** - * - * @param target - * entity object to be add as reference - * @param type - * of reference that will be added - */ - public AddReferenceVisitor(Entity persistentTarget, Entity associatedTarget, ReferenceType type) { - this.type = type; - this.persistentTarget = persistentTarget; - this.associatedTarget = associatedTarget; - } - - @Override - public void visit(Account account) { - 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."); - } - } - - @Override - public void visit(Category category) { - 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."); - } - } - - @Override - public void visit(Course course) { - 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."); - } - } - - @Override - public void visit(Group group) { - 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."); - } - } - - @Override - public void visit(Role role) { - 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; - } - -} Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Attribute.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Attribute.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Attribute.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,29 +1,17 @@ package de.campussource.cse.cdmm.domain; -import javax.persistence.Transient; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; - /** * Attribute entity object * @author Sebastian Roekens * */ -@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(name=Constants.ATTRIBUTE_TYPE, namespace=Constants.NAMESPACE_DATATYPES) -@XmlJavaTypeAdapter(value=AttributeAdapter.class) public class Attribute { - @Transient private String name; - @Transient private String value; @@ -32,7 +20,6 @@ public Attribute(){ } - @XmlElement(name=Constants.PROPERTY_TRANSIENT) public boolean isTransient() { return trans; } @@ -41,7 +28,6 @@ this.trans = trans; } - @XmlElement(name=Constants.PROPERTY_NAME) public String getName() { return name; } @@ -50,7 +36,6 @@ this.name = name; } - @XmlElement(name=Constants.PROPERTY_VALUE) public String getValue() { return value; } Deleted: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AttributeAdapter.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AttributeAdapter.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AttributeAdapter.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,27 +0,0 @@ -package de.campussource.cse.cdmm.domain; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - - -/** - * Attribute Adapter to map transient and persistent attributes - * @author Sebastian Roekens - * - */ -public class AttributeAdapter extends XmlAdapter<Attribute, Attribute>{ - - @Override - public Attribute unmarshal(Attribute v) throws Exception { - if (v.isTransient()){ - return new TransientAttribute(v.getName(), v.getValue()); - } - return new PersistentAttribute(v.getName(), v.getValue()); - } - - @Override - public Attribute marshal(Attribute v) throws Exception { - return v; - } - - -} Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Category.java 2009-05-20 13:52:31 UTC (rev 216) @@ -3,21 +3,7 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlIDREF; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.XmlType; +import de.campussource.cse.cdmm.domain.visitors.Visitor; /** @@ -26,22 +12,12 @@ * @author Sebastian Roekens * */ -@Entity(name = Constants.CATEGORY) -@Inheritance(strategy = InheritanceType.JOINED) -@Table(name = Constants.TABLENAME_CATEGORY) -@XmlRootElement(namespace = Constants.NAMESPACE_DATATYPES) -@XmlType(name = Constants.CATEGORY_TYPE, propOrder = { Constants.PROPERTY_PARENT, Constants.PROPERTY_CHILDREN, - Constants.PROPERTY_COURSES }, namespace = Constants.NAMESPACE_DATATYPES) public class Category extends de.campussource.cse.cdmm.domain.Entity { - @ManyToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH }) - @JoinTable(name = Constants.COLUMNNAME_CATEGORY2CATEGORY) private Category parent; - @OneToMany(mappedBy = Constants.PARENT, cascade = { CascadeType.REMOVE }) private List<Category> children = new ArrayList<Category>(); - @ManyToMany(mappedBy = Constants.CATEGORIES) private List<Course> courses = new ArrayList<Course>(); public Category() { @@ -84,7 +60,10 @@ if (checkForCircularDependencies(category)) { return false; } - return this.children.add(category); + List<Category> children = getChildren(); + children.add(category); + setChildren(children); + return true; } /** @@ -99,7 +78,7 @@ public boolean addToParentCategory(Category parent) { boolean result = parent.addChild(this); if (result){ - this.parent = parent; + setParent(parent); } return result; } @@ -122,8 +101,6 @@ //FIXME self destruction of branch needed? :-) } - @XmlElementWrapper(name = Constants.CATEGORIES) - @XmlElement(name = Constants.CATEGORY) public List<Category> getChildren() { return children; } @@ -132,9 +109,6 @@ this.children = children; } - @XmlElementWrapper(name = Constants.COURSES) - @XmlElement(name = Constants.COURSE) - @XmlIDREF public List<Course> getCourses() { return courses; } @@ -143,8 +117,6 @@ this.courses = courses; } - @XmlElement(name = Constants.PARENT) - @XmlIDREF public Category getParent() { return parent; } @@ -158,7 +130,6 @@ * * @return true if category is root category, else returning false */ - @XmlTransient public boolean isRoot() { return (parent == null); } @@ -167,20 +138,20 @@ visitor.visit(this); } - @Override + @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Category)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Category)other).getId()); - } + if (this == other) return true; + if (!(other instanceof Category)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Category)other).getId() ); } + @Override + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); + } + } Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Course.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Course.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Course.java 2009-05-20 13:52:31 UTC (rev 216) @@ -3,53 +3,25 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlIDREF; -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.visitors.Visitor; + /** * Course entity object * @author Sebastian Roekens * */ -@Entity(name=Constants.COURSE) -@Table(name = Constants.TABLENAME_COURSE) -@Inheritance(strategy=InheritanceType.JOINED) -@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(name=Constants.COURSE_TYPE, propOrder={ Constants.CATEGORIES, Constants.PARENT, Constants.WORKGROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES) public class Course extends de.campussource.cse.cdmm.domain.Entity{ - @ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) - @JoinTable(name=Constants.COLUMNNAME_PARENT_ID) private Course parent; - @OneToMany(mappedBy=Constants.PARENT, cascade=CascadeType.REMOVE) private List<Course> workgroups = new ArrayList<Course>(); - @ManyToMany(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) - @JoinTable( - name = Constants.TABLENAME_COURSE2CATEGORY, - joinColumns={@JoinColumn(name=Constants.COLUMNNAME_CATEGORY_ID)}, - inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_COURSE_ID)}) private List<Category> categories = new ArrayList<Category>(2); - @OneToMany(mappedBy=Constants.COURSE, cascade = {CascadeType.REMOVE}) private List<Role> roles = new ArrayList<Role>(); public Course(){ @@ -172,8 +144,6 @@ return true; } - @XmlElement(name=Constants.PARENT) - @XmlIDREF public Course getParent() { return parent; } @@ -182,8 +152,6 @@ this.parent = parent; } - @XmlElementWrapper(name=Constants.WORKGROUPS) - @XmlElement(name=Constants.WORKGROUP) public List<Course> getWorkgroups() { return workgroups; } @@ -192,9 +160,6 @@ this.workgroups = workgroups; } - @XmlElementWrapper(name=Constants.CATEGORIES) - @XmlElement(name=Constants.CATEGORY) - @XmlIDREF public List<Category> getCategories() { return categories; } @@ -203,8 +168,6 @@ this.categories = categories; } - @XmlElementWrapper(name=Constants.ROLES) - @XmlElement(name=Constants.ROLE) public List<Role> getRoles() { return roles; } @@ -221,19 +184,19 @@ return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).toString(); } - @Override + @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Course)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Course)other).getId()); - } + if (this == other) return true; + if (!(other instanceof Course)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Course)other).getId() ); } + + @Override + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); + } } Deleted: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DeleteReferenceVisitor.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DeleteReferenceVisitor.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DeleteReferenceVisitor.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,115 +0,0 @@ -package de.campussource.cse.cdmm.domain; - - -/** - * Visitor to remove Reference to an entity object. - * - * @author Sebastian Roekens - * - */ -public class DeleteReferenceVisitor implements Visitor { - - private ReferenceType type; - - /** - * represents associated target entity in persistence - */ - private Entity persistentTarget; - - /** - * represents associated target entity in given object structure - */ - //FIXME check if needed -// private Entity associatedTarget; - - /** - * - * @param target - * entity object to be add as reference - * @param type - * of reference that will be added - */ - public DeleteReferenceVisitor(Entity persistentTarget, Entity associatedTarget, ReferenceType type) { - this.type = type; - this.persistentTarget = persistentTarget; - //FIXME check if needed -// this.associatedTarget = associatedTarget; - } - - @Override - public void visit(Account account) { - switch (type) { - case GROUP: - account.removeFromGroup((Group) persistentTarget); - break; - case ROLE: - account.removeRole((Role)persistentTarget); - break; - default: - throw new IllegalStateException("Reference type doesn't apply to entity."); - } - } - - @Override - public void visit(Category category) { - switch (type) { - case CHILD: - ((Category)persistentTarget).removeFromParentCategory(category); - break; - case COURSE: - ((Course)persistentTarget).removeFromCategory(category); - break; - case PARENT: - category.removeFromParentCategory((Category)persistentTarget); - break; - default: - throw new IllegalStateException("Reference type doesn't apply to entity."); - } - } - - @Override - public void visit(Course course) { - switch (type) { - case CATEGORY: - course.removeFromCategory((Category) persistentTarget); - break; - case WORKGROUP: - ((Course)persistentTarget).removeAsWorkgroupFrom(course); - break; - case PARENT: - course.removeAsWorkgroupFrom((Course)persistentTarget); - break; - case ROLE: - course.removeRole((Role)persistentTarget); - break; - default: - throw new IllegalStateException("Reference type doesn't apply to entity."); - } - } - - @Override - public void visit(Group group) { - switch (type){ - case MEMBER: - ((Account)persistentTarget).removeFromGroup(group); - break; - default: - throw new IllegalStateException("Reference type doesn't apply to entity."); - } - } - - @Override - public void visit(Role role) { - switch(type){ - case COURSE: - ((Course)persistentTarget).removeRole(role); - break; - case ACCOUNT: - ((Account)persistentTarget).removeRole(role); - break; - default: - throw new IllegalStateException("Reference type doesn't apply to entity."); - } - } - -} Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DomainFactory.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DomainFactory.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/DomainFactory.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,78 @@ +package de.campussource.cse.cdmm.domain; + +import de.campussource.cse.cdmm.domain.decorators.jpa.AccountJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jpa.AttributeJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jpa.CategoryJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jpa.CourseJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jpa.GroupJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jpa.RoleJPADecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.AccountJAXBDecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.AttributeJAXBDecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.CategoryJAXBDecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.CourseJAXBDecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.GroupJAXBDecorator; +import de.campussource.cse.cdmm.domain.decorators.jaxb.RoleJAXBDecorator; + +public class DomainFactory { + + // Account + + public static Account account(){ + return new AccountJPADecorator(new AccountJAXBDecorator(new Account())); + } + + public static Account account(long id){ + return new AccountJPADecorator(new AccountJAXBDecorator(new Account(id))); + } + + // Attribute + + public static Attribute attribute(){ + return new AttributeJPADecorator(new AttributeJAXBDecorator(new Attribute())); + } + + // Category + + public static Category category(){ + return new CategoryJPADecorator(new CategoryJAXBDecorator(new Category())); + } + + public static Category category(long id){ + return new CategoryJPADecorator(new CategoryJAXBDecorator(new Category(id))); + } + + // Course + + public static Course course(){ + return new CourseJPADecorator(new CourseJAXBDecorator(new Course())); + } + + public static Course course(long id){ + return new CourseJPADecorator(new CourseJAXBDecorator(new Course(id))); + } + + // Group + + public static Group group(){ + return new GroupJPADecorator(new GroupJAXBDecorator(new Group())); + } + + public static Group group(long id){ + return new GroupJPADecorator(new GroupJAXBDecorator(new Group(id))); + } + + // Role + + public static Role role(long id){ + return new RoleJPADecorator(new RoleJAXBDecorator(new Role(id))); + } + + public static Role role(Long id, RoleType type) { + return new RoleJPADecorator(new RoleJAXBDecorator(new Role(id, type))); + } + + public static Role role(){ + return new RoleJPADecorator(new RoleJAXBDecorator(new Role())); + } + +} Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Entity.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Entity.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Entity.java 2009-05-20 13:52:31 UTC (rev 216) @@ -15,17 +15,12 @@ import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.persistence.Version; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlID; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; +import de.campussource.cse.cdmm.domain.visitors.Visitor; + /** * Entity object - super class of other entity types * @@ -36,8 +31,6 @@ @javax.persistence.Entity(name = Constants.ENTITY) @Table(name = Constants.TABLENAME_ENTITY) @Inheritance(strategy = InheritanceType.JOINED) -@XmlRootElement(namespace = Constants.NAMESPACE_DATATYPES) -@XmlType(name = Constants.ENTITY_TYPE, propOrder = { "id", Constants.PROPERTY_STATE, Constants.PROPERTY_ATTRIBUTES }, namespace = Constants.NAMESPACE_DATATYPES) public abstract class Entity { @Id @@ -69,7 +62,6 @@ return state; } - @XmlElement(name = Constants.PROPERTY_STATE) public void setState(State state) { this.state = state; } @@ -78,15 +70,10 @@ this.id = id; } - @XmlID - @XmlJavaTypeAdapter(value = IdAdapter.class) - @XmlElement(name = Constants.ID) public Long getId() { return id; } - @XmlElementWrapper(name = Constants.ATTRIBUTES) - @XmlElement(name = Constants.ATTRIBUTE) public List<Attribute> getAttributes() { return attributes; } @@ -111,7 +98,6 @@ return date; } - @XmlTransient public void setDate(Date date) { this.date = date; } @@ -121,30 +107,20 @@ return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(id).toString(); } - @Override - public int hashCode() { - if (this.getId() == null) { - return super.hashCode(); - } - else { - return this.getId().hashCode(); - } + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof Entity)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Entity)other).getId() ); } @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Entity)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Entity)other).getId()); - } + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); } public boolean isOlder(Date when) { Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Group.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Group.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Group.java 2009-05-20 13:52:31 UTC (rev 216) @@ -3,60 +3,45 @@ import java.util.ArrayList; import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.ManyToMany; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlIDREF; -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.visitors.Visitor; + /** * Group entity object * @author Sebastian Roekens * */ -@Entity(name=Constants.GROUP) -@Table(name = Constants.TABLENAME_GROUP) -@Inheritance(strategy=InheritanceType.JOINED) -@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) -@XmlType(name=Constants.GROUP_TYPE, propOrder={Constants.MEMBERS}, namespace=Constants.NAMESPACE_DATATYPES) public class Group extends Account{ - @ManyToMany(mappedBy=Constants.GROUPS, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) + private List<Account> members = new ArrayList<Account>(); - public Group(){ + public Group(){ } - public Group(Long id){ + public Group(Long id){ setId(id); } - @Override + @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Group)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Group)other).getId()); - } + if (this == other) return true; + if (!(other instanceof Group)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Group)other).getId() ); } + @Override + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(this.getId()).toString(); @@ -66,9 +51,6 @@ this.members = members; } - @XmlElementWrapper(name=Constants.MEMBERS) - @XmlElement(name=Constants.MEMBER) - @XmlIDREF public List<Account> getMembers() { return members; } Deleted: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/IdAdapter.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/IdAdapter.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/IdAdapter.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,24 +0,0 @@ -package de.campussource.cse.cdmm.domain; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -/** - * Adapter class to convert ids from String to Long and back - * @author Sebastian Roekens - * - */ -public class IdAdapter extends XmlAdapter<String, Long>{ - - - @Override - public Long unmarshal(String v) throws Exception { - return Long.parseLong(v); - } - - @Override - public String marshal(Long v) throws Exception { - return String.valueOf(v); - } - - -} Deleted: 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-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/ReferencesVisitor.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,95 +0,0 @@ -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. - * - * @author Ingo Dueppe - * - */ -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 - * @param source entity of the reference - */ - public abstract void foundReference(Entity target, Entity source, ReferenceType type); - - - @Override - public void visit(Account account) { - for (Role role : account.getRoles()) { - foundReference(role, account, ReferenceType.ROLE); - } - for (Group group : account.getGroups()) { - foundReference(group, account, ReferenceType.GROUP); - } - } - - @Override - public void visit(Category category) { - for (Category child : category.getChildren()) { - foundReference(child, category, ReferenceType.CHILD); - } - for (Course course : category.getCourses()) { - foundReference(course, category, ReferenceType.COURSE); - } - if (category.getParent() != null) - foundReference(category.getParent(), category, ReferenceType.PARENT); - } - - @Override - public void visit(Course course) { - for (Category category : course.getCategories()) { - foundReference(category, course, ReferenceType.CATEGORY); - } - for (Course workgroup : course.getWorkgroups()) { - foundReference(workgroup, course, ReferenceType.WORKGROUP); - } - if (course.getParent() != null) { - foundReference(course.getParent(), course, ReferenceType.PARENT); - } - for (Role role : course.getRoles()) { - foundReference(role, course, ReferenceType.ROLE); - } - } - - @Override - public void visit(Group group) { - for (Role role : group.getRoles()) { - foundReference(role, group, ReferenceType.ROLE); - } - for (Account account : group.getMembers()) { - foundReference(account, group, ReferenceType.MEMBER); - } - } - - @Override - public void visit(Role role) { - if (role.getCourse() != null) { - foundReference(role.getCourse(), role, ReferenceType.COURSE); - } - if (role.getAccount() != null) { - foundReference(role.getAccount(), role, ReferenceType.ACCOUNT); - } - } - - - public List<Reference> getSavedReferences() { - return savedReferences; - } - - - public void setSavedReferences(List<Reference> savedReferences) { - this.savedReferences = savedReferences; - } - -} Modified: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Role.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Role.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Role.java 2009-05-20 13:52:31 UTC (rev 216) @@ -2,22 +2,7 @@ import java.util.List; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlIDREF; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; +import de.campussource.cse.cdmm.domain.visitors.Visitor; /** @@ -26,31 +11,28 @@ * @author Sebastian Roekens * */ -@Entity(name = Constants.ROLE) -@Table(name = Constants.TABLENAME_ROLE) -@Inheritance(strategy = InheritanceType.JOINED) -@NamedQueries(value = { @NamedQuery(name = "Role.findByAccountAndCourse", query = "select r from role r where r.account.id=:accountId and r.course.id = :courseId") }) -@XmlRootElement(namespace = Constants.NAMESPACE_DATATYPES) -@XmlType(name = Constants.ROLE_TYPE, propOrder = { Constants.TYPE, Constants.ACCOUNT, Constants.COURSE }, namespace = Constants.NAMESPACE_DATATYPES) public class Role extends de.campussource.cse.cdmm.domain.Entity { - @Column(name = Constants.COLUMNNAME_ROLE_TYPE, nullable = false, insertable = true, updatable = true) - @Enumerated(EnumType.ORDINAL) private RoleType type; - @ManyToOne(optional = false, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH }) - @JoinColumn(name = Constants.COLUMNNAME_ACCOUNT_ID, nullable = false) private Account account; - @ManyToOne(optional = false, cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH }) - @JoinColumn(name = Constants.COLUMNNAME_COURSE_ID, nullable = false) private Course course; public static final String FIND_BY_ACCOUNT_AND_COURSE = "Role.findByAccountAndCourse"; public Role() { } + + public Role(Long id, RoleType type) { + setId(id); + this.type = type; + } + public Role(Long id) { + setId(id); + } + /** * Convenience method to add role to a course and an account. Role is added * to roles list of course and account object, and course and account are @@ -94,16 +76,6 @@ return true; } - public Role(Long id, RoleType type) { - setId(id); - this.type = type; - } - - public Role(Long id) { - setId(id); - } - - @XmlElement(name = Constants.TYPE) public RoleType getType() { return type; } @@ -112,8 +84,6 @@ this.type = type; } - @XmlElement(name = Constants.ACCOUNT_ID, required = true) - @XmlIDREF public Account getAccount() { return account; } @@ -122,8 +92,6 @@ this.account = account; } - @XmlElement(name = Constants.COURSE_ID, required = true) - @XmlIDREF public Course getCourse() { return course; } @@ -136,20 +104,20 @@ visitor.visit(this); } - @Override + @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (!(other instanceof Role)) { - return false; - } - if (this.getId() == null) { - return super.equals( other ); - } - else { - return this.getId().equals(((Role)other).getId()); - } + if (this == other) return true; + if (!(other instanceof Role)) return false; + if (this.getId() == null) return super.equals( other ); + else + return this.getId().equals(((Role)other).getId() ); } + + @Override + public int hashCode() { + if (this.getId() == null) return super.hashCode(); + else + return this.getId().hashCode(); + } } Deleted: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Visitor.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Visitor.java 2009-05-19 09:10:23 UTC (rev 215) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/Visitor.java 2009-05-20 13:52:31 UTC (rev 216) @@ -1,17 +0,0 @@ -package de.campussource.cse.cdmm.domain; - -/** - * Visitor for domain object model - * - * @author Ingo Dueppe - * - */ -public interface Visitor { - - public void visit(Account account); - public void visit(Category category); - public void visit(Course course); - public void visit(Group group); - public void visit(Role role); - -} Copied: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/AttributeAdapter.java (from rev 200, trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/AttributeAdapter.java) =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/AttributeAdapter.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/AttributeAdapter.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,31 @@ +package de.campussource.cse.cdmm.domain.adapter; + +import javax.xml.bind.annotation.adapters.XmlAdapter; + +import de.campussource.cse.cdmm.domain.Attribute; +import de.campussource.cse.cdmm.domain.PersistentAttribute; +import de.campussource.cse.cdmm.domain.TransientAttribute; + + +/** + * Attribute Adapter to map transient and persistent attributes + * @author Sebastian Roekens + * + */ +public class AttributeAdapter extends XmlAdapter<Attribute, Attribute>{ + + @Override + public Attribute unmarshal(Attribute v) throws Exception { + if (v.isTransient()){ + return new TransientAttribute(v.getName(), v.getValue()); + } + return new PersistentAttribute(v.getName(), v.getValue()); + } + + @Override + public Attribute marshal(Attribute v) throws Exception { + return v; + } + + +} Copied: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/IdAdapter.java (from rev 200, trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/IdAdapter.java) =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/IdAdapter.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/adapter/IdAdapter.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,24 @@ +package de.campussource.cse.cdmm.domain.adapter; + +import javax.xml.bind.annotation.adapters.XmlAdapter; + +/** + * Adapter class to convert ids from String to Long and back + * @author Sebastian Roekens + * + */ +public class IdAdapter extends XmlAdapter<String, Long>{ + + + @Override + public Long unmarshal(String v) throws Exception { + return Long.parseLong(v); + } + + @Override + public String marshal(Long v) throws Exception { + return String.valueOf(v); + } + + +} Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AccountJAXBDecorator.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AccountJAXBDecorator.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AccountJAXBDecorator.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,141 @@ +package de.campussource.cse.cdmm.domain.decorators.jaxb; + +import java.util.Date; +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlID; +import javax.xml.bind.annotation.XmlIDREF; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import de.campussource.cse.cdmm.domain.Account; +import de.campussource.cse.cdmm.domain.Attribute; +import de.campussource.cse.cdmm.domain.Constants; +import de.campussource.cse.cdmm.domain.Group; +import de.campussource.cse.cdmm.domain.Role; +import de.campussource.cse.cdmm.domain.State; +import de.campussource.cse.cdmm.domain.adapter.IdAdapter; +import de.campussource.cse.cdmm.domain.visitors.Visitor; + +@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) +@XmlType(name=Constants.ACCOUNT_TYPE, propOrder={"id", Constants.PROPERTY_STATE, Constants.PROPERTY_ATTRIBUTES, Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES) +public class AccountJAXBDecorator extends Account { + + private Account target; + + public AccountJAXBDecorator(){ + this.target = new Account(); + } + + public AccountJAXBDecorator(Account account){ + this.target = account; + } + + @XmlElementWrapper(name=Constants.ROLES) + @XmlElement(name=Constants.ROLE, type=RoleJAXBDecorator.class) + public List<Role> getRoles() { + return target.getRoles(); + } + + public void setRoles(List<Role> roles) { + target.setRoles(roles); + } + + public boolean isInGroup(Group group){ + return target.isInGroup(group); + } + + public boolean addToGroup(Group group){ + return target.addToGroup(group); + } + + public boolean removeFromGroup(Group group){ + return target.removeFromGroup(group); + } + + public boolean addRole(Role role){ + return target.addRole(role); + } + + public boolean removeRole(Role role){ + return target.removeRole(role); + } + + @XmlElementWrapper(name=Constants.GROUPS) + @XmlElement(name=Constants.GROUP, type=GroupJAXBDecorator.class) + @XmlIDREF + public List<Group> getGroups() { + return target.getGroups(); + } + + public void setGroups(List<Group> groups) { + target.setGroups(groups); + } + + public void accept(Visitor visitor) { + target.accept(visitor); + } + + @Override + public boolean equals(Object other) { + return target.equals(other); + } + + @Override + public String toString() { + return target.toString(); + } + + + //Entity methods + + @XmlElement(name = Constants.PROPERTY_STATE) + public State getState() { + return target.getState(); + } + + public void setState(State state) { + target.setState(state); + } + + public void setId(Long id) { + target.setId(id); + } + + @XmlID + @XmlJavaTypeAdapter(value = IdAdapter.class) + @XmlElement(name = Constants.ID) + public Long getId() { + return target.getId(); + } + + @XmlElementWrapper(name = Constants.ATTRIBUTES) + @XmlElement(name = Constants.ATTRIBUTE, type=AttributeJAXBDecorator.class) + public List<Attribute> getAttributes() { + return target.getAttributes(); + } + + // TODO Check if this is correct + public void setAttributes(List<Attribute> attributes) { + target.setAttributes(attributes); + } + + // TODO rename in lastUpdate + @XmlTransient + public Date getDate() { + return target.getDate(); + } + + public void setDate(Date date) { + target.setDate(date); + } + + public boolean isOlder(Date when) { + return target.isOlder(when); + } + +} Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AttributeJAXBDecorator.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AttributeJAXBDecorator.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/AttributeJAXBDecorator.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,66 @@ +package de.campussource.cse.cdmm.domain.decorators.jaxb; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import de.campussource.cse.cdmm.domain.Attribute; +import de.campussource.cse.cdmm.domain.Constants; +import de.campussource.cse.cdmm.domain.adapter.AttributeAdapter; + + +@XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES) +@XmlType(name=Constants.ATTRIBUTE_TYPE, namespace=Constants.NAMESPACE_DATATYPES) +@XmlJavaTypeAdapter(value=AttributeAdapter.class) +public class AttributeJAXBDecorator extends Attribute { + + public Attribute target; + + public AttributeJAXBDecorator(){ + target = new Attribute(); + } + + public AttributeJAXBDecorator(Attribute attribute){ + this.target = attribute; + } + + @XmlElement(name=Constants.PROPERTY_TRANSIENT) + public boolean isTransient() { + return target.isTransient(); + } + + public void setTransient(boolean trans) { + target.setTransient(trans); + } + + @XmlElement(name=Constants.PROPERTY_NAME) + public String getName() { + return target.getName(); + } + + public void setName(String name) { + target.setName(name); + } + + @XmlElement(name=Constants.PROPERTY_VALUE) + public String getValue() { + return target.getValue(); + } + + public void setValue(String value) { + target.setValue(value); + } + + @Override + public boolean equals(Object other) { + return target.equals(other); + } + + @Override + public String toString() { + return target.toString(); + } + + +} Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CategoryJAXBDecorator.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CategoryJAXBDecorator.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CategoryJAXBDecorator.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,145 @@ +package de.campussource.cse.cdmm.domain.decorators.jaxb; + +import java.util.Date; +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlID; +import javax.xml.bind.annotation.XmlIDREF; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import de.campussource.cse.cdmm.domain.Attribute; +import de.campussource.cse.cdmm.domain.Category; +import de.campussource.cse.cdmm.domain.Constants; +import de.campussource.cse.cdmm.domain.Course; +import de.campussource.cse.cdmm.domain.State; +import de.campussource.cse.cdmm.domain.adapter.IdAdapter; +import de.campussource.cse.cdmm.domain.visitors.Visitor; + + +@XmlRootElement(namespace = Constants.NAMESPACE_DATATYPES) +@XmlType(name = Constants.CATEGORY_TYPE, propOrder = {"id", Constants.PROPERTY_STATE, Constants.PROPERTY_ATTRIBUTES, Constants.PROPERTY_PARENT, Constants.PROPERTY_CHILDREN, + Constants.PROPERTY_COURSES }, namespace = Constants.NAMESPACE_DATATYPES) +public class CategoryJAXBDecorator extends Category { + + private Category target; + + public CategoryJAXBDecorator(){ + target = new Category(); + } + + public CategoryJAXBDecorator(Category category){ + this.target = category; + } + + public boolean addToParentCategory(Category parent) { + return target.addToParentCategory(parent); + } + + public boolean removeFromParentCategory(Category parent){ + return target.removeFromParentCategory(parent); + } + + @XmlElementWrapper(name = Constants.CATEGORIES) + @XmlElement(name = Constants.CATEGORY, type=CategoryJAXBDecorator.class) + public List<Category> getChildren() { + return target.getChildren(); + } + + public void setChildren(List<Category> children) { + target.setChildren(children); + } + + @XmlElementWrapper(name = Constants.COURSES) + @XmlElement(name = Constants.COURSE, type=CourseJAXBDecorator.class) + @XmlIDREF + public List<Course> getCourses() { + return target.getCourses(); + } + + public void setCourses(List<Course> courses) { + target.setCourses(courses); + } + + @XmlElement(name = Constants.PARENT, type=CategoryJAXBDecorator.class) + @XmlIDREF + public Category getParent() { + return target.getParent(); + } + + public void setParent(Category parent) { + target.setParent(parent); + } + + @XmlTransient + public boolean isRoot() { + return target.isRoot(); + } + + public void accept(Visitor visitor) { + target.accept(visitor); + } + + //Entity methods + + @XmlElement(name = Constants.PROPERTY_STATE) + public State getState() { + return target.getState(); + } + + public void setState(State state) { + target.setState(state); + } + + public void setId(Long id) { + target.setId(id); + } + + @XmlID + @XmlJavaTypeAdapter(value = IdAdapter.class) + @XmlElement(name = Constants.ID) + public Long getId() { + return target.getId(); + } + + @XmlElementWrapper(name = Constants.ATTRIBUTES) + @XmlElement(name = Constants.ATTRIBUTE, type=AttributeJAXBDecorator.class) + public List<Attribute> getAttributes() { + return target.getAttributes(); + } + + // TODO Check if this is correct + public void setAttributes(List<Attribute> attributes) { + target.setAttributes(attributes); + } + + // TODO rename in lastUpdate + @XmlTransient + public Date getDate() { + return target.getDate(); + } + + public void setDate(Date date) { + target.setDate(date); + } + + public boolean isOlder(Date when) { + return target.isOlder(when); + } + + @Override + public boolean equals(Object other) { + return target.equals(other); + } + + @Override + public String toString() { + return target.toString(); + } + + +} Added: trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CourseJAXBDecorator.java =================================================================== --- trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CourseJAXBDecorator.java (rev 0) +++ trunk/cse-ip/sc-cdmm/src/main/java/de/campussource/cse/cdmm/domain/decorators/jaxb/CourseJAXBDecorator.java 2009-05-20 13:52:31 UTC (rev 216) @@ -0,0 +1,170 @@ +package de.campussource.cse.cdmm.d... [truncated message content] |