1 /* 2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.tools.internal.ws.wsdl.document; 27 28 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtensible; 29 import com.sun.tools.internal.ws.api.wsdl.TWSDLExtension; 30 import com.sun.tools.internal.ws.wsdl.framework.Entity; 31 import com.sun.tools.internal.ws.wsdl.framework.EntityAction; 32 import com.sun.tools.internal.ws.wsdl.framework.ExtensibilityHelper; 33 import org.xml.sax.Locator; 34 35 import javax.xml.namespace.QName; 36 import java.util.ArrayList; 37 import java.util.List; 38 39 /** 40 * Entity corresponding to the "operation" child element of a WSDL "binding" element. 41 * 42 * @author WS Development Team 43 */ 44 public class BindingOperation extends Entity implements TWSDLExtensible { 45 46 public BindingOperation(Locator locator) { 47 super(locator); 48 _faults = new ArrayList<BindingFault>(); 49 _helper = new ExtensibilityHelper(); 50 } 51 52 public String getName() { 53 return _name; 54 } 55 56 public void setName(String name) { 57 _name = name; 58 } 59 60 public String getUniqueKey() { 61 if (_uniqueKey == null) { 62 StringBuffer sb = new StringBuffer(); 63 sb.append(_name); 64 sb.append(' '); 65 if (_input != null) { 66 sb.append(_input.getName()); 67 } else { 68 sb.append(_name); 69 if (_style == OperationStyle.REQUEST_RESPONSE) { 70 sb.append("Request"); 71 } else if (_style == OperationStyle.SOLICIT_RESPONSE) { 72 sb.append("Response"); 73 } 74 } 75 sb.append(' '); 76 if (_output != null) { 77 sb.append(_output.getName()); 78 } else { 79 sb.append(_name); 80 if (_style == OperationStyle.SOLICIT_RESPONSE) { 81 sb.append("Solicit"); 82 } else if (_style == OperationStyle.REQUEST_RESPONSE) { 83 sb.append("Response"); 84 } 85 } 86 _uniqueKey = sb.toString(); 87 } 88 89 return _uniqueKey; 90 } 91 92 public OperationStyle getStyle() { 93 return _style; 94 } 95 96 public void setStyle(OperationStyle s) { 97 _style = s; 98 } 99 100 public BindingInput getInput() { 101 return _input; 102 } 103 104 public void setInput(BindingInput i) { 105 _input = i; 106 } 107 108 public BindingOutput getOutput() { 109 return _output; 110 } 111 112 public void setOutput(BindingOutput o) { 113 _output = o; 114 } 115 116 public void addFault(BindingFault f) { 117 _faults.add(f); 118 } 119 120 public Iterable<BindingFault> faults() { 121 return _faults; 122 } 123 124 public QName getElementName() { 125 return WSDLConstants.QNAME_OPERATION; 126 } 127 128 public Documentation getDocumentation() { 129 return _documentation; 130 } 131 132 public void setDocumentation(Documentation d) { 133 _documentation = d; 134 } 135 136 public String getNameValue() { 137 return getName(); 138 } 139 140 public String getNamespaceURI() { 141 return parent.getNamespaceURI(); 142 } 143 144 public QName getWSDLElementName() { 145 return getElementName(); 146 } 147 148 public void addExtension(TWSDLExtension e) { 149 _helper.addExtension(e); 150 } 151 152 public Iterable<TWSDLExtension> extensions() { 153 return _helper.extensions(); 154 } 155 156 public TWSDLExtensible getParent() { 157 return parent; 158 } 159 160 public void withAllSubEntitiesDo(EntityAction action) { 161 if (_input != null) { 162 action.perform(_input); 163 } 164 if (_output != null) { 165 action.perform(_output); 166 } 167 for (BindingFault _fault : _faults) { 168 action.perform(_fault); 169 } 170 _helper.withAllSubEntitiesDo(action); 171 } 172 173 public void accept(WSDLDocumentVisitor visitor) throws Exception { 174 visitor.preVisit(this); 175 //bug fix: 4947340, extensions should be the first element 176 _helper.accept(visitor); 177 if (_input != null) { 178 _input.accept(visitor); 179 } 180 if (_output != null) { 181 _output.accept(visitor); 182 } 183 for (BindingFault _fault : _faults) { 184 _fault.accept(visitor); 185 } 186 visitor.postVisit(this); 187 } 188 189 public void validateThis() { 190 if (_name == null) { 191 failValidation("validation.missingRequiredAttribute", "name"); 192 } 193 if (_style == null) { 194 failValidation("validation.missingRequiredProperty", "style"); 195 } 196 197 // verify operation style 198 if (_style == OperationStyle.ONE_WAY) { 199 if (_input == null) { 200 failValidation("validation.missingRequiredSubEntity", "input"); 201 } 202 if (_output != null) { 203 failValidation("validation.invalidSubEntity", "output"); 204 } 205 if (_faults != null && _faults.size() != 0) { 206 failValidation("validation.invalidSubEntity", "fault"); 207 } 208 } 209 } 210 211 private ExtensibilityHelper _helper; 212 private Documentation _documentation; 213 private String _name; 214 private BindingInput _input; 215 private BindingOutput _output; 216 private List<BindingFault> _faults; 217 private OperationStyle _style; 218 private String _uniqueKey; 219 220 public void setParent(TWSDLExtensible parent) { 221 this.parent = parent; 222 } 223 224 private TWSDLExtensible parent; 225 }