KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > wsdl > refactoring > WSDLRenameReferenceVisitor


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.xml.wsdl.refactoring;
20
21 import java.io.IOException JavaDoc;
22 import java.util.List JavaDoc;
23 import org.netbeans.modules.xml.refactoring.RenameRequest;
24 import org.netbeans.modules.xml.refactoring.Usage;
25 import org.netbeans.modules.xml.refactoring.UsageGroup;
26 import org.netbeans.modules.xml.wsdl.model.Binding;
27 import org.netbeans.modules.xml.wsdl.model.BindingFault;
28 import org.netbeans.modules.xml.wsdl.model.BindingInput;
29 import org.netbeans.modules.xml.wsdl.model.BindingOperation;
30 import org.netbeans.modules.xml.wsdl.model.BindingOutput;
31 import org.netbeans.modules.xml.wsdl.model.ExtensibilityElement;
32 import org.netbeans.modules.xml.wsdl.model.Fault;
33 import org.netbeans.modules.xml.wsdl.model.Input;
34 import org.netbeans.modules.xml.wsdl.model.Message;
35 import org.netbeans.modules.xml.wsdl.model.Operation;
36 import org.netbeans.modules.xml.wsdl.model.Output;
37 import org.netbeans.modules.xml.wsdl.model.Part;
38 import org.netbeans.modules.xml.wsdl.model.Port;
39 import org.netbeans.modules.xml.wsdl.model.PortType;
40 import org.netbeans.modules.xml.wsdl.model.ReferenceableWSDLComponent;
41 import org.netbeans.modules.xml.wsdl.model.WSDLComponent;
42 import org.netbeans.modules.xml.wsdl.model.WSDLModel;
43 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPAddress;
44 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPBinding;
45 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPBody;
46 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPComponent;
47 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPFault;
48 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPHeader;
49 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPHeaderFault;
50 import org.netbeans.modules.xml.wsdl.model.extensions.soap.SOAPOperation;
51 import org.netbeans.modules.xml.wsdl.model.visitor.DefaultVisitor;
52 import org.netbeans.modules.xml.wsdl.model.visitor.WSDLVisitor;
53 import org.netbeans.modules.xml.xam.dom.NamedComponentReference;
54
55 /**
56  *
57  * @author Nam Nguyen
58  */

59 public class WSDLRenameReferenceVisitor extends DefaultVisitor implements WSDLVisitor {
60     RenameRequest request;
61     
62     /** Creates a new instance of WSDLRenameRefactorVisitor */
63     public WSDLRenameReferenceVisitor() {
64     }
65     
66     public void refactor(RenameRequest request, UsageGroup usage) throws IOException JavaDoc {
67         if (request == null || usage == null || usage.getModel() == null) return;
68         if (! (usage.getModel() instanceof WSDLModel)) return;
69         
70         this.request = request;
71         WSDLModel model = (WSDLModel) usage.getModel();
72         boolean startTransaction = ! model.isIntransaction();
73         try {
74             if (startTransaction) {
75                 model.startTransaction();
76             }
77             for (Usage u : usage.getItems()) {
78                 assert u.getComponent() instanceof WSDLComponent : "Wrong component type in WSDL usage group"; //NOI18N
79
((WSDLComponent) u.getComponent()).accept(this);
80             }
81         } finally {
82             if (startTransaction && usage.getModel().isIntransaction())
83                 usage.getModel().endTransaction();
84         }
85     }
86     
87     private <T extends ReferenceableWSDLComponent> NamedComponentReference<T>
88             createReference(Class JavaDoc<T> type, WSDLComponent referencing) {
89         T referenced = type.cast(request.getRenamedTarget());
90         return referencing.createReferenceTo(referenced, type);
91     }
92     
93     public void visit(BindingOperation referencing) {
94         assert request.getRenamedTarget() instanceof Operation : "Invalid type, expect Operation"; //NOI18N
95
referencing.setName(request.getNewName());
96     }
97     
98     public void visit(Input referencing) {
99         referencing.setMessage(createReference(Message.class, referencing));
100     }
101     
102     public void visit(Output referencing) {
103         referencing.setMessage(createReference(Message.class, referencing));
104     }
105     
106     public void visit(Fault referencing) {
107         referencing.setMessage(createReference(Message.class, referencing));
108     }
109     
110     public void visit(Port referencing) {
111         referencing.setBinding(createReference(Binding.class, referencing));
112     }
113     
114     private boolean isOverloaded(BindingOperation bindingOperation) {
115         assert ! bindingOperation.getOperation().isBroken() :
116             "Broken operation reference: "+bindingOperation.getName();
117         Operation operation = bindingOperation.getOperation().get();
118         PortType pt = (PortType) operation.getParent();
119         assert pt != null : "Operation not in tree";
120         for (Operation o : pt.getOperations()) {
121             if (o != operation && operation.getName().equals(o.getName())) {
122                 return true;
123             }
124         }
125         return false;
126     }
127     
128     public void visit(BindingInput referencing) {
129         if (referencing.getName() != null && referencing.getName().equals(request.getOldName()) ||
130                 isOverloaded((BindingOperation) referencing.getParent())) {
131             referencing.setName(request.getNewName());
132         }
133     }
134     
135     public void visit(BindingOutput referencing) {
136         if (referencing.getName() != null && referencing.getName().equals(request.getOldName()) ||
137                 isOverloaded((BindingOperation) referencing.getParent())) {
138             referencing.setName(request.getNewName());
139         }
140     }
141     
142     public void visit(BindingFault referencing) {
143         referencing.setName(request.getNewName());
144     }
145     
146     public void visit(Binding referencing) {
147         referencing.setType(createReference(PortType.class, referencing));
148     }
149
150     public void visit(ExtensibilityElement referencing) {
151         if (referencing instanceof SOAPComponent) {
152             ((SOAPComponent) referencing).accept(new SOAPReferencingVisitor());
153         }
154     }
155     
156     // SOAPComponent.Visitor
157

158     public class SOAPReferencingVisitor implements SOAPComponent.Visitor {
159         public void visit(SOAPHeader referencing) {
160             if (request.getTarget() instanceof Message) {
161                 referencing.setMessage(createReference(Message.class, referencing));
162             } else if (request.getTarget() instanceof Part) {
163                 referencing.setPartRef(createReference(Part.class, referencing));
164             }
165         }
166
167         public void visit(SOAPFault referencing) {
168             referencing.setFault(createReference(Fault.class, referencing));
169         }
170
171         public void visit(SOAPHeaderFault referencing) {
172             if (request.getTarget() instanceof Message) {
173                 referencing.setMessage(createReference(Message.class, referencing));
174             } else if (request.getTarget() instanceof Part) {
175                 referencing.setPartRef(createReference(Part.class, referencing));
176             }
177         }
178         
179         public void visit(SOAPOperation referencing) {
180             // no explicit reference
181
}
182
183         public void visit(SOAPBinding referencing) {
184             // no explicit reference
185
}
186
187         public void visit(SOAPBody referencing) {
188             if (request.getTarget() instanceof Part) {
189                 List JavaDoc<String JavaDoc> parts = referencing.getParts();
190                 int i = parts.indexOf(request.getOldName());
191                 parts.remove(i);
192                 parts.add(i, request.getNewName());
193                 referencing.setParts(parts);
194             }
195         }
196
197         public void visit(SOAPAddress referencing) {
198             // no explicit reference
199
}
200     }
201 }
202
Popular Tags