4 package eu
.etaxonomy
.cdm
.persistence
.dao
.initializer
;
6 import java
.util
.ArrayList
;
7 import java
.util
.Collections
;
8 import java
.util
.HashMap
;
12 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
18 public class BeanInitNode
implements Comparable
<BeanInitNode
>{
20 private BeanInitNode parent
;
22 private Map
<String
, BeanInitNode
> children
= new HashMap
<String
, BeanInitNode
>();
26 private boolean isToManyInitialized
= false;
28 private boolean isToOneInitialized
= false;
31 public BeanInitNode(BeanInitNode parent
, String part
) {
32 this.path
= CdmUtils
.Nz(part
);
39 private void addChild(String part
, BeanInitNode child
) {
40 children
.put(part
, child
);
41 if (child
.isWildcard()){
42 if (part
.equals(AbstractBeanInitializer
.LOAD_2ONE_2MANY_WILDCARD
)){
43 this.isToManyInitialized
= true;
45 this.isToOneInitialized
= true;
49 public static BeanInitNode
createInitTree(List
<String
> propertyPaths
) {
51 //sort paths //TODO needed?
52 Collections
.sort(propertyPaths
);
54 BeanInitNode root
= new BeanInitNode(null, "");
56 for (String fullPath
: propertyPaths
){
57 String
[] parts
= fullPath
.split("\\.");
58 BeanInitNode lastNode
= root
;
59 for (String part
: parts
){
60 BeanInitNode child
= lastNode
.children
.get(part
);
62 child
= new BeanInitNode(lastNode
, part
);
72 public List
<BeanInitNode
> getChildrenList() {
73 List
<BeanInitNode
> result
= new ArrayList
<BeanInitNode
>(children
.values());
74 Collections
.sort(result
);
79 public String
getPath() {
83 public boolean hasChildren() {
84 return children
.size() > 0;
88 public boolean isWildcard() {
89 return path
.equals(AbstractBeanInitializer
.LOAD_2ONE_WILDCARD
) ||
90 path
.equals(AbstractBeanInitializer
.LOAD_2ONE_2MANY_WILDCARD
);
93 public boolean isToManyWildcard() {
94 return path
.equals(AbstractBeanInitializer
.LOAD_2ONE_2MANY_WILDCARD
);
98 public int compareTo(BeanInitNode o
) {
99 String toMany
= AbstractBeanInitializer
.LOAD_2ONE_2MANY_WILDCARD
;
100 String toOne
= AbstractBeanInitializer
.LOAD_2ONE_WILDCARD
;
101 if (this.path
.equals(toMany
)){
103 }else if (o
.path
.equals(toMany
)){
105 }else if (this.path
.equals(toOne
)){
107 }else if (o
.path
.equals(toOne
)){
110 return path
.compareTo(o
.path
);
116 public String
toString() {
121 return parent
.toString() + ((parent
.parent
== null) ?
"" : ".") + path
;
125 public String
toStringTree() {
127 String result
= (path
.equals("")?
"/": path
) + "\n";
128 for (BeanInitNode child
: getChildrenList()){
129 result
+= toString() + "." + child
.toStringTree();
135 public boolean isInitializedIfSingle(){
136 return parent
.isToOneInitialized
;
139 public boolean isInitializedAny(){
140 return parent
.isToManyInitialized
;