001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 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.jdt.internal.ui.actions;
011:
012: import java.util.ArrayList;
013: import java.util.List;
014:
015: import org.eclipse.jface.viewers.CheckboxTreeViewer;
016: import org.eclipse.jface.viewers.ITreeContentProvider;
017: import org.eclipse.jface.viewers.StructuredSelection;
018: import org.eclipse.jface.viewers.Viewer;
019:
020: import org.eclipse.jdt.core.JavaModelException;
021:
022: public class GenerateConstructorUsingFieldsContentProvider implements
023: ITreeContentProvider {
024:
025: private static final Object[] EMPTY = new Object[0];
026:
027: private List fFields;
028: private List fSelected;
029:
030: public GenerateConstructorUsingFieldsContentProvider(
031: List/*IVariableBinding*/fields,
032: List/*IVariableBinding*/selected)
033: throws JavaModelException {
034: fFields = fields;
035: fSelected = selected;
036: }
037:
038: public boolean canMoveDown(List selectedElements) {
039: int nSelected = selectedElements.size();
040: for (int index = fFields.size() - 1; index >= 0
041: && nSelected > 0; index--) {
042: if (!selectedElements.contains(fFields.get(index))) {
043: return true;
044: }
045: nSelected--;
046: }
047: return false;
048: }
049:
050: public boolean canMoveUp(List selected) {
051: int nSelected = selected.size();
052: for (int index = 0; index < fFields.size() && nSelected > 0; index++) {
053: if (!selected.contains(fFields.get(index))) {
054: return true;
055: }
056: nSelected--;
057: }
058: return false;
059: }
060:
061: /*
062: * @see IContentProvider#dispose()
063: */
064: public void dispose() {
065: }
066:
067: public void down(List checked, CheckboxTreeViewer tree) {
068: if (checked.size() > 0) {
069: setElements(reverse(moveUp(reverse(fFields), checked)),
070: tree);
071: tree.reveal(checked.get(checked.size() - 1));
072: }
073: tree.setSelection(new StructuredSelection(checked));
074: }
075:
076: /*
077: * @see ITreeContentProvider#getChildren(Object)
078: */
079: public Object[] getChildren(Object parentElement) {
080: return EMPTY;
081: }
082:
083: /*
084: * @see IStructuredContentProvider#getElements(Object)
085: */
086: public Object[] getElements(Object inputElement) {
087: return fFields.toArray();
088: }
089:
090: public List getFieldsList() {
091: return fFields;
092: }
093:
094: public Object[] getInitiallySelectedElements() {
095: if (fSelected.isEmpty())
096: return getElements(null);
097: return fSelected.toArray();
098: }
099:
100: /*
101: * @see ITreeContentProvider#getParent(Object)
102: */
103: public Object getParent(Object element) {
104: return null;
105: }
106:
107: /*
108: * @see ITreeContentProvider#hasChildren(Object)
109: */
110: public boolean hasChildren(Object element) {
111: return getChildren(element).length > 0;
112: }
113:
114: /*
115: * @see IContentProvider#inputChanged(Viewer, Object, Object)
116: */
117: public void inputChanged(Viewer viewer, Object oldInput,
118: Object newInput) {
119: }
120:
121: private List moveUp(List elements, List move) {
122: List result = new ArrayList(elements.size());
123: Object floating = null;
124: for (int index = 0; index < elements.size(); index++) {
125: Object current = elements.get(index);
126: if (move.contains(current)) {
127: result.add(current);
128: } else {
129: if (floating != null) {
130: result.add(floating);
131: }
132: floating = current;
133: }
134: }
135: if (floating != null) {
136: result.add(floating);
137: }
138: return result;
139: }
140:
141: private List reverse(List list) {
142: List reverse = new ArrayList(list.size());
143: for (int index = list.size() - 1; index >= 0; index--) {
144: reverse.add(list.get(index));
145: }
146: return reverse;
147: }
148:
149: public void setElements(List elements, CheckboxTreeViewer tree) {
150: fFields = new ArrayList(elements);
151: if (tree != null)
152: tree.refresh();
153: }
154:
155: public void up(List checked, CheckboxTreeViewer tree) {
156: if (checked.size() > 0) {
157: setElements(moveUp(fFields, checked), tree);
158: tree.reveal(checked.get(0));
159: }
160: tree.setSelection(new StructuredSelection(checked));
161: }
162: }
|