Index: openacs-4/packages/acs-service-contract/acs-service-contract.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/acs-service-contract.info,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/acs-service-contract.info 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,49 @@
+
+
+
+
+ ACS Service Contract
+ ACS Service Contract
+ t
+ t
+
+
+
+ oracle
+ postgresql
+
+ Neophytos Demetriou
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,253 @@
+-- QUESTION: IS THIS STUFF GENERAL ENOUGH TO MOVE IT INTO A NEW PACKAGE?
+--
+select acs_object_type__create_type (
+ 'acs_sc_msg_type', -- object_type
+ 'ACS SC Message Type', -- pretty_name
+ 'ACS SC Message Types', -- pretty_plural
+ 'acs_object', -- supertype
+ 'acs_sc_msg_type', -- table_name
+ 'msg_type_id', -- id_column
+ null, -- package_name
+ 'f', -- abstract_p
+ null, -- type_extension_table
+ null -- name_method
+);
+
+
+
+create table acs_sc_msg_type (
+ msg_type_id integer
+ constraint acs_sc_msg_type_id_fk
+ references acs_objects(object_id)
+ on delete cascade
+ constraint acs_sc_msg_type_pk
+ primary key,
+ msg_type_name varchar(100)
+ constraint acs_sc_msg_type_name_un
+ unique
+);
+
+
+create function acs_sc_msg_type__new(varchar,varchar)
+returns integer as '
+declare
+ p_msg_type_name alias for $1;
+ p_msg_type_spec alias for $2;
+ v_msg_type_id integer;
+begin
+
+ v_msg_type_id := acs_object__new(
+ null,
+ ''acs_sc_msg_type'',
+ now(),
+ null,
+ null,
+ null
+ );
+
+ insert into acs_sc_msg_type (
+ msg_type_id,
+ msg_type_name
+ ) values (
+ v_msg_type_id,
+ p_msg_type_name
+ );
+
+ perform acs_sc_msg_type_spec__parse(p_msg_type_name,p_msg_type_spec);
+
+ return v_msg_type_id;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_msg_type__get_id(varchar)
+returns integer as '
+declare
+ p_msg_type_name alias for $1;
+ v_msg_type_id integer;
+begin
+
+ select msg_type_id into v_msg_type_id
+ from acs_sc_msg_type
+ where msg_type_name = p_msg_type_name;
+
+ return v_msg_type_id;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_msg_type__get_name(integer)
+returns varchar as '
+declare
+ p_msg_type_id alias for $1;
+ v_msg_type_name varchar;
+begin
+
+ select msg_type_name into v_msg_type_name
+ from acs_sc_msg_type
+ where msg_type_id = p_msg_type_id;
+
+ return v_msg_type_name;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_msg_type__delete(integer)
+returns integer as '
+declare
+ p_msg_type_id alias for $1;
+begin
+
+ delete from acs_sc_msg_type
+ where msg_type_id = p_msg_type_id;
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_msg_type__delete(varchar)
+returns integer as '
+declare
+ p_msg_type_name alias for $1;
+ v_msg_type_id integer;
+begin
+
+ v_msg_type_id := acs_sc_msg_type__get_id(p_msg_type_name);
+
+ perform acs_sc_msg_type__delete(v_msg_type_id);
+
+ return v_msg_type_id;
+
+end;' language 'plpgsql';
+
+
+
+create table acs_sc_msg_type_element (
+ msg_type_id integer
+ constraint acs_sc_msg_type_el_mtype_id_fk
+ references acs_sc_msg_type(msg_type_id)
+ on delete cascade,
+ element_name varchar(100),
+ element_msg_type_id integer
+ constraint acs_sc_msg_type_el_mtype_id_fk
+ references acs_sc_msg_type(msg_type_id),
+ element_msg_type_isset_p boolean,
+ element_pos integer
+);
+
+
+
+
+create function acs_sc_msg_type_element__new(varchar,varchar,varchar,boolean,integer)
+returns integer as '
+declare
+ p_msg_type_name alias for $1;
+ p_element_name alias for $2;
+ p_element_msg_type_name alias for $3;
+ p_element_msg_type_isset_p alias for $4;
+ p_element_pos alias for $5;
+ v_msg_type_id integer;
+ v_element_msg_type_id integer;
+begin
+
+ v_msg_type_id := acs_sc_msg_type__get_id(p_msg_type_name);
+
+ if v_msg_type_id is null then
+ raise exception ''Unknown Message Type: %'', p_msg_type_name;
+ end if;
+
+ v_element_msg_type_id := acs_sc_msg_type__get_id(p_element_msg_type_name);
+
+ if v_element_msg_type_id is null then
+ raise exception ''Unknown Message Type: %'', p_element_msg_type_name;
+ end if;
+
+ insert into acs_sc_msg_type_element (
+ msg_type_id,
+ element_name,
+ element_msg_type_id,
+ element_msg_type_isset_p,
+ element_pos
+ ) values (
+ v_msg_type_id,
+ p_element_name,
+ v_element_msg_type_id,
+ p_element_msg_type_isset_p,
+ p_element_pos
+ );
+
+ return v_msg_type_id;
+
+end;' language 'plpgsql';
+
+
+
+
+create function acs_sc_msg_type_spec__parse(varchar,varchar)
+returns integer as '
+declare
+ p_msg_type_name alias for $1;
+ p_msg_type_spec alias for $2;
+ v_element varchar;
+ v_element_type varchar;
+ v_str_pos integer;
+ v_element_name varchar;
+ v_element_msg_type_name varchar;
+ v_element_msg_type_isset_p boolean;
+ v_element_pos integer;
+begin
+
+ v_element_pos := 1;
+ v_element := split(p_msg_type_spec, '','', v_element_pos);
+
+ while v_element is not null loop
+
+ v_str_pos = instr(v_element, '':'', 1, 1);
+
+ if v_str_pos > 0 then
+ v_element_name := trim(substr(v_element, 1, v_str_pos-1));
+ v_element_type := trim(substr(v_element, v_str_pos+1, length(v_element) - v_str_pos));
+ if (instr(v_element_type, ''['',1,1) = length(v_element_type)-1) and
+ (instr(v_element_type, '']'',1,1) = length(v_element_type)) then
+ v_element_msg_type_isset_p := ''t'';
+ v_element_msg_type_name := trim(substr(v_element_type,1,length(v_element_type)-2));
+ if v_element_msg_type_name = '''' then
+ raise exception ''Wrong Format: Message Type Specification'';
+ end if;
+ else
+ v_element_msg_type_isset_p := ''f'';
+ v_element_msg_type_name := v_element_type;
+ end if;
+ else
+ raise exception ''Wrong Format: Message Type Specification'';
+ end if;
+
+ perform acs_sc_msg_type_element__new(
+ p_msg_type_name, -- msg_type_id
+ v_element_name, -- element_name
+ v_element_msg_type_name, -- element_msg_type_id
+ v_element_msg_type_isset_p, -- element_msg_type_isset_p
+ v_element_pos -- element_pos
+ );
+
+ v_element_pos := v_element_pos + 1;
+ v_element := split(p_msg_type_spec, '','', v_element_pos);
+
+ end loop;
+
+ return v_element_pos-1;
+
+end;' language 'plpgsql';
+
+
+
+--
+-- Primitive Message Types
+--
+select acs_sc_msg_type__new('integer','');
+select acs_sc_msg_type__new('string','');
+select acs_sc_msg_type__new('boolean','');
+select acs_sc_msg_type__new('timestamp','');
+select acs_sc_msg_type__new('uri','');
+select acs_sc_msg_type__new('version','');
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-msg-types-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,12 @@
+drop function acs_sc_msg_type_spec__parse(varchar,varchar);
+drop function acs_sc_msg_type_element__new(varchar,varchar,varchar,boolean,integer);
+drop table acs_sc_msg_type_element;
+drop function acs_sc_msg_type__delete(varchar);
+drop function acs_sc_msg_type__delete(integer);
+drop function acs_sc_msg_type__get_name(integer);
+drop function acs_sc_msg_type__get_id(varchar);
+drop function acs_sc_msg_type__new(varchar,varchar);
+drop table acs_sc_msg_type;
+delete from acs_objects where object_type = 'acs_sc_msg_type';
+select acs_object_type__drop_type ('acs_sc_msg_type', 'f');
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,42 @@
+select acs_object_type__create_type (
+ 'acs_sc_contract', -- object_type
+ 'ACS SC Contract', -- pretty_name
+ 'ACS SC Contracts', -- pretty_plural
+ 'acs_object', -- supertype
+ 'acs_sc_contract', -- table_name
+ 'contract_id', -- id_column
+ null, -- package_name
+ 'f', -- abstract_p
+ null, -- type_extension_table
+ null -- name_method
+);
+
+
+
+select acs_object_type__create_type (
+ 'acs_sc_operation', -- object_type
+ 'ACS SC Operation', -- pretty_name
+ 'ACS SC Operations', -- pretty_plural
+ 'acs_object', -- supertype
+ 'acs_sc_operation', -- table_name
+ 'operation_id', -- id_column
+ null, -- package_name
+ 'f', -- abstract_p
+ null, -- type_extension_table
+ null -- name_method
+);
+
+
+select acs_object_type__create_type (
+ 'acs_sc_implementation', -- object_type
+ 'ACS SC Implementation', -- pretty_name
+ 'ACS SC Implementations', -- pretty_plural
+ 'acs_object', -- supertype
+ 'acs_sc_impl', -- table_name
+ 'impl_id', -- id_column
+ null, -- package_name
+ 'f', -- abstract_p
+ null, -- type_extension_table
+ null -- name_method
+);
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-object-types-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,9 @@
+delete from acs_objects where object_type = 'acs_sc_implementation';
+select acs_object_type__drop_type ('acs_sc_implementation', 'f');
+
+delete from acs_objects where object_type = 'acs_sc_operation';
+select acs_object_type__drop_type ('acs_sc_operation', 'f');
+
+delete from acs_objects where object_type = 'acs_sc_contract';
+select acs_object_type__drop_type ('acs_sc_contract', 'f');
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,484 @@
+create function acs_sc_contract__new(varchar,text)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_contract_desc alias for $2;
+ v_contract_id integer;
+begin
+
+ v_contract_id := acs_object__new(
+ null,
+ ''acs_sc_contract'',
+ now(),
+ null,
+ null,
+ null
+ );
+
+ insert into acs_sc_contract (
+ contract_id,
+ contract_name,
+ contract_desc
+ ) values (
+ v_contract_id,
+ p_contract_name,
+ p_contract_desc
+ );
+
+ return v_contract_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_contract__get_id(varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ v_contract_id integer;
+begin
+
+ select contract_id into v_contract_id
+ from acs_sc_contract
+ where contract_name = p_contract_name;
+
+ return v_contract_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_contract__get_name(integer)
+returns varchar as '
+declare
+ p_contract_id alias for $1;
+ v_contract_name varchar;
+begin
+
+ select contract_name into v_contract_name
+ from acs_sc_contract
+ where contract_id = p_contract_id;
+
+ return v_contract_name;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_contract__delete(integer)
+returns integer as '
+declare
+ p_contract_id alias for $1;
+begin
+
+ delete from acs_sc_contract
+ where contract_id = p_contract_id;
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_contract__delete(varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ v_contract_id integer;
+begin
+
+ v_contract_id := acs_sc_contract__get_id(p_contract_name);
+
+ perform acs_sc_contract__delete(v_contract_id);
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_operation__new(varchar,varchar,text,boolean,integer,varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_operation_name alias for $2;
+ p_operation_desc alias for $3;
+ p_operation_iscachable_p alias for $4;
+ p_operation_nargs alias for $5;
+ p_operation_inputtype alias for $6;
+ p_operation_outputtype alias for $7;
+ v_contract_id integer;
+ v_operation_id integer;
+ v_operation_inputtype_id integer;
+ v_operation_outputtype_id integer;
+begin
+
+ v_contract_id := acs_sc_contract__get_id(p_contract_name);
+
+ v_operation_id := acs_object__new(
+ null,
+ ''acs_sc_operation'',
+ now(),
+ null,
+ null,
+ null
+ );
+
+ v_operation_inputtype_id := acs_sc_msg_type__get_id(p_operation_inputtype);
+
+ v_operation_outputtype_id := acs_sc_msg_type__get_id(p_operation_outputtype);
+
+ insert into acs_sc_operation (
+ contract_id,
+ operation_id,
+ contract_name,
+ operation_name,
+ operation_desc,
+ operation_iscachable_p,
+ operation_nargs,
+ operation_inputtype_id,
+ operation_outputtype_id
+ ) values (
+ v_contract_id,
+ v_operation_id,
+ p_contract_name,
+ p_operation_name,
+ p_operation_desc,
+ p_operation_iscachable_p,
+ p_operation_nargs,
+ v_operation_inputtype_id,
+ v_operation_outputtype_id
+ );
+
+ return v_operation_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_operation__get_id(varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_operation_name alias for $2;
+ v_operation_id integer;
+begin
+
+ select operation_id into v_operation_id
+ from acs_sc_operation
+ where contract_name = p_contract_name
+ and operation_name = p_operation_name;
+
+ return v_operation_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_operation__delete(integer)
+returns integer as '
+declare
+ p_operation_id alias for $1;
+begin
+
+ delete from acs_sc_operation
+ where operation_id = p_operation_id;
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_operation__delete(varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_operation_name alias for $2;
+ v_operation_id integer;
+begin
+
+ v_operation_id := acs_sc_operation__get_id(
+ p_contract_name,
+ p_operation_name
+ );
+
+ perform acs_sc_operation__delete(v_operation_id);
+
+ return v_operation_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_impl__new(varchar,varchar,varchar)
+returns integer as '
+declare
+ p_impl_contract_name alias for $1;
+ p_impl_name alias for $2;
+ p_impl_owner_name alias for $3;
+ v_impl_id integer;
+begin
+
+ v_impl_id := acs_object__new(
+ null,
+ ''acs_sc_implementation'',
+ now(),
+ null,
+ null,
+ null
+ );
+
+ insert into acs_sc_impl (
+ impl_id,
+ impl_name,
+ impl_owner_name,
+ impl_contract_name
+ ) values (
+ v_impl_id,
+ p_impl_name,
+ p_impl_owner_name,
+ p_impl_contract_name
+ );
+
+ return v_impl_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_impl__get_id(varchar,varchar)
+returns integer as '
+declare
+ p_impl_contract_name alias for $1;
+ p_impl_name alias for $2;
+ v_impl_id integer;
+begin
+
+ select impl_id into v_impl_id
+ from acs_sc_impl
+ where impl_name = p_impl_name
+ and impl_contract_name = p_impl_contract_name;
+
+ return v_impl_id;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_impl__get_name(integer)
+returns varchar as '
+declare
+ p_impl_id alias for $1;
+ v_impl_name varchar;
+begin
+
+ select impl_name into v_impl_name
+ from acs_sc_impl
+ where impl_id = p_impl_id;
+
+ return v_impl_name;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_impl__delete(varchar,varchar)
+returns integer as '
+declare
+ p_impl_contract_name alias for $1;
+ p_impl_name alias for $2;
+begin
+
+ delete from acs_sc_impl
+ where impl_contract_name = p_impl_contract_name
+ and impl_name = p_impl_name;
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+
+
+
+create function acs_sc_impl_alias__new(varchar,varchar,varchar,varchar,varchar)
+returns integer as '
+declare
+ p_impl_contract_name alias for $1;
+ p_impl_name alias for $2;
+ p_impl_operation_name alias for $3;
+ p_impl_alias alias for $4;
+ p_impl_pl alias for $5;
+ v_impl_id integer;
+begin
+
+ v_impl_id := acs_sc_impl__get_id(p_impl_contract_name,p_impl_name);
+
+ insert into acs_sc_impl_alias (
+ impl_id,
+ impl_name,
+ impl_contract_name,
+ impl_operation_name,
+ impl_alias,
+ impl_pl
+ ) values (
+ v_impl_id,
+ p_impl_name,
+ p_impl_contract_name,
+ p_impl_operation_name,
+ p_impl_alias,
+ p_impl_pl
+ );
+
+ return v_impl_id;
+
+end;' language 'plpgsql';
+
+
+
+
+create function acs_sc_impl_alias__delete(varchar,varchar)
+returns integer as '
+declare
+ p_impl_contract_name alias for $1;
+ p_impl_name alias for $2;
+ p_impl_operation_name alias for $3;
+ v_impl_id integer;
+begin
+
+ v_impl_id := acs_sc_impl__get_id(p_impl_name);
+
+ delete from acs_sc_impl_alias
+ where impl_contract_name = p_impl_contract_name
+ and impl_name = p_impl_name
+ and impl_operation_name = p_impl_operation_name;
+
+ return v_impl_id;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_binding__new(integer,integer)
+returns integer as '
+declare
+ p_contract_id alias for $1;
+ p_impl_id alias for $2;
+ v_contract_name varchar;
+ v_impl_name varchar;
+ v_count integer;
+begin
+
+ v_contract_name := acs_sc_contract__get_name(p_contract_id);
+ v_impl_name := acs_sc_impl__get_name(p_impl_id);
+
+ select count(*) into v_count
+ from acs_sc_operation
+ where contract_id = p_contract_id
+ and operation_name not in (select impl_operation_name
+ from acs_sc_impl_alias
+ where impl_contract_name = v_contract_name
+ and impl_id = p_impl_id);
+
+ if v_count > 0 then
+ raise exception ''Binding of % to % failed.'', v_contract_name, v_impl_name;
+ end if;
+
+ insert into acs_sc_binding (
+ contract_id,
+ impl_id
+ ) values (
+ p_contract_id,
+ p_impl_id
+ );
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_binding__new(varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_impl_name alias for $2;
+ v_contract_id integer;
+ v_impl_id integer;
+ v_count integer;
+begin
+
+ v_contract_id := acs_sc_contract__get_id(p_contract_name);
+
+ v_impl_id := acs_sc_impl__get_id(p_contract_name,p_impl_name);
+
+ perform acs_sc_binding__new(v_contract_id,v_impl_id);
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+create function acs_sc_binding__delete(integer,integer)
+returns integer as '
+declare
+ p_contract_id alias for $1;
+ p_impl_id alias for $2;
+begin
+
+ delete from acs_sc_binding
+ where contract_id = p_contract_id
+ and impl_id = p_impl_id;
+
+ return 0;
+end;' language 'plpgsql';
+
+
+create function acs_sc_binding__delete(varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_impl_name alias for $2;
+ v_contract_id integer;
+ v_impl_id integer;
+begin
+
+ v_contract_id := acs_sc_contract__get_id(p_contract_name);
+
+ v_impl_id := acs_sc_impl__get_id(p_contract_name,p_impl_name);
+
+ perform acs_sc_binding__delete(v_contract_id,v_impl_id);
+
+ return 0;
+
+end;' language 'plpgsql';
+
+
+
+create function acs_sc_binding__exists_p(varchar,varchar)
+returns integer as '
+declare
+ p_contract_name alias for $1;
+ p_impl_name alias for $2;
+ v_contract_id integer;
+ v_impl_id integer;
+ v_exists_p integer;
+begin
+
+ v_contract_id := acs_sc_contract__get_id(p_contract_name);
+
+ v_impl_id := acs_sc_impl__get_id(p_contract_name,p_impl_name);
+
+ select case when count(*)=0 then 0 else 1 end into v_exists_p
+ from acs_sc_binding
+ where contract_id = v_contract_id
+ and impl_id = v_impl_id;
+
+ return v_exists_p;
+
+end;' language 'plpgsql';
+
+
+
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-packages-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,20 @@
+drop function acs_sc_binding__exists_p(varchar,varchar);
+drop function acs_sc_binding__delete(varchar,varchar);
+drop function acs_sc_binding__delete(integer,integer);
+drop function acs_sc_binding__new(integer,integer);
+drop function acs_sc_binding__new(varchar,varchar);
+drop function acs_sc_impl_alias__delete(varchar,varchar);
+drop function acs_sc_impl_alias__new(varchar,varchar,varchar,varchar,varchar);
+drop function acs_sc_impl__delete(varchar,varchar);
+drop function acs_sc_impl__get_name(integer);
+drop function acs_sc_impl__get_id(varchar,varchar);
+drop function acs_sc_impl__new(varchar,varchar,varchar);
+drop function acs_sc_operation__delete(varchar,varchar);
+drop function acs_sc_operation__delete(integer);
+drop function acs_sc_operation__get_id(varchar,varchar);
+drop function acs_sc_operation__new(varchar,varchar,text,boolean,integer,varchar,varchar);
+drop function acs_sc_contract__delete(varchar);
+drop function acs_sc_contract__delete(integer);
+drop function acs_sc_contract__get_name(integer);
+drop function acs_sc_contract__get_id(varchar);
+drop function acs_sc_contract__new(varchar,text);
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,99 @@
+create table acs_sc_contract (
+ contract_id integer
+ constraint acs_sc_contract_id_fk
+ references acs_objects(object_id)
+ on delete cascade
+ constraint acs_sc_contract_pk
+ primary key,
+ contract_name varchar(1000)
+ constraint acs_sc_contract_name_nn
+ not null
+ constraint acs_sc_contract_name_un
+ unique,
+ contract_desc text
+ constraint acs_sc_contract_desc_nn
+ not null
+);
+
+
+
+
+
+create table acs_sc_operation (
+ contract_id integer
+ constraint acs_sc_operation_cid_fk
+ references acs_sc_contract(contract_id)
+ on delete cascade,
+ operation_id integer
+ constraint acs_sc_operation_opid_fk
+ references acs_objects(object_id)
+ on delete cascade
+ constraint acs_sc_operation_pk
+ primary key,
+ contract_name varchar(1000),
+ operation_name varchar(100),
+ operation_desc text
+ constraint acs_sc_operation_desc_nn
+ not null,
+ operation_iscachable_p boolean,
+ operation_nargs integer,
+ operation_inputtype_id integer
+ constraint acs_sc_operation_intype_fk
+ references acs_sc_msg_type(msg_type_id),
+ operation_outputtype_id integer
+ constraint acs_sc_operation_outtype_fk
+ references acs_sc_msg_type(msg_type_id)
+);
+
+
+
+create table acs_sc_impl (
+ impl_id integer
+ constraint acs_sc_impl_impl_id_fk
+ references acs_objects(object_id)
+ on delete cascade
+ constraint acs_sc_impl_pk
+ primary key,
+ impl_name varchar(100),
+ impl_owner_name varchar(1000),
+ impl_contract_name varchar(1000)
+);
+
+
+
+create table acs_sc_impl_alias (
+ impl_id integer
+ constraint acs_sc_impl_proc_impl_id_fk
+ references acs_sc_impl(impl_id)
+ on delete cascade,
+ impl_name varchar(100),
+ impl_contract_name varchar(1000),
+ impl_operation_name varchar(100),
+ impl_alias varchar(100),
+ impl_pl varchar(100),
+constraint acs_sc_impl_alias_un unique(impl_name,impl_contract_name,impl_operation_name)
+);
+
+
+
+create table acs_sc_binding (
+ contract_id integer
+ constraint acs_sc_binding_cid_fk
+ references acs_sc_contract(contract_id)
+ on delete cascade,
+ impl_id integer
+ constraint acs_sc_binding_impl_id_fk
+ references acs_sc_impl(impl_id)
+ on delete cascade
+);
+
+
+
+
+
+
+
+
+
+
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-tables-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,5 @@
+drop table acs_sc_binding;
+drop table acs_sc_impl_alias;
+drop table acs_sc_impl;
+drop table acs_sc_operation;
+drop table acs_sc_contract;
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,46 @@
+create view valid_uninstalled_binding as
+ select c.contract_id, c.contract_name, i.impl_id, i.impl_name
+ from acs_sc_contract c, acs_sc_impl i
+ where c.contract_name = i.impl_contract_name
+ and not exists (select 1
+ from acs_sc_binding b
+ where b.contract_id = c.contract_id
+ and b.impl_id = i.impl_id)
+ and not exists (select 1
+ from acs_sc_operation o
+ where o.contract_id = c.contract_id
+ and not exists (select 1
+ from acs_sc_impl_alias a
+ where a.impl_contract_name = c.contract_name
+ and a.impl_id = i.impl_id
+ and a.impl_operation_name = o.operation_name));
+
+
+
+create view invalid_uninstalled_binding as
+ select c.contract_id, c.contract_name, i.impl_id, i.impl_name
+ from acs_sc_contract c, acs_sc_impl i
+ where c.contract_name = i.impl_contract_name
+ and not exists (select 1
+ from acs_sc_binding b
+ where b.contract_id = c.contract_id
+ and b.impl_id = i.impl_id)
+ and exists (select 1
+ from acs_sc_operation o
+ where o.contract_id = c.contract_id
+ and not exists (select 1
+ from acs_sc_impl_alias a
+ where a.impl_contract_name = c.contract_name
+ and a.impl_id = i.impl_id
+ and a.impl_operation_name = o.operation_name));
+
+
+create view orphan_implementation as
+ select i.impl_id, i.impl_name, i.impl_contract_name
+ from acs_sc_impl i
+ where not exists (select 1
+ from acs_sc_binding b
+ where b.impl_id = i.impl_id)
+ and not exists (select 1
+ from acs_sc_contract c
+ where c.contract_name = i.impl_contract_name);
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-sc-views-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,3 @@
+drop view orphan_implementation;
+drop view invalid_uninstalled_binding;
+drop view valid_uninstalled_binding;
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,5 @@
+\i acs-sc-msg-types-create.sql
+\i acs-sc-object-types-create.sql
+\i acs-sc-tables-create.sql
+\i acs-sc-packages-create.sql
+\i acs-sc-views-create.sql
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/acs-service-contract-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,5 @@
+\i acs-sc-views-drop.sql
+\i acs-sc-packages-drop.sql
+\i acs-sc-tables-drop.sql
+\i acs-sc-object-types-drop.sql
+\i acs-sc-msg-types-drop.sql
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-create.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-create.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,87 @@
+-- CREATE CONTRACT
+
+select acs_sc_contract__new (
+ 'ObjectDisplay', -- contract_name
+ 'Object display' -- contract_desc
+);
+
+
+select acs_sc_msg_type__new ('ObjectDisplay.Name.InputType','object_id:integer');
+select acs_sc_msg_type__new ('ObjectDisplay.Name.OutputType','object_name:string');
+
+select acs_sc_operation__new (
+ 'ObjectDisplay', -- contract_name
+ 'name', -- operation_name
+ 'Returns object''s name', -- operation_desc
+ 'f', -- operation_iscachable_p
+ 1, -- operation_nargs
+ 'ObjectDisplay.Name.InputType', -- operation_inputtype
+ 'ObjectDisplay.Name.OutputType' -- operation_outputtype
+);
+
+
+select acs_sc_msg_type__new ('ObjectDisplay.Url.InputType','object_id:integer');
+select acs_sc_msg_type__new ('ObjectDisplay.Url.OutputType','object_url:uri');
+
+select acs_sc_operation__new (
+ 'ObjectDisplay', -- contract_name
+ 'url', -- operation_name
+ 'Returns object''s url', -- operation_desc
+ 'f', -- operation_iscachable_p
+ 1, -- operation_nargs
+ 'ObjectDisplay.Url.InputType', -- operation_inputtype
+ 'ObjectDisplay.Url.OutputType' -- operation_outputtype
+);
+
+select acs_sc_msg_type__new ('ObjectDisplay.SampleHello.InputType','object_id:integer,object_txt:string');
+select acs_sc_msg_type__new ('ObjectDisplay.SampleHello.OutputType','object_sample:string[],xxx_p:boolean');
+
+select acs_sc_operation__new (
+ 'ObjectDisplay', -- contract_name
+ 'sample_hello', -- operation_name
+ 'Returns object''s url', -- operation_desc
+ 't', -- operation_iscachable_p
+ 1, -- operation_nargs
+ 'ObjectDisplay.SampleHello.InputType', -- operation_inputtype
+ 'ObjectDisplay.SampleHello.OutputType' -- operation_outputtype
+);
+
+
+
+-- CREATE IMPLEMENTATION
+
+
+select acs_sc_impl__new(
+ 'ObjectDisplay', -- impl_contract_name
+ 'bboard_message', -- impl_name
+ 'bboard' -- impl_owner_name
+);
+
+
+select acs_sc_impl_alias__new(
+ 'ObjectDisplay', -- impl_contract_name
+ 'bboard_message', -- impl_name
+ 'name', -- impl_operation_name
+ 'bboard_message__name', -- impl_alias
+ 'PLPGSQL' -- impl_pl
+);
+
+select acs_sc_impl_alias__new(
+ 'ObjectDisplay', -- impl_contract_name
+ 'bboard_message', -- impl_name
+ 'url', -- impl_operation_name
+ 'bboard_message__url', -- impl_alias
+ 'PLPGSQL' -- impl_pl
+);
+
+select acs_sc_impl_alias__new(
+ 'ObjectDisplay', -- impl_contract_name
+ 'bboard_message', -- impl_name
+ 'sample_hello', -- impl_operation_name
+ 'bboard_message__sample_hello', -- impl_alias
+ 'TCL' -- impl_pl
+);
+
+
+
+
Index: openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-drop.sql,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/sql/postgresql/sc-sample-drop.sql 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,16 @@
+select acs_sc_contract__delete('ObjectDisplay');
+
+select acs_sc_msg_type__delete ('ObjectDisplay.Name.InputType');
+select acs_sc_msg_type__delete ('ObjectDisplay.Name.OutputType');
+
+select acs_sc_msg_type__delete ('ObjectDisplay.Url.InputType');
+select acs_sc_msg_type__delete ('ObjectDisplay.Url.OutputType');
+
+
+select acs_sc_msg_type__delete ('ObjectDisplay.SampleHello.InputType');
+select acs_sc_msg_type__delete ('ObjectDisplay.SampleHello.OutputType');
+
+select acs_sc_impl__delete(
+ 'ObjectDisplay', -- impl_contract_name
+ 'bboard_message' -- impl_name
+);
Index: openacs-4/packages/acs-service-contract/tcl/acs-service-contract-init.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/tcl/acs-service-contract-init.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/tcl/acs-service-contract-init.tcl 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,15 @@
+
+db_foreach impl_operation {
+ select
+ impl_contract_name,
+ impl_operation_name,
+ impl_name
+ from acs_sc_impl_alias
+} {
+
+ set binding_exists_p [db_exec_plsql binding_exists_p {select acs_sc_binding__exists_p(:impl_contract_name,:impl_name)}]
+
+ if $binding_exists_p {
+ acs_sc_proc $impl_contract_name $impl_operation_name $impl_name
+ }
+}
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/tcl/acs-service-contract-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/tcl/acs-service-contract-procs.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/tcl/acs-service-contract-procs.tcl 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,212 @@
+ad_library {
+
+ @author Neophytos Demetriou
+
+}
+
+ad_proc acs_sc_binding_exists_p {
+ contract
+ impl
+} {
+ @author Neophytos Demetriou
+} {
+
+ return [db_exec_plsql binding_exists_p {select acs_sc_binding__exists_p(:contract,:impl)}]
+
+}
+
+ad_proc acs_sc_generate_name {
+ contract
+ impl
+ operation
+
+} {
+ @author Neophytos Demetriou
+} {
+ return AcsSc.${contract}.${operation}.${impl}
+}
+
+
+ad_proc acs_sc_get_alias {
+ contract
+ operation
+ impl
+} {
+ @author Neophytos Demetriou
+} {
+
+ set exists_p [util_memoize "acs_sc_binding_exists_p $contract $impl"]
+
+ if ![set exists_p] {return ""}
+
+ db_0or1row get_alias {
+ select impl_alias, impl_pl
+ from acs_sc_impl_alias
+ where impl_contract_name = :contract
+ and impl_operation_name = :operation
+ and impl_name = :impl
+ }
+
+ return [list $impl_alias $impl_pl]
+
+}
+
+
+
+
+ad_proc acs_sc_proc {
+ contract
+ operation
+ impl
+} {
+ @author Neophytos Demetriou
+} {
+
+ set arguments [list]
+ set docblock [list]
+
+
+ set proc_name [acs_sc_generate_name $contract $impl $operation]
+
+ foreach {impl_alias impl_pl} [acs_sc_get_alias $contract $operation $impl] break
+
+ if ![info exists impl_alias] {
+ error "Cannot find alias for $proc_name"
+ }
+
+ db_0or1row get_operation_definition {
+ select
+ operation_desc,
+ operation_iscachable_p,
+ operation_nargs,
+ operation_inputtype_id,
+ operation_outputtype_id
+ from acs_sc_operation
+ where contract_name = :contract
+ and operation_name = :operation
+ }
+
+ lappend docblock "$operation_desc"
+
+ db_foreach operation_inputtype_element {
+ select
+ element_name,
+ acs_sc_msg_type__get_name(element_msg_type_id) as element_msg_type_name,
+ element_msg_type_isset_p,
+ element_pos
+ from acs_sc_msg_type_element
+ where msg_type_id = :operation_inputtype_id
+ order by element_pos asc
+ } {
+ lappend arguments "$element_name"
+ lappend docblock "@param $element_name $element_msg_type_name"
+ if { $element_msg_type_isset_p } {
+ lappend docblock "\[\]"
+ }
+ }
+
+ db_foreach operation_outputtype_element {
+ select
+ element_name,
+ acs_sc_msg_type__get_name(element_msg_type_id) as element_msg_type_name,
+ element_msg_type_isset_p,
+ element_pos
+ from acs_sc_msg_type_element
+ where msg_type_id = :operation_outputtype_id
+ order by element_pos asc
+ } {
+ lappend docblock "@return $element_name - $element_msg_type_name"
+ if { $element_msg_type_isset_p } {
+ lappend docblock "\[\]"
+ }
+ }
+
+
+ set full_statement [acs_sc_get_statement $impl_alias $impl_pl $arguments]
+
+ if { $operation_iscachable_p } {
+ set full_statement "util_memoize \"$full_statement\""
+ }
+
+#FIX ME: CALL BY NAME USING UPVAR
+ set body "return \[$full_statement\]"
+
+ set docblock [join $docblock "\n\r"]
+ set arguments [join $arguments]
+ ad_proc $proc_name $arguments $docblock $body
+
+}
+
+
+
+ad_proc acs_sc_get_statement {
+ impl_alias
+ impl_pl
+ arguments
+} {
+ @author Neophytos Demetriou
+} {
+
+
+ switch $impl_pl {
+ TCL {
+ set full_statement [list $impl_alias]
+ for {set __i 0} {$__i < [llength $arguments]} {incr __i} {
+ lappend full_statement "\$[lindex $arguments $__i]"
+ }
+ set full_statement [join $full_statement]
+ }
+ PLPGSQL {
+ set args_list [list]
+ for {set __i 0} {$__i < [llength $arguments]} {incr __i} {
+ lappend args_list "\$[lindex $arguments $__i]"
+ }
+ set args_final [join $args_list ,]
+ set full_statement "db_exec_plsql full_statement \"select ${impl_alias}(${args_final})\""
+ }
+ default {
+ error "Unknown impl_pl: $impl_pl"
+ }
+ }
+
+ return $full_statement
+}
+
+
+
+
+ad_proc acs_sc_call {
+ contract
+ operation
+ {arguments ""}
+ {impl ""}
+} {
+ @author Neophytos Demetriou
+} {
+
+ set proc_name [acs_sc_generate_name $contract $impl $operation]
+
+ if { [llength [info procs $proc_name]] == 1 } {
+ return [apply $proc_name $arguments]
+ } else {
+ # QUESTION:
+ # SHOULD WE PRODUCE AN ERROR HERE?
+ # MAYBE NOT, THE SEMANTICS MIGHT REQUIRE TO CALL
+ # THE FUNCTION ONLY IF THE IMPLEMENTATION IS SUPPORTED.
+ ns_log warning "ACS-SC: Function Not Found: $proc_name"
+ return
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: openacs-4/packages/acs-service-contract/www/binding-install.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/binding-install.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/www/binding-install.tcl 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,13 @@
+ad_page_contract {
+
+ @author Neophytos Demetriou
+
+} {
+ contract_id:integer
+ impl_id:integer
+}
+
+
+db_exec_plsql binding_install "select acs_sc_binding__new($contract_id,$impl_id)"
+
+ad_returnredirect ""
Index: openacs-4/packages/acs-service-contract/www/binding-uninstall.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/binding-uninstall.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/www/binding-uninstall.tcl 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,13 @@
+ad_page_contract {
+
+ @author Neophytos Demetriou
+
+} {
+ contract_id:integer
+ impl_id:integer
+}
+
+
+db_exec_plsql binding_uninstall "select acs_sc_binding__delete($contract_id,$impl_id)"
+
+ad_returnredirect ""
Index: openacs-4/packages/acs-service-contract/www/index.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/index.adp,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/www/index.adp 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,73 @@
+
+
+ACS Service Contract
+
+@context_bar@
+
+
+
+Installed Bindings
+
+
+ - None
+
+
+
+- @valid_installed_binding.contract_id@
+@valid_installed_binding.contract_name@,
+@valid_installed_binding.impl_id@
+@valid_installed_binding.impl_name@
+[Uninstall]
+
+
+
+
+
+
+Valid Uninstalled Bindings
+
+
+ - None
+
+
+
+- @valid_uninstalled_binding.contract_id@
+@valid_uninstalled_binding.contract_name@,
+@valid_uninstalled_binding.impl_id@
+@valid_uninstalled_binding.impl_name@
+[Install]
+
+
+
+
+
+
+Invalid Uninstalled Bindings
+
+
+ - None
+
+
+
+- @invalid_uninstalled_binding.contract_id@
+@invalid_uninstalled_binding.contract_name@,
+@invalid_uninstalled_binding.impl_id@
+@invalid_uninstalled_binding.impl_name@
+[What's wrong?]
+
+
+
+
+Orphan Implementations
+
+
+ - None
+
+
+
+- @orphan_implementation.impl_id@
+@orphan_implementation.impl_name@
+@orphan_implementation.impl_contract_name@
+
+
+
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/index.tcl,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/www/index.tcl 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,30 @@
+
+set context_bar [ad_context_bar]
+
+db_multirow valid_installed_binding valid_installed_binding {
+ select
+ contract_id,
+ impl_id,
+ acs_sc_contract__get_name(contract_id) as contract_name,
+ acs_sc_impl__get_name(impl_id) as impl_name
+ from
+ acs_sc_binding
+}
+
+
+db_multirow valid_uninstalled_binding valid_uninstalled_binding {
+ select contract_id, contract_name, impl_name,impl_id
+ from valid_uninstalled_binding;
+}
+
+
+db_multirow invalid_uninstalled_binding invalid_uninstalled_binding {
+ select contract_id, contract_name, impl_name,impl_id
+ from invalid_uninstalled_binding;
+}
+
+
+db_multirow orphan_implementation orphan_implementation {
+ select impl_id, impl_name, impl_contract_name
+ from orphan_implementation
+}
\ No newline at end of file
Index: openacs-4/packages/acs-service-contract/www/doc/notes.html
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-service-contract/www/doc/notes.html,v
diff -u -N
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/acs-service-contract/www/doc/notes.html 1 Sep 2001 20:22:57 -0000 1.1
@@ -0,0 +1,40 @@
+ACS Service Contract Overview
+by Neophytos Demetriou (k2pts@yahoo.com) and Kapil Thangavelu (k_vertigo@yahoo.com)
+
+
+Goals
+
+- To increase inter-application code reuse by designating interfaces for interaction.
+
+- To increase flexibility by allowing developers to reimplement an interface for their needs.
+
+- To provide the framework for constructing web services by housing the metadata needed to construct wsdl.
+
+- To be low impediment to developers to create interfaces for their packages.
+
+- To reduce fixed dependencies in packages.
+
+
+Definitions
+
+Interface - An abstract set of operations supported by one or more endpoints.
+
+Operation - An abstract description of an action supported by the service.
+
+Binding - A concrete implementation for a particular interface.
+
+Function - The implementation of an operation.
+
+
+Actors
+
+Registrar - An entity that defines the specification of a contract and registers it with the repository.
+
+Provider - Provides an implementation of the contract.
+
+Dependant - Something that uses a contract.
+
+
+
+
+