View Javadoc

1   package de.campussource.cse.cdmm;
2   
3   import java.util.ArrayList;
4   import java.util.Date;
5   import java.util.List;
6   
7   import javax.ejb.EJB;
8   import javax.ejb.Remote;
9   import javax.ejb.Stateless;
10  
11  import de.campussource.cse.cdmm.dao.*;
12  import de.campussource.cse.cdmm.domain.Category;
13  import de.campussource.cse.cdmm.domain.Course;
14  import de.campussource.cse.cdmm.domain.Role;
15  import de.campussource.cse.cdmm.domain.State;
16  
17  /**
18   * Service bean for CDMM package
19   * @author Sebastian Roekens
20   *
21   */
22  @Stateless
23  @Remote(value=DataModelManager.class)
24  public class DataModelManagerBean implements DataModelManager {
25  	
26  	@EJB
27  	private CategoryDao categoryDao;
28  	
29  	@EJB
30  	private CourseDao courseDao;
31  	
32  	@Override
33  	public List<EventMessage> createOrUpdateCategory(CategoryMessage categoryMessage) {
34  		// TODO Auto-generated method stub
35  		return null;
36  	}
37  
38  	@Override
39  	public List<EventMessage> createOrUpdateCourse(CourseMessage courseMessage) {
40  		//init eventMessageList
41  		List<EventMessage> events = new ArrayList<EventMessage>();
42  		//get state of given object in persistence
43  		State state = null;	
44  		Course loadedCourse = null;
45  		try {
46  			loadedCourse = courseDao.find(courseMessage.getCourse().getId());
47  			state=loadedCourse.getState();
48  		} catch (DataModelManagerException e1) {
49  			//do nothing
50  		}
51  		
52  		//handle different inputEvents
53  		if (courseMessage.getInputEvent()==InputEventType.CREATE_UPDATE){
54  			//handle different states of entity
55  			EventMessage eventMessage = new EventMessage();
56  			Course course = courseMessage.getCourse();
57  			course.setState(State.EXISTS);
58  			eventMessage.setEntity(course);
59  			try {
60  				courseDao.persist(course);
61  			} catch (DataModelManagerException e) {
62  				//TODO handle me
63  			}
64  			if (state==State.EXISTS){				
65  				eventMessage.setOutputEvent(OutputEventType.UPDATE);
66  			} else {
67  				eventMessage.setOutputEvent(OutputEventType.CREATE);
68  			}
69  			eventMessage.setEventTime(new Date());
70  			events.add(eventMessage);
71  			
72  			//traverse associated objects and create them
73  				//categories
74  				for (Category category : course.getCategories()){					
75  					createByReference(category);
76  				}
77  				//workgroups
78  				for (Course workgroup : course.getWorkgroups()){
79  					createByReference(workgroup);
80  				}
81  				//parent
82  				createByReference(course.getParent());
83  				//roles
84  				for (Role role : course.getRoles()){
85  					createByReference(role);
86  				}
87  			
88  		} else if (courseMessage.getInputEvent()==InputEventType.DELETE){
89  			return deleteCourse(courseMessage);
90  		} else if (courseMessage.getInputEvent()==InputEventType.CREATE_BY_REFERENCE){
91  			//NOT_EXISTS
92  			//KNOWN
93  		}
94  		
95  		
96  		return events;
97  	}
98  
99  	private void createByReference(Category category) {
100 		try {
101 			Category loadedCategory = categoryDao.find(category.getId());
102 		} catch (DataModelManagerException e) {
103 			CategoryMessage cm = new CategoryMessage();
104 			cm.setCategory(category);
105 			cm.setInputEvent(InputEventType.CREATE_BY_REFERENCE);
106 			cm.setEventTime(new Date());
107 			createOrUpdateCategory(cm);
108 		}
109 	}
110 
111 	private void createByReference(Course course) {
112 		try {
113 			Course loadedCourse = courseDao.find(course.getId());
114 		} catch (DataModelManagerException e) {
115 			CourseMessage cm = new CourseMessage();
116 			cm.setCourse(course);
117 			cm.setInputEvent(InputEventType.CREATE_BY_REFERENCE);
118 			cm.setEventTime(new Date());
119 			createOrUpdateCourse(cm);
120 		}
121 	}
122 
123 	private void createByReference(Role role) {
124 		//FIXME implement me
125 	}
126 
127 	@Override
128 	public List<EventMessage> deleteCategory(CategoryMessage categoryMessage) {
129 		// TODO Auto-generated method stub
130 		return null;
131 	}
132 
133 	@Override
134 	public List<EventMessage> deleteCourse(CourseMessage courseMessage) {
135 		// TODO Auto-generated method stub
136 		return null;
137 	}
138 
139 }