001 package org.kuali.ole.docstore.document; 002 003 import org.apache.commons.io.FileUtils; 004 import org.kuali.ole.docstore.OleDocStoreException; 005 import org.kuali.ole.docstore.model.enums.DocFormat; 006 import org.kuali.ole.docstore.model.xmlpojo.ingest.AdditionalAttributes; 007 import org.kuali.ole.docstore.model.xmlpojo.ingest.RequestDocument; 008 import org.kuali.ole.docstore.model.xmlpojo.ingest.ResponseDocument; 009 import org.kuali.ole.docstore.repository.WorkLicenseNodeManager; 010 import org.slf4j.Logger; 011 import org.slf4j.LoggerFactory; 012 013 import javax.jcr.Node; 014 import javax.jcr.Session; 015 import java.io.File; 016 import java.io.FileOutputStream; 017 import java.util.Calendar; 018 import java.util.List; 019 020 /** 021 * Implements the DocumentManager interface for [Work-License-*] documents. 022 * 023 * @version %I%, %G% 024 * @author: tirumalesh.b 025 * Date: 31/8/12 Time: 7:04 PM 026 */ 027 028 public class WorkLicenseDocumentManager 029 extends AbstractDocumentManager { 030 private static WorkLicenseDocumentManager ourInstance = null; 031 private static final Logger LOG = LoggerFactory 032 .getLogger(WorkLicenseDocumentManager.class); 033 034 public static WorkLicenseDocumentManager getInstance() { 035 if (null == ourInstance) { 036 ourInstance = new WorkLicenseDocumentManager(); 037 } 038 return ourInstance; 039 } 040 041 protected WorkLicenseDocumentManager() { 042 super(); 043 this.nodeManager = WorkLicenseNodeManager.getInstance(); 044 } 045 046 @Override 047 public boolean isVersioningEnabled() { 048 return true; 049 } 050 051 @Override 052 protected void modifyAdditionalAttributes(AdditionalAttributes additionalAttributes, 053 RequestDocument requestDocument) { 054 if (!DocFormat.ONIXPL.isEqualTo(requestDocument.getFormat())) { 055 String docName = new File(requestDocument.getDocumentName()).getName(); 056 additionalAttributes.setAttribute("dateEntered", Calendar.getInstance().toString()); 057 additionalAttributes.setAttribute("fileName", docName); 058 additionalAttributes.setAttribute("owner", requestDocument.getUser()); 059 } 060 } 061 062 @Override 063 protected byte[] convertContentToBytes(RequestDocument reqDoc) throws OleDocStoreException { 064 String charset = "UTF-8"; 065 byte[] documentBytes = new byte[0]; 066 try { 067 if (reqDoc.getDocumentName() != null && reqDoc.getDocumentName().trim().length() != 0) { 068 documentBytes = FileUtils.readFileToByteArray(new File(reqDoc.getDocumentName())); 069 } 070 else if (reqDoc.getContent().getContent() != null) { 071 documentBytes = reqDoc.getContent().getContent().getBytes(charset); 072 } 073 } 074 catch (Exception e) { 075 LOG.info("Failed to convert input string to byte[] with charset " + e); 076 throw new OleDocStoreException(e.getMessage()); 077 } 078 return documentBytes; 079 } 080 081 @Override 082 protected String checkOutContent(Node nodeByUUID, String format, String user) throws OleDocStoreException { 083 String outputFilePath = null; 084 if (!user.equalsIgnoreCase("RestWebUser") && (format.equals(DocFormat.PDF.getCode()) || format 085 .equals(DocFormat.DOC.getCode()))) { 086 try { 087 FileOutputStream fos = null; 088 File output = File.createTempFile("checkout.", ".output"); 089 FileUtils.deleteQuietly(output); 090 output.mkdirs(); 091 092 String fileNameAndExtension = null; 093 fileNameAndExtension = nodeByUUID.getIdentifier() + format; 094 outputFilePath = output.getAbsolutePath() + File.separator + fileNameAndExtension; 095 byte[] binaryContent = nodeManager.getBinaryData(nodeByUUID); 096 fos = new FileOutputStream(outputFilePath); 097 fos.write(binaryContent); 098 fos.close(); 099 LOG.info("path-->" + output.getAbsolutePath()); 100 } 101 catch (Exception e) { 102 LOG.info("Checking out file from JCR" + e.getMessage(), e); 103 throw new OleDocStoreException(e); 104 } 105 } 106 else { 107 try { 108 outputFilePath = nodeManager.getData(nodeByUUID); 109 } 110 catch (Exception e) { 111 LOG.error(e.getMessage(), e); 112 throw new OleDocStoreException(e.getMessage(), e); 113 } 114 } 115 116 return outputFilePath; 117 } 118 119 @Override 120 public ResponseDocument delete(RequestDocument requestDocument, Session session) throws Exception{ 121 return null; //To change body of implemented methods use File | Settings | File Templates. 122 } 123 124 @Override 125 public List<ResponseDocument> deleteVerify(List<RequestDocument> requestDocument, Session session) { 126 return null; //To change body of implemented methods use File | Settings | File Templates. 127 } 128 129 @Override 130 public ResponseDocument deleteVerify(RequestDocument requestDocument, Session session) throws Exception { 131 return null; //To change body of implemented methods use File | Settings | File Templates. 132 } 133 }