1 /* 2 * Copyright (c) 2007, 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; 36 37 import java.util.Map; 38 import java.util.Observer; 39 40 import org.apache.xmlbeans.XmlObject; 41 import org.ogf.schemas.graap.wsAgreement.AgreementContextType; 42 import org.ogf.schemas.graap.wsAgreement.AgreementPropertiesType; 43 import org.ogf.schemas.graap.wsAgreement.AgreementStateType; 44 import org.ogf.schemas.graap.wsAgreement.GuaranteeTermStateType; 45 import org.ogf.schemas.graap.wsAgreement.ServiceTermStateType; 46 import org.ogf.schemas.graap.wsAgreement.TermTreeType; 47 import org.ogf.schemas.graap.wsAgreement.TerminateInputType; 48 49 /** 50 * Agreement interface used by the server module. It provides the required methods to access the properties of 51 * the agreement and to terminate the agreement instance. Moreover, it provides access to the domains-specific 52 * agreement implementation via the {@link #getAgreementInstance()} method. 53 * 54 * @see AgreementFactory 55 * @author Oliver Waeldrich 56 */ 57 public interface Agreement 58 { 59 60 // definitions from the ArgreementPortType 61 62 /** 63 * Returns the agreement name. 64 * 65 * @return the agreement name 66 */ 67 String getName(); 68 69 /** 70 * Returns the agreement id. 71 * 72 * @return the agreement id 73 */ 74 String getAgreementId(); 75 76 // /** 77 // * Returns a domain-specific agreement implementation. The {@link AbstractAgreementType} implements the 78 // * domain-specific termination method and stored the agreement properties. The 79 // * {@link AbstractAgreementType#getXMLObject()} returns the actual properties of an agreement 80 // * implementation. These properties must be valid at all time, i.e. if an agreement implementation 81 // * overrides the {@link #getState()} method the implementation must make sure that the agreement 82 // * properties are updated with the returned state. 83 // * 84 // * @return the agreement implementation 85 // */ 86 // AbstractAgreementType getAgreementInstance(); 87 88 /** 89 * @return the agreement context 90 */ 91 AgreementContextType getContext(); 92 93 /** 94 * @return the agreement terms 95 */ 96 TermTreeType getTerms(); 97 98 /** 99 * Terminates an agreement. 100 * 101 * @param reason 102 * termination reason 103 */ 104 void terminate( TerminateInputType reason ); 105 106 // definitions from the ArgreementStatePortType 107 108 /** 109 * @return the agreement state 110 */ 111 AgreementStateType getState(); 112 113 /** 114 * @return the agreement guarantee term states 115 */ 116 GuaranteeTermStateType[] getGuaranteeTermStates(); 117 118 /** 119 * @return the agreement service term states 120 */ 121 ServiceTermStateType[] getServiceTermStates(); 122 123 /** 124 * Validates the resource properties document of this instance. 125 * 126 * @return true if the resource properties document is valid, otherwise false. 127 */ 128 boolean validate(); 129 130 /** 131 * This method allows an agreement instance to get notified after reload. An invocation of the 132 * {@link #notifyReload(Map)} method sets the execution context (see {@link #getExecutionContext()}) of 133 * the agreement and invokes the {@link #notifyReinitialized(Map)} method of this agreement instance. 134 * 135 * @param executionCtx 136 * the current execution context 137 */ 138 void notifyReload( Map<String, XmlObject> executionCtx ); 139 140 /** 141 * Sets the ID of the agreement. 142 * 143 * @param agreementId 144 * the agreement id to set 145 */ 146 void setAgreementId( String agreementId ); 147 148 /** 149 * Sets the context of the agreement. 150 * 151 * @param context 152 * the agreement context to set 153 */ 154 void setContext( AgreementContextType context ); 155 156 /** 157 * Sets the name of the agreement. 158 * 159 * @param name 160 * the agreement name to set 161 */ 162 void setName( String name ); 163 164 /** 165 * Sets the terms of the agreement. 166 * 167 * @param terms 168 * the agreement terms to set 169 */ 170 void setTerms( TermTreeType terms ); 171 172 /** 173 * Sets the state of the agreement. 174 * 175 * @param agreementState 176 * the agreement state to set 177 */ 178 void setState( AgreementStateType agreementState ); 179 180 /** 181 * Sets the guarantee term states of the agreement. 182 * 183 * @param guaranteeTermStateList 184 * the guarantee term states to set 185 */ 186 void setGuaranteeTermStates( GuaranteeTermStateType[] guaranteeTermStateList ); 187 188 /** 189 * Sets the service term states of the agreement. 190 * 191 * @param serviceTermStateList 192 * the service term states to set 193 */ 194 void setServiceTermStates( ServiceTermStateType[] serviceTermStateList ); 195 196 /** 197 * Returns the agreement properties as {@link XmlObject}. 198 * 199 * @return an XML representation of the agreement properties document 200 */ 201 AgreementPropertiesType getXMLObject(); 202 203 /** 204 * Sets the properties for this agreement explicitly. 205 * 206 * @param properties 207 * the agreement properties to set 208 */ 209 void setXmlObject( AgreementPropertiesType properties ); 210 211 /** 212 * Returns the persisted execution context for this agreement. 213 * 214 * @return the agreement persisted execution context 215 */ 216 Map<String, XmlObject> getExecutionContext(); 217 218 /** 219 * Returns the transient execution context for this agreement. 220 * 221 * @return the agreement transient execution context 222 */ 223 Map<String, Object> getTransientExecutionContext(); 224 225 /** 226 * Returns the class of the agreement implementation. 227 * 228 * @return the implementation class 229 */ 230 Class<?> getImplementationClass(); 231 232 /** 233 * Adds a new observer to an agreement that gets notified of agreement state changes. 234 * 235 * @param o 236 * the observer 237 * 238 * @see java.util.Observable#addObserver(java.util.Observer) 239 */ 240 void addObserver( Observer o ); 241 242 /** 243 * 244 * @see java.util.Observable#notifyObservers() 245 */ 246 void notifyObservers(); 247 248 /** 249 * Notifies all registered observer of an agreement's state change. 250 * 251 * @param arg 252 * notification message 253 * 254 * @see java.util.Observable#notifyObservers(java.lang.Object) 255 */ 256 void notifyObservers( Object arg ); 257 258 /** 259 * Returns true if the content of the agreement has changed, otherwise false. 260 * 261 * @return true if the agreement has changed, i.e. runtime state was updated 262 * 263 * @see java.util.Observable#hasChanged() 264 */ 265 boolean hasChanged(); 266 267 }