|
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] |