001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.jellytools.properties.editors;
043:
044: import javax.swing.JDialog;
045: import javax.swing.ListModel;
046: import org.netbeans.jellytools.Bundle;
047: import org.netbeans.jellytools.NbDialogOperator;
048: import org.netbeans.jemmy.operators.JButtonOperator;
049: import org.netbeans.jemmy.operators.JDialogOperator;
050: import org.netbeans.jemmy.operators.JListOperator;
051: import org.netbeans.jemmy.operators.JTextFieldOperator;
052:
053: /** Class implementing all necessary methods for handling String Array Custom Editor
054: * @author <a href="mailto:adam.sotona@sun.com">Adam Sotona</a>
055: * @version 1.0 */
056: public class StringArrayCustomEditorOperator extends NbDialogOperator {
057:
058: /** Creates new StringArrayCustomEditorOperator
059: * @throws TimeoutExpiredException when NbDialog not found
060: * @param title String title of custom editor */
061: public StringArrayCustomEditorOperator(String title) {
062: super (title);
063: }
064:
065: /** Creates new StringArrayCustomEditorOperator
066: * @param wrapper JDialogOperator wrapper for custom editor */
067: public StringArrayCustomEditorOperator(JDialogOperator wrapper) {
068: super ((JDialog) wrapper.getSource());
069: }
070:
071: private JButtonOperator _btAdd;
072: private JButtonOperator _btRemove;
073: private JButtonOperator _btEdit;
074: private JButtonOperator _btUp;
075: private JButtonOperator _btDown;
076: private JListOperator _lstItemList;
077: private JTextFieldOperator _txtItemText;
078:
079: //******************************
080: // Subcomponents definition part
081: //******************************
082:
083: /** Tries to find "Edit" JButton in this dialog.
084: * @throws TimeoutExpiredException when component not found
085: * @return JButtonOperator
086: */
087: public JButtonOperator btEdit() {
088: if (_btEdit == null) {
089: _btEdit = new JButtonOperator(this , Bundle
090: .getStringTrimmed(
091: "org.netbeans.beaninfo.editors.Bundle",
092: "CTL_Change_StringArrayCustomEditor"));
093: }
094: return _btEdit;
095: }
096:
097: /** Tries to find "Down" JButton in this dialog.
098: * @throws TimeoutExpiredException when component not found
099: * @return JButtonOperator
100: */
101: public JButtonOperator btDown() {
102: if (_btDown == null) {
103: _btDown = new JButtonOperator(this , Bundle
104: .getStringTrimmed(
105: "org.netbeans.beaninfo.editors.Bundle",
106: "CTL_MoveDown"));
107: }
108: return _btDown;
109: }
110:
111: /** Tries to find "Up" JButton in this dialog.
112: * @throws TimeoutExpiredException when component not found
113: * @return JButtonOperator
114: */
115: public JButtonOperator btUp() {
116: if (_btUp == null) {
117: _btUp = new JButtonOperator(this , Bundle.getStringTrimmed(
118: "org.netbeans.beaninfo.editors.Bundle",
119: "CTL_MoveUp"));
120: }
121: return _btUp;
122: }
123:
124: /** Tries to find "Add" JButton in this dialog.
125: * @throws TimeoutExpiredException when component not found
126: * @return JButtonOperator
127: */
128: public JButtonOperator btAdd() {
129: if (_btAdd == null) {
130: _btAdd = new JButtonOperator(this , Bundle.getStringTrimmed(
131: "org.netbeans.beaninfo.editors.Bundle",
132: "CTL_Add_StringArrayCustomEditor"));
133: }
134: return _btAdd;
135: }
136:
137: /** Tries to find JList in this dialog.
138: * @throws TimeoutExpiredException when component not found
139: * @return JListOperator
140: */
141: public JListOperator lstItemList() {
142: if (_lstItemList == null) {
143: _lstItemList = new JListOperator(this );
144: }
145: return _lstItemList;
146: }
147:
148: /** Tries to find "Remove" JButton in this dialog.
149: * @throws TimeoutExpiredException when component not found
150: * @return JButtonOperator
151: */
152: public JButtonOperator btRemove() {
153: if (_btRemove == null) {
154: _btRemove = new JButtonOperator(this , Bundle
155: .getStringTrimmed(
156: "org.netbeans.beaninfo.editors.Bundle",
157: "CTL_Remove"));
158: }
159: return _btRemove;
160: }
161:
162: /** Tries to find null JTextField in this dialog.
163: * @throws TimeoutExpiredException when component not found
164: * @return JTextFieldOperator
165: */
166: public JTextFieldOperator txtItemText() {
167: if (_txtItemText == null) {
168: _txtItemText = new JTextFieldOperator(this );
169: }
170: return _txtItemText;
171: }
172:
173: /** clicks on "Edit" JButton
174: * @throws TimeoutExpiredException when JButton not found
175: */
176: public void edit() {
177: btEdit().push();
178: }
179:
180: /** clicks on "Down" JButton
181: * @throws TimeoutExpiredException when JButton not found
182: */
183: public void down() {
184: btDown().push();
185: }
186:
187: /** clicks on "Up" JButton
188: * @throws TimeoutExpiredException when JButton not found
189: */
190: public void up() {
191: btUp().push();
192: }
193:
194: /** clicks on "Add" JButton
195: * @throws TimeoutExpiredException when JButton not found
196: */
197: public void add() {
198: btAdd().push();
199: }
200:
201: /** clicks on "Remove" JButton
202: * @throws TimeoutExpiredException when JButton not found
203: */
204: public void remove() {
205: btRemove().push();
206: }
207:
208: /** Gets text from text field.
209: * @return String edited item text */
210: public String getItemText() {
211: return txtItemText().getText();
212: }
213:
214: /** tries to find and set text of txtItem
215: * @param text String text
216: */
217: public void setItemText(String text) {
218: txtItemText().clearText();
219: txtItemText().typeText(text);
220: }
221:
222: /** getter for array of Strings
223: * @return String[] array of strings from custom editor */
224: public String[] getStringArrayValue() {
225: ListModel lm = lstItemList().getModel();
226: String value[] = new String[lm.getSize()];
227: for (int i = 0; i < lm.getSize(); i++) {
228: value[i] = lm.getElementAt(i).toString();
229: }
230: return value;
231: }
232:
233: /** adds String to the edited array
234: * @param value String value to be added */
235: public void add(String value) {
236: setItemText(value);
237: add();
238: }
239:
240: /** removes String from array
241: * @param value String value to be removed */
242: public void remove(String value) {
243: lstItemList().selectItem(value);
244: remove();
245: }
246:
247: /** removes all Strings from array */
248: public void removeAll() {
249: while (lstItemList().getModel().getSize() > 0) {
250: lstItemList().selectItem(0);
251: remove();
252: }
253: }
254:
255: /** Replaces oldValue by newValue. It selects oldValue item in the list,
256: * types newValue into text field and pushes Edit button.
257: * @param oldValue value from list to be replaced
258: * @param newValue new value
259: */
260: public void edit(String oldValue, String newValue) {
261: lstItemList().selectItem(oldValue);
262: setItemText(newValue);
263: edit();
264: }
265:
266: /** Moves given item one position up. It select value item and pushes
267: * Up button. It fails, if item is the topmost and Up button is disabled.
268: * @param value item to be moved up
269: */
270: public void up(String value) {
271: lstItemList().selectItem(value);
272: up();
273: }
274:
275: /** Moves given item one position down. It select value item and pushes
276: * Down button. It fails, if item is the bottommost and Down button is disabled.
277: * @param value item to be moved down
278: */
279: public void down(String value) {
280: lstItemList().selectItem(value);
281: down();
282: }
283:
284: /** setter for String array
285: * @param value String[] array os Strings to be set */
286: public void setStringArrayValue(String[] value) {
287: removeAll();
288: for (int i = 0; i < value.length; i++)
289: add(value[i]);
290: }
291:
292: /** Performs verification by accessing all sub-components */
293: public void verify() {
294: btAdd();
295: btRemove();
296: btEdit();
297: btUp();
298: btDown();
299: lstItemList();
300: txtItemText();
301: }
302: }
|