Commit 4716a550 authored by Frank Bergmann's avatar Frank Bergmann

- Upgrade to V4.0

parent 9e3a9ccd
......@@ -2,23 +2,25 @@
<!-- Generated by the OpenACS Package Manager -->
<package key="acs-service-contract" url="http://openacs.org/repository/apm/packages/acs-service-contract" type="apm_service">
<license>GPL V2.0 or any later version</license>
<package-name>Service Contracts</package-name>
<pretty-plural>Service Contract Packages</pretty-plural>
<initial-install-p>t</initial-install-p>
<singleton-p>t</singleton-p>
<version name="5.1.5" url="http://openacs.org/repository/download/apm/acs-service-contract-5.1.5.apm">
<version name="5.6.0" url="http://openacs.org/repository/download/apm/acs-service-contract-5.6.0.apm">
<owner url="http://openacs.org">OpenACS</owner>
<summary>API and UI for service contracts</summary>
<release-date>2005-02-28</release-date>
<release-date>2010-06-17</release-date>
<maturity>3</maturity>
<vendor url="http://openacs.org">OpenACS</vendor>
<description format="text/html">Service contracts defines an API for the creation of interfaces and discovery of interface implementations.
Examples are the contracts used for search which provide a means to get content on a given object and to translate an object_id to a
url or the contracts used by dotlrn and new-portals to allow packages to provide portalized panes.</description>
<license>GPL version 2</license>
<maturity>3</maturity>
<provides url="acs-service-contract" version="5.1.5"/>
<requires url="acs-kernel" version="5.0.0"/>
<provides url="acs-service-contract" version="5.6.0"/>
<requires url="acs-kernel" version="5.6.0"/>
<callbacks>
</callbacks>
......
......@@ -95,7 +95,8 @@ as
v_spec_parse_level integer;
begin
v_msg_type_id := acs_object.new(
object_type => 'acs_sc_msg_type'
object_type => 'acs_sc_msg_type',
title => msg_type_name
);
insert into acs_sc_msg_types (
......
......@@ -5,8 +5,8 @@ begin
pretty_name => 'ACS SC Contract',
pretty_plural => 'ACS SC Contracts',
supertype => 'acs_object',
table_name => 'ACS_SC_CONTRACTS',
id_column => 'CONTRACT_ID'
table_name => 'acs_sc_contracts',
id_column => 'contract_id'
);
acs_object_type.create_type(
......@@ -14,8 +14,8 @@ begin
pretty_name => 'ACS SC Operation',
pretty_plural => 'ACS SC Operations',
supertype => 'acs_object',
table_name => 'ACS_SC_OPERATIONS',
id_column => 'OPERATION_ID'
table_name => 'acs_sc_operations',
id_column => 'operation_id'
);
acs_object_type.create_type(
......@@ -23,8 +23,8 @@ begin
pretty_name => 'ACS SC Implementation',
pretty_plural => 'ACS SC Implementations',
supertype => 'acs_object',
table_name => 'ACS_SC_IMPLS',
id_column => 'IMPL_ID'
table_name => 'acs_sc_impls',
id_column => 'impl_id'
);
end;
/
......
......@@ -152,7 +152,10 @@ as
is
v_contract_id acs_sc_contracts.contract_id%TYPE;
begin
v_contract_id := acs_object.new( object_type=>'acs_sc_contract');
v_contract_id := acs_object.new(
object_type => 'acs_sc_contract',
title => contract_name
);
insert into acs_sc_contracts (
contract_id,
......@@ -250,7 +253,10 @@ as
begin
v_contract_id := acs_sc_contract.get_id(contract_name);
v_operation_id := acs_object.new (object_type=>'acs_sc_operation');
v_operation_id := acs_object.new (
object_type => 'acs_sc_operation',
title => operation_name
);
v_operation_inputtype_id := acs_sc_msg_type.get_id(operation_inputtype);
v_operation_outputtype_id := acs_sc_msg_type.get_id(operation_outputtype);
......@@ -341,7 +347,10 @@ as
is
v_impl_id acs_sc_impls.impl_id%TYPE;
begin
v_impl_id := acs_object.new (object_type => 'acs_sc_implementation');
v_impl_id := acs_object.new (
object_type => 'acs_sc_implementation',
title => impl_pretty_name
);
insert into acs_sc_impls (
impl_id,
......
......@@ -49,7 +49,7 @@ create table acs_sc_operations (
create table acs_sc_impls (
impl_id integer
constraint acs_sc_impl_impl_id_fk
constraint acs_sc_impls_impl_id_fk
references acs_objects(object_id)
on delete cascade
constraint acs_sc_impl_pk
......@@ -75,7 +75,7 @@ constraint acs_sc_impl_aliases_un unique(impl_name,impl_contract_name,impl_opera
create table acs_sc_bindings (
contract_id integer
constraint acs_sc_binding_cid_fk
constraint acs_sc_binding_contract_id_fk
references acs_sc_contracts(contract_id)
on delete cascade,
impl_id integer
......
......@@ -39,7 +39,9 @@ create table acs_sc_msg_type_elements (
element_pos integer
);
-- register function record
select define_function_args('acs_sc_msg_type__new','msg_type_name,msg_type_spec');
-- declare function
create or replace function acs_sc_msg_type__new(varchar,varchar)
returns integer as '
declare
......@@ -54,6 +56,9 @@ begin
now(),
null,
null,
null,
''t'',
p_msg_type_name,
null
);
......@@ -71,7 +76,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_msg_type__get_id','msg_type_name');
-- declare function
create or replace function acs_sc_msg_type__get_id(varchar)
returns integer as '
declare
......@@ -87,7 +94,9 @@ begin
end;' language 'plpgsql' stable strict;
-- register function record
select define_function_args('acs_sc_msg_type__get_name','msg_type_id');
-- declare function
create or replace function acs_sc_msg_type__get_name(integer)
returns varchar as '
declare
......@@ -103,7 +112,6 @@ begin
end;' language 'plpgsql' stable strict;
create or replace function acs_sc_msg_type__delete(integer)
returns integer as '
declare
......@@ -119,6 +127,9 @@ end;' language 'plpgsql';
-- XXX: this might be a bug that it does not return 0 as the above does.
-- anyway now it is strict as being called with null is a noop and returns null
-- register function record
select define_function_args('acs_sc_msg_type__delete','msg_type_name');
-- declare function
create or replace function acs_sc_msg_type__delete(varchar)
returns integer as '
declare
......@@ -138,7 +149,9 @@ end;' language 'plpgsql' strict;
-- register function record
select define_function_args('acs_sc_msg_type__new_element','msg_type_name,element_name,element_msg_type_name,element_msg_type_isset_p;f,element_pos');
-- declare function
create or replace function acs_sc_msg_type__new_element(varchar,varchar,varchar,boolean,integer)
returns integer as '
declare
......@@ -183,7 +196,9 @@ end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_msg_type__parse_spec','msg_type_name,msg_type_spec');
-- declare function
create or replace function acs_sc_msg_type__parse_spec(varchar,varchar)
returns integer as '
declare
......
-- register function record
select define_function_args('acs_sc_contract__new','contract_name,contract_desc');
-- declare function
create or replace function acs_sc_contract__new(varchar,text)
returns integer as '
declare
......@@ -12,6 +15,9 @@ begin
now(),
null,
null,
null,
''t'',
p_contract_name,
null
);
......@@ -30,7 +36,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_contract__get_id','contract_name');
-- declare function
create or replace function acs_sc_contract__get_id(varchar)
returns integer as '
declare
......@@ -47,7 +55,9 @@ begin
end;' language 'plpgsql' stable strict;
-- register function record
select define_function_args('acs_sc_contract__get_name','contract_id');
-- declare function
create or replace function acs_sc_contract__get_name(integer)
returns varchar as '
declare
......@@ -64,7 +74,6 @@ begin
end;' language 'plpgsql' stable strict;
create or replace function acs_sc_contract__delete(integer)
returns integer as '
declare
......@@ -79,7 +88,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_contract__delete','contract_name');
-- declare function
create or replace function acs_sc_contract__delete(varchar)
returns integer as '
declare
......@@ -96,7 +107,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_operation__new','contract_name,operation_name,operation_desc,operation_iscachable_p;f,operation_nargs,operation_inputtype,operation_outputtype');
-- declare function
create or replace function acs_sc_operation__new(varchar,varchar,text,boolean,integer,varchar,varchar)
returns integer as '
declare
......@@ -121,6 +134,9 @@ begin
now(),
null,
null,
null,
''t'',
p_operation_name,
null
);
......@@ -155,7 +171,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_operation__get_id','contract_name,operation_name');
-- declare function
create or replace function acs_sc_operation__get_id(varchar,varchar)
returns integer as '
declare
......@@ -173,7 +191,9 @@ begin
end;' language 'plpgsql' stable strict;
-- register function record
select define_function_args('acs_sc_operation__delete','operation_id');
-- declare function
create or replace function acs_sc_operation__delete(integer)
returns integer as '
declare
......@@ -208,6 +228,9 @@ begin
end;' language 'plpgsql' strict;
-- register function record
select define_function_args('acs_sc_impl__new','impl_contract_name,impl_name,impl_pretty_name,impl_owner_name');
-- declare function
create or replace function acs_sc_impl__new(varchar,varchar,varchar,varchar)
returns integer as '
declare
......@@ -224,6 +247,9 @@ begin
now(),
null,
null,
null,
''t'',
p_impl_pretty_name,
null
);
......@@ -266,6 +292,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_impl__get_id','impl_contract_name,impl_name');
-- declare function
create or replace function acs_sc_impl__get_id(varchar,varchar)
returns integer as '
declare
......@@ -283,7 +312,9 @@ begin
end;' language 'plpgsql' stable strict;
-- register function record
select define_function_args('acs_sc_impl__get_name','impl_id');
-- declare function
create or replace function acs_sc_impl__get_name(integer)
returns varchar as '
declare
......@@ -299,8 +330,9 @@ begin
end;' language 'plpgsql' stable strict;
-- register function record
select define_function_args('acs_sc_impl__delete','impl_contract_name,impl_name');
-- declare function
create or replace function acs_sc_impl__delete(varchar,varchar)
returns integer as '
declare
......@@ -320,7 +352,9 @@ end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_impl_alias__new','impl_contract_name,impl_name,impl_operation_name,impl_alias,impl_pl');
-- declare function
create or replace function acs_sc_impl_alias__new(varchar,varchar,varchar,varchar,varchar)
returns integer as '
declare
......@@ -356,7 +390,9 @@ end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_impl_alias__delete','impl_contract_name,impl_name,impl_operation_name');
-- declare function
create or replace function acs_sc_impl_alias__delete(varchar,varchar,varchar)
returns integer as '
declare
......@@ -378,7 +414,6 @@ begin
end;' language 'plpgsql';
create or replace function acs_sc_binding__new(integer,integer)
returns integer as '
declare
......@@ -387,12 +422,13 @@ declare
v_contract_name varchar;
v_impl_name varchar;
v_count integer;
v_missing_op varchar;
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
select count(*),min(operation_name) into v_count, v_missing_op
from acs_sc_operations
where contract_id = p_contract_id
and operation_name not in (select impl_operation_name
......@@ -401,7 +437,7 @@ begin
and impl_id = p_impl_id);
if v_count > 0 then
raise exception ''Binding of % to % failed since certain operations are not implemented.'', v_contract_name, v_impl_name;
raise exception ''Binding of % to % failed since certain operations are not implemented like: %.'', v_contract_name, v_impl_name, v_missing_op;
end if;
insert into acs_sc_bindings (
......@@ -417,7 +453,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_binding__new','contract_name,impl_name');
-- declare function
create or replace function acs_sc_binding__new(varchar,varchar)
returns integer as '
declare
......@@ -442,7 +480,6 @@ begin
end;' language 'plpgsql';
create or replace function acs_sc_binding__delete(integer,integer)
returns integer as '
declare
......@@ -458,6 +495,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_binding__delete','contract_name,impl_name');
-- declare function
create or replace function acs_sc_binding__delete(varchar,varchar)
returns integer as '
declare
......@@ -478,7 +518,9 @@ begin
end;' language 'plpgsql';
-- register function record
select define_function_args('acs_sc_binding__exists_p','contract_name,impl_name');
-- declare function
create or replace function acs_sc_binding__exists_p(varchar,varchar)
returns integer as '
declare
......
......@@ -52,7 +52,7 @@ create table acs_sc_impls (
constraint acs_sc_impls_impl_id_fk
references acs_objects(object_id)
on delete cascade
constraint acs_sc_impls_pk
constraint acs_sc_impls_impl_id_pk
primary key,
impl_name varchar(100),
impl_pretty_name varchar(200),
......@@ -64,7 +64,7 @@ create table acs_sc_impls (
create table acs_sc_impl_aliases (
impl_id integer
constraint acs_sc_impl_proc_impl_id_fk
constraint acs_sc_impl_aliases_impl_id_fk
references acs_sc_impls(impl_id)
on delete cascade,
impl_name varchar(100),
......@@ -79,7 +79,7 @@ constraint acs_sc_impl_alias_un unique(impl_name,impl_contract_name,impl_operati
create table acs_sc_bindings (
contract_id integer
constraint acs_sc_bindings_cid_fk
constraint acs_sc_bindings_contract_id_fk
references acs_sc_contracts(contract_id)
on delete cascade,
impl_id integer
......
......@@ -22,7 +22,7 @@ select acs_sc_binding__exists_p(:contract,:impl)
<fullquery name="acs_sc_proc.get_operation_definition">
<querytext>
select distinct
select
operation_desc,
coalesce(operation_iscachable_p,'f') as operation_iscachable_p,
operation_nargs,
......
......@@ -44,7 +44,7 @@ ad_proc -public acs_sc::invoke {
}
acs_sc::impl::get -impl_id $impl_id -array impl_info
set impl $impl_info(impl_name)
if { ![empty_string_p $contract] && ![string equal $contract $impl_info(impl_contract_name)] } {
if { $contract ne "" && $contract ne $impl_info(impl_contract_name) } {
error "The contract of implementation with id $impl_id does not match contract passed in. Expected contract to be '$contract', but contract of impl_id was '$impl_info(impl_contract_name)'"
}
set contract $impl_info(impl_contract_name)
......@@ -110,7 +110,7 @@ ad_proc -private acs_sc_get_alias {
#set exists_p [util_memoize "acs_sc_binding_exists_p $contract $impl"]
if ![set exists_p] {return ""}
if {![set exists_p]} {return ""}
db_0or1row get_alias {*SQL*}
......@@ -141,11 +141,11 @@ ad_proc -private acs_sc_proc {
acs_sc_log SCDebug "ACS_SC_PROC: proc_name = $proc_name"
if { [empty_string_p $impl_alias] } {
if { $impl_alias eq "" } {
foreach {impl_alias impl_pl} [acs_sc_get_alias $contract $operation $impl] break
}
if { [empty_string_p $impl_alias] } {
if { $impl_alias eq "" } {
error "ACS-SC: Cannot find alias for $proc_name"
}
......@@ -258,7 +258,7 @@ ad_proc -private -deprecated acs_sc_call {
return [apply $proc_name $arguments]
} else {
if { $error_p } {
error "Operation $operation is not implemented in '$impl' implementation of contract '$contract'<br><pre>$proc_name $arguments</pre>"
error "Operation $operation is not implemented in '$impl' implementation of contract '$contract'"
} else {
ns_log warning "ACS-SC: Function Not Found: $proc_name [info procs $proc_name]"
}
......@@ -274,7 +274,7 @@ ad_proc -private -deprecated acs_sc_call {
# Private logging proc
proc acs_sc_log {level msg} {
# If you want to debug the SC, uncomment the Debug log below
if { ![string equal "SCDebug" $level] } {
if { "SCDebug" ne $level } {
ns_log $level "$msg"
} else {
# ns_log Debug "$msg"
......
......@@ -174,7 +174,7 @@ ad_proc -public acs_sc::contract::delete {
# Delete msg types
foreach msg_type_id $msg_types {
if { ![empty_string_p $msg_type_id] } {
if { $msg_type_id ne "" } {
acs_sc::msg_type::delete -msg_type_id $msg_type_id
}
}
......
......@@ -32,7 +32,7 @@ ad_proc -public acs_sc::impl::new {
@return the ID of the new implementation
} {
if { [empty_string_p $pretty_name] } {
if { $pretty_name eq "" } {
set pretty_name $name
}
return [db_exec_plsql impl_new {}]
......@@ -133,6 +133,19 @@ ad_proc -public acs_sc::impl::get_id {
{-owner:required}
{-name:required}
-contract
} {
Retrieves the ID for a service contract. If the contract is specified
then the ID is retrieved for the specified contract, otherwise all
service contract IDs will be retrieved that match the specified owner
and implementation name.
@param owner Owner of the service contract.
@param name Implementation name.
@param contract Implementation contract name.
@return Returns the ID for a specified service contract, or all IDs for
for service contracts that match the owner and implementation name of
a service contract,
if the contract is not specified.
} {
if {[exists_and_not_null contract]} {
return [db_string select_impl_id_with_contract {}]
......@@ -183,7 +196,7 @@ ad_proc -public acs_sc::impl::get_options {
set impl_list [list]
if { ![empty_string_p $empty_label] } {
if { $empty_label ne "" } {
lappend impl_list [list $empty_label ""]
}
......
......@@ -6,7 +6,7 @@
<fullquery name="binding_uninstall">
<querytext>
begin
select acs_sc_binding.del(:contract_id,:impl_id)
acs_sc_binding.del(contract_id => :contract_id, impl_id => :impl_id);
end;
</querytext>
</fullquery>
......
......@@ -39,6 +39,13 @@ template::list::create \
display_template {Uninstall}
sub_class narrow
}
display {
label {}
link_url_eval {[export_vars -base binding-display { {id $contract_id} impl_name }]}
link_html { title "View this contracts implementation details" }
display_template {view}
sub_class narrow
}
}
db_multirow valid_installed_binding valid_installed_binding {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment