Package org.fcrepo.server.access.defaultdisseminator

Source Code of org.fcrepo.server.access.defaultdisseminator.ObjectInfoAsXML

/* The contents of this file are subject to the license and copyright terms
* detailed in the license directory at the root of the source tree (also
* available online at http://fedora-commons.org/license/).
*/
package org.fcrepo.server.access.defaultdisseminator;

import java.io.File;
import java.io.InputStream;

import java.util.Date;

import org.fcrepo.common.Constants;

import org.fcrepo.server.Context;
import org.fcrepo.server.Server;
import org.fcrepo.server.access.ObjectProfile;
import org.fcrepo.server.errors.ObjectIntegrityException;
import org.fcrepo.server.errors.ServerException;
import org.fcrepo.server.rest.DefaultSerializer;
import org.fcrepo.server.storage.DOReader;
import org.fcrepo.server.storage.types.Datastream;
import org.fcrepo.server.storage.types.ObjectMethodsDef;
import org.fcrepo.server.utilities.DCFields;
import org.fcrepo.server.utilities.StreamUtility;

import org.fcrepo.utilities.DateUtility;



/**
* Provide an XML encoding of various object components.
*
* @author Sandy Payette
* @version $Id$
*/
public class ObjectInfoAsXML
        implements Constants {

    private final Context m_context;

    public ObjectInfoAsXML(Context context) {
        m_context = context;
    }

    public String getObjectProfile(String reposBaseURL,
                                   ObjectProfile objProfile,
                                   Date versDateTime) throws ServerException {

        // use REST serializer
        Server fedoraServer = Server.getInstance(new File(Constants.FEDORA_HOME), false);
        String fedoraServerHost = fedoraServer.getParameter("fedoraServerHost");
        DefaultSerializer ser = new DefaultSerializer(fedoraServerHost, m_context);
        return ser.objectProfileToXML(objProfile, versDateTime);
    }

    public String getItemIndex(String reposBaseURL,
                               String applicationContext,
                               DOReader reader,
                               Date versDateTime) throws ServerException {
        try {
            Datastream[] datastreams =
                    reader.GetDatastreams(versDateTime, null);
            StringBuffer out = new StringBuffer();

            out.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
            out.append("<objectItemIndex");
            out.append(" PID=\"" + reader.GetObjectPID() + "\"");
            if (versDateTime != null) {
                out.append(" dateTime=\"");
                out.append(DateUtility.convertDateToString(versDateTime));
                out.append("\"");
            }
            out.append(" xmlns:xsi=\"" + XSI.uri + "\"");
            out.append(" xsi:schemaLocation=\"" + ACCESS.uri + " ");
            out.append(OBJ_ITEMS1_0.xsdLocation + "\">");

            for (Datastream element : datastreams) {
                out.append("<item>\n");
                out.append("<itemId>" + StreamUtility.enc(element.DatastreamID)
                        + "</itemId>\n");
                String label = element.DSLabel;
                if (label == null) {
                    label = "";
                }
                out.append("<itemLabel>" + StreamUtility.enc(label)
                        + "</itemLabel>\n");

                String itemDissURL =
                        getItemDissURL(reposBaseURL,
                                       applicationContext,
                                       reader.GetObjectPID(),
                                       element.DatastreamID,
                                       versDateTime);
                out.append("<itemURL>" + StreamUtility.enc(itemDissURL)
                        + "</itemURL>\n");
                out.append("<itemMIMEType>" + StreamUtility.enc(element.DSMIME)
                        + "</itemMIMEType>\n");
                out.append("</item>\n");
            }
            out.append("</objectItemIndex>");
            return out.toString();
        } catch (Exception e) {
            e.printStackTrace();
            throw new ObjectIntegrityException(e.getMessage());
        }
    }

    public String getMethodIndex(String reposBaseURL,
                                 String PID,
                                 ObjectMethodsDef[] methods,
                                 Date versDateTime) throws ServerException {

        // use REST serializer
        Server fedoraServer = Server.getInstance(new File(Constants.FEDORA_HOME), false);
        String fedoraServerHost = fedoraServer.getParameter("fedoraServerHost");
        DefaultSerializer ser = new DefaultSerializer(fedoraServerHost, m_context);
        return ser.objectMethodsToXml(methods, PID, null, versDateTime);

    }

    public String getOAIDublinCore(Datastream dublinCore)
            throws ServerException {
        DCFields dc;
        if (dublinCore == null) {
            dc = new DCFields();
        } else {
            InputStream in = dublinCore.getContentStream();
            dc = new DCFields(in);
        }
        return dc.getAsXML();
    }

    private String getItemDissURL(String reposBaseURL,
                                  String applicationContext,
                                  String PID,
                                  String datastreamID,
                                  Date versDateTime) {
        String itemDissURL = null;

        if (versDateTime == null) {
            itemDissURL =
                    reposBaseURL + "/" + applicationContext + "/get/" + PID + "/" + datastreamID;
        } else {
            itemDissURL =
                    reposBaseURL + "/" + applicationContext + "/get/" + PID + "/" + datastreamID
                            + "/"
                            + DateUtility.convertDateToString(versDateTime);
        }
        return itemDissURL;
    }
}
TOP

Related Classes of org.fcrepo.server.access.defaultdisseminator.ObjectInfoAsXML

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.