From 79dfe618441fa781e22f0ff1e935c2b4cf6e2be2 Mon Sep 17 00:00:00 2001 From: Robert Tansley Date: Wed, 8 May 2002 20:56:00 +0000 Subject: [PATCH] Added DBMS build tasks: - Added schema file - Add InitializeDatabase command line class - Can now pass in "dspace.configuration" system property which will get ConfigurationManager to load a specific configuration - Added a simple log4j properties file for use during builds (e.g. when executing InitializeDatabase) - Changed a couple of INFO level logs to DEBUG in DatabaseManager git-svn-id: http://scm.dspace.org/svn/repo/trunk@7 9c30dcfa-912a-0410-8fc2-9e0234be79fd --- dspace/build.xml | 51 +- dspace/etc/database_schema.sql | 798 ++++++++++++++++++ dspace/etc/log4j.build.properties | 13 + dspace/lib/postgresql.jar | Bin 0 -> 101669 bytes .../org/dspace/core/ConfigurationManager.java | 58 +- .../dspace/storage/rdbms/DatabaseManager.java | 8 +- .../storage/rdbms/InitializeDatabase.java | 103 +++ 7 files changed, 1005 insertions(+), 26 deletions(-) create mode 100644 dspace/etc/database_schema.sql create mode 100644 dspace/etc/log4j.build.properties create mode 100644 dspace/lib/postgresql.jar create mode 100644 dspace/src/org/dspace/storage/rdbms/InitializeDatabase.java diff --git a/dspace/build.xml b/dspace/build.xml index 20d4ab45ce..1291e1d4ba 100644 --- a/dspace/build.xml +++ b/dspace/build.xml @@ -55,18 +55,15 @@ - - - - - - - + + + + @@ -75,6 +72,7 @@ + @@ -101,8 +99,6 @@ - - @@ -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 0000000000000000000000000000000000000000..c4780afb9143462151a4941b519b69cd1cba3d2e GIT binary patch literal 101669 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%0A!4kVSmb{ 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 literal 0 HcmV?d00001 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); + } + } + } +}