public static URL getLocalURL(DSpaceObject dso) { URL url = null; ObjectIdentifier oid = dso.getIdentifier(); if (oid == null) { return null; } url = IdentifierFactory.getURL(oid); return url; }
public static String getCanonicalForm(DSpaceObject dso) { String cf = ""; String ns = ConfigurationManager.getProperty("identifier.url-scheme"); if (!"".equals(ns) && ns != null) { ExternalIdentifierType type = ExternalIdentifierMint.getType(ns); List<ExternalIdentifier> eids = dso.getExternalIdentifiers(); for (ExternalIdentifier eid : eids) { if (eid.getType().equals(type)) { cf = eid.getCanonicalForm(); } } } if ("".equals(cf)) { ObjectIdentifier oid = dso.getIdentifier(); if (oid == null) { return cf; } cf = oid.getCanonicalForm(); } return cf; }
public static URL getURL(DSpaceObject dso) { URL url = null; String ns = ConfigurationManager.getProperty("identifier.url-scheme"); if (!"".equals(ns) && ns != null) { ExternalIdentifierType type = ExternalIdentifierMint.getType(ns); List<ExternalIdentifier> eids = dso.getExternalIdentifiers(); for (ExternalIdentifier eid : eids) { if (eid.getType().equals(type)) { url = IdentifierFactory.getURL(eid); } } } if (url == null) { ObjectIdentifier oid = dso.getIdentifier(); if (oid == null) { return null; } url = IdentifierFactory.getURL(oid); } return url; }
public void processDSpaceObject( Context context, HttpServletRequest request, HttpServletResponse response, DSpaceObject dso, String extraPathInfo) throws ServletException, IOException, SQLException, AuthorizeException { // OK, we have a valid URI. What is it? if (dso.getType() == Constants.BITSTREAM) { // FIXME: Check for if-modified-since header Bitstream bitstream = (Bitstream) dso; log.info( LogManager.getHeader(context, "view_bitstream", "bitstream_id=" + bitstream.getID())); // Pipe the bits // InputStream is = bitstream.retrieve(); InputStream is = BitstreamStorageManager.retrieve(context, bitstream); // Set the response MIME type response.setContentType(bitstream.getFormat().getMIMEType()); response.setHeader("Content-Length", String.valueOf(bitstream.getSize())); response.setHeader("Content-disposition", "attachment; filename=" + bitstream.getName()); Utils.bufferedCopy(is, response.getOutputStream()); is.close(); response.getOutputStream().flush(); } else if (dso.getType() == Constants.ITEM) { Item item = (Item) dso; response.setDateHeader("Last-Modified", item.getLastModified().getTime()); // Check for if-modified-since header long modSince = request.getDateHeader("If-Modified-Since"); if (modSince != -1 && item.getLastModified().getTime() < modSince) { // Item has not been modified since requested date, // hence bitstream has not; return 304 response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } else { // Display the item page displayItem(context, request, response, item); } } else if (dso.getType() == Constants.COLLECTION) { Collection c = (Collection) dso; // Store collection location in request request.setAttribute("dspace.collection", c); /* * Find the "parent" community the collection, mainly for * "breadcrumbs" FIXME: At the moment, just grab the first community * the collection is in. This should probably be more context * sensitive when we have multiple inclusion. */ Community[] parents = (Community[]) c.getCommunities().toArray(); request.setAttribute("dspace.community", parents[0]); /* * Find all the "parent" communities for the collection for * "breadcrumbs" */ request.setAttribute("dspace.communities", getParents(parents[0], true)); // home page, or forward to another page? if ((extraPathInfo == null) || (extraPathInfo.equals("/"))) { collectionHome(context, request, response, parents[0], c); } else { // Forward to another servlet request.getRequestDispatcher(extraPathInfo).forward(request, response); } } else if (dso.getType() == Constants.COMMUNITY) { Community c = (Community) dso; // Store collection location in request request.setAttribute("dspace.community", c); /* * Find all the "parent" communities for the community */ request.setAttribute("dspace.communities", getParents(c, false)); // home page, or forward to another page? if ((extraPathInfo == null) || (extraPathInfo.equals("/"))) { communityHome(context, request, response, c); } else { // Forward to another servlet request.getRequestDispatcher(extraPathInfo).forward(request, response); } } else { // Shouldn't happen. Log and treat as invalid ID log.info( LogManager.getHeader( context, "URI not an item, collection or community", "identifier=" + dso.getIdentifier().toString())); JSPManager.showInvalidIDError(request, response, request.getPathInfo(), -1); return; } }