1 package org.kuali.student.lum.workflow;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 import org.kuali.student.r1.core.statement.dto.ReqCompFieldInfo;
7 import org.kuali.student.r1.core.statement.dto.ReqComponentInfo;
8 import org.kuali.student.r1.core.statement.dto.StatementTreeViewInfo;
9
10 /**
11 *
12 * This class contains common utility methods used with statements.
13 *
14 * @author Kuali Rice Team (kuali-rice@googlegroups.com)
15 *
16 */
17 public class StatementUtil {
18
19 /**
20 * WARNING: this constant is also declared in ProgramRequirementsSummaryView. We cannot use
21 * the one from ProgramRequirementsSummaryView because we cannot compile it into this
22 * package.
23 *
24 * TODO: create a constants class that can be shared across view, server, etc.
25 */
26 public static final String NEW_STMT_TREE_ID = "NEWSTMTTREE";
27
28 /**
29 * WARNING: this constant is also declared in ProgramRequirementsSummaryView. We cannot use
30 * the one from ProgramRequirementsSummaryView because we cannot compile it into this
31 * package.
32 *
33 * TODO: create a constants class that can be shared across view, server, etc.
34 */
35 public static final String NEW_REQ_COMP_ID = "NEWREQCOMP";
36
37 /**
38 * This method will recursively set the state of all statements in the tree.
39 * <p>
40 * WARNING: you must call the statement service in order to update statements.
41 * <p>
42 *
43 * @param state is the state we should set all statements in the tree to
44 * @param statementTreeViewInfo the tree of statements
45 * @throws Exception
46 */
47 public static void updateStatementTreeViewInfoState(String state, StatementTreeViewInfo statementTreeViewInfo) {
48 // Set the state on the statement tree itself
49 statementTreeViewInfo.setState(state);
50
51 // Get all the requirements components for this statement
52 List<ReqComponentInfo> reqComponents = statementTreeViewInfo.getReqComponents();
53
54 // Loop over requirements and set the state for each requirement
55 for(Iterator<ReqComponentInfo> it = reqComponents.iterator(); it.hasNext();)
56 it.next().setState(state);
57
58 // Loop over each statement and set the state for each statement (recursively calling this method)
59 for(Iterator<StatementTreeViewInfo> itr = statementTreeViewInfo.getStatements().iterator(); itr.hasNext();)
60 updateStatementTreeViewInfoState(state, (StatementTreeViewInfo)itr.next());
61 }
62 /**
63 * This method strips the statement ids from the statement tree prior to saving
64 * the tree, which allows the web service to generate new ids from the database.
65 * <p>
66 * The UI needs to create temporary ids in order to work with the statements
67 * in memory prior to storing them in the database. On save, we strip
68 * the temporary ids in this method, then write the statement tree to the database,
69 * allowing the database to generate proper ids.
70 * <p>
71 *
72 * @param tree
73 */
74 public static void stripStatementIds(StatementTreeViewInfo tree) {
75 List<StatementTreeViewInfo> statements = tree.getStatements();
76 List<ReqComponentInfo> reqComponentInfos = tree.getReqComponents();
77
78 // If there are no statements in the tree, set its ID to null
79 if ((tree.getId() != null) && (tree.getId().indexOf(NEW_STMT_TREE_ID) >= 0)) {
80 tree.setId(null);
81 }
82
83 // If there are statements in the tree
84 if ((statements != null) && (statements.size() > 0)) {
85
86 // retrieve all statements, loop over them, and recursively strip their IDs
87 for (StatementTreeViewInfo statement : statements) {
88 stripStatementIds(statement); // inside set the children of this statementTreeViewInfo
89 }
90 } else if ((reqComponentInfos != null) && (reqComponentInfos.size() > 0)) {
91 // If there are requirements, loop over them and set their IDs to null
92 for (ReqComponentInfo reqComponent : reqComponentInfos) {
93 if ((reqComponent.getId() != null) && (reqComponent.getId().indexOf(NEW_REQ_COMP_ID) >= 0)) {
94 reqComponent.setId(null);
95 }
96 // Also set the field IDs to null
97 for (ReqCompFieldInfo field : reqComponent.getReqCompFields()) {
98 field.setId(null);
99 }
100
101 }
102 }
103 }
104 }