2 * Copyright (c) 1999-2004, Index Data.
3 * See the file LICENSE for details.
5 * $Id: ill-get.c,v 1.2 2004-10-15 00:19:00 adam Exp $
10 * \brief Implements ILL package creator utilities
15 bool_t *ill_get_bool (struct ill_get_ctl *gc, const char *name,
16 const char *sub, int val)
21 bool_t *r = (bool_t *) odr_malloc (o, sizeof(*r));
23 strcpy(element, name);
26 strcat (element, ",");
27 strcat (element, sub);
30 v = (gc->f)(gc->clientData, element);
39 int *ill_get_int (struct ill_get_ctl *gc, const char *name,
40 const char *sub, int val)
46 strcpy(element, name);
49 strcat (element, ",");
50 strcat (element, sub);
52 v = (gc->f)(gc->clientData, element);
55 return odr_intdup(o, val);
58 int *ill_get_enumerated (struct ill_get_ctl *gc, const char *name,
59 const char *sub, int val)
61 return ill_get_int(gc, name, sub, val);
64 ILL_String *ill_get_ILL_String_x (struct ill_get_ctl *gc, const char *name,
65 const char *sub, const char *vdefault)
67 ILL_String *r = (ILL_String *) odr_malloc (gc->odr, sizeof(*r));
71 strcpy(element, name);
74 strcat (element, ",");
75 strcat (element, sub);
77 v = (gc->f)(gc->clientData, element);
82 r->which = ILL_String_GeneralString;
83 r->u.GeneralString = odr_strdup (gc->odr, v);
87 ILL_String *ill_get_ILL_String(struct ill_get_ctl *gc, const char *name,
90 return ill_get_ILL_String_x (gc, name, sub, 0);
93 ILL_ISO_Date *ill_get_ILL_ISO_Date (struct ill_get_ctl *gc, const char *name,
94 const char *sub, const char *val)
99 strcpy(element, name);
102 strcat (element, ",");
103 strcat (element, sub);
105 v = (gc->f)(gc->clientData, element);
110 return odr_strdup (gc->odr, v);
113 ILL_ISO_Time *ill_get_ILL_ISO_Time (struct ill_get_ctl *gc, const char *name,
114 const char *sub, const char *val)
119 strcpy(element, name);
122 strcat (element, ",");
123 strcat (element, sub);
125 v = (gc->f)(gc->clientData, element);
130 return odr_strdup (gc->odr, v);
133 ILL_Person_Or_Institution_Symbol *ill_get_Person_Or_Insitution_Symbol (
134 struct ill_get_ctl *gc, const char *name, const char *sub)
138 ILL_Person_Or_Institution_Symbol *p =
139 (ILL_Person_Or_Institution_Symbol *) odr_malloc (o, sizeof(*p));
141 strcpy(element, name);
144 strcat (element, ",");
145 strcat (element, sub);
147 p->which = ILL_Person_Or_Institution_Symbol_person_symbol;
148 if ((p->u.person_symbol = ill_get_ILL_String (gc, element, "person")))
151 p->which = ILL_Person_Or_Institution_Symbol_institution_symbol;
152 if ((p->u.institution_symbol =
153 ill_get_ILL_String (gc, element, "institution")))
158 static ILL_Name_Of_Person_Or_Institution *ill_get_Name_Of_Person_Or_Institution(
159 struct ill_get_ctl *gc, const char *name, const char *sub)
163 ILL_Name_Of_Person_Or_Institution *p =
164 (ILL_Name_Of_Person_Or_Institution *) odr_malloc (o, sizeof(*p));
166 strcpy(element, name);
169 strcat (element, ",");
170 strcat (element, sub);
172 p->which = ILL_Name_Of_Person_Or_Institution_name_of_person;
173 if ((p->u.name_of_person =
174 ill_get_ILL_String (gc, element, "name-of-person")))
177 p->which = ILL_Name_Of_Person_Or_Institution_name_of_institution;
178 if ((p->u.name_of_institution =
179 ill_get_ILL_String (gc, element, "name-of-institution")))
184 ILL_System_Id *ill_get_System_Id(struct ill_get_ctl *gc,
185 const char *name, const char *sub)
191 strcpy(element, name);
194 strcat (element, ",");
195 strcat (element, sub);
197 p = (ILL_System_Id *) odr_malloc (o, sizeof(*p));
198 p->person_or_institution_symbol = ill_get_Person_Or_Insitution_Symbol (
199 gc, element, "person-or-institution-symbol");
200 p->name_of_person_or_institution = ill_get_Name_Of_Person_Or_Institution (
201 gc, element, "name-of-person-or-institution");
205 ILL_Transaction_Id *ill_get_Transaction_Id (struct ill_get_ctl *gc,
206 const char *name, const char *sub)
209 ILL_Transaction_Id *r = (ILL_Transaction_Id *) odr_malloc (o, sizeof(*r));
212 strcpy(element, name);
215 strcat (element, ",");
216 strcat (element, sub);
218 r->initial_requester_id =
219 ill_get_System_Id (gc, element, "initial-requester-id");
220 r->transaction_group_qualifier =
221 ill_get_ILL_String_x (gc, element, "transaction-group-qualifier", "");
222 r->transaction_qualifier =
223 ill_get_ILL_String_x (gc, element, "transaction-qualifier", "");
224 r->sub_transaction_qualifier =
225 ill_get_ILL_String (gc, element, "sub-transaction-qualifier");
230 ILL_Service_Date_this *ill_get_Service_Date_this (
231 struct ill_get_ctl *gc, const char *name, const char *sub)
234 ILL_Service_Date_this *r =
235 (ILL_Service_Date_this *) odr_malloc (o, sizeof(*r));
238 strcpy(element, name);
241 strcat (element, ",");
242 strcat (element, sub);
244 r->date = ill_get_ILL_ISO_Date (gc, element, "date", "20000101");
245 r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
249 ILL_Service_Date_original *ill_get_Service_Date_original (
250 struct ill_get_ctl *gc, const char *name, const char *sub)
253 ILL_Service_Date_original *r =
254 (ILL_Service_Date_original *) odr_malloc (o, sizeof(*r));
257 strcpy(element, name);
260 strcat (element, ",");
261 strcat (element, sub);
263 r->date = ill_get_ILL_ISO_Date (gc, element, "date", 0);
264 r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
265 if (!r->date && !r->time)
270 ILL_Service_Date_Time *ill_get_Service_Date_Time (
271 struct ill_get_ctl *gc, const char *name, const char *sub)
274 ILL_Service_Date_Time *r =
275 (ILL_Service_Date_Time *) odr_malloc (o, sizeof(*r));
278 strcpy(element, name);
281 strcat (element, ",");
282 strcat (element, sub);
284 r->date_time_of_this_service = ill_get_Service_Date_this (
285 gc, element, "this");
286 r->date_time_of_original_service = ill_get_Service_Date_original (
287 gc, element, "original");
291 ILL_Requester_Optional_Messages_Type *ill_get_Requester_Optional_Messages_Type (
292 struct ill_get_ctl *gc, const char *name, const char *sub)
295 ILL_Requester_Optional_Messages_Type *r =
296 (ILL_Requester_Optional_Messages_Type *) odr_malloc (o, sizeof(*r));
299 strcpy(element, name);
302 strcat (element, ",");
303 strcat (element, sub);
305 r->can_send_RECEIVED = ill_get_bool (gc, element, "can-send-RECEIVED", 0);
306 r->can_send_RETURNED = ill_get_bool (gc, element, "can-send-RETURNED", 0);
307 r->requester_SHIPPED =
308 ill_get_enumerated (gc, element, "requester-SHIPPED", 1);
309 r->requester_CHECKED_IN =
310 ill_get_enumerated (gc, element, "requester-CHECKED-IN", 1);
314 ILL_Item_Id *ill_get_Item_Id (
315 struct ill_get_ctl *gc, const char *name, const char *sub)
318 ILL_Item_Id *r = (ILL_Item_Id *) odr_malloc (o, sizeof(*r));
321 strcpy(element, name);
324 strcat (element, ",");
325 strcat (element, sub);
327 r->item_type = ill_get_enumerated (gc, element, "item-type",
328 ILL_Item_Id_monograph);
329 r->held_medium_type = 0;
330 r->call_number = ill_get_ILL_String(gc, element, "call-number");
331 r->author = ill_get_ILL_String(gc, element, "author");
332 r->title = ill_get_ILL_String(gc, element, "title");
333 r->sub_title = ill_get_ILL_String(gc, element, "sub-title");
334 r->sponsoring_body = ill_get_ILL_String(gc, element, "sponsoring-body");
335 r->place_of_publication =
336 ill_get_ILL_String(gc, element, "place-of-publication");
337 r->publisher = ill_get_ILL_String(gc, element, "publisher");
338 r->series_title_number =
339 ill_get_ILL_String(gc, element, "series-title-number");
340 r->volume_issue = ill_get_ILL_String(gc, element, "volume-issue");
341 r->edition = ill_get_ILL_String(gc, element, "edition");
342 r->publication_date = ill_get_ILL_String(gc, element, "publication-date");
343 r->publication_date_of_component =
344 ill_get_ILL_String(gc, element, "publication-date-of-component");
345 r->author_of_article = ill_get_ILL_String(gc, element,
346 "author-of-article");
347 r->title_of_article = ill_get_ILL_String(gc, element, "title-of-article");
348 r->pagination = ill_get_ILL_String(gc, element, "pagination");
349 r->national_bibliography_no = 0;
350 r->iSBN = ill_get_ILL_String(gc, element, "ISBN");
351 r->iSSN = ill_get_ILL_String(gc, element, "ISSN");
353 r->additional_no_letters =
354 ill_get_ILL_String(gc, element, "additional-no-letters");
355 r->verification_reference_source =
356 ill_get_ILL_String(gc, element, "verification-reference-source");
361 ILL_Client_Id *ill_get_Client_Id (
362 struct ill_get_ctl *gc, const char *name, const char *sub)
366 ILL_Client_Id *r = (ILL_Client_Id *) odr_malloc(o, sizeof(*r));
368 strcpy(element, name);
371 strcat (element, ",");
372 strcat (element, sub);
374 r->client_name = ill_get_ILL_String (gc, element, "client-name");
375 r->client_status = ill_get_ILL_String (gc, element, "client-status");
376 r->client_identifier = ill_get_ILL_String (gc, element,
377 "client-identifier");
381 ILL_Postal_Address *ill_get_Postal_Address (
382 struct ill_get_ctl *gc, const char *name, const char *sub)
385 ILL_Postal_Address *r =
386 (ILL_Postal_Address *) odr_malloc(o, sizeof(*r));
389 strcpy(element, name);
392 strcat (element, ",");
393 strcat (element, sub);
395 r->name_of_person_or_institution =
396 ill_get_Name_Of_Person_Or_Institution (
397 gc, element, "name-of-person-or-institution");
398 r->extended_postal_delivery_address =
400 gc, element, "extended-postal-delivery-address");
401 r->street_and_number =
402 ill_get_ILL_String (gc, element, "street-and-number");
404 ill_get_ILL_String (gc, element, "post-office-box");
405 r->city = ill_get_ILL_String (gc, element, "city");
406 r->region = ill_get_ILL_String (gc, element, "region");
407 r->country = ill_get_ILL_String (gc, element, "country");
408 r->postal_code = ill_get_ILL_String (gc, element, "postal-code");
412 ILL_System_Address *ill_get_System_Address (
413 struct ill_get_ctl *gc, const char *name, const char *sub)
416 ILL_System_Address *r =
417 (ILL_System_Address *) odr_malloc(o, sizeof(*r));
420 strcpy(element, name);
423 strcat (element, ",");
424 strcat (element, sub);
426 r->telecom_service_identifier =
427 ill_get_ILL_String (gc, element, "telecom-service-identifier");
428 r->telecom_service_address =
429 ill_get_ILL_String (gc, element, "telecom-service-addreess");
433 ILL_Delivery_Address *ill_get_Delivery_Address (
434 struct ill_get_ctl *gc, const char *name, const char *sub)
437 ILL_Delivery_Address *r =
438 (ILL_Delivery_Address *) odr_malloc(o, sizeof(*r));
441 strcpy(element, name);
444 strcat (element, ",");
445 strcat (element, sub);
448 ill_get_Postal_Address (gc, element, "postal-address");
449 r->electronic_address =
450 ill_get_System_Address (gc, element, "electronic-address");
454 ILL_Search_Type *ill_get_Search_Type (
455 struct ill_get_ctl *gc, const char *name, const char *sub)
458 ILL_Search_Type *r = (ILL_Search_Type *) odr_malloc(o, sizeof(*r));
461 strcpy(element, name);
464 strcat (element, ",");
465 strcat (element, sub);
467 r->level_of_service = ill_get_ILL_String (gc, element, "level-of-service");
468 r->need_before_date = ill_get_ILL_ISO_Date (gc, element,
469 "need-before-date", 0);
470 r->expiry_date = ill_get_ILL_ISO_Date (gc, element, "expiry-date", 0);
471 r->expiry_flag = ill_get_enumerated (gc, element, "expiry-flag", 3);
476 ILL_Request *ill_get_ILLRequest (
477 struct ill_get_ctl *gc, const char *name, const char *sub)
480 ILL_Request *r = (ILL_Request *) odr_malloc(o, sizeof(*r));
483 strcpy(element, name);
486 strcat (element, ",");
487 strcat (element, sub);
489 r->protocol_version_num =
490 ill_get_enumerated (gc, element, "protocol-version-num",
491 ILL_Request_version_2);
493 r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
494 r->service_date_time =
495 ill_get_Service_Date_Time (gc, element, "service-date-time");
496 r->requester_id = ill_get_System_Id (gc, element, "requester-id");
497 r->responder_id = ill_get_System_Id (gc, element, "responder-id");
498 r->transaction_type =
499 ill_get_enumerated(gc, element, "transaction-type", 1);
501 r->delivery_address =
502 ill_get_Delivery_Address (gc, element, "delivery-address");
503 r->delivery_service = 0; /* TODO */
504 /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
506 ill_get_Delivery_Address (gc, element, "billing-address");
508 r->num_iLL_service_type = 1;
509 r->iLL_service_type = (ILL_Service_Type **)
510 odr_malloc (o, sizeof(*r->iLL_service_type));
511 *r->iLL_service_type =
512 ill_get_enumerated (gc, element, "ill-service-type",
513 ILL_Service_Type_copy_non_returnable);
515 r->responder_specific_service = 0;
516 r->requester_optional_messages =
517 ill_get_Requester_Optional_Messages_Type (
518 gc, element,"requester-optional-messages");
519 r->search_type = ill_get_Search_Type(gc, element, "search-type");
520 r->num_supply_medium_info_type = 0;
521 r->supply_medium_info_type = 0;
523 r->place_on_hold = ill_get_enumerated (
524 gc, element, "place-on-hold",
525 ILL_Place_On_Hold_Type_according_to_responder_policy);
526 r->client_id = ill_get_Client_Id (gc, element, "client-id");
528 r->item_id = ill_get_Item_Id (gc, element, "item-id");
529 r->supplemental_item_description = 0;
530 r->cost_info_type = 0;
531 r->copyright_compliance =
532 ill_get_ILL_String(gc, element, "copyright-complicance");
533 r->third_party_info_type = 0;
534 r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
535 r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
536 r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
537 r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
538 r->num_iLL_request_extensions = 0;
539 r->iLL_request_extensions = 0;
543 ILL_ItemRequest *ill_get_ItemRequest (
544 struct ill_get_ctl *gc, const char *name, const char *sub)
547 ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r));
550 strcpy(element, name);
553 strcat (element, ",");
554 strcat (element, sub);
556 r->protocol_version_num =
557 ill_get_enumerated (gc, element, "protocol-version-num",
558 ILL_Request_version_2);
560 r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
561 r->service_date_time =
562 ill_get_Service_Date_Time (gc, element, "service-date-time");
563 r->requester_id = ill_get_System_Id (gc, element, "requester-id");
564 r->responder_id = ill_get_System_Id (gc, element, "responder-id");
565 r->transaction_type =
566 ill_get_enumerated(gc, element, "transaction-type", 1);
568 r->delivery_address =
569 ill_get_Delivery_Address (gc, element, "delivery-address");
570 r->delivery_service = 0; /* TODO */
571 /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
573 ill_get_Delivery_Address (gc, element, "billing-address");
575 r->num_iLL_service_type = 1;
576 r->iLL_service_type = (ILL_Service_Type **)
577 odr_malloc (o, sizeof(*r->iLL_service_type));
578 *r->iLL_service_type =
579 ill_get_enumerated (gc, element, "ill-service-type",
580 ILL_Service_Type_copy_non_returnable);
582 r->responder_specific_service = 0;
583 r->requester_optional_messages =
584 ill_get_Requester_Optional_Messages_Type (
585 gc, element,"requester-optional-messages");
586 r->search_type = ill_get_Search_Type(gc, element, "search-type");
587 r->num_supply_medium_info_type = 0;
588 r->supply_medium_info_type = 0;
590 r->place_on_hold = ill_get_enumerated (
591 gc, element, "place-on-hold",
592 ILL_Place_On_Hold_Type_according_to_responder_policy);
593 r->client_id = ill_get_Client_Id (gc, element, "client-id");
595 r->item_id = ill_get_Item_Id (gc, element, "item-id");
596 r->supplemental_item_description = 0;
597 r->cost_info_type = 0;
598 r->copyright_compliance =
599 ill_get_ILL_String(gc, element, "copyright-complicance");
600 r->third_party_info_type = 0;
601 r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
602 r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
603 r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
604 r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
605 r->num_iLL_request_extensions = 0;
606 r->iLL_request_extensions = 0;
610 ILL_Cancel *ill_get_Cancel (
611 struct ill_get_ctl *gc, const char *name, const char *sub)
614 ILL_Cancel *r = (ILL_Cancel *)odr_malloc(o, sizeof(*r));
617 strcpy(element, name);
620 strcat (element, ",");
621 strcat (element, sub);
623 r->protocol_version_num =
624 ill_get_enumerated (gc, element, "protocol-version-num",
625 ILL_Request_version_2);
627 r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
628 r->service_date_time =
629 ill_get_Service_Date_Time (gc, element, "service-date-time");
630 r->requester_id = ill_get_System_Id (gc, element, "requester-id");
631 r->responder_id = ill_get_System_Id (gc, element, "responder-id");
632 r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
634 r->num_cancel_extensions = 0;
635 r->cancel_extensions = 0;
639 ILL_APDU *ill_get_APDU (
640 struct ill_get_ctl *gc, const char *name, const char *sub)
643 ILL_APDU *r = (ILL_APDU *)odr_malloc(o, sizeof(*r));
647 strcpy (element, name);
648 strcat (element, ",which");
650 v = (gc->f)(gc->clientData, element);
653 if (!strcmp (v, "request"))
655 r->which = ILL_APDU_ILL_Request;
656 r->u.illRequest = ill_get_ILLRequest(gc, name, sub);
658 else if (!strcmp (v, "cancel"))
660 r->which = ILL_APDU_Cancel;
661 r->u.Cancel = ill_get_Cancel(gc, name, sub);