001: /**
002: * ProjectImpl.java
003: * Created on 11.02.2003, 23:06:22 Alex
004: * Package: net.sf.memoranda
005: *
006: * @author Alex V. Alishevskikh, alex@openmechanics.net
007: * Copyright (c) 2003 Memoranda Team. http://memoranda.sf.net
008: */package net.sf.memoranda;
009:
010: import net.sf.memoranda.date.CalendarDate;
011: import net.sf.memoranda.date.CurrentDate;
012: import nu.xom.Attribute;
013: import nu.xom.Element;
014:
015: /**
016: * Default implementation of Project interface
017: */
018: /*$Id: ProjectImpl.java,v 1.7 2004/11/22 10:02:37 alexeya Exp $*/
019: public class ProjectImpl implements Project {
020:
021: private Element _root = null;
022:
023: /**
024: * Constructor for ProjectImpl.
025: */
026: public ProjectImpl(Element root) {
027: _root = root;
028: }
029:
030: /**
031: * @see net.sf.memoranda.Project#getID()
032: */
033: public String getID() {
034: return _root.getAttribute("id").getValue();
035: }
036:
037: /**
038: * @see net.sf.memoranda.Project#getStartDate()
039: */
040: public CalendarDate getStartDate() {
041: Attribute d = _root.getAttribute("startDate");
042: if (d == null)
043: return null;
044: return new CalendarDate(d.getValue());
045: }
046:
047: /**
048: * @see net.sf.memoranda.Project#setStartDate(net.sf.memoranda.util.CalendarDate)
049: */
050: public void setStartDate(CalendarDate date) {
051: if (date != null)
052: setAttr("startDate", date.toString());
053: }
054:
055: /**
056: * @see net.sf.memoranda.Project#getEndDate()
057: */
058: public CalendarDate getEndDate() {
059: Attribute d = _root.getAttribute("endDate");
060: if (d == null)
061: return null;
062: return new CalendarDate(d.getValue());
063: }
064:
065: /**
066: * @see net.sf.memoranda.Project#setEndDate(net.sf.memoranda.util.CalendarDate)
067: */
068: public void setEndDate(CalendarDate date) {
069: if (date != null)
070: setAttr("endDate", date.toString());
071: else if (_root.getAttribute("endDate") != null)
072: setAttr("endDate", null);
073: }
074:
075: /**
076: * @see net.sf.memoranda.Project#getStatus()
077: */
078: public int getStatus() {
079: if (isFrozen())
080: return Project.FROZEN;
081: CalendarDate today = CurrentDate.get();
082: CalendarDate prStart = getStartDate();
083: CalendarDate prEnd = getEndDate();
084: if (prEnd == null) {
085: if (today.before(prStart))
086: return Project.SCHEDULED;
087: else
088: return Project.ACTIVE;
089: }
090: if (today.inPeriod(prStart, prEnd))
091: return Project.ACTIVE;
092: else if (today.after(prEnd)) {
093: //if (getProgress() == 100)
094: return Project.COMPLETED;
095: /*else
096: return Project.FAILED;*/
097: } else
098: return Project.SCHEDULED;
099: }
100:
101: private boolean isFrozen() {
102: return _root.getAttribute("frozen") != null;
103: }
104:
105: /*public int getProgress() {
106: Vector v = getAllTasks();
107: if (v.size() == 0) return 0;
108: int p = 0;
109: for (Enumeration en = v.elements(); en.hasMoreElements();) {
110: Task t = (Task) en.nextElement();
111: p += t.getProgress();
112: }
113: return (p*100)/(v.size()*100);
114: }*/
115:
116: /**
117: * @see net.sf.memoranda.Project#freeze()
118: */
119: public void freeze() {
120: _root.addAttribute(new Attribute("frozen", "yes"));
121: }
122:
123: /**
124: * @see net.sf.memoranda.Project#unfreeze()
125: */
126: public void unfreeze() {
127: if (this .isFrozen())
128: _root.removeAttribute(new Attribute("frozen", "yes"));
129: }
130:
131: /**
132: * @see net.sf.memoranda.Project#getTitle()
133: */
134: public String getTitle() {
135: Attribute ta = _root.getAttribute("title");
136: if (ta != null)
137: return ta.getValue();
138: return "";
139: }
140:
141: /**
142: * @see net.sf.memoranda.Project#setTitle(java.lang.String)
143: */
144: public void setTitle(String title) {
145: setAttr("title", title);
146: }
147:
148: private void setAttr(String name, String value) {
149: Attribute a = _root.getAttribute(name);
150: if (a == null) {
151: if (value != null)
152: _root.addAttribute(new Attribute(name, value));
153: } else if (value != null)
154: a.setValue(value);
155: else
156: _root.removeAttribute(a);
157: }
158:
159: public String getDescription() {
160: Element this Element = _root.getFirstChildElement("description");
161: if (this Element == null) {
162: return null;
163: } else {
164: return this Element.getValue();
165: }
166: }
167:
168: public void setDescription(String s) {
169: Element desc = _root.getFirstChildElement("description");
170: if (desc == null) {
171: desc = new Element("description");
172: desc.appendChild(s);
173: _root.appendChild(desc);
174: } else {
175: desc.removeChildren();
176: desc.appendChild(s);
177: }
178: }
179:
180: /**
181: * @see net.sf.memoranda.Project#getTaskList()
182: */
183: /*public TaskList getTaskList() {
184: return CurrentStorage.get().openTaskList(this);
185: }*/
186: /**
187: * @see net.sf.memoranda.Project#getNoteList()
188: */
189: /*public NoteList getNoteList() {
190: return CurrentStorage.get().openNoteList(this);
191: }*/
192: /**
193: * @see net.sf.memoranda.Project#getResourcesList()
194: */
195: /*public ResourcesList getResourcesList() {
196: return CurrentStorage.get().openResourcesList(this);
197: }*/
198: }
|