diff --git a/dspace-api/src/main/java/org/dspace/content/Item.java b/dspace-api/src/main/java/org/dspace/content/Item.java index ec39435d1c..dc2296be4c 100644 --- a/dspace-api/src/main/java/org/dspace/content/Item.java +++ b/dspace-api/src/main/java/org/dspace/content/Item.java @@ -39,15 +39,6 @@ */ package org.dspace.content; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; - import org.apache.log4j.Logger; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeManager; @@ -65,9 +56,8 @@ import org.dspace.content.dao.CommunityDAO; import org.dspace.content.dao.CommunityDAOFactory; import org.dspace.content.dao.ItemDAO; import org.dspace.content.dao.ItemDAOFactory; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.ObjectIdentifier; import org.dspace.core.ArchiveManager; +import org.dspace.core.ConfigurationManager; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.core.LogManager; @@ -76,6 +66,20 @@ import org.dspace.eperson.Group; import org.dspace.eperson.dao.EPersonDAO; import org.dspace.eperson.dao.EPersonDAOFactory; import org.dspace.event.Event; +import org.dspace.uri.ExternalIdentifier; +import org.dspace.uri.ExternalIdentifierMint; +import org.dspace.uri.IdentifierFactory; +import org.dspace.uri.ObjectIdentifier; +import org.dspace.uri.UnsupportedIdentifierException; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.StringTokenizer; /** * Class representing an item in DSpace. Note that everything is held in memory @@ -226,13 +230,86 @@ public class Item extends DSpaceObject return metadata; } + //////////////////////////////////////////////////////////////////////// + // Identifier Methods + //////////////////////////////////////////////////////////////////////// + public void setIdentifier(ObjectIdentifier oid) { + // enxsure the identifier is localised to the item oid.setResourceTypeID(this.getType()); oid.setResourceID(this.getID()); + + // FIXME: this can clearly result in duplicate fields, and once the principal is sound then we + // need to come back and tidy this up + + // store the canonical form of the identifier + DCValue dcv = ConfigurationManager.getMetadataProperty("identifier.metadata.canonical-field.internal"); + if (dcv != null) + { + this.addMetadata(dcv.schema, dcv.element, dcv.qualifier, null, oid.getCanonicalForm()); + } + + // now, should we store the full form + if (ConfigurationManager.getBooleanProperty("identifier.metadata.store-url.internal")) + { + DCValue dc = ConfigurationManager.getMetadataProperty("identifier.metadata.url-field.internal"); + if (dc != null) + { + this.addMetadata(dc.schema, dc.element, dc.qualifier, null, IdentifierFactory.getURL(oid).toString()); + } + } + + // now let the superclass do its thing super.setIdentifier(oid); } + public void addExternalIdentifier(ExternalIdentifier identifier) + throws UnsupportedIdentifierException + { + // FIXME: this can clearly result in duplicate fields, and once the principal is sound then we + // need to come back and tidy this up + + // store the canonical form of the identifier + DCValue dcv = ExternalIdentifierMint.getCanonicalField(identifier.getType()); + if (dcv != null) + { + this.addMetadata(dcv.schema, dcv.element, dcv.qualifier, null, identifier.getCanonicalForm()); + } + + // now, store the full form + DCValue dc = ExternalIdentifierMint.getURLField(identifier.getType()); + if (dc != null) + { + this.addMetadata(dc.schema, dc.element, dc.qualifier, null, IdentifierFactory.getURL(identifier).toString()); + } + + // now let the superclass do its thing + super.addExternalIdentifier(identifier); + } + + public void setExternalIdentifiers(List identifiers) + throws UnsupportedIdentifierException + { + for (ExternalIdentifier eid : identifiers) + { + // store the canonical form of the identifier + DCValue dcv = ExternalIdentifierMint.getCanonicalField(eid.getType()); + this.addMetadata(dcv.schema, dcv.element, dcv.qualifier, null, eid.getCanonicalForm()); + + // now, store the full form + DCValue dc = ExternalIdentifierMint.getURLField(eid.getType()); + this.addMetadata(dc.schema, dc.element, dc.qualifier, null, IdentifierFactory.getURL(eid).toString()); + } + + // now let the superclass do its thing + super.setExternalIdentifiers(identifiers); + } + + /////////////////////////////////////////////////////////////////////////// + // End of Identifier Methods + /////////////////////////////////////////////////////////////////////////// + public void setMetadata(List metadata) { this.metadata = metadata; diff --git a/dspace-api/src/main/java/org/dspace/content/dao/ItemDAOCore.java b/dspace-api/src/main/java/org/dspace/content/dao/ItemDAOCore.java index cba92008a2..36017b89f8 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/ItemDAOCore.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/ItemDAOCore.java @@ -264,8 +264,7 @@ public class ItemDAOCore extends ItemDAO schema = msDAO.retrieve(MetadataSchema.DC_SCHEMA_ID); } - field = mfDAO.retrieve( - schema.getID(), memValue.element, memValue.qualifier); + field = mfDAO.retrieve(schema.getID(), memValue.element, memValue.qualifier); // Work out the place number for ordering int current = 0; diff --git a/dspace-api/src/main/java/org/dspace/core/ArchiveManager.java b/dspace-api/src/main/java/org/dspace/core/ArchiveManager.java index efe0932f00..7e2978aaef 100644 --- a/dspace-api/src/main/java/org/dspace/core/ArchiveManager.java +++ b/dspace-api/src/main/java/org/dspace/core/ArchiveManager.java @@ -496,8 +496,6 @@ public abstract class ArchiveManager */ private static void printExternalIdentifiers(Item item) { - System.out.println("one pi: " + item.getExternalIdentifier().getCanonicalForm()); - System.out.println(item.getExternalIdentifiers().toString()); for (ExternalIdentifier id : item.getExternalIdentifiers()) { System.out.println(id.getCanonicalForm()); diff --git a/dspace-api/src/main/java/org/dspace/core/ConfigurationManager.java b/dspace-api/src/main/java/org/dspace/core/ConfigurationManager.java index bb0de692ed..b139fb31bd 100644 --- a/dspace-api/src/main/java/org/dspace/core/ConfigurationManager.java +++ b/dspace-api/src/main/java/org/dspace/core/ConfigurationManager.java @@ -39,13 +39,17 @@ */ package org.dspace.core; +import org.apache.log4j.Category; +import org.apache.log4j.Logger; +import org.apache.log4j.helpers.OptionConverter; +import org.dspace.content.DCValue; + import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; @@ -54,13 +58,6 @@ import java.net.URL; import java.util.Enumeration; import java.util.Properties; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -import org.apache.log4j.Category; -import org.apache.log4j.Logger; -import org.apache.log4j.helpers.OptionConverter; - /** * Class for reading the DSpace system configuration. The main configuration is * read in as properties from a standard properties file. Email templates and @@ -250,6 +247,41 @@ public class ConfigurationManager } } + public static DCValue getMetadataProperty(String property) + { + if (properties == null) + { + loadConfig(null); + } + + String stringValue = properties.getProperty(property); + + if (stringValue != null) + { + stringValue = stringValue.trim(); + String[] bits = stringValue.split("\\."); + DCValue dcv = new DCValue(); + for (int i = 0; i < 3 && i < bits.length; i++) + { + switch (i) + { + case 0: + dcv.schema = bits[i]; + break; + case 1: + dcv.element = bits[i]; + break; + case 2: + dcv.qualifier = bits[i]; + break; + } + } + return dcv; + } + + return null; + } + /** * Returns an enumeration of all the keys in the DSpace configuration * diff --git a/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifier.java b/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifier.java index 9252c1ee28..d59e0ef0db 100644 --- a/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifier.java +++ b/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifier.java @@ -141,37 +141,6 @@ public abstract class ExternalIdentifier implements ResolvableIdentifier return type.getNamespace() + "/" + this.value; } - @Deprecated - public URL getURL() - { - /* - try - { - String base = ConfigurationManager.getProperty("dspace.url"); - String urlForm = this.getURLForm(); - - if (base == null || "".equals(base)) - { - throw new RuntimeException("No configuration, or configuration invalid for dspace.url"); - } - - if (urlForm == null) - { - throw new RuntimeException("Unable to assign URL: no ExternalIdentifier available"); - } - - String url = base + "/resource/" + urlForm; - - return new URL(url); - } - catch (MalformedURLException e) - { - log.error("caught exception: ", e); - throw new RuntimeException(e); - }*/ - return IdentifierFactory.getURL(this); - } - public URI getURI() { try diff --git a/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifierMint.java b/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifierMint.java index 2a4a9774d2..985ef1f178 100644 --- a/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifierMint.java +++ b/dspace-api/src/main/java/org/dspace/uri/ExternalIdentifierMint.java @@ -35,7 +35,9 @@ */ package org.dspace.uri; +import org.dspace.content.DCValue; import org.dspace.content.DSpaceObject; +import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.dspace.core.PluginManager; import org.dspace.uri.dao.ExternalIdentifierDAO; @@ -132,4 +134,18 @@ public class ExternalIdentifierMint } return null; } + + public static DCValue getCanonicalField(ExternalIdentifierType type) + { + String cfg = "identifier.metadata.canonical-field." + type.getNamespace(); + DCValue dcv = ConfigurationManager.getMetadataProperty(cfg); + return dcv; + } + + public static DCValue getURLField(ExternalIdentifierType type) + { + String cfg = "identifier.metadata.url-field." + type.getNamespace(); + DCValue dcv = ConfigurationManager.getMetadataProperty(cfg); + return dcv; + } } diff --git a/dspace-api/src/main/java/org/dspace/uri/dao/ExternalIdentifierStorageException.java b/dspace-api/src/main/java/org/dspace/uri/dao/ExternalIdentifierStorageException.java new file mode 100644 index 0000000000..babbbaaba4 --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/uri/dao/ExternalIdentifierStorageException.java @@ -0,0 +1,24 @@ +package org.dspace.uri.dao; + +public class ExternalIdentifierStorageException extends Exception +{ + public ExternalIdentifierStorageException() + { + super(); + } + + public ExternalIdentifierStorageException(String message) + { + super(message); + } + + public ExternalIdentifierStorageException(String message, Throwable cause) + { + super(message, cause); + } + + public ExternalIdentifierStorageException(Throwable cause) + { + super(cause); + } +} diff --git a/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java b/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java index 2c2ddc236e..8ece9b919d 100644 --- a/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java +++ b/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java @@ -638,6 +638,7 @@ public class WorkflowManager // Here, we try to get an external identifier for the item to send // in the notification email. If no external identifier exists, we // just send the "local" item URL. + /* ExternalIdentifier identifier = i.getExternalIdentifier(); String uri = ""; if (identifier != null) @@ -647,7 +648,8 @@ public class WorkflowManager else { uri = IdentifierFactory.getURL(i).toString(); - } + }*/ + String uri = IdentifierFactory.getURL(i).toString(); // Get title DCValue[] titles = i.getDC("title", null, Item.ANY); diff --git a/dspace-lni/dspace-lni-client/src/main/resources/dspace-lni.wsdl b/dspace-lni/dspace-lni-client/src/main/resources/dspace-lni.wsdl index b36d8578c9..8de07c077d 100644 --- a/dspace-lni/dspace-lni-client/src/main/resources/dspace-lni.wsdl +++ b/dspace-lni/dspace-lni-client/src/main/resources/dspace-lni.wsdl @@ -15,23 +15,35 @@ Built on Oct 05, 2005 (05:23:37 EDT)--> - + + + + + + + + + + + + + - + - + + + - + - - - + @@ -41,12 +53,6 @@ Built on Oct 05, 2005 (05:23:37 EDT)--> - - - - - - @@ -61,30 +67,24 @@ Built on Oct 05, 2005 (05:23:37 EDT)--> - + - + + + - - - - - - - - - - - - - + + + + + diff --git a/dspace-lni/dspace-lni-core/src/main/java/org/dspace/app/dav/DAVCollection.java b/dspace-lni/dspace-lni-core/src/main/java/org/dspace/app/dav/DAVCollection.java index 0b6efb5b9b..b0308c2933 100644 --- a/dspace-lni/dspace-lni-core/src/main/java/org/dspace/app/dav/DAVCollection.java +++ b/dspace-lni/dspace-lni-core/src/main/java/org/dspace/app/dav/DAVCollection.java @@ -67,6 +67,7 @@ import org.dspace.core.Context; import org.dspace.core.PluginManager; import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowManager; +import org.dspace.uri.IdentifierFactory; import org.jdom.Element; @@ -508,7 +509,7 @@ class DAVCollection extends DAVDSpaceObject Item ni = wfi.getItem(); // FIXME: I'm not sure this is what we want - String handle = ni.getExternalIdentifier().getCanonicalForm(); + String handle = IdentifierFactory.getCanonicalForm(ni); // String handle = HandleManager.findHandle(this.context, ni); String end = (handle != null) ? DAVDSpaceObject diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowAuthorizationUtils.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowAuthorizationUtils.java index 29022e230f..dca030c531 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowAuthorizationUtils.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowAuthorizationUtils.java @@ -40,9 +40,6 @@ package org.dspace.app.xmlui.aspect.administrative; -import java.sql.SQLException; -import java.util.List; - import org.dspace.app.xmlui.wing.Message; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeManager; @@ -54,12 +51,14 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.dao.ExternalIdentifierDAO; -import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; +import org.dspace.uri.ResolvableIdentifier; + +import java.sql.SQLException; +import java.util.List; @@ -93,12 +92,15 @@ public class FlowAuthorizationUtils { //Check whether it's a handle or internal id (by check ing if it has a slash in the string) if (identifier.contains("/")) { // DSpaceObject dso = HandleManager.resolveToObject(context, identifier); + /* ExternalIdentifierDAO identifierDAO = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier eid = identifierDAO.retrieve(identifier); - DSpaceObject dso = eid.getObjectIdentifier().getObject(context); + DSpaceObject dso = eid.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, identifier); + DSpaceObject dso = ri.getObject(context); - if (dso != null && dso.getType() == Constants.ITEM) { + if (dso != null && dso.getType() == Constants.ITEM) { result.setParameter("itemID", dso.getID()); result.setParameter("type", Constants.ITEM); result.setContinue(true); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowItemUtils.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowItemUtils.java index c0cc662282..44ec705e03 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowItemUtils.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/FlowItemUtils.java @@ -58,7 +58,8 @@ import org.dspace.content.FormatIdentifier; import org.dspace.content.Item; import org.dspace.content.MetadataField; import org.dspace.content.MetadataSchema; -import org.dspace.uri.ExternalIdentifier; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.uri.dao.ExternalIdentifierDAO; import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.core.Constants; @@ -109,10 +110,13 @@ public class FlowItemUtils if (identifier.contains("/")) { // DSpaceObject dso = HandleManager.resolveToObject(context, identifier); + /* ExternalIdentifier eid = identifierDAO.retrieve(identifier); - DSpaceObject dso = eid.getObjectIdentifier().getObject(context); + DSpaceObject dso = eid.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, identifier); + DSpaceObject dso = ri.getObject(context); - if (dso != null && dso.getType() == Constants.ITEM) + if (dso != null && dso.getType() == Constants.ITEM) { result.setParameter("itemID", dso.getID()); result.setParameter("type", Constants.ITEM); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/WithdrawnItems.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/WithdrawnItems.java index 71a84ab982..1a099a545a 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/WithdrawnItems.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/WithdrawnItems.java @@ -40,14 +40,6 @@ package org.dspace.app.xmlui.aspect.administrative; -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 org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; @@ -77,8 +69,6 @@ import org.dspace.browse.BrowseException; import org.dspace.browse.BrowseIndex; import org.dspace.browse.BrowseInfo; import org.dspace.browse.BrowserScope; -import org.dspace.sort.SortOption; -import org.dspace.sort.SortException; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DCDate; @@ -86,8 +76,19 @@ import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; +import org.dspace.sort.SortException; +import org.dspace.sort.SortOption; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +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; + /** * Implements all the browse functionality (browse by title, subject, authors, * etc.) The types of browse available are configurable by the implementor. See @@ -171,7 +172,7 @@ public class WithdrawnItems extends AbstractDSpaceTransformer implements { DSpaceObject dso = HandleUtil.obtainHandle(objectModel); if (dso != null) - key += "-" + dso.getExternalIdentifier().getCanonicalForm(); + key += "-" + IdentifierFactory.getCanonicalForm(dso); return HashUtil.hash(key); } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditContainerPolicies.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditContainerPolicies.java index 4fcb51d719..85ac59a847 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditContainerPolicies.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditContainerPolicies.java @@ -39,9 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.authorization; -import java.sql.SQLException; -import java.util.ArrayList; - import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; @@ -60,6 +57,10 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.core.Constants; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; +import java.util.ArrayList; /** * @author Alexey Maslov @@ -125,13 +126,13 @@ public class EditContainerPolicies extends AbstractDSpaceTransformer if (containerType == Constants.COLLECTION) { Collection col = Collection.find(context, containerID); - main.setHead(T_main_head_collection.parameterize(col.getMetadata("name"),col.getExternalIdentifier().getCanonicalForm(),col.getID())); + main.setHead(T_main_head_collection.parameterize(col.getMetadata("name"), IdentifierFactory.getCanonicalForm(col),col.getID())); policies = (ArrayList)AuthorizeManager.getPolicies(context, col); } else { Community com = Community.find(context, containerID); - main.setHead(T_main_head_community.parameterize(com.getMetadata("name"),com.getExternalIdentifier().getCanonicalForm(),com.getID())); + main.setHead(T_main_head_community.parameterize(com.getMetadata("name"),IdentifierFactory.getCanonicalForm(com),com.getID())); policies = (ArrayList)AuthorizeManager.getPolicies(context, com); } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditItemPolicies.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditItemPolicies.java index 0e5c4757ae..5455d0e226 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditItemPolicies.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/authorization/EditItemPolicies.java @@ -39,9 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.authorization; -import java.sql.SQLException; -import java.util.ArrayList; - import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; @@ -61,6 +58,10 @@ import org.dspace.content.Bundle; import org.dspace.content.Item; import org.dspace.core.Constants; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; +import java.util.ArrayList; /** * @author Alexey Maslov @@ -146,7 +147,7 @@ public class EditItemPolicies extends AbstractDSpaceTransformer // DIVISION: main Division main = body.addInteractiveDivision("edit-item-policies",contextPath+"/admin/authorize",Division.METHOD_POST,"primary administrative authorization"); - main.setHead(T_main_head.parameterize(item.getExternalIdentifier().getCanonicalForm(),item.getID())); + main.setHead(T_main_head.parameterize(IdentifierFactory.getCanonicalForm(item),item.getID())); main.addPara().addHighlight("italic").addContent(T_main_para1); main.addPara().addHighlight("italic").addContent(T_main_para2); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/community/EditCommunityMetadataForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/community/EditCommunityMetadataForm.java index 9e12afc4f0..427e9ef442 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/community/EditCommunityMetadataForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/community/EditCommunityMetadataForm.java @@ -39,8 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.community; -import java.sql.SQLException; - import org.dspace.app.xmlui.aspect.administrative.FlowContainerUtils; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; @@ -56,6 +54,9 @@ import org.dspace.app.xmlui.wing.element.TextArea; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeManager; import org.dspace.content.Community; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; /** * Presents the user (in this case an administrator over the community) with the @@ -106,7 +107,7 @@ public class EditCommunityMetadataForm extends AbstractDSpaceTransformer // DIVISION: main Division main = body.addInteractiveDivision("community-metadata-edit",contextPath+"/admin/community",Division.METHOD_MULTIPART,"primary administrative community"); - main.setHead(T_main_head.parameterize(thisCommunity.getExternalIdentifier().getCanonicalForm())); + main.setHead(T_main_head.parameterize(IdentifierFactory.getCanonicalForm(thisCommunity))); if (AuthorizeManager.isAdmin(context)) { diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/EditGroupForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/EditGroupForm.java index 2a1b690975..2ab2882ba5 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/EditGroupForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/EditGroupForm.java @@ -39,12 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.group; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.Queue; - import org.dspace.app.xmlui.aspect.administrative.FlowGroupUtils; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; @@ -62,6 +56,13 @@ import org.dspace.authorize.AuthorizeManager; import org.dspace.content.Collection; import org.dspace.eperson.EPerson; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; +import java.util.Queue; /** * Present the user with the group's current state. The user may select to @@ -288,9 +289,8 @@ public class EditGroupForm extends AbstractDSpaceTransformer { Para para = main.addPara(); para.addContent(T_collection_para); - para.addXref(contextPath+"/handle/"+collection.getExternalIdentifier().getCanonicalForm(), collection.getMetadata("name")); + para.addXref(IdentifierFactory.getURL(collection).toString(), collection.getMetadata("name")); } - // DIVISION: group-actions Division actions = main.addDivision("group-edit-actions"); @@ -498,7 +498,7 @@ public class EditGroupForm extends AbstractDSpaceTransformer Highlight highlight = cell.addHighlight("fade"); highlight.addContent("["); - highlight.addXref(contextPath+"/handle/"+collection.getExternalIdentifier().getCanonicalForm(), T_groups_collection_link); + highlight.addXref(IdentifierFactory.getURL(collection).toString(), T_groups_collection_link); highlight.addContent("]"); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/ManageGroupsMain.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/ManageGroupsMain.java index 672e026d5f..e44a75855c 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/ManageGroupsMain.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/group/ManageGroupsMain.java @@ -39,8 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.group; -import java.sql.SQLException; - import org.dspace.app.xmlui.aspect.administrative.FlowGroupUtils; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; @@ -57,6 +55,9 @@ import org.dspace.app.xmlui.wing.element.Table; import org.dspace.app.xmlui.wing.element.Text; import org.dspace.content.Collection; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; /** * Manage groups page is the entry point for group management. From here the user @@ -265,7 +266,7 @@ public class ManageGroupsMain extends AbstractDSpaceTransformer Highlight highlight = cell.addHighlight("fade"); highlight.addContent("["); - highlight.addXref(contextPath+"/handle/"+collection.getExternalIdentifier().getCanonicalForm(), T_collection_link); + highlight.addXref(IdentifierFactory.getURL(collection).toString(), T_collection_link); highlight.addContent("]"); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/ConfirmItemForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/ConfirmItemForm.java index f130c87d8c..2b161bca69 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/ConfirmItemForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/ConfirmItemForm.java @@ -39,10 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.item; -import java.sql.SQLException; -import java.util.Arrays; -import java.util.Comparator; - import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; @@ -55,6 +51,11 @@ import org.dspace.app.xmlui.wing.element.Row; import org.dspace.app.xmlui.wing.element.Table; import org.dspace.content.DCValue; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Comparator; /** @@ -114,7 +115,7 @@ public class ConfirmItemForm extends AbstractDSpaceTransformer { // DIVISION: Main Division main = body.addInteractiveDivision("confirm-item", contextPath+"/admin/item", Division.METHOD_POST,"primary administrative item"); - main.setHead(T_head1.parameterize(item.getExternalIdentifier().getCanonicalForm())); + main.setHead(T_head1.parameterize(IdentifierFactory.getCanonicalForm(item))); // PARA: descriptive instructions if("delete".equals(confirm)) diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/EditItemStatusForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/EditItemStatusForm.java index 043b4714f2..d3ee9277d6 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/EditItemStatusForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/item/EditItemStatusForm.java @@ -39,8 +39,6 @@ */ package org.dspace.app.xmlui.aspect.administrative.item; -import java.sql.SQLException; - import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; @@ -53,6 +51,9 @@ import org.dspace.authorize.AuthorizeManager; import org.dspace.content.Collection; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; +import org.dspace.uri.IdentifierFactory; + +import java.sql.SQLException; /** * Display basic meta-meta information about the item and allow the user to change @@ -146,7 +147,7 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer { itemInfo.addLabel(T_label_handle); // itemInfo.addItem(item.getHandle()==null?"None":item.getHandle()); - itemInfo.addItem(item.getExternalIdentifier()==null?"None":item.getExternalIdentifier().getCanonicalForm()); + itemInfo.addItem(IdentifierFactory.getCanonicalForm(item)); itemInfo.addLabel(T_label_modified); itemInfo.addItem(item.getLastModified().toString()); @@ -161,6 +162,7 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer { itemInfo.addLabel(T_label_page); // if(item.getHandle()==null){ + /* if(item.getExternalIdentifier()==null){ itemInfo.addItem(T_na); } @@ -168,8 +170,11 @@ public class EditItemStatusForm extends AbstractDSpaceTransformer { // itemInfo.addItem().addXref(ConfigurationManager.getProperty("dspace.url") + "/handle/" + item.getHandle(),ConfigurationManager.getProperty("dspace.url") + "/handle/" + item.getHandle()); itemInfo.addItem().addXref(ConfigurationManager.getProperty("dspace.url") + "/handle/" + item.getExternalIdentifier().getCanonicalForm(),ConfigurationManager.getProperty("dspace.url") + "/handle/" + item.getExternalIdentifier().getCanonicalForm()); } - - itemInfo.addLabel(T_label_auth); + */ + String url = IdentifierFactory.getURL(item).toString(); + itemInfo.addItem().addXref(url, url); + + itemInfo.addLabel(T_label_auth); addAdministratorOnlyButton(itemInfo.addItem(), "submit_authorization", T_submit_authorizations); if(!item.isWithdrawn()) diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/BrowseItemForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/BrowseItemForm.java index 6349be881a..fa78d431e6 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/BrowseItemForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/BrowseItemForm.java @@ -59,6 +59,7 @@ import org.dspace.content.DCValue; import org.dspace.content.Item; import org.dspace.content.ItemIterator; import org.dspace.core.Constants; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; /** @@ -147,7 +148,7 @@ public class BrowseItemForm extends AbstractDSpaceTransformer { if (dcTitles != null && dcTitles.length >= 1) title = dcTitles[0].value; - String url = contextPath+"/handle/"+item.getExternalIdentifier().getCanonicalForm(); + String url = IdentifierFactory.getURL(item).toString(); Row row = table.addRow(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchItemForm.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchItemForm.java index 578bc83dc8..ad6b6e5989 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchItemForm.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/administrative/mapper/SearchItemForm.java @@ -57,7 +57,8 @@ import org.dspace.content.Collection; import org.dspace.content.DCValue; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; -import org.dspace.uri.ExternalIdentifier; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.uri.dao.ExternalIdentifierDAO; import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.search.DSQuery; @@ -140,7 +141,7 @@ public class SearchItemForm extends AbstractDSpaceTransformer { if (dcTitles != null && dcTitles.length >= 1) title = dcTitles[0].value; - String url = contextPath+"/handle/"+item.getExternalIdentifier().getCanonicalForm(); + String url = IdentifierFactory.getURL(item).toString(); Row row = table.addRow(); @@ -191,9 +192,12 @@ public class SearchItemForm extends AbstractDSpaceTransformer { for (String uri : uris) { // DSpaceObject resultDSO = HandleManager.resolveToObject(context, handle); + /* ExternalIdentifier identifier = identifierDAO.retrieve(uri); DSpaceObject resultDSO = - identifier.getObjectIdentifier().getObject(context); + identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + DSpaceObject resultDSO = ri.getObject(context); if (resultDSO instanceof Item) { diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/AbstractSearch.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/AbstractSearch.java index e97a9f5533..a57ca56123 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/AbstractSearch.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/AbstractSearch.java @@ -44,7 +44,6 @@ import java.io.Serializable; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; @@ -70,7 +69,8 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; -import org.dspace.uri.ExternalIdentifier; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.uri.dao.ExternalIdentifierDAO; import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.core.Context; @@ -155,7 +155,7 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer // What scope the search is at DSpaceObject scope = getScope(); if (scope != null) - key += "-" + scope.getExternalIdentifier().getCanonicalForm(); + key += "-" + IdentifierFactory.getCanonicalForm(scope); // The actualy search query. key += "-" + getQuery(); @@ -200,10 +200,13 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer { // DSpaceObject resultDSO = HandleManager.resolveToObject( // context, handle); + /* ExternalIdentifier identifier = dao.retrieve(uri); DSpaceObject resultDSO = - identifier.getObjectIdentifier().getObject(context); - validity.add(resultDSO); + identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + DSpaceObject resultDSO = ri.getObject(context); + validity.add(resultDSO); } this.validity = validity.complete(); @@ -300,9 +303,12 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer { // DSpaceObject resultDSO = HandleManager.resolveToObject( // context, handle); + /* ExternalIdentifier identifier = dao.retrieve(uri); DSpaceObject resultDSO = - identifier.getObjectIdentifier().getObject(context); + identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + DSpaceObject resultDSO = ri.getObject(context); if (resultDSO instanceof Community || resultDSO instanceof Collection) @@ -330,10 +336,13 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer { // DSpaceObject resultDSO = HandleManager.resolveToObject( // context, handle); + /* ExternalIdentifier identifier = dao.retrieve(uri); DSpaceObject resultDSO = - identifier.getObjectIdentifier().getObject(context); + identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + DSpaceObject resultDSO = ri.getObject(context); if (resultDSO instanceof Item) { if (referenceSet == null) { @@ -384,7 +393,7 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer scope.setOptionSelected("/"); for (Community community : Community.findAll(context)) { - scope.addOption(community.getExternalIdentifier().getCanonicalForm(),community.getMetadata("name")); + scope.addOption(IdentifierFactory.getCanonicalForm(community),community.getMetadata("name")); } } else if (scopeDSO instanceof Community) @@ -393,12 +402,12 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer // within Community community = (Community) scopeDSO; scope.addOption("/",T_all_of_dspace); - scope.addOption(community.getExternalIdentifier().getCanonicalForm(),community.getMetadata("name")); - scope.setOptionSelected(community.getExternalIdentifier().getCanonicalForm()); + scope.addOption(IdentifierFactory.getCanonicalForm(community),community.getMetadata("name")); + scope.setOptionSelected(IdentifierFactory.getCanonicalForm(community)); for (Collection collection : community.getCollections()) { - scope.addOption(collection.getExternalIdentifier().getCanonicalForm(),collection.getMetadata("name")); + scope.addOption(IdentifierFactory.getCanonicalForm(collection),collection.getMetadata("name")); } } else if (scopeDSO instanceof Collection) @@ -406,14 +415,14 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer // The scope is a collection, display all parent collections. Collection collection = (Collection) scopeDSO; scope.addOption("/",T_all_of_dspace); - scope.addOption(collection.getExternalIdentifier().getCanonicalForm(),collection.getMetadata("name")); - scope.setOptionSelected(collection.getExternalIdentifier().getCanonicalForm()); + scope.addOption(IdentifierFactory.getCanonicalForm(collection),collection.getMetadata("name")); + scope.setOptionSelected(IdentifierFactory.getCanonicalForm(collection)); Community[] communities = collection.getCommunities()[0] .getAllParents(); for (Community community : communities) { - scope.addOption(community.getExternalIdentifier().getCanonicalForm(),community.getMetadata("name")); + scope.addOption(IdentifierFactory.getCanonicalForm(community),community.getMetadata("name")); } } } @@ -499,8 +508,11 @@ public abstract class AbstractSearch extends AbstractDSpaceTransformer { // Get the search scope from the location parameter // dso = HandleManager.resolveToObject(context, scopeString); + ResolvableIdentifier ri = IdentifierFactory.resolve(context, scopeString); + dso = ri.getObject(context); + /* ExternalIdentifier identifier = dao.retrieve(scopeString); - dso = identifier.getObjectIdentifier().getObject(context); + dso = identifier.getObjectIdentifier().getObject(context);*/ } return dso; diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CollectionViewer.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CollectionViewer.java index d05a8d5c48..7ecb062f84 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CollectionViewer.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CollectionViewer.java @@ -71,6 +71,7 @@ import org.dspace.content.Collection; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; /** @@ -130,7 +131,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache if (dso == null) return "0"; - return HashUtil.hash(dso.getExternalIdentifier().getCanonicalForm()); + return HashUtil.hash(IdentifierFactory.getCanonicalForm(dso)); } catch (SQLException sqle) { @@ -218,7 +219,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache String feedFormat = parts[0].trim()+"+xml"; - String feedURL = contextPath+"/feed/"+collection.getExternalIdentifier().getCanonicalForm()+"/"+format.trim(); + String feedURL = IdentifierFactory.getURL(collection).toString() + "/"+format.trim(); pageMeta.addMetadata("feed", feedFormat).addContent(feedURL); } } @@ -248,7 +249,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache // Search query Division query = search.addInteractiveDivision("collection-search", - contextPath + "/handle/" + collection.getExternalIdentifier().getCanonicalForm() + "/search", + IdentifierFactory.getURL(collection).toString() + "/search", Division.METHOD_POST, "secondary search"); Para para = query.addPara("search-query", null); @@ -263,7 +264,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache List browse = browseDiv.addList("collection-browse", List.TYPE_SIMPLE, "collection-browse"); browse.setHead(T_head_browse); - String url = contextPath + "/handle/" + collection.getExternalIdentifier().getCanonicalForm(); + String url = IdentifierFactory.getURL(collection).toString(); browse.addItemXref(url + "/browse-title",T_browse_titles); browse.addItemXref(url + "/browse-author",T_browse_authors); browse.addItemXref(url + "/browse-date",T_browse_dates); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityBrowser.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityBrowser.java index 368e8e9916..7fba469eb7 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityBrowser.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityBrowser.java @@ -39,13 +39,6 @@ */ package org.dspace.app.xmlui.aspect.artifactbrowser; -import java.io.IOException; -import java.io.Serializable; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Map; -import java.util.Stack; - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.caching.CacheableProcessingComponent; @@ -59,19 +52,26 @@ import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Division; -import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.List; -import org.dspace.app.xmlui.wing.element.Reference; import org.dspace.app.xmlui.wing.element.PageMeta; +import org.dspace.app.xmlui.wing.element.Reference; +import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.core.ConfigurationManager; import org.dspace.core.Constants; - +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Map; +import java.util.Stack; + /** * Display a list of Communities and collections. * @@ -297,7 +297,7 @@ public class CommunityBrowser extends AbstractDSpaceTransformer implements Cache else if (dso instanceof Collection) name = ((Collection) dso).getMetadata("name"); - String url = contextPath + "/handle/"+dso.getExternalIdentifier().getCanonicalForm(); + String url = IdentifierFactory.getURL(dso).toString(); list.addItem().addHighlight("bold").addXref(url, name); List subList = null; @@ -311,7 +311,7 @@ public class CommunityBrowser extends AbstractDSpaceTransformer implements Cache for (TreeNode collectionNode : collectionNodes) { String collectionName = ((Collection) collectionNode.getDSO()).getMetadata("name"); - String collectionUrl = contextPath + "/handle/"+collectionNode.getDSO().getExternalIdentifier().getCanonicalForm(); + String collectionUrl = IdentifierFactory.getURL(collectionNode.getDSO()).toString(); subList.addItemXref(collectionUrl, collectionName); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityViewer.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityViewer.java index 5054ebb793..86c7d66421 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityViewer.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/CommunityViewer.java @@ -39,10 +39,6 @@ */ package org.dspace.app.xmlui.aspect.artifactbrowser; -import java.io.IOException; -import java.io.Serializable; -import java.sql.SQLException; - import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.util.HashUtil; import org.apache.excalibur.source.SourceValidity; @@ -56,11 +52,11 @@ import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Division; -import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.List; -import org.dspace.app.xmlui.wing.element.Reference; import org.dspace.app.xmlui.wing.element.PageMeta; import org.dspace.app.xmlui.wing.element.Para; +import org.dspace.app.xmlui.wing.element.Reference; +import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.authorize.AuthorizeException; import org.dspace.browse.BrowseEngine; import org.dspace.browse.BrowseException; @@ -73,8 +69,13 @@ import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; import org.dspace.sort.SortException; import org.dspace.sort.SortOption; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + /** * Display a single community. This includes a full text search, browse by list, * community display and a list of recent submissions. @@ -137,7 +138,7 @@ public class CommunityViewer extends AbstractDSpaceTransformer implements Cachea if (dso == null) return "0"; // no item, something is wrong - return HashUtil.hash(dso.getExternalIdentifier().getCanonicalForm()); + return HashUtil.hash(IdentifierFactory.getCanonicalForm(dso)); } catch (SQLException sqle) { @@ -234,7 +235,7 @@ public class CommunityViewer extends AbstractDSpaceTransformer implements Cachea String feedFormat = parts[0].trim()+"+xml"; - String feedURL = contextPath+"/feed/"+community.getExternalIdentifier().getCanonicalForm()+"/"+format.trim(); + String feedURL = IdentifierFactory.getURL(community).toString() +"/"+format.trim(); pageMeta.addMetadata("feed", feedFormat).addContent(feedURL); } } @@ -268,7 +269,7 @@ public class CommunityViewer extends AbstractDSpaceTransformer implements Cachea // Search query Division query = search.addInteractiveDivision("community-search", - contextPath + "/handle/" + community.getExternalIdentifier().getCanonicalForm() + "/search", + IdentifierFactory.getURL(community).toString() + "/search", Division.METHOD_POST, "secondary search"); Para para = query.addPara("search-query", null); @@ -283,7 +284,7 @@ public class CommunityViewer extends AbstractDSpaceTransformer implements Cachea List browse = browseDiv.addList("community-browse", List.TYPE_SIMPLE, "community-browse"); browse.setHead(T_head_browse); - String url = contextPath + "/handle/" + community.getExternalIdentifier().getCanonicalForm(); + String url = IdentifierFactory.getURL(community).toString(); browse.addItemXref(url + "/browse-title",T_browse_titles); browse.addItemXref(url + "/browse-author",T_browse_authors); browse.addItemXref(url + "/browse-date",T_browse_dates); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ConfigurableBrowse.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ConfigurableBrowse.java index 40e16fde33..52bf25f0f9 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ConfigurableBrowse.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ConfigurableBrowse.java @@ -89,6 +89,7 @@ import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.sort.SortException; import org.dspace.sort.SortOption; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; /** @@ -174,7 +175,7 @@ public class ConfigurableBrowse extends AbstractDSpaceTransformer implements { DSpaceObject dso = HandleUtil.obtainHandle(objectModel); if (dso != null) - key += "-" + dso.getExternalIdentifier().getCanonicalForm(); + key += "-" + IdentifierFactory.getCanonicalForm(dso); return HashUtil.hash(key); } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemViewer.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemViewer.java index 5602d1dd98..281e61cfba 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemViewer.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/ItemViewer.java @@ -39,11 +39,6 @@ */ package org.dspace.app.xmlui.aspect.artifactbrowser; -import java.io.IOException; -import java.io.Serializable; -import java.sql.SQLException; -import java.util.Map; - import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; @@ -57,16 +52,22 @@ import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Division; -import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.PageMeta; import org.dspace.app.xmlui.wing.element.Para; +import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.DCValue; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.util.Map; + /** * Display a single item. * @@ -104,7 +105,7 @@ public class ItemViewer extends AbstractDSpaceTransformer implements CacheablePr if (dso == null) return "0"; // no item, something is wrong. - return HashUtil.hash(dso.getExternalIdentifier().getCanonicalForm() + "full:" + showFullItem(objectModel)); + return HashUtil.hash(IdentifierFactory.getCanonicalForm(dso) + "full:" + showFullItem(objectModel)); } catch (SQLException sqle) { @@ -158,7 +159,7 @@ public class ItemViewer extends AbstractDSpaceTransformer implements CacheablePr if (title != null) pageMeta.addMetadata("title").addContent(title); else - pageMeta.addMetadata("title").addContent(item.getExternalIdentifier().getCanonicalForm()); + pageMeta.addMetadata("title").addContent(IdentifierFactory.getCanonicalForm(item)); pageMeta.addTrailLink(contextPath + "/",T_dspace_home); HandleUtil.buildHandleTrail(item,pageMeta,contextPath); @@ -183,19 +184,18 @@ public class ItemViewer extends AbstractDSpaceTransformer implements CacheablePr if (title != null) division.setHead(title); else - division.setHead(item.getExternalIdentifier().getCanonicalForm()); + division.setHead(IdentifierFactory.getCanonicalForm(item)); Para showfullPara = division.addPara(null, "item-view-toggle item-view-toggle-top"); if (showFullItem(objectModel)) { - String link = contextPath + "/handle/" + item.getExternalIdentifier().getCanonicalForm(); + String link = IdentifierFactory.getURL(item).toString(); showfullPara.addXref(link).addContent(T_show_simple); } else { - String link = contextPath + "/handle/" + item.getExternalIdentifier().getCanonicalForm() - + "?show=full"; + String link = IdentifierFactory.getURL(item).toString() + "?show=full"; showfullPara.addXref(link).addContent(T_show_full); } @@ -225,13 +225,12 @@ public class ItemViewer extends AbstractDSpaceTransformer implements CacheablePr if (showFullItem(objectModel)) { - String link = contextPath + "/handle/" + item.getExternalIdentifier().getCanonicalForm(); + String link = IdentifierFactory.getURL(item).toString(); showfullPara.addXref(link).addContent(T_show_simple); } else { - String link = contextPath + "/handle/" + item.getExternalIdentifier().getCanonicalForm() - + "?show=full"; + String link = IdentifierFactory.getURL(item).toString() + "?show=full"; showfullPara.addXref(link).addContent(T_show_full); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/Navigation.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/Navigation.java index 9a79ca5632..8f8f1be8be 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/Navigation.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/Navigation.java @@ -39,12 +39,6 @@ */ 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.Map; - import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; @@ -66,8 +60,15 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + /** * This transform applys the basic navigational links that should be available * on all pages generated by DSpace. @@ -115,7 +116,7 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr DSpaceObject dso = HandleUtil.obtainHandle(objectModel); if (dso != null) - key += "-" + dso.getExternalIdentifier().getCanonicalForm(); + key += "-" + IdentifierFactory.getCanonicalForm(dso); return HashUtil.hash(key); } @@ -192,7 +193,7 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr } // Add the configured browse lists for scoped browsing - String handle = dso.getExternalIdentifier().getCanonicalForm(); + String handle = IdentifierFactory.getCanonicalForm(dso); addBrowseOptions(browseContext, contextPath + "/handle/" + handle + "/browse"); } } @@ -229,14 +230,14 @@ public class Navigation extends AbstractDSpaceTransformer implements CacheablePr { if (dso instanceof Item) { - pageMeta.addMetadata("focus","object").addContent(dso.getExternalIdentifier().getCanonicalForm()); + pageMeta.addMetadata("focus","object").addContent(IdentifierFactory.getCanonicalForm(dso)); this.getObjectManager().manageObject(dso); dso = ((Item) dso).getOwningCollection(); } if (dso instanceof Collection || dso instanceof Community) { - pageMeta.addMetadata("focus","container").addContent(dso.getExternalIdentifier().getCanonicalForm()); + pageMeta.addMetadata("focus","container").addContent(IdentifierFactory.getCanonicalForm(dso)); this.getObjectManager().manageObject(dso); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/RestrictedItem.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/RestrictedItem.java index 5865bb8ed1..e638287adf 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/RestrictedItem.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/artifactbrowser/RestrictedItem.java @@ -39,14 +39,11 @@ */ package org.dspace.app.xmlui.aspect.artifactbrowser; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.utils.HandleUtil; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -57,8 +54,12 @@ import org.dspace.content.Bitstream; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * Display an item restricted message. * @@ -125,7 +126,7 @@ public class RestrictedItem extends AbstractDSpaceTransformer //implements Cache } else { - String handle = dso.getExternalIdentifier().getCanonicalForm(); + String handle = IdentifierFactory.getCanonicalForm(dso); type = "item"; if (handle == null || "".equals(handle)) { diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/general/HandleMatcher.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/general/HandleMatcher.java index 105c2bd15d..6cd4e1ad06 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/general/HandleMatcher.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/general/HandleMatcher.java @@ -121,7 +121,6 @@ public class HandleMatcher extends AbstractLogEnabled implements Matcher while (current != null) { - // Check if the current object has the handle we are looking for. if (current.getExternalIdentifier().getCanonicalForm().equals(handle)) return current; diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/CollectionViewer.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/CollectionViewer.java index 8b1d99fe3d..96029e8ff8 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/CollectionViewer.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/CollectionViewer.java @@ -39,10 +39,6 @@ */ package org.dspace.app.xmlui.aspect.submission; -import java.io.IOException; -import java.io.Serializable; -import java.sql.SQLException; - import org.apache.cocoon.caching.CacheableProcessingComponent; import org.apache.cocoon.util.HashUtil; import org.apache.excalibur.source.SourceValidity; @@ -58,8 +54,13 @@ import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.DSpaceObject; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; + /** * Add a single link to the display item page that allows * the user to submit a new item to this collection. @@ -89,7 +90,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache if (dso == null) return "0"; - return HashUtil.hash(dso.getExternalIdentifier().getCanonicalForm()); + return HashUtil.hash(IdentifierFactory.getCanonicalForm(dso)); } catch (SQLException sqle) { @@ -163,7 +164,7 @@ public class CollectionViewer extends AbstractDSpaceTransformer implements Cache Division home = body.addDivision("collection-home","primary repository collection"); Division viewer = home.addDivision("collection-view","secondary"); - String submitURL = contextPath + "/handle/" + collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String submitURL = IdentifierFactory.getURL(collection) + "/submit"; viewer.addPara().addXref(submitURL,"Submit a new item to this collection"); } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/FlowUtils.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/FlowUtils.java index ad800d8021..4ad0a238cf 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/FlowUtils.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/FlowUtils.java @@ -40,14 +40,6 @@ package org.dspace.app.xmlui.aspect.submission; -import java.io.IOException; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Map; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.http.HttpEnvironment; @@ -57,8 +49,8 @@ import org.dspace.app.util.SubmissionConfig; import org.dspace.app.util.SubmissionConfigReader; import org.dspace.app.util.SubmissionInfo; import org.dspace.app.util.SubmissionStepConfig; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.utils.ContextUtil; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.InProgressSubmission; @@ -67,9 +59,17 @@ import org.dspace.content.WorkspaceItem; import org.dspace.core.Context; import org.dspace.core.LogManager; import org.dspace.submit.AbstractProcessingStep; +import org.dspace.uri.IdentifierFactory; import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowManager; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Map; + /** * This is a utility class to aid in the submission flow scripts. * Since data validation is cumbersome inside a flow script this @@ -451,7 +451,7 @@ public class FlowUtils { //Load the Submission Process for the collection this WSI is associated with Collection c = wsi.getCollection(); SubmissionConfigReader subConfigReader = new SubmissionConfigReader(); - SubmissionConfig subConfig = subConfigReader.getSubmissionConfig(c.getExternalIdentifier().getCanonicalForm(), false); + SubmissionConfig subConfig = subConfigReader.getSubmissionConfig(IdentifierFactory.getCanonicalForm(c), false); // Set the "stage_reached" column on the workspace item // to the LAST page of the LAST step in the submission process diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/Submissions.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/Submissions.java index b6e0c4bb90..9d6d9a9b74 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/Submissions.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/Submissions.java @@ -39,9 +39,6 @@ */ package org.dspace.app.xmlui.aspect.submission; -import java.io.IOException; -import java.sql.SQLException; - import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; @@ -62,10 +59,14 @@ import org.dspace.content.SupervisedItem; import org.dspace.content.WorkspaceItem; import org.dspace.core.Constants; import org.dspace.eperson.EPerson; +import org.dspace.uri.IdentifierFactory; import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowManager; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * @author Scott Phillips */ @@ -245,7 +246,7 @@ public class Submissions extends AbstractDSpaceTransformer for (WorkflowItem owned : ownedItems) { int workflowItemID = owned.getID(); - String url = contextPath+"/handle/"+owned.getCollection().getExternalIdentifier().getCanonicalForm()+"/workflow?workflowID="+workflowItemID; + String url = IdentifierFactory.getURL(owned.getCollection()).toString()+"/workflow?workflowID="+workflowItemID; DCValue[] titles = owned.getItem().getDC("title", null, Item.ANY); String collectionName = owned.getCollection().getMetadata("name"); EPerson submitter = owned.getSubmitter(); @@ -308,7 +309,7 @@ public class Submissions extends AbstractDSpaceTransformer for (WorkflowItem pooled : pooledItems) { int workflowItemID = pooled.getID(); - String url = contextPath+"/handle/"+pooled.getCollection().getExternalIdentifier().getCanonicalForm()+"/workflow?workflowID="+workflowItemID; + String url = IdentifierFactory.getURL(pooled.getCollection()).toString()+"/workflow?workflowID="+workflowItemID; DCValue[] titles = pooled.getItem().getDC("title", null, Item.ANY); String collectionName = pooled.getCollection().getMetadata("name"); EPerson submitter = pooled.getSubmitter(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/CCLicenseStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/CCLicenseStep.java index 7fe2f3525e..dad670d0a0 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/CCLicenseStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/CCLicenseStep.java @@ -39,13 +39,10 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -56,8 +53,12 @@ import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Item; import org.dspace.license.CreativeCommons; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * This is an optional page of the item submission processes. The Creative * Commons license may be added to an item in addition to the standard distribution @@ -112,7 +113,7 @@ public class CCLicenseStep extends AbstractSubmissionStep // Build the url to and from creative commons Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; Request request = ObjectModelHelper.getRequest(objectModel); boolean https = request.isSecure(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/DescribeStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/DescribeStep.java index 568e967ae0..b25d7c033a 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/DescribeStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/DescribeStep.java @@ -39,21 +39,13 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Locale; - -import javax.servlet.ServletException; - import org.apache.log4j.Logger; - import org.dspace.app.util.DCInput; import org.dspace.app.util.DCInputSet; import org.dspace.app.util.DCInputsReader; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; import org.dspace.app.xmlui.aspect.submission.FlowUtils; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -73,10 +65,15 @@ import org.dspace.content.DCPersonName; import org.dspace.content.DCSeriesNumber; import org.dspace.content.DCValue; import org.dspace.content.Item; - - +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import javax.servlet.ServletException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Locale; + /** * This is a step of the item submission processes. The describe step queries * the user for various metadata items about the item. For the most part all the @@ -171,13 +168,13 @@ public class DescribeStep extends AbstractSubmissionStep // Obtain the inputs (i.e. metadata fields we are going to display) Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; DCInputSet inputSet = null; DCInput[] inputs = {}; try { - inputSet = getInputsReader().getInputs(submission.getCollection().getExternalIdentifier().getCanonicalForm()); + inputSet = getInputsReader().getInputs(IdentifierFactory.getCanonicalForm(submission.getCollection())); inputs = inputSet.getPageRows(getPage()-1, submission.hasMultipleTitles(), submission.isPublishedBefore()); } catch (ServletException se) @@ -317,7 +314,7 @@ public class DescribeStep extends AbstractSubmissionStep DCInputSet inputSet = null; try { - inputSet = getInputsReader().getInputs(submission.getCollection().getExternalIdentifier().getCanonicalForm()); + inputSet = getInputsReader().getInputs(IdentifierFactory.getCanonicalForm(submission.getCollection())); } catch (ServletException se) { diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/EditFileStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/EditFileStep.java index 9075d3723f..eb3be1ee56 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/EditFileStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/EditFileStep.java @@ -39,15 +39,11 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -60,8 +56,13 @@ import org.dspace.content.Bitstream; import org.dspace.content.BitstreamFormat; import org.dspace.content.Collection; import org.dspace.content.FormatIdentifier; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Map; + /** * This is a sub step of the Upload step during item submission. This * page allows the user to edit metadata about a bitstream (aka file) @@ -139,7 +140,7 @@ public class EditFileStep extends AbstractStep UIException, SQLException, IOException, AuthorizeException { Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; // Get the bitstream and all the various formats BitstreamFormat currentFormat = bitstream.getFormat(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/InitialQuestionsStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/InitialQuestionsStep.java index 88683b83e5..8f17c07e25 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/InitialQuestionsStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/InitialQuestionsStep.java @@ -39,11 +39,8 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; - -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -54,8 +51,12 @@ import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.DCValue; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * This is the first official step of the item submission processes. This * step will ask the user two questions which will direct whether future @@ -123,7 +124,7 @@ public class InitialQuestionsStep extends AbstractSubmissionStep // Get any metadata that may be removed by unselecting one of these options. Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; DCValue[] titles = item.getDC("title", "alternative", Item.ANY); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/LicenseStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/LicenseStep.java index 4aaf70761a..deb67c736b 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/LicenseStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/LicenseStep.java @@ -39,15 +39,11 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -57,8 +53,13 @@ import org.dspace.app.xmlui.wing.element.List; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.license.CreativeCommons; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Map; + /** * This is the last step of the item submission processes. During this * step the user must agree to the collection's standard distribution @@ -146,7 +147,7 @@ public class LicenseStep extends AbstractSubmissionStep // Get the full text for the actuial licese Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; String licenseText = collection.getLicense(); Division div = body.addInteractiveDivision("submit-license",actionURL, Division.METHOD_POST,"primary submission"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ResumeStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ResumeStep.java index 7b24ac0a0a..c205d18299 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ResumeStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ResumeStep.java @@ -39,24 +39,25 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Division; -import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * This step is used when the a user clicks an unfinished submission * from the submissions page. Here we present the full item and then @@ -94,7 +95,7 @@ public class ResumeStep extends AbstractStep // Get any metadata that may be removed by unselecting one of these options. Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; Request request = ObjectModelHelper.getRequest(objectModel); String showfull = request.getParameter("showfull"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ReviewStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ReviewStep.java index 15ff6703bb..c1cb86f06d 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ReviewStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/ReviewStep.java @@ -39,21 +39,16 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; -import java.util.Set; - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; import org.apache.log4j.Logger; import org.dspace.app.util.SubmissionConfig; import org.dspace.app.util.SubmissionStepConfig; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractStep; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; import org.dspace.app.xmlui.aspect.submission.FlowUtils; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -62,8 +57,14 @@ import org.dspace.app.xmlui.wing.element.List; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.submit.step.UploadStep; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Map; +import java.util.Set; + /** * This is a step of the item submission processes. This is where the user * reviews everything they have entered about the item up to this point. @@ -137,7 +138,7 @@ public class ReviewStep extends AbstractSubmissionStep { // Get actionable URL Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; SubmissionConfig subConfig = submissionInfo.getSubmissionConfig(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SaveOrRemoveStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SaveOrRemoveStep.java index 60424092e7..b9bc68ccc1 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SaveOrRemoveStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SaveOrRemoveStep.java @@ -39,12 +39,8 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; - - -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -52,8 +48,12 @@ import org.dspace.app.xmlui.wing.element.Division; import org.dspace.app.xmlui.wing.element.List; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * This is sort-of a step of the submission processes (not * an official "step", since it does not extend AbstractSubmissionStep). @@ -96,7 +96,7 @@ public class SaveOrRemoveStep extends AbstractStep UIException, SQLException, IOException, AuthorizeException { Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; Division div = body.addInteractiveDivision("submit-save-or-cancel",actionURL, Division.METHOD_POST,"primary submission"); div.setHead(T_submission_head); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SelectCollectionStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SelectCollectionStep.java index 056f21495e..9ee6005672 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SelectCollectionStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/SelectCollectionStep.java @@ -56,9 +56,8 @@ import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.dao.ExternalIdentifierDAO; -import org.dspace.uri.dao.ExternalIdentifierDAOFactory; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.core.Constants; import org.xml.sax.SAXException; @@ -106,14 +105,16 @@ public class SelectCollectionStep extends AbstractSubmissionStep { Collection[] collections; // List of possible collections. // DSpaceObject dso = HandleManager.resolveToObject(context, handle); + /* ExternalIdentifierDAO identifierDAO = ExternalIdentifierDAOFactory.getInstance(context); - ExternalIdentifier eid = identifierDAO.retrieve(handle); + ExternalIdentifier eid = identifierDAO.retrieve(handle);*/ + ResolvableIdentifier eid = IdentifierFactory.resolve(context, handle); DSpaceObject dso = null; if (eid != null) { - dso = eid.getObjectIdentifier().getObject(context); + dso = eid.getObject(context); } if (dso != null && dso instanceof Community) @@ -142,7 +143,7 @@ public class SelectCollectionStep extends AbstractSubmissionStep String name = collection.getMetadata("name"); if (name.length() > 50) name = name.substring(0, 47) + "..."; - select.addOption(collection.getExternalIdentifier().getCanonicalForm(),name); + select.addOption(IdentifierFactory.getCanonicalForm(collection),name); } Button submit = list.addItem().addButton("submit"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/UploadStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/UploadStep.java index 84dadb9d1d..71d25c9fd0 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/UploadStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/submit/UploadStep.java @@ -39,16 +39,12 @@ */ package org.dspace.app.xmlui.aspect.submission.submit; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Map; - import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; import org.apache.log4j.Logger; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; @@ -67,9 +63,14 @@ import org.dspace.content.BitstreamFormat; import org.dspace.content.Bundle; import org.dspace.content.Collection; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.dspace.workflow.WorkflowItem; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; +import java.util.Map; + /** * This is a step of the item submission processes. The upload * stages allows the user to upload files into the submission. The @@ -185,7 +186,7 @@ public class UploadStep extends AbstractSubmissionStep // Get a list of all files in the original bundle Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/submit"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/submit"; boolean workflow = submission instanceof WorkflowItem; Bundle[] bundles = item.getBundles("ORIGINAL"); Bitstream[] bitstreams = new Bitstream[0]; diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/PerformTaskStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/PerformTaskStep.java index d0bb82075a..96bee138a1 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/PerformTaskStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/PerformTaskStep.java @@ -39,9 +39,6 @@ */ package org.dspace.app.xmlui.aspect.submission.workflow; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; import org.dspace.app.xmlui.aspect.submission.AbstractStep; @@ -56,10 +53,14 @@ import org.dspace.app.xmlui.wing.element.Table; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowManager; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * * This step displays a workfrow item to the user and and presents several @@ -133,7 +134,7 @@ public class PerformTaskStep extends AbstractStep // Get any metadata that may be removed by unselecting one of these options. Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/workflow"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/workflow"; int state = ((WorkflowItem) submission).getState(); Request request = ObjectModelHelper.getRequest(objectModel); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/RejectTaskStep.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/RejectTaskStep.java index bd80f01122..0d9ad44eee 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/RejectTaskStep.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/aspect/submission/workflow/RejectTaskStep.java @@ -39,25 +39,26 @@ */ package org.dspace.app.xmlui.aspect.submission.workflow; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; -import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.aspect.submission.AbstractStep; +import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.Division; -import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.List; +import org.dspace.app.xmlui.wing.element.ReferenceSet; import org.dspace.app.xmlui.wing.element.TextArea; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Item; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.io.IOException; +import java.sql.SQLException; + /** * This step is used when the user has selected to * reject the item. Here they are asked to enter @@ -96,7 +97,7 @@ public class RejectTaskStep extends AbstractStep { Item item = submission.getItem(); Collection collection = submission.getCollection(); - String actionURL = contextPath + "/handle/"+collection.getExternalIdentifier().getCanonicalForm() + "/workflow"; + String actionURL = IdentifierFactory.getURL(collection).toString() + "/workflow"; Request request = ObjectModelHelper.getRequest(objectModel); String showfull = request.getParameter("showfull"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/BitstreamReader.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/BitstreamReader.java index ec72b4d4df..0b94cf337d 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/BitstreamReader.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/BitstreamReader.java @@ -68,6 +68,8 @@ import org.dspace.content.Bundle; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.uri.ExternalIdentifier; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.uri.dao.ExternalIdentifierDAO; import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.core.ConfigurationManager; @@ -221,12 +223,16 @@ public class BitstreamReader extends AbstractReader implements Recyclable else if (handle != null) { // Reference by an item's handle. + /* ExternalIdentifierDAO identifierDAO = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier eid = identifierDAO.retrieve(handle); - dso = eid.getObjectIdentifier().getObject(context); + dso = eid.getObjectIdentifier().getObject(context);*/ - if (dso instanceof Item && sequence > -1) + ResolvableIdentifier ri = IdentifierFactory.resolve(context, handle); + dso = ri.getObject(context); + + if (dso instanceof Item && sequence > -1) { bitstream = findBitstreamBySequence((Item) dso,sequence); } @@ -253,11 +259,11 @@ public class BitstreamReader extends AbstractReader implements Recyclable String redictURL = request.getContextPath() + "/handle/"; if (item!=null){ // redictURL += item.getHandle(); - redictURL += item.getExternalIdentifier().getCanonicalForm(); + redictURL += IdentifierFactory.getCanonicalForm(item); } else if(dso!=null){ // redictURL += dso.getHandle(); - redictURL += dso.getExternalIdentifier().getCanonicalForm(); + redictURL += IdentifierFactory.getCanonicalForm(dso); } redictURL += "/restricted-resource?bitstreamId=" + bitstream.getID(); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceFeedGenerator.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceFeedGenerator.java index 639d180805..6394586a12 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceFeedGenerator.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceFeedGenerator.java @@ -40,14 +40,11 @@ package org.dspace.app.xmlui.cocoon; -import java.io.IOException; -import java.io.Serializable; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - +import com.sun.syndication.feed.rss.Channel; +import com.sun.syndication.feed.rss.Description; +import com.sun.syndication.feed.rss.Image; +import com.sun.syndication.io.FeedException; +import com.sun.syndication.io.WireFeedOutput; import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; @@ -70,7 +67,6 @@ import org.dspace.browse.BrowseEngine; import org.dspace.browse.BrowseException; import org.dspace.browse.BrowseIndex; import org.dspace.browse.BrowserScope; -import org.dspace.sort.SortOption; import org.dspace.content.Bitstream; import org.dspace.content.Collection; import org.dspace.content.Community; @@ -78,23 +74,26 @@ import org.dspace.content.DCDate; import org.dspace.content.DCValue; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.dao.ExternalIdentifierDAO; -import org.dspace.uri.dao.ExternalIdentifierDAOFactory; import org.dspace.core.ConfigurationManager; import org.dspace.core.Constants; import org.dspace.core.Context; +import org.dspace.sort.SortException; +import org.dspace.sort.SortOption; +import org.dspace.uri.IdentifierFactory; +import org.dspace.uri.ResolvableIdentifier; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import com.sun.syndication.feed.rss.Channel; -import com.sun.syndication.feed.rss.Description; -import com.sun.syndication.feed.rss.Image; -import com.sun.syndication.io.FeedException; -import com.sun.syndication.io.WireFeedOutput; +import java.io.IOException; +import java.io.Serializable; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; /** * @@ -190,10 +189,13 @@ public class DSpaceFeedGenerator extends AbstractGenerator if (uri != null) { // dso = HandleManager.resolveToObject(context, handle); + /* ExternalIdentifierDAO dao = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier identifier = dao.retrieve(uri); - dso = identifier.getObjectIdentifier().getObject(context); + dso = identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + dso = ri.getObject(context); } validity.add(dso); @@ -258,12 +260,15 @@ public class DSpaceFeedGenerator extends AbstractGenerator if (uri != null) { // dso = HandleManager.resolveToObject(context, handle); + /* ExternalIdentifierDAO dao = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier identifier = dao.retrieve(uri); - dso = identifier.getObjectIdentifier().getObject(context); + dso = identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + dso = ri.getObject(context); - if (dso == null) + if (dso == null) { // If we were unable to find a uri then return page not found. throw new ResourceNotFoundException("Unable to find DSpace object matching the given URI: "+uri); @@ -588,7 +593,11 @@ public class DSpaceFeedGenerator extends AbstractGenerator { log.error("Caught browse exception", bex); } - return this.recentSubmissionItems; + catch (SortException sex) // apparently it's contageous + { + log.error("Caught sort exception", sex); + } + return this.recentSubmissionItems; } /** @@ -615,10 +624,10 @@ public class DSpaceFeedGenerator extends AbstractGenerator return url; } - if (ConfigurationManager.getBooleanProperty("webui.feed.localresolve") - || dso.getExternalIdentifier() == null) + if (ConfigurationManager.getBooleanProperty("webui.feed.localresolve")) { - Request request = ObjectModelHelper.getRequest(objectModel); + /* + Request request = ObjectModelHelper.getRequest(objectModel); String url = (request.isSecure()) ? "https://" : "http://"; url += ConfigurationManager.getProperty("dspace.hostname"); @@ -626,10 +635,12 @@ public class DSpaceFeedGenerator extends AbstractGenerator url += request.getContextPath(); url += "/handle/" + dso.getExternalIdentifier().getCanonicalForm(); return url; - } + */ + return IdentifierFactory.getLocalURL(dso).toString(); + } else { - return dso.getExternalIdentifier().getURI().toString(); + return IdentifierFactory.getURL(dso).toString(); } } diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceMETSGenerator.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceMETSGenerator.java index c69a37ac7f..957244da85 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceMETSGenerator.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/cocoon/DSpaceMETSGenerator.java @@ -59,9 +59,8 @@ import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.content.crosswalk.CrosswalkException; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.dao.ExternalIdentifierDAO; -import org.dspace.uri.dao.ExternalIdentifierDAOFactory; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.xml.sax.SAXException; @@ -172,12 +171,15 @@ public class DSpaceMETSGenerator extends AbstractGenerator // Specified using a regular handle. // DSpaceObject dso = HandleManager.resolveToObject(context, handle); // FIXME: This could be totally broken, I have no idea + /* ExternalIdentifierDAO identifierDAO = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier eid = identifierDAO.retrieve(uri); - DSpaceObject dso = eid.getObjectIdentifier().getObject(context); - - // Handles can be either items or containers. + DSpaceObject dso = eid.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, uri); + DSpaceObject dso = ri.getObject(context); + + // Handles can be either items or containers. if (dso instanceof Item) adapter = new ItemAdapter((Item) dso, contextPath); else if (dso instanceof Collection || dso instanceof Community) diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/AbstractAdapter.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/AbstractAdapter.java index de08ede82e..99eeb4ce53 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/AbstractAdapter.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/AbstractAdapter.java @@ -40,12 +40,6 @@ package org.dspace.app.xmlui.objectmanager; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - import org.dspace.app.util.Util; import org.dspace.app.xmlui.wing.AttributeMap; import org.dspace.app.xmlui.wing.Namespace; @@ -56,12 +50,19 @@ import org.dspace.content.Item; import org.dspace.content.crosswalk.CrosswalkException; import org.dspace.content.crosswalk.DisseminationCrosswalk; import org.dspace.core.PluginManager; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.NamespaceSupport; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + /** * This is the abstract adapter containing all the common elements between @@ -398,6 +399,7 @@ public abstract class AbstractAdapter // be null if a handle has not yet been assigned. In this case refrence the // item its internal id. In the last case where the bitstream is not associated // with an item (such as a community logo) then refrence the bitstreamID directly. + /* String identifier = null; if (item != null && item.getExternalIdentifier().getCanonicalForm() != null) identifier = "handle/"+item.getExternalIdentifier().getCanonicalForm(); @@ -408,6 +410,8 @@ public abstract class AbstractAdapter String url = contextPath + "/bitstream/"+identifier+"/"; + */ + String url = contextPath + IdentifierFactory.getURL(bitstream).toString(); // If we can put the pretty name of the bitstream on the end of the URL try diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ContainerAdapter.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ContainerAdapter.java index c2645e0671..bb377cec98 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ContainerAdapter.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ContainerAdapter.java @@ -40,10 +40,6 @@ package org.dspace.app.xmlui.objectmanager; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.sql.SQLException; - import org.dspace.app.xmlui.wing.AttributeMap; import org.dspace.app.xmlui.wing.WingException; import org.dspace.authorize.AuthorizeException; @@ -54,6 +50,7 @@ import org.dspace.content.DSpaceObject; import org.dspace.content.crosswalk.CrosswalkException; import org.dspace.content.crosswalk.DisseminationCrosswalk; import org.dspace.core.Constants; +import org.dspace.uri.IdentifierFactory; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; @@ -61,6 +58,10 @@ import org.jdom.input.SAXBuilder; import org.jdom.output.SAXOutputter; import org.xml.sax.SAXException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.sql.SQLException; + /** * This is an adapter which translates DSpace containers * (communities & collections) into METS documents. This adapter follows @@ -123,9 +124,7 @@ public class ContainerAdapter extends AbstractAdapter */ protected String getMETSOBJID() { - if (dso.getExternalIdentifier() != null) - return contextPath+"/handle/" + dso.getExternalIdentifier().getCanonicalForm(); - return null; + return IdentifierFactory.getURL(dso).toString(); } /** @@ -141,15 +140,7 @@ public class ContainerAdapter extends AbstractAdapter */ protected String getMETSID() { - if (dso.getExternalIdentifier().getCanonicalForm() == null) - { - if (dso instanceof Collection) - return "collection:"+dso.getID(); - else - return "community:"+dso.getID(); - } - else - return dso.getExternalIdentifier().getCanonicalForm(); + return IdentifierFactory.getCanonicalForm(dso); } /** @@ -270,7 +261,7 @@ public class ContainerAdapter extends AbstractAdapter String description_abstract = collection.getMetadata("short_description"); String description_table = collection.getMetadata("side_bar_text"); // FIXME: Oh, so broken. - String identifier_uri = "http://hdl.handle.net/" + collection.getExternalIdentifier().getValue(); + String identifier_uri = IdentifierFactory.getURL(collection).toString(); String provenance = collection.getMetadata("provenance_description"); String rights = collection.getMetadata("copyright_text"); String rights_license = collection.getMetadata("license"); @@ -293,7 +284,7 @@ public class ContainerAdapter extends AbstractAdapter String description_abstract = community.getMetadata("short_description"); String description_table = community.getMetadata("side_bar_text"); // FIXME: Oh, so broken. - String identifier_uri = "http://hdl.handle.net/" + community.getExternalIdentifier().getValue(); + String identifier_uri = IdentifierFactory.getURL(community).toString(); String rights = community.getMetadata("copyright_text"); String title = community.getMetadata("name"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/DSpaceObjectManager.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/DSpaceObjectManager.java index 1eadf9417f..fd914113be 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/DSpaceObjectManager.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/DSpaceObjectManager.java @@ -40,10 +40,6 @@ package org.dspace.app.xmlui.objectmanager; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - import org.dspace.app.xmlui.wing.ObjectManager; import org.dspace.app.xmlui.wing.WingException; import org.dspace.content.Collection; @@ -51,6 +47,11 @@ import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; +import org.dspace.uri.IdentifierFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; /** @@ -112,7 +113,8 @@ public class DSpaceObjectManager implements ObjectManager if (object instanceof DSpaceObject) { DSpaceObject dso = (DSpaceObject) object; - String handle = dso.getExternalIdentifier().getCanonicalForm(); + String handle = IdentifierFactory.getCanonicalForm(dso); + // String handle = dso.getExternalIdentifier().getCanonicalForm(); // If the object has a handle then refrence it by it's handle. if (handle != null) diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ItemAdapter.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ItemAdapter.java index 842e406634..876219e017 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ItemAdapter.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/ItemAdapter.java @@ -50,6 +50,7 @@ import org.dspace.content.crosswalk.CrosswalkException; import org.dspace.content.crosswalk.DisseminationCrosswalk; import org.dspace.core.ConfigurationManager; import org.dspace.core.Constants; +import org.dspace.uri.IdentifierFactory; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.output.SAXOutputter; @@ -60,7 +61,6 @@ import org.xml.sax.helpers.XMLReaderFactory; import java.io.IOException; import java.io.InputStream; -import java.net.URLEncoder; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; @@ -138,9 +138,7 @@ public class ItemAdapter extends AbstractAdapter */ protected String getMETSOBJID() { - if (item.getExternalIdentifier().getCanonicalForm() != null) - return contextPath+"/handle/" + item.getExternalIdentifier().getCanonicalForm(); - return null; + return IdentifierFactory.getURL(item).toString(); } /** @@ -156,10 +154,7 @@ public class ItemAdapter extends AbstractAdapter */ protected String getMETSID() { - if (item.getExternalIdentifier().getCanonicalForm() == null) - return "item:"+item.getID(); - else - return item.getExternalIdentifier().getCanonicalForm(); + return IdentifierFactory.getCanonicalForm(item); } /** diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/RepositoryAdapter.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/RepositoryAdapter.java index f9d0dd6fbc..2dfab2d590 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/RepositoryAdapter.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/objectmanager/RepositoryAdapter.java @@ -39,8 +39,6 @@ */ package org.dspace.app.xmlui.objectmanager; -import java.sql.SQLException; - import org.dspace.app.xmlui.wing.AttributeMap; import org.dspace.app.xmlui.wing.Namespace; import org.dspace.app.xmlui.wing.WingException; @@ -50,8 +48,11 @@ import org.dspace.content.DSpaceObject; import org.dspace.core.ConfigurationManager; import org.dspace.core.Constants; import org.dspace.core.Context; +import org.dspace.uri.IdentifierFactory; import org.xml.sax.SAXException; +import java.sql.SQLException; + /** * This is an an adapter which translates a DSpace repository into a METS * document. Unfortunitaly there is no real definition of what this is. So @@ -323,7 +324,7 @@ public class RepositoryAdapter extends AbstractAdapter attributesXLINK.setNamespace(XLINK); attributes.put("LOCTYPE", "URL"); - attributesXLINK.put("href", "/metadata/handle/"+ dso.getExternalIdentifier().getCanonicalForm() +"/mets.xml"); + attributesXLINK.put("href", "/metadata/handle/"+ IdentifierFactory.getCanonicalForm(dso) +"/mets.xml"); // FIXME this isn't right startElement(METS,"mptr",attributes,attributesXLINK); endElement(METS,"mptr"); diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/DSpaceValidity.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/DSpaceValidity.java index 0f1a908c97..77f2350013 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/DSpaceValidity.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/DSpaceValidity.java @@ -40,9 +40,6 @@ package org.dspace.app.xmlui.utils; -import java.io.IOException; -import java.sql.SQLException; - import org.apache.cocoon.util.HashUtil; import org.apache.excalibur.source.SourceValidity; import org.dspace.content.Bitstream; @@ -54,6 +51,10 @@ import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.eperson.EPerson; import org.dspace.eperson.Group; +import org.dspace.uri.IdentifierFactory; + +import java.io.IOException; +import java.sql.SQLException; /** * This is a validity object specificaly implemented for the caching @@ -262,7 +263,8 @@ public class DSpaceValidity implements SourceValidity Community community = (Community) dso; validityKey.append("Community:"); - validityKey.append(community.getExternalIdentifier().getCanonicalForm()); + validityKey.append(IdentifierFactory.getCanonicalForm(community)); + // validityKey.append(community.getExternalIdentifier().getCanonicalForm()); validityKey.append(community.getMetadata("introductory_text")); validityKey.append(community.getMetadata("short_description")); validityKey.append(community.getMetadata("side_bar_text")); @@ -278,7 +280,8 @@ public class DSpaceValidity implements SourceValidity Collection collection = (Collection) dso; validityKey.append("Collection:"); - validityKey.append(collection.getExternalIdentifier().getCanonicalForm()); + validityKey.append(IdentifierFactory.getCanonicalForm(collection)); + // validityKey.append(collection.getExternalIdentifier().getCanonicalForm()); validityKey.append(collection.getMetadata("introductory_text")); validityKey.append(collection.getMetadata("short_description")); validityKey.append(collection.getMetadata("side_bar_text")); @@ -296,7 +299,8 @@ public class DSpaceValidity implements SourceValidity Item item = (Item) dso; validityKey.append("Item:"); - validityKey.append(item.getExternalIdentifier().getCanonicalForm()); + validityKey.append(IdentifierFactory.getCanonicalForm(item)); + //validityKey.append(item.getExternalIdentifier().getCanonicalForm()); // Include all metadata values in the validity key. DCValue[] dcvs = item.getDC(Item.ANY,Item.ANY,Item.ANY); for (DCValue dcv : dcvs) diff --git a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/HandleUtil.java b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/HandleUtil.java index fbf8091b29..b4d9fa273e 100644 --- a/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/HandleUtil.java +++ b/dspace-xmlui/dspace-xmlui-api/src/main/java/org/dspace/app/xmlui/utils/HandleUtil.java @@ -53,9 +53,8 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; -import org.dspace.uri.ExternalIdentifier; -import org.dspace.uri.dao.ExternalIdentifierDAO; -import org.dspace.uri.dao.ExternalIdentifierDAOFactory; +import org.dspace.uri.ResolvableIdentifier; +import org.dspace.uri.IdentifierFactory; import org.dspace.core.Constants; import org.dspace.core.Context; @@ -112,10 +111,13 @@ public class HandleUtil Context context = ContextUtil.obtainContext(objectModel); // dso = HandleManager.resolveToObject(context, handle); + /* ExternalIdentifierDAO dao = ExternalIdentifierDAOFactory.getInstance(context); ExternalIdentifier identifier = dao.retrieve(handle); - dso = identifier.getObjectIdentifier().getObject(context); + dso = identifier.getObjectIdentifier().getObject(context);*/ + ResolvableIdentifier ri = IdentifierFactory.resolve(context, handle); + dso = ri.getObject(context); request.setAttribute(DSPACE_OBJECT, dso); } diff --git a/dspace/config/dspace.cfg b/dspace/config/dspace.cfg index 39619f1a03..5f48afc1be 100644 --- a/dspace/config/dspace.cfg +++ b/dspace/config/dspace.cfg @@ -256,6 +256,39 @@ plugin.sequence.org.dspace.uri.IdentifierResolver = \ # identifier.url-scheme = hdl +# where should we store the actual uuid of the item? +# +indentifier.metadata.canonical-field.internal = dc.identifier.uuid + +# Should we store the full resolvable url of the item in the repository in +# its metadata? Since the local service URL may not be persistent, this may +# not be appropriate, but if no external resolving service is available and +# you make a commitment to always resolving this url, or updating it for +# each item if it changes, then this can safely be set to true +# +identifier.metadata.store-url.internal = false + +# If we are storing the full resolvable url of the item, where should we put it? +# +identifier.metadata.url-field.internal = dc.identifier.url + +# Equivalent settings for external identifiers. +# +# Where should we store the canonical and url forms of the external identifiers +# associated with the item +# +# The form of these declarations is as follows, in order to work with the plugin +# framework for external identifiers: +# +# identifier.metadata.canonical-field.[identifier namespace] = [metadata field] +# identifier.metadata.url-field.[identifier namespace] = [metadata field] +# +# you should include additonal configuration for every external identifier +# plugin added +# +identifier.metadata.canonical-field.hdl = dc.identifier.hdl +identifier.metadata.url-field.hdl = dc.identifier.url + ##### Handle settings ###### # CNRI Handle prefix