Clover Coverage Report - KS Contract Documentation Generator 0.0.1-SNAPSHOT
Coverage timestamp: Wed Dec 31 1969 19:00:00 EST
../../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
38   143   18   9.5
28   92   0.47   4
4     4.5  
1    
 
  DictionaryParentSetter       Line # 19 38 0% 18 70 0% 0.0
 
No Tests
 
1    /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5    package org.kuali.student.contract.model.util;
6   
7    import java.util.List;
8   
9    import org.kuali.student.contract.exception.DictionaryExecutionException;
10    import org.kuali.student.contract.model.Dictionary;
11    import org.kuali.student.contract.model.DictionaryModel;
12    import org.kuali.student.contract.model.Field;
13    import org.kuali.student.contract.model.XmlType;
14   
15    /**
16    *
17    * @author nwright
18    */
 
19    public class DictionaryParentSetter
20    {
21   
22    private DictionaryModel model;
23    private ModelFinder finder;
24   
 
25  0 toggle public DictionaryParentSetter (DictionaryModel model)
26    {
27  0 this.model = model;
28  0 this.finder = new ModelFinder (model);
29    }
30   
 
31  0 toggle public void set ()
32    {
33  0 for (int i = 1; i < model.getDictionary ().size (); i ++)
34    {
35  0 Dictionary child = model.getDictionary ().get (i);
36  0 Dictionary parent = calcParent (i, child);
37  0 child.setParent (parent);
38    }
39    }
40   
 
41  0 toggle private Dictionary calcParent (int index, Dictionary child)
42    {
43    // if first field the parent is by default null
44    // course.official
45  0 if (index == 0)
46    {
47  0 return null;
48    }
49    // if first field of the defnition of a new main type
50    // then the parent is null
51    // i.e. program.official is the start of a new cluInfo definition
52  0 XmlType xmlType = finder.findXmlType (child.getXmlObject ());
53  0 if (xmlType == null)
54    {
55  0 throw new DictionaryExecutionException ("child.getXmlObject ()=" + child.getXmlObject ());
56    }
57  0 if (xmlType.hasOwnCreateUpdate ())
58    {
59  0 List<Field> fields = finder.findFields (child.getXmlObject ());
60  0 if (fields.get (0).getShortName ().equalsIgnoreCase (child.getShortName ()))
61    {
62  0 return null;
63    }
64    }
65  0 Dictionary prev = model.getDictionary ().get (index - 1);
66    // if this is just another field on same object as prev
67    // then they have the same parent
68    // course.official.no cluIdentifierInfo
69    // course.official.transcriptTitle cluIdentifierInfo << this has the same parent as previous
70  0 if (prev.getXmlObject ().equalsIgnoreCase (child.getXmlObject ()))
71    {
72  0 return prev.getParent ();
73    }
74    // objects are different so check if we are going down or up
75    // if going down the hierarchy
76  0 Field prevField = finder.findField (prev);
77  0 if (prevField == null)
78    {
79  0 throw new DictionaryExecutionException
80    ("Could not find field associated with dictionary entry with id =" + prev.getId ());
81    }
82    // going down heirarchy if this sub-object is the same type of the previous field
83    // because that means this field is the 1st field of the sub-type definition
84  0 if (calcType (prevField.getXmlType ()).equalsIgnoreCase (child.getXmlObject ()))
85    {
86    // loop back to find the first (default) definition for that field -- that is the real parent
87    // not the state override
88    // course.desc <<<< Make this the parent
89    // course.desc.draft.private
90    // course.desc.template
91    // course.desc.draft.public <<<< not this
92    // course.desc.plain <<<< of this
93  0 for (int i = index - 2; i > -1; i --)
94    {
95  0 Dictionary prev2 = model.getDictionary ().get (i);
96  0 if (prev2.getXmlObject ().equalsIgnoreCase (prev.getXmlObject ()))
97    {
98  0 if (prev2.getShortName ().equalsIgnoreCase (prev.getShortName ()))
99    {
100  0 prev = prev2;
101  0 continue;
102    }
103    }
104  0 break;
105    }
106  0 return prev;
107    }
108    // we are popping up from down in the heirarchy
109    // have to go back to find the previous item at the same level
110    // course.desc cluInfo
111    // course.desc.draft.private cluInfo
112    // course.desc.template cluInfo
113    // course.desc.draft.public cluInfo << use this parent
114    // course.desc.plain richTextInfo
115    // course.desc.plain.draft.private richTextInfo
116    // course.desc.plain.draft.public richTextInfo
117    // course.desc.formatted richTextInfo
118    // course.desc.formatted.draft.private richTextInfo
119    // course.desc.formatted.draft.public richTextInfo
120    // course.rationale cluInfo << as this field's parent
121  0 for (int i = index - 1; i > -1; i --)
122    {
123  0 Dictionary dict = model.getDictionary ().get (i);
124  0 if (dict.getXmlObject ().equalsIgnoreCase (child.getXmlObject ()))
125    {
126  0 return dict.getParent ();
127    }
128    }
129  0 throw new DictionaryExecutionException ("dictionary entry " + child.getId ()
130    + " could not calculate the parent");
131    }
132   
 
133  0 toggle private String calcType (String type)
134    {
135  0 if (type.endsWith ("List"))
136    {
137  0 type = type.substring (0, type.length () - "List".length ());
138    }
139   
140  0 return type;
141    }
142   
143    }