001    /**
002     * 
003     * Copyright 2005 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.codehaus.activesoap.wsif;
019    
020    import org.apache.wsif.WSIFException;
021    import org.apache.wsif.WSIFMessage;
022    import org.apache.wsif.WSIFOperation;
023    import org.apache.wsif.WSIFPort;
024    import org.apache.wsif.providers.WSIFDynamicTypeMap;
025    import org.codehaus.activesoap.RestClient;
026    import org.codehaus.activesoap.handler.stax.AnyElementMarshaler;
027    
028    import javax.wsdl.BindingOperation;
029    import javax.wsdl.Definition;
030    import javax.wsdl.Port;
031    import javax.wsdl.Service;
032    import java.util.Iterator;
033    import java.util.List;
034    
035    /**
036     * Represents a port in <a href="http://ws.apache.org/wsif/">WSIF</a>
037     *
038     * @version $Revision: 1.1 $
039     */
040    public class ASPort implements WSIFPort {
041        private Definition definition;
042        private Service service;
043        private Port port;
044        private WSIFDynamicTypeMap wsifDynamicTypeMap;
045        private RestClient client;
046        private AnyElementMarshaler marshaler;
047        private WSIFMessage context;
048    
049    
050        public ASPort(Definition definition, Service service, Port port, WSIFDynamicTypeMap wsifDynamicTypeMap, RestClient client, AnyElementMarshaler marshaler) {
051            this.definition = definition;
052            this.service = service;
053            this.port = port;
054            this.wsifDynamicTypeMap = wsifDynamicTypeMap;
055            this.client = client;
056            this.marshaler = marshaler;
057        }
058    
059        public void close() throws WSIFException {
060            try {
061                client.close();
062            }
063            catch (Exception e) {
064                throw new WSIFException("Failed to close down the client: " + e, e);
065            }
066        }
067    
068        public WSIFOperation createOperation(String operationName) throws WSIFException {
069            List list = port.getBinding().getBindingOperations();
070            for (Iterator iter = list.iterator(); iter.hasNext();) {
071                BindingOperation operation = (BindingOperation) iter.next();
072                if (operationName.equals(operation.getName())) {
073                    return createOperation(operation);
074                }
075            }
076            throw new WSIFException("No such operation: " + operationName);
077        }
078    
079        public WSIFOperation createOperation(String operationName, String inputName, String outputName) throws WSIFException {
080            BindingOperation operation = port.getBinding().getBindingOperation(operationName, inputName, outputName);
081            return createOperation(operation);
082        }
083    
084        public WSIFMessage getContext() throws WSIFException {
085            return context;
086        }
087    
088        public void setContext(WSIFMessage context) {
089            this.context = context;
090        }
091    
092        public boolean supportsAsync() {
093            return false;  /** TODO */
094        }
095    
096        public boolean supportsSync() {
097            return true;
098        }
099    
100        // Properties
101        //-------------------------------------------------------------------------
102        public Definition getDefinition() {
103            return definition;
104        }
105    
106        public Service getService() {
107            return service;
108        }
109    
110        public Port getPort() {
111            return port;
112        }
113    
114        public WSIFDynamicTypeMap getWsifDynamicTypeMap() {
115            return wsifDynamicTypeMap;
116        }
117    
118        public RestClient getClient() {
119            return client;
120        }
121    
122        public AnyElementMarshaler getMarshaler() {
123            return marshaler;
124        }
125    
126        // Implementation methods
127        //-------------------------------------------------------------------------
128        protected ASOperation createOperation(BindingOperation operation) {
129            return new ASOperation(this, operation.getOperation(), client, marshaler);
130        }
131    
132    }