ohair@286: /* alanb@368: * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. ohair@286: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ohair@286: * ohair@286: * This code is free software; you can redistribute it and/or modify it ohair@286: * under the terms of the GNU General Public License version 2 only, as ohair@286: * published by the Free Software Foundation. Oracle designates this ohair@286: * particular file as subject to the "Classpath" exception as provided ohair@286: * by Oracle in the LICENSE file that accompanied this code. ohair@286: * ohair@286: * This code is distributed in the hope that it will be useful, but WITHOUT ohair@286: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ohair@286: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ohair@286: * version 2 for more details (a copy is included in the LICENSE file that ohair@286: * accompanied this code). ohair@286: * ohair@286: * You should have received a copy of the GNU General Public License version ohair@286: * 2 along with this work; if not, write to the Free Software Foundation, ohair@286: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ohair@286: * ohair@286: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ohair@286: * or visit www.oracle.com if you need additional information or have any ohair@286: * questions. ohair@286: */ ohair@286: ohair@286: package com.sun.tools.internal.ws.wsdl.document; ohair@286: ohair@286: import com.sun.tools.internal.ws.wsdl.framework.*; ohair@286: import com.sun.tools.internal.ws.wscompile.ErrorReceiver; ohair@286: import com.sun.tools.internal.ws.wscompile.AbortException; ohair@286: import com.sun.tools.internal.ws.resources.WsdlMessages; ohair@286: import org.xml.sax.Locator; ohair@286: ohair@286: import javax.xml.namespace.QName; ohair@286: import java.util.*; ohair@286: ohair@286: /** ohair@286: * Entity corresponding to the "message" WSDL element. ohair@286: * ohair@286: * @author WS Development Team ohair@286: */ ohair@286: public class Message extends GlobalEntity { ohair@286: ohair@286: public Message(Defining defining, Locator locator, ErrorReceiver errReceiver) { ohair@286: super(defining, locator, errReceiver); ohair@286: _parts = new ArrayList(); ohair@286: _partsByName = new HashMap(); ohair@286: } ohair@286: ohair@286: public void add(MessagePart part) { ohair@286: if (_partsByName.get(part.getName()) != null){ ohair@286: errorReceiver.error(part.getLocator(), WsdlMessages.VALIDATION_DUPLICATE_PART_NAME(getName(), part.getName())); ohair@286: throw new AbortException(); ohair@286: } ohair@286: ohair@286: if(part.getDescriptor() != null && part.getDescriptorKind() != null) { ohair@286: _partsByName.put(part.getName(), part); ohair@286: _parts.add(part); ohair@286: } else ohair@286: errorReceiver.warning(part.getLocator(), WsdlMessages.PARSING_ELEMENT_OR_TYPE_REQUIRED(part.getName())); ohair@286: } ohair@286: ohair@286: public Iterator parts() { ohair@286: return _parts.iterator(); ohair@286: } ohair@286: ohair@286: public List getParts(){ ohair@286: return _parts; ohair@286: } ohair@286: ohair@286: public MessagePart getPart(String name) { ohair@286: return _partsByName.get(name); ohair@286: } ohair@286: ohair@286: public int numParts() { ohair@286: return _parts.size(); ohair@286: } ohair@286: ohair@286: public Kind getKind() { ohair@286: return Kinds.MESSAGE; ohair@286: } ohair@286: ohair@286: public QName getElementName() { ohair@286: return WSDLConstants.QNAME_MESSAGE; ohair@286: } ohair@286: ohair@286: public Documentation getDocumentation() { ohair@286: return _documentation; ohair@286: } ohair@286: ohair@286: public void setDocumentation(Documentation d) { ohair@286: _documentation = d; ohair@286: } ohair@286: ohair@286: public void withAllSubEntitiesDo(EntityAction action) { ohair@286: super.withAllSubEntitiesDo(action); ohair@286: ohair@286: for (Iterator iter = _parts.iterator(); iter.hasNext();) { ohair@286: action.perform((Entity) iter.next()); ohair@286: } ohair@286: } ohair@286: ohair@286: public void accept(WSDLDocumentVisitor visitor) throws Exception { ohair@286: visitor.preVisit(this); ohair@286: for (Iterator iter = _parts.iterator(); iter.hasNext();) { ohair@286: iter.next().accept(visitor); ohair@286: } ohair@286: visitor.postVisit(this); ohair@286: } ohair@286: ohair@286: public void validateThis() { ohair@286: if (getName() == null) { ohair@286: errorReceiver.error(getLocator(), WsdlMessages.VALIDATION_MISSING_REQUIRED_ATTRIBUTE("name", "wsdl:message")); ohair@286: throw new AbortException(); ohair@286: } ohair@286: } ohair@286: ohair@286: private Documentation _documentation; ohair@286: private List _parts; ohair@286: private Map _partsByName; ohair@286: }