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: * If you wish your version of this file to be governed by only the CDDL
025: * or only the GPL Version 2, indicate your decision by adding
026: * "[Contributor] elects to include this software in this distribution
027: * under the [CDDL or GPL Version 2] license." If you do not indicate a
028: * single choice of license, a recipient has the option to distribute
029: * your version of this file under either the CDDL, the GPL Version 2 or
030: * to extend the choice of license to its licensees as provided above.
031: * However, if you add GPL Version 2 code and therefore, elected the GPL
032: * Version 2 license, then the option applies only if the new code is
033: * made subject to such option by the copyright holder.
034: *
035: * Contributor(s):
036: *
037: * Portions Copyrighted 2008 Sun Microsystems, Inc.
038: */
039: package org.netbeans.modules.bpel.design.actions;
040:
041: import java.awt.event.ActionEvent;
042: import java.util.Iterator;
043: import org.netbeans.modules.bpel.design.DesignView;
044: import org.netbeans.modules.bpel.design.DiagramView;
045: import org.netbeans.modules.bpel.design.model.patterns.Pattern;
046:
047: public class TabToNextComponentAction extends DesignModeAction {
048:
049: private static final long serialVersionUID = 1L;
050: private boolean forward;
051:
052: public TabToNextComponentAction(DesignView view, boolean forward) {
053: super (view);
054: this .forward = forward;
055: }
056:
057: public void actionPerformed(ActionEvent e) {
058:
059: DesignView view = getDesignView();
060: Pattern nextPattern = getNextPattern();
061: if (view.isDesignMode()) {
062: if (nextPattern != null) {
063: view.getSelectionModel()
064: .setSelectedPattern(nextPattern);
065: view.scrollSelectedToView();
066: }
067: // } else {
068: // PlaceHolder nextPh = getPlaceHolderIterator().next();
069: // if (nextPh != null) {
070: // getPhSelectionModel().setSelectedPlaceHolder(nextPh);
071: // scrollPlaceHolderToView(nextPh);
072: // repaint();
073: // }
074: // }
075: }
076: }
077:
078: private Pattern getNextPattern() {
079: DesignView view = getDesignView();
080:
081: Pattern current = view.getSelectionModel().getSelectedPattern();
082: if (current == null) {
083: return null;
084: }
085: DiagramView current_view = current.getView();
086:
087: Pattern next = getNextInView(current);
088: if (next != null) {
089: return next;
090: }
091:
092: DiagramView next_view = getNextView(current_view);
093:
094: if (next_view == null) {
095: return null;
096: }
097: return getFirstInView(next_view);
098:
099: }
100:
101: private Pattern getNextInView(Pattern pattern) {
102: DiagramView current_view = pattern.getView();
103: Iterator<Pattern> it = current_view.getPatterns();
104:
105: Pattern prev = null;
106: while (it.hasNext()) {
107: Pattern p = it.next();
108: if (p == pattern) {
109: if (forward) {
110: return it.hasNext() ? it.next() : null;
111: } else {
112: return prev;
113: }
114:
115: }
116: prev = p;
117: }
118: return null;
119: }
120:
121: private Pattern getFirstInView(DiagramView view) {
122: Iterator<Pattern> it = view.getPatterns();
123: if (forward) {
124: return it.hasNext() ? it.next() : null;
125: } else {
126: Pattern last = null;
127: while (it.hasNext()) {
128: last = it.next();
129: }
130: return last;
131: }
132: }
133:
134: private DiagramView getNextView(DiagramView view) {
135: DesignView designView = getDesignView();
136: if (view == designView.getConsumersView()) {
137: return forward ? designView.getProcessView() : designView
138: .getProvidersView();
139: } else if (view == designView.getProcessView()) {
140: return forward ? designView.getProvidersView() : designView
141: .getConsumersView();
142: } else if (view == designView.getProvidersView()) {
143: return forward ? designView.getConsumersView() : designView
144: .getProcessView();
145: }
146: return null;
147: }
148:
149: }
|