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.samples.actions; 36 37 import org.ggf.schemas.jsdl.x2005.x11.jsdl.ResourcesType; 38 import org.ogf.graap.wsag.api.pattern.AdvanceReservationPattern; 39 import org.ogf.graap.wsag.api.pattern.ComputeResourcePattern; 40 import org.ogf.graap.wsag.api.types.TemplateType; 41 import org.ogf.graap.wsag4j.types.scheduling.TimeConstraintType; 42 import org.ogf.schemas.graap.wsAgreement.AgreementTemplateType; 43 44 //@formatter:off 45 /** 46 * 47 * SampleTemplate 48 * 49 * <pre> 50 * {@code 51 * <?xml version="1.0" encoding="UTF-8"?> 52 * <wsag:Template wsag:TemplateId="1" 53 * xmlns:wsag="http://schemas.ggf.org/graap/2007/03/ws-agreement"> 54 * <wsag:Name>SAMPLE-TEMPLATE</wsag:Name> 55 * <wsag:Context> 56 * <wsag:ServiceProvider>AgreementResponder</wsag:ServiceProvider> 57 * <wsag:TemplateId>1</wsag:TemplateId> 58 * <wsag:TemplateName>SAMPLE-TEMPLATE</wsag:TemplateName> 59 * </wsag:Context> 60 * <wsag:Terms> 61 * <wsag:All> 62 * <wsag:ServiceDescriptionTerm wsag:Name="RESOURCE_STD" 63 * wsag:ServiceName="SAMPLE_SERVICE"> 64 * <jsdl:JobDefinition xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl"> 65 * <jsdl:JobDescription> 66 * <jsdl:Resources> 67 * <jsdl:CandidateHosts> 68 * <jsdl:HostName>some_host</jsdl:HostName> 69 * </jsdl:CandidateHosts> 70 * <jsdl:TotalResourceCount> 71 * <jsdl:Exact>$TOTALRESOURCES</jsdl:Exact> 72 * </jsdl:TotalResourceCount> 73 * </jsdl:Resources> 74 * </jsdl:JobDescription> 75 * </jsdl:JobDefinition> 76 * </wsag:ServiceDescriptionTerm> 77 * <wsag:ServiceDescriptionTerm wsag:Name="TIME_CONSTRAINT_SDT" 78 * wsag:ServiceName="SAMPLE_SERVICE"> 79 * <wsag4jt:TimeConstraint 80 * xmlns:wsag4jt="http://schemas.wsag4j.org/2009/07/wsag4j-scheduling-extensions"> 81 * <wsag4jt:StartTime>$STARTTIME</wsag4jt:StartTime> 82 * <wsag4jt:EndTime>$ENDTIME</wsag4jt:EndTime> 83 * <wsag4jt:Duration>$DURATION</wsag4jt:Duration> 84 * </wsag4jt:TimeConstraint> 85 * </wsag:ServiceDescriptionTerm> 86 * </wsag:All> 87 * </wsag:Terms> 88 * <!-- The following creation constraints section is optional, however, if 89 * defined then agreement offer is validated against the defined creation constraints --> 90 * <wsag:CreationConstraints> 91 * <!-- Resources_SDT --> 92 * <wsag:Item wsag:Name="ResourcesSDT_JobDefinition"> 93 * <wsag:Location> 94 * declare namespace jsdl='http://schemas.ggf.org/jsdl/2005/11/jsdl'; 95 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 96 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All/wsag:ServiceDescriptionTerm[@wsag:Name='RESOURCE_STD'] 97 * /jsdl:JobDefinition 98 * </wsag:Location> 99 * <wsag:ItemConstraint> 100 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 101 * <xs:element name="JobDescription" minOccurs="1" 102 * maxOccurs="1" type="jsdl:JobDescription_Type" 103 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 104 * </xs:sequence> 105 * </wsag:ItemConstraint> 106 * </wsag:Item> 107 * <wsag:Item wsag:Name="ResourcesSDT_JobDefinition_JobDescription"> 108 * <wsag:Location> 109 * declare namespace jsdl='http://schemas.ggf.org/jsdl/2005/11/jsdl'; 110 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 111 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All/wsag:ServiceDescriptionTerm[@wsag:Name='RESOURCE_STD'] 112 * /jsdl:JobDefinition/jsdl:JobDescription 113 * </wsag:Location> 114 * <wsag:ItemConstraint> 115 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 116 * <xs:element name="JobIdentification" minOccurs="0" 117 * maxOccurs="1" type="jsdl:JobIdentification_Type" 118 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 119 * <xs:element name="Application" minOccurs="0" maxOccurs="0" 120 * type="jsdl:Application_Type" 121 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 122 * <xs:element name="Resources" minOccurs="1" maxOccurs="1" 123 * type="jsdl:Resources_Type" 124 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 125 * <xs:element name="DataStaging" minOccurs="0" maxOccurs="0" 126 * type="jsdl:DataStaging_Type" 127 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 128 * </xs:sequence> 129 * </wsag:ItemConstraint> 130 * </wsag:Item> 131 * <wsag:Item wsag:Name="ResourcesSDT_JobDefinition_JobDescription_Resources"> 132 * <wsag:Location> 133 * declare namespace jsdl='http://schemas.ggf.org/jsdl/2005/11/jsdl'; 134 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 135 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All/wsag:ServiceDescriptionTerm[@wsag:Name='RESOURCE_STD'] 136 * /jsdl:JobDefinition/jsdl:JobDescription/jsdl:Resources 137 * </wsag:Location> 138 * <wsag:ItemConstraint> 139 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 140 * <xs:element name="CandidateHosts" minOccurs="1" 141 * maxOccurs="1" type="jsdl:CandidateHosts_Type" 142 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 143 * <xs:element name="TotalResourceCount" minOccurs="1" 144 * maxOccurs="1" type="jsdl:RangeValue_Type" 145 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 146 * </xs:sequence> 147 * </wsag:ItemConstraint> 148 * </wsag:Item> 149 * <wsag:Item 150 * wsag:Name="ResourcesSDT_JobDefinition_JobDescription_Resources_TotalResourceCount"> 151 * <wsag:Location> 152 * declare namespace jsdl='http://schemas.ggf.org/jsdl/2005/11/jsdl'; 153 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 154 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All/wsag:ServiceDescriptionTerm[@wsag:Name='RESOURCE_STD'] 155 * /jsdl:JobDefinition/jsdl:JobDescription/jsdl:Resources/jsdl:TotalResourceCount 156 * </wsag:Location> 157 * <wsag:ItemConstraint> 158 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 159 * <xs:element name="UpperBoundedRange" minOccurs="0" 160 * maxOccurs="0" type="jsdl:Boundary_Type" 161 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 162 * <xs:element name="LowerBoundedRange" minOccurs="0" 163 * maxOccurs="0" type="jsdl:Boundary_Type" 164 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 165 * <xs:element name="Exact" minOccurs="1" maxOccurs="1" 166 * type="jsdl:Exact_Type" 167 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 168 * <xs:element name="Range" minOccurs="0" maxOccurs="0" 169 * type="jsdl:Range_Type" 170 * xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl" /> 171 * </xs:sequence> 172 * </wsag:ItemConstraint> 173 * </wsag:Item> 174 * <wsag:Item 175 * wsag:Name="ResourcesSDT_JobDefinition_JobDescription_Resources_TotalResourceCount_Exact"> 176 * <wsag:Location> 177 * declare namespace jsdl='http://schemas.ggf.org/jsdl/2005/11/jsdl'; 178 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 179 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All/wsag:ServiceDescriptionTerm[@wsag:Name='RESOURCE_STD'] 180 * /jsdl:JobDefinition/jsdl:JobDescription/jsdl:Resources/jsdl:TotalResourceCount/jsdl:Exact 181 * </wsag:Location> 182 * <wsag:ItemConstraint> 183 * <xs:minInclusive value="1" 184 * xmlns:xs="http://www.w3.org/2001/XMLSchema" /> 185 * <xs:maxInclusive value="$TOTALRESOURCES" 186 * xmlns:xs="http://www.w3.org/2001/XMLSchema" /> 187 * </wsag:ItemConstraint> 188 * </wsag:Item> 189 * <!-- Agreement Offer Structure --> 190 * <wsag:Item wsag:Name="AgreementOffer"> 191 * <wsag:Location> 192 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 193 * $this/wsag:AgreementOffer 194 * </wsag:Location> 195 * <wsag:ItemConstraint> 196 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 197 * <xs:element ref="wsag:Name" minOccurs="0" maxOccurs="1" /> 198 * <xs:element ref="wsag:Context" minOccurs="1" maxOccurs="1" /> 199 * <xs:element ref="wsag:Terms" minOccurs="1" maxOccurs="1" /> 200 * </xs:sequence> 201 * </wsag:ItemConstraint> 202 * </wsag:Item> 203 * <wsag:Item wsag:Name="AgreementOffer_Context"> 204 * <wsag:Location> 205 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 206 * $this/wsag:AgreementOffer/wsag:Context 207 * </wsag:Location> 208 * <wsag:ItemConstraint> 209 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 210 * <xs:element name="AgreementInitiator" type="xs:anyType" 211 * minOccurs="0" maxOccurs="0" /> 212 * <xs:element name="AgreementResponder" type="xs:anyType" 213 * minOccurs="0" maxOccurs="0" /> 214 * <xs:element name="ServiceProvider" type="wsag:AgreementRoleType" 215 * minOccurs="1" maxOccurs="1" /> 216 * <xs:element name="ExpirationTime" type="xs:dateTime" 217 * minOccurs="0" maxOccurs="0" /> 218 * <xs:element name="TemplateId" type="xs:string" 219 * minOccurs="1" maxOccurs="1" /> 220 * <xs:element name="TemplateName" type="xs:string" 221 * minOccurs="1" maxOccurs="1" /> 222 * <xs:any maxOccurs="0" minOccurs="0" namespace="##other" 223 * processContents="lax" /> 224 * </xs:sequence> 225 * </wsag:ItemConstraint> 226 * </wsag:Item> 227 * <wsag:Item wsag:Name="AgreementOffer_Context_ServiceProvider"> 228 * <wsag:Location> 229 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 230 * $this/wsag:AgreementOffer/wsag:Context/wsag:ServiceProvider 231 * </wsag:Location> 232 * <wsag:ItemConstraint> 233 * <xs:simpleType xmlns:xs="http://www.w3.org/2001/XMLSchema"> 234 * <xs:restriction base="wsag:AgreementRoleType"> 235 * <xs:enumeration value="AgreementResponder" /> 236 * </xs:restriction> 237 * </xs:simpleType> 238 * </wsag:ItemConstraint> 239 * </wsag:Item> 240 * <wsag:Item wsag:Name="AgreementOffer_Terms"> 241 * <wsag:Location> 242 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 243 * $this/wsag:AgreementOffer/wsag:Terms 244 * </wsag:Location> 245 * <wsag:ItemConstraint> 246 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 247 * <xs:element name="All" minOccurs="1" maxOccurs="1" 248 * type="wsag:TermCompositorType" /> 249 * </xs:sequence> 250 * </wsag:ItemConstraint> 251 * </wsag:Item> 252 * <wsag:Item wsag:Name="AgreementOffer_Terms_All"> 253 * <wsag:Location> 254 * declare namespace wsag='http://schemas.ggf.org/graap/2007/03/ws-agreement'; 255 * $this/wsag:AgreementOffer/wsag:Terms/wsag:All 256 * </wsag:Location> 257 * <wsag:ItemConstraint> 258 * <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema"> 259 * <xs:choice maxOccurs="2"> 260 * <xs:element name="ExactlyOne" minOccurs="0" maxOccurs="0" 261 * type="wsag:TermCompositorType" /> 262 * <xs:element name="OneOrMore" minOccurs="0" maxOccurs="0" 263 * type="wsag:TermCompositorType" /> 264 * <xs:element ref="wsag:All" minOccurs="0" maxOccurs="0" /> 265 * <xs:element name="ServiceDescriptionTerm" minOccurs="1" 266 * maxOccurs="1" type="wsag:ServiceDescriptionTermType" /> 267 * <xs:element name="ServiceReference" minOccurs="0" 268 * maxOccurs="0" type="wsag:ServiceReferenceType" /> 269 * <xs:element name="ServiceProperties" minOccurs="0" 270 * maxOccurs="0" type="wsag:ServicePropertiesType" /> 271 * <xs:element name="GuaranteeTerm" minOccurs="0" 272 * maxOccurs="0" type="wsag:GuaranteeTermType" /> 273 * </xs:choice> 274 * </xs:sequence> 275 * </wsag:ItemConstraint> 276 * </wsag:Item> 277 * </wsag:CreationConstraints> 278 * </wsag:Template> 279 * } 280 * </pre> 281 * 282 * @author hrasheed 283 **/ 284 //@formatter:on 285 286 public class SampleAgreementTemplate extends TemplateType 287 { 288 289 /** 290 * Template name for which this pattern applies. 291 */ 292 public static final String NAME = "SAMPLE-TEMPLATE"; 293 294 /** 295 * Template id for which this pattern applies. 296 */ 297 public static final String ID = "1"; 298 299 private ComputeResourcePattern resourcePattern = null; 300 301 private AdvanceReservationPattern arPattern = null; 302 303 /** 304 * Creates a Sample Template instance based on a given XML representation. 305 * 306 * @param template 307 * the XML representation of the template 308 */ 309 public SampleAgreementTemplate( AgreementTemplateType template ) 310 { 311 super( template ); 312 313 // 314 // use the internal XML object for creating the pattern 315 // 316 template = getXMLObject(); 317 318 resourcePattern = new ComputeResourcePattern( template.getTerms().getAll() ); 319 arPattern = new AdvanceReservationPattern( template.getTerms().getAll() ); 320 } 321 322 /** 323 * @return the resource definition 324 * @see ComputeResourcePattern#getResourceDefinition() 325 */ 326 public ResourcesType getResourceDefinition() 327 { 328 return resourcePattern.getResourceDefinition(); 329 } 330 331 /** 332 * @return the specified time constraints 333 * 334 * @see AdvanceReservationPattern#getTimeConstraint() 335 */ 336 public TimeConstraintType getTimeConstraint() 337 { 338 return arPattern.getTimeConstraint(); 339 } 340 341 /** 342 * 343 * @return negotiation offer based on this template 344 * 345 * @throws Exception 346 * failed to create the negotiation offer object 347 */ 348 public SampleNegotiationOffer getNegotiationOffer() throws Exception 349 { 350 return new SampleNegotiationOffer( getXMLObject() ); 351 } 352 353 /** 354 * 355 * @return an agreement offer based on this template 356 * 357 * @throws Exception 358 * failed to create the offer object 359 */ 360 public SampleAgreementOffer getAgreementOffer() throws Exception 361 { 362 return new SampleAgreementOffer( getXMLObject() ); 363 } 364 365 }