mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
Compare commits
63 Commits
alert-auto
...
dspace-1.7
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7bad4dd044 | ||
![]() |
e320ebd85a | ||
![]() |
e8d7f30ccf | ||
![]() |
36fa23246c | ||
![]() |
ca21676305 | ||
![]() |
266ec0fc2b | ||
![]() |
7e1e0ce8b5 | ||
![]() |
faf8883bc9 | ||
![]() |
43fc41fef9 | ||
![]() |
d863d8a88c | ||
![]() |
21f7f3f9ca | ||
![]() |
37a6f5e82a | ||
![]() |
f6f0104cd4 | ||
![]() |
4e6973a569 | ||
![]() |
aa8dd60640 | ||
![]() |
b997ca866f | ||
![]() |
5c6c7e1fd1 | ||
![]() |
6e026ed6fd | ||
![]() |
c3a48caca4 | ||
![]() |
39538b1ab8 | ||
![]() |
f923f7c391 | ||
![]() |
97e105b88f | ||
![]() |
4eaacd90cb | ||
![]() |
9a075ac5d9 | ||
![]() |
f43e2e2992 | ||
![]() |
06b81964e4 | ||
![]() |
84042ce512 | ||
![]() |
3c7d8ba607 | ||
![]() |
151afeace5 | ||
![]() |
aa6f1baa4a | ||
![]() |
2b67c5ccb2 | ||
![]() |
06878eab58 | ||
![]() |
7cc9a5d3d0 | ||
![]() |
8237d8b6e1 | ||
![]() |
48777df275 | ||
![]() |
908429570c | ||
![]() |
d999d0b0b7 | ||
![]() |
2bfd77e634 | ||
![]() |
0a50305ff5 | ||
![]() |
0bf155628d | ||
![]() |
1bbea4dbc4 | ||
![]() |
edb6a8a86f | ||
![]() |
491ca830a9 | ||
![]() |
09e049739f | ||
![]() |
0a00a8bbe9 | ||
![]() |
0cbeef4010 | ||
![]() |
27ae52c8f1 | ||
![]() |
2834c8ccf6 | ||
![]() |
1a9a7dfcba | ||
![]() |
27741e59a9 | ||
![]() |
1f4e370234 | ||
![]() |
f8c0886738 | ||
![]() |
296a70b4d8 | ||
![]() |
c0f8854398 | ||
![]() |
f7e2723e5c | ||
![]() |
314011e069 | ||
![]() |
aa708a326c | ||
![]() |
ce3a2098e4 | ||
![]() |
28bf3e3046 | ||
![]() |
793974234d | ||
![]() |
7ea045b2ed | ||
![]() |
54d0316724 | ||
![]() |
77573bc55f |
2
LICENSE
2
LICENSE
@@ -1,7 +1,7 @@
|
||||
DSpace source code license:
|
||||
|
||||
|
||||
Copyright (c) 2002-2010, DuraSpace. All rights reserved.
|
||||
Copyright (c) 2002-2011, DuraSpace. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
|
4
NOTICE
4
NOTICE
@@ -11,5 +11,5 @@ access and preservation of digital works. The Foundation was able to transfer
|
||||
the legal copyright from Hewlett-Packard Company (HP) and Massachusetts
|
||||
Institute of Technology (MIT) to the DSpace Foundation in October 2007. Many
|
||||
of the files in the source code may contain a copyright statement stating HP
|
||||
and MIT posses the copyright, in these instances please note that the copy
|
||||
right has transfered to the DSpace foundation, and subsequently to Duraspace.
|
||||
and MIT possess the copyright, in these instances please note that the copy
|
||||
right has transferred to the DSpace foundation, and subsequently to DuraSpace.
|
||||
|
10
README
10
README
@@ -5,9 +5,9 @@ or
|
||||
- dspace/docs/pdf/DSpace-Manual.pdf
|
||||
|
||||
DSpace version information can be found in this release package under
|
||||
- dspace/CHANGES
|
||||
or
|
||||
- dspace/docs/html/History.html
|
||||
or viewed online at
|
||||
- https://wiki.duraspace.org/display/DSDOC/History
|
||||
|
||||
Documentation for the most recent stable release(s) may be downloaded
|
||||
or viewed online at
|
||||
@@ -31,12 +31,12 @@ mailing list.
|
||||
|
||||
Detailed Issue Tracking for DSpace is done on our JIRA Issue Tracker
|
||||
|
||||
- http://jira.dspace.org/
|
||||
- https://jira.duraspace.org/browse/DS
|
||||
|
||||
|
||||
To contribute to DSpace, please see:
|
||||
|
||||
- https://wiki.duraspace.org/display/DSPACE/HowToContribute
|
||||
- https://wiki.duraspace.org/display/DSPACE/How+to+Contribute+to+DSpace
|
||||
|
||||
|
||||
For more details about DSpace, including a list of service providers,
|
||||
@@ -48,4 +48,4 @@ places to seek help, news articles and lists of other users, please see:
|
||||
DSpace source code licensing information available online at:
|
||||
- http://www.dspace.org/license/
|
||||
|
||||
Copyright (c) 2002-2010, DuraSpace. All rights reserved.
|
||||
Copyright (c) 2002-2011, DuraSpace. All rights reserved.
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -22,9 +22,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<!--
|
||||
|
@@ -494,7 +494,7 @@ public class Item extends DSpaceObject
|
||||
int i = 0;
|
||||
while(dcf.hasMoreTokens())
|
||||
{
|
||||
tokens[i] = dcf.nextToken().toLowerCase().trim();
|
||||
tokens[i] = dcf.nextToken().trim();
|
||||
i++;
|
||||
}
|
||||
String schema = tokens[0];
|
||||
@@ -908,7 +908,8 @@ public class Item extends DSpaceObject
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!schema.equals(Item.ANY))
|
||||
|
||||
if (!schema.equals(Item.ANY))
|
||||
{
|
||||
if (dcv.schema != null && !dcv.schema.equals(schema))
|
||||
{
|
||||
|
@@ -354,6 +354,7 @@ public class MetadataSchema
|
||||
"metadata_schema_id=" + getSchemaID()));
|
||||
|
||||
DatabaseManager.delete(context, row);
|
||||
decache();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -362,6 +362,34 @@ public class WorkspaceItem implements InProgressSubmission
|
||||
return wsItems.toArray(new WorkspaceItem[wsItems.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if a particular item is currently still in a user's Workspace.
|
||||
* If so, its WorkspaceItem is returned. If not, null is returned
|
||||
*
|
||||
* @param context
|
||||
* the context object
|
||||
* @param i
|
||||
* the item
|
||||
*
|
||||
* @return workflow item corresponding to the item, or null
|
||||
*/
|
||||
public static WorkspaceItem findByItem(Context context, Item i)
|
||||
throws SQLException
|
||||
{
|
||||
// Look for the unique workspaceitem entry where 'item_id' references this item
|
||||
TableRow row = DatabaseManager.findByUnique(context, "workspaceitem", "item_id", i.getID());
|
||||
|
||||
if (row == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return new WorkspaceItem(context, row);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all workspace items in the whole system
|
||||
*
|
||||
|
@@ -31,6 +31,7 @@ public interface ChoiceAuthority
|
||||
* defaultSelected index in the Choices instance to the choice, if any,
|
||||
* that matches the value.
|
||||
*
|
||||
* @param field being matched for
|
||||
* @param text user's value to match
|
||||
* @param collection database ID of Collection for context (owner of Item)
|
||||
* @param start choice at which to start, 0 is first.
|
||||
@@ -38,7 +39,7 @@ public interface ChoiceAuthority
|
||||
* @param locale explicit localization key if available, or null
|
||||
* @return a Choices object (never null).
|
||||
*/
|
||||
public Choices getMatches(String text, int collection, int start, int limit, String locale);
|
||||
public Choices getMatches(String field, String text, int collection, int start, int limit, String locale);
|
||||
|
||||
/**
|
||||
* Get the single "best" match (if any) of a value in the authority
|
||||
@@ -49,12 +50,13 @@ public interface ChoiceAuthority
|
||||
* This call is typically used in non-interactive metadata ingest
|
||||
* where there is no interactive agent to choose from among options.
|
||||
*
|
||||
* @param field being matched for
|
||||
* @param text user's value to match
|
||||
* @param collection database ID of Collection for context (owner of Item)
|
||||
* @param locale explicit localization key if available, or null
|
||||
* @return a Choices object (never null) with 1 or 0 values.
|
||||
*/
|
||||
public Choices getBestMatch(String text, int collection, String locale);
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale);
|
||||
|
||||
/**
|
||||
* Get the canonical user-visible "label" (i.e. short descriptive text)
|
||||
@@ -64,9 +66,10 @@ public interface ChoiceAuthority
|
||||
* This may get called many times while populating a Web page so it should
|
||||
* be implemented as efficiently as possible.
|
||||
*
|
||||
* @param field being matched for
|
||||
* @param key authority key known to this authority.
|
||||
* @param locale explicit localization key if available, or null
|
||||
* @return descriptive label - should always return something, never null.
|
||||
*/
|
||||
public String getLabel(String key, String locale);
|
||||
public String getLabel(String field, String key, String locale);
|
||||
}
|
||||
|
@@ -153,7 +153,7 @@ public final class ChoiceAuthorityManager
|
||||
* Wrapper that calls getMatches method of the plugin corresponding to
|
||||
* the metadata field defined by schema,element,qualifier.
|
||||
*
|
||||
* @see ChoiceAuthority#getMatches(String, int, int, int, String)
|
||||
* @see ChoiceAuthority#getMatches(String, String, int, int, int, String)
|
||||
* @param schema schema of metadata field
|
||||
* @param element element of metadata field
|
||||
* @param qualifier qualifier of metadata field
|
||||
@@ -175,7 +175,7 @@ public final class ChoiceAuthorityManager
|
||||
* Wrapper calls getMatches method of the plugin corresponding to
|
||||
* the metadata field defined by single field key.
|
||||
*
|
||||
* @see ChoiceAuthority#getMatches(String, int, int, int, String)
|
||||
* @see ChoiceAuthority#getMatches(String, String, int, int, int, String)
|
||||
* @param fieldKey single string identifying metadata field
|
||||
* @param query user's value to match
|
||||
* @param collection database ID of Collection for context (owner of Item)
|
||||
@@ -194,14 +194,14 @@ public final class ChoiceAuthorityManager
|
||||
"No choices plugin was configured for field \"" + fieldKey
|
||||
+ "\".");
|
||||
}
|
||||
return ma.getMatches(query, collection, start, limit, locale);
|
||||
return ma.getMatches(fieldKey, query, collection, start, limit, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper that calls getBestMatch method of the plugin corresponding to
|
||||
* the metadata field defined by single field key.
|
||||
*
|
||||
* @see ChoiceAuthority#getBestMatch(String, int, String)
|
||||
* @see ChoiceAuthority#getBestMatch(String, String, int, String)
|
||||
* @param fieldKey single string identifying metadata field
|
||||
* @param query user's value to match
|
||||
* @param collection database ID of Collection for context (owner of Item)
|
||||
@@ -218,7 +218,7 @@ public final class ChoiceAuthorityManager
|
||||
"No choices plugin was configured for field \"" + fieldKey
|
||||
+ "\".");
|
||||
}
|
||||
return ma.getBestMatch(query, collection, locale);
|
||||
return ma.getBestMatch(fieldKey, query, collection, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -242,7 +242,7 @@ public final class ChoiceAuthorityManager
|
||||
{
|
||||
throw new IllegalArgumentException("No choices plugin was configured for field \"" + fieldKey + "\".");
|
||||
}
|
||||
return ma.getLabel(authKey, locale);
|
||||
return ma.getLabel(fieldKey, authKey, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -117,7 +117,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
|
||||
}
|
||||
|
||||
|
||||
public Choices getMatches(String query, int collection, int start, int limit, String locale)
|
||||
public Choices getMatches(String field, String query, int collection, int start, int limit, String locale)
|
||||
{
|
||||
init();
|
||||
|
||||
@@ -134,7 +134,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
|
||||
return new Choices(v, 0, v.length, Choices.CF_AMBIGUOUS, false, dflt);
|
||||
}
|
||||
|
||||
public Choices getBestMatch(String text, int collection, String locale)
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale)
|
||||
{
|
||||
init();
|
||||
for (int i = 0; i < values.length; ++i)
|
||||
@@ -149,7 +149,7 @@ public class DCInputAuthority extends SelfNamedPlugin implements ChoiceAuthority
|
||||
return new Choices(Choices.CF_NOTFOUND);
|
||||
}
|
||||
|
||||
public String getLabel(String key, String locale)
|
||||
public String getLabel(String field, String key, String locale)
|
||||
{
|
||||
init();
|
||||
return labels[Integer.parseInt(key)];
|
||||
|
@@ -154,7 +154,7 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Choic
|
||||
}
|
||||
}
|
||||
|
||||
public Choices getMatches(String text, int collection, int start, int limit, String locale)
|
||||
public Choices getMatches(String field, String text, int collection, int start, int limit, String locale)
|
||||
{
|
||||
init();
|
||||
log.debug("Getting matches for '" + text + "'");
|
||||
@@ -203,14 +203,14 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Choic
|
||||
return new Choices(choices, 0, choices.length, Choices.CF_AMBIGUOUS, false);
|
||||
}
|
||||
|
||||
public Choices getBestMatch(String text, int collection, String locale)
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale)
|
||||
{
|
||||
init();
|
||||
log.debug("Getting best match for '" + text + "'");
|
||||
return getMatches(text, collection, 0, 2, locale);
|
||||
return getMatches(field, text, collection, 0, 2, locale);
|
||||
}
|
||||
|
||||
public String getLabel(String key, String locale)
|
||||
public String getLabel(String field, String key, String locale)
|
||||
{
|
||||
init();
|
||||
String xpathExpression = String.format(idTemplate, key);
|
||||
@@ -222,4 +222,4 @@ public class DSpaceControlledVocabulary extends SelfNamedPlugin implements Choic
|
||||
return("");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -83,16 +83,16 @@ public class LCNameAuthority implements ChoiceAuthority
|
||||
}
|
||||
|
||||
// punt! this is a poor implementation..
|
||||
public Choices getBestMatch(String text, int collection, String locale)
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale)
|
||||
{
|
||||
return getMatches(text, collection, 0, 2, locale);
|
||||
return getMatches(field, text, collection, 0, 2, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Match a proposed value against name authority records
|
||||
* Value is assumed to be in "Lastname, Firstname" format.
|
||||
*/
|
||||
public Choices getMatches(String text, int collection, int start, int limit, String locale)
|
||||
public Choices getMatches(String field, String text, int collection, int start, int limit, String locale)
|
||||
{
|
||||
Choices result = queryPerson(text, start, limit);
|
||||
if (result == null)
|
||||
@@ -105,7 +105,7 @@ public class LCNameAuthority implements ChoiceAuthority
|
||||
|
||||
// punt; supposed to get the canonical display form of a metadata authority key
|
||||
// XXX FIXME implement this with a query on the authority key, cache results
|
||||
public String getLabel(String key, String locale)
|
||||
public String getLabel(String field, String key, String locale)
|
||||
{
|
||||
return key;
|
||||
}
|
||||
|
@@ -52,4 +52,8 @@ public class SHERPARoMEOJournalTitle extends SHERPARoMEOProtocol
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Choices getMatches(String field, String text, int collection, int start, int limit, String locale) {
|
||||
return getMatches(text, collection, start, limit, locale);
|
||||
}
|
||||
}
|
||||
|
@@ -72,14 +72,14 @@ public abstract class SHERPARoMEOProtocol implements ChoiceAuthority
|
||||
// this implements the specific RoMEO API args and XML tag naming
|
||||
public abstract Choices getMatches(String text, int collection, int start, int limit, String locale);
|
||||
|
||||
public Choices getBestMatch(String text, int collection, String locale)
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale)
|
||||
{
|
||||
return getMatches(text, collection, 0, 2, locale);
|
||||
return getMatches(field, text, collection, 0, 2, locale);
|
||||
}
|
||||
|
||||
// XXX FIXME just punt, returning value, never got around to
|
||||
// implementing a reverse query.
|
||||
public String getLabel(String key, String locale)
|
||||
public String getLabel(String field, String key, String locale)
|
||||
{
|
||||
return key;
|
||||
}
|
||||
|
@@ -53,4 +53,9 @@ public class SHERPARoMEOPublisher extends SHERPARoMEOProtocol
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Choices getMatches(String field, String text, int collection, int start, int limit, String locale) {
|
||||
return getMatches(text, collection, start, limit, locale);
|
||||
}
|
||||
}
|
||||
|
@@ -33,7 +33,7 @@ public class SampleAuthority implements ChoiceAuthority
|
||||
"Saturday"
|
||||
};
|
||||
|
||||
public Choices getMatches(String query, int collection, int start, int limit, String locale)
|
||||
public Choices getMatches(String field, String query, int collection, int start, int limit, String locale)
|
||||
{
|
||||
int dflt = -1;
|
||||
Choice v[] = new Choice[values.length];
|
||||
@@ -48,7 +48,7 @@ public class SampleAuthority implements ChoiceAuthority
|
||||
return new Choices(v, 0, v.length, Choices.CF_AMBIGUOUS, false, dflt);
|
||||
}
|
||||
|
||||
public Choices getBestMatch(String text, int collection, String locale)
|
||||
public Choices getBestMatch(String field, String text, int collection, String locale)
|
||||
{
|
||||
for (int i = 0; i < values.length; ++i)
|
||||
{
|
||||
@@ -62,7 +62,7 @@ public class SampleAuthority implements ChoiceAuthority
|
||||
return new Choices(Choices.CF_NOTFOUND);
|
||||
}
|
||||
|
||||
public String getLabel(String key, String locale)
|
||||
public String getLabel(String field, String key, String locale)
|
||||
{
|
||||
return labels[Integer.parseInt(key)];
|
||||
}
|
||||
|
@@ -29,6 +29,7 @@ import org.dspace.content.Community;
|
||||
import org.dspace.content.DSpaceObject;
|
||||
import org.dspace.content.FormatIdentifier;
|
||||
import org.dspace.content.Item;
|
||||
import org.dspace.content.WorkspaceItem;
|
||||
import org.dspace.content.crosswalk.CrosswalkException;
|
||||
import org.dspace.content.crosswalk.MetadataValidationException;
|
||||
import org.dspace.core.ConfigurationManager;
|
||||
@@ -36,7 +37,6 @@ import org.dspace.core.Constants;
|
||||
import org.dspace.core.Context;
|
||||
import org.dspace.core.LogManager;
|
||||
import org.dspace.handle.HandleManager;
|
||||
import org.dspace.workflow.WorkflowItem;
|
||||
import org.jdom.Element;
|
||||
|
||||
/**
|
||||
@@ -459,24 +459,34 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester
|
||||
manifest.crosswalkObjectOtherAdminMD(context, params, dso, callback);
|
||||
|
||||
// -- Step 4 --
|
||||
// Run our Descriptive metadata (dublin core, etc) crosswalks!
|
||||
crosswalkObjectDmd(context, dso, manifest, callback, manifest
|
||||
.getItemDmds(), params);
|
||||
|
||||
// For Items, also sanity-check the metadata for minimum requirements.
|
||||
if (type == Constants.ITEM)
|
||||
{
|
||||
PackageUtils.checkItemMetadata((Item) dso);
|
||||
}
|
||||
|
||||
// -- Step 5 --
|
||||
// Add all content files as bitstreams on new DSpace Object
|
||||
if (type == Constants.ITEM)
|
||||
{
|
||||
Item item = (Item) dso;
|
||||
// @TODO: maybe add an option to apply template Item on ingest??
|
||||
|
||||
//Check if this item is still in a user's workspace.
|
||||
//It should be, as we haven't completed its install yet.
|
||||
WorkspaceItem wsi = WorkspaceItem.findByItem(context, item);
|
||||
|
||||
// Get collection this item is being submitted to
|
||||
Collection collection = item.getOwningCollection();
|
||||
if (collection == null)
|
||||
{
|
||||
// If an item doesn't have an owning-collection, that means it
|
||||
// has entered a workflow (and is not fully in the archive yet)
|
||||
WorkflowItem wfi = WorkflowItem.findByItem(context, item);
|
||||
|
||||
// Get the collection this workflow item belongs to
|
||||
if (wfi != null)
|
||||
// Get the collection this workspace item belongs to
|
||||
if (wsi != null)
|
||||
{
|
||||
collection = wfi.getCollection();
|
||||
collection = wsi.getCollection();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -492,9 +502,14 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester
|
||||
// have subclass manage license since it may be extra package file.
|
||||
addLicense(context, item, license, collection, params);
|
||||
|
||||
// XXX FIXME
|
||||
// should set lastModifiedTime e.g. when ingesting AIP.
|
||||
// maybe only do it in the finishObject() callback for AIP.
|
||||
// Finally, if item is still in the workspace, then we actually need
|
||||
// to install it into the archive & assign its handle.
|
||||
if(wsi!=null)
|
||||
{
|
||||
// Finish creating the item. This actually assigns the handle,
|
||||
// and will either install item immediately or start a workflow, based on params
|
||||
PackageUtils.finishCreateItem(context, wsi, handle, params);
|
||||
}
|
||||
|
||||
} // end if ITEM
|
||||
else if (type == Constants.COLLECTION || type == Constants.COMMUNITY)
|
||||
@@ -519,17 +534,6 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester
|
||||
+ String.valueOf(type));
|
||||
}
|
||||
|
||||
// -- Step 5 --
|
||||
// Run our Descriptive metadata (dublin core, etc) crosswalks!
|
||||
crosswalkObjectDmd(context, dso, manifest, callback, manifest
|
||||
.getItemDmds(), params);
|
||||
|
||||
// For Items, also sanity-check the metadata for minimum requirements.
|
||||
if (type == Constants.ITEM)
|
||||
{
|
||||
PackageUtils.checkItemMetadata((Item) dso);
|
||||
}
|
||||
|
||||
// -- Step 6 --
|
||||
// Finish things up!
|
||||
|
||||
@@ -635,7 +639,6 @@ public abstract class AbstractMETSIngester extends AbstractPackageIngester
|
||||
if (dso.getType() == Constants.ITEM)
|
||||
{
|
||||
Item item = (Item) dso;
|
||||
// @TODO: maybe add an option to apply template Item on ingest??
|
||||
|
||||
// save manifest as a bitstream in Item if desired
|
||||
if (preserveManifest())
|
||||
|
@@ -345,7 +345,7 @@ public class PackageUtils
|
||||
* generic like ".xml", to accidentally get set to this format.
|
||||
* @param context - the context.
|
||||
* @param shortDesc - short descriptive name, used to locate existing format.
|
||||
* @param MIMEtype - mime content-type
|
||||
* @param MIMEType - mime content-type
|
||||
* @param desc - long description
|
||||
* @param internal value for the 'internal' flag of a new format if created.
|
||||
* @return BitstreamFormat object that was found or created. Never null.
|
||||
@@ -472,11 +472,10 @@ public class PackageUtils
|
||||
//(Note: Handle is not set until item is finished)
|
||||
WorkspaceItem wsi = WorkspaceItem.create(context, (Collection)parent, params.useCollectionTemplate());
|
||||
|
||||
// Finish creating item with specified handle
|
||||
// (this will either install item immediately or start a workflow, based on params)
|
||||
dso = finishCreateItem(context, wsi, handle, params);
|
||||
|
||||
return dso;
|
||||
// Please note that we are returning an Item which is *NOT* yet in the Archive,
|
||||
// and doesn't yet have a handle assigned.
|
||||
// This Item will remain "incomplete" until 'PackageUtils.finishCreateItem()' is called
|
||||
return wsi.getItem();
|
||||
|
||||
case Constants.SITE:
|
||||
return Site.find(context, Site.SITE_ID);
|
||||
@@ -528,7 +527,7 @@ public class PackageUtils
|
||||
// default: skip workflow, but otherwise normal submission (i.e. package treated like a SIP)
|
||||
else
|
||||
{
|
||||
// Intall item immediately with the specified handle
|
||||
// Install item immediately with the specified handle
|
||||
InstallItem.installItem(context, wsi, handle);
|
||||
|
||||
// return newly installed item
|
||||
@@ -802,7 +801,7 @@ public class PackageUtils
|
||||
* Also see the translateGroupNameForImport() method which does the opposite
|
||||
* of this method.
|
||||
*
|
||||
* @param relatedDso DSpaceObject associated with group
|
||||
* @param context current DSpace Context
|
||||
* @param groupName Group's name
|
||||
* @return the group name, with any internal IDs translated to Handles
|
||||
*/
|
||||
@@ -886,7 +885,7 @@ public class PackageUtils
|
||||
* Also see the translateGroupNameForExport() method which does the opposite
|
||||
* of this method.
|
||||
*
|
||||
* @param relatedDso DSpaceObject associated with group
|
||||
* @param context current DSpace Context
|
||||
* @param groupName Group's name
|
||||
* @return the group name, with any Handles translated to internal IDs
|
||||
*/
|
||||
|
@@ -351,7 +351,7 @@ public class EPerson extends DSpaceObject
|
||||
}
|
||||
|
||||
// Get all the epeople that match the query
|
||||
TableRowIterator rows = DatabaseManager.queryTable(context, "eperson",
|
||||
TableRowIterator rows = DatabaseManager.query(context,
|
||||
dbquery, paramArr);
|
||||
try
|
||||
{
|
||||
@@ -473,7 +473,7 @@ public class EPerson extends DSpaceObject
|
||||
|
||||
// NOTE: The use of 's' in the order by clause can not cause an SQL
|
||||
// injection because the string is derived from constant values above.
|
||||
TableRowIterator rows = DatabaseManager.queryTable(context, "eperson",
|
||||
TableRowIterator rows = DatabaseManager.query(context,
|
||||
"SELECT * FROM eperson ORDER BY "+s);
|
||||
|
||||
try
|
||||
@@ -955,7 +955,7 @@ public class EPerson extends DSpaceObject
|
||||
List<String> tableList = new ArrayList<String>();
|
||||
|
||||
// check for eperson in item table
|
||||
TableRowIterator tri = DatabaseManager.queryTable(myContext, "item",
|
||||
TableRowIterator tri = DatabaseManager.query(myContext,
|
||||
"SELECT * from item where submitter_id= ? ",
|
||||
getID());
|
||||
|
||||
@@ -976,7 +976,7 @@ public class EPerson extends DSpaceObject
|
||||
}
|
||||
|
||||
// check for eperson in workflowitem table
|
||||
tri = DatabaseManager.queryTable(myContext, "workflowitem",
|
||||
tri = DatabaseManager.query(myContext,
|
||||
"SELECT * from workflowitem where owner= ? ",
|
||||
getID());
|
||||
|
||||
@@ -997,7 +997,7 @@ public class EPerson extends DSpaceObject
|
||||
}
|
||||
|
||||
// check for eperson in tasklistitem table
|
||||
tri = DatabaseManager.queryTable(myContext, "tasklistitem",
|
||||
tri = DatabaseManager.query(myContext,
|
||||
"SELECT * from tasklistitem where eperson_id= ? ",
|
||||
getID());
|
||||
|
||||
|
@@ -1102,6 +1102,7 @@ public class DatabaseManager
|
||||
break;
|
||||
|
||||
case Types.INTEGER:
|
||||
case Types.NUMERIC:
|
||||
if (isOracle)
|
||||
{
|
||||
long longValue = results.getLong(i);
|
||||
@@ -1120,7 +1121,6 @@ public class DatabaseManager
|
||||
}
|
||||
break;
|
||||
|
||||
case Types.NUMERIC:
|
||||
case Types.DECIMAL:
|
||||
case Types.BIGINT:
|
||||
row.setColumn(name, results.getLong(i));
|
||||
|
@@ -480,6 +480,8 @@ jsp.error.404.title = Error: Documen
|
||||
jsp.error.authorize.text1 = You do not have permission to perform the action you just attempted.
|
||||
jsp.error.authorize.text2 = If you think you should have authorization, please feel free to contact the DSpace administrators:
|
||||
jsp.error.authorize.title = Authorization Required
|
||||
jsp.error.exceeded-size.text1 = Sorry, but the file you have tried to upload ({0} bytes) exceeds the maximum file size limit of ({1} bytes). You can contact the repository manager with questions about this limit.
|
||||
jsp.error.exceeded-size.title = Exceeded Maximum File Size Error
|
||||
jsp.error.integrity.heading = System Error: Malformed Request
|
||||
jsp.error.integrity.list1 = Sometimes, if you used your browser's "back" button during an operation like a submission, clicking on a button may try and do something that's already been done, such as commit the submission to the archive. Clicking your browsers "reload" or "refresh" button may have similar results.
|
||||
jsp.error.integrity.list2 = If you got here by following a link or bookmark provided by someone else, the link may be incorrect or you mistyped the link. Please check the link and try again.
|
||||
|
@@ -314,6 +314,23 @@ public class ItemTest extends AbstractDSpaceObjectTest
|
||||
assertTrue("testGetMetadata_String 5",dc.length == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* A test for DS-806: Item.match() incorrect logic for schema testing
|
||||
*/
|
||||
@Test
|
||||
public void testDS806()
|
||||
{
|
||||
// Set the item to have two pieces of metadata for dc.type and dc2.type
|
||||
String dcType = "DC-TYPE";
|
||||
String testType = "TEST-TYPE";
|
||||
it.addMetadata("dc", "type", null, null, dcType);
|
||||
it.addMetadata("test", "type", null, null, testType);
|
||||
|
||||
// Check that only one is returned when we ask for all dc.type values
|
||||
DCValue[] values = it.getMetadata("dc", "type", null, null);
|
||||
assertTrue("Return results", values.length == 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of addDC method, of class Item.
|
||||
*/
|
||||
|
@@ -1784,7 +1784,7 @@ crosswalk.submission.SWORD.stylesheet = crosswalks/sword-swap-ingest.xsl
|
||||
# which DSpace will construct the deposit location urls for
|
||||
# collections.
|
||||
#
|
||||
# The default is {dspace.url}/sword/deposit
|
||||
# The default is {dspace.baseUrl}/sword/deposit
|
||||
#
|
||||
# In the event that you are not deploying DSpace as the ROOT
|
||||
# application in the servlet container, this will generate
|
||||
@@ -1797,7 +1797,7 @@ crosswalk.submission.SWORD.stylesheet = crosswalks/sword-swap-ingest.xsl
|
||||
# URL from which DSpace will construct the service document
|
||||
# location urls for the site, and for individual collections
|
||||
#
|
||||
# The default is {dspace.url}/sword/servicedocument
|
||||
# The default is {dspace.baseUrl}/sword/servicedocument
|
||||
#
|
||||
# In the event that you are not deploying DSpace as the ROOT
|
||||
# application in the servlet container, this will generate
|
||||
@@ -1810,7 +1810,7 @@ crosswalk.submission.SWORD.stylesheet = crosswalks/sword-swap-ingest.xsl
|
||||
# which DSpace will use to construct the media link urls
|
||||
# for items which are deposited via sword
|
||||
#
|
||||
# The default is {dspace.url}/sword/media-link
|
||||
# The default is {dspace.baseUrl}/sword/media-link
|
||||
#
|
||||
# In the event that you are not deploying DSpace as the ROOT
|
||||
# application in the servlet container, this will generate
|
||||
|
@@ -584,4 +584,18 @@
|
||||
<scope_note>Nature or genre of content.</scope_note>
|
||||
</dc-type>
|
||||
|
||||
|
||||
<!-- A second test schema for testing purposes. -->
|
||||
<dc-schema>
|
||||
<name>test</name>
|
||||
<namespace>http://example.com/test/</namespace>
|
||||
</dc-schema>
|
||||
|
||||
<dc-type>
|
||||
<schema>test</schema>
|
||||
<element>type</element>
|
||||
<!-- unqualified -->
|
||||
<scope_note>A second test schema type element.</scope_note>
|
||||
</dc-type>
|
||||
|
||||
</dspace-dc-types>
|
||||
|
@@ -1,124 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-provider</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<name>DSpace Discovery :: Discovery Provider Library</name>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
Build Information
|
||||
$Id: pom.xml 5367 2010-09-30 00:30:11Z mdiggory $
|
||||
$URL: https://scm.dspace.org/svn/repo/modules/dspace-discovery/trunk/provider/pom.xml $
|
||||
</description>
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-httpclient</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<version>1.4.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<version>1.0.0-M2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>${pom.artifactId}</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
<plugin>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-provider</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-provider
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-provider</url>
|
||||
</scm>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-provider</artifactId>
|
||||
<version>1.7.2</version>
|
||||
<name>DSpace Discovery :: Discovery Provider Library</name>
|
||||
<description>
|
||||
|
||||
|
||||
|
||||
Build Information
|
||||
$Id: pom.xml 5367 2010-09-30 00:30:11Z mdiggory $
|
||||
$URL: https://scm.dspace.org/svn/repo/modules/dspace-discovery/trunk/provider/pom.xml $
|
||||
</description>
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-httpclient</groupId>
|
||||
<artifactId>commons-httpclient</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<version>1.4.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<version>1.0.0-M2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.1</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>${pom.artifactId}</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
<plugin>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
</project>
|
@@ -44,6 +44,8 @@ public class SearchUtils {
|
||||
|
||||
private static List<String> dateIndexableFields = new ArrayList<String>();
|
||||
|
||||
public static final String FILTER_SEPARATOR = "|||";
|
||||
|
||||
static {
|
||||
|
||||
log.debug("loading configuration");
|
||||
@@ -190,6 +192,20 @@ public class SearchUtils {
|
||||
return dateIndexableFields;
|
||||
}
|
||||
|
||||
public static String getFilterQueryDisplay(String filterQuery){
|
||||
String separator = SearchUtils.getConfig().getString("solr.facets.split.char", SearchUtils.FILTER_SEPARATOR);
|
||||
//Escape any regex chars
|
||||
separator = java.util.regex.Pattern.quote(separator);
|
||||
String[] fqParts = filterQuery.split(separator);
|
||||
String result = "";
|
||||
int start = fqParts.length / 2;
|
||||
for(int i = start; i < fqParts.length; i++){
|
||||
result += fqParts[i];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static class SolrFacetConfig {
|
||||
|
||||
private String facetField;
|
||||
|
@@ -8,6 +8,7 @@
|
||||
package org.dspace.discovery;
|
||||
|
||||
import org.apache.commons.collections.ExtendedProperties;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang.time.DateFormatUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.solr.client.solrj.SolrQuery;
|
||||
@@ -699,7 +700,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
|
||||
if(SearchUtils.getAllFacets().contains(field) || SearchUtils.getAllFacets().contains(unqualifiedField + "." + Item.ANY)){
|
||||
//Add a special filter
|
||||
doc.addField(field + "_filter", value);
|
||||
//We use a separator to split up the lowercase and regular case, this is needed to get our filters in regular case
|
||||
//Solr has issues with facet prefix and cases
|
||||
String separator = SearchUtils.getConfig().getString("solr.facets.split.char", SearchUtils.FILTER_SEPARATOR);
|
||||
doc.addField(field + "_filter", value.toLowerCase() + separator + value);
|
||||
}
|
||||
|
||||
if(SearchUtils.getSortFields().contains(field) && !sortFieldsAdded.contains(field)){
|
||||
@@ -773,9 +777,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
readers.add(is);
|
||||
|
||||
// Add each InputStream to the Indexed Document
|
||||
// (Acts like an Append)
|
||||
// doc.addField("default", is);
|
||||
//doc.add(new Field("default", is));
|
||||
doc.addField("fulltext", IOUtils.toString(is));
|
||||
|
||||
log.debug(" Added BitStream: "
|
||||
+ myBitstreams[j].getStoreNumber() + " "
|
||||
|
@@ -1,130 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-api</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<name>DSpace Discovery :: Discovery XMLUI API</name>
|
||||
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!-- external -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-provider</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<archiveClasses>false</archiveClasses>
|
||||
<attachClasses>true</attachClasses>
|
||||
<classesClassifier>classes</classesClassifier>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
|
||||
<warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>prepare-package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<index>true</index>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>discovery-xmlui-block</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-api</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-api
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-api</url>
|
||||
</scm>
|
||||
|
||||
</project>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>jar</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-api</artifactId>
|
||||
<version>1.7.2</version>
|
||||
<name>DSpace Discovery :: Discovery XMLUI API</name>
|
||||
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!-- external -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-provider</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<archiveClasses>false</archiveClasses>
|
||||
<attachClasses>true</attachClasses>
|
||||
<classesClassifier>classes</classesClassifier>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
|
||||
<warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>prepare-package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<index>true</index>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>discovery-xmlui-block</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
</project>
|
||||
|
@@ -37,7 +37,6 @@ import org.xml.sax.SAXException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.net.URLEncoder;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
@@ -386,7 +385,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
continue;
|
||||
}
|
||||
for (FacetField.Count count : facetVals) {
|
||||
values.add(new FilterDisplayValue(count.getName(), count.getCount(), count.getAsFilterQuery()));
|
||||
values.add(new FilterDisplayValue(SearchUtils.getFilterQueryDisplay(count.getName()), count.getCount(), count.getAsFilterQuery()));
|
||||
}
|
||||
}
|
||||
if(field.isDate()){
|
||||
@@ -463,9 +462,12 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
if(keys != null){
|
||||
while (keys.hasMoreElements()){
|
||||
String key = (String) keys.nextElement();
|
||||
if(key != null){
|
||||
paramsQuery += key + "=" + URLEncoder.encode(request.getParameter(key), "UTF-8");
|
||||
paramsQuery += "&";
|
||||
if(key != null && !"page".equals(key)){
|
||||
String[] vals = request.getParameterValues(key);
|
||||
for(String paramValue : vals){
|
||||
paramsQuery += key + "=" + paramValue;
|
||||
paramsQuery += "&";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -476,7 +478,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
"/discover?" +
|
||||
paramsQuery +
|
||||
"fq=" +
|
||||
URLEncoder.encode(filterQuery, "UTF-8"),
|
||||
filterQuery,
|
||||
displayedValue + " (" + value.getCount() + ")"
|
||||
);
|
||||
}
|
||||
|
@@ -120,6 +120,13 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr
|
||||
browseGlobal.addItem().addXref(contextPath + "/community-list", T_head_all_of_dspace );
|
||||
*/
|
||||
|
||||
/* regulate the ordering */
|
||||
options.addList("discovery");
|
||||
options.addList("browse");
|
||||
options.addList("account");
|
||||
options.addList("context");
|
||||
options.addList("administrative");
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -132,9 +132,9 @@ public class RelatedItems extends AbstractFiltersTransformer
|
||||
|
||||
this.queryArgs = prepareDefaultFilters(getView());
|
||||
this.queryArgs.setRows(1);
|
||||
this.queryArgs.add("fl","author,handle");
|
||||
this.queryArgs.add("fl","dc.contributor,dc.contributor.author,handle");
|
||||
this.queryArgs.add("mlt","true");
|
||||
this.queryArgs.add("mlt.fl","author,handle");
|
||||
this.queryArgs.add("mlt.fl","dc.contributor,dc.contributor.author,handle");
|
||||
this.queryArgs.add("mlt.mindf","1");
|
||||
this.queryArgs.add("mlt.mintf","1");
|
||||
this.queryArgs.setQuery("handle:" + dso.getHandle());
|
||||
|
@@ -558,7 +558,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
||||
|
||||
//No use in selecting the same filter twice
|
||||
if(filterQueries.contains(filterQuery)){
|
||||
cell.addContent(displayedValue + " (" + value.getCount() + ")");
|
||||
cell.addContent(SearchUtils.getFilterQueryDisplay(displayedValue) + " (" + value.getCount() + ")");
|
||||
} else {
|
||||
//Add the basics
|
||||
Map<String, String> urlParams = new HashMap<String, String>();
|
||||
@@ -567,8 +567,8 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
||||
//Add already existing filter queries
|
||||
url = addFilterQueriesToUrl(url);
|
||||
//Last add the current filter query
|
||||
url += "&fq=" + URLEncoder.encode(filterQuery, "UTF-8");
|
||||
cell.addXref(url, displayedValue + " (" + value.getCount() + ")"
|
||||
url += "&fq=" + filterQuery;
|
||||
cell.addXref(url, SearchUtils.getFilterQueryDisplay(displayedValue) + " (" + value.getCount() + ")"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -97,7 +97,7 @@ public class SimpleSearch extends AbstractSearch implements CacheableProcessingC
|
||||
// String searchUrl = SearchUtils.getConfig().getString("solr.search.server");
|
||||
// if(searchUrl != null && !searchUrl.endsWith("/"))
|
||||
// searchUrl += "/";
|
||||
String searchUrl = ConfigurationManager.getProperty("dspace.url") + "/JSON/discovery/searchSolr";
|
||||
String searchUrl = contextPath + "/JSON/discovery/searchSolr";
|
||||
|
||||
search.addHidden("solr-search-url").setValue(searchUrl);
|
||||
search.addHidden("contextpath").setValue(contextPath);
|
||||
@@ -166,6 +166,9 @@ public class SimpleSearch extends AbstractSearch implements CacheableProcessingC
|
||||
if(field.equals("location.comm") || field.equals("location.coll")){
|
||||
//We have a community/collection, resolve it to a dspaceObject
|
||||
value = SolrServiceImpl.locationToName(context, field, value);
|
||||
} else
|
||||
if(field.endsWith("_filter")){
|
||||
value = SearchUtils.getFilterQueryDisplay(value);
|
||||
}
|
||||
//Check for a range query
|
||||
Pattern pattern = Pattern.compile("\\[(.*? TO .*?)\\]");
|
||||
|
@@ -1,155 +1,155 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to you under the Apache License, Version
|
||||
2.0 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0 Unless required by
|
||||
applicable law or agreed to in writing, software distributed under the
|
||||
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied. See the License for
|
||||
the specific language governing permissions and limitations under the
|
||||
License.
|
||||
-->
|
||||
<!-- $Id: pom.xml 4739 2010-02-04 16:53:55Z benbosman $ -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>war</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-webapp</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<name>DSpace Discovery :: Discovery XMLUI Webapp</name>
|
||||
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-api</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<!-- external -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<archiveClasses>false</archiveClasses>
|
||||
<attachClasses>true</attachClasses>
|
||||
<classesClassifier>classes</classesClassifier>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
|
||||
<warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>
|
||||
<webResources>
|
||||
<resource>
|
||||
<filtering>true</filtering>
|
||||
<directory>${basedir}/src/main/webapp</directory>
|
||||
<includes>
|
||||
<include>WEB-INF/web.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>prepare-package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<index>true</index>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>discovery-xmlui-block</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-webapp</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-webapp
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery/dspace-discovery-xmlui-webapp</url>
|
||||
</scm>
|
||||
|
||||
</project>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to you under the Apache License, Version
|
||||
2.0 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0 Unless required by
|
||||
applicable law or agreed to in writing, software distributed under the
|
||||
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied. See the License for
|
||||
the specific language governing permissions and limitations under the
|
||||
License.
|
||||
-->
|
||||
<!-- $Id: pom.xml 4739 2010-02-04 16:53:55Z benbosman $ -->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>war</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-webapp</artifactId>
|
||||
<version>1.7.2</version>
|
||||
<name>DSpace Discovery :: Discovery XMLUI Webapp</name>
|
||||
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-discovery-xmlui-api</artifactId>
|
||||
<version>1.7.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- external -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.cocoon</groupId>
|
||||
<artifactId>cocoon-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>prepare</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>prepare</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<archiveClasses>false</archiveClasses>
|
||||
<attachClasses>true</attachClasses>
|
||||
<classesClassifier>classes</classesClassifier>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
|
||||
<warSourceExcludes>WEB-INF/lib/*.jar</warSourceExcludes>
|
||||
<webResources>
|
||||
<resource>
|
||||
<filtering>true</filtering>
|
||||
<directory>${basedir}/src/main/webapp</directory>
|
||||
<includes>
|
||||
<include>WEB-INF/web.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>prepare-package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<index>true</index>
|
||||
<manifestEntries>
|
||||
<Cocoon-Block-Name>discovery-xmlui-block</Cocoon-Block-Name>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
</project>
|
||||
|
@@ -1,67 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>pom</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<name>DSpace Discovery :: Modules</name>
|
||||
|
||||
<parent>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<groupId>org.dspace</groupId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
<module>dspace-discovery-provider</module>
|
||||
<module>dspace-discovery-xmlui-api</module>
|
||||
<module>dspace-discovery-xmlui-webapp</module>
|
||||
</modules>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-discovery</url>
|
||||
</scm>
|
||||
|
||||
<issueManagement>
|
||||
<system>JIRA</system>
|
||||
<url>http://jira.dspace.org/jira/browse/DISCOVERY</url>
|
||||
</issueManagement>
|
||||
|
||||
</project>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<packaging>pom</packaging>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>discovery-modules</artifactId>
|
||||
<version>1.7.2</version>
|
||||
<name>DSpace Discovery :: Modules</name>
|
||||
|
||||
<parent>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<groupId>org.dspace</groupId>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
<module>dspace-discovery-provider</module>
|
||||
<module>dspace-discovery-xmlui-api</module>
|
||||
<module>dspace-discovery-xmlui-webapp</module>
|
||||
</modules>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.mortbay.jetty</groupId>
|
||||
<artifactId>maven-jetty-plugin</artifactId>
|
||||
<version>6.1.7</version>
|
||||
<configuration>
|
||||
<connectors>
|
||||
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
|
||||
<port>8888</port>
|
||||
<maxIdleTime>30000</maxIdleTime>
|
||||
</connector>
|
||||
</connectors>
|
||||
<webAppSourceDirectory>${project.build.directory}/rcl/webapp</webAppSourceDirectory>
|
||||
<contextPath>/</contextPath>
|
||||
<systemProperties>
|
||||
<systemProperty>
|
||||
<name>org.apache.cocoon.mode</name>
|
||||
<value>dev</value>
|
||||
</systemProperty>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle
|
||||
and releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>
|
||||
scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<issueManagement>
|
||||
<system>JIRA</system>
|
||||
<url>http://jira.dspace.org/jira/browse/DISCOVERY</url>
|
||||
</issueManagement>
|
||||
|
||||
</project>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-jspui</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-api</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-api</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-api</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -98,7 +98,7 @@ public class BrowserServlet extends AbstractBrowserServlet
|
||||
throws ServletException, IOException, SQLException,
|
||||
AuthorizeException
|
||||
{
|
||||
JSPManager.showJSP(request, response, "/browse/error.jsp");
|
||||
JSPManager.showInternalError(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -19,6 +19,7 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.dspace.app.util.SubmissionInfo;
|
||||
@@ -219,7 +220,14 @@ public class SubmissionController extends DSpaceServlet
|
||||
if ((contentType != null)
|
||||
&& (contentType.indexOf("multipart/form-data") != -1))
|
||||
{
|
||||
request = wrapMultipartRequest(request);
|
||||
try
|
||||
{
|
||||
request = wrapMultipartRequest(request);
|
||||
} catch (FileSizeLimitExceededException e)
|
||||
{
|
||||
log.warn("Upload exceeded upload.max");
|
||||
JSPManager.showFileSizeLimitExceededError(request, response, e.getMessage(), e.getActualSize(), e.getPermittedSize());
|
||||
}
|
||||
|
||||
//also, upload any files and save their contents to Request (for later processing by UploadStep)
|
||||
uploadFiles(context, request);
|
||||
@@ -1350,7 +1358,7 @@ public class SubmissionController extends DSpaceServlet
|
||||
* if there are no more pages in this step
|
||||
*/
|
||||
private HttpServletRequest wrapMultipartRequest(HttpServletRequest request)
|
||||
throws ServletException
|
||||
throws ServletException, FileSizeLimitExceededException
|
||||
{
|
||||
HttpServletRequest wrappedRequest;
|
||||
|
||||
@@ -1370,6 +1378,10 @@ public class SubmissionController extends DSpaceServlet
|
||||
return request;
|
||||
}
|
||||
}
|
||||
catch (FileSizeLimitExceededException e)
|
||||
{
|
||||
throw new FileSizeLimitExceededException(e.getMessage(),e.getActualSize(),e.getPermittedSize());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ServletException(e);
|
||||
|
@@ -18,6 +18,7 @@ import java.util.List;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
@@ -457,88 +458,83 @@ public class CollectionWizardServlet extends DSpaceServlet
|
||||
HttpServletResponse response) throws SQLException,
|
||||
ServletException, IOException, AuthorizeException
|
||||
{
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
|
||||
Collection collection = Collection.find(context, UIUtil
|
||||
.getIntParameter(wrapper, "collection_id"));
|
||||
|
||||
if (collection == null)
|
||||
{
|
||||
log.warn(LogManager.getHeader(context, "integrity_error", UIUtil
|
||||
.getRequestLogInfo(wrapper)));
|
||||
JSPManager.showIntegrityError(request, response);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Get metadata
|
||||
collection.setMetadata("name", wrapper.getParameter("name"));
|
||||
collection.setMetadata("short_description", wrapper
|
||||
.getParameter("short_description"));
|
||||
collection.setMetadata("introductory_text", wrapper
|
||||
.getParameter("introductory_text"));
|
||||
collection.setMetadata("copyright_text", wrapper
|
||||
.getParameter("copyright_text"));
|
||||
collection.setMetadata("side_bar_text", wrapper
|
||||
.getParameter("side_bar_text"));
|
||||
collection.setMetadata("provenance_description", wrapper
|
||||
.getParameter("provenance_description"));
|
||||
|
||||
// Need to be more careful about license -- make sure it's null if
|
||||
// nothing was entered
|
||||
String license = wrapper.getParameter("license");
|
||||
|
||||
if (!StringUtils.isEmpty(license))
|
||||
{
|
||||
collection.setLicense(license);
|
||||
}
|
||||
|
||||
File temp = wrapper.getFile("file");
|
||||
|
||||
if (temp != null)
|
||||
{
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
Bitstream logoBS = collection.setLogo(is);
|
||||
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
while (noPath.indexOf('/') > -1)
|
||||
try {
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
Collection collection = Collection.find(context, UIUtil.getIntParameter(wrapper, "collection_id"));
|
||||
if (collection == null)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
log.warn(LogManager.getHeader(context, "integrity_error", UIUtil.getRequestLogInfo(wrapper)));
|
||||
JSPManager.showIntegrityError(request, response);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
// Get metadata
|
||||
collection.setMetadata("name", wrapper.getParameter("name"));
|
||||
collection.setMetadata("short_description", wrapper.getParameter("short_description"));
|
||||
collection.setMetadata("introductory_text", wrapper.getParameter("introductory_text"));
|
||||
collection.setMetadata("copyright_text", wrapper.getParameter("copyright_text"));
|
||||
collection.setMetadata("side_bar_text", wrapper.getParameter("side_bar_text"));
|
||||
collection.setMetadata("provenance_description", wrapper.getParameter("provenance_description"));
|
||||
// Need to be more careful about license -- make sure it's null if
|
||||
// nothing was entered
|
||||
String license = wrapper.getParameter("license");
|
||||
|
||||
if (!StringUtils.isEmpty(license))
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
collection.setLicense(license);
|
||||
}
|
||||
|
||||
logoBS.setName(noPath);
|
||||
logoBS.setSource(wrapper.getFilesystemName("file"));
|
||||
File temp = wrapper.getFile("file");
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, logoBS);
|
||||
logoBS.setFormat(bf);
|
||||
AuthorizeManager.addPolicy(context, logoBS, Constants.WRITE, context
|
||||
.getCurrentUser());
|
||||
logoBS.update();
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
if (temp != null)
|
||||
{
|
||||
log.trace("Unable to delete temporary file");
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
Bitstream logoBS = collection.setLogo(is);
|
||||
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
while (noPath.indexOf('/') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
}
|
||||
|
||||
logoBS.setName(noPath);
|
||||
logoBS.setSource(wrapper.getFilesystemName("file"));
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, logoBS);
|
||||
logoBS.setFormat(bf);
|
||||
AuthorizeManager.addPolicy(context, logoBS, Constants.WRITE, context.getCurrentUser());
|
||||
logoBS.update();
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
{
|
||||
log.trace("Unable to delete temporary file");
|
||||
}
|
||||
}
|
||||
|
||||
collection.update();
|
||||
|
||||
// Now work out what next page is
|
||||
showNextPage(context, request, response, collection, BASIC_INFO);
|
||||
|
||||
context.complete();
|
||||
} catch (FileSizeLimitExceededException ex)
|
||||
{
|
||||
log.warn("Upload exceeded upload.max");
|
||||
JSPManager.showFileSizeLimitExceededError(request, response, ex.getMessage(), ex.getActualSize(), ex.getPermittedSize());
|
||||
}
|
||||
|
||||
collection.update();
|
||||
|
||||
// Now work out what next page is
|
||||
showNextPage(context, request, response, collection, BASIC_INFO);
|
||||
|
||||
context.complete();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -17,6 +17,7 @@ import java.sql.SQLException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.dspace.app.util.AuthorizeUtil;
|
||||
@@ -893,92 +894,93 @@ public class EditCommunitiesServlet extends DSpaceServlet
|
||||
HttpServletResponse response) throws ServletException, IOException,
|
||||
SQLException, AuthorizeException
|
||||
{
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
try {
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
Community community = Community.find(context, UIUtil.getIntParameter(wrapper, "community_id"));
|
||||
Collection collection = Collection.find(context, UIUtil.getIntParameter(wrapper, "collection_id"));
|
||||
File temp = wrapper.getFile("file");
|
||||
|
||||
Community community = Community.find(context, UIUtil.getIntParameter(
|
||||
wrapper, "community_id"));
|
||||
Collection collection = Collection.find(context, UIUtil
|
||||
.getIntParameter(wrapper, "collection_id"));
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
Bitstream logoBS;
|
||||
|
||||
File temp = wrapper.getFile("file");
|
||||
if (collection == null)
|
||||
{
|
||||
logoBS = community.setLogo(is);
|
||||
}
|
||||
else
|
||||
{
|
||||
logoBS = collection.setLogo(is);
|
||||
}
|
||||
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
Bitstream logoBS;
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
if (collection == null)
|
||||
while (noPath.indexOf('/') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
}
|
||||
|
||||
logoBS.setName(noPath);
|
||||
logoBS.setSource(wrapper.getFilesystemName("file"));
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, logoBS);
|
||||
logoBS.setFormat(bf);
|
||||
AuthorizeManager.addPolicy(context, logoBS, Constants.WRITE, context.getCurrentUser());
|
||||
logoBS.update();
|
||||
|
||||
String jsp;
|
||||
DSpaceObject dso;
|
||||
if (collection == null)
|
||||
{
|
||||
community.update();
|
||||
|
||||
// Show community edit page
|
||||
request.setAttribute("community", community);
|
||||
storeAuthorizeAttributeCommunityEdit(context, request, community);
|
||||
dso = community;
|
||||
jsp = "/tools/edit-community.jsp";
|
||||
}
|
||||
else
|
||||
{
|
||||
collection.update();
|
||||
|
||||
// Show collection edit page
|
||||
request.setAttribute("collection", collection);
|
||||
request.setAttribute("community", community);
|
||||
storeAuthorizeAttributeCollectionEdit(context, request, collection);
|
||||
dso = collection;
|
||||
jsp = "/tools/edit-collection.jsp";
|
||||
}
|
||||
|
||||
if (AuthorizeManager.isAdmin(context, dso))
|
||||
{
|
||||
// set a variable to show all buttons
|
||||
request.setAttribute("admin_button", Boolean.TRUE);
|
||||
}
|
||||
|
||||
JSPManager.showJSP(request, response, jsp);
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
{
|
||||
log.error("Unable to delete temporary file");
|
||||
}
|
||||
|
||||
// Update DB
|
||||
context.complete();
|
||||
} catch (FileSizeLimitExceededException ex)
|
||||
{
|
||||
logoBS = community.setLogo(is);
|
||||
log.warn("Upload exceeded upload.max");
|
||||
JSPManager.showFileSizeLimitExceededError(request, response, ex.getMessage(), ex.getActualSize(), ex.getPermittedSize());
|
||||
}
|
||||
else
|
||||
{
|
||||
logoBS = collection.setLogo(is);
|
||||
}
|
||||
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
while (noPath.indexOf('/') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
}
|
||||
|
||||
logoBS.setName(noPath);
|
||||
logoBS.setSource(wrapper.getFilesystemName("file"));
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, logoBS);
|
||||
logoBS.setFormat(bf);
|
||||
AuthorizeManager.addPolicy(context, logoBS, Constants.WRITE, context
|
||||
.getCurrentUser());
|
||||
logoBS.update();
|
||||
|
||||
String jsp;
|
||||
DSpaceObject dso;
|
||||
if (collection == null)
|
||||
{
|
||||
community.update();
|
||||
|
||||
// Show community edit page
|
||||
request.setAttribute("community", community);
|
||||
storeAuthorizeAttributeCommunityEdit(context, request, community);
|
||||
dso = community;
|
||||
jsp = "/tools/edit-community.jsp";
|
||||
}
|
||||
else
|
||||
{
|
||||
collection.update();
|
||||
|
||||
// Show collection edit page
|
||||
request.setAttribute("collection", collection);
|
||||
request.setAttribute("community", community);
|
||||
storeAuthorizeAttributeCollectionEdit(context, request, collection);
|
||||
dso = collection;
|
||||
jsp = "/tools/edit-collection.jsp";
|
||||
}
|
||||
|
||||
if (AuthorizeManager.isAdmin(context, dso))
|
||||
{
|
||||
// set a variable to show all buttons
|
||||
request.setAttribute("admin_button", Boolean.TRUE);
|
||||
}
|
||||
|
||||
JSPManager.showJSP(request, response, jsp);
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
{
|
||||
log.error("Unable to delete temporary file");
|
||||
}
|
||||
|
||||
// Update DB
|
||||
context.complete();
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@ import java.util.StringTokenizer;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.dspace.app.util.AuthorizeUtil;
|
||||
@@ -766,77 +767,80 @@ public class EditItemServlet extends DSpaceServlet
|
||||
throws ServletException, IOException, SQLException,
|
||||
AuthorizeException
|
||||
{
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
Bitstream b = null;
|
||||
try {
|
||||
// Wrap multipart request to get the submission info
|
||||
FileUploadRequest wrapper = new FileUploadRequest(request);
|
||||
Bitstream b = null;
|
||||
Item item = Item.find(context, UIUtil.getIntParameter(wrapper, "item_id"));
|
||||
File temp = wrapper.getFile("file");
|
||||
|
||||
Item item = Item.find(context, UIUtil.getIntParameter(wrapper,
|
||||
"item_id"));
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
|
||||
File temp = wrapper.getFile("file");
|
||||
// now check to see if person can edit item
|
||||
checkEditAuthorization(context, item);
|
||||
|
||||
// Read the temp file as logo
|
||||
InputStream is = new BufferedInputStream(new FileInputStream(temp));
|
||||
// do we already have an ORIGINAL bundle?
|
||||
Bundle[] bundles = item.getBundles("ORIGINAL");
|
||||
|
||||
// now check to see if person can edit item
|
||||
checkEditAuthorization(context, item);
|
||||
|
||||
// do we already have an ORIGINAL bundle?
|
||||
Bundle[] bundles = item.getBundles("ORIGINAL");
|
||||
|
||||
if (bundles.length < 1)
|
||||
{
|
||||
// set bundle's name to ORIGINAL
|
||||
b = item.createSingleBitstream(is, "ORIGINAL");
|
||||
|
||||
// set the permission as defined in the owning collection
|
||||
Collection owningCollection = item.getOwningCollection();
|
||||
if (owningCollection != null)
|
||||
if (bundles.length < 1)
|
||||
{
|
||||
Bundle bnd = b.getBundles()[0];
|
||||
bnd.inheritCollectionDefaultPolicies(owningCollection);
|
||||
// set bundle's name to ORIGINAL
|
||||
b = item.createSingleBitstream(is, "ORIGINAL");
|
||||
|
||||
// set the permission as defined in the owning collection
|
||||
Collection owningCollection = item.getOwningCollection();
|
||||
if (owningCollection != null)
|
||||
{
|
||||
Bundle bnd = b.getBundles()[0];
|
||||
bnd.inheritCollectionDefaultPolicies(owningCollection);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// we have a bundle already, just add bitstream
|
||||
b = bundles[0].createBitstream(is);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
while (noPath.indexOf('/') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
}
|
||||
|
||||
b.setName(noPath);
|
||||
b.setSource(wrapper.getFilesystemName("file"));
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, b);
|
||||
b.setFormat(bf);
|
||||
b.update();
|
||||
|
||||
item.update();
|
||||
|
||||
// Back to edit form
|
||||
showEditForm(context, request, response, item);
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
{
|
||||
log.error("Unable to delete temporary file");
|
||||
}
|
||||
|
||||
// Update DB
|
||||
context.complete();
|
||||
} catch (FileSizeLimitExceededException ex)
|
||||
{
|
||||
// we have a bundle already, just add bitstream
|
||||
b = bundles[0].createBitstream(is);
|
||||
log.warn("Upload exceeded upload.max");
|
||||
JSPManager.showFileSizeLimitExceededError(request, response, ex.getMessage(), ex.getActualSize(), ex.getPermittedSize());
|
||||
}
|
||||
|
||||
// Strip all but the last filename. It would be nice
|
||||
// to know which OS the file came from.
|
||||
String noPath = wrapper.getFilesystemName("file");
|
||||
|
||||
while (noPath.indexOf('/') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('/') + 1);
|
||||
}
|
||||
|
||||
while (noPath.indexOf('\\') > -1)
|
||||
{
|
||||
noPath = noPath.substring(noPath.indexOf('\\') + 1);
|
||||
}
|
||||
|
||||
b.setName(noPath);
|
||||
b.setSource(wrapper.getFilesystemName("file"));
|
||||
|
||||
// Identify the format
|
||||
BitstreamFormat bf = FormatIdentifier.guessFormat(context, b);
|
||||
b.setFormat(bf);
|
||||
b.update();
|
||||
|
||||
item.update();
|
||||
|
||||
// Back to edit form
|
||||
showEditForm(context, request, response, item);
|
||||
|
||||
// Remove temp file
|
||||
if (!temp.delete())
|
||||
{
|
||||
log.error("Unable to delete temporary file");
|
||||
}
|
||||
|
||||
// Update DB
|
||||
context.complete();
|
||||
}
|
||||
}
|
||||
|
@@ -87,7 +87,7 @@ public class WithdrawnBrowserServlet extends AbstractBrowserServlet
|
||||
{
|
||||
request.setAttribute("useAdminLayout", "yes");
|
||||
|
||||
JSPManager.showJSP(request, response, "/browse/error.jsp");
|
||||
JSPManager.showInternalError(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -15,6 +15,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletRequestWrapper;
|
||||
|
||||
import org.apache.commons.fileupload.FileItem;
|
||||
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
|
||||
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
||||
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
||||
import org.dspace.core.ConfigurationManager;
|
||||
@@ -47,7 +48,7 @@ public class FileUploadRequest extends HttpServletRequestWrapper
|
||||
* @param req
|
||||
* the original request
|
||||
*/
|
||||
public FileUploadRequest(HttpServletRequest req) throws IOException
|
||||
public FileUploadRequest(HttpServletRequest req) throws IOException, FileSizeLimitExceededException
|
||||
{
|
||||
super(req);
|
||||
|
||||
@@ -90,6 +91,16 @@ public class FileUploadRequest extends HttpServletRequestWrapper
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if(e.getMessage().contains("exceeds the configured maximum"))
|
||||
{
|
||||
// ServletFileUpload is not throwing the correct error, so this is workaround
|
||||
// the request was rejected because its size (11302) exceeds the configured maximum (536)
|
||||
int startFirstParen = e.getMessage().indexOf("(")+1;
|
||||
int endFirstParen = e.getMessage().indexOf(")");
|
||||
String uploadedSize = e.getMessage().substring(startFirstParen, endFirstParen).trim();
|
||||
Long actualSize = Long.parseLong(uploadedSize);
|
||||
throw new FileSizeLimitExceededException(e.getMessage(), actualSize, maxSize);
|
||||
}
|
||||
throw new IOException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
@@ -183,4 +194,4 @@ public class FileUploadRequest extends HttpServletRequestWrapper
|
||||
}
|
||||
return filename;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -142,4 +142,26 @@ public class JSPManager
|
||||
|
||||
showJSP(request, response, "/error/invalid-id.jsp");
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a "file upload was too large" error message. Passing in information
|
||||
* about the size of the file uploaded, and the maximum file size limit so
|
||||
* the user knows why they encountered an error.
|
||||
* @param request
|
||||
* @param response
|
||||
* @param message
|
||||
* @param actualSize
|
||||
* @param permittedSize
|
||||
* @throws ServletException
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void showFileSizeLimitExceededError(HttpServletRequest request,
|
||||
HttpServletResponse response, String message, long actualSize, long permittedSize) throws ServletException, IOException
|
||||
{
|
||||
request.setAttribute("error.message", message);
|
||||
request.setAttribute("actualSize", actualSize);
|
||||
request.setAttribute("permittedSize", permittedSize);
|
||||
response.setStatus(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
|
||||
showJSP(request, response, "/error/exceeded-size.jsp");
|
||||
}
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-jspui</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-webapp</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-webapp</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui/dspace-jspui-webapp</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<build>
|
||||
|
@@ -0,0 +1,52 @@
|
||||
<%--
|
||||
|
||||
The contents of this file are subject to the license and copyright
|
||||
detailed in the LICENSE and NOTICE files at the root of the source
|
||||
tree and available online at
|
||||
|
||||
http://www.dspace.org/license/
|
||||
|
||||
--%>
|
||||
<%--
|
||||
- Error page for when the file uploaded exceeded the size limit
|
||||
--%>
|
||||
|
||||
<%@ page contentType="text/html;charset=UTF-8" %>
|
||||
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
|
||||
prefix="fmt" %>
|
||||
|
||||
<%@ page import="java.io.PrintWriter" %>
|
||||
|
||||
<%@ page isErrorPage="true" %>
|
||||
|
||||
<%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %>
|
||||
|
||||
<dspace:layout titlekey="jsp.error.exceeded-size.title">
|
||||
<h1><fmt:message key="jsp.error.exceeded-size.title"/></h1>
|
||||
<p>
|
||||
<fmt:message key="jsp.error.exceeded-size.text1">
|
||||
<fmt:param><%= request.getAttribute("actualSize") %></fmt:param>
|
||||
<fmt:param><%= request.getAttribute("permittedSize") %></fmt:param>
|
||||
</fmt:message>
|
||||
</p>
|
||||
|
||||
<dspace:include page="/components/contact-info.jsp" />
|
||||
|
||||
<p align="center">
|
||||
<a href="<%= request.getContextPath() %>/"><fmt:message key="jsp.general.gohome"/></a>
|
||||
</p>
|
||||
<!--
|
||||
<%
|
||||
String error = request.getAttribute("error.message").toString();
|
||||
if(error == null)
|
||||
{
|
||||
out.println("No stack trace available<br/>");
|
||||
}
|
||||
else
|
||||
{
|
||||
out.println(error);
|
||||
}
|
||||
%>
|
||||
-->
|
||||
</dspace:layout>
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-jspui</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<modules>
|
||||
|
@@ -12,13 +12,13 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-lni</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-client</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-client</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-client</url>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<profiles>
|
||||
|
@@ -10,13 +10,13 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-lni</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-core</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-core</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-core</url>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -12,13 +12,13 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-lni</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-webapp</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-webapp</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni/dspace-lni-webapp</url>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<build>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -21,9 +21,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-lni</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<modules>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-oai</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-api</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-api</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-api</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-oai</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-webapp</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-webapp</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai/dspace-oai-webapp</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<build>
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-oai</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<modules>
|
||||
|
@@ -1,135 +1,135 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<parent>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<groupId>org.dspace</groupId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-stats</artifactId>
|
||||
<name>DSpace Solr Statistics Logging Client Library</name>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<description>Library of Shared UsageEvent and EventConsumer Tools for Logging to Solr.</description>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle and
|
||||
releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-stats</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-stats</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-stats</url>
|
||||
</scm>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Ben Bosman</name>
|
||||
<email>ben at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Mark Diggory</name>
|
||||
<email>mdiggory at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>-5</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Lieven Droogmans</name>
|
||||
<email>lieven at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Art Lowel</name>
|
||||
<email>art at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Kevin Van de velde</name>
|
||||
<email>kevin at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<contributors />
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-services-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<version>1.4.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace.dependencies</groupId>
|
||||
<artifactId>dspace-geoip</artifactId>
|
||||
<version>1.2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace.dnsjava</groupId>
|
||||
<artifactId>dnsjava</artifactId>
|
||||
<version>2.0.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ostermiller</groupId>
|
||||
<artifactId>utils</artifactId>
|
||||
<version>1.07.00</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<reporting>
|
||||
<excludeDefaults>false</excludeDefaults>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<configuration>
|
||||
|
||||
<minmemory>128m</minmemory>
|
||||
<maxmemory>1g</maxmemory>
|
||||
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jxr-plugin</artifactId>
|
||||
<configuration>
|
||||
<aggregate>true</aggregate>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<parent>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<groupId>org.dspace</groupId>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-stats</artifactId>
|
||||
<name>DSpace Solr Statistics Logging Client Library</name>
|
||||
<version>1.7.2</version>
|
||||
<description>Library of Shared UsageEvent and EventConsumer Tools for Logging to Solr.</description>
|
||||
|
||||
<!--
|
||||
The Subversion repository location is used by Continuum to update
|
||||
against when changes have occured, this spawns a new build cycle and
|
||||
releases snapshots into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Ben Bosman</name>
|
||||
<email>ben at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Mark Diggory</name>
|
||||
<email>mdiggory at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>-5</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Lieven Droogmans</name>
|
||||
<email>lieven at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Art Lowel</name>
|
||||
<email>art at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
<developer>
|
||||
<name>Kevin Van de velde</name>
|
||||
<email>kevin at atmire.com</email>
|
||||
<url>http://www.atmire.com</url>
|
||||
<organization>@MIRE</organization>
|
||||
<organizationUrl>http://www.atmire.com</organizationUrl>
|
||||
<timezone>+1</timezone>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<contributors />
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-services-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.solr</groupId>
|
||||
<artifactId>solr-solrj</artifactId>
|
||||
<version>1.4.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace.dependencies</groupId>
|
||||
<artifactId>dspace-geoip</artifactId>
|
||||
<version>1.2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.ant</groupId>
|
||||
<artifactId>ant</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dspace.dnsjava</groupId>
|
||||
<artifactId>dnsjava</artifactId>
|
||||
<version>2.0.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ostermiller</groupId>
|
||||
<artifactId>utils</artifactId>
|
||||
<version>1.07.00</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<reporting>
|
||||
<excludeDefaults>false</excludeDefaults>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<configuration>
|
||||
|
||||
<minmemory>128m</minmemory>
|
||||
<maxmemory>1g</maxmemory>
|
||||
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jxr-plugin</artifactId>
|
||||
<configuration>
|
||||
<aggregate>true</aggregate>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
</project>
|
@@ -16,7 +16,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-sword</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-api</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-api
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-api</url>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
@@ -45,8 +45,19 @@
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-services-impl</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-api-lang</artifactId>
|
||||
|
@@ -101,9 +101,9 @@ public class CollectionLocation
|
||||
* If the configuration sword.deposit.url is set, this will be returned,
|
||||
* but if not, it will construct the url as follows:
|
||||
*
|
||||
* [dspace.url]/dspace-sword/deposit
|
||||
* [dspace.baseUrl]/sword/deposit
|
||||
*
|
||||
* where dspace.url is also in the configuration file.
|
||||
* where dspace.baseUrl is also in the configuration file.
|
||||
*
|
||||
* @return the base URL for sword deposit
|
||||
* @throws DSpaceSWORDException
|
||||
@@ -114,10 +114,10 @@ public class CollectionLocation
|
||||
String depositUrl = ConfigurationManager.getProperty("sword.deposit.url");
|
||||
if (depositUrl == null || "".equals(depositUrl))
|
||||
{
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.url");
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.baseUrl");
|
||||
if (dspaceUrl == null || "".equals(dspaceUrl))
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to missing/invalid config in sword.deposit.url and/or dspace.url");
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to missing/invalid config in sword.deposit.url and/or dspace.baseUrl");
|
||||
}
|
||||
|
||||
try
|
||||
@@ -127,7 +127,7 @@ public class CollectionLocation
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to invalid dspace.url " + e.getMessage(),e);
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to invalid dspace.baseUrl " + e.getMessage(),e);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -314,11 +314,11 @@ public class SWORDUrlManager
|
||||
String depositUrl = ConfigurationManager.getProperty("sword.servicedocument.url");
|
||||
if (depositUrl == null || "".equals(depositUrl))
|
||||
{
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.url");
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.baseUrl");
|
||||
if (dspaceUrl == null || "".equals(dspaceUrl))
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct service document urls, due to missing/invalid " +
|
||||
"config in sword.servicedocument.url and/or dspace.url");
|
||||
"config in sword.servicedocument.url and/or dspace.baseUrl");
|
||||
}
|
||||
|
||||
try
|
||||
@@ -328,7 +328,7 @@ public class SWORDUrlManager
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct service document urls, due to invalid dspace.url " +
|
||||
throw new DSpaceSWORDException("Unable to construct service document urls, due to invalid dspace.baseUrl " +
|
||||
e.getMessage(),e);
|
||||
}
|
||||
|
||||
@@ -346,9 +346,9 @@ public class SWORDUrlManager
|
||||
* If the configuration sword.deposit.url is set, this will be returned,
|
||||
* but if not, it will construct the url as follows:
|
||||
*
|
||||
* [dspace.url]/dspace-sword/deposit
|
||||
* [dspace.baseUrl]/sword/deposit
|
||||
*
|
||||
* where dspace.url is also in the configuration file.
|
||||
* where dspace.baseUrl is also in the configuration file.
|
||||
*
|
||||
* @return the base URL for sword deposit
|
||||
* @throws DSpaceSWORDException
|
||||
@@ -359,11 +359,11 @@ public class SWORDUrlManager
|
||||
String depositUrl = ConfigurationManager.getProperty("sword.deposit.url");
|
||||
if (depositUrl == null || "".equals(depositUrl))
|
||||
{
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.url");
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.baseUrl");
|
||||
if (dspaceUrl == null || "".equals(dspaceUrl))
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to missing/invalid config in " +
|
||||
"sword.deposit.url and/or dspace.url");
|
||||
"sword.deposit.url and/or dspace.baseUrl");
|
||||
}
|
||||
|
||||
try
|
||||
@@ -373,7 +373,7 @@ public class SWORDUrlManager
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to invalid dspace.url " +
|
||||
throw new DSpaceSWORDException("Unable to construct deposit urls, due to invalid dspace.baseUrl " +
|
||||
e.getMessage(),e);
|
||||
}
|
||||
|
||||
@@ -475,11 +475,11 @@ public class SWORDUrlManager
|
||||
String mlUrl = ConfigurationManager.getProperty("sword.media-link.url");
|
||||
if (mlUrl == null || "".equals(mlUrl))
|
||||
{
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.url");
|
||||
String dspaceUrl = ConfigurationManager.getProperty("dspace.baseUrl");
|
||||
if (dspaceUrl == null || "".equals(dspaceUrl))
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct media-link urls, due to missing/invalid config in " +
|
||||
"sword.media-link.url and/or dspace.url");
|
||||
"sword.media-link.url and/or dspace.baseUrl");
|
||||
}
|
||||
|
||||
try
|
||||
@@ -489,7 +489,7 @@ public class SWORDUrlManager
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
throw new DSpaceSWORDException("Unable to construct media-link urls, due to invalid dspace.url " +
|
||||
throw new DSpaceSWORDException("Unable to construct media-link urls, due to invalid dspace.baseUrl " +
|
||||
e.getMessage(),e);
|
||||
}
|
||||
|
||||
|
@@ -14,7 +14,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-sword</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -23,9 +23,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-webapp</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-webapp</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword/dspace-sword-webapp</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<build>
|
||||
@@ -113,7 +113,7 @@
|
||||
<dependency>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-sword-api</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@@ -81,6 +81,11 @@
|
||||
<!--
|
||||
Listener to initialise DSpace configuration and clean up the application
|
||||
-->
|
||||
<listener>
|
||||
<listener-class>
|
||||
org.dspace.servicemanager.servlet.DSpaceKernelServletContextListener
|
||||
</listener-class>
|
||||
</listener>
|
||||
<listener>
|
||||
<listener-class>
|
||||
org.dspace.app.util.DSpaceContextListener
|
||||
|
@@ -16,7 +16,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<repositories>
|
||||
@@ -42,9 +42,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-sword</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
|
||||
|
@@ -13,14 +13,14 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-api</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-api
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-api/</url>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -169,12 +169,18 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr
|
||||
|
||||
public void setup(SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws ProcessingException, SAXException, IOException {
|
||||
super.setup(resolver, objectModel, src, parameters);
|
||||
try{
|
||||
availableExports = ItemExport.getExportsAvailable(context.getCurrentUser());
|
||||
}
|
||||
catch (Exception e) {
|
||||
// nothing to do
|
||||
}
|
||||
availableExports = null;
|
||||
if (context.getCurrentUser() != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
availableExports = ItemExport.getExportsAvailable(context.getCurrentUser());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ProcessingException("Error getting available exports", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -258,7 +264,7 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr
|
||||
}
|
||||
}
|
||||
|
||||
if (isSystemAdmin && "community-list".equals(this.sitemapURI))
|
||||
if (isSystemAdmin && ("community-list".equals(this.sitemapURI) || "".equals(this.sitemapURI)))
|
||||
{
|
||||
// Only System administrators can create top-level communities
|
||||
context.setHead(T_context_head);
|
||||
@@ -341,7 +347,7 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr
|
||||
}
|
||||
}
|
||||
|
||||
if ("community-list".equals(this.sitemapURI) && AuthorizeManager.isAdmin(this.context))
|
||||
if (("community-list".equals(this.sitemapURI) || "".equals(this.sitemapURI)) && AuthorizeManager.isAdmin(this.context))
|
||||
{
|
||||
context.addItemXref(contextPath+"/admin/community?createNew", T_context_create_community);
|
||||
options++;
|
||||
|
@@ -31,16 +31,16 @@ import org.dspace.core.Constants;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
*
|
||||
* Show a form that allows the user to upload a new bitstream. The
|
||||
* user can select the new bitstream's bundle (which is unchangable
|
||||
*
|
||||
* Show a form that allows the user to upload a new bitstream. The
|
||||
* user can select the new bitstream's bundle (which is unchangable
|
||||
* after upload) and a description for the file.
|
||||
*
|
||||
*
|
||||
* @author Scott Phillips
|
||||
*/
|
||||
public class AddBitstreamForm extends AbstractDSpaceTransformer
|
||||
{
|
||||
|
||||
|
||||
/** Language strings */
|
||||
private static final Message T_dspace_home = message("xmlui.general.dspace_home");
|
||||
private static final Message T_submit_cancel = message("xmlui.general.cancel");
|
||||
@@ -58,130 +58,129 @@ public class AddBitstreamForm extends AbstractDSpaceTransformer
|
||||
|
||||
private static final Message T_no_bundles = message("xmlui.administrative.item.AddBitstreamForm.no_bundles");
|
||||
|
||||
|
||||
|
||||
private static final String DEFAULT_BUNDLE_LIST = "ORIGINAL, METADATA, THUMBNAIL, LICENSE, CC_LICENSE";
|
||||
|
||||
|
||||
public void addPageMeta(PageMeta pageMeta) throws WingException
|
||||
{
|
||||
pageMeta.addMetadata("title").addContent(T_title);
|
||||
pageMeta.addMetadata("title").addContent(T_title);
|
||||
|
||||
pageMeta.addTrailLink(contextPath + "/", T_dspace_home);
|
||||
pageMeta.addTrailLink(contextPath + "/admin/item",T_item_trail);
|
||||
pageMeta.addTrail().addContent(T_trail);
|
||||
}
|
||||
|
||||
public void addBody(Body body) throws SAXException, WingException,
|
||||
UIException, SQLException, IOException, AuthorizeException
|
||||
{
|
||||
int itemID = parameters.getParameterAsInteger("itemID",-1);
|
||||
org.dspace.content.Item item = org.dspace.content.Item.find(context,itemID);
|
||||
|
||||
// DIVISION: main div
|
||||
Division div = body.addInteractiveDivision("add-bitstream", contextPath+"/admin/item", Division.METHOD_MULTIPART, "primary administrative item");
|
||||
|
||||
// LIST: upload form
|
||||
List upload = div.addList("submit-upload-new", List.TYPE_FORM);
|
||||
upload.setHead(T_head1);
|
||||
|
||||
int bundleCount = 0; // record how many bundles we are able to upload too.
|
||||
Select select = upload.addItem().addSelect("bundle");
|
||||
select.setLabel(T_bundle_label);
|
||||
|
||||
// Get the list of bundles to allow the user to upload too. Either use the default
|
||||
// or one supplied from the dspace.cfg.
|
||||
String bundleString = ConfigurationManager.getProperty("xmlui.bundle.upload");
|
||||
if (bundleString == null || bundleString.length() == 0)
|
||||
{
|
||||
bundleString = DEFAULT_BUNDLE_LIST;
|
||||
pageMeta.addTrailLink(contextPath + "/", T_dspace_home);
|
||||
pageMeta.addTrailLink(contextPath + "/admin/item", T_item_trail);
|
||||
pageMeta.addTrail().addContent(T_trail);
|
||||
}
|
||||
String[] parts = bundleString.split(",");
|
||||
for (String part : parts)
|
||||
{
|
||||
if (addBundleOption(item,select,part.trim()))
|
||||
{
|
||||
bundleCount++;
|
||||
}
|
||||
}
|
||||
select.setOptionSelected("ORIGINAL");
|
||||
|
||||
if (bundleCount == 0)
|
||||
{
|
||||
select.setDisabled();
|
||||
}
|
||||
|
||||
|
||||
File file = upload.addItem().addFile("file");
|
||||
file.setLabel(T_file_label);
|
||||
file.setHelp(T_file_help);
|
||||
file.setRequired();
|
||||
|
||||
if (bundleCount == 0)
|
||||
{
|
||||
file.setDisabled();
|
||||
}
|
||||
|
||||
Text description = upload.addItem().addText("description");
|
||||
description.setLabel(T_description_label);
|
||||
description.setHelp(T_description_help);
|
||||
|
||||
if (bundleCount == 0)
|
||||
{
|
||||
description.setDisabled();
|
||||
}
|
||||
|
||||
if (bundleCount == 0)
|
||||
{
|
||||
upload.addItem().addContent(T_no_bundles);
|
||||
}
|
||||
|
||||
// ITEM: actions
|
||||
Item actions = upload.addItem();
|
||||
Button button = actions.addButton("submit_upload");
|
||||
button.setValue(T_submit_upload);
|
||||
if (bundleCount == 0)
|
||||
{
|
||||
button.setDisabled();
|
||||
}
|
||||
|
||||
actions.addButton("submit_cancel").setValue(T_submit_cancel);
|
||||
|
||||
div.addHidden("administrative-continue").setValue(knot.getId());
|
||||
}
|
||||
|
||||
public boolean addBundleOption(org.dspace.content.Item item, Select select, String bundleName) throws SQLException, WingException
|
||||
public void addBody(Body body) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException
|
||||
{
|
||||
|
||||
// For some crazzy reason multiple bundles can share the same name
|
||||
Bundle[] bundles = item.getBundles(bundleName);
|
||||
if (bundles == null || bundles.length == 0)
|
||||
{
|
||||
// If the bundle does not exist then you have to be supper admin to be able
|
||||
// to upload to this bundle because at upload time the bundle will be created but
|
||||
// there is no way anyone but super admin could have access to add to the bundle.
|
||||
if ( ! AuthorizeManager.isAdmin(context))
|
||||
int itemID = parameters.getParameterAsInteger("itemID", -1);
|
||||
org.dspace.content.Item item = org.dspace.content.Item.find(context, itemID);
|
||||
|
||||
// DIVISION: main div
|
||||
Division div = body.addInteractiveDivision("add-bitstream", contextPath + "/admin/item", Division.METHOD_MULTIPART, "primary administrative item");
|
||||
|
||||
// LIST: upload form
|
||||
List upload = div.addList("submit-upload-new", List.TYPE_FORM);
|
||||
upload.setHead(T_head1);
|
||||
|
||||
int bundleCount = 0; // record how many bundles we are able to upload too.
|
||||
Select select = upload.addItem().addSelect("bundle");
|
||||
select.setLabel(T_bundle_label);
|
||||
|
||||
// Get the list of bundles to allow the user to upload too. Either use the default
|
||||
// or one supplied from the dspace.cfg.
|
||||
String bundleString = ConfigurationManager.getProperty("xmlui.bundle.upload");
|
||||
if (bundleString == null || bundleString.length() == 0)
|
||||
{
|
||||
return false; // you can't upload to this bundle.
|
||||
bundleString = DEFAULT_BUNDLE_LIST;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// At least one bundle exists, does the user have privleges to upload to it?
|
||||
Bundle bundle = bundles[0];
|
||||
if ( ! AuthorizeManager.authorizeActionBoolean(context, bundle, Constants.ADD))
|
||||
String[] parts = bundleString.split(",");
|
||||
for (String part : parts)
|
||||
{
|
||||
return false; // you can't upload to this bundle.
|
||||
if (addBundleOption(item, select, part.trim()))
|
||||
{
|
||||
bundleCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// You also need the write privlege on the bundle.
|
||||
if ( ! AuthorizeManager.authorizeActionBoolean(context, bundle, Constants.WRITE))
|
||||
select.setOptionSelected("ORIGINAL");
|
||||
|
||||
if (bundleCount == 0) {
|
||||
select.setDisabled();
|
||||
}
|
||||
|
||||
|
||||
File file = upload.addItem().addFile("file");
|
||||
file.setLabel(T_file_label);
|
||||
file.setHelp(T_file_help);
|
||||
file.setRequired();
|
||||
|
||||
if (bundleCount == 0) {
|
||||
file.setDisabled();
|
||||
}
|
||||
|
||||
Text description = upload.addItem().addText("description");
|
||||
description.setLabel(T_description_label);
|
||||
description.setHelp(T_description_help);
|
||||
|
||||
if (bundleCount == 0) {
|
||||
description.setDisabled();
|
||||
}
|
||||
|
||||
if (bundleCount == 0) {
|
||||
upload.addItem().addContent(T_no_bundles);
|
||||
}
|
||||
|
||||
// ITEM: actions
|
||||
Item actions = upload.addItem();
|
||||
Button button = actions.addButton("submit_upload");
|
||||
button.setValue(T_submit_upload);
|
||||
if (bundleCount == 0) {
|
||||
button.setDisabled();
|
||||
}
|
||||
|
||||
actions.addButton("submit_cancel").setValue(T_submit_cancel);
|
||||
|
||||
div.addHidden("administrative-continue").setValue(knot.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the bundleName to the list of bundles available to submit to.
|
||||
* Performs an authorization check that the current user has privileges
|
||||
* @param item DSO item being evaluated
|
||||
* @param select DRI wing select box that is being added to
|
||||
* @param bundleName
|
||||
* @return boolean indicating whether user can upload to bundle
|
||||
* @throws SQLException
|
||||
* @throws WingException
|
||||
*/
|
||||
public boolean addBundleOption(org.dspace.content.Item item, Select select, String bundleName) throws SQLException, WingException
|
||||
{
|
||||
Bundle[] bundles = item.getBundles(bundleName);
|
||||
if (bundles == null || bundles.length == 0)
|
||||
{
|
||||
return false; // you can't upload
|
||||
// No bundle, so the user has to be authorized to add to item.
|
||||
if(!AuthorizeManager.authorizeActionBoolean(context, item, Constants.ADD))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
{
|
||||
// At least one bundle exists, does the user have privleges to upload to it?
|
||||
Bundle bundle = bundles[0];
|
||||
if (!AuthorizeManager.authorizeActionBoolean(context, bundle, Constants.ADD))
|
||||
{
|
||||
return false; // you can't upload to this bundle.
|
||||
}
|
||||
|
||||
// You also need the write privlege on the bundle.
|
||||
if (!AuthorizeManager.authorizeActionBoolean(context, bundle, Constants.WRITE))
|
||||
{
|
||||
return false; // you can't upload
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// It's okay to upload.
|
||||
select.addOption(bundleName, message("xmlui.administrative.item.AddBitstreamForm.bundle."+bundleName));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// It's okay to upload.
|
||||
select.addOption(bundleName, message("xmlui.administrative.item.AddBitstreamForm.bundle." + bundleName));
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -222,6 +222,7 @@ public class CollectionRecentSubmissions extends AbstractDSpaceTransformer imple
|
||||
{
|
||||
// Clear out our item's cache.
|
||||
this.recentSubmissionItems = null;
|
||||
this.validity = null;
|
||||
super.recycle();
|
||||
}
|
||||
}
|
||||
|
@@ -204,6 +204,7 @@ public class CommunityRecentSubmissions extends AbstractDSpaceTransformer implem
|
||||
@Override
|
||||
public void recycle() {
|
||||
this.recentSubmittedItems = null;
|
||||
this.validity = null;
|
||||
super.recycle();
|
||||
}
|
||||
}
|
||||
|
@@ -10,14 +10,13 @@ package org.dspace.app.xmlui.aspect.artifactbrowser;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.cocoon.ResourceNotFoundException;
|
||||
import org.apache.cocoon.caching.CacheableProcessingComponent;
|
||||
import org.apache.cocoon.environment.ObjectModelHelper;
|
||||
import org.apache.cocoon.environment.Request;
|
||||
import org.apache.cocoon.environment.http.HttpEnvironment;
|
||||
import org.apache.cocoon.util.HashUtil;
|
||||
import org.apache.excalibur.source.SourceValidity;
|
||||
import org.apache.log4j.Logger;
|
||||
@@ -58,6 +57,8 @@ import org.dspace.core.Context;
|
||||
import org.dspace.core.LogManager;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* Implements all the browse functionality (browse by title, subject, authors,
|
||||
* etc.) The types of browse available are configurable by the implementor. See
|
||||
@@ -244,7 +245,16 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements
|
||||
public void addBody(Body body) throws SAXException, WingException, UIException, SQLException,
|
||||
IOException, AuthorizeException
|
||||
{
|
||||
BrowseParams params = getUserParams();
|
||||
BrowseParams params = null;
|
||||
|
||||
try {
|
||||
params = getUserParams();
|
||||
} catch (ResourceNotFoundException e) {
|
||||
HttpServletResponse response = (HttpServletResponse)objectModel
|
||||
.get(HttpEnvironment.HTTP_RESPONSE_OBJECT);
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
}
|
||||
|
||||
BrowseInfo info = getBrowseInfo();
|
||||
|
||||
String type = info.getBrowseIndex().getName();
|
||||
@@ -605,8 +615,8 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements
|
||||
* @throws SQLException
|
||||
* @throws UIException
|
||||
*/
|
||||
private BrowseParams getUserParams() throws SQLException, UIException
|
||||
{
|
||||
private BrowseParams getUserParams() throws SQLException, UIException, ResourceNotFoundException, IllegalArgumentException {
|
||||
|
||||
if (this.userParams != null)
|
||||
{
|
||||
return this.userParams;
|
||||
@@ -638,11 +648,21 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements
|
||||
{
|
||||
String type = request.getParameter(BrowseParams.TYPE);
|
||||
int sortBy = RequestUtils.getIntParameter(request, BrowseParams.SORT_BY);
|
||||
|
||||
|
||||
if(!request.getParameters().containsKey("type"))
|
||||
{
|
||||
// default to first browse index.
|
||||
String defaultBrowseIndex = ConfigurationManager.getProperty("webui.browse.index.1");
|
||||
if(defaultBrowseIndex != null)
|
||||
{
|
||||
type = defaultBrowseIndex.split(":")[0];
|
||||
}
|
||||
}
|
||||
|
||||
BrowseIndex bi = BrowseIndex.getBrowseIndex(type);
|
||||
if (bi == null)
|
||||
{
|
||||
throw new BrowseException("There is no browse index of the type: " + type);
|
||||
throw new ResourceNotFoundException("Browse index " + type + " not found");
|
||||
}
|
||||
|
||||
// If we don't have a sort column
|
||||
@@ -650,7 +670,7 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements
|
||||
{
|
||||
// Get the default one
|
||||
SortOption so = bi.getSortOption();
|
||||
if (so != null)
|
||||
if (so != null)
|
||||
{
|
||||
sortBy = so.getNumber();
|
||||
}
|
||||
@@ -769,7 +789,12 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements
|
||||
|
||||
// Get the parameters we will use for the browse
|
||||
// (this includes a browse scope)
|
||||
BrowseParams params = getUserParams();
|
||||
BrowseParams params = null;
|
||||
try {
|
||||
params = getUserParams();
|
||||
} catch (ResourceNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@@ -215,7 +215,8 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
for (WorkflowItem owned : ownedItems)
|
||||
{
|
||||
int workflowItemID = owned.getID();
|
||||
String url = contextPath+"/handle/"+owned.getCollection().getHandle()+"/workflow?workflowID="+workflowItemID;
|
||||
String collectionUrl = contextPath + "/handle/" + owned.getCollection().getHandle();
|
||||
String ownedWorkflowItemUrl = contextPath + "/handle/" + owned.getCollection().getHandle() + "/workflow?workflowID=" + workflowItemID;
|
||||
DCValue[] titles = owned.getItem().getDC("title", null, Item.ANY);
|
||||
String collectionName = owned.getCollection().getMetadata("name");
|
||||
EPerson submitter = owned.getSubmitter();
|
||||
@@ -231,7 +232,7 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
remove.addOption(workflowItemID);
|
||||
|
||||
// The task description
|
||||
row.addCell().addXref(url,state);
|
||||
row.addCell().addXref(ownedWorkflowItemUrl, state);
|
||||
|
||||
// The item description
|
||||
if (titles != null && titles.length > 0)
|
||||
@@ -241,15 +242,15 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
{
|
||||
displayTitle = displayTitle.substring(0, 50) + " ...";
|
||||
}
|
||||
row.addCell().addXref(url,displayTitle);
|
||||
row.addCell().addXref(ownedWorkflowItemUrl, displayTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
row.addCell().addXref(url, T_untitled);
|
||||
row.addCell().addXref(ownedWorkflowItemUrl, T_untitled);
|
||||
}
|
||||
|
||||
// Submitted too
|
||||
row.addCell().addXref(url,collectionName);
|
||||
row.addCell().addXref(collectionUrl, collectionName);
|
||||
|
||||
// Submitted by
|
||||
Cell cell = row.addCell();
|
||||
@@ -287,7 +288,8 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
for (WorkflowItem pooled : pooledItems)
|
||||
{
|
||||
int workflowItemID = pooled.getID();
|
||||
String url = contextPath+"/handle/"+pooled.getCollection().getHandle()+"/workflow?workflowID="+workflowItemID;
|
||||
String collectionUrl = contextPath + "/handle/" + pooled.getCollection().getHandle();
|
||||
String pooledItemUrl = contextPath + "/handle/" + pooled.getCollection().getHandle() + "/workflow?workflowID=" + workflowItemID;
|
||||
DCValue[] titles = pooled.getItem().getDC("title", null, Item.ANY);
|
||||
String collectionName = pooled.getCollection().getMetadata("name");
|
||||
EPerson submitter = pooled.getSubmitter();
|
||||
@@ -304,7 +306,7 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
remove.addOption(workflowItemID);
|
||||
|
||||
// The task description
|
||||
row.addCell().addXref(url,state);
|
||||
row.addCell().addXref(pooledItemUrl, state);
|
||||
|
||||
// The item description
|
||||
if (titles != null && titles.length > 0)
|
||||
@@ -315,15 +317,15 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
displayTitle = displayTitle.substring(0, 50) + " ...";
|
||||
}
|
||||
|
||||
row.addCell().addXref(url,displayTitle);
|
||||
row.addCell().addXref(pooledItemUrl, displayTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
row.addCell().addXref(url, T_untitled);
|
||||
row.addCell().addXref(pooledItemUrl, T_untitled);
|
||||
}
|
||||
|
||||
// Submitted too
|
||||
row.addCell().addXref(url,collectionName);
|
||||
row.addCell().addXref(collectionUrl, collectionName);
|
||||
|
||||
// Submitted by
|
||||
Cell cell = row.addCell();
|
||||
@@ -418,7 +420,8 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
EPerson submitterEPerson = workspaceItem.getItem().getSubmitter();
|
||||
|
||||
int workspaceItemID = workspaceItem.getID();
|
||||
String url = contextPath+"/submit?workspaceID="+workspaceItemID;
|
||||
String collectionUrl = contextPath + "/handle/" + workspaceItem.getCollection().getHandle();
|
||||
String workspaceItemUrl = contextPath + "/submit?workspaceID=" + workspaceItemID;
|
||||
String submitterName = submitterEPerson.getFullName();
|
||||
String submitterEmail = submitterEPerson.getEmail();
|
||||
String collectionName = workspaceItem.getCollection().getMetadata("name");
|
||||
@@ -435,13 +438,13 @@ public class Submissions extends AbstractDSpaceTransformer
|
||||
{
|
||||
displayTitle = displayTitle.substring(0, 50) + " ...";
|
||||
}
|
||||
row.addCell().addXref(url,displayTitle);
|
||||
row.addCell().addXref(workspaceItemUrl, displayTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
row.addCell().addXref(url, T_untitled);
|
||||
row.addCell().addXref(workspaceItemUrl, T_untitled);
|
||||
}
|
||||
row.addCell().addXref(url,collectionName);
|
||||
row.addCell().addXref(collectionUrl, collectionName);
|
||||
Cell cell = row.addCell();
|
||||
cell.addContent(T_email);
|
||||
cell.addXref("mailto:"+submitterEmail,submitterName);
|
||||
|
@@ -13,14 +13,14 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-webapp</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-webapp
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-webapp</url>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<build>
|
||||
|
@@ -7,6 +7,10 @@
|
||||
*/
|
||||
/** Additions for Authority Control elements **/
|
||||
/* for scriptaculous autocomplete */
|
||||
div.autocomplete {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.autocomplete, ul.ui-menu {
|
||||
position:absolute;
|
||||
width:250px;
|
||||
@@ -36,10 +40,6 @@ ul.ui-menu li a {
|
||||
ul.ui-menu li a.ui-state-hover {
|
||||
background-color: #ffb;
|
||||
}
|
||||
#aspect_submission_StepTransformer_field_dc_title_container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* this magic gets the 16x16 icon to show up.. setting height/width didn't
|
||||
do it, but adding padding actually made it show up. */
|
||||
img.ds-authority-confidence
|
||||
|
@@ -61,10 +61,10 @@
|
||||
<xsl:text>]</xsl:text>
|
||||
</xsl:if>
|
||||
</div>
|
||||
<xsl:if test="$data/dim:field[@element = 'description' and @qualifier='abstract']">
|
||||
<xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/>
|
||||
<xsl:if test="$abstract and string-length($abstract[1]) > 0">
|
||||
<div class="artifact-info">
|
||||
<span class="short-description">
|
||||
<xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/>
|
||||
<xsl:value-of select="util:shortenString($abstract, 220, 10)"/>
|
||||
</span>
|
||||
</div>
|
||||
|
@@ -62,10 +62,10 @@
|
||||
<xsl:text>]</xsl:text>
|
||||
</xsl:if>
|
||||
</div>
|
||||
<xsl:if test="$data/dim:field[@element = 'description' and @qualifier='abstract']">
|
||||
<xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/>
|
||||
<xsl:if test="$abstract and string-length($abstract[1]) > 0">
|
||||
<div class="artifact-info">
|
||||
<span class="short-description">
|
||||
<xsl:variable name="abstract" select="$data/dim:field[@element = 'description' and @qualifier='abstract']/node()"/>
|
||||
<xsl:value-of select="util:shortenString($abstract, 220, 10)"/>
|
||||
</span>
|
||||
</div>
|
||||
|
@@ -308,7 +308,6 @@
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="dim:field" mode="itemDetailView-DIM">
|
||||
<xsl:if test="not(@element='description' and @qualifier='provenance')">
|
||||
<tr>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:text>ds-table-row </xsl:text>
|
||||
@@ -334,7 +333,6 @@
|
||||
</td>
|
||||
<td><xsl:value-of select="./@language"/></td>
|
||||
</tr>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!--dont render the item-view-toggle automatically in the summary view, only when it get's called-->
|
||||
|
@@ -214,31 +214,33 @@
|
||||
<xsl:param name="confidenceName" select="''"/>
|
||||
<xsl:param name="isClosed" select="'false'"/>
|
||||
<script type="text/javascript">
|
||||
<xsl:text>window.onload = function() {</xsl:text>
|
||||
<xsl:text>var gigo = DSpaceSetupAutocomplete('</xsl:text>
|
||||
<xsl:value-of select="$formID"/>
|
||||
<xsl:text>', { metadataField: '</xsl:text>
|
||||
<xsl:value-of select="$metadataField"/>
|
||||
<xsl:text>', isClosed: '</xsl:text>
|
||||
<xsl:value-of select="$isClosed"/>
|
||||
<xsl:text>', inputName: '</xsl:text>
|
||||
<xsl:value-of select="$inputName"/>
|
||||
<xsl:text>', authorityName: '</xsl:text>
|
||||
<xsl:value-of select="$authorityName"/>
|
||||
<xsl:text>', containerID: '</xsl:text>
|
||||
<xsl:value-of select="$containerID"/>
|
||||
<xsl:text>', indicatorID: '</xsl:text>
|
||||
<xsl:value-of select="$indicatorID"/>
|
||||
<xsl:text>', confidenceIndicatorID: '</xsl:text>
|
||||
<xsl:value-of select="$confidenceIndicatorID"/>
|
||||
<xsl:text>', confidenceName: '</xsl:text>
|
||||
<xsl:value-of select="$confidenceName"/>
|
||||
<xsl:text>', collection: </xsl:text>
|
||||
<xsl:value-of select="$collectionID"/>
|
||||
<xsl:text>, contextPath: '</xsl:text>
|
||||
<xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/>
|
||||
<xsl:text>'});</xsl:text>
|
||||
<xsl:text>};</xsl:text>
|
||||
<xsl:text>runAfterJSImports.add(function() {</xsl:text>
|
||||
<xsl:text>$(document).ready(function() {</xsl:text>
|
||||
<xsl:text>var gigo = DSpaceSetupAutocomplete('</xsl:text>
|
||||
<xsl:value-of select="$formID"/>
|
||||
<xsl:text>', { metadataField: '</xsl:text>
|
||||
<xsl:value-of select="$metadataField"/>
|
||||
<xsl:text>', isClosed: '</xsl:text>
|
||||
<xsl:value-of select="$isClosed"/>
|
||||
<xsl:text>', inputName: '</xsl:text>
|
||||
<xsl:value-of select="$inputName"/>
|
||||
<xsl:text>', authorityName: '</xsl:text>
|
||||
<xsl:value-of select="$authorityName"/>
|
||||
<xsl:text>', containerID: '</xsl:text>
|
||||
<xsl:value-of select="$containerID"/>
|
||||
<xsl:text>', indicatorID: '</xsl:text>
|
||||
<xsl:value-of select="$indicatorID"/>
|
||||
<xsl:text>', confidenceIndicatorID: '</xsl:text>
|
||||
<xsl:value-of select="$confidenceIndicatorID"/>
|
||||
<xsl:text>', confidenceName: '</xsl:text>
|
||||
<xsl:value-of select="$confidenceName"/>
|
||||
<xsl:text>', collection: </xsl:text>
|
||||
<xsl:value-of select="$collectionID"/>
|
||||
<xsl:text>, contextPath: '</xsl:text>
|
||||
<xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/>
|
||||
<xsl:text>'});</xsl:text>
|
||||
<xsl:text>});</xsl:text>
|
||||
<xsl:text>});</xsl:text>
|
||||
</script>
|
||||
</xsl:template>
|
||||
|
||||
|
@@ -240,6 +240,30 @@
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
function FnArray()
|
||||
{
|
||||
this.funcs = new Array;
|
||||
}
|
||||
|
||||
FnArray.prototype.add = function(f)
|
||||
{
|
||||
if( typeof f!= "function" )
|
||||
{
|
||||
f = new Function(f);
|
||||
}
|
||||
this.funcs[this.funcs.length] = f;
|
||||
};
|
||||
|
||||
FnArray.prototype.execute = function()
|
||||
{
|
||||
for( var i=0; i <xsl:text disable-output-escaping="yes"><</xsl:text> this.funcs.length; i++ )
|
||||
{
|
||||
this.funcs[i]();
|
||||
}
|
||||
};
|
||||
|
||||
var runAfterJSImports = new FnArray();
|
||||
</script>
|
||||
|
||||
<!-- Modernizr enables HTML5 elements & feature detects -->
|
||||
@@ -496,7 +520,10 @@
|
||||
-->
|
||||
|
||||
<xsl:template name="addJavascript">
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> </script>
|
||||
<script type="text/javascript">
|
||||
<xsl:text disable-output-escaping="yes">var JsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
|
||||
document.write(unescape("%3Cscript src='" + JsHost + "ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'%3E%3C/script%3E"));</xsl:text>
|
||||
</script>
|
||||
|
||||
<xsl:variable name="localJQuerySrc">
|
||||
<xsl:value-of select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='contextPath'][not(@qualifier)]"/>
|
||||
@@ -570,6 +597,10 @@
|
||||
<xsl:text disable-output-escaping="yes" ><![endif]--></xsl:text>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
runAfterJSImports.execute();
|
||||
</script>
|
||||
|
||||
<!-- Add a google analytics script if the key is present -->
|
||||
<xsl:if test="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='google'][@qualifier='analytics']">
|
||||
<script type="text/javascript"><xsl:text>
|
||||
|
@@ -125,8 +125,9 @@
|
||||
<map:parameter name="stylesheet.screen#1" value="lib/css/reset.css"/>
|
||||
<map:parameter name="stylesheet.screen#2" value="lib/css/base.css"/>
|
||||
<map:parameter name="stylesheet.screen#3" value="lib/css/helper.css"/>
|
||||
<map:parameter name="stylesheet.screen#4" value="lib/css/style.css"/>
|
||||
<map:parameter name="stylesheet.screen#5" value="lib/css/authority-control.css"/>
|
||||
<map:parameter name="stylesheet.screen#4" value="lib/css/jquery-ui-1.8.5.custom.css"/>
|
||||
<map:parameter name="stylesheet.screen#5" value="lib/css/style.css"/>
|
||||
<map:parameter name="stylesheet.screen#6" value="lib/css/authority-control.css"/>
|
||||
</map:transform>
|
||||
|
||||
<map:transform type="IncludePageMeta">
|
||||
|
@@ -369,7 +369,6 @@
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="dim:field" mode="itemDetailView-DIM">
|
||||
<xsl:if test="not(@element='description' and @qualifier='provenance')">
|
||||
<tr>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:text>ds-table-row </xsl:text>
|
||||
@@ -395,7 +394,6 @@
|
||||
</td>
|
||||
<td><xsl:value-of select="./@language"/></td>
|
||||
</tr>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Generate the bitstream information from the file section -->
|
||||
|
@@ -744,7 +744,6 @@
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="dim:field" mode="itemDetailView-DIM">
|
||||
<xsl:if test="not(@element='description' and @qualifier='provenance')">
|
||||
<tr>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:text>ds-table-row </xsl:text>
|
||||
@@ -770,7 +769,6 @@
|
||||
</td>
|
||||
<td><xsl:value-of select="./@language"/></td>
|
||||
</tr>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
|
||||
|
@@ -10,14 +10,14 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-xmlui</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-wing</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-wing
|
||||
<connection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2
|
||||
</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui/dspace-xmlui-wing</url>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>org.dspace</groupId>
|
||||
<artifactId>dspace-parent</artifactId>
|
||||
<version>1.7.1-SNAPSHOT</version>
|
||||
<version>1.7.2</version>
|
||||
</parent>
|
||||
|
||||
<!--
|
||||
@@ -21,9 +21,9 @@
|
||||
into the snapshot repository below.
|
||||
-->
|
||||
<scm>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/trunk/dspace-xmlui</url>
|
||||
<connection>scm:svn:http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</connection>
|
||||
<developerConnection>scm:svn:https://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</developerConnection>
|
||||
<url>http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2</url>
|
||||
</scm>
|
||||
|
||||
<modules>
|
||||
|
1467
dspace/CHANGES
1467
dspace/CHANGES
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,12 @@ KNOWN BUGS
|
||||
A definitive and up to date list of bugs affecting each version of
|
||||
DSpace software can be found in our JIRA issue tracker.
|
||||
|
||||
- Known Issues in DSpace 1.7.2:
|
||||
https://jira.duraspace.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+=+DS+AND+affectedVersion+=+"1.7.2"+AND+fixVersion+!=+"1.7.2"
|
||||
|
||||
- Known Issues in DSpace 1.7.1:
|
||||
https://jira.duraspace.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+=+DS+AND+affectedVersion+=+"1.7.1"+AND+fixVersion+!=+"1.7.1"
|
||||
|
||||
- Known Issues in DSpace 1.7.0:
|
||||
https://jira.duraspace.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+=+DS+AND+affectedVersion+=+"1.7.0"+AND+fixVersion+!=+"1.7.0"
|
||||
|
||||
@@ -33,4 +39,4 @@ DSpace software can be found in our JIRA issue tracker.
|
||||
https://jira.duraspace.org/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+=+DS+AND+affectedVersion+=+"1.5.0"+AND+fixVersion+!=+"1.5.0"
|
||||
|
||||
- For DSpace versions 1.0 through 1.4.2, a listing of all known issues can be found
|
||||
in the Source Code within the [dspace-source]/KNOWN_BUGS file.
|
||||
in the Source Code within the [dspace-source]/KNOWN_BUGS file.
|
||||
|
@@ -1,7 +1,7 @@
|
||||
DSpace source code license:
|
||||
|
||||
|
||||
Copyright (c) 2002-2010, DuraSpace. All rights reserved.
|
||||
Copyright (c) 2002-2011, DuraSpace. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
|
@@ -11,5 +11,5 @@ access and preservation of digital works. The Foundation was able to transfer
|
||||
the legal copyright from Hewlett-Packard Company (HP) and Massachusetts
|
||||
Institute of Technology (MIT) to the DSpace Foundation in October 2007. Many
|
||||
of the files in the source code may contain a copyright statement stating HP
|
||||
and MIT posses the copyright, in these instances please note that the copy
|
||||
right has transfered to the DSpace foundation, and subsequently to Duraspace.
|
||||
and MIT possess the copyright, in these instances please note that the copy
|
||||
right has transferred to the DSpace foundation, and subsequently to DuraSpace.
|
||||
|
@@ -5,9 +5,9 @@ or
|
||||
- docs/pdf/DSpace-Manual.pdf
|
||||
|
||||
DSpace version information can be found in this release package under
|
||||
- CHANGES
|
||||
or
|
||||
- docs/html/History.html
|
||||
or viewed online at
|
||||
- https://wiki.duraspace.org/display/DSDOC/History
|
||||
|
||||
Documentation for the most recent stable release(s) may be downloaded
|
||||
or viewed online at
|
||||
@@ -31,12 +31,12 @@ mailing list.
|
||||
|
||||
Detailed Issue Tracking for DSpace is done on our JIRA Issue Tracker
|
||||
|
||||
- http://jira.dspace.org/
|
||||
- https://jira.duraspace.org/browse/DS
|
||||
|
||||
|
||||
To contribute to DSpace, please see:
|
||||
|
||||
- https://wiki.duraspace.org/display/DSPACE/HowToContribute
|
||||
- https://wiki.duraspace.org/display/DSPACE/How+to+Contribute+to+DSpace
|
||||
|
||||
|
||||
For more details about DSpace, including a list of service providers,
|
||||
@@ -48,5 +48,5 @@ places to seek help, news articles and lists of other users, please see:
|
||||
DSpace source code licensing information available online at:
|
||||
- http://www.dspace.org/license/
|
||||
|
||||
Copyright (c) 2002-2010, DuraSpace. All rights reserved.
|
||||
Copyright (c) 2002-2011, DuraSpace. All rights reserved.
|
||||
|
||||
|
@@ -54,7 +54,14 @@ JARS=`echo $DSPACEDIR/lib/*.jar | sed 's/ /\:/g'`
|
||||
# Any existing classpath
|
||||
# The JARs (WEB-INF/lib/*.jar)
|
||||
# The WEB-INF/classes directory
|
||||
FULLPATH=$CLASSPATH:$JARS:$DSPACEDIR/config
|
||||
if [ "$CLASSPATH" = "" ]; then
|
||||
FULLPATH=$JARS:$DSPACEDIR/config
|
||||
else
|
||||
FULLPATH=$CLASSPATH:$JARS:$DSPACEDIR/config
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
#Allow user to specify java options through JAVA_OPTS variable
|
||||
if [ "$JAVA_OPTS" = "" ]; then
|
||||
|
@@ -16,17 +16,17 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="AIPBackupandRestore-AIPBackup%26RestoreforDSpace"></a>AIP Backup & Restore for DSpace</h1>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292438825675 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292438825675 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292438825675 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297951465473 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297951465473 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297951465473 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292438825675'>
|
||||
/*]]>*/</style><div class='rbtoc1297951465473'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#AIPBackupandRestore-Background%26Overview'>Background & Overview</a></li>
|
||||
<ul>
|
||||
@@ -368,7 +368,7 @@ div.rbtoc1292438825675 li {margin-left: 0px;padding-left: 0px;}
|
||||
</li>
|
||||
<li>By default, a new Parent object <b>must</b> be specified (using the <tt>-p</tt> parameter). This is the location where the new object will be created.
|
||||
<ul>
|
||||
<li>However, you can force it to use the parent object specified in the AIP by specifiying <tt>-o ignoreParent=false</tt> as one of your parameters</li>
|
||||
<li>However, you can force it to use the parent object specified in the AIP by specifying <tt>-o ignoreParent=false</tt> as one of your parameters</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>By default, will respect a Collection's Workflow process when you submit an Item to a Collection
|
||||
@@ -853,7 +853,7 @@ mets.dspaceAIP.ingest.crosswalk.CreativeCommonsText = NULLSTREAM
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -30,7 +30,7 @@
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -692,7 +692,7 @@ div.rbtoc1290017861052 li {margin-left: 0px;padding-left: 0px;}
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,7 +16,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="ApplicationLayer-SystemArchitecture%3AApplicationLayer"></a>System Architecture: Application Layer</h1>
|
||||
@@ -24,11 +24,11 @@
|
||||
<p>The following explains how the application layer is built and used.</p>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292448187896 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292448187896 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292448187896 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297951722587 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297951722587 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297951722587 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292448187896'>
|
||||
/*]]>*/</style><div class='rbtoc1297951722587'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#ApplicationLayer-WebUserInterface'>Web User Interface</a></li>
|
||||
<ul>
|
||||
@@ -198,7 +198,7 @@ The <em>org.dspace.app.webui.servlet.LoadDSpaceConfig</em> servlet is always loa
|
||||
<li><b><em>sidebar</em></b>: Can only be used inside a <em>layout</em> tag, and can only be used once per JSP. The content between the start and end <em>sidebar</em> tags is rendered in a column on the right-hand side of the HTML page. The contents can contain further JSP tags and Java 'scriptlets'.</li>
|
||||
<li><b><em>date</em></b>: Displays the date represented by an <em>org.dspace.content.DCDate</em> object. Just the one representation of date is rendered currently, but this could use the user's browser preferences to display a localized date in the future.</li>
|
||||
<li><b><em>include</em></b>: Obsolete, simple tag, similar to <em>jsp:include</em>. In versions prior to DSpace 1.2, this tag would use the locally modified version of a JSP if one was installed in jsp/local. As of 1.2, the build process now performs this function, however this tag is left in for backwards compatibility.</li>
|
||||
<li><b><em>item</em></b>: Displays an item record, including Dublin Core metadata and links to the bitstreams within it. Note that the displaying of the bitstream links is simplistic, and does not take into account any of the bundling structure. This is because DSpace does not have a fully-fledged dissemination architectural piece yet.Displaying an item record is done by a tag rather than a JSP for two reasons: Firstly, it happens in several places (when verifying an item record during submission or workflow review, as well as during standard item accesses), and secondly, displaying the item turns out to be mostly code-work rather than HTML anyway. Of course, the disadvantage of doing it this way is that it is slightly harder to customize exactly what is displayed from an item record; it is necessary to edit the tag code (<em>org.dspace.app.webui.jsptag.ItemTag</em>). Hopefully a better solution can be found in the future.</li>
|
||||
<li><b><em>item</em></b>: Displays an item record, including Dublin Core metadata and links to the bitstreams within it. Note that the displaying of the bitstream links is simplistic, and does not take into account any of the bundling structure. This is because DSpace does not have a fully-fledged dissemination architectural piece yet. Displaying an item record is done by a tag rather than a JSP for two reasons: Firstly, it happens in several places (when verifying an item record during submission or workflow review, as well as during standard item accesses), and secondly, displaying the item turns out to be mostly code-work rather than HTML anyway. Of course, the disadvantage of doing it this way is that it is slightly harder to customize exactly what is displayed from an item record; it is necessary to edit the tag code (<em>org.dspace.app.webui.jsptag.ItemTag</em>). Hopefully a better solution can be found in the future.</li>
|
||||
<li><b><em>itemlist</em></b><b>,</b> <b><em>collectionlist</em></b><b>,</b> <b><em>communitylist</em></b>: These tags display ordered sequences of items, collections and communities, showing minimal information but including a link to the page containing full details. These need to be used in HTML tables.</li>
|
||||
<li><b><em>popup</em></b>: This tag is used to render a link to a pop-up page (typically a help page.) If Javascript is available, the link will either open or pop to the front any existing DSpace pop-up window. If Javascript is not available, a standard HTML link is displayed that renders the link destination in a window named '<em>dspace.popup</em>'. In graphical browsers, this usually opens a new window or re-uses an existing window of that name, but if a window is re-used it is not 'raised' which might confuse the user. In text browsers, following this link will simply replace the current page with the destination of the link. This obviously means that Javascript offers the best functionality, but other browsers are still supported.</li>
|
||||
<li><b><em>selecteperson</em></b>: A tag which produces a widget analogous to HTML <em><SELECT></em>, that allows a user to select one or multiple e-people from a pop-up list.</li>
|
||||
@@ -244,7 +244,7 @@ The <em>org.dspace.app.webui.servlet.LoadDSpaceConfig</em> servlet is always loa
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">jsp.search.results.text = Results {0}-{1} of {2} </pre>
|
||||
</div></div>
|
||||
<p>Introducing number parameters that should be formatted according to the locale used makes no difference in the message key compared to atring parameters:</p>
|
||||
<p>Introducing number parameters that should be formatted according to the locale used makes no difference in the message key compared to string parameters:</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">jsp.submit.show-uploaded-file.size-in-bytes = {0} bytes</pre>
|
||||
</div></div>
|
||||
@@ -343,7 +343,7 @@ figure6.gif</pre>
|
||||
</div></div>
|
||||
<p>The HTML document servlet can work out which item the user is looking at, and then which Bitstream in it is called <em>figure1.gif</em>, and serve up that bitstream. Similar for following links to other HTML pages. Of course all the links and image references have to be relative and not absolute.</p>
|
||||
|
||||
<p>HTML documents must be "self-contained", as explained here. Provided that full path information is known by DSpace, any depth or complexity of HTML document can be served subject to those contraints. This is usually possible with some kind of batch import. If, however, the document has been uploaded one file at a time using the Web UI, the path information has been stripped. The system can cope with relative links that refer to a deeper path, e.g.</p>
|
||||
<p>HTML documents must be "self-contained", as explained here. Provided that full path information is known by DSpace, any depth or complexity of HTML document can be served subject to those constraints. This is usually possible with some kind of batch import. If, however, the document has been uploaded one file at a time using the Web UI, the path information has been stripped. The system can cope with relative links that refer to a deeper path, e.g.</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><IMG SRC=<span class="code-quote">"images/figure1.gif"</span>></pre>
|
||||
</div></div>
|
||||
@@ -520,7 +520,7 @@ programming or wish to customize the code at any time.</p>
|
||||
<p><em>launcher.xml</em> is made of several components:</p>
|
||||
|
||||
<ul>
|
||||
<li><em><command></em> begins the stanza for a comand</li>
|
||||
<li><em><command></em> begins the stanza for a command</li>
|
||||
<li><em><name></em>_<em>name of command</em>_<em></name></em> the name of the command that you would use.</li>
|
||||
<li><em><description></em>_<em>the description of the command</em>_<em></description></em></li>
|
||||
<li><em><step> </step></em> User arguments are parsed and tested.</li>
|
||||
@@ -571,7 +571,7 @@ Prior to release 1.5 if one wanted to regenerate the browse index, one would hav
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -139,7 +139,7 @@ mvn javadoc:javadoc
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,17 +16,17 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="BusinessLogicLayer-SystemArchitecture%3ABusinessLogicLayer"></a>System Architecture: Business Logic Layer</h1>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292448694802 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292448694802 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292448694802 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297951916794 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297951916794 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297951916794 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292448694802'>
|
||||
/*]]>*/</style><div class='rbtoc1297951916794'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#BusinessLogicLayer-CoreClasses'>Core Classes</a></li>
|
||||
<ul>
|
||||
@@ -477,7 +477,7 @@ The packager also takes a <em>PackageParameters</em> object, which is a property
|
||||
<ol>
|
||||
<li><b>Singleton Plugins</b> There is only one implementation class for the plugin. It is indicated in the configuration. This type of plugin chooses an implementation of a service, for the entire system, at configuration time. Your application just fetches the plugin for that interface and gets the configured-in choice. See the getSinglePlugin() method.</li>
|
||||
<li><b>Sequence Plugins</b> You need a sequence or series of plugins, to implement a mechanism like Stackable Authentication or a pipeline, where each plugin is called in order to contribute its implementation of a process to the whole. The Plugin Manager supports this by letting you configure a sequence of plugins for a given interface. See the getPluginSequence() method.</li>
|
||||
<li><b>Named Plugins</b> Use a named plugin when the application has to choose one plugin implementation out of many available ones. Each implementation is bound to one or more names (symbolic identifiers) in the configuration.The name is just a string to be associated with the combination of implementation class and interface. It may contain any characters except for comma (,) and equals (=). It may contain embedded spaces. Comma is a special character used to separate names in the configuration entry.Names must be unique within an interface: No plugin classes implementing the same interface may have the same name.Think of plugin names as a controlled vocabulary – for a given plugin interface, there is a set of names for which plugins can be found. The designer of a Named Plugin interface is responsible for deciding what the name means and how to derive it; for example, names of metadata crosswalk plugins may describe the target metadata format.See the getNamedPlugin() method and the getPluginNames() methods.</li>
|
||||
<li><b>Named Plugins</b> Use a named plugin when the application has to choose one plugin implementation out of many available ones. Each implementation is bound to one or more names (symbolic identifiers) in the configuration. The name is just a string to be associated with the combination of implementation class and interface. It may contain any characters except for comma (,) and equals (=). It may contain embedded spaces. Comma is a special character used to separate names in the configuration entry. Names must be unique within an interface: No plugin classes implementing the same interface may have the same name. Think of plugin names as a controlled vocabulary – for a given plugin interface, there is a set of names for which plugins can be found. The designer of a Named Plugin interface is responsible for deciding what the name means and how to derive it; for example, names of metadata crosswalk plugins may describe the target metadata format. See the getNamedPlugin() method and the getPluginNames() methods.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
@@ -537,15 +537,15 @@ The packager also takes a <em>PackageParameters</em> object, which is a property
|
||||
<pre class="code-java"><span class="code-keyword">static</span> <span class="code-object">Object</span> getSinglePlugin(<span class="code-object">Class</span> intface)
|
||||
<span class="code-keyword">throws</span> PluginConfigurationError;</pre>
|
||||
</div></div>
|
||||
<p> Returns an instance of the singleton (single) plugin implementing the given interface. There must be exactly one single plugin configured for this interface, otherwise the <em>PluginConfigurationError</em> is thrown.Note that this is the only "get plugin" method which throws an exception. It is typically used at initialization time to set up a permanent part of the system so any failure is fatal.See the <em>plugin.single</em> configuration key for configuration details.</p></li>
|
||||
<p> Returns an instance of the singleton (single) plugin implementing the given interface. There must be exactly one single plugin configured for this interface, otherwise the <em>PluginConfigurationError</em> is thrown. Note that this is the only "get plugin" method which throws an exception. It is typically used at initialization time to set up a permanent part of the system so any failure is fatal. See the <em>plugin.single</em> configuration key for configuration details.</p></li>
|
||||
<li><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><span class="code-keyword">static</span> <span class="code-object">Object</span>[] getPluginSequence(<span class="code-object">Class</span> intface);</pre>
|
||||
</div></div>
|
||||
<p> Returns instances of all plugins that implement the interface <em>intface</em>, in an <em>Array</em>. Returns an empty array if no there are no matching plugins.The order of the plugins in the array is the same as their class names in the configuration's value field.See the <em>plugin.sequence</em> configuration key for configuration details.</p></li>
|
||||
<p> Returns instances of all plugins that implement the interface <em>intface</em>, in an <em>Array</em>. Returns an empty array if no there are no matching plugins. The order of the plugins in the array is the same as their class names in the configuration's value field. See the <em>plugin.sequence</em> configuration key for configuration details.</p></li>
|
||||
<li><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><span class="code-keyword">static</span> <span class="code-object">Object</span> getNamedPlugin(<span class="code-object">Class</span> intface, <span class="code-object">String</span> name);</pre>
|
||||
</div></div>
|
||||
<p> Returns an instance of a plugin that implements the interface <em>intface</em> and is bound to a name matching name. If there is no matching plugin, it returns null. The names are matched by <em>String.equals()</em>.See the <em>plugin.named</em> and <em>plugin.selfnamed</em> configuration keys for configuration details.</p></li>
|
||||
<p> Returns an instance of a plugin that implements the interface <em>intface</em> and is bound to a name matching name. If there is no matching plugin, it returns null. The names are matched by <em>String.equals()</em>. See the <em>plugin.named</em> and <em>plugin.selfnamed</em> configuration keys for configuration details.</p></li>
|
||||
<li><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><span class="code-keyword">static</span> void releasePlugin(<span class="code-object">Object</span> plugin);</pre>
|
||||
</div></div>
|
||||
@@ -553,7 +553,7 @@ The packager also takes a <em>PackageParameters</em> object, which is a property
|
||||
<li><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><span class="code-keyword">static</span> <span class="code-object">String</span>[] getAllPluginNames(<span class="code-object">Class</span> intface);</pre>
|
||||
</div></div>
|
||||
<p> Returns all of the names under which a named plugin implementing the interface <em>intface</em> can be requested (with <em>getNamedPlugin()</em>). The array is empty if there are no matches. Use this to populate a menu of plugins for interactive selection, or to document what the possible choices are.The names are NOT returned in any predictable order, so you may wish to sort them first.Note: Since a plugin may be bound to more than one name, the list of names this returns does not represent the list of plugins. To get the list of unique implementation classes corresponding to the names, you might have to eliminate duplicates (i.e. create a Set of classes).</p></li>
|
||||
<p> Returns all of the names under which a named plugin implementing the interface <em>intface</em> can be requested (with <em>getNamedPlugin()</em>). The array is empty if there are no matches. Use this to populate a menu of plugins for interactive selection, or to document what the possible choices are. The names are NOT returned in any predictable order, so you may wish to sort them first. Note: Since a plugin may be bound to more than one name, the list of names this returns does not represent the list of plugins. To get the list of unique implementation classes corresponding to the names, you might have to eliminate duplicates (i.e. create a Set of classes).</p></li>
|
||||
<li><div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><span class="code-keyword">static</span> void checkConfiguration();</pre>
|
||||
</div></div>
|
||||
@@ -657,7 +657,7 @@ The plugins are returned by <em>getPluginSequence()</em> in the same order as th
|
||||
org.dspace.app.mediafilter.PDFFilter = Adobe PDF, PDF, Portable Document Format</pre>
|
||||
</div></div>
|
||||
<p>NOTE: Since there can only be one key with plugin.named. followed by the interface name in the configuration, all of the plugin implementations must be configured in that entry.</p></li>
|
||||
<li><b>Self-Named Plugins</b> Since a self-named plugin supplies its own names through a static method call, the configuration only has to include its interface and classname:<em>plugin.selfnamed.interface = classname [ , classname.. ]_The following example first demonstrates how the plugin class, _XsltDisseminationCrosswalk</em> is configured to implement its own names "MODS" and "DublinCore". These come from the keys starting with <em>crosswalk.dissemination.stylesheet.</em>. The value is a stylesheet file.The class is then configured as a self-named plugin:
|
||||
<li><b>Self-Named Plugins</b> Since a self-named plugin supplies its own names through a static method call, the configuration only has to include its interface and classname:<em>plugin.selfnamed.interface = classname [ , classname.. ]_The following example first demonstrates how the plugin class, _XsltDisseminationCrosswalk</em> is configured to implement its own names "MODS" and "DublinCore". These come from the keys starting with <em>crosswalk.dissemination.stylesheet.</em>. The value is a stylesheet file. The class is then configured as a self-named plugin:
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">crosswalk.dissemination.stylesheet.DublinCore = xwalk/TESTDIM-2-DC_copy.xsl
|
||||
crosswalk.dissemination.stylesheet.MODS = xwalk/mods.xsl
|
||||
@@ -854,13 +854,13 @@ plugin.selfnamed.org.dspace.content.metadata.DisseminationCrosswalk = \
|
||||
|
||||
<h2><a name="BusinessLogicLayer-Eperson%2FGroupManager"></a>E-person/Group Manager</h2>
|
||||
|
||||
<p>DSpace keeps track of registered users with the <em>org.dspace.eperson.EPerson</em> class. The class has methods to create and manipulate an <em>EPerson</em> such as get and set methods for first and last names, email, and password. (Actually, there is no <em>getPassword()</em> method—an MD5 hash of the password is stored, and can only be verified with the <em>checkPassword()</em> method.) There are find methods to find an EPerson by email (which is assumed to be unique,) or to find all EPeople in the system.</p>
|
||||
<p>DSpace keeps track of registered users with the <em>org.dspace.eperson.EPerson</em> class. The class has methods to create and manipulate an <em>EPerson</em> such as get and set methods for first and last names, email, and password. (Actually, there is no <em>getPassword()</em> method‚ an MD5 hash of the password is stored, and can only be verified with the <em>checkPassword()</em> method.) There are find methods to find an EPerson by email (which is assumed to be unique,) or to find all EPeople in the system.</p>
|
||||
|
||||
<p>The <em>EPerson</em> object should probably be reworked to allow for easy expansion; the current EPerson object tracks pretty much only what MIT was interested in tracking - first and last names, email, phone. The access methods are hardcoded and should probably be replaced with methods to access arbitrary name/value pairs for institutions that wish to customize what EPerson information is stored.</p>
|
||||
|
||||
<p>Groups are simply lists of <em>EPerson</em> objects. Other than membership, <em>Group</em> objects have only one other attribute: a name. Group names must be unique, so we have adopted naming conventions where the role of the group is its name, such as <em>COLLECTION_100_ADD</em>. Groups add and remove EPerson objects with <em>addMember()</em> and <em>removeMember()</em> methods. One important thing to know about groups is that they store their membership in memory until the <em>update()</em> method is called - so when modifying a group's membership don't forget to invoke <em>update()</em> or your changes will be lost! Since group membership is used heavily by the authorization system a fast <em>isMember()</em> method is also provided.</p>
|
||||
|
||||
<p>Another kind of Group is also implemented in DSpace—special Groups. The <em>Context</em> object for each session carries around a List of Group IDs that the user is also a member of—currently the MITUser Group ID is added to the list of a user's special groups if certain IP address or certificate criteria are met.</p>
|
||||
<p>Another kind of Group is also implemented in DSpace‚ special Groups. The <em>Context</em> object for each session carries around a List of Group IDs that the user is also a member of‚ currently the MITUser Group ID is added to the list of a user's special groups if certain IP address or certificate criteria are met.</p>
|
||||
|
||||
|
||||
<h2><a name="BusinessLogicLayer-Authorization"></a>Authorization</h2>
|
||||
@@ -886,7 +886,7 @@ plugin.selfnamed.org.dspace.content.metadata.DisseminationCrosswalk = \
|
||||
|
||||
<p>The authorization system is based on the classic 'police state' model of security; no action is allowed unless it is expressed in a policy. The policies are attached to resources (hence the name <em>ResourcePolicy</em>,) and detail who can perform that action. The resource can be any of the DSpace object types, listed in <em>org.dspace.core.Constants</em> (<em>BITSTREAM</em>, <em>ITEM</em>, <em>COLLECTION</em>, etc.) The 'who' is made up of EPerson groups. The actions are also in <em>Constants.java</em> (<em>READ</em>, <em>WRITE</em>, <em>ADD</em>, etc.) The only non-obvious actions are <em>ADD</em> and <em>REMOVE</em>, which are authorizations for container objects. To be able to create an Item, you must have <em>ADD</em> permission in a Collection, which contains Items. (Communities, Collections, Items, and Bundles are all container objects.)</p>
|
||||
|
||||
<p>Currently most of the read policy checking is done with items—communities and collections are assumed to be openly readable, but items and their bitstreams are checked. Separate policy checks for items and their bitstreams enables policies that allow publicly readable items, but parts of their content may be restricted to certain groups.</p>
|
||||
<p>Currently most of the read policy checking is done with items‚ communities and collections are assumed to be openly readable, but items and their bitstreams are checked. Separate policy checks for items and their bitstreams enables policies that allow publicly readable items, but parts of their content may be restricted to certain groups.</p>
|
||||
|
||||
<p>The <em>AuthorizeManager</em> class'<br/>
|
||||
<em>authorizeAction(Context, object, action)</em> is the primary source of all authorization in the system. It gets a list of all of the ResourcePolicies in the system that match the object and action. It then iterates through the policies, extracting the EPerson Group from each policy, and checks to see if the EPersonID from the Context is a member of any of those groups. If all of the policies are queried and no permission is found, then an <em>AuthorizeException</em> is thrown. An <em>authorizeAction()</em> method is also supplied that returns a boolean for applications that require higher performance.</p>
|
||||
@@ -900,7 +900,7 @@ plugin.selfnamed.org.dspace.content.metadata.DisseminationCrosswalk = \
|
||||
|
||||
<h3><a name="BusinessLogicLayer-MiscellaneousAuthorizationNotes"></a>Miscellaneous Authorization Notes</h3>
|
||||
|
||||
<p>Where do items get their read policies? From the their collection's read policy. There once was a separate item read default policy in each collection, and perhaps there will be again since it appears that administrators are notoriously bad at defining collection's read policies. There is also code in place to enable policies that are timed—have a start and end date. However, the admin tools to enable these sorts of policies have not been written.</p>
|
||||
<p>Where do items get their read policies? From the their collection's read policy. There once was a separate item read default policy in each collection, and perhaps there will be again since it appears that administrators are notoriously bad at defining collection's read policies. There is also code in place to enable policies that are timed‚ have a start and end date. However, the admin tools to enable these sorts of policies have not been written.</p>
|
||||
|
||||
|
||||
|
||||
@@ -949,7 +949,7 @@ http:<span class="code-comment">//hdl.handle.net/1721.123/4567</span></pre>
|
||||
|
||||
<p>By default, the fields shown in the <em>Indexed Fields</em> section below are indexed. These are hardcoded in the DSIndexer class. If any search.index.i items are specified in <em>dspace.cfg</em> these are used rather than these hardcoded fields.</p>
|
||||
|
||||
<p>The query class <em>DSQuery</em> contains the three flavors of <em>doQuery()</em> methods—one searches the DSpace site, and the other two restrict searches to Collections and Communities. The results from a query are returned as three lists of handles; each list represents a type of result. One list is a list of Items with matches, and the other two are Collections and Communities that match. This separation allows the UI to handle the types of results gracefully without resolving all of the handles first to see what kind of content the handle points to. The <em>DSQuery</em> class also has a <em>main()</em> method for debugging via command-line searches.</p>
|
||||
<p>The query class <em>DSQuery</em> contains the three flavors of <em>doQuery()</em> methods‚ one searches the DSpace site, and the other two restrict searches to Collections and Communities. The results from a query are returned as three lists of handles; each list represents a type of result. One list is a list of Items with matches, and the other two are Collections and Communities that match. This separation allows the UI to handle the types of results gracefully without resolving all of the handles first to see what kind of content the handle points to. The <em>DSQuery</em> class also has a <em>main()</em> method for debugging via command-line searches.</p>
|
||||
|
||||
<h3><a name="BusinessLogicLayer-CurrentLuceneImplementation"></a>Current Lucene Implementation</h3>
|
||||
|
||||
@@ -1020,7 +1020,7 @@ http:<span class="code-comment">//hdl.handle.net/1721.123/4567</span></pre>
|
||||
|
||||
<ul>
|
||||
<li><b>Title</b>: Values of the Dublin Core element <b>title</b> (unqualified) are indexed. These are sorted in a case-insensitive fashion, with any leading article removed. For example: "The DSpace System" would appear under 'D' rather than 'T'.</li>
|
||||
<li><b>Author</b>: Values of the <b>contributor</b> (any qualifier or unqualified) element are indexed. Since <em>contributor</em> values typically are in the form 'last name, first name', a simple case-insensitive alphanumeric sort is used which orders authors in last name order.Note that this is an index of <em>authors</em>, and not <em>items by author</em>. If four items have the same author, that author will appear in the index only once. Hence, the index of authors may be greater or smaller than the index of titles; items often have more than one author, though the same author may have authored several items.The author indexing in the browse API does have limitations:
|
||||
<li><b>Author</b>: Values of the <b>contributor</b> (any qualifier or unqualified) element are indexed. Since <em>contributor</em> values typically are in the form 'last name, first name', a simple case-insensitive alphanumeric sort is used which orders authors in last name order. Note that this is an index of <em>authors</em>, and not <em>items by author</em>. If four items have the same author, that author will appear in the index only once. Hence, the index of authors may be greater or smaller than the index of titles; items often have more than one author, though the same author may have authored several items. The author indexing in the browse API does have limitations:
|
||||
<ul>
|
||||
<li>Ideally, a name that appears as an author for more than one item would appear in the author index only once. For example, 'Doe, John' may be the author of tens of items. However, in practice, author's names often appear in slightly differently forms, for example:
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
@@ -1029,10 +1029,10 @@ Doe, John Stewart
|
||||
Doe, John S.</pre>
|
||||
</div></div>
|
||||
<p>Currently, the above three names would all appear as separate entries in the author index even though they may refer to the same author. In order for an author of several papers to be correctly appear once in the index, each item must specify <em>exactly</em> the same form of their name, which doesn't always happen in practice.</p></li>
|
||||
<li>Another issue is that two authors may have the same name, even within a single institution. If this is the case they may appear as one author in the index.These issues are typically resolved in libraries with <em>authority control records</em>, in which are kept a 'preferred' form of the author's name, with extra information (such as date of birth/death) in order to distinguish between authors of the same name. Maintaining such records is a huge task with many issues, particularly when metadata is received from faculty directly rather than trained library catalogers.</li>
|
||||
<li>Another issue is that two authors may have the same name, even within a single institution. If this is the case they may appear as one author in the index. These issues are typically resolved in libraries with <em>authority control records</em>, in which are kept a 'preferred' form of the author's name, with extra information (such as date of birth/death) in order to distinguish between authors of the same name. Maintaining such records is a huge task with many issues, particularly when metadata is received from faculty directly rather than trained library catalogers.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>Date of Issue</b>: Items are indexed by date of issue. This may be different from the date that an item appeared in DSpace; many items may have been originally published elsewhere beforehand. The Dublin Core field used is <b>date.issued</b>. The ordering of this index may be reversed so 'earliest first' and 'most recent first' orderings are possible.Note that the index is of <em>items by date</em>, as opposed to an index of <em>dates</em>. If 30 items have the same issue date (say 2002), then those 30 items all appear in the index adjacent to each other, as opposed to a single 2002 entry.Since dates in DSpace Dublin Core are in ISO8601, all in the UTC time zone, a simple alphanumeric sort is sufficient to sort by date, including dealing with varying granularities of date reasonably. For example:
|
||||
<li><b>Date of Issue</b>: Items are indexed by date of issue. This may be different from the date that an item appeared in DSpace; many items may have been originally published elsewhere beforehand. The Dublin Core field used is <b>date.issued</b>. The ordering of this index may be reversed so 'earliest first' and 'most recent first' orderings are possible. Note that the index is of <em>items by date</em>, as opposed to an index of <em>dates</em>. If 30 items have the same issue date (say 2002), then those 30 items all appear in the index adjacent to each other, as opposed to a single 2002 entry. Since dates in DSpace Dublin Core are in ISO8601, all in the UTC time zone, a simple alphanumeric sort is sufficient to sort by date, including dealing with varying granularities of date reasonably. For example:
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">2001-12-10
|
||||
2002
|
||||
@@ -1043,7 +1043,7 @@ Doe, John S.</pre>
|
||||
2002-04-10</pre>
|
||||
</div></div></li>
|
||||
<li><b>Date Accessioned</b>: In order to determine which items most recently appeared, rather than using the date of issue, an item's accession date is used. This is the Dublin Core field <b>date.accessioned</b>. In other aspects this index is identical to the date of issue index.</li>
|
||||
<li><b>Items by a Particular Author</b>: The browse API can perform is to extract items by a particular author. They do not have to be primary author of an item for that item to be extracted. You can specify a scope, too; that is, you can ask for items by author X in collection Y, for example.This particular flavor of browse is slightly simpler than the others. You cannot presently specify a particular subset of results to be returned. The API call will simply return all of the items by a particular author within a certain scope.Note that the author of the item must <em>exactly</em> match the author passed in to the API; see the explanation about the caveats of the author index browsing to see why this is the case.</li>
|
||||
<li><b>Items by a Particular Author</b>: The browse API can perform is to extract items by a particular author. They do not have to be primary author of an item for that item to be extracted. You can specify a scope, too; that is, you can ask for items by author X in collection Y, for example.This particular flavor of browse is slightly simpler than the others. You cannot presently specify a particular subset of results to be returned. The API call will simply return all of the items by a particular author within a certain scope. Note that the author of the item must <em>exactly</em> match the author passed in to the API; see the explanation about the caveats of the author index browsing to see why this is the case.</li>
|
||||
<li><b>Subject</b>: Values of the Dublin Core element <b>subject</b> (both unqualified and with any qualifier) are indexed. These are sorted in a case-insensitive fashion.</li>
|
||||
</ul>
|
||||
|
||||
@@ -1119,7 +1119,7 @@ FOCUS> The Really Exciting Research Video
|
||||
|
||||
<p>DSpace is able to support OpenSearch. For those not acquainted with the standard, a very brief introduction, with emphasis on what possibilities it holds for current use and future development.</p>
|
||||
|
||||
<p>OpenSearch is a small set of conventions and documents for describing and using 'search engines', meaning any service that returns a set of results for a query. It is nearly ubiquitous‚Äîbut also nearly invisible‚ in modern web sites with search capability. If you look at the page source of Wikipedia, Facebook, CNN, etc you will find buried a link element declaring OpenSearch support. It is very much a lowest-common-denominator abstraction (think Google box), but does provide a means to extend its expressive power. This first implementation for DSpace supports <em>none</em> of these extensions‚Äîmany of which are of potential value‚ so it should be regarded as a foundation, not a finished solution. So the short answer is that DSpace appears as a 'search-engine' to OpenSearch-aware software.</p>
|
||||
<p>OpenSearch is a small set of conventions and documents for describing and using 'search engines', meaning any service that returns a set of results for a query. It is nearly ubiquitous‚ but also nearly invisible‚ in modern web sites with search capability. If you look at the page source of Wikipedia, Facebook, CNN, etc you will find buried a link element declaring OpenSearch support. It is very much a lowest-common-denominator abstraction (think Google box), but does provide a means to extend its expressive power. This first implementation for DSpace supports <em>none</em> of these extensions‚ many of which are of potential value‚ so it should be regarded as a foundation, not a finished solution. So the short answer is that DSpace appears as a 'search-engine' to OpenSearch-aware software.</p>
|
||||
|
||||
<p>Another way to look at OpenSearch is as a RESTful web service for search, very much like SRW/U, but considerably simpler. This comparative loss of power is offset by the fact that it is widely supported by web tools and players: browsers understand it, as do large metasearch tools.</p>
|
||||
|
||||
@@ -1191,7 +1191,7 @@ These terms are 'interpreted' by the embargo system to yield a specific date on
|
||||
<ol>
|
||||
<li><b>Terms Assignment.</b> The first step in placing an embargo on an item is to attach (assign) 'terms' to it. If these terms are missing, no embargo will be imposed. As we will see below, terms are carried in a configurable DSpace metadata field, so assigning terms just means assigning a value to a metadata field. This can be done in a web submission user interface form, in a SWORD deposit package, a batch import, etc. - anywhere metadata is passed to DSpace. The terms are not immediately acted upon, and may be revised, corrected, removed, etc, up until the next stage of the life-cycle. Thus a submitter could enter one value, and a collection editor replace it, and only the last value will be used. Since metadata fields are multivalued, theoretically there can be multiple terms values, but in the default implementation only one is recognized.</li>
|
||||
<li><b>Terms interpretation/imposition.</b> In DSpace terminology, when an item has exited the last of any workflow steps (or if none have been defined for it), it is said to be 'installed' into the repository. At this precise time, the 'interpretation' of the terms occurs, and a computed 'lift date' is assigned, which like the terms is recorded in a configurable metadata field. It is important to understand that this interpretation happens only once, (just like the installation), and cannot be revisited later. Thus, although an administrator can assign a new value to the metadata field holding the terms after the item has been installed, this will have no effect on the embargo, whose 'force' now resides entirely in the 'lift date' value. For this reason, you cannot embargo content already in your repository (at least using standard tools). The other action taken at installation time is the actual imposition of the embargo. The default behavior here is simply to remove the read policies on all the bundles and bitstreams except for the "LICENSE" or "METADATA" bundles. See the section on <em>Extending Embargo Functionality</em> for how to alter this behavior. Also note that since these policy changes occur before installation, there is no time during which embargoed content is 'exposed' (accessible by non-administrators). The terms interpretation and imposition together are called 'setting' the embargo, and the component that performs them both is called the embargo 'setter'.</li>
|
||||
<li><b>Embargo Period.</b> After an embargoed item has been installed, the policy restrictions remain in effect until removed. This is not an automatic process, however: a 'lifter' must be run periodically to look for items whose 'lift date' is past. Note that this means the effective removal of an embargo is <b>not</b> the lift date, but the earliest date after the lift date that the lifter is run. Typically, a nightly cron-scheduled invocation of the lifter is more than adequate, given the granularity of embargo terms. Also note that during the embargo period, all metadata of the item remains visible. This default behavior can be changed. One final point to note is that the 'lift date', although it was computed and assigned during the previous stage, is in the end a regular metadata field. That means, if there are extraordinary circumstances that require an administrator (or collection editor—anyone with edit permissions on metadata) to change the lift date, they can do so. Thus, they can 'revise' the lift date without reference to the original terms. This date will be checked the next time the 'lifter' is run. One could immediately lift the embargo by setting the lift date to the current day, or change it to 'forever' to indefinitely postpone lifting.</li>
|
||||
<li><b>Embargo Period.</b> After an embargoed item has been installed, the policy restrictions remain in effect until removed. This is not an automatic process, however: a 'lifter' must be run periodically to look for items whose 'lift date' is past. Note that this means the effective removal of an embargo is <b>not</b> the lift date, but the earliest date after the lift date that the lifter is run. Typically, a nightly cron-scheduled invocation of the lifter is more than adequate, given the granularity of embargo terms. Also note that during the embargo period, all metadata of the item remains visible. This default behavior can be changed. One final point to note is that the 'lift date', although it was computed and assigned during the previous stage, is in the end a regular metadata field. That means, if there are extraordinary circumstances that require an administrator (or collection editor‚ anyone with edit permissions on metadata) to change the lift date, they can do so. Thus, they can 'revise' the lift date without reference to the original terms. This date will be checked the next time the 'lifter' is run. One could immediately lift the embargo by setting the lift date to the current day, or change it to 'forever' to indefinitely postpone lifting.</li>
|
||||
<li><b>Embargo Lift.</b> When the lifter discovers an item whose lift date is in the past, it removes (lifts) the embargo. The default behavior of the lifter is to add the resource policies <em>that would have been added</em> had the embargo not been imposed. That is, it replicates the standard DSpace behavior, in which an item inherits it's policies from its owning collection. As with all other parts of the embargo system, you may replace or extend the default behavior of the lifter (see section V. below). You may wish, e.g. to send an email to an administrator or other interested parties, when an embargoed item becomes available.</li>
|
||||
<li><b>Post Embargo.</b> After the embargo has been lifted, the item ceases to respond to any of the embargo life-cycle events. The values of the metadata fields reflect essentially historical or provenance values. With the exception of the additional metadata fields, they are indistinguishable from items that were never subject to embargo.</li>
|
||||
</ol>
|
||||
@@ -1206,7 +1206,7 @@ These terms are 'interpreted' by the embargo system to yield a specific date on
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 16, 2010 by <font color="#0050B2">rrodgers</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="CurationSystem-CurationSystem"></a>Curation System</h1>
|
||||
@@ -24,11 +24,11 @@
|
||||
<p>As of release 1.7, DSpace supports running curation tasks, which are described in this section. DSpace 1.7 and subsequent distributions will bundle (include) several useful tasks, but the system also is designed to allow new tasks to be added between releases, both general purpose tasks that come from the community, and locally written and deployed tasks.</p>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292518262800 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292518262800 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292518262800 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297951524980 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297951524980 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297951524980 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292518262800'>
|
||||
/*]]>*/</style><div class='rbtoc1297951524980'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#CurationSystem-Tasks'>Tasks</a></li>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#CurationSystem-Activation'>Activation</a></li>
|
||||
@@ -67,7 +67,7 @@ div.rbtoc1292518262800 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
<h2><a name="CurationSystem-Tasks"></a>Tasks</h2>
|
||||
|
||||
<p>The goal of the curation system ('CS') is to provide a simple, extensible, way to manage routine content operations on a repository. These operations are known to CS as 'tasks', and they can operate on any DSpaceObject (i.e. subclasses of DSpaceObject) - which means Communities, Collections, and Items - viz. core data model objects. Tasks may elect to work on only one type of DSpace object - typically an Item - and in this case they may simply ignore other data types (tasks have the ability to 'skip' objects for any reason). The DSpace core distribution will provide a number of useful tasks, but the system is designed to encourage local extension - tasks can be written for any purpose, and placed in any java package. This gives DSpace sites the ability to customize the behavior of their repository without having to alter - and therefore manage synchronization with - the DSpace source code. What sorts of activities are appropriate for tasks?</p>
|
||||
<p>The goal of the curation system ('CS') is to provide a simple, extensible way to manage routine content operations on a repository. These operations are known to CS as 'tasks', and they can operate on any DSpaceObject (i.e. subclasses of DSpaceObject) - which means Communities, Collections, and Items - viz. core data model objects. Tasks may elect to work on only one type of DSpace object - typically an Item - and in this case they may simply ignore other data types (tasks have the ability to 'skip' objects for any reason). The DSpace core distribution will provide a number of useful tasks, but the system is designed to encourage local extension - tasks can be written for any purpose, and placed in any java package. This gives DSpace sites the ability to customize the behavior of their repository without having to alter - and therefore manage synchronization with - the DSpace source code. What sorts of activities are appropriate for tasks?</p>
|
||||
|
||||
<p>Some examples:</p>
|
||||
|
||||
@@ -75,7 +75,7 @@ div.rbtoc1292518262800 li {margin-left: 0px;padding-left: 0px;}
|
||||
<li>apply a virus scan to item bitstreams (this will be our example below)</li>
|
||||
<li>profile a collection based on format types - good for identifying format migrations</li>
|
||||
<li>ensure a given set of metadata fields are present in every item, or even that they have particular values</li>
|
||||
<li>call a network service to enhance/replace/normalize an items's metadata or content</li>
|
||||
<li>call a network service to enhance/replace/normalize an item's metadata or content</li>
|
||||
<li>ensure all item bitstreams are readable and their checksums agree with the ingest values</li>
|
||||
</ul>
|
||||
|
||||
@@ -95,9 +95,9 @@ org.dspace.curate.ClamScan = vscan
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>For each activated task, a 'class'='taskname' line is added. The taskname is used elsewhere to configure the use of the task, as will be seen below. Note that the curate.cfg configuration file, while in the config directory, is located under 'modules'. The intent is that tasks, as well as any configuration they require, will be optional 'add-ons' to the basic system configuration. Adding or removing tasks has no impact on dspace.cfg.</p>
|
||||
<p>For each activated task, a key-value pair is added. The key is the fully qualified class name and the value is the <em>taskname</em> used elsewhere to configure the use of the task, as will be seen below. Note that the curate.cfg configuration file, while in the config directory, is located under 'modules'. The intent is that tasks, as well as any configuration they require, will be optional 'add-ons' to the basic system configuration. Adding or removing tasks has no impact on dspace.cfg.</p>
|
||||
|
||||
<p>For many tasks, this activation configuration is all that will be required to use it. But for others, the task needs specific configuration itself. A concrete example is described below, but here note that these task-specific configuration property files also reside in <tt>[dspace]/config/modules</tt></p>
|
||||
<p>For many tasks, this activation configuration is all that will be required to use it. But for others, the task needs specific configuration itself. A concrete example is described below, but note that these task-specific configuration property files also reside in <tt>[dspace]/config/modules</tt></p>
|
||||
|
||||
<h2><a name="CurationSystem-Writingyourowntasks"></a>Writing your own tasks</h2>
|
||||
|
||||
@@ -137,11 +137,25 @@ org.dspace.curate.ClamScan = vscan
|
||||
<pre class="code-java"> [dspace]/bin/dspace curate -t vscan -i 123456789/4 </pre>
|
||||
</div></div>
|
||||
|
||||
<p>The complete list of arguments:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
-t taskname: name of task to perform
|
||||
-T filename: name of file containing list of tasknames
|
||||
-e epersonID: (email address) will be superuser <span class="code-keyword">if</span> unspecified
|
||||
-i identifier: Id of object to curate. May be (1) a handle (2) a workflow Id or (3) 'all' to operate on the whole repository
|
||||
-q queue: name of queue to process - -i and -q are mutually exclusive
|
||||
-v emit verbose output
|
||||
-r - emit reporting to standard out
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>As with other command-line tools, these invocations could be placed in a cron table and run on a fixed schedule, or run on demand by an administrator.</p>
|
||||
|
||||
<h3><a name="CurationSystem-IntheadminUI"></a>In the admin UI</h3>
|
||||
|
||||
<p>In the XMLUI, there is a 'Curate' tab (appearing within the 'Edit Community/Collection/Item') that exposes a drop-down list of configured tasks, with a button to 'perform' the task, or queue it for later operation (see section below). Not all activated tasks need appear in the Curate tab - you filter them by means of a configuration property. This property also permits you to assign to the task a 'prettier' name than the PluginManager task name. The property resides in <tt>[dspace]/config/modules/curate.cfg</tt>:</p>
|
||||
<p>In the XMLUI, there is a 'Curate' tab (appearing within the 'Edit Community/Collection/Item') that exposes a drop-down list of configured tasks, with a button to 'perform' the task, or queue it for later operation (see section below). Not all activated tasks need appear in the Curate tab - you filter them by means of a configuration property. This property also permits you to assign to the task a more user-friendly name than the PluginManager <em>taskname</em>. The property resides in <tt>[dspace]/config/modules/curate.cfg</tt>:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
@@ -151,7 +165,7 @@ ui.tasknames = \
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>When a task is selected from the drop-down list and performed, the tab displays both a phrase interpreting the 'status code' of the task execution, and the 'result' message if any has been defined. When the task has been queued, an acknowlegement appears instead. You may configure the words used for status codes in curate.cfg (for clarity, language localization, etc):</p>
|
||||
<p>When a task is selected from the drop-down list and performed, the tab displays both a phrase interpreting the 'status code' of the task execution, and the 'result' message if any has been defined. When the task has been queued, an acknowledgement appears instead. You may configure the words used for status codes in curate.cfg (for clarity, language localization, etc):</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
@@ -235,7 +249,7 @@ In the administrative UI curation 'widget', there is the ability to both perform
|
||||
|
||||
<h2><a name="CurationSystem-TaskOutputandReporting"></a>Task Output and Reporting</h2>
|
||||
|
||||
<p>Few assumptions are made by CS about what the 'outcome' of a task may be (if any) - it. could e.g. produce a report to a temporary file. But the CS runtime does provide a few pieces of information that a task can assign:</p>
|
||||
<p>Few assumptions are made by CS about what the 'outcome' of a task may be (if any) - it. could e.g. produce a report to a temporary file, it could modify DSpace content silently, etc But the CS runtime does provide a few pieces of information whenever a task is performed:</p>
|
||||
|
||||
<h3><a name="CurationSystem-StatusCode"></a>Status Code</h3>
|
||||
|
||||
@@ -252,9 +266,11 @@ In the administrative UI curation 'widget', there is the ability to both perform
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>In the administrative UI, this code is translated into the word or phrase configured by the <em>ui.statusmessages</em> property (discussed above) for display.</p>
|
||||
|
||||
<h3><a name="CurationSystem-ResultString"></a>Result String</h3>
|
||||
|
||||
<p>The task may define a string indicating details of the outcome. This result is displayed, e.g. in the 'curation widget' described above:</p>
|
||||
<p>The task may define a string indicating details of the outcome. This result is displayed, in the 'curation widget' described above:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
@@ -262,19 +278,20 @@ In the administrative UI curation 'widget', there is the ability to both perform
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>CS does not interpret or assign result strings, the task does it.</p>
|
||||
<p>CS does not interpret or assign result strings, the task does it. A task may not assign a result, but the 'best practice' for tasks is to assign one whenever possible.</p>
|
||||
|
||||
<h3><a name="CurationSystem-ReportingStream"></a>Reporting Stream</h3>
|
||||
|
||||
<p>This is not currently fully implemented, just writes to standard out. But if more details should be recorded, they can be pushed to this stream.</p>
|
||||
<p>For very fine-grained information, a task may write to a <em>reporting</em> stream. This stream is sent to standard out, so is only available when running a task from the command line. Unlike the result string, there is no limit to the amount of data that may be pushed to this stream.</p>
|
||||
|
||||
<p>All 3 are accessed (or set) by methods on the Curation object:</p>
|
||||
<p>The status code, and the result string are accessed (or set) by methods on the Curation object:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
Curator curator = <span class="code-keyword">new</span> Curator();
|
||||
curator.addTask(<span class="code-quote">"vscan"</span>).curate(coll);
|
||||
<span class="code-object">int</span> status = curator.getStatus(<span class="code-quote">"vscan"</span>);
|
||||
<span class="code-object">String</span> result - curator.getResult(<span class="code-quote">"vscan"</span>);
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
@@ -304,11 +321,11 @@ In the administrative UI curation 'widget', there is the ability to both perform
|
||||
|
||||
<h2><a name="CurationSystem-StarterTasks"></a>Starter Tasks</h2>
|
||||
|
||||
<p>DSpace 1.7 bundles a few tasks and activates 2 by default to demonstrate the use of the curation system. These may be removed (deactivated by means of configuration) if desired without affecting system integrity. Each task is briefly described here.</p>
|
||||
<p>DSpace 1.7 bundles a few tasks and activates two (2) by default to demonstrate the use of the curation system. These may be removed (deactivated by means of configuration) if desired without affecting system integrity. Each task is briefly described here.</p>
|
||||
|
||||
<h3><a name="CurationSystem-BitstreamFormatProfiler"></a>Bitstream Format Profiler</h3>
|
||||
|
||||
<p>The task with the task name 'formatprofiler' (in the admin UI it is labelled "Profile Bitstream Formats") examines all the bitstreams in an item any produces a table ("profile") which is assigned to the result string. It has the layout:</p>
|
||||
<p>The task with the taskname 'formatprofiler' (in the admin UI it is labeled "Profile Bitstream Formats") examines all the bitstreams in an item and produces a table ("profile") which is assigned to the result string. It is activated by default, and is configured to display in the administrative UI. The result string has the layout:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
@@ -327,16 +344,16 @@ In the administrative UI curation 'widget', there is the ability to both perform
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>The profiler will operate on any DSpace object. If the object is an item, then only that item's bitstreams are profiled; if a collection, all the bitsteams of all the items; if a community, all the items of all the collections of the community.</p>
|
||||
<p>The profiler will operate on any DSpace object. If the object is an item, then only that item's bitstreams are profiled; if a collection, all the bitstreams of all the items; if a community, all the items of all the collections of the community.</p>
|
||||
|
||||
<h3><a name="CurationSystem-RequiredMetadata"></a>Required Metadata</h3>
|
||||
|
||||
<p>The 'requiredmetadata' task examines item metadata and determines whether fields that the web submission (input-forms.xml) marks as required are present. It sets the result string to either indicate that all required fields are present, or constructs a list of metadata elements that are required but missing.</p>
|
||||
<p>The 'requiredmetadata' task examines item metadata and determines whether fields that the web submission (input-forms.xml) marks as required are present. It sets the result string to indicate either that all required fields are present, or constructs a list of metadata elements that are required but missing. When the task is performed on an item, it will display the result for that item. When performed on a collection or community, the task be performed on each item, and will display the <em>last</em> item result. If all items in the community or collection have all required fields, that will be the last in the collection. If the task fails for any item (i.e. the item lacks all required fields), the process is halted. This way the results for the 'failed' items are not lost.</p>
|
||||
|
||||
<h3><a name="CurationSystem-VirusScan"></a>Virus Scan</h3>
|
||||
|
||||
<p>The 'vscan' task performs a virus scan on the bitstreams of items using the ClamAV software product.<br/>
|
||||
Clam AntiVirus is an open source (GPL) anti-virus toolkit for UNIX. The virus scanning curation task interacts with the ClamAV virus scanning service to scan the bitstreams contained in items, reporting on infection(s). Like other curation tasks, it can be run against a container or item, in the GUI or from the command line. It should be installed according to the documentation at <a href="http://www.clamav.net/">http://www.clamav.net</a>. It should not be installed in the dspace installation directory. You may install it on the same machine as your dspace installation, or on another machine which has been configured properly.</p>
|
||||
Clam AntiVirus is an open source (GPL) anti-virus toolkit for UNIX. A port for Windows is also available. The virus scanning curation task interacts with the ClamAV virus scanning service to scan the bitstreams contained in items, reporting on infection(s). Like other curation tasks, it can be run against a container or item, in the GUI or from the command line. It should be installed according to the documentation at <a href="http://www.clamav.net/">http://www.clamav.net</a>. It should not be installed in the dspace installation directory. You may install it on the same machine as your dspace installation, or on another machine which has been configured properly.</p>
|
||||
|
||||
<h4><a name="CurationSystem-SetuptheservicefromtheClamAVdocumentation."></a>Setup the service from the ClamAV documentation.</h4>
|
||||
|
||||
@@ -490,7 +507,7 @@ Change only <span class="code-keyword">if</span> items have large numbers of bit
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,7 +16,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="DRISchemaReference-DSpaceSystemDocumentation%3ADRISchemaReference"></a>DSpace System Documentation: DRI Schema Reference</h1>
|
||||
@@ -25,11 +25,11 @@
|
||||
|
||||
<p><b>Table of Contents:</b></p>
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292436648637 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292436648637 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292436648637 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297952110371 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297952110371 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297952110371 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292436648637'>
|
||||
/*]]>*/</style><div class='rbtoc1297952110371'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#DRISchemaReference-Introduction'>Introduction</a></li>
|
||||
<ul>
|
||||
@@ -104,7 +104,7 @@ div.rbtoc1292436648637 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
<p>The DRI schema was developed for use in Manakin. The choice to develop our own schema rather than adapt an existing one came after a careful analysis of the schema's purpose as well as the lessons learned from earlier attempts at customizing the DSpace interface. Since every DSpace page in Manakin exists as an XML Document at some point in the process, the schema describing that Document had to be able to structurally represent all content, metadata and relationships between different parts of a DSpace page. It had to be precise enough to avoid losing any structural information, and yet generic enough to allow Themes a certain degree of freedom in expressing that information in a readable format.</p>
|
||||
|
||||
<p>Popular schemas such as XHTML suffer from the problem of not relating elements together explicitly. For example, if a heading precedes a paragraph, the heading is related to the paragraph not because it is encoded as such but because it happens to precede it. When these structures are attempted to be translated into formats where these types of relationships are explicit, the translation becomes tedious, and potentially problematic. More structured schemas, like TEI or Docbook, are domain specific (much like DRI itself) and therefore not suitable for our purposes.</p>
|
||||
<p>Popular schemas such as XHTML suffer from the problem of not relating elements together explicitly. For example, if a heading precedes a paragraph, the heading is related to the paragraph not because it is encoded as such but because it happens to precede it. When these structures are attempted to be translated into formats where these types of relationships are explicit, the translation becomes tedious, and potentially problematic. More structured schemas, like TEI or DocBook, are domain specific (much like DRI itself) and therefore not suitable for our purposes.</p>
|
||||
|
||||
<p>We also decided that the schema should natively support a metadata standard for encoding artifacts. Rather than encoding artifact metadata in structural elements, like tables or lists, the schema would include artifacts as objects encoded in a particular standard. The inclusion of metadata in native format would enable the Theme to choose the best method to render the artifact for display without being tied to a particular structure.</p>
|
||||
|
||||
@@ -199,7 +199,7 @@ div.rbtoc1292436648637 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
<h3><a name="DRISchemaReference-Changesfrom1.0to1.1"></a>Changes from 1.0 to 1.1</h3>
|
||||
|
||||
<p>There were major structural changes between these two version numbers. Several elements were removed from the schema:<em>includeSet</em>, <em>include</em>, <em>objectMeta</em>, and <em>object</em>. Originally all metadata for objects were included in-line with the DRI document, this proved to have several problems and has been removed in version 1.1 of the DRI schema. Instead of including metadata in-line, external references to the metadata is included. Thus, a <em>reference</em> element has been added along with <em>referenceSet</em>. These new elements operate like their counterparts in the previous version except refrencing metadata contained on the <em>objectMeta</em> element they reference metadata in external files. The <em>repository</em> and <em>repositoryMeta</em> elements were alse modified in a similar mannor removing in-line metadata and refrencing external metadata documents.</p>
|
||||
<p>There were major structural changes between these two version numbers. Several elements were removed from the schema:<em>includeSet</em>, <em>include</em>, <em>objectMeta</em>, and <em>object</em>. Originally all metadata for objects were included in-line with the DRI document, this proved to have several problems and has been removed in version 1.1 of the DRI schema. Instead of including metadata in-line, external references to the metadata is included. Thus, a <em>reference</em> element has been added along with <em>referenceSet</em>. These new elements operate like their counterparts in the previous version except refrencing metadata contained on the <em>objectMeta</em> element they reference metadata in external files. The <em>repository</em> and <em>repositoryMeta</em> elements were alse modified in a similar manner removing in-line metadata and refrencing external metadata documents.</p>
|
||||
|
||||
|
||||
|
||||
@@ -1751,7 +1751,7 @@ Example needed.
|
||||
|
||||
<pageMeta>
|
||||
|
||||
<metadata element=<span class="code-quote">"title"</span>>Examlpe DRI
|
||||
<metadata element=<span class="code-quote">"title"</span>>Example DRI
|
||||
page</metadata>
|
||||
|
||||
<metadata
|
||||
@@ -1799,7 +1799,7 @@ Example needed.
|
||||
<li><b>cols</b>: (optional) The default number of columns that the text area should span. This applies only to textarea field types.</li>
|
||||
<li><b>maxlength</b>: (optional) The maximum length that the theme should accept for form input. This applies to text and password field types.</li>
|
||||
<li><b>multiple</b>: (optional) yes/no value. Determine if the field can accept multiple values for the field. This applies only to select lists.</li>
|
||||
<li><b>operations</b>: (optional) The possible operations that may be preformed on this field. The possible values are "add" and/or "delete". If both operations are possible then they should be provided as a space separated list.The "add" operations indicates that there may be multiple values for this field and the user may add to the set one at a time. The front-end should render a button that enables the user to add more fields to the set. The button must be named the field name appended with the string "_add", thus if the field's name is "firstName" the button must be called "firstName_add".The "delete" operation indicates that there may be multiple values for this field each of which may be removed from the set. The front-end should render a checkbox by each field value, except for the first, The checkbox must be named the field name appended with the string "_selected", thus if the field's name is "firstName" the checkbox must be called "firstName_selected" and the value of each successive checkbox should be the field name. The front-end must also render a delete button. The delete button name must be the field's name appended with the string "_delete".</li>
|
||||
<li><b>operations</b>: (optional) The possible operations that may be preformed on this field. The possible values are "add" and/or "delete". If both operations are possible then they should be provided as a space separated list. The "add" operations indicates that there may be multiple values for this field and the user may add to the set one at a time. The front-end should render a button that enables the user to add more fields to the set. The button must be named the field name appended with the string "_add", thus if the field's name is "firstName" the button must be called "firstName_add".The "delete" operation indicates that there may be multiple values for this field each of which may be removed from the set. The front-end should render a checkbox by each field value, except for the first, The checkbox must be named the field name appended with the string "_selected", thus if the field's name is "firstName" the checkbox must be called "firstName_selected" and the value of each successive checkbox should be the field name. The front-end must also render a delete button. The delete button name must be the field's name appended with the string "_delete".</li>
|
||||
<li><b>rows</b>: (optional) The default number of rows that the text area should span. This applies only to textarea field types.</li>
|
||||
<li><b>size</b>: (optional) The default size for a field. This applies to text, password, and select field types.</li>
|
||||
</ul>
|
||||
@@ -1830,7 +1830,7 @@ Example needed.
|
||||
|
||||
<p>Metadata Reference Element</p>
|
||||
|
||||
<p><em>reference</em> is a reference element used to access information stored in an extarnal metadata file. The <em>url</em> attribute is used to locate the external metadata file. The <em>type</em> attribute provides a short limited description of the referenced object's type.</p>
|
||||
<p><em>reference</em> is a reference element used to access information stored in an external metadata file. The <em>url</em> attribute is used to locate the external metadata file. The <em>type</em> attribute provides a short limited description of the referenced object's type.</p>
|
||||
|
||||
<p><em>reference</em> elements can be both contained by <em>includeSet</em> elements and contain <em>includeSets</em> themselves, making the structure recursive.</p>
|
||||
|
||||
@@ -1969,7 +1969,7 @@ Example needed.
|
||||
|
||||
<p>Metadata Element</p>
|
||||
|
||||
<p>The <em>repositoryMeta</em> element contains metadata refernces about the repositories used in the used or referenced in the document. It can contain any number of <em>repository</em> elements.</p>
|
||||
<p>The <em>repositoryMeta</em> element contains metadata references about the repositories used in the used or referenced in the document. It can contain any number of <em>repository</em> elements.</p>
|
||||
|
||||
<p>See the <em>repository</em> tag entry for more information on the structure of <em>repository</em> elements.</p>
|
||||
|
||||
@@ -2169,7 +2169,7 @@ Example needed.
|
||||
<pre class="code-java">
|
||||
<pageMeta>
|
||||
|
||||
<metadata element=<span class="code-quote">"title"</span>>Examlpe DRI
|
||||
<metadata element=<span class="code-quote">"title"</span>>Example DRI
|
||||
page</metadata>
|
||||
|
||||
<metadata
|
||||
@@ -2353,10 +2353,7 @@ Example needed.
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
<p>
|
||||
|
||||
<xref target=<span class="code-quote">"/url/link/target"</span>>This text is shown as a
|
||||
link.</xref>
|
||||
|
||||
<xref target=<span class="code-quote">"/url/link/target"</span>>This text is shown as a link.</xref>
|
||||
</p>
|
||||
</pre>
|
||||
</div></div>
|
||||
@@ -2383,7 +2380,7 @@ Example needed.
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -1039,7 +1039,7 @@ aip.disseminate.rightsMD = DSpaceDepositLicense:DSPACE_DEPLICENSE, \
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,27 +16,31 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Mar 07, 2011 by <font color="#0050B2">awoods</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="DSpaceServicesFramework-DSpaceServicesFramework"></a>DSpace Services Framework</h1>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292438324227 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292438324227 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292438324227 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1299540788527 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1299540788527 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1299540788527 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292438324227'>
|
||||
/*]]>*/</style><div class='rbtoc1299540788527'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#DSpaceServicesFramework-ConfiguringEventListeners'>Configuring Event Listeners</a></li>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#DSpaceServicesFramework-ArchitecturalOverview'>Architectural Overview</a></li>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#DSpaceServicesFramework-ArchitecturalOverview'>Architectural Overview</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>2.1</span> <a href='#DSpaceServicesFramework-DSpaceKernel'>DSpace Kernel</a></li>
|
||||
<li><span class='TOCOutline'>1.1</span> <a href='#DSpaceServicesFramework-DSpaceKernel'>DSpace Kernel</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>2.1.1</span> <a href='#DSpaceServicesFramework-Kernelregistration'>Kernel registration</a></li>
|
||||
<li><span class='TOCOutline'>2.1.2</span> <a href='#DSpaceServicesFramework-KernelStartupandAccess'>Kernel Startup and Access</a></li>
|
||||
<li><span class='TOCOutline'>1.1.1</span> <a href='#DSpaceServicesFramework-Kernelregistration'>Kernel registration</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>2.2</span> <a href='#DSpaceServicesFramework-ServiceManager'>Service Manager</a></li>
|
||||
<li><span class='TOCOutline'>1.2</span> <a href='#DSpaceServicesFramework-ServiceManager'>Service Manager</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#DSpaceServicesFramework-BasicUsage'>Basic Usage</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>2.1</span> <a href='#DSpaceServicesFramework-StandaloneApplications'> Standalone Applications</a></li>
|
||||
<li><span class='TOCOutline'>2.2</span> <a href='#DSpaceServicesFramework-ApplicationFrameworks%28Spring%2CGuice%2Cetc.%29'>Application Frameworks (Spring, Guice, etc.)</a></li>
|
||||
<li><span class='TOCOutline'>2.3</span> <a href='#DSpaceServicesFramework-WebApplications'>Web Applications</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>3</span> <a href='#DSpaceServicesFramework-ProvidersandPlugins'>Providers and Plugins</a></li>
|
||||
<ul>
|
||||
@@ -50,32 +54,14 @@ div.rbtoc1292438324227 li {margin-left: 0px;padding-left: 0px;}
|
||||
<li><span class='TOCOutline'>4.3</span> <a href='#DSpaceServicesFramework-EventService'>EventService</a></li>
|
||||
<li><span class='TOCOutline'>4.4</span> <a href='#DSpaceServicesFramework-RequestService'>RequestService</a></li>
|
||||
<li><span class='TOCOutline'>4.5</span> <a href='#DSpaceServicesFramework-SessionService'>SessionService</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>5</span> <a href='#DSpaceServicesFramework-Examples'>Examples</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>5.1</span> <a href='#DSpaceServicesFramework-ConfiguringEventListeners'>Configuring Event Listeners</a></li>
|
||||
</ul>
|
||||
</ul></div>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-ConfiguringEventListeners"></a>Configuring Event Listeners</h2>
|
||||
|
||||
<p>Event Listeners can be created by overriding the the EventListener interface:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
<?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?>
|
||||
<beans>
|
||||
|
||||
<bean id=<span class="code-quote">"dspace"</span> class=<span class="code-quote">"org.dspace.utils.DSpace"</span>/>
|
||||
|
||||
<bean id=<span class="code-quote">"dspace.eventService"</span>
|
||||
factory-bean=<span class="code-quote">"dspace"</span>
|
||||
factory-method=<span class="code-quote">"getEventService"</span>/>
|
||||
|
||||
<bean class=<span class="code-quote">"org.my.EventListener"</span>>
|
||||
<property name=<span class="code-quote">"eventService"</span> >
|
||||
<ref bean=<span class="code-quote">"dspace.eventService"</span>/>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
</pre>
|
||||
</div></div>
|
||||
<p>The DSpace Services Framework is a backporting of the DSpace 2.0 Development Group's work in creating a reasonable and abstractable "Core Services" layer for DSpace components to operate within. The Services Framework represents a "best practice" for new DSpace architecture and implementation of extensions to the DSpace application. DSpace Services are best described as a "Simple Registry" where plugins <del>FIXME</del>. The DS2 (<a href="http://wiki.dspace.org/index.php/DSpace_2.0">DSpace 2.0</a>) core services are the main services that make up a DS2 system. These includes services for things like user and permissions management and storage and caching. These services can be used by any developer writing DS2 plugins (e.g. statistics), providers (e.g. authentication), or user interfaces (e.g. JSPUI).</p>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-ArchitecturalOverview"></a>Architectural Overview</h2>
|
||||
|
||||
@@ -85,11 +71,27 @@ div.rbtoc1292438324227 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
<h4><a name="DSpaceServicesFramework-Kernelregistration"></a>Kernel registration</h4>
|
||||
|
||||
<p>The kernel will automatically register itself as an MBean in when it starts up so that it can be managed. It allows startup and shutdown and provides direct access to the ServiceManager and the ConfigurationService. All the other core services can be retrieved from the ServiceManager by their APIs. <span class="image-wrap" style="display: block; text-align: center"><img src="attachments/22022824/21954868.png" style="border: 0px solid black"/></span></p>
|
||||
<p>The kernel will automatically register itself as an MBean when it starts up so that it can be managed via <a href="http://www.oracle.com/technetwork/java/javase/tech/docs-jsp-135989.html">JMX</a>. It allows startup and shutdown and provides direct access to the ServiceManager and the ConfigurationService. All the other core services can be retrieved from the ServiceManager by their APIs. <span class="image-wrap" style="display: block; text-align: center"><img src="attachments/22022824/21954868.png" style="border: 0px solid black"/></span></p>
|
||||
|
||||
<h4><a name="DSpaceServicesFramework-KernelStartupandAccess"></a>Kernel Startup and Access</h4>
|
||||
<h3><a name="DSpaceServicesFramework-ServiceManager"></a>Service Manager</h3>
|
||||
|
||||
<p>The kernel can be started and accessed through the use of Servlet Filter/ContextListeners which are provided as part of the DSpace 2 utilities. Developers don't need to understand what is going on behind the scenes and can simply write their applications and package them as webapps and take advantage of the services which are offered by DSpace 2. Access to the kernel is provided via the Kernel Manager and the DSpace object which will locate the kernel object and allow it to be used. </p>
|
||||
|
||||
<p>The ServiceManager abstracts the concepts of service lookups and lifecycle control. It also manages the configuration of services by allowing properties to be pushed into the services as they start up (mostly from the ConfigurationService). The ServiceManagerSystem abstraction allows the DSpace ServiceManager to use different systems to manage its services. The current implementations include Spring and Guice. This allows DSpace 2 to have very little service management code but still be flexible and not tied to specific technology. Developers who are comfortable with those technologies can consume the services from a parent Spring ApplicationContext or a parent Guice Module. The abstraction also means that we can replace Spring/Guice or add other dependency injection systems later without requiring developers to change their code. The interface provides simple methods for looking up services by interface type for developers who do not want to have to use or learn a dependency injection system or are using one which is not currently supported.</p>
|
||||
|
||||
|
||||
<p><span class="image-wrap" style="display: block; text-align: center"><img src="attachments/22022824/21954867.png" height="332" width="445" style="border: 0px solid black"/></span></p>
|
||||
|
||||
<p>The DS2 kernel is compact so it can be completely started up in a unit test (technically integration test) environment. (This is how we test the kernel and core services currently). This allows developers to execute code against a fully functional kernel while developing and then deploy their code with high confidence.</p>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-BasicUsage"></a>Basic Usage</h2>
|
||||
|
||||
<p>To use the Framework you must begin by instantiating and starting a DSpaceKernel. The kernel will give you references to the ServiceManager and the ConfigurationService. The ServiceManager can be used to get references to other services and to register services which are not part of the core set.</p>
|
||||
|
||||
<p>Access to the kernel is provided via the Kernel Manager through the DSpace object, which will locate the kernel object and allow it to be used.</p>
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-StandaloneApplications"></a><a name="DSpaceServicesFramework-standalone"></a>Standalone Applications</h3>
|
||||
|
||||
<p>For standalone applications, access to the kernel is provided via the Kernel Manager and the DSpace object which will locate the kernel object and allow it to be used.</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
/* Instantiate the Utility <span class="code-object">Class</span> */
|
||||
@@ -100,22 +102,30 @@ DSpace dspace = <span class="code-keyword">new</span> DSpace();
|
||||
ServiceManager manager = dspace.getServiceManager();
|
||||
|
||||
|
||||
/* Or access by convenience method <span class="code-keyword">for</span> <span class="code-keyword">default</span> services */
|
||||
/* Or access by convenience method <span class="code-keyword">for</span> core services */
|
||||
EventService service = dspace.getEventService();
|
||||
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>The DSpace launcher (</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">bin/dspace</pre>
|
||||
</div></div>
|
||||
<p>) initializes a kernel before dispatching to the selected command.</p>
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-ServiceManager"></a>Service Manager</h3>
|
||||
<h3><a name="DSpaceServicesFramework-ApplicationFrameworks%28Spring%2CGuice%2Cetc.%29"></a>Application Frameworks (Spring, Guice, etc.)</h3>
|
||||
|
||||
<p>Similar to <a href="#DSpaceServicesFramework-standalone">Standalone Applications</a>, but you can use your framework to instantiate an <tt>org.dspace.utils.DSpace</tt> object.</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-xml">
|
||||
<span class="code-tag"><bean id=<span class="code-quote">"dspace"</span> class=<span class="code-quote">"org.dspace.utils.DSpace"</span>/></span>
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>The ServiceManager abstracts the concepts of service lookups and lifecycle control. It also manages the configuration of services by allowing properties to be pushed into the services as they start up (mostly from the ConfigurationService). The ServiceManagerSystem abstraction allows the DSpace ServiceManager to use different systems to manage it's services. The current implementations include Spring and Guice. This allows DSpace 2 to have very little service management code but still be flexible and not tied to specific technology. Developers who are comfortable with those technologies can consume the services from a parent Spring ApplicationContext or a parent Guice Module. The abstraction also means that we can replace Spring/Guice or add other dependency injection systems later without requiring developers to change their code. The interface provides simple methods for looking up services by interface type for developers who do not want to have to use or learn a dependency injection system or are using one which is not currently supported.</p>
|
||||
<h3><a name="DSpaceServicesFramework-WebApplications"></a>Web Applications</h3>
|
||||
|
||||
<p>In web applications, the kernel can be started and accessed through the use of Servlet Filter/ContextListeners which are provided as part of the DSpace 2 utilities. Developers don't need to understand what is going on behind the scenes and can simply write their applications and package them as webapps and take advantage of the services which are offered by DSpace 2.</p>
|
||||
|
||||
<p><span class="image-wrap" style="display: block; text-align: center"><img src="attachments/22022824/21954867.png" height="332" width="445" style="border: 0px solid black"/></span></p>
|
||||
|
||||
<p>The DS2 kernel is compact so it can be completely started up in a unit test (technically integration test) environment (this is who we test the kernel and core services currently). This allows developers to execute code against a fully functional kernel while developing and then deploy their code with high confidence.</p>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-ProvidersandPlugins"></a>Providers and Plugins</h2>
|
||||
|
||||
@@ -123,20 +133,16 @@ EventService service = dspace.getEventService();
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-Activators"></a>Activators</h3>
|
||||
|
||||
<p>Developers can use an activator to allow the system to startup their service or provider. It is a simple interface with 2 methods which are called to startup the provider(s) and later to shut them down. These simply allow a developer to run some arbitrary code in order to create and register services if desired. It is the method provided to add plugins directly to the system via configuration as the activators are just listed in the configuration file and the system starts them up in the order it finds them.</p>
|
||||
<p>Developers can provide an activator to allow the system to startup their service or provider. It is a simple interface with 2 methods which are called by the ServiceManager to startup the provider(s) and later to shut them down. These simply allow a developer to run some arbitrary code in order to create and register services if desired. It is the method provided to add plugins directly to the system via configuration as the activators are just listed in the configuration file and the system starts them up in the order it finds them.</p>
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-ProviderStacks"></a>Provider Stacks</h3>
|
||||
|
||||
<p>Utilities are provided to assist with stacking and ordering providers. The priority is handled via a priority number such that 1 is the highest priority and something like 10 would be lower. 0 indicates that priority is not important for this service and can be used to ensure the provider is placed at or near the end without having to set some arbitrarily high number.</p>
|
||||
<p>Utilities are provided to assist with stacking and ordering providers. Ordering is handled via a priority number such that 1 is the highest priority and something like 10 would be lower. 0 indicates that priority is not important for this service and can be used to ensure the provider is placed at or near the end without having to set some arbitrarily high number.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>The DSpace Services Framework is a backporting of the DSpace 2.0 Development Groups work in creating a reasonable and abstractable "Core Services" layer for DSpace components to operate within. The Services Framework represents a "best practices" for new DSpace architecture and implementation of exentsions to the DSpace application. DSpace Services are best described as a "Simple Registry" where plugins. The DS2 (<a href="http://wiki.dspace.org/index.php/DSpace_2.0">DSpace 2.0</a>) core services are the main services that make up a DS2 system. These includes services for things like user and permissions management and storage and caching. These services can be used by any developer writing DS2 plugins (e.g. statistics), providers (e.g. Authn), or user interfaces (e.g. JSPUI).</p>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-CoreServices"></a>Core Services</h2>
|
||||
|
||||
<p>The core services are all behind APIs so that they can be reimplemented without affecting developers who are using the services. Most of the services have plugin/provider points so that customizations can be added into the system without touching the core services code. For example, let's say a deployer has a specialized authentication system and wants to manage the authentication calls which come into the system. The implementor can simply implement an AuthenticationProvider and then register it with the DS2 kernel ServiceManager. This can be done at any time and does not have to be done during Kernel startup. This allows providers to be swapped out at runtime without disrupting the DS2 service if desired. It can also speed up development by allowing quick hot redeploys of code during development.</p>
|
||||
<p>The core services are all behind APIs so that they can be reimplemented without affecting developers who are using the services. Most of the services have plugin/provider points so that customizations can be added into the system without touching the core services code. For example, let's say a deployer has a specialized authentication system and wants to manage the authentication calls which come into the system. The implementor can simply implement an AuthenticationProvider and then register it with the DS2 kernel's ServiceManager. This can be done at any time and does not have to be done during Kernel startup. This allows providers to be swapped out at runtime without disrupting the DS2 service if desired. It can also speed up development by allowing quick hot redeploys of code during development.</p>
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-CachingService"></a>Caching Service</h3>
|
||||
|
||||
@@ -144,7 +150,7 @@ EventService service = dspace.getEventService();
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-ConfigurationService"></a>Configuration Service</h3>
|
||||
|
||||
<p>The ConfigurationService controls the external and internal configuration of DSpace 2. It reads in properties files when the kernel starts up and merges them with any dynamic configuration data which is available from the services. The service allows settings to be updated as the system is running and also provides listeners which allow services to know when their configuration settings have changed and take action if desired. It is the central point to access and manage all the configuration settings in DSpace 2.</p>
|
||||
<p>The ConfigurationService controls the external and internal configuration of DSpace 2. It reads Properties files when the kernel starts up and merges them with any dynamic configuration data which is available from the services. This service allows settings to be updated as the system is running, and also defines listeners which allow services to know when their configuration settings have changed and take action if desired. It is the central point to access and manage all the configuration settings in DSpace 2.</p>
|
||||
|
||||
<p>Manages the configuration of the DSpace 2 system. Can be used to manage configuration for providers and plugins also.</p>
|
||||
|
||||
@@ -155,13 +161,65 @@ EventService service = dspace.getEventService();
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-RequestService"></a>RequestService</h3>
|
||||
|
||||
<p>In DS2 a request is the concept of a request (HTTP) or an atomic transaction in the system. It is likely to be an HTTP request in many cases but it does not have to be. This service provides the core services with a way to manage atomic transactions so that when a request comes in which requires mutliple things to happen they can either all suceed or all fail without each service attempting to manage this independently. In a nutshell this simply allows identification of the current request and the ability to discover if it succeeded or failed when it ends. Nothing in the system will enforce usage of the service but we encourage developers who are interacting with the system to make use of this service so they know if the request they are participating in with has succeeded or failed and take appropriate actions.</p>
|
||||
<p>In DS2 a request is an atomic transaction in the system. It is likely to be an HTTP request in many cases but it does not have to be. This service provides the core services with a way to manage atomic transactions so that when a request comes in which requires multiple things to happen they can either all succeed or all fail without each service attempting to manage this independently. In a nutshell this simply allows identification of the current request and the ability to discover if it succeeded or failed when it ends. Nothing in the system will enforce usage of the service, but we encourage developers who are interacting with the system to make use of this service so they know if the request they are participating in with has succeeded or failed and can take appropriate actions.</p>
|
||||
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-SessionService"></a>SessionService</h3>
|
||||
|
||||
<p>In DS2 a session is like an HttpSession (and generally is actually one) so this service is here to allow developers to find information about the current session and to access information in it. The session identifies the current user (if authenticated) so it also serves as a way to track user sessions. Since we use HttpSession directly it is easy to mirror sessions across multiple servers in order to allow for no-interruption failover for users when servers go offline.</p>
|
||||
|
||||
<h2><a name="DSpaceServicesFramework-Examples"></a>Examples</h2>
|
||||
|
||||
<h3><a name="DSpaceServicesFramework-ConfiguringEventListeners"></a>Configuring Event Listeners</h3>
|
||||
|
||||
<p>Event Listeners can be created by overriding the the EventListener interface:</p>
|
||||
|
||||
<p>In Spring:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-xml">
|
||||
<span class="code-tag"><?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?></span>
|
||||
<span class="code-tag"><beans></span>
|
||||
|
||||
<span class="code-tag"><bean id=<span class="code-quote">"dspace"</span> class=<span class="code-quote">"org.dspace.utils.DSpace"</span>/></span>
|
||||
|
||||
<bean id=<span class="code-quote">"dspace.eventService"</span>
|
||||
factory-bean=<span class="code-quote">"dspace"</span>
|
||||
factory-method=<span class="code-quote">"getEventService"</span>/>
|
||||
|
||||
<span class="code-tag"><bean class=<span class="code-quote">"org.my.EventListener"</span>></span>
|
||||
<span class="code-tag"><property name=<span class="code-quote">"eventService"</span> ></span>
|
||||
<span class="code-tag"><ref bean=<span class="code-quote">"dspace.eventService"</span>/></span>
|
||||
<span class="code-tag"></property></span>
|
||||
<span class="code-tag"></bean></span>
|
||||
<span class="code-tag"></beans></span>
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>(org.my.EventListener will need to register itself with the EventService, for which it is passed a reference to that service via the eventService property.)</p>
|
||||
|
||||
<p>or in Java:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
DSpace dspace = <span class="code-keyword">new</span> DSpace();
|
||||
|
||||
EventService eventService = dspace.getEventService();
|
||||
|
||||
EventListener listener = <span class="code-keyword">new</span> org.my.EventListener();
|
||||
eventService.registerEventListener(listener);
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>(This registers the listener externally – the listener code assumes it is registered.)</p>
|
||||
|
||||
|
||||
<p><em>TODO: examples in Guice</em></p>
|
||||
|
||||
<p><em>TODO: examples of implementing and registering configurations in Spring and Guice</em></p>
|
||||
|
||||
<p><em>TBS: how we did X before : how we do it using the Framework</em></p>
|
||||
|
||||
<br/>
|
||||
<div class="tabletitle">
|
||||
<a name="attachments">Attachments:</a>
|
||||
@@ -190,7 +248,7 @@ EventService service = dspace.getEventService();
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,32 +16,115 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Nov 17, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Jan 14, 2011 by <font color="#0050B2">benbosman</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="DSpaceStatistics-DSpaceStatistics"></a>DSpace Statistics</h1>
|
||||
|
||||
<p>DSpace uses the Apache Solr application underlaying the statistics. There is no need to download any separate software. All the necessary software is included.</p>
|
||||
<p>DSpace 1.6 and newer versions uses the Apache SOLR application underlying the statistics. SOLR enables performant searching and adding to vast amounts of (usage) data.<br/>
|
||||
Unlike previous versions, enabling statistics in DSpace does not require additional installation or customization. All the necessary software is included.</p>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1290016976036 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1290016976036 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1290016976036 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1295025180569 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1295025180569 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1295025180569 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1290016976036'>
|
||||
/*]]>*/</style><div class='rbtoc1295025180569'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#DSpaceStatistics-UsageEventLoggingandUsageStatisticsGathering'>Usage Event Logging and Usage Statistics Gathering</a></li>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#DSpaceStatistics-ConfigurationsettingsforStatistics'>Configuration settings for Statistics</a></li>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#DSpaceStatistics-Whatisexactlybeinglogged%3F'>What is exactly being logged ?</a></li>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#DSpaceStatistics-WebuserinterfaceforDSpacestatistics'>Web user interface for DSpace statistics</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>2.1</span> <a href='#DSpaceStatistics-'></a></li>
|
||||
<li><span class='TOCOutline'>2.2</span> <a href='#DSpaceStatistics-UpgradeProcessforStatistics.'>Upgrade Process for Statistics.</a></li>
|
||||
<li><span class='TOCOutline'>2.1</span> <a href='#DSpaceStatistics-Homepage'>Home page</a></li>
|
||||
<li><span class='TOCOutline'>2.2</span> <a href='#DSpaceStatistics-Communityhomepage'>Community home page</a></li>
|
||||
<li><span class='TOCOutline'>2.3</span> <a href='#DSpaceStatistics-Collectionhomepage'>Collection home page</a></li>
|
||||
<li><span class='TOCOutline'>2.4</span> <a href='#DSpaceStatistics-Itemhomepage'>Item home page</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>3</span> <a href='#DSpaceStatistics-UsageEventLoggingandUsageStatisticsGathering'>Usage Event Logging and Usage Statistics Gathering</a></li>
|
||||
<li><span class='TOCOutline'>4</span> <a href='#DSpaceStatistics-ConfigurationsettingsforStatistics'>Configuration settings for Statistics</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>4.1</span> <a href='#DSpaceStatistics-UpgradeProcessforStatistics.'>Upgrade Process for Statistics.</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>5</span> <a href='#DSpaceStatistics-Oldersettingthatarenotrelatedtothenew1.6Statistics'>Older setting that are not related to the new 1.6 Statistics</a></li>
|
||||
<li><span class='TOCOutline'>6</span> <a href='#DSpaceStatistics-StatisticsAdministration'>Statistics Administration</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>6.1</span> <a href='#DSpaceStatistics-ConvertingolderDSpacelogsintoSOLRusagedatahttps%3A%2F%2Fwiki.duraspace.org%2Fdisplay%2FDSDOC%2FSystemAdministration%23SystemAdministrationDSpaceLogConverter'> Converting older DSpace logs into SOLR usage data</a></li>
|
||||
<li><span class='TOCOutline'>6.2</span> <a href='#DSpaceStatistics-StatisticsClientUtilityhttps%3A%2F%2Fwiki.duraspace.org%2Fdisplay%2FDSDOC%2FSystemAdministration%23SystemAdministrationClientStatistics'> Statistics Client Utility</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>7</span> <a href='#DSpaceStatistics-StatisticsdifferencesbetweenDSpace1.6.xand1.7.0'>Statistics differences between DSpace 1.6.x and 1.7.0</a></li>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>7.1</span> <a href='#DSpaceStatistics-SOLRoptimizationadded'>SOLR optimization added</a></li>
|
||||
<li><span class='TOCOutline'>7.2</span> <a href='#DSpaceStatistics-SOLRAutocommit'>SOLR Autocommit</a></li>
|
||||
</ul>
|
||||
<li><span class='TOCOutline'>3</span> <a href='#DSpaceStatistics-Oldersettingthatarenocurrentlyutilizedinthereports'>Older setting that are no currently utilized in the reports</a></li>
|
||||
</ul></div>
|
||||
|
||||
<h2><a name="DSpaceStatistics-Whatisexactlybeinglogged%3F"></a>What is exactly being logged ?</h2>
|
||||
|
||||
<p>Each time a page or file gets requested, this request is being logged. The logging happens at the server side, and doesn't require a javascript like Google Analytics does, to provide usage data.</p>
|
||||
|
||||
<p>Definition of which fields are to be stored happens in the file dspace/solr/statistics/conf/schema.xml.<br/>
|
||||
Some example fields, that can be stored per usage event, include:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java"><field name=<span class="code-quote">"type"</span> type=<span class="code-quote">"integer"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">true</span>"</span> />
|
||||
<field name=<span class="code-quote">"id"</span> type=<span class="code-quote">"integer"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">true</span>"</span> />
|
||||
<field name=<span class="code-quote">"ip"</span> type=<span class="code-quote">"string"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">false</span>"</span> />
|
||||
<field name=<span class="code-quote">"time"</span> type=<span class="code-quote">"date"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">true</span>"</span> />
|
||||
<field name=<span class="code-quote">"epersonid"</span> type=<span class="code-quote">"integer"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">false</span>"</span> />
|
||||
<field name=<span class="code-quote">"country"</span> type=<span class="code-quote">"string"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">false</span>"</span> />
|
||||
<field name=<span class="code-quote">"city"</span> type=<span class="code-quote">"string"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">false</span>"</span>/>
|
||||
<field name=<span class="code-quote">"owningComm"</span> type=<span class="code-quote">"integer"</span> indexed=<span class="code-quote">"<span class="code-keyword">true</span>"</span> stored=<span class="code-quote">"<span class="code-keyword">true</span>"</span> required=<span class="code-quote">"<span class="code-keyword">false</span>"</span> multiValued=<span class="code-quote">"<span class="code-keyword">true</span>"</span> />
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>The combination of <a href="https://wiki.duraspace.org/display/DSDOC/Business+Logic+Layer#BusinessLogicLayer-Constants">type</a> and id determine which resource (either community, collection, item page or file download) has been requested.</p>
|
||||
|
||||
<h2><a name="DSpaceStatistics-WebuserinterfaceforDSpacestatistics"></a>Web user interface for DSpace statistics</h2>
|
||||
|
||||
<p>In the XMLUI, statistics can be accessed from the lower end of the navigation menu. In the JSPUI, a view statistics button appears on the bottom of pages for which statistics are available.</p>
|
||||
|
||||
<p>If you are not seeing these links or buttons, it's likely that they are only enabled for administrators in your installation. Change the configuration parameter "statistics.item.authorization.admin" to false in order to make statistics visible for all repository visitors.</p>
|
||||
|
||||
<h3><a name="DSpaceStatistics-Homepage"></a>Home page</h3>
|
||||
|
||||
<p>Starting from the repository homepage, the statistics page displays the top 10 most popular items of the entire repository.</p>
|
||||
|
||||
<h3><a name="DSpaceStatistics-Communityhomepage"></a>Community home page</h3>
|
||||
|
||||
<p>The following statistics are available for the community home pages:</p>
|
||||
<ul>
|
||||
<li>Total visits of the current community home page</li>
|
||||
<li>Visits of the community home page over a timespan of the last 7 months</li>
|
||||
<li>Top 10 country from where the visits originate</li>
|
||||
<li>Top 10 cities from where the visits originate</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a name="DSpaceStatistics-Collectionhomepage"></a>Collection home page</h3>
|
||||
|
||||
<p>The following statistics are available for the collection home pages:</p>
|
||||
<ul>
|
||||
<li>Total visits of the current collection home page</li>
|
||||
<li>Visits of the collection home over a timespan of the last 7 months</li>
|
||||
<li>Top 10 country from where the visits originate</li>
|
||||
<li>Top 10 cities from where the visits originate</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a name="DSpaceStatistics-Itemhomepage"></a>Item home page</h3>
|
||||
|
||||
<p>The following statistics are available for the item home pages:</p>
|
||||
<ul>
|
||||
<li>Total visits of the item</li>
|
||||
<li>Total visits for the bitstreams attached to the item</li>
|
||||
<li>Visits of the item over a timespan of the last 7 months</li>
|
||||
<li>Top 10 country views from where the visits originate</li>
|
||||
<li>Top 10 cities from where the visits originate</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2><a name="DSpaceStatistics-UsageEventLoggingandUsageStatisticsGathering"></a>Usage Event Logging and Usage Statistics Gathering</h2>
|
||||
|
||||
<p>The DSpace Statistics Implementation is a Client/Server architecture based on Solr for collecting usage events in the JSPUI and XMLUI user interface applications of DSpace. Solr runs as a separate webapplication and an instance of Apache Http Client is utilized to allow parallel requests to log statistics events into this Solr instance. The Usage Event framework has a couple EventListeners installed which assist in <font color="red">[rest of sentence missing? - Kim]</font></p>
|
||||
<p>The DSpace Statistics Implementation is a Client/Server architecture based on Solr for collecting usage events in the JSPUI and XMLUI user interface applications of DSpace. Solr runs as a separate webapplication and an instance of Apache Http Client is utilized to allow parallel requests to log statistics events into this Solr instance. </p>
|
||||
|
||||
<h2><a name="DSpaceStatistics-ConfigurationsettingsforStatistics"></a>Configuration settings for Statistics</h2>
|
||||
|
||||
@@ -50,152 +133,220 @@ div.rbtoc1290016976036 li {margin-left: 0px;padding-left: 0px;}
|
||||
<div class='table-wrap'>
|
||||
<table class='confluenceTable'><tbody>
|
||||
<tr>
|
||||
<th class='confluenceTh'> Property Name </th>
|
||||
<th class='confluenceTh'> Default Value </th>
|
||||
<th class='confluenceTh'> Type </th>
|
||||
<th class='confluenceTh'> Description </th>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.log.server </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.log.server </td>
|
||||
<td class='confluenceTd'> ${dspace.baseUrl}/solr/statistics </td>
|
||||
<td class='confluenceTd'> String </td>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.log.server = <a href="http://127.0.0.1/solr/statistics">http://127.0.0.1/solr/statistics</a> <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> Is used by the SolrLogger Client class to connect to the Solr server over http and perform updates and queries. In most cases, this can (and should) be set to localhost (or 127.0.0.1). <br class="atl-forced-newline" />
|
||||
<br class="atl-forced-newline" />
|
||||
To determine the correct path, you can use a tool like <tt>wget</tt> to see where Solr is responding on your server. For example, you'd want to send a query to Solr like the following: <br class="atl-forced-newline" />
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">wget http:<span class="code-comment">//127.0.0.1/solr/statistics/select?q=*:*</span></pre>
|
||||
</div></div>
|
||||
<p>Assuming you get an HTTP 200 OK response, then you should set <tt>solr.log.server</tt> to the '/statistics' URL of 'http://127.0.0.1/solr/statistics' (essentially removing the "/select?q=<b>:</b>" query off the end of the responding URL.)</p></td>
|
||||
<p>Assuming you get an HTTP 200 OK response, then you should set <tt>solr.log.server</tt> to the '/statistics' URL of 'http://127.0.0.1/solr/statistics' (essentially removing the "/select?q=<b>:</b>" query off the end of the responding URL.) </p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.spiderips.urls <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.spiderips.urls </td>
|
||||
<td class='confluenceTd'> <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
http:<span class="code-comment">//iplists.com/google.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/inktomi.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/lycos.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/infoseek.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/altavista.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/excite.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/misc.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/non_engines.txt</span>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.spiderips.urls =
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">http:<span class="code-comment">//iplists.com/google.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/inktomi.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/lycos.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/infoseek.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/altavista.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/excite.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/misc.txt, \
|
||||
</span>http:<span class="code-comment">//iplists.com/non_engines.txt</span>
|
||||
</pre>
|
||||
</div></div> </td>
|
||||
<td class='confluenceTd'> String </td>
|
||||
</div></div>
|
||||
<p> <br class="atl-forced-newline" /> </p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> List of URLs to download spiders files into [dspace]/config/spiders. These files contain lists of known spider IPs and are utilized by the SolrLogger to flag usage events with an "isBot" field, or ignore them entirely. <br class="atl-forced-newline" />
|
||||
<br class="atl-forced-newline" />
|
||||
The "stats-util" command can be used to force an update of spider files, regenerate "isBot" fields on indexed events, and delete spiders from the index. For usage, run: <br class="atl-forced-newline" />
|
||||
<br class="atl-forced-newline" />
|
||||
<br class="atl-forced-newline" />
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
dspace stats-util -h
|
||||
<pre class="code-java">dspace stats-util -h
|
||||
</pre>
|
||||
</div></div>
|
||||
<p>from your [dspace]/bin directory </p></td>
|
||||
<p>from your [dspace]/bin directory <br class="atl-forced-newline" /> </p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.dbfile <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> ${dspace.dir}/config/GeoLiteCity.dat </td>
|
||||
<td class='confluenceTd'> String <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.dbfile = ${dspace.dir}/config/GeoLiteCity.dat <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> The following referes to the GeoLiteCity database file utilized by the LocationUtils to calculate the location of client requests based on IP address. During the Ant build process (both fresh_install and update) this file will be downloaded from <a href="http://www.maxmind.com/app/geolitecity">http://www.maxmind.com/app/geolitecity</a> if a new version has been published or it is absent from your [dspace]/config directory. <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.resolver.timeout </td>
|
||||
<td class='confluenceTd'> 200 </td>
|
||||
<td class='confluenceTd'> Integer </td>
|
||||
<td class='confluenceTd'> Timeout in milliseconds for DNS resolution of origin hosts/IPs. Setting this value too high may result in solr exhausting your connection pool. </td>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.resolver.timeout <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.resolver.timeout = 200 <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> Timeout in milliseconds for DNS resolution of origin hosts/IPs. Setting this value too high may result in solr exhausting your connection pool. <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> useProxies <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> true <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> boolean <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> Will cause Statistics loging to look for X-Forward URI to detect clients IP that have accessed it through a Proxy service. Allows detection of client IP when accessing DSpace. [Note: This setting is found in the DSpace Logging sesction of dspace.cfg] </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> statistics.item.authorization.admin </td>
|
||||
<td class='confluenceTd'> true <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> boolean <br class="atl-forced-newline" /> </td>
|
||||
<td class='confluenceTd'> Enables access control restriction on DSpace Statistics pages, Restrictions are based on access rights to Community, Collection and Item Pages. This will require the user to sign on to see that statistics. Setting the statistics to "false" will make them publicly available. </td>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> useProxies = true <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.statistics.logBots </td>
|
||||
<td class='confluenceTd'> true </td>
|
||||
<td class='confluenceTd'> boolean </td>
|
||||
<td class='confluenceTd'> If false, and IP is detected as a spider, the event is not logged. <br class="atl-forced-newline" />
|
||||
If true, the event will be logged with the "isBot" field set to true. <br class="atl-forced-newline" />
|
||||
(see solr.statistics.query.filter.* for query filter options) </td>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> Will cause Statistics logging to look for X-Forward URI to detect clients IP that have accessed it through a Proxy service (e.g. the Apache mod_proxy). Allows detection of client IP when accessing DSpace. [Note: This setting is found in the DSpace Logging section of dspace.cfg] <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.spiderIp </td>
|
||||
<td class='confluenceTd'> false </td>
|
||||
<td class='confluenceTd'> boolean </td>
|
||||
<td class='confluenceTd'> If true, statistics queries will filter out spider IPs -- use with caution, as this often results in extremely long query strings. </td>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> statistics.item.authorization.admin <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.isBot </td>
|
||||
<td class='confluenceTd'> true </td>
|
||||
<td class='confluenceTd'> boolean </td>
|
||||
<td class='confluenceTd'> If true, statistics queries will filter out events flagged with the "isBot" field. This is the recommended method of filtering spiders from statistics. </td>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> statistics.item.authorization.admin = true <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> When set to true, only general administrators, collection and community administrators are able to access the statistics from the web user interface. As a result, the links to access statistics are hidden for non logged-in admin users. Setting this property to "false" will display the links to access statistics to anyone, making them publicly available. <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.statistics.logBots <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.statistics.logBots = true <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> When this property is set to false, and IP is detected as a spider, the event is not logged. <br class="atl-forced-newline" />
|
||||
When this property is set to true, the event will be logged with the "isBot" field set to true. <br class="atl-forced-newline" />
|
||||
(see solr.statistics.query.filter.* for query filter options) <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.spiderIp <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.spiderIp = false <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> If true, statistics queries will filter out spider IPs -- use with caution, as this often results in extremely long query strings. <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Property: </td>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.isBot <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Example Value: </td>
|
||||
<td class='confluenceTd'> solr.statistics.query.filter.isBot = true <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> Informational Note: </td>
|
||||
<td class='confluenceTd'> If true, statistics queries will filter out events flagged with the "isBot" field. This is the recommended method of filtering spiders from statistics. <br class="atl-forced-newline" /> </td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</div>
|
||||
|
||||
|
||||
<h3><a name="DSpaceStatistics-"></a></h3>
|
||||
|
||||
|
||||
|
||||
<h3><a name="DSpaceStatistics-UpgradeProcessforStatistics."></a>Upgrade Process for Statistics.</h3>
|
||||
|
||||
<p>Example of rebuild and redeploy DSpace (only if you have configured your distribution in this manner)</p>
|
||||
|
||||
<p>First approach the traditional DSpace build process for updating</p>
|
||||
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
cd [dspace-source]/dspace
|
||||
mvn <span class="code-keyword">package</span>
|
||||
cd [dspace-source]/dspace/target/dspace-<version>-build.dir
|
||||
ant -Dconfig=[dspace]/config/dspace.cfg update
|
||||
cp -R [dspace]/webapps/* [TOMCAT]/webapps
|
||||
<pre class="code-java"> cd [dspace-source]/dspace
|
||||
mvn <span class="code-keyword">package</span>
|
||||
cd [dspace-source]/dspace/target/dspace-<version>-build.dir
|
||||
ant -Dconfig=[dspace]/config/dspace.cfg update
|
||||
cp -R [dspace]/webapps/* [TOMCAT]/webapps
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>The last step is only used if you are not mounting <em>[dspace]/webapps</em> directly into your Tomcat, Resin or Jetty host (the recommended practice)If you only need to build the statistics, and don't make any changes to other web applications, you can replace the copy step above with:</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
cp -R dspace/webapps/solr TOMCAT/webapps
|
||||
<pre class="code-java"> cp -R dspace/webapps/solr TOMCAT/webapps
|
||||
</pre>
|
||||
</div></div>
|
||||
<p><em>Again, only if you are not mounting [dspace]/webapps directly into your Tomcat, Resin or Jetty host (the recommended practice)</em></p>
|
||||
|
||||
<p>Restart your webapps (Tomcat/Jetty/Resin)</p>
|
||||
|
||||
<h2><a name="DSpaceStatistics-Oldersettingthatarenocurrentlyutilizedinthereports"></a>Older setting that are no currently utilized in the reports</h2>
|
||||
<h2><a name="DSpaceStatistics-Oldersettingthatarenotrelatedtothenew1.6Statistics"></a>Older setting that are not related to the new 1.6 Statistics</h2>
|
||||
|
||||
<p>Are the following Dspace.cfg fields still used by the new 1.6 Statistics? If not, we need to either document this well or remove them altogether:</p>
|
||||
<p>The following Dspace.cfg fields are only applicable to the older statistics solution.</p>
|
||||
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">
|
||||
###### Statistical Report Configuration Settings ######
|
||||
|
||||
# should the stats be publicly available? should be set to <span class="code-keyword">false</span> <span class="code-keyword">if</span> you only
|
||||
# want administrators to access the stats, or you <span class="code-keyword">do</span> not intend to generate
|
||||
# any
|
||||
report.<span class="code-keyword">public</span> = <span class="code-keyword">false</span>
|
||||
|
||||
# directory where live reports are stored
|
||||
report.dir = ${dspace.dir}/reports/
|
||||
<pre class="code-java"> ###### Statistical Report Configuration Settings ######
|
||||
|
||||
# should the stats be publicly available? should be set to <span class="code-keyword">false</span> <span class="code-keyword">if</span> you only
|
||||
# want administrators to access the stats, or you <span class="code-keyword">do</span> not intend to generate
|
||||
# any
|
||||
report.<span class="code-keyword">public</span> = <span class="code-keyword">false</span>
|
||||
|
||||
# directory where live reports are stored
|
||||
report.dir = ${dspace.dir}/reports/
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>These fields are not used by the new 1.6 Statistics, but are only related to the Statistics from previous DSpace releases</p>
|
||||
|
||||
<h2><a name="DSpaceStatistics-StatisticsAdministration"></a>Statistics Administration</h2>
|
||||
|
||||
<h3><a name="DSpaceStatistics-ConvertingolderDSpacelogsintoSOLRusagedatahttps%3A%2F%2Fwiki.duraspace.org%2Fdisplay%2FDSDOC%2FSystemAdministration%23SystemAdministrationDSpaceLogConverter"></a><a href="https://wiki.duraspace.org/display/DSDOC/System+Administration#SystemAdministration-DSpaceLogConverter">Converting older DSpace logs into SOLR usage data</a></h3>
|
||||
|
||||
<p>If you have upgraded from a previous version of DSpace, converting older log files ensures that you carry over older usage stats from before the upgrade.</p>
|
||||
|
||||
<h3><a name="DSpaceStatistics-StatisticsClientUtilityhttps%3A%2F%2Fwiki.duraspace.org%2Fdisplay%2FDSDOC%2FSystemAdministration%23SystemAdministrationClientStatistics"></a><a href="https://wiki.duraspace.org/display/DSDOC/System+Administration#SystemAdministration-ClientStatistics">Statistics Client Utility</a></h3>
|
||||
|
||||
<p>The command line interface (CLI) scripts can be used to clean the usage database from additional spider traffic and other maintenance tasks.</p>
|
||||
|
||||
<h2><a name="DSpaceStatistics-StatisticsdifferencesbetweenDSpace1.6.xand1.7.0"></a>Statistics differences between DSpace 1.6.x and 1.7.0</h2>
|
||||
|
||||
<h3><a name="DSpaceStatistics-SOLRoptimizationadded"></a>SOLR optimization added</h3>
|
||||
|
||||
<p>If required, the solr server can be optimized by running</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">{dspace.dir}/bin/stats-util -o
|
||||
</pre>
|
||||
</div></div>
|
||||
<p>. More information on how these solr server optimizations work can be found here: <a href="http://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations">http://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations</a>.</p>
|
||||
|
||||
<h3><a name="DSpaceStatistics-SOLRAutocommit"></a>SOLR Autocommit</h3>
|
||||
|
||||
<p>In DSpace 1.6.x, each solr event was committed to the solr server individually. For high load DSpace installations, this would result in a huge load of small solr commits resulting in a very high load on the solr server.<br/>
|
||||
This has been resolved in dspace 1.7 by only committing usage events to the solr server every 15 minutes. This will result in a delay of the storage of a usage event of maximum 15 minutes. If required, this value can be altered by changing the maxTime property in the</p>
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
|
||||
<pre class="code-java">{dspace.dir}/solr/statistics/conf/solrconfig.xml.
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
@@ -205,7 +356,7 @@ If true, the event will be logged with the "isBot" field set to true. <br class=
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -31,7 +31,7 @@
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
@@ -16,17 +16,17 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagesubheading">
|
||||
This page last changed on Dec 15, 2010 by <font color="#0050B2">tdonohue</font>.
|
||||
This page last changed on Feb 17, 2011 by <font color="#0050B2">helix84</font>.
|
||||
</div>
|
||||
|
||||
<h1><a name="Directories-DSpaceSystemDocumentation%3ADirectoriesandFiles"></a>DSpace System Documentation: Directories and Files</h1>
|
||||
|
||||
<style type='text/css'>/*<![CDATA[*/
|
||||
div.rbtoc1292438149327 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1292438149327 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1292438149327 li {margin-left: 0px;padding-left: 0px;}
|
||||
div.rbtoc1297951565554 {margin-left: 0px;padding: 0px;}
|
||||
div.rbtoc1297951565554 ul {list-style: none;margin-left: 0px;}
|
||||
div.rbtoc1297951565554 li {margin-left: 0px;padding-left: 0px;}
|
||||
|
||||
/*]]>*/</style><div class='rbtoc1292438149327'>
|
||||
/*]]>*/</style><div class='rbtoc1297951565554'>
|
||||
<ul>
|
||||
<li><span class='TOCOutline'>1</span> <a href='#Directories-Overview'>Overview</a></li>
|
||||
<li><span class='TOCOutline'>2</span> <a href='#Directories-SourceDirectoryLayout'>Source Directory Layout</a></li>
|
||||
@@ -265,7 +265,7 @@ This directory contains administrative files needed for the install process and
|
||||
<pre class="code-java">log4j.rootCategory=INFO,A
|
||||
log4j.logger.org.dspace=INFO,A1</pre>
|
||||
</div></div> </td>
|
||||
<td class='confluenceTd'> These lines control what level of logging takes place. Normally they should be set to INFO, but if you need to see more information in the logs, set them to dEBUG and restart your web server </td>
|
||||
<td class='confluenceTd'> These lines control what level of logging takes place. Normally they should be set to INFO, but if you need to see more information in the logs, set them to DEBUG and restart your web server </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> <em>log4j.appender.A1=org.dspace.app.util.DailyFileAppender</em> </td>
|
||||
@@ -277,7 +277,7 @@ log4j.logger.org.dspace=INFO,A1</pre>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> <em>log4j.appender.A1.DatePattern=yyy-MM-DD</em> </td>
|
||||
<td class='confluenceTd'> This defines the format for the date stamp that is appended to the log file names. If you wish to have log files created monthyl instead of daily, change this to <em>yyyy-MM</em> </td>
|
||||
<td class='confluenceTd'> This defines the format for the date stamp that is appended to the log file names. If you wish to have log files created monthly instead of daily, change this to <em>yyyy-MM</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='confluenceTd'> <em>log4j.appender.A1.MaxLogs=0</em> </td>
|
||||
@@ -296,7 +296,7 @@ log4j.logger.org.dspace=INFO,A1</pre>
|
||||
<td height="12" background="https://wiki.duraspace.org/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Dec 16, 2010 11:47</font></td>
|
||||
<td align="center"><font color="grey">Document generated by Confluence on Mar 25, 2011 19:21</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user