#ifndef UCO_IDL #define UCO_IDL //*************************************************************** //* APPROVED via RFC N01-0268 on 6 August 2001 //*************************************************************** // ************************************************************* //* //* The USIGS Common Object Specification //* //* //* Description: Defines fundamental data types and //* interfaces to be used by other specifications to //* support interoperation across independently designed //* interfaces. //* //* //* //* History: //* Date Author Comment //* ----- ------ -------- //* 15 May 97 D. Lutz Initial release for review //* 2 July 97 D. Lutz Released for TEM review //* 11 July 97 D. Lutz Changes based on 2 July TEM //* Comments //* 16 Oct 97 D. Lutz Changes based on 7 Oct TEM //* Comments //* 14 Nov 97 D. Lutz Changes based on 4 Nov TEM //* Comments //* 17 Dec 97 D. Lutz Changes based on 9 Dec TEM //* Comments //* 13 Apr 98 J. Baldo Changes based on feedback from //* distributions of UCOS v1.1 and //* GIAS v3.1 //* 2 July 98 J. Baldo/D. Lutz Changes based on feedback //* from 22-23 June 98 TEM //* 29 Sept 98 J. Baldo/D. Lutz Changes based on feedback //* from 22-23 September 1998 TEM //* //* from 4-5 August 1999 TEM - Simplified the 2 and 3D Coordinates to be floats only. //* from 19 January 2000 TEM - //* included a generic exceptionÆs model that GIXS, //*GIAS Profile will use. //* 7 March 2000 from March 2000 TEM - added new //* structure that is somewhat similar //* to NameValueTable called a //* StringTable //* //* Notes //* ------- //* 7 March 2000 Needed to include the UID Module //* //************************************************************* #include "uid.idl" // The USIGS Common Objects module UCO { // Generic data types typedef string Name; typedef sequence < Name > NameList; struct NameName { Name name1; Name name2; }; typedef sequence NameNameList; struct NameValue { Name aname; any value; }; typedef sequence < NameValue > NameValueList; typedef float Percentage; typedef double Angle; struct Ratio { double numerator; double denominator; }; typedef double DataRate; typedef string UCOS_NULL; struct FileLocation { string user_name; string password; string host_name; string path_name; string file_name; }; typedef sequence < FileLocation > FileLocationList; enum Protocol { HTTP, FTP, FILE }; struct DirectAccessLocation { Protocol access_protocol; FileLocation file_location; }; struct Date { unsigned short year; unsigned short month; unsigned short day; }; struct Time { unsigned short hour; unsigned short minute; float second; }; typedef Time Duration; struct AbsTime { Date aDate; Time aTime; }; typedef string EmailAddress; // Begin DAG definition typedef unsigned long NodeID; enum NodeType { ROOT_NODE, ENTITY_NODE, RECORD_NODE, ATTRIBUTE_NODE }; struct Node { NodeID id; NodeType node_type; Name attribute_name; any value; }; enum Cardinality { ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY, ONE_TO_ZERO_OR_MORE, ONE_TO_ONE_OR_MORE, ONE_TO_ZERO_OR_ONE }; struct Edge { NodeID start_node; NodeID end_node; string relationship_type; }; typedef sequence < Node > NodeList; typedef sequence < Edge > EdgeList; struct DAG { NodeList nodes; EdgeList edges; }; typedef sequence < DAG > DAGList; // Begin StringDAG definition struct StringNode { NodeID id; NodeType node_type; Name attribute_name; string value; }; typedef sequence < StringNode > StringNodeList; struct StringDAG { any prod; StringNodeList nodes; EdgeList edges; }; typedef sequence < StringDAG > StringDAGList; enum ChangeType { ADD_CHANGE, UPDATE_CHANGE, DELETE_CHANGE }; struct Change { NodeID changed_node; ChangeType change_type; }; typedef sequence ChangeList; struct UpdateDAG { DAG data; ChangeList changes; }; typedef sequence UpdateDAGList; struct RequestDescription { string user_info; string request_type; string request_info; NameValueList request_details; }; typedef sequence < RequestDescription > RequestDescriptionList; typedef sequence BinData; typedef string XMLDocument; // Basic Geospatial data types // 3D and 2D floating point coordinate struct Coordinate2d { double x; double y; }; struct Coordinate3d { double x; double y; double z; }; struct LinearDimension { double dimension; string reference_system; }; typedef double AreaDimension; typedef LinearDimension Height; typedef LinearDimension Elevation; typedef LinearDimension Distance; typedef LinearDimension Radius; typedef sequence < Coordinate2d > LineString2d; typedef sequence < Coordinate3d > LineString3d; typedef sequence < Coordinate2d > Polygon; typedef sequence < Polygon > PolygonSet; struct Circle { Coordinate2d centerpoint; Radius aRadius; }; struct Ellipse { Coordinate2d centerpoint; Distance minor_axis_len; Distance major_axis_len; Angle north_angle; }; struct Rectangle { Coordinate2d upper_left; Coordinate2d lower_right; }; typedef sequence < Rectangle > RectangleList; typedef double FileSize; typedef double Weight; // Simple composite geospatial datatypes enum BufferType { OCTET_DATA, CHAR_DATA, SHORT_DATA, USHORT_DATA, LONG_DATA, ULONG_DATA, FLOAT_DATA, DOUBLE_DATA }; typedef sequence < octet > octetList; typedef sequence < char >charList; typedef sequence < unsigned short >ushortList; typedef sequence < short >shortList; typedef sequence < unsigned long >ulongList; typedef sequence < long >longList; typedef sequence < float >floatList; typedef sequence < double >doubleList; union Buffer switch (BufferType) { case OCTET_DATA: octetList octet_buffer; case CHAR_DATA: charList char_buffer; case USHORT_DATA:ushortList ushort_buffer; case SHORT_DATA: shortList short_buffer; case ULONG_DATA: ulongList ulong_buffer; case LONG_DATA: longList long_buffer; case FLOAT_DATA: floatList float_buffer; case DOUBLE_DATA:doubleList double_buffer; }; struct SimpleGSImage { unsigned long width; unsigned long height; Buffer pixels; }; struct SimpleCImage { unsigned long width; unsigned long height; Buffer red_pixels; Buffer green_pixels; Buffer blue_pixels; }; struct CompressedImage { unsigned long width; unsigned long height; string compression_form; octetList data; }; enum State { COMPLETED, IN_PROGRESS, ABORTED, CANCELED, PENDING, SUSPENDED, RESULTS_AVAILABLE, TRANSFER_COMPLETE }; struct Status { State completion_state; boolean warning; string status_message; }; struct EntityNode { NodeID id; string entity_name; }; struct EntityRelationship { NodeID start_node; NodeID end_node; Cardinality start_to_end_card; Cardinality end_to_start_card; }; typedef sequence < EntityNode > EntityNodeList; typedef sequence < EntityRelationship > EntityRelationshipList; struct EntityGraph { EntityNodeList nodes; EntityRelationshipList relationship; }; //*********************************************************** // Exception Structure and Exceptions for the UCO (also // used for GIAS, GIXS and Profile Service) //************************************************************ struct exception_details { string exception_name; boolean standard_exception_name; string exception_desc; }; //InvalidInputParameter Exception exception InvalidInputParameter { exception_details details; UCO::NameList badInputParameters; }; //Processing Fault Exception exception ProcessingFault { exception_details details; }; //System Fault Exception exception SystemFault { exception_details details; }; }; #endif