001: /*******************************************************************************
002: * Copyright (c) 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.core.cheatsheet.comp;
011:
012: import java.io.PrintWriter;
013: import java.util.ArrayList;
014: import java.util.Iterator;
015: import java.util.List;
016:
017: import org.eclipse.pde.core.IModelChangedEvent;
018: import org.eclipse.pde.internal.core.XMLPrintHandler;
019: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModel;
020: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModelFactory;
021: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSObject;
022: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTask;
023: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup;
024: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject;
025: import org.w3c.dom.Element;
026:
027: /**
028: * CompCSTaskGroup
029: *
030: */
031: public class CompCSTaskGroup extends CompCSTaskObject implements
032: ICompCSTaskGroup {
033:
034: private ArrayList fFieldTaskObjects;
035:
036: /**
037: *
038: */
039: private static final long serialVersionUID = 1L;
040:
041: /**
042: * @param model
043: * @param parent
044: */
045: public CompCSTaskGroup(ICompCSModel model, ICompCSObject parent) {
046: super (model, parent);
047: reset();
048: }
049:
050: /* (non-Javadoc)
051: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSTaskObject#getChildren()
052: */
053: public List getChildren() {
054: ArrayList list = new ArrayList();
055: // Add task objects
056: if (fFieldTaskObjects.size() > 0) {
057: list.addAll(fFieldTaskObjects);
058: }
059: return list;
060: }
061:
062: /* (non-Javadoc)
063: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSTaskObject#getName()
064: */
065: public String getName() {
066: return fFieldName;
067: }
068:
069: /* (non-Javadoc)
070: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSTaskObject#getType()
071: */
072: public int getType() {
073: return TYPE_TASKGROUP;
074: }
075:
076: /* (non-Javadoc)
077: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSTaskObject#reset()
078: */
079: public void reset() {
080: super .reset();
081:
082: fFieldTaskObjects = new ArrayList();
083: }
084:
085: /* (non-Javadoc)
086: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#addFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
087: */
088: public void addFieldTaskObject(ICompCSTaskObject taskObject) {
089: fFieldTaskObjects.add(taskObject);
090: if (isEditable()) {
091: fireStructureChanged(taskObject, IModelChangedEvent.INSERT);
092: }
093: }
094:
095: /* (non-Javadoc)
096: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#addFieldTaskObject(int, org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
097: */
098: public void addFieldTaskObject(int index,
099: ICompCSTaskObject taskObject) {
100: if (index < 0) {
101: return;
102: }
103: if (index >= fFieldTaskObjects.size()) {
104: fFieldTaskObjects.add(taskObject);
105: } else {
106: fFieldTaskObjects.add(index, taskObject);
107: }
108:
109: if (isEditable()) {
110: fireStructureChanged(taskObject, IModelChangedEvent.INSERT);
111: }
112: }
113:
114: /* (non-Javadoc)
115: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#getFieldTaskObjectCount()
116: */
117: public int getFieldTaskObjectCount() {
118: return fFieldTaskObjects.size();
119: }
120:
121: /* (non-Javadoc)
122: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#getFieldTaskObjects()
123: */
124: public ICompCSTaskObject[] getFieldTaskObjects() {
125: return (ICompCSTaskObject[]) fFieldTaskObjects
126: .toArray(new ICompCSTaskObject[fFieldTaskObjects.size()]);
127: }
128:
129: /* (non-Javadoc)
130: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#hasFieldTaskObjects()
131: */
132: public boolean hasFieldTaskObjects() {
133: if (fFieldTaskObjects.isEmpty()) {
134: return false;
135: }
136: return true;
137: }
138:
139: /* (non-Javadoc)
140: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#indexOfFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
141: */
142: public int indexOfFieldTaskObject(ICompCSTaskObject taskObject) {
143: return fFieldTaskObjects.indexOf(taskObject);
144: }
145:
146: /* (non-Javadoc)
147: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#isFirstFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
148: */
149: public boolean isFirstFieldTaskObject(ICompCSTaskObject taskObject) {
150: int position = fFieldTaskObjects.indexOf(taskObject);
151: if (position == 0) {
152: return true;
153: }
154: return false;
155: }
156:
157: /* (non-Javadoc)
158: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#isLastFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
159: */
160: public boolean isLastFieldTaskObject(ICompCSTaskObject taskObject) {
161: int position = fFieldTaskObjects.indexOf(taskObject);
162: int lastPosition = fFieldTaskObjects.size() - 1;
163: if (position == lastPosition) {
164: return true;
165: }
166: return false;
167: }
168:
169: /* (non-Javadoc)
170: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#removeFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
171: */
172: public void removeFieldTaskObject(ICompCSTaskObject taskObject) {
173: fFieldTaskObjects.remove(taskObject);
174: if (isEditable()) {
175: fireStructureChanged(taskObject, IModelChangedEvent.REMOVE);
176: }
177: }
178:
179: /* (non-Javadoc)
180: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#removeFieldTaskObject(int)
181: */
182: public void removeFieldTaskObject(int index) {
183: if ((index < 0) || (index > (fFieldTaskObjects.size() - 1))) {
184: return;
185: }
186: ICompCSTaskObject taskObject = (ICompCSTaskObject) fFieldTaskObjects
187: .remove(index);
188: if (isEditable()) {
189: fireStructureChanged(taskObject, IModelChangedEvent.REMOVE);
190: }
191: }
192:
193: /* (non-Javadoc)
194: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSObject#parseElement(org.w3c.dom.Element)
195: */
196: protected void parseElement(Element element) {
197: super .parseElement(element);
198: String name = element.getNodeName();
199: ICompCSModelFactory factory = getModel().getFactory();
200:
201: if (name.equals(ELEMENT_TASK)) {
202: // Process task element
203: ICompCSTask task = factory.createCompCSTask(this );
204: fFieldTaskObjects.add(task);
205: task.parse(element);
206: } else if (name.equals(ELEMENT_TASKGROUP)) {
207: // Process taskGroup element
208: ICompCSTaskGroup taskGroup = factory
209: .createCompCSTaskGroup(this );
210: fFieldTaskObjects.add(taskGroup);
211: taskGroup.parse(element);
212: }
213: }
214:
215: /* (non-Javadoc)
216: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSTaskObject#writeElements(java.lang.String, java.io.PrintWriter)
217: */
218: protected void writeElements(String indent, PrintWriter writer) {
219: super .writeElements(indent, writer);
220: String newIndent = indent + XMLPrintHandler.XML_INDENT;
221: // Print dependency elements
222: Iterator iterator = fFieldTaskObjects.iterator();
223: while (iterator.hasNext()) {
224: ICompCSTaskObject taskObject = (ICompCSTaskObject) iterator
225: .next();
226: taskObject.write(newIndent, writer);
227: }
228: }
229:
230: /* (non-Javadoc)
231: * @see org.eclipse.pde.internal.core.cheatsheet.comp.CompCSObject#getElement()
232: */
233: public String getElement() {
234: return ELEMENT_TASKGROUP;
235: }
236:
237: /* (non-Javadoc)
238: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#getNextSibling(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
239: */
240: public ICompCSTaskObject getNextSibling(ICompCSTaskObject taskObject) {
241: int position = fFieldTaskObjects.indexOf(taskObject);
242: int lastIndex = fFieldTaskObjects.size() - 1;
243: if ((position == -1) || (position == lastIndex)) {
244: // Either the item was not found or the item was found but it is
245: // at the last index
246: return null;
247: }
248: return (ICompCSTaskObject) fFieldTaskObjects.get(position + 1);
249: }
250:
251: /* (non-Javadoc)
252: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#getPreviousSibling(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject)
253: */
254: public ICompCSTaskObject getPreviousSibling(
255: ICompCSTaskObject taskObject) {
256: int position = fFieldTaskObjects.indexOf(taskObject);
257: if ((position == -1) || (position == 0)) {
258: // Either the item was not found or the item was found but it is
259: // at the first index
260: return null;
261: }
262: return (ICompCSTaskObject) fFieldTaskObjects.get(position - 1);
263: }
264:
265: /* (non-Javadoc)
266: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskGroup#moveFieldTaskObject(org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSTaskObject, int)
267: */
268: public void moveFieldTaskObject(ICompCSTaskObject taskObject,
269: int newRelativeIndex) {
270: // Get the current index of the task object
271: int currentIndex = indexOfFieldTaskObject(taskObject);
272: // Ensure the object is found
273: if (currentIndex == -1) {
274: return;
275: }
276: // Calculate the new index
277: int newIndex = newRelativeIndex + currentIndex;
278: // Validate the new index
279: if ((newIndex < 0) || (newIndex >= fFieldTaskObjects.size())) {
280: return;
281: }
282: // Remove the task object
283: fFieldTaskObjects.remove(taskObject);
284: // Add the task object back at the specified index
285: fFieldTaskObjects.add(newIndex, taskObject);
286: // Send an insert event
287: if (isEditable()) {
288: fireStructureChanged(taskObject, IModelChangedEvent.INSERT);
289: }
290: }
291:
292: }
|