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