| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
package org.kuali.student.common.dictionary.service.impl.old; |
| 17 |
|
|
| 18 |
|
import java.text.SimpleDateFormat; |
| 19 |
|
import java.util.HashMap; |
| 20 |
|
import java.util.HashSet; |
| 21 |
|
import java.util.List; |
| 22 |
|
import java.util.Map; |
| 23 |
|
|
| 24 |
|
import javax.xml.parsers.DocumentBuilder; |
| 25 |
|
import javax.xml.parsers.DocumentBuilderFactory; |
| 26 |
|
|
| 27 |
|
import org.apache.log4j.Logger; |
| 28 |
|
import org.kuali.student.common.dictionary.old.dto.CaseConstraint; |
| 29 |
|
import org.kuali.student.common.dictionary.old.dto.ConstraintDescriptor; |
| 30 |
|
import org.kuali.student.common.dictionary.old.dto.ConstraintSelector; |
| 31 |
|
import org.kuali.student.common.dictionary.old.dto.Context; |
| 32 |
|
import org.kuali.student.common.dictionary.old.dto.Field; |
| 33 |
|
import org.kuali.student.common.dictionary.old.dto.FieldDescriptor; |
| 34 |
|
import org.kuali.student.common.dictionary.old.dto.LookupConstraint; |
| 35 |
|
import org.kuali.student.common.dictionary.old.dto.LookupKeyConstraint; |
| 36 |
|
import org.kuali.student.common.dictionary.old.dto.ObjectStructure; |
| 37 |
|
import org.kuali.student.common.dictionary.old.dto.OccursConstraint; |
| 38 |
|
import org.kuali.student.common.dictionary.old.dto.RequireConstraint; |
| 39 |
|
import org.kuali.student.common.dictionary.old.dto.SearchSelector; |
| 40 |
|
import org.kuali.student.common.dictionary.old.dto.State; |
| 41 |
|
import org.kuali.student.common.dictionary.old.dto.Type; |
| 42 |
|
import org.kuali.student.common.dictionary.old.dto.TypeStateCaseConstraint; |
| 43 |
|
import org.kuali.student.common.dictionary.old.dto.TypeStateWhenConstraint; |
| 44 |
|
import org.kuali.student.common.dictionary.old.dto.ValidCharsConstraint; |
| 45 |
|
import org.kuali.student.common.dictionary.old.dto.WhenConstraint; |
| 46 |
|
import org.springframework.beans.factory.support.BeanDefinitionBuilder; |
| 47 |
|
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; |
| 48 |
|
import org.springframework.beans.factory.xml.ParserContext; |
| 49 |
|
import org.w3c.dom.Attr; |
| 50 |
|
import org.w3c.dom.Document; |
| 51 |
|
import org.w3c.dom.Element; |
| 52 |
|
import org.w3c.dom.Node; |
| 53 |
|
|
| 54 |
|
|
| 55 |
|
@author |
| 56 |
|
|
| 57 |
|
|
| 58 |
|
@Deprecated |
|
|
|
| 89.6% |
Uncovered Elements: 24 (230) |
Complexity: 71 |
Complexity Density: 0.56 |
|
| 59 |
|
public class DictionaryBeanDefinitionParser extends AbstractSingleBeanDefinitionParser{ |
| 60 |
|
|
| 61 |
|
final Logger logger = Logger.getLogger(DictionaryBeanDefinitionParser.class); |
| 62 |
|
|
| 63 |
|
|
|
|
|
| 83.6% |
Uncovered Elements: 12 (73) |
Complexity: 19 |
Complexity Density: 0.51 |
|
| 64 |
107954
|
@Override... |
| 65 |
|
protected Class<?> getBeanClass(Element element) { |
| 66 |
|
|
| 67 |
107954
|
if (element.getLocalName().equals("case")){ |
| 68 |
0
|
return CaseConstraint.class; |
| 69 |
|
} |
| 70 |
107954
|
if (element.getLocalName().equals("constraintDescriptor")) { |
| 71 |
22783
|
return ConstraintDescriptor.class; |
| 72 |
|
} |
| 73 |
85171
|
if (element.getLocalName().equals("constraint")) { |
| 74 |
8981
|
return ConstraintSelector.class; |
| 75 |
|
} |
| 76 |
76190
|
if (element.getLocalName().equals("context")) { |
| 77 |
0
|
return Context.class; |
| 78 |
|
} |
| 79 |
76190
|
if (element.getLocalName().equals("field")) { |
| 80 |
22783
|
return Field.class; |
| 81 |
|
} |
| 82 |
53407
|
if (element.getLocalName().equals("fieldDescriptor")) { |
| 83 |
23326
|
return FieldDescriptor.class; |
| 84 |
|
} |
| 85 |
30081
|
if (element.getLocalName().equals("lookup")) { |
| 86 |
2375
|
return LookupConstraint.class; |
| 87 |
|
} |
| 88 |
27706
|
if (element.getLocalName().equals("lookupKey")) { |
| 89 |
2375
|
return LookupKeyConstraint.class; |
| 90 |
|
} |
| 91 |
25331
|
if (element.getLocalName().equals("objectStructure")) { |
| 92 |
6238
|
return ObjectStructure.class; |
| 93 |
|
} |
| 94 |
19093
|
if (element.getLocalName().equals("occurs")) { |
| 95 |
0
|
return OccursConstraint.class; |
| 96 |
|
} |
| 97 |
19093
|
if (element.getLocalName().equals("require")) { |
| 98 |
0
|
return RequireConstraint.class; |
| 99 |
|
} |
| 100 |
19093
|
if (element.getLocalName().equals("search")) { |
| 101 |
6
|
return SearchSelector.class; |
| 102 |
|
} |
| 103 |
19087
|
if (element.getLocalName().equals("state")) { |
| 104 |
9013
|
return State.class; |
| 105 |
|
} |
| 106 |
10074
|
if (element.getLocalName().equals("type")) { |
| 107 |
6426
|
return Type.class; |
| 108 |
|
} |
| 109 |
3648
|
if (element.getLocalName().equals("typeStateCase")) { |
| 110 |
4
|
return TypeStateCaseConstraint.class; |
| 111 |
|
} |
| 112 |
3644
|
if (element.getLocalName().equals("typeStateWhen")) { |
| 113 |
6
|
return TypeStateWhenConstraint.class; |
| 114 |
|
} |
| 115 |
3638
|
if (element.getLocalName().equals("when")) { |
| 116 |
0
|
return WhenConstraint.class; |
| 117 |
|
} |
| 118 |
3638
|
if (element.getLocalName().equals("validChars")) { |
| 119 |
3638
|
return ValidCharsConstraint.class; |
| 120 |
|
} |
| 121 |
|
|
| 122 |
|
|
| 123 |
0
|
return super.getBeanClass(element); |
| 124 |
|
} |
| 125 |
|
|
|
|
|
| 97.2% |
Uncovered Elements: 2 (72) |
Complexity: 21 |
Complexity Density: 0.5 |
|
| 126 |
107954
|
@Override... |
| 127 |
|
protected void doParse(Element element, ParserContext pc, BeanDefinitionBuilder builder) { |
| 128 |
|
|
| 129 |
|
|
| 130 |
107954
|
if(element.hasAttributes()){ |
| 131 |
368733
|
for(int i = 0;i<element.getAttributes().getLength();i++){ |
| 132 |
266156
|
Attr attr = (Attr) element.getAttributes().item(i); |
| 133 |
266156
|
if("abstract".equals(attr.getName())){ |
| 134 |
43777
|
builder.setAbstract(true); |
| 135 |
222379
|
}else if(!"id".equals(attr.getName())&&!"parent".equals(attr.getName())){ |
| 136 |
82058
|
builder.addPropertyValue(attr.getName(), attr.getValue()); |
| 137 |
|
} |
| 138 |
|
} |
| 139 |
|
} |
| 140 |
|
|
| 141 |
|
|
| 142 |
107954
|
HashSet<String> visitedNodes = new HashSet<String>(); |
| 143 |
549035
|
for(int i = 0;i<element.getChildNodes().getLength();i++){ |
| 144 |
441081
|
Node node = element.getChildNodes().item(i); |
| 145 |
|
|
| 146 |
|
|
| 147 |
441081
|
if(Node.ELEMENT_NODE == node.getNodeType()){ |
| 148 |
|
|
| 149 |
|
|
| 150 |
176153
|
String localName=node.getLocalName(); |
| 151 |
176153
|
if(localName.endsWith("Ref")){ |
| 152 |
103377
|
localName=localName.substring(0, localName.length()-"Ref".length()); |
| 153 |
|
} |
| 154 |
176153
|
if(!visitedNodes.contains(localName)){ |
| 155 |
|
|
| 156 |
115236
|
if(isList(localName)){ |
| 157 |
26524
|
Element childList=getChildList(element,localName); |
| 158 |
26524
|
visitedNodes.add(localName); |
| 159 |
26524
|
List<?> refList = pc.getDelegate().parseListElement(childList, pc.getContainingBeanDefinition()); |
| 160 |
26524
|
if(refList!=null&&!refList.isEmpty()){ |
| 161 |
26524
|
String fieldName=resolveFieldName(element.getLocalName(),localName); |
| 162 |
26524
|
builder.addPropertyValue(fieldName,refList); |
| 163 |
|
} |
| 164 |
|
|
| 165 |
88712
|
}else if("attributes".equals(node.getLocalName())){ |
| 166 |
2
|
Map<String,String> attributes = getAttributeMap((Element)node); |
| 167 |
2
|
builder.addPropertyValue(node.getLocalName(), attributes); |
| 168 |
|
|
| 169 |
88710
|
}else if(node.getLocalName().endsWith("Ref")){ |
| 170 |
23357
|
if("objectStructureRef".equals(node.getLocalName())){ |
| 171 |
1351
|
builder.addPropertyValue("objectStructureRef", ((Element)node).getAttribute("bean")); |
| 172 |
|
|
| 173 |
1351
|
builder.addPropertyReference("objectStructure", ((Element)node).getAttribute("bean")); |
| 174 |
|
}else{ |
| 175 |
22006
|
builder.addPropertyReference(localName, ((Element)node).getAttribute("bean")); |
| 176 |
|
} |
| 177 |
|
}else{ |
| 178 |
|
|
| 179 |
65353
|
Element childElement = getFirstChildElement(node); |
| 180 |
65353
|
if(childElement!=null ||"search".equals(node.getLocalName())){ |
| 181 |
|
|
| 182 |
5467
|
Object childBean = pc.getDelegate().parsePropertySubElement((Element)node, pc.getContainingBeanDefinition()); |
| 183 |
5467
|
String fieldName=resolveFieldName(element.getLocalName(),node.getLocalName()); |
| 184 |
5467
|
builder.addPropertyValue(fieldName, childBean); |
| 185 |
|
}else{ |
| 186 |
|
|
| 187 |
|
|
| 188 |
|
|
| 189 |
59886
|
String fieldName=resolveFieldName(element.getLocalName(),node.getLocalName()); |
| 190 |
|
|
| 191 |
59886
|
if(Node.ELEMENT_NODE == node.getNodeType()&&"date".equals(((Element)node).getSchemaTypeInfo().getTypeName())){ |
| 192 |
2945
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); |
| 193 |
2945
|
try { |
| 194 |
2945
|
builder.addPropertyValue(fieldName, df.parse(node.getTextContent())); |
| 195 |
|
} catch (Exception e) { |
| 196 |
0
|
logger.error("Cannot convert date, must be in format 'YYYY-MM-DD' :"+node.getTextContent(),e); |
| 197 |
|
} |
| 198 |
|
}else{ |
| 199 |
56941
|
builder.addPropertyValue(fieldName, node.getTextContent()); |
| 200 |
|
} |
| 201 |
|
} |
| 202 |
|
} |
| 203 |
|
} |
| 204 |
|
} |
| 205 |
|
} |
| 206 |
|
} |
| 207 |
|
|
| 208 |
|
|
| 209 |
|
|
| 210 |
|
|
| 211 |
|
|
| 212 |
|
|
| 213 |
|
|
| 214 |
|
@param |
| 215 |
|
@return |
| 216 |
|
|
|
|
|
| 100% |
Uncovered Elements: 0 (12) |
Complexity: 4 |
Complexity Density: 0.5 |
|
| 217 |
2
|
private Map<String, String> getAttributeMap(Element element) {... |
| 218 |
2
|
Map<String, String> attributes = new HashMap<String, String>(); |
| 219 |
12
|
for(int i = 0;i<element.getChildNodes().getLength();i++){ |
| 220 |
10
|
Node node = element.getChildNodes().item(i); |
| 221 |
10
|
if(Node.ELEMENT_NODE == node.getNodeType() && "attribute".equals(node.getLocalName())){ |
| 222 |
4
|
String key = ((Element)node).getAttribute("key"); |
| 223 |
4
|
String value = ((Element)node).getAttribute("value"); |
| 224 |
4
|
attributes.put(key, value); |
| 225 |
|
} |
| 226 |
|
} |
| 227 |
2
|
return attributes; |
| 228 |
|
} |
| 229 |
|
|
| 230 |
|
|
| 231 |
|
|
|
|
|
| 91.3% |
Uncovered Elements: 2 (23) |
Complexity: 7 |
Complexity Density: 0.41 |
|
| 232 |
26524
|
private Element getChildList(Element element, String localName) {... |
| 233 |
26524
|
try{ |
| 234 |
|
|
| 235 |
26524
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
| 236 |
26524
|
DocumentBuilder builder = dbf.newDocumentBuilder(); |
| 237 |
26524
|
Document doc = builder.newDocument(); |
| 238 |
|
|
| 239 |
26524
|
Element root = doc.createElement("listRoot"); |
| 240 |
|
|
| 241 |
261224
|
for(int i = 0;i<element.getChildNodes().getLength();i++){ |
| 242 |
234700
|
Node node = element.getChildNodes().item(i); |
| 243 |
234700
|
if(Node.ELEMENT_NODE == node.getNodeType() && localName.equals(node.getLocalName())){ |
| 244 |
|
|
| 245 |
|
|
| 246 |
7421
|
Node copied = doc.importNode(node, true); |
| 247 |
7421
|
root.appendChild(copied); |
| 248 |
|
} |
| 249 |
234700
|
if(Node.ELEMENT_NODE == node.getNodeType() && (localName+"Ref").equals(node.getLocalName())){ |
| 250 |
|
|
| 251 |
|
|
| 252 |
80020
|
Element ref = doc.createElement("ref"); |
| 253 |
80020
|
ref.setAttribute("bean", ((Element)node).getAttribute("bean")); |
| 254 |
80020
|
root.appendChild(ref); |
| 255 |
|
} |
| 256 |
|
} |
| 257 |
|
|
| 258 |
26524
|
return root; |
| 259 |
|
}catch(Exception e){ |
| 260 |
0
|
logger.error("Exception occured: ", e); |
| 261 |
|
} |
| 262 |
0
|
return null; |
| 263 |
|
} |
| 264 |
|
|
| 265 |
|
|
|
|
|
| 68% |
Uncovered Elements: 8 (25) |
Complexity: 13 |
Complexity Density: 1 |
|
| 266 |
91877
|
private String resolveFieldName(String parentName, String nodeName) {... |
| 267 |
91877
|
if("constraint".equals(parentName)&&"case".equals(nodeName)){ |
| 268 |
0
|
return "caseConstraint"; |
| 269 |
|
} |
| 270 |
91877
|
if("constraint".equals(parentName)&&"typeStateCase".equals(nodeName)){ |
| 271 |
4
|
return "typeStateCaseConstraint"; |
| 272 |
|
} |
| 273 |
91873
|
if("constraint".equals(parentName)&&"lookup".equals(nodeName)){ |
| 274 |
2375
|
return "lookupConstraint"; |
| 275 |
|
} |
| 276 |
89498
|
if("constraint".equals(parentName)&&"occurs".equals(nodeName)){ |
| 277 |
0
|
return "occursConstraint"; |
| 278 |
|
} |
| 279 |
89498
|
if("constraint".equals(parentName)&&"require".equals(nodeName)){ |
| 280 |
0
|
return "requireConstraint"; |
| 281 |
|
} |
| 282 |
89498
|
if("case".equals(parentName)&&"when".equals(nodeName)){ |
| 283 |
0
|
return "whenConstraint"; |
| 284 |
|
} |
| 285 |
|
|
| 286 |
89498
|
return nodeName; |
| 287 |
|
} |
| 288 |
|
|
| 289 |
|
|
|
|
|
| 100% |
Uncovered Elements: 0 (9) |
Complexity: 3 |
Complexity Density: 0.6 |
|
| 290 |
65353
|
private Element getFirstChildElement(Node node) {... |
| 291 |
131232
|
for(int i = 0;i<node.getChildNodes().getLength();i++){ |
| 292 |
71340
|
Node childNode = node.getChildNodes().item(i); |
| 293 |
71340
|
if(Node.ELEMENT_NODE == childNode.getNodeType()){ |
| 294 |
5461
|
return (Element) childNode; |
| 295 |
|
} |
| 296 |
|
} |
| 297 |
59892
|
return null; |
| 298 |
|
} |
| 299 |
|
|
| 300 |
|
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
| 301 |
115236
|
private boolean isList(String localName) {... |
| 302 |
|
|
| 303 |
115236
|
return "field".equals(localName)|| |
| 304 |
|
"case".equals(localName)|| |
| 305 |
|
"when".equals(localName)|| |
| 306 |
|
"lookup".equals(localName)|| |
| 307 |
|
"lookupKey".equals(localName)|| |
| 308 |
|
"occurs".equals(localName)|| |
| 309 |
|
"constraint".equals(localName)|| |
| 310 |
|
"type".equals(localName)|| |
| 311 |
|
"state".equals(localName)|| |
| 312 |
|
"require".equals(localName); |
| 313 |
|
} |
| 314 |
|
|
| 315 |
|
|
|
|
|
| 100% |
Uncovered Elements: 0 (5) |
Complexity: 2 |
Complexity Density: 0.67 |
|
| 316 |
107954
|
@Override... |
| 317 |
|
protected String getParentName(Element element) { |
| 318 |
107954
|
if(element.hasAttribute("parent")){ |
| 319 |
44905
|
return element.getAttribute("parent"); |
| 320 |
|
} |
| 321 |
63049
|
return super.getParentName(element); |
| 322 |
|
} |
| 323 |
|
|
| 324 |
|
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
| 325 |
12538
|
@Override... |
| 326 |
|
protected boolean shouldGenerateIdAsFallback() { |
| 327 |
12538
|
return true; |
| 328 |
|
} |
| 329 |
|
|
| 330 |
|
} |