/**
* PreviewIngestServlet.java
* Author: Francesco Rosso (rosso@eurix.it)
*
* This file is part of PrestoPRIME Preservation Platform (P4).
*
* Copyright (C) 2009-2012 EURIX Srl, Torino, Italy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.prestoprime.p4gui.ingest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilderFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import eu.prestoprime.model.dc.Record;
import eu.prestoprime.model.mets.AmdSecType;
import eu.prestoprime.model.mets.FileType;
import eu.prestoprime.model.mets.FileType.FLocat;
import eu.prestoprime.model.mets.MdSecType;
import eu.prestoprime.model.mets.MdSecType.MdWrap;
import eu.prestoprime.model.mets.MdSecType.MdWrap.XmlData;
import eu.prestoprime.model.mets.Mets;
import eu.prestoprime.model.mets.MetsType.FileSec;
import eu.prestoprime.model.mets.MetsType.FileSec.FileGrp;
import eu.prestoprime.model.mets.ObjectFactory;
import eu.prestoprime.p4gui.P4GUI;
import eu.prestoprime.p4gui.model.oais.SIP;
@WebServlet("/ingest/preview")
public class PreviewIngestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(PreviewIngestServlet.class);
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("Start creating METS...");
Mets mets = new ObjectFactory().createMets();
mets.setID(UUID.randomUUID().toString());
// DmdSec
Record record = new Record();
record.getIdentifier().add(request.getParameter("dc_identifier"));
record.getTitle().add(request.getParameter("dc_title"));
record.getDescription().add(request.getParameter("dc_description"));
record.getCreator().add(request.getParameter("dc_creator"));
record.getSource().add(request.getParameter("dc_source"));
record.getFormat().add(request.getParameter("dc_format"));
record.getLanguage().add(request.getParameter("dc_language"));
record.getPublisher().add(request.getParameter("dc_publisher"));
XmlData xmlDataDC = new XmlData();
xmlDataDC.getAny().add(record);
MdWrap mdWrapDC = new MdWrap();
mdWrapDC.setMDTYPE("DC");
mdWrapDC.setXmlData(xmlDataDC);
MdSecType mdSec = new MdSecType();
mdSec.setID("dmd-001");
mdSec.setMdWrap(mdWrapDC);
mets.getDmdSec().add(mdSec);
// amdSec
String owl = request.getParameter("owl");
if (owl != null && !owl.equals("")) {
try {
Node rightsNode = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(owl.getBytes())).getDocumentElement();
XmlData xmlDataRights = new XmlData();
xmlDataRights.getAny().add(rightsNode);
MdWrap mdWrapRights = new MdWrap();
mdWrapRights.setXmlData(xmlDataRights);
mdWrapRights.setMDTYPE("OTHER");
mdWrapRights.setOTHERMDTYPE("PPAVRO");
mdWrapRights.setLABEL("PPRIGHTS");
mdWrapRights.setMIMETYPE("application/owl+xml");
MdSecType rightsMD = new MdSecType();
rightsMD.setMdWrap(mdWrapRights);
AmdSecType amdSec = new AmdSecType();
amdSec.setID("amd-001");
amdSec.getRightsMD().add(rightsMD);
mets.getAmdSec().add(amdSec);
} catch (Exception e) {
e.printStackTrace();
}
}
// FileGrp
FileGrp fileGrp = new FileGrp();
fileGrp.setID("rep-001");
fileGrp.getADMID().add(mdSec);
int i = 0;
String mimetype;
while ((mimetype = request.getParameter("resource_mimetype_" + i)) != null && !mimetype.equals("off")) {
int j = 0;
String href;
if ((href = request.getParameter("resource_href_" + i + "_" + j)) != null && !href.equals("")) {
FLocat tmpFLocat = new FLocat();
tmpFLocat.setID("FLocat-00" + j);
tmpFLocat.setHref(href);
tmpFLocat.setLOCTYPE("OTHER");
tmpFLocat.setOTHERLOCTYPE("FILE");
FileType tmpFile = new FileType();
tmpFile.setID("file");
tmpFile.setMIMETYPE(mimetype);
tmpFile.getFLocat().add(tmpFLocat);
fileGrp.getFile().add(tmpFile);
}
i++;
}
if (fileGrp.getFile().size() > 0) {
FileSec fileSec = new FileSec();
fileSec.getFileGrp().add(fileGrp);
mets.setFileSec(fileSec);
}
logger.info("METS created!");
SIP sip = new SIP(mets);
request.getSession().removeAttribute(P4GUI.SIP_BEAN_NAME);
request.getSession().setAttribute(P4GUI.SIP_BEAN_NAME, sip);
String sipString = sip.getContentAsString(true);
response.setContentType("text/xml");
response.setContentLength((int) sipString.length());
response.setHeader("Content-Disposition", "attachment; filename=\"SIP.xml\"");
response.getWriter().write(sipString);
}
}