KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > status > StatusManager


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.status;
7
8 import java.util.ArrayList JavaDoc;
9 import java.util.Arrays JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Iterator JavaDoc;
12 import java.util.List JavaDoc;
13 import java.util.ListIterator JavaDoc;
14 import java.util.Map JavaDoc;
15
16 import fr.jayasoft.ivy.Ivy;
17 import fr.jayasoft.ivy.util.Message;
18
19 /**
20  * Note: update methods (such as addStatus) should only be called BEFORE any call to accessor methods
21  * @author x.hanin
22  *
23  */

24 public class StatusManager {
25     public static StatusManager newDefaultInstance() {
26         return new StatusManager(new Status[] {
27                 new Status("release", false),
28                 new Status("milestone", false),
29                 new Status("integration", true)}, "integration");
30     }
31     
32     public static StatusManager getCurrent() {
33         return Ivy.getCurrent().getStatusManager();
34     }
35     
36     private List JavaDoc _status = new ArrayList JavaDoc();
37     private String JavaDoc _defaultStatus;
38     
39     // for easier querying only
40
private Map JavaDoc _statusPriorityMap;
41     private Map JavaDoc _statusIntegrationMap;
42     private String JavaDoc _deliveryStatusListString;
43
44     public StatusManager(Status[] status, String JavaDoc defaultStatus) {
45         _status.addAll(Arrays.asList(status));
46         _defaultStatus = defaultStatus;
47
48         computeMaps();
49     }
50     
51     public StatusManager() {
52     }
53     
54     public void addStatus(Status status) {
55         _status.add(status);
56     }
57
58     public void setDefaultStatus(String JavaDoc defaultStatus) {
59         _defaultStatus = defaultStatus;
60     }
61     
62     public List JavaDoc getStatuses() {
63         return _status;
64     }
65     
66     private void computeMaps() {
67         if (_status.isEmpty()) {
68             throw new IllegalStateException JavaDoc("badly configured statuses: no status found");
69         }
70         _statusPriorityMap = new HashMap JavaDoc();
71         for (ListIterator JavaDoc iter = _status.listIterator(); iter.hasNext();) {
72             Status status = (Status)iter.next();
73             _statusPriorityMap.put(status.getName(), new Integer JavaDoc(iter.previousIndex()));
74         }
75         _statusIntegrationMap = new HashMap JavaDoc();
76         for (Iterator JavaDoc iter = _status.iterator(); iter.hasNext();) {
77             Status status = (Status)iter.next();
78             _statusIntegrationMap.put(status.getName(), Boolean.valueOf(status.isIntegration()));
79         }
80     }
81     
82     public boolean isStatus(String JavaDoc status) {
83         if (_statusPriorityMap == null) {
84             computeMaps();
85         }
86         return _statusPriorityMap.containsKey(status);
87     }
88
89     public int getPriority(String JavaDoc status) {
90         if (_statusPriorityMap == null) {
91             computeMaps();
92         }
93         Integer JavaDoc priority = (Integer JavaDoc)_statusPriorityMap.get(status);
94         if (priority == null) {
95             Message.debug("unknown status "+status+": assuming lowest priority");
96             return Integer.MAX_VALUE;
97         }
98         return priority.intValue();
99     }
100     
101     public boolean isIntegration(String JavaDoc status) {
102         if (_statusIntegrationMap == null) {
103             computeMaps();
104         }
105         Boolean JavaDoc isIntegration = (Boolean JavaDoc)_statusIntegrationMap.get(status);
106         if (isIntegration == null) {
107             Message.debug("unknown status "+status+": assuming integration");
108             return true;
109         }
110         return isIntegration.booleanValue();
111     }
112
113     public String JavaDoc getDeliveryStatusListString() {
114         if (_deliveryStatusListString == null) {
115             StringBuffer JavaDoc ret = new StringBuffer JavaDoc();
116             for (Iterator JavaDoc iter = _status.iterator(); iter.hasNext();) {
117                 Status status = (Status)iter.next();
118                 if (!status.isIntegration()) {
119                     ret.append(status.getName()).append(",");
120                 }
121             }
122             if (ret.length() > 0) {
123                 ret.deleteCharAt(ret.length()-1);
124             }
125             _deliveryStatusListString = ret.toString();
126         }
127         return _deliveryStatusListString;
128     }
129
130     public String JavaDoc getDefaultStatus() {
131         if (_defaultStatus == null) {
132             if (_status.isEmpty()) {
133                 throw new IllegalStateException JavaDoc("badly configured statuses: no status found");
134             }
135             _defaultStatus = ((Status)_status.get(_status.size() - 1)).getName();
136         }
137         return _defaultStatus;
138     }
139 }
140
Popular Tags