1 19 package org.netbeans.modules.xml.wsdl.refactoring; 20 21 import java.io.IOException ; 22 import java.util.List ; 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 59 public class WSDLRenameReferenceVisitor extends DefaultVisitor implements WSDLVisitor { 60 RenameRequest request; 61 62 63 public WSDLRenameReferenceVisitor() { 64 } 65 66 public void refactor(RenameRequest request, UsageGroup usage) throws IOException { 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"; ((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 <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"; 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 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 } 182 183 public void visit(SOAPBinding referencing) { 184 } 186 187 public void visit(SOAPBody referencing) { 188 if (request.getTarget() instanceof Part) { 189 List <String > 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 } 200 } 201 } 202 | Popular Tags |