1 /* 2 * Copyright (c) 2012, Fraunhofer-Gesellschaft 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * (1) Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the disclaimer at the end. 11 * Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * (2) Neither the name of Fraunhofer nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * DISCLAIMER 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 * 34 */ 35 package org.ogf.graap.wsag.api.rest; 36 37 import javax.ws.rs.Consumes; 38 import javax.ws.rs.DELETE; 39 import javax.ws.rs.GET; 40 import javax.ws.rs.POST; 41 import javax.ws.rs.Path; 42 import javax.ws.rs.Produces; 43 import javax.ws.rs.core.MediaType; 44 45 import org.apache.cxf.annotations.DataBinding; 46 import org.apache.cxf.xmlbeans.XmlBeansDataBinding; 47 import org.ogf.graap.wsag.api.exceptions.NegotiationException; 48 import org.ogf.graap.wsag.api.exceptions.ResourceUnavailableException; 49 import org.ogf.graap.wsag.api.exceptions.ResourceUnknownException; 50 import org.ogf.schemas.graap.wsAgreement.negotiation.AdvertiseInputDocument; 51 import org.ogf.schemas.graap.wsAgreement.negotiation.NegotiateInputDocument; 52 import org.ogf.schemas.graap.wsAgreement.negotiation.NegotiateOutputDocument; 53 import org.ogf.schemas.graap.wsAgreement.negotiation.NegotiationPropertiesDocument; 54 import org.ogf.schemas.graap.wsAgreement.negotiation.TerminateInputDocument; 55 56 /** 57 * Interface definition of the RESTful agreement service. 58 * 59 * @author owaeld 60 */ 61 @DataBinding( XmlBeansDataBinding.class ) 62 public interface RestNegotiation 63 { 64 65 /** 66 * Returns the context of this negotiation process. 67 * 68 * @return the negotiation context 69 * @throws ResourceUnknownException 70 * the remote resource is unknown 71 * @throws ResourceUnavailableException 72 * the remote resource is unavailable 73 */ 74 @GET 75 @Path( "/NegotiationContext" ) 76 @Produces( MediaType.APPLICATION_XML ) 77 NegotiationPropertiesDocument getNegotiationContext() 78 throws ResourceUnknownException, ResourceUnavailableException; 79 80 /** 81 * A negotiation instance supports zero or more templates that can be used to create negotiation offers. 82 * In case of a negotiation process, these templates are a subset of the templates offered by an agreement 83 * factory. Only these templates are returned for which a proper negotiation strategy is implemented. in 84 * case of agreement re negotiation, a negotiation instance may return one ore more templates to bootstrap 85 * the negotiation process. 86 * 87 * @return the negotiable templates 88 * @throws ResourceUnknownException 89 * the remote resource is unknown 90 * @throws ResourceUnavailableException 91 * the remote resource is unavailable 92 */ 93 @GET 94 @Path( "/NegotiableTemplates" ) 95 @Produces( MediaType.APPLICATION_XML ) 96 NegotiationPropertiesDocument getNegotiableTemplates() 97 throws ResourceUnknownException, ResourceUnavailableException; 98 99 /** 100 * Returns a history of exchanged offers in this negotiation process. 101 * 102 * @return the offers exchanged in this negotiation 103 * @throws ResourceUnknownException 104 * the remote resource is unknown 105 * @throws ResourceUnavailableException 106 * the remote resource is unavailable 107 */ 108 @GET 109 @Path( "/NegotiationOffers" ) 110 @Produces( MediaType.APPLICATION_XML ) 111 NegotiationPropertiesDocument getNegotiationOffers() 112 throws ResourceUnknownException, ResourceUnavailableException; 113 114 /** 115 * Negotiates a set of agreement offers. 116 * 117 * @param offers 118 * the offers to negotiate 119 * @return a set of counter offers 120 * @throws NegotiationException 121 * an error occured processing the negotiation request 122 * @throws ResourceUnknownException 123 * the remote resource is unknown 124 * @throws ResourceUnavailableException 125 * the remote resource is unavailable 126 */ 127 @POST 128 @Consumes( MediaType.APPLICATION_XML ) 129 @Produces( MediaType.APPLICATION_XML ) 130 NegotiateOutputDocument negotiate( NegotiateInputDocument offers ) 131 throws NegotiationException, ResourceUnknownException, ResourceUnavailableException; 132 133 /** 134 * Advertises a set of negotiation offers. 135 * 136 * @param offers 137 * the offers to advertise 138 * @throws NegotiationException 139 * an error occured processing the negotiation request 140 * @throws ResourceUnknownException 141 * the remote resource is unknown 142 * @throws ResourceUnavailableException 143 * the remote resource is unavailable 144 */ 145 @POST 146 @Consumes( MediaType.APPLICATION_XML ) 147 void advertise( AdvertiseInputDocument offers ) 148 throws NegotiationException, ResourceUnknownException, ResourceUnavailableException; 149 150 /** 151 * Terminates the agreement if permitted. 152 * 153 * @param reason 154 * the termination reason 155 * 156 * @throws ResourceUnknownException 157 * the referenced resource does not exist 158 * @throws ResourceUnavailableException 159 * the referenced resource is not available 160 */ 161 @POST 162 @Path( "/Operations/Terminate" ) 163 @Consumes( MediaType.APPLICATION_XML ) 164 void terminate( TerminateInputDocument reason ) 165 throws ResourceUnknownException, ResourceUnavailableException; 166 167 /** 168 * Destroys the agreement REST resource. 169 * 170 * @throws ResourceUnknownException 171 * the referenced resource does not exist 172 * @throws ResourceUnavailableException 173 * the referenced resource is not available 174 */ 175 @DELETE 176 void destroy() throws ResourceUnknownException, ResourceUnavailableException; 177 }