00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/src/GATJobDescription.c,v 1.14 2004/04/02 12:31:57 hartmutkaiser Exp $";
00020
00021
00022 #include <stdlib.h>
00023 #include <string.h>
00024
00025
00026 #include "GATInternal.h"
00027 #include "GATErrors.h"
00028 #include "GATType.h"
00029 #include "GATRegistry.h"
00030 #include "GATResourceDescription.h"
00031 #include "GATSoftwareDescription.h"
00032 #include "GATJobDescription.h"
00033 #include "GATResourceBroker.h"
00034 #include "GATXdsWrapper.h"
00035
00036
00037 GATOBJECT_DEFINE_VTABLE(GATJobDescription);
00038 GATSERIALISABLE_DEFINE_VTABLE(GATJobDescription);
00039
00040
00041 GATOBJECT_DEFINE_CONVERTERS(GATJobDescription)
00042
00043
00044
00045
00046 struct GATJobDescription_S {
00047 GATJobDescription_vtable *GATObject__vtable;
00048 GATJobDescription_ISerialisable_vtable *GATSerialisable__vtable;
00049
00050 GATBool isdirty;
00051 GATSoftwareDescription software;
00052 GATResourceDescription description;
00053 GATResource resource;
00054 };
00055
00056
00057 static int
00058 GATJobDescription_DeSerialise_Create(GATContext context, GATObject stream,
00059 GATSoftwareDescription software, GATType type, GATObject resource,
00060 GATJobDescription *new_object);
00061
00062
00063 GATJobDescription_vtable GATJobDescription__vtable = {
00064 GATJobDescription_GetType,
00065 GATJobDescription_Destroy,
00066 GATJobDescription_Equals,
00067 GATJobDescription_Clone,
00068 GATJobDescription_GetInterface,
00069 NULL
00070 };
00071
00072 static GATJobDescription_ISerialisable_vtable
00073 GATJobDescription_ISerialisable__vtable =
00074 {
00075 GATJobDescription_Serialise,
00076 GATJobDescription_DeSerialise,
00077 GATJobDescription_GetIsDirty,
00078 };
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 GATResult GATJobDescription_Register_GATSerialisable(void)
00089 {
00090 return GATObject_Register_GATSerialisable(GATType_GATJobDescription,
00091 &GATJobDescription_ISerialisable__vtable);
00092 }
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 GATJobDescription
00109 GATJobDescription_Create_Description(GATContext context,
00110 GATSoftwareDescription_const software,
00111 GATResourceDescription_const description)
00112 {
00113 GATResult err_code = GAT_MEMORYFAILURE;
00114 GATJobDescription retval = (GATJobDescription) malloc(
00115 sizeof(struct GATJobDescription_S));
00116
00117 GAT_UNUSED_PARAMETER(context);
00118 if (NULL != retval)
00119 {
00120 memset(retval, 0, sizeof(struct GATJobDescription_S));
00121 retval->GATObject__vtable = &GATJobDescription__vtable;
00122 retval->GATSerialisable__vtable = &GATJobDescription_ISerialisable__vtable;
00123 retval->isdirty = GATFalse;
00124
00125 err_code = GATSoftwareDescription_Clone(software,
00126 &retval->software);
00127
00128 if (GAT_SUCCEEDED(err_code))
00129 {
00130 GATObject_const object = GATResourceDescription_ToGATObject_const(description);
00131 GATType type = GATObject_GetType(object);
00132
00133 if (GATType_GATSoftwareResourceDescription == type)
00134 {
00135 err_code = GATSoftwareResourceDescription_Clone(
00136 (GATSoftwareResourceDescription_const) description,
00137 (GATSoftwareResourceDescription *) &retval->description);
00138 }
00139 else
00140 {
00141 err_code = GATHardwareResourceDescription_Clone(
00142 (GATHardwareResourceDescription_const) description,
00143 (GATHardwareResourceDescription *) &retval->description);
00144 }
00145 }
00146 }
00147
00148
00149 if (GAT_FAILED(err_code))
00150 {
00151 GATJobDescription_Destroy(&retval);
00152 }
00153
00154 return retval;
00155 }
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 GATJobDescription
00172 GATJobDescription_Create(GATContext context,
00173 GATSoftwareDescription_const software, GATResource_const resource)
00174 {
00175 GATResult err_code = GAT_MEMORYFAILURE;
00176 GATJobDescription retval = (GATJobDescription) malloc(
00177 sizeof(struct GATJobDescription_S));
00178
00179 GAT_UNUSED_PARAMETER(context);
00180 if (NULL != retval)
00181 {
00182 memset(retval, 0, sizeof(struct GATJobDescription_S));
00183 retval->GATObject__vtable = &GATJobDescription__vtable;
00184 retval->GATSerialisable__vtable = &GATJobDescription_ISerialisable__vtable;
00185 retval->isdirty = GATFalse;
00186
00187 err_code = GATSoftwareDescription_Clone(software,
00188 &retval->software);
00189 if (GAT_SUCCEEDED(err_code))
00190 {
00191 err_code = GATResource_Clone(resource, &retval->resource);
00192 }
00193 }
00194
00195
00196 if (GAT_FAILED(err_code))
00197 {
00198 GATJobDescription_Destroy(&retval);
00199 }
00200
00201 return retval;
00202 }
00203
00204
00205
00206
00207
00208
00209
00210
00211 void
00212 GATJobDescription_Destroy(GATJobDescription *object)
00213 {
00214 if (NULL != object && NULL != *object)
00215 {
00216 GATSoftwareDescription_Destroy(&(*object)->software);
00217 if (NULL != (*object)->description)
00218 {
00219 GATObject obj = GATResourceDescription_ToGATObject(
00220 (*object)->description);
00221 GATObject_Destroy(&obj);
00222 }
00223 if (NULL != (*object)->resource)
00224 {
00225 GATResource_Destroy(&(*object)->resource);
00226 }
00227 free(*object);
00228 *object = NULL;
00229 }
00230 }
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 GATResult
00246 GATJobDescription_Equals(GATJobDescription_const lhs,
00247 GATJobDescription_const rhs, GATBool *isequal)
00248 {
00249 GATResult retval = GAT_INVALID_HANDLE;
00250
00251 if (NULL != lhs && NULL != rhs)
00252 {
00253 retval = GAT_INVALID_PARAMETER;
00254 if (NULL != isequal)
00255 {
00256 retval = GATSoftwareDescription_Equals(lhs->software,
00257 rhs->software, isequal);
00258 if (GAT_SUCCEEDED(retval) && GATTrue == *isequal)
00259 {
00260 if (NULL != lhs->description && NULL != rhs->description)
00261 {
00262 retval = GATResourceDescription_Equals(lhs->description,
00263 rhs->description, isequal);
00264 }
00265 else if (NULL != lhs->resource && NULL != rhs->description)
00266 {
00267 retval = GATResource_Equals(lhs->resource, rhs->resource,
00268 isequal);
00269 }
00270 else
00271 {
00272 *isequal = GATFalse;
00273 retval = GAT_SUCCESS;
00274 }
00275 }
00276 }
00277 }
00278 return retval;
00279 }
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293 GATResult
00294 GATJobDescription_Clone(GATJobDescription_const object,
00295 GATJobDescription *new_handle)
00296 {
00297 GATResult retval = GAT_INVALID_HANDLE;
00298 if (NULL != object)
00299 {
00300 if (NULL == new_handle)
00301 {
00302 retval = GAT_INVALID_PARAMETER;
00303 }
00304 else
00305 {
00306 GATJobDescription new_object =
00307 (GATJobDescription) malloc(sizeof(struct GATJobDescription_S));
00308
00309 *new_handle = NULL;
00310 if (NULL == new_object)
00311 {
00312 retval = GAT_MEMORYFAILURE;
00313 }
00314 else
00315 {
00316 memset(new_object, 0, sizeof(struct GATJobDescription_S));
00317 new_object->GATObject__vtable = &GATJobDescription__vtable;
00318 new_object->GATSerialisable__vtable = &GATJobDescription_ISerialisable__vtable;
00319 new_object->isdirty = object->isdirty;
00320
00321 retval = GATSoftwareDescription_Clone(object->software,
00322 &new_object->software);
00323 if (GAT_SUCCEEDED(retval))
00324 {
00325 if (NULL != object->description)
00326 {
00327 GATType type = GATResourceDescription_GetType(object->description);
00328 retval = GATResourceDescription_Clone(type,
00329 object->description, &new_object->description);
00330 }
00331 if (NULL != object->resource)
00332 {
00333 retval = GATResource_Clone(object->resource,
00334 &new_object->resource);
00335 }
00336 }
00337 }
00338
00339 if (GAT_FAILED(retval))
00340 {
00341 GATJobDescription_Destroy(&new_object);
00342 }
00343 else
00344 {
00345 *new_handle = new_object;
00346 }
00347 }
00348 }
00349 return retval;
00350 }
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362 GATType
00363 GATJobDescription_GetType(GATJobDescription_const description)
00364 {
00365 GAT_UNUSED_PARAMETER(description);
00366 return GATType_GATJobDescription;
00367 }
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381 GATResult
00382 GATJobDescription_GetInterface(GATJobDescription_const object, GATInterface iftype,
00383 void const **ifp)
00384 {
00385 GATResult retval = GAT_INVALID_PARAMETER;
00386
00387 if (NULL != ifp)
00388 {
00389 *ifp = NULL;
00390 if (GATInterface_ISerialisable == iftype)
00391 {
00392 *ifp = (void const *) &object->GATSerialisable__vtable;
00393 retval = GAT_SUCCESS;
00394 }
00395 else
00396 {
00397 retval = GAT_NO_INTERFACE;
00398 }
00399 }
00400 return retval;
00401 }
00402
00403
00404
00405 GATSoftwareDescription_const
00406 GATJobDescription_GetSoftwareDescription(GATJobDescription_const object)
00407 {
00408 GATSoftwareDescription_const retval = NULL;
00409 if (NULL != object)
00410 {
00411 retval = object->software;
00412 }
00413 return retval;
00414 }
00415
00416
00417 GATResourceDescription_const
00418 GATJobDescription_GetResourceDescription(GATJobDescription_const object)
00419 {
00420 GATResourceDescription_const retval = NULL;
00421 if (NULL != object)
00422 {
00423 retval = object->description;
00424 }
00425 return retval;
00426 }
00427
00428
00429 GATResource_const
00430 GATJobDescription_GetResource(GATJobDescription_const object)
00431 {
00432 GATResource_const retval = NULL;
00433 if (NULL != object)
00434 {
00435 retval = object->resource;
00436 }
00437 return retval;
00438 }
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456 GATResult
00457 GATJobDescription_Serialise(GATJobDescription object, GATObject stream,
00458 GATBool clear_dirty)
00459 {
00460 GATResult retval = GAT_INVALID_HANDLE;
00461 if (NULL != object)
00462 {
00463 if (NULL != object->description)
00464 {
00465 retval = GATXds_SerialiseObject(
00466 GATJobDescription_ToGATObject(object), stream, clear_dirty, 0,
00467 "uint32 uint32 object object",
00468 GATJOBDESCRIPTION_VERSION1, GATType_GATResourceDescription,
00469 object->software, clear_dirty, object->description, clear_dirty);
00470 }
00471 else if (NULL != object->resource)
00472 {
00473 retval = GATXds_SerialiseObject(
00474 GATJobDescription_ToGATObject(object), stream, clear_dirty, 0,
00475 "uint32 uint32 object object",
00476 GATJOBDESCRIPTION_VERSION1, GATType_GATResource,
00477 object->software, clear_dirty, object->resource, clear_dirty);
00478 }
00479 else
00480 {
00481 retval = GAT_INVALID_PARAMETER;
00482 }
00483
00484 if (GAT_SUCCEEDED(retval) && clear_dirty)
00485 {
00486 object->isdirty = GATFalse;
00487 }
00488 }
00489 return retval;
00490 }
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506 static GATBool
00507 GATJobDescription_VersionCallback(GATuint32 version)
00508 {
00509 GATBool retval = GATFalse;
00510 if ((version & ~GATJOBDESCRIPTION_MINOR_MASK) <= GATJOBDESCRIPTION_LASTVERSION)
00511 {
00512 retval = GATTrue;
00513 }
00514 return retval;
00515 }
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540 static GATResult
00541 GATJobDescription_DeSerialiseCallback(GATContext context, GATObject stream,
00542 GATObject *new_object, GATuint32 version, va_list args)
00543 {
00544 GAT_USES_STATUS(context, "GATJobDescription_DeSerialiseCallback");
00545
00546
00547 GATuint32 *type = va_arg(args, GATuint32 *);
00548 GATSoftwareDescription *software = va_arg(args, GATSoftwareDescription *);
00549 GATObject *resource = va_arg(args, GATObject *);
00550
00551 GATJobDescription object = NULL;
00552
00553 GAT_UNUSED_PARAMETER(version);
00554
00555
00556 GAT_CREATE_STATUS(GATJobDescription_DeSerialise_Create(context, stream,
00557 *software, (GATType)*type, *resource, &object));
00558
00559 if (GAT_SUCCEEDED(GAT_CURRENT_STATUS()))
00560 {
00561 if (NULL != object)
00562 {
00563 *new_object = GATJobDescription_ToGATObject(object);
00564 }
00565 else
00566 {
00567 GATJobDescription_Destroy(&object);
00568 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00569 }
00570 }
00571
00572 return GAT_RETURN_STATUS();
00573 }
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589 GATJobDescription
00590 GATJobDescription_DeSerialise(GATContext context, GATObject stream,
00591 GATResult *result)
00592 {
00593 GAT_USES_STATUS(context, "GATJobDescription_DeSerialise");
00594 GATObject object = NULL;
00595
00596
00597
00598 GATuint32 version = 0;
00599
00600 GATSoftwareDescription software = NULL;
00601 GATuint32 type = GATType_NoType;
00602 GATObject resource = NULL;
00603
00604
00605 GATResult retval = GATXds_DeSerialiseObject(context, stream,
00606 GATJobDescription_DeSerialiseCallback, GATJobDescription_VersionCallback,
00607 &object, "uint32 uint32 object object", &version, &type, &software, &resource);
00608 GAT_CREATE_STATUS(retval);
00609 GATSoftwareDescription_Destroy(&software);
00610 GATObject_Destroy(&resource);
00611
00612 if (NULL != result)
00613 {
00614 *result = GAT_RETURN_STATUS();
00615 }
00616 else
00617 {
00618 GAT_STORE_STATUS();
00619 }
00620 return GATObject_ToGATJobDescription(object);
00621 }
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633 GATResult
00634 GATJobDescription_GetIsDirty(GATJobDescription_const object, GATBool *isdirty)
00635 {
00636 GATResult retval = GAT_INVALID_HANDLE;
00637 if (NULL != object)
00638 {
00639 if (NULL != isdirty)
00640 {
00641 *isdirty = object->isdirty;
00642 retval = GAT_SUCCESS;
00643 }
00644 else
00645 {
00646 retval = GAT_INVALID_PARAMETER;
00647 }
00648 }
00649 return retval;
00650 }
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665 GATResult
00666 GATJobDescription_internal_GetEnvironment(GATJobDescription jd, GATTable *env)
00667 {
00668 GATResult retval = GAT_INVALID_HANDLE;
00669 if (NULL != jd)
00670 {
00671 GATObject obj = NULL;
00672 retval = GATTable_internal_Get_GATObjectRef(
00673 GATSoftwareDescription_GetAttributes(jd->software), "environment", &obj);
00674
00675 if (GAT_FAILED(retval))
00676 {
00677
00678 GATTable environment = GATTable_Create();
00679
00680 if (NULL != environment)
00681 {
00682 GATTable attr = NULL;
00683 retval = GATSoftwareDescription_internal_GetAttributesRef(jd->software,
00684 &attr);
00685
00686 if (GAT_SUCCEEDED(retval))
00687 {
00688 retval = GATTable_Add_GATObject(attr, "environment",
00689 GATTable_ToGATObject_const(environment));
00690 }
00691
00692
00693 retval = GATTable_internal_Get_GATObjectRef(attr, "environment", &obj);
00694
00695 GATTable_Destroy(&environment);
00696 }
00697 else
00698 {
00699 retval = GAT_MEMORYFAILURE;
00700 }
00701 }
00702
00703 if (GAT_SUCCEEDED(retval))
00704 {
00705 if (NULL != env)
00706 {
00707 *env = GATObject_ToGATTable(obj);
00708 retval = GAT_SUCCESS;
00709 }
00710 else
00711 {
00712 retval = GAT_INVALID_PARAMETER;
00713 }
00714 }
00715 }
00716 return retval;
00717 }
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741 static GATResult
00742 GATJobDescription_DeSerialise_Create(GATContext context, GATObject stream,
00743 GATSoftwareDescription software, GATType type, GATObject resource,
00744 GATJobDescription *object)
00745 {
00746 GAT_USES_STATUS(context, "GATJobDescription_DeSerialise_Create");
00747 GATJobDescription new_object =
00748 (GATJobDescription) malloc(sizeof(struct GATJobDescription_S));
00749
00750 GAT_UNUSED_PARAMETER(stream);
00751 if(NULL != new_object)
00752 {
00753 memset(new_object, 0, sizeof(struct GATJobDescription_S));
00754 new_object->GATObject__vtable = &GATJobDescription__vtable;
00755 new_object->GATSerialisable__vtable = &GATJobDescription_ISerialisable__vtable;
00756 new_object->isdirty = GATFalse;
00757
00758 GAT_CREATE_STATUS(GATSoftwareDescription_Clone(software,
00759 &new_object->software));
00760 if (GATType_GATResourceDescription == type)
00761 {
00762 GATType resource_type = GATObject_GetType(resource);
00763 GAT_CREATE_STATUS(GATResourceDescription_Clone(resource_type,
00764 (GATResourceDescription) resource, &new_object->description));
00765 }
00766 else if (GATType_GATResource == type)
00767 {
00768 GAT_CREATE_STATUS(GATResource_Clone((GATResource) object,
00769 &new_object->resource));
00770 }
00771 else
00772 {
00773 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00774 }
00775 }
00776
00777 if (GAT_SUCCEEDED(GAT_CURRENT_STATUS()))
00778 {
00779 if (NULL != new_object)
00780 {
00781 *object = new_object;
00782 }
00783 else
00784 {
00785 GATJobDescription_Destroy(&new_object);
00786 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00787 }
00788 }
00789 else
00790 {
00791 GATJobDescription_Destroy(&new_object);
00792 }
00793
00794 return GAT_RETURN_STATUS();
00795 }
00796