1 6 package fr.jayasoft.ivy.status; 7 8 import java.util.ArrayList ; 9 import java.util.Arrays ; 10 import java.util.HashMap ; 11 import java.util.Iterator ; 12 import java.util.List ; 13 import java.util.ListIterator ; 14 import java.util.Map ; 15 16 import fr.jayasoft.ivy.Ivy; 17 import fr.jayasoft.ivy.util.Message; 18 19 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 _status = new ArrayList (); 37 private String _defaultStatus; 38 39 private Map _statusPriorityMap; 41 private Map _statusIntegrationMap; 42 private String _deliveryStatusListString; 43 44 public StatusManager(Status[] status, String 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 defaultStatus) { 59 _defaultStatus = defaultStatus; 60 } 61 62 public List getStatuses() { 63 return _status; 64 } 65 66 private void computeMaps() { 67 if (_status.isEmpty()) { 68 throw new IllegalStateException ("badly configured statuses: no status found"); 69 } 70 _statusPriorityMap = new HashMap (); 71 for (ListIterator iter = _status.listIterator(); iter.hasNext();) { 72 Status status = (Status)iter.next(); 73 _statusPriorityMap.put(status.getName(), new Integer (iter.previousIndex())); 74 } 75 _statusIntegrationMap = new HashMap (); 76 for (Iterator 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 status) { 83 if (_statusPriorityMap == null) { 84 computeMaps(); 85 } 86 return _statusPriorityMap.containsKey(status); 87 } 88 89 public int getPriority(String status) { 90 if (_statusPriorityMap == null) { 91 computeMaps(); 92 } 93 Integer priority = (Integer )_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 status) { 102 if (_statusIntegrationMap == null) { 103 computeMaps(); 104 } 105 Boolean isIntegration = (Boolean )_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 getDeliveryStatusListString() { 114 if (_deliveryStatusListString == null) { 115 StringBuffer ret = new StringBuffer (); 116 for (Iterator 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 getDefaultStatus() { 131 if (_defaultStatus == null) { 132 if (_status.isEmpty()) { 133 throw new IllegalStateException ("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 |