--
-- acs_object__new/2
--
create or replace function acs_object__new(
  integer,
  character varying
) returns int4 as $$

declare
        object_id       alias for $1; -- default null
        object_type     alias for $2; -- default 'acs_object'
begin
        return acs_object__new(object_id,object_type,now(),null,null,null);
end;$$ language plpgsql;


--
-- acs_object__new/6
--
create or replace function acs_object__new(
  integer,
  character varying,
  timestamp with time zone,
  integer,
  character varying,
  integer
) returns int4 as $$

declare
  new__object_id              alias for $1;  -- default null
  new__object_type            alias for $2;  -- default 'acs_object'
  new__creation_date          alias for $3;  -- default now()
  new__creation_user          alias for $4;  -- default null
  new__creation_ip            alias for $5;  -- default null
  new__context_id             alias for $6;  -- default null
  v_object_id                 acs_objects.object_id%TYPE;
  v_creation_date	      timestamptz;
begin
  return acs_object__new(new__object_id, new__object_type, new__creation_date,
                         new__creation_user, new__creation_ip, new__context_id,
                         't', null, null);
end;$$ language plpgsql;


--
-- acs_object__new/7
--
create or replace function acs_object__new(
  integer,
  character varying,
  timestamp with time zone,
  integer,
  character varying,
  integer,
  boolean
) returns int4 as $$

declare
  new__object_id              alias for $1;  -- default null
  new__object_type            alias for $2;  -- default 'acs_object'
  new__creation_date          alias for $3;  -- default now()
  new__creation_user          alias for $4;  -- default null
  new__creation_ip            alias for $5;  -- default null
  new__context_id             alias for $6;  -- default null
  new__security_inherit_p     alias for $7;  -- default 't'
begin
  return acs_object__new(new__object_id, new__object_type, new__creation_date,
                         new__creation_user, new__creation_ip, new__context_id,
                         new__security_inherit_p, null, null);
end;$$ language plpgsql;


--
-- acs_object__new/7
--
create or replace function acs_object__new(
  integer,
  character varying,
  timestamp with time zone,
  integer,
  character varying,
  integer,
  character varying
) returns int4 as $$

declare
  new__object_id              alias for $1;  -- default null
  new__object_type            alias for $2;  -- default 'acs_object'
  new__creation_date          alias for $3;  -- default now()
  new__creation_user          alias for $4;  -- default null
  new__creation_ip            alias for $5;  -- default null
  new__context_id             alias for $6;  -- default null
  new__title                  alias for $7;  -- default null
begin
  return acs_object__new(new__object_id, new__object_type, new__creation_date,
                         new__creation_user, new__creation_ip, new__context_id,
                         't', new__title, null);
end;$$ language plpgsql;


--
-- acs_object__new/8
--
create or replace function acs_object__new(
  integer,
  character varying,
  timestamp with time zone,
  integer,
  character varying,
  integer,
  boolean,
  character varying
) returns int4 as $$

declare
  new__object_id              alias for $1;  -- default null
  new__object_type            alias for $2;  -- default 'acs_object'
  new__creation_date          alias for $3;  -- default now()
  new__creation_user          alias for $4;  -- default null
  new__creation_ip            alias for $5;  -- default null
  new__context_id             alias for $6;  -- default null
  new__security_inherit_p     alias for $7;  -- default 't'
  new__title                  alias for $8;  -- default null
begin
  return acs_object__new(new__object_id, new__object_type, new__creation_date,
                         new__creation_user, new__creation_ip, new__context_id,
                         new__security_inherit_p, new__title, null);
end;$$ language plpgsql;


--
-- acs_object__new/8
--
create or replace function acs_object__new(
  integer,
  character varying,
  timestamp with time zone,
  integer,
  character varying,
  integer,
  character varying,
  integer
) returns int4 as $$

declare
  new__object_id              alias for $1;  -- default null
  new__object_type            alias for $2;  -- default 'acs_object'
  new__creation_date          alias for $3;  -- default now()
  new__creation_user          alias for $4;  -- default null
  new__creation_ip            alias for $5;  -- default null
  new__context_id             alias for $6;  -- default null
  new__title                  alias for $7;  -- default null
  new__package_id             alias for $8;  -- default null
begin
  return acs_object__new(new__object_id, new__object_type, new__creation_date,
                         new__creation_user, new__creation_ip, new__context_id,
                         't', new__title, new__package_id);
end;$$ language plpgsql;


--
-- acs_object__new/9
--
create or replace function acs_object__new(
  new__object_id integer,
  new__object_type character varying,
  new__creation_date timestamp with time zone,
  new__creation_user integer,
  new__creation_ip character varying,
  new__context_id integer,
  new__security_inherit_p boolean,
  new__title character varying,
  new__package_id integer
) returns int4 as $$

DECLARE
  v_object_id                 acs_objects.object_id%TYPE;
  v_creation_date	      timestamptz;
  v_title                     acs_objects.title%TYPE;
  v_object_type_pretty_name   acs_object_types.pretty_name%TYPE;
BEGIN
  if new__object_id is null then
    select nextval('t_acs_object_id_seq') into v_object_id;
  else
    v_object_id := new__object_id;
  end if;

  if new__title is null then
   select pretty_name
   into v_object_type_pretty_name
   from acs_object_types
   where object_type = new__object_type;

    v_title := v_object_type_pretty_name || ' ' || v_object_id;
  else
    v_title := new__title;
  end if;

  if new__creation_date is null then
   v_creation_date:= now();
  else
   v_creation_date := new__creation_date;
  end if;

  insert into acs_objects
   (object_id, object_type, title, package_id, context_id,
    creation_date, creation_user, creation_ip, security_inherit_p)
  values
   (v_object_id, new__object_type, v_title, new__package_id, new__context_id,
    v_creation_date, new__creation_user, new__creation_ip, 
    new__security_inherit_p);

  PERFORM acs_object__initialize_attributes(v_object_id);

  return v_object_id;
  
END;
$$ language plpgsql;