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-2007 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: package org.netbeans.jellytools;
042:
043: import org.netbeans.jellytools.actions.NewProjectAction;
044: import org.netbeans.jellytools.nodes.Node;
045: import org.netbeans.jemmy.JemmyException;
046: import org.netbeans.jemmy.TimeoutExpiredException;
047: import org.netbeans.jemmy.Waitable;
048: import org.netbeans.jemmy.Waiter;
049: import org.netbeans.jemmy.operators.*;
050: import javax.swing.tree.TreePath;
051:
052: /**
053: * Handles NetBeans New Project wizard and its components
054: * Categories and Projecs.
055: * It is invoked from main menu File -> New Project... <br>
056: * Usage:
057: * <pre>
058: * NewProjectWizardOperator npwop = NewProjectWizardOperator.invoke();
059: * npwop.selectCategory("Standard");
060: * npwop.selectProject("Java Application");
061: * npwop.next();
062: * npwop.getDescription();
063: * </pre>
064: * @author tb115823
065: */
066: public class NewProjectWizardOperator extends WizardOperator {
067:
068: private JLabelOperator _lblCategories;
069: private JLabelOperator _lblProjects;
070: private JTreeOperator _treeCategories;
071: private JListOperator _lstProjects;
072: private JLabelOperator _lblDescription;
073: private JEditorPaneOperator _txtDescription;
074:
075: /** Creates new NewProjectWizardOperator that can handle it.
076: */
077: public NewProjectWizardOperator() {
078: super (Bundle.getString(
079: "org.netbeans.modules.project.ui.Bundle",
080: "LBL_NewProjectWizard_Subtitle"));
081: }
082:
083: /** Waits for wizard with given title.
084: * @param title title of wizard
085: */
086: public NewProjectWizardOperator(String title) {
087: super (title);
088: }
089:
090: /** Invokes new wizard and returns instance of NewProjectWizardOperator.
091: * @return instance of NewProjectWizardOperator
092: */
093: public static NewProjectWizardOperator invoke() {
094: new NewProjectAction().perform();
095: return new NewProjectWizardOperator();
096: }
097:
098: /** Invokes new wizard and returns instance of NewProjectWizardOperator.
099: * @param title initial title of New Project Wizard
100: * @return instance of NewProjectWizardOperator
101: */
102: public static NewProjectWizardOperator invoke(String title) {
103: new NewProjectAction().perform();
104: return new NewProjectWizardOperator(title);
105: }
106:
107: /** Selects given project category
108: * @param category name of the category to select
109: */
110: public void selectCategory(String category) {
111: // we need to wait until some node is selected because 'please, wait' node
112: // is shown before tree is initialized. Then we can change selection.
113: try {
114: new Waiter(new Waitable() {
115: public Object actionProduced(Object param) {
116: return treeCategories().isSelectionEmpty() ? null
117: : Boolean.TRUE;
118: }
119:
120: public String getDescription() {
121: return ("Wait node is selected");
122: }
123: }).waitAction(null);
124: } catch (InterruptedException e) {
125: throw new JemmyException("Interrupted.", e);
126: } catch (TimeoutExpiredException tee) {
127: // ignore it because sometimes can happen that no category is selected by default
128: }
129: new Node(treeCategories(), category).select();
130: }
131:
132: /** Selects given project
133: * @param project name of project to select
134: */
135: public void selectProject(String project) {
136: lstProjects().selectItem(project);
137: }
138:
139: /** Tries to find "Categories:" JLabel in this dialog.
140: * @return JLabelOperator
141: */
142: public JLabelOperator lblCategories() {
143: if (_lblCategories == null) {
144: _lblCategories = new JLabelOperator(this , Bundle
145: .getStringTrimmed(
146: "org.netbeans.modules.project.ui.Bundle",
147: "CTL_Categories"));
148: }
149: return _lblCategories;
150: }
151:
152: /** Tries to find "Projects:" JLabel in this dialog.
153: * @return JLabelOperator
154: */
155: public JLabelOperator lblProjects() {
156: if (_lblProjects == null) {
157: _lblProjects = new JLabelOperator(this , Bundle
158: .getStringTrimmed(
159: "org.netbeans.modules.project.ui.Bundle",
160: "CTL_Projects"));
161: }
162: return _lblProjects;
163: }
164:
165: /** Tries to find null TreeView$ExplorerTree in this dialog.
166: * @return JTreeOperator
167: */
168: public JTreeOperator treeCategories() {
169: if (_treeCategories == null) {
170: _treeCategories = new JTreeOperator(this );
171: }
172: return _treeCategories;
173: }
174:
175: /** returns selected path in treeCategories
176: * @return TreePath
177: */
178: public TreePath getSelectedCategory() {
179: return treeCategories().getSelectionPath();
180: }
181:
182: /** Tries to find null ListView$NbList in this dialog.
183: * @return JListOperator
184: */
185: public JListOperator lstProjects() {
186: if (_lstProjects == null) {
187: _lstProjects = new JListOperator(this , 1);
188: }
189: return _lstProjects;
190: }
191:
192: /** returns selected item for lstProject
193: * @return selected project
194: */
195: public String getSelectedProject() {
196: return lstProjects().getSelectedValue().toString();
197: }
198:
199: /** Tries to find "Description:" JLabel in this dialog.
200: * @return JLabelOperator
201: */
202: public JLabelOperator lblDescription() {
203: if (_lblDescription == null) {
204: _lblDescription = new JLabelOperator(this , Bundle
205: .getStringTrimmed(
206: "org.netbeans.modules.project.ui.Bundle",
207: "CTL_Description"));
208: }
209: return _lblDescription;
210: }
211:
212: /** Tries to find null JEditorPane in this dialog.
213: * @return JEditorPaneOperator
214: */
215: public JEditorPaneOperator txtDescription() {
216: if (_txtDescription == null) {
217: _txtDescription = new JEditorPaneOperator(this );
218: }
219: return _txtDescription;
220: }
221:
222: /** gets text for txtDescription
223: * @return String text
224: */
225: public String getDescription() {
226: return txtDescription().getText();
227: }
228:
229: /** Pushes "Finish" button and waits until wizard dismisses. Then waits for
230: * Opening Projects dialog and waits until it dismisses too.
231: */
232: @Override
233: public void finish() {
234: btFinish().pushNoBlock();
235: getTimeouts().setTimeout("ComponentOperator.WaitStateTimeout",
236: 120000);
237: waitClosed();
238: // Opening Projects
239: String openingProjectsTitle = Bundle.getString(
240: "org.netbeans.modules.project.ui.Bundle",
241: "LBL_Opening_Projects_Progress");
242: NbDialogOperator openingOper;
243: try {
244: openingOper = new NbDialogOperator(openingProjectsTitle);
245: } catch (TimeoutExpiredException e) {
246: // ignore and return when progress dialog was closed before we started to wait for it
247: return;
248: }
249: // wait at most 120 second until progress dialog dismiss
250: openingOper.getTimeouts().setTimeout(
251: "ComponentOperator.WaitStateTimeout", 120000);
252: openingOper.waitClosed();
253: }
254:
255: /** Performs verification of NewProjectWizardOperator by accessing all its components.
256: */
257: @Override
258: public void verify() {
259: lblCategories();
260: lblProjects();
261: treeCategories();
262: lstProjects();
263: lblDescription();
264: txtDescription();
265: }
266:
267: }
|