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.modules.bpel.refactoring;
042:
043: import java.util.List;
044:
045: import org.netbeans.modules.bpel.model.api.BooleanExpr;
046: import org.netbeans.modules.bpel.model.api.BpelEntity;
047: import org.netbeans.modules.bpel.model.api.Branches;
048: import org.netbeans.modules.bpel.model.api.Catch;
049: import org.netbeans.modules.bpel.model.api.CompensateScope;
050: import org.netbeans.modules.bpel.model.api.ContentElement;
051: import org.netbeans.modules.bpel.model.api.Correlation;
052: import org.netbeans.modules.bpel.model.api.CorrelationSet;
053: import org.netbeans.modules.bpel.model.api.DeadlineExpression;
054: import org.netbeans.modules.bpel.model.api.FinalCounterValue;
055: import org.netbeans.modules.bpel.model.api.For;
056: import org.netbeans.modules.bpel.model.api.From;
057: import org.netbeans.modules.bpel.model.api.FromPart;
058: import org.netbeans.modules.bpel.model.api.Import;
059: import org.netbeans.modules.bpel.model.api.Invoke;
060: import org.netbeans.modules.bpel.model.api.OnEvent;
061: import org.netbeans.modules.bpel.model.api.OnMessage;
062: import org.netbeans.modules.bpel.model.api.PartnerLink;
063: import org.netbeans.modules.bpel.model.api.Receive;
064: import org.netbeans.modules.bpel.model.api.RepeatEvery;
065: import org.netbeans.modules.bpel.model.api.Reply;
066: import org.netbeans.modules.bpel.model.api.Scope;
067: import org.netbeans.modules.bpel.model.api.Source;
068: import org.netbeans.modules.bpel.model.api.StartCounterValue;
069: import org.netbeans.modules.bpel.model.api.Target;
070: import org.netbeans.modules.bpel.model.api.Throw;
071: import org.netbeans.modules.bpel.model.api.To;
072: import org.netbeans.modules.bpel.model.api.ToPart;
073: import org.netbeans.modules.bpel.model.api.Validate;
074: import org.netbeans.modules.bpel.model.api.Variable;
075: import org.netbeans.modules.bpel.model.api.VariableDeclaration;
076: import org.netbeans.modules.bpel.model.api.references.BpelReference;
077: import org.netbeans.modules.bpel.model.api.references.WSDLReference;
078: import org.netbeans.modules.bpel.model.api.support.ImportHelper;
079: import org.netbeans.modules.bpel.model.api.support.SimpleBpelModelVisitorAdaptor;
080:
081: import org.netbeans.modules.xml.xam.Component;
082: import org.netbeans.modules.xml.xam.Named;
083: import org.netbeans.modules.xml.xam.Referenceable;
084: import org.netbeans.modules.xml.wsdl.model.extensions.bpel.CorrelationProperty;
085: import static org.netbeans.modules.soa.ui.util.UI.*;
086:
087: /**
088: * @author Vladimir Yaroslavskiy
089: * @version 2006.06.14
090: */
091: final class BpelVisitor extends SimpleBpelModelVisitorAdaptor {
092:
093: BpelVisitor(List<Component> usage, Referenceable target) {
094: if (target instanceof Named) {
095: Named named = (Named) target;
096: myXPath = new XPath(usage, named, named.getName());
097: }
098: myUsage = usage;
099: myTarget = target;
100: }
101:
102: @Override
103: public void visit(Import _import) {
104: //out();
105: //out("[IMPORT] location: " + _import.getLocation());
106: if (ImportHelper.getWsdlModel(_import) == myTarget
107: || ImportHelper.getSchemaModel(_import) == myTarget) {
108: myUsage.add(_import);
109: }
110: }
111:
112: @Override
113: public void visit(PartnerLink partnerLink) {
114: //out();
115: //out("[PARTNER LINK]: " + Util.getName(partnerLink));
116: Util.visit(partnerLink.getPartnerLinkType(), myTarget,
117: partnerLink, myUsage);
118: Util.visit(partnerLink.getMyRole(), myTarget, partnerLink,
119: myUsage);
120: Util.visit(partnerLink.getPartnerRole(), myTarget, partnerLink,
121: myUsage);
122: }
123:
124: @Override
125: public void visit(Validate validate) {
126: List<BpelReference<VariableDeclaration>> variables = validate
127: .getVaraibles();
128:
129: if (variables == null) {
130: return;
131: }
132: for (BpelReference<VariableDeclaration> variable : variables) {
133: Util.visit(variable, myTarget, validate, myUsage);
134: }
135: }
136:
137: @Override
138: public void visit(StartCounterValue value) {
139: //out();
140: //out("[START COUNTER]: " + Util.getName(value));
141: visitContentElement(value);
142: }
143:
144: @Override
145: public void visit(FinalCounterValue value) {
146: //out();
147: //out("[FINAL COUNTER]: " + Util.getName(value));
148: visitContentElement(value);
149: }
150:
151: @Override
152: public void visit(Branches branches) {
153: //out();
154: //out("[BRANCHES]: " + Util.getName(branches));
155: visitContentElement(branches);
156: }
157:
158: @Override
159: public void visit(BooleanExpr booleanExpression) {
160: //out();
161: //out("[BOOLEAN EXPRESSION]: " + Util.getName(booleanExpression));
162: visitContentElement(booleanExpression);
163: }
164:
165: @Override
166: public void visit(RepeatEvery repeatEvery) {
167: //out();
168: //out("[REPEAT EVERY]: " + Util.getName(repeatEvery));
169: visitContentElement(repeatEvery);
170: }
171:
172: @Override
173: public void visit(DeadlineExpression deadline) {
174: //out();
175: //out("[DEADLNE]: " + Util.getName(deadline));
176: visitContentElement(deadline);
177: }
178:
179: @Override
180: public void visit(For _for) {
181: //out();
182: //out("[FOR]: " + Util.getName(_for));
183: visitContentElement(_for);
184: }
185:
186: @Override
187: public void visit(CorrelationSet correlationSet) {
188: List<WSDLReference<CorrelationProperty>> references = correlationSet
189: .getProperties();
190:
191: if (references == null) {
192: return;
193: }
194: for (WSDLReference<CorrelationProperty> reference : references) {
195: Util.visit(reference, myTarget, correlationSet, myUsage);
196: }
197: }
198:
199: @Override
200: public void visit(Correlation correlation) {
201: Util
202: .visit(correlation.getSet(), myTarget, correlation,
203: myUsage);
204: }
205:
206: @Override
207: public void visit(Source source) {
208: Util.visit(source.getLink(), myTarget, source, myUsage);
209: }
210:
211: @Override
212: public void visit(Target target) {
213: Util.visit(target.getLink(), myTarget, target, myUsage);
214: }
215:
216: @Override
217: public void visit(From from) {
218: //out();
219: //out();
220: //out("[FROM]: " + Util.getName(from));
221: Util.visit(from.getPart(), myTarget, from, myUsage);
222: Util.visit(from.getProperty(), myTarget, from, myUsage);
223: Util.visit(from.getVariable(), myTarget, from, myUsage);
224: Util.visit(from.getPartnerLink(), myTarget, from, myUsage);
225: visitContentElement(from);
226: }
227:
228: @Override
229: public void visit(FromPart fromPart) {
230: Util.visit(fromPart.getToVariable(), myTarget, fromPart,
231: myUsage);
232: }
233:
234: @Override
235: public void visit(To to) {
236: //out();
237: //out();
238: //out("[TO]: " + Util.getName(to));
239: Util.visit(to.getPart(), myTarget, to, myUsage);
240: Util.visit(to.getProperty(), myTarget, to, myUsage);
241: Util.visit(to.getVariable(), myTarget, to, myUsage);
242: Util.visit(to.getPartnerLink(), myTarget, to, myUsage);
243: visitContentElement(to);
244: }
245:
246: @Override
247: public void visit(ToPart toPart) {
248: Util.visit(toPart.getFromVariable(), myTarget, toPart, myUsage);
249: }
250:
251: private void visitContentElement(BpelEntity entity) {
252: //out("[CONTENT]: " + ((ContentElement) entity).getContent());
253: if (myXPath != null) {
254: myXPath.visit(((ContentElement) entity).getContent(),
255: entity);
256: }
257: }
258:
259: @Override
260: public void visit(OnEvent event) {
261: //out();
262: //out("[EVENT]: " + Util.getName(event));
263: Util.visit(event.getMessageType(), myTarget, event, myUsage);
264: Util.visit(event.getPortType(), myTarget, event, myUsage);
265: Util.visit(event.getOperation(), myTarget, event, myUsage);
266: Util
267: .visit(event.getMessageExchange(), myTarget, event,
268: myUsage);
269: Util.visit(event.getPartnerLink(), myTarget, event, myUsage);
270: }
271:
272: @Override
273: public void visit(OnMessage message) {
274: //out();
275: //out("[MESSAGE]: " + Util.getName(message));
276: Util.visit(message.getPortType(), myTarget, message, myUsage);
277: Util.visit(message.getOperation(), myTarget, message, myUsage);
278: Util.visit(message.getMessageExchange(), myTarget, message,
279: myUsage);
280: Util.visit(message.getVariable(), myTarget, message, myUsage);
281: Util
282: .visit(message.getPartnerLink(), myTarget, message,
283: myUsage);
284: }
285:
286: @Override
287: public void visit(Catch _catch) {
288: //out();
289: //out("[CATCH]: " + Util.getName(_catch));
290: Util.visit(_catch.getFaultMessageType(), myTarget, _catch,
291: myUsage);
292: Util.visit(_catch.getFaultName(), myTarget, _catch, myUsage);
293: Util.visit(_catch.getFaultElement(), myTarget, _catch, myUsage);
294: }
295:
296: @Override
297: public void visit(Reply reply) {
298: //out();
299: //out("[REPLY]: " + Util.getName(reply));
300: Util.visit(reply.getFaultName(), myTarget, reply, myUsage);
301: Util.visit(reply.getPortType(), myTarget, reply, myUsage);
302: Util.visit(reply.getOperation(), myTarget, reply, myUsage);
303: Util
304: .visit(reply.getMessageExchange(), myTarget, reply,
305: myUsage);
306: Util.visit(reply.getVariable(), myTarget, reply, myUsage);
307: Util.visit(reply.getPartnerLink(), myTarget, reply, myUsage);
308: }
309:
310: @Override
311: public void visit(Receive receive) {
312: //out();
313: //out("[RECEIVE]: " + Util.getName(receive));
314: Util.visit(receive.getPortType(), myTarget, receive, myUsage);
315: Util.visit(receive.getOperation(), myTarget, receive, myUsage);
316: Util.visit(receive.getMessageExchange(), myTarget, receive,
317: myUsage);
318: Util.visit(receive.getVariable(), myTarget, receive, myUsage);
319: Util
320: .visit(receive.getPartnerLink(), myTarget, receive,
321: myUsage);
322: }
323:
324: @Override
325: public void visit(Invoke invoke) {
326: //out();
327: //out("[INVOKE]: " + Util.getName(invoke));
328: Util.visit(invoke.getPortType(), myTarget, invoke, myUsage);
329: Util.visit(invoke.getOperation(), myTarget, invoke, myUsage);
330: Util
331: .visit(invoke.getInputVariable(), myTarget, invoke,
332: myUsage);
333: Util.visit(invoke.getOutputVariable(), myTarget, invoke,
334: myUsage);
335: Util.visit(invoke.getPartnerLink(), myTarget, invoke, myUsage);
336: if (invoke.getCompensationHandler() == myTarget) {
337: myUsage.add(invoke);
338: }
339: }
340:
341: @Override
342: public void visit(Scope scope) {
343: if (scope.getCompensationHandler() == myTarget) {
344: myUsage.add(scope);
345: }
346: }
347:
348: @Override
349: public void visit(CompensateScope scope) {
350: Util.visit(scope.getTarget(), myTarget, scope, myUsage);
351: }
352:
353: @Override
354: public void visit(Throw _throw) {
355: //out();
356: //out("[THROW]: " + Util.getName(_throw));
357: Util.visit(_throw.getFaultName(), myTarget, _throw, myUsage);
358: Util
359: .visit(_throw.getFaultVariable(), myTarget, _throw,
360: myUsage);
361: }
362:
363: @Override
364: public void visit(Variable variable) {
365: //out();
366: //out("[VARIABLE]: " + Util.getName(variable));
367: Util.visit(variable.getMessageType(), myTarget, variable,
368: myUsage);
369: Util.visit(variable.getType(), variable.getElement(), myTarget,
370: variable, myUsage);
371: }
372:
373: private XPath myXPath;
374: private Referenceable myTarget;
375: private List<Component> myUsage;
376: }
|