@@ -123,14 +119,13 @@
-
+
-
-
+ description="Do a fresh install of the system, not touching database">
@@ -145,6 +140,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dspace/etc/database_schema.sql b/dspace/etc/database_schema.sql
new file mode 100644
index 0000000000..254c9db3a9
--- /dev/null
+++ b/dspace/etc/database_schema.sql
@@ -0,0 +1,798 @@
+--
+-- database_schema.sql
+--
+-- Version: $Revision$
+--
+-- Date: $Date$
+--
+-- Copyright (c) 2001, Hewlett-Packard Company and Massachusetts
+-- Institute of Technology. All rights reserved.
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions are
+-- met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in the
+-- documentation and/or other materials provided with the distribution.
+--
+-- - Neither the name of the Hewlett-Packard Company nor the name of the
+-- Massachusetts Institute of Technology nor the names of their
+-- contributors may be used to endorse or promote products derived from
+-- this software without specific prior written permission.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-- HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+-- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+-- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+-- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+-- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+-- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+-- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+-- DAMAGE.
+--
+--
+--
+--
+-- DSpace SQL table definitions
+--
+-- Author: Peter Breton
+--
+-- This file is used as-is to initialize a database. Therefore,
+-- table and view definitions must be ordered correctly.
+--
+
+-------------------------------------------------------
+-- BitstreamTypeRegistry table
+-------------------------------------------------------
+DROP TABLE BitstreamTypeRegistry;
+
+CREATE TABLE BitstreamTypeRegistry
+(
+ bitstream_type_id INTEGER PRIMARY KEY,
+ mimetype VARCHAR(48),
+ short_description VARCHAR(128) UNIQUE,
+ description TEXT,
+ support_level INTEGER,
+ -- Identifies internal types
+ internal BOOL
+);
+
+-------------------------------------------------------
+-- Bitstream table
+-------------------------------------------------------
+DROP TABLE Bitstream;
+
+CREATE TABLE Bitstream
+(
+ bitstream_id INTEGER PRIMARY KEY,
+ bitstream_type_id INTEGER REFERENCES BitstreamTypeRegistry(bitstream_type_id),
+ name VARCHAR(256),
+ size INTEGER,
+ checksum VARCHAR(64),
+ checksum_algorithm VARCHAR(32),
+ description TEXT,
+ user_type_description TEXT,
+ source VARCHAR(256),
+ deleted BOOL
+);
+
+-------------------------------------------------------
+-- EPerson table
+-------------------------------------------------------
+DROP TABLE EPerson;
+
+CREATE TABLE EPerson
+(
+ eperson_id INTEGER PRIMARY KEY,
+ email VARCHAR(64) UNIQUE,
+ password VARCHAR(64),
+ firstname VARCHAR(64),
+ lastname VARCHAR(64),
+ active BOOL,
+ require_certificate BOOL,
+ phone VARCHAR(32)
+);
+
+-------------------------------------------------------
+-- EPersonGroup table
+-------------------------------------------------------
+DROP TABLE EPersonGroup;
+
+CREATE TABLE EPersonGroup
+(
+ eperson_group_id INTEGER PRIMARY KEY,
+ name VARCHAR(256) UNIQUE
+);
+
+-------------------------------------------------------
+-- Item table
+-------------------------------------------------------
+DROP TABLE Item;
+
+CREATE TABLE Item
+(
+ item_id INTEGER PRIMARY KEY,
+ submitter_id INTEGER REFERENCES EPerson(eperson_id),
+ in_archive BOOL
+);
+
+-------------------------------------------------------
+-- Bundle table
+-------------------------------------------------------
+DROP TABLE Bundle;
+
+CREATE TABLE Bundle
+(
+ bundle_id INTEGER PRIMARY KEY,
+ mets_bitstream_id INTEGER REFERENCES Bitstream(bitstream_id)
+);
+
+-------------------------------------------------------
+-- Item2Bundle table
+-------------------------------------------------------
+DROP TABLE Item2Bundle;
+
+CREATE TABLE Item2Bundle
+(
+ id INTEGER PRIMARY KEY,
+ item_id INTEGER REFERENCES Item(item_id),
+ bundle_id INTEGER REFERENCES Bundle(bundle_id)
+);
+
+-------------------------------------------------------
+-- Bundle2Bitstream table
+-------------------------------------------------------
+DROP TABLE Bundle2Bitstream;
+
+CREATE TABLE Bundle2Bitstream
+(
+ id INTEGER PRIMARY KEY,
+ bundle_id INTEGER REFERENCES Bundle(bundle_id),
+ -- FIXME: UNIQUE?
+ bitstream_id INTEGER REFERENCES Bitstream(bitstream_id)
+);
+
+-------------------------------------------------------
+-- DCTypeRegistry table
+-------------------------------------------------------
+DROP TABLE DCTypeRegistry;
+
+CREATE TABLE DCTypeRegistry
+(
+ dc_type_id INTEGER PRIMARY KEY,
+ element VARCHAR(64),
+ qualifier VARCHAR(64),
+ scope_note TEXT,
+ UNIQUE(element, qualifier)
+);
+
+-------------------------------------------------------
+-- DCValue table
+-------------------------------------------------------
+DROP TABLE DCValue;
+
+CREATE TABLE DCValue
+(
+ dc_value_id INTEGER PRIMARY KEY,
+ text_value TEXT,
+ text_lang VARCHAR(24),
+ source_id INTEGER
+);
+
+-- An index for text_value
+-- CREATE INDEX dcvalue_text_value_idx ON DCValue(text_value);
+
+-------------------------------------------------------
+-- Item2DCValue table
+-------------------------------------------------------
+DROP TABLE Item2DCValue;
+
+CREATE TABLE Item2DCValue
+(
+ id INTEGER PRIMARY KEY,
+ item_id INTEGER REFERENCES Item(item_id),
+ dc_value_id INTEGER REFERENCES DCValue(dc_value_id),
+ dc_type_id INTEGER REFERENCES DCTypeRegistry(dc_type_id),
+ -- index, position, etc are reserved words!
+ place INTEGER
+);
+
+-- An index for dctypes
+CREATE INDEX dcvalue_dc_type_id_idx on Item2DCValue(dc_type_id);
+
+-------------------------------------------------------
+-- ItemVersion table
+-------------------------------------------------------
+DROP TABLE ItemVersion;
+
+CREATE TABLE ItemVersion
+(
+ id INTEGER PRIMARY KEY,
+ old_item_id INTEGER REFERENCES Item(item_id),
+ new_item_id INTEGER REFERENCES Item(item_id)
+);
+
+-------------------------------------------------------
+-- Community table
+-------------------------------------------------------
+DROP TABLE Community;
+
+CREATE TABLE Community
+(
+ community_id INTEGER PRIMARY KEY,
+ name VARCHAR(128) UNIQUE,
+ short_description VARCHAR(512),
+ introductory_text TEXT,
+ logo_bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
+ copyright_text TEXT,
+ side_bar_text TEXT
+);
+
+-------------------------------------------------------
+-- Collection table
+-------------------------------------------------------
+DROP TABLE Collection;
+
+CREATE TABLE Collection
+(
+ collection_id INTEGER PRIMARY KEY,
+ name VARCHAR(128),
+ short_description VARCHAR(512),
+ introductory_text TEXT,
+ logo_bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
+ template_item_id INTEGER REFERENCES Item(item_id),
+ provenance_description TEXT,
+ license TEXT,
+ copyright_text TEXT,
+ side_bar_text TEXT,
+ reviewers INTEGER REFERENCES EPersonGroup( eperson_group_id ),
+ approvers INTEGER REFERENCES EPersonGroup( eperson_group_id ),
+ editors INTEGER REFERENCES EPersonGroup( eperson_group_id )
+);
+
+-------------------------------------------------------
+-- Community2Collection table
+-------------------------------------------------------
+DROP TABLE Community2Collection;
+
+CREATE TABLE Community2Collection
+(
+ id INTEGER PRIMARY KEY,
+ community_id INTEGER REFERENCES Community(community_id),
+ collection_id INTEGER REFERENCES Collection(collection_id)
+);
+
+-------------------------------------------------------
+-- Collection2Item table
+-------------------------------------------------------
+DROP TABLE Collection2Item;
+
+CREATE TABLE Collection2Item
+(
+ id INTEGER PRIMARY KEY,
+ collection_id INTEGER REFERENCES Collection(collection_id),
+ item_id INTEGER REFERENCES Item(item_id)
+);
+-------------------------------------------------------
+-- ResourcePolicy table
+-------------------------------------------------------
+DROP TABLE ResourcePolicy;
+
+CREATE TABLE ResourcePolicy
+(
+ policy_id INTEGER PRIMARY KEY,
+ resource_type_id INTEGER,
+ resource_id INTEGER,
+ resource_filter INTEGER,
+ resource_filter_arg INTEGER,
+ action_id INTEGER,
+ policy_statement VARCHAR(256),
+ priority INTEGER,
+ notes TEXT,
+ owner_eperson_id INTEGER REFERENCES EPerson(eperson_id)
+);
+
+-------------------------------------------------------
+-- EPersonGroup2EPerson table
+-------------------------------------------------------
+DROP TABLE EPersonGroup2EPerson;
+
+CREATE TABLE EPersonGroup2EPerson
+(
+ id INTEGER PRIMARY KEY,
+ eperson_group_id INTEGER REFERENCES EPersonGroup(eperson_group_id),
+ eperson_id INTEGER REFERENCES EPerson(eperson_id)
+);
+
+-------------------------------------------------------
+-- Handle table
+-------------------------------------------------------
+DROP TABLE Handle;
+
+CREATE TABLE Handle
+(
+ handle_id INTEGER PRIMARY KEY,
+ handle VARCHAR(256) UNIQUE,
+ resource_type_id INTEGER,
+ resource_id INTEGER
+);
+
+-------------------------------------------------------
+-- Storage table
+-------------------------------------------------------
+DROP TABLE Storage;
+
+CREATE TABLE Storage
+(
+ storage_id INTEGER PRIMARY KEY,
+ storage_name VARCHAR(256),
+ internal_id VARCHAR(256),
+ UNIQUE(storage_name, internal_id)
+);
+
+-------------------------------------------------------
+-- Bitstream2Storage table
+-------------------------------------------------------
+DROP TABLE Bitstream2Storage;
+
+CREATE TABLE Bitstream2Storage
+(
+ id INTEGER PRIMARY KEY,
+ bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
+ storage_id INTEGER REFERENCES Storage(storage_id)
+);
+
+-------------------------------------------------------
+-- PersonalWorkspace table
+-------------------------------------------------------
+DROP TABLE PersonalWorkspace;
+
+CREATE TABLE PersonalWorkspace
+(
+ personal_workspace_id INTEGER PRIMARY KEY,
+ item_id INTEGER REFERENCES Item(item_id),
+ collection_id INTEGER REFERENCES Collection(collection_id),
+ -- Answers to questions on first page of submit UI
+ multiple_titles BOOL,
+ published_before BOOL,
+ multiple_files BOOL,
+ -- How for the user has got in the submit process
+ stage_reached INTEGER
+);
+
+-------------------------------------------------------
+-- WorkflowItem table
+-------------------------------------------------------
+DROP TABLE WorkflowItem;
+
+CREATE TABLE WorkflowItem
+(
+ workflow_id INTEGER PRIMARY KEY,
+ item_id INTEGER REFERENCES Item(item_id) UNIQUE,
+ collection_id INTEGER REFERENCES Collection(collection_id),
+ state INTEGER,
+ owner INTEGER REFERENCES EPerson(eperson_id),
+
+ -- Answers to questions on first page of submit UI
+ multiple_titles BOOL,
+ published_before BOOL,
+ multiple_files BOOL
+ -- Note: stage reached not applicable here - people involved in workflow
+ -- can always jump around submission UI
+
+);
+
+-------------------------------------------------------
+-- TasklistItem table
+-------------------------------------------------------
+DROP TABLE TasklistItem;
+
+CREATE TABLE TasklistItem
+(
+ tasklist_id INTEGER PRIMARY KEY,
+ eperson_id INTEGER REFERENCES EPerson(eperson_id),
+ workflow_id INTEGER REFERENCES WorkflowItem(workflow_id)
+);
+
+
+
+
+-------------------------------------------------------
+-- RegistrationData table
+-------------------------------------------------------
+DROP TABLE RegistrationData;
+
+CREATE TABLE RegistrationData
+(
+ registrationdata_id INTEGER PRIMARY KEY,
+ lookup_key VARCHAR(64) UNIQUE,
+ creator VARCHAR(64),
+ created TIMESTAMP,
+ expires TIMESTAMP,
+ table_name VARCHAR(64),
+ column_name VARCHAR(64),
+ table_id INTEGER
+);
+
+-------------------------------------------------------
+-- History table
+-------------------------------------------------------
+DROP TABLE History;
+
+CREATE TABLE History
+(
+ history_id INTEGER PRIMARY KEY,
+ -- The RDF
+ data TEXT,
+ -- When it was stored
+ creation_date TIMESTAMP,
+ -- A checksum to keep serializations from being stored more than once
+ checksum VARCHAR(32) UNIQUE
+);
+
+-------------------------------------------------------
+-- HistoryState table
+-------------------------------------------------------
+DROP TABLE HistoryState;
+
+CREATE TABLE HistoryState
+(
+ history_state_id INTEGER PRIMARY KEY,
+ -- The id of the object
+ object_id VARCHAR(64)
+);
+
+-------------------------------------------------------
+-- Example table for test purposes
+-------------------------------------------------------
+DROP TABLE TestTable;
+
+CREATE TABLE TestTable
+(
+ Id INTEGER PRIMARY KEY,
+ Name VARCHAR(64),
+ Date DATE,
+ Stuff VARCHAR(255),
+ Amount INTEGER
+);
+
+-------------------------------------------------------
+-- Test table
+-------------------------------------------------------
+DROP TABLE TestTable2;
+
+CREATE TABLE TestTable2
+(
+ Id INTEGER PRIMARY KEY,
+ Name VARCHAR(64) UNIQUE,
+ Test_Table_Id INTEGER REFERENCES TestTable(Id)
+);
+
+-------------------------------------------------------
+-- Test table for mapping
+-------------------------------------------------------
+DROP TABLE TestTableMapping;
+
+CREATE TABLE TestTableMapping
+(
+ Id INTEGER PRIMARY KEY,
+ Test_Table_Id INTEGER REFERENCES TestTable(Id),
+ Test_Table2_Id INTEGER REFERENCES TestTable2(Id)
+);
+
+
+------------------------------------------------------------
+-- Convenience views
+------------------------------------------------------------
+
+-- Views for CM API
+
+-------------------------------------------------------
+-- DCResult view
+-------------------------------------------------------
+DROP VIEW DCResult;
+
+CREATE VIEW DCResult as
+SELECT Item.item_id, Item.in_archive, Item.submitter_id, dc_type_id, DCValue.*
+FROM Item2DCValue, DCValue, Item
+WHERE Item2DCValue.dc_value_id = DCValue.dc_value_id
+AND Item.item_id = Item2DCValue.item_id
+;
+
+-------------------------------------------------------
+-- Community2Item view
+-------------------------------------------------------
+DROP VIEW Community2Item;
+
+CREATE VIEW Community2Item as
+SELECT Community2Collection.community_id, Collection2Item.item_id
+FROM Community2Collection, Collection2Item
+WHERE Collection2Item.collection_id = Community2Collection.collection_id
+;
+
+-------------------------------------------------------
+-- ItemsByAuthor view
+-------------------------------------------------------
+DROP VIEW ItemsByAuthor;
+
+CREATE VIEW ItemsByAuthor as
+SELECT DCResult.item_id, DCResult.text_value as Author
+FROM DCResult, DCTypeRegistry
+WHERE DCTypeRegistry.element = 'contributor'
+AND DCTypeRegistry.qualifier = 'author'
+AND DCTypeRegistry.dc_type_id = DCResult.dc_type_id
+AND DCResult.in_archive = 't'
+ORDER BY Author, DCResult.item_id
+;
+
+-------------------------------------------------------
+-- CollectionItemsByAuthor view
+-------------------------------------------------------
+DROP VIEW CollectionItemsByAuthor;
+
+CREATE VIEW CollectionItemsByAuthor as
+SELECT Collection2Item.collection_id, ItemsByAuthor.*
+FROM ItemsByAuthor, Collection2Item
+WHERE ItemsByAuthor.item_id = Collection2Item.item_id
+ORDER BY Author, ItemsByAuthor.item_id
+;
+
+-------------------------------------------------------
+-- CommunityItemsByAuthor view
+-------------------------------------------------------
+DROP VIEW CommunityItemsByAuthor;
+
+CREATE VIEW CommunityItemsByAuthor as
+SELECT Community2Item.community_id, ItemsByAuthor.*
+FROM ItemsByAuthor, Community2Item
+WHERE ItemsByAuthor.item_id = Community2Item.item_id
+ORDER BY Author, ItemsByAuthor.item_id
+;
+
+-------------------------------------------------------
+-- Function sorttitle
+-------------------------------------------------------
+DROP FUNCTION sorttitle(varchar);
+
+CREATE FUNCTION sorttitle(varchar) RETURNS varchar AS
+'
+declare
+ title alias for $1;
+ ltitle TEXT;
+ stitle TEXT;
+ stop TEXT;
+begin
+ -- Strip out whitespace
+ select into stitle trim(title);
+ -- Lower-case the title (ONLY FOR COMPARISON PURPOSES)
+ select into ltitle lower(stitle);
+
+ -- Check for occurrences of the
+ select into stop ''the '';
+ if position(stop in ltitle) = 1 then
+ return substring(stitle, char_length(stop) + 1) || '', '' || substring(stitle, 0, char_length(stop));
+ end if;
+
+ -- Check for occurrences of an
+ select into stop ''an '';
+ if position(stop in ltitle) = 1 then
+ return substring(stitle, char_length(stop) + 1) || '', '' || substring(stitle, 0, char_length(stop));
+ end if;
+
+ -- Check for occurrences of a
+ select into stop ''a '';
+ if position(stop in ltitle) = 1 then
+ return substring(stitle, char_length(stop) + 1) || '', '' || substring(stitle, 0, char_length(stop));
+ end if;
+
+ return stitle;
+end;
+' language 'plpgsql';
+
+----------------------------------------
+-- ItemsByTitle view
+----------------------------------------
+
+DROP VIEW ItemsByTitle;
+
+CREATE VIEW ItemsByTitle as
+SELECT DCResult.item_id,
+ DCResult.text_value as Title,
+ sorttitle(DCResult.text_value) as SortTitle
+FROM DCResult, DCTypeRegistry
+WHERE DCTypeRegistry.element = 'title'
+AND DCTypeRegistry.qualifier is null
+AND DCTypeRegistry.dc_type_id = DCResult.dc_type_id
+AND DCResult.in_archive = 't'
+ORDER BY SortTitle, DCResult.item_id
+;
+
+-------------------------------------------------------
+-- CollectionItemsByTitle view
+-------------------------------------------------------
+DROP VIEW CollectionItemsByTitle;
+
+CREATE VIEW CollectionItemsByTitle as
+SELECT Collection2Item.collection_id, ItemsByTitle.*
+FROM ItemsByTitle, Collection2Item
+WHERE ItemsByTitle.item_id = Collection2Item.item_id
+ORDER BY Title, ItemsByTitle.item_id
+;
+
+-------------------------------------------------------
+-- CommunityItemsByTitle view
+-------------------------------------------------------
+DROP VIEW CommunityItemsByTitle;
+
+CREATE VIEW CommunityItemsByTitle as
+SELECT Community2Item.community_id, ItemsByTitle.*
+FROM ItemsByTitle, Community2Item
+WHERE ItemsByTitle.item_id = Community2Item.item_id
+ORDER BY Title, ItemsByTitle.item_id
+;
+
+-------------------------------------------------------
+-- ItemsByDate view
+-------------------------------------------------------
+DROP VIEW ItemsByDate;
+
+CREATE VIEW ItemsByDate as
+SELECT DCResult.item_id, DCResult.text_value as DateIssued
+FROM DCResult, DCTypeRegistry
+WHERE DCTypeRegistry.element = 'date'
+AND DCTypeRegistry.qualifier = 'issued'
+AND DCTypeRegistry.dc_type_id = DCResult.dc_type_id
+AND DCResult.in_archive = 't'
+ORDER BY DateIssued desc, DCResult.item_id
+;
+
+-------------------------------------------------------
+-- CollectionItemsByDate view
+-------------------------------------------------------
+DROP VIEW CollectionItemsByDate;
+
+CREATE VIEW CollectionItemsByDate as
+SELECT Collection2Item.collection_id, ItemsByDate.*
+FROM ItemsByDate, Collection2Item
+WHERE ItemsByDate.item_id = Collection2Item.item_id
+ORDER BY DateIssued desc, ItemsByDate.item_id
+;
+
+-------------------------------------------------------
+-- CommunityItemsByDate view
+-------------------------------------------------------
+DROP VIEW CommunityItemsByDate;
+
+CREATE VIEW CommunityItemsByDate as
+SELECT Community2Item.community_id, ItemsByDate.*
+FROM ItemsByDate, Community2Item
+WHERE ItemsByDate.item_id = Community2Item.item_id
+ORDER BY DateIssued desc, ItemsByDate.item_id
+;
+
+-------------------------------------------------------
+-- AllStorage view
+-------------------------------------------------------
+DROP VIEW AllStorage;
+
+CREATE VIEW AllStorage as
+SELECT Bitstream.*, Storage.*,
+ BitstreamTypeRegistry.mimetype, BitstreamTypeRegistry.short_description
+FROM Bitstream, Storage, Bitstream2Storage, BitstreamTypeRegistry
+WHERE Bitstream.bitstream_id = Bitstream2Storage.bitstream_id
+AND Storage.storage_id = Bitstream2Storage.storage_id
+AND Bitstream.bitstream_type_id = BitstreamTypeRegistry.bitstream_type_id
+;
+
+-------------------------------------------------------
+-- Item2Bitstream view
+-------------------------------------------------------
+DROP VIEW Item2Bitstream;
+
+CREATE VIEW Item2Bitstream as
+SELECT Item2Bundle.item_id, Bundle2Bitstream.bitstream_id
+FROM Item2Bundle, Bundle2Bitstream
+WHERE Item2Bundle.bundle_id = Bundle2Bitstream.bundle_id
+;
+
+-------------------------------------------------------
+-- Collection2Bitstream view
+-------------------------------------------------------
+DROP VIEW Collection2Bitstream;
+
+CREATE VIEW Collection2Bitstream as
+SELECT Collection2Item.collection_id, Bundle2Bitstream.bitstream_id
+FROM Collection2Item, Item2Bundle, Bundle2Bitstream
+WHERE Collection2Item.item_id = Item2Bundle.item_id
+AND Item2Bundle.bundle_id = Bundle2Bitstream.bundle_id
+;
+
+
+-------------------------------------------------------
+-- Community2Bitstream view
+-------------------------------------------------------
+DROP VIEW Community2Bitstream;
+
+CREATE VIEW Community2Bitstream as
+SELECT Community2Collection.community_id, Collection2Bitstream.bitstream_id
+FROM Community2Collection, Collection2Bitstream
+WHERE Community2Collection.collection_id = Collection2Bitstream.collection_id
+;
+
+-------------------------------------------------------
+-- WorkflowItemsBySubmitter view
+-------------------------------------------------------
+DROP VIEW WorkflowItemBySubmitter;
+
+CREATE VIEW WorkflowItemBySubmitter as
+SELECT WorkflowItem.*, Item.submitter_id
+FROM WorkflowItem, Item
+WHERE WorkflowItem.item_id = Item.item_id;
+
+-------------------------------------------------------
+-- PersonalWorkspaceBySubmitter view
+-------------------------------------------------------
+DROP VIEW PersonalWorkspaceBySubmitter;
+
+CREATE VIEW PersonalWorkspaceBySubmitter as
+SELECT PersonalWorkspace.*, Item.submitter_id
+FROM PersonalWorkspace, Item
+WHERE PersonalWorkspace.item_id = Item.item_id;
+
+-------------------------------------------------------
+-- ItemsByDateAccessioned view
+-------------------------------------------------------
+DROP VIEW ItemsByDateAccessioned;
+
+CREATE VIEW ItemsByDateAccessioned as
+SELECT DCResult.item_id, DCResult.text_value as DateAccessioned
+FROM DCResult, DCTypeRegistry
+WHERE DCTypeRegistry.element = 'date'
+AND DCTypeRegistry.qualifier = 'accessioned'
+AND DCTypeRegistry.dc_type_id = DCResult.dc_type_id
+AND DCResult.in_archive = 't'
+ORDER BY DateAccessioned, DCResult.item_id
+;
+
+-------------------------------------------------------
+-- CollectionItemsByDateAccessioned view
+-------------------------------------------------------
+DROP VIEW CollectionItemsByDateAccessioned;
+
+CREATE VIEW CollectionItemsByDateAccessioned as
+SELECT Collection2Item.collection_id, ItemsByDateAccessioned.*
+FROM ItemsByDateAccessioned, Collection2Item
+WHERE ItemsByDateAccessioned.item_id = Collection2Item.item_id
+ORDER BY DateAccessioned desc, ItemsByDateAccessioned.item_id
+;
+
+-------------------------------------------------------
+-- CommunityItemsByDateAccessioned view
+-------------------------------------------------------
+DROP VIEW CommunityItemsByDateAccessioned;
+
+CREATE VIEW CommunityItemsByDateAccessioned as
+SELECT Community2Item.community_id, ItemsByDateAccessioned.*
+FROM ItemsByDateAccessioned, Community2Item
+WHERE ItemsByDateAccessioned.item_id = Community2Item.item_id
+ORDER BY DateAccessioned desc, ItemsByDateAccessioned.item_id
+;
+
+-------------------------------------------------------
+-- Item2Handle view
+-------------------------------------------------------
+-- Note: DSpaceTypes.ITEM = 2
+DROP VIEW Item2Handle;
+
+CREATE VIEW Item2Handle as
+select handle_id, handle, resource_id as item_id
+from Handle where resource_type_id = 2
+
+;
diff --git a/dspace/etc/log4j.build.properties b/dspace/etc/log4j.build.properties
new file mode 100644
index 0000000000..07956ec30e
--- /dev/null
+++ b/dspace/etc/log4j.build.properties
@@ -0,0 +1,13 @@
+##########################################################
+# Simple log4j configuration file used during build tasks
+##########################################################
+
+# Set root category priority to INFO and its only appender to A1.
+log4j.rootCategory=INFO, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%d %-5p %c @ %m%n
diff --git a/dspace/lib/postgresql.jar b/dspace/lib/postgresql.jar
new file mode 100644
index 0000000000..c4780afb91
Binary files /dev/null and b/dspace/lib/postgresql.jar differ
diff --git a/dspace/src/org/dspace/core/ConfigurationManager.java b/dspace/src/org/dspace/core/ConfigurationManager.java
index d5e1257bf5..8a2080462d 100644
--- a/dspace/src/org/dspace/core/ConfigurationManager.java
+++ b/dspace/src/org/dspace/core/ConfigurationManager.java
@@ -41,13 +41,33 @@
package org.dspace.core;
+import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
+import org.apache.log4j.Category;
+
+/**
+ * Class for reading the DSpace system configuration. The main configuration
+ * is read in as properties from a standard properties file. Email templates
+ * and configuration files for other tools are also be accessed via this class.
+ *
+ * The main configuration is by default read from the resource
+ * /dspace.cfg
. To specify a different configuration, the
+ * system property dspace.configuration
should be set to the
+ * filename of the configuration file.
+ *
+ * @author Robert Tansley
+ * @version $Revision$
+ */
public class ConfigurationManager
{
+ /** log4j category */
+ private static Category log =
+ Category.getInstance(ConfigurationManager.class);
+
/** The configuration properties */
private static Properties properties = null;
@@ -99,8 +119,7 @@ public class ConfigurationManager
}
catch (NumberFormatException e)
{
- // FIXME: Should be logged properly
- System.err.println("Warning: Number format error in property"
+ log.warn("Warning: Number format error in property: "
+ property);
}
}
@@ -168,20 +187,41 @@ public class ConfigurationManager
*/
private static void loadProperties()
{
+ InputStream is;
+
if (properties != null) return;
try
{
- InputStream is = ConfigurationManager.class.getResourceAsStream(
- "/dspace.cfg");
- properties = new Properties();
- properties.load(is);
+ // Has the default configuration location been overridden?
+ String configProperty = System.getProperty("dspace.configuration");
+
+ if (configProperty != null)
+ {
+ // Load the overriding configuration
+ is = new FileInputStream(configProperty);
+ }
+ else
+ {
+ // Load configuration from default location
+ is = ConfigurationManager.class.getResourceAsStream(
+ "/dspace.cfg");
+ }
+
+ if (is==null)
+ {
+ log.fatal("Cannot find dspace.cfg");
+ System.exit(1);
+ }
+ else
+ {
+ properties = new Properties();
+ properties.load(is);
+ }
}
catch (IOException e)
{
- // FIXME: Should be logged properly
- System.err.println("Can't load configuration: " + e);
- e.printStackTrace();
+ log.fatal("Can't load configuration", e);
// FIXME: Maybe something more graceful here, but with the
// configuration we can't do anything
System.exit(1);
diff --git a/dspace/src/org/dspace/storage/rdbms/DatabaseManager.java b/dspace/src/org/dspace/storage/rdbms/DatabaseManager.java
index cbb24e94fc..467350a95c 100644
--- a/dspace/src/org/dspace/storage/rdbms/DatabaseManager.java
+++ b/dspace/src/org/dspace/storage/rdbms/DatabaseManager.java
@@ -552,8 +552,8 @@ public class DatabaseManager
if (endMarker == -1)
continue;
- if (log.isInfoEnabled())
- log.info("Running database query \"" + sql + "\"");
+ if (log.isDebugEnabled())
+ log.debug("Running database query \"" + sql + "\"");
SQL = sql.toString();
@@ -565,8 +565,8 @@ public class DatabaseManager
}
catch (SQLWarning sqlw)
{
- if (log.isInfoEnabled())
- log.info("Got SQL Warning: " + sqlw, sqlw);
+ if (log.isDebugEnabled())
+ log.debug("Got SQL Warning: " + sqlw, sqlw);
}
catch (SQLException sqle)
{
diff --git a/dspace/src/org/dspace/storage/rdbms/InitializeDatabase.java b/dspace/src/org/dspace/storage/rdbms/InitializeDatabase.java
new file mode 100644
index 0000000000..8ef1d3dde4
--- /dev/null
+++ b/dspace/src/org/dspace/storage/rdbms/InitializeDatabase.java
@@ -0,0 +1,103 @@
+/*
+ * InitializeDatabase.java
+ *
+ * Version: $Revision$
+ *
+ * Date: $Date$
+ *
+ * Copyright (c) 2001, Hewlett-Packard Company and Massachusetts
+ * Institute of Technology. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * - Neither the name of the Hewlett-Packard Company nor the name of the
+ * Massachusetts Institute of Technology nor the names of their
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+
+package org.dspace.storage.rdbms;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.apache.log4j.Category;
+
+import org.dspace.core.ConfigurationManager;
+
+/**
+ * Command-line executed class for initializing the DSpace database. This
+ * should be invoked with a single argument, the filename of the database
+ * schema file.
+ *
+ * @author Robert Tansley
+ * @version $Revision$
+ */
+public class InitializeDatabase
+{
+ /**
+ * log4j category
+ */
+ private static Category log =
+ Category.getInstance(InitializeDatabase.class);
+
+
+ public static void main(String argv[])
+ {
+ // Usage checks
+ if (argv.length != 1)
+ {
+ log.warn("Schema file not specified");
+ System.exit(1);
+ }
+
+ log.info("Initializing Database");
+
+ Connection connection = null;
+
+ try
+ {
+ connection = DatabaseManager.getConnection();
+ DatabaseManager.loadSql(new FileReader(argv[0]));
+ System.exit(0);
+ }
+ catch (Exception e)
+ {
+ log.fatal("Caught exception:", e);
+ System.exit(1);
+ }
+ finally
+ {
+ if (connection != null)
+ {
+ DatabaseManager.freeConnection(connection);
+ }
+ }
+ }
+}