aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/pdfas/web/helper
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/pdfas/web/helper')
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java47
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java309
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java83
-rw-r--r--src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java362
4 files changed, 0 insertions, 801 deletions
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java
deleted file mode 100644
index ca09871..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SessionHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web.helper;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.exceptions.web.SessionExpiredException;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-
-/**
- * @author wprinz
- *
- */
-public class SessionHelper
-{
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(SessionHelper.class);
-
- public static Object getSession(HttpServletRequest request) throws SessionExpiredException
- {
-
- HttpSession session = request.getSession(false);
- if (session == null)
- {
- String msg = "There is no session associated with this request."; //$NON-NLS-1$
- log.error(msg);
- throw new SessionExpiredException(msg);
- }
-
- Object sessionObject = session.getAttribute(SessionAttributes.ATTRIBUTE_SESSION_INFORMATION);
- if (sessionObject == null)
- {
- String msg = "Unable to find session data in session " + session.getId();
- log.error(msg);
- throw new SessionExpiredException(msg);
- }
-
- return sessionObject;
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
deleted file mode 100644
index 7e121b9..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SignServletHelper.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web.helper;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URL;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.api.commons.Constants;
-import at.gv.egiz.pdfas.framework.SignatorFactory;
-import at.gv.egiz.pdfas.framework.signator.Signator;
-import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
-import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
-import at.gv.egiz.pdfas.utils.WebUtils;
-import at.gv.egiz.pdfas.web.SignSessionInformation;
-import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
-import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.framework.signators.DetachedSignator_1_0_0;
-import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
-import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
-import at.knowcenter.wag.egov.egiz.web.FormFields;
-import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
-import at.knowcenter.wag.egov.egiz.web.PDFContainer;
-import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
-import at.knowcenter.wag.egov.egiz.web.servlets.ProvidePDFServlet;
-
-/**
- * @author wprinz
- *
- */
-public class SignServletHelper
-{
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(SignServletHelper.class);
-
- public static void dispatch(HttpServletRequest request, HttpServletResponse response, String resource, ServletContext context) throws ServletException, IOException
- {
- response.setContentType("text/html");
- response.setCharacterEncoding("UTF-8");
-
- RequestDispatcher disp = context.getRequestDispatcher(resource);
- disp.forward(request, response);
- }
-
-
- /**
- * Prepares the sign.
- *
- * <p>
- * This prepares the data for both being signed or being previewed.
- * </p>
- *
- * @param si
- * The SessionInformation to be prepared.
- * @throws PresentableException
- * f.e.
- */
- public static void prepareSign(SignSessionInformation si) throws PresentableException
- {
- log.debug("prepareSign:"); //$NON-NLS-1$
-
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
-
- // tzefferer: modified
- // si.iui = signator.prepareSign(si.pdf, si.type, null,
- // ConnectorFactory.needsSIG_ID(si.connector));
- si.si = signator.prepareSign(si.pdfDataSource, si.type, si.pos, null);
- // end modify
- log.debug("prepareSign finished."); //$NON-NLS-1$
- }
-
- /**
- * Finishes the sign.
- *
- * <p>
- * For non local connectors this concludes the sign process, signs the
- * document and returns the result. For local connectors this initializes the
- * local sign process and redirects to following servlets.
- * </p>
- *
- * @param si
- * The SessionInformation.
- * @param request
- * The servlet request for dispatching.
- * @param response
- * The servlet response for dispatching.
- * @param context
- * The servlet context for dispatching.
- * @throws PresentableException
- * f.e.
- * @throws IOException
- * f. e.
- * @throws ServletException
- * f. e.
- */
- public static void finishSign(SignSessionInformation si, HttpServletRequest request, HttpServletResponse response, ServletContext context) throws PresentableException, IOException, ServletException
- {
- log.debug("finishSign:"); //$NON-NLS-1$
-
- // check if document is empty
- if (si.si.getSignatureData() == null || si.si.getSignatureData().getDataSource().getLength() == 0) {
- throw new PDFDocumentException(251, "Unable to extract and textual content.");
- }
-
- log.debug("connector = " + si.connector); //$NON-NLS-1$
- if (ConnectorFactory.isConnectorLocal(si.connector))
- {
- log.debug("Connector is local -> dispatching to local processing."); //$NON-NLS-1$
-
- String dispatch_to = LocalRequestHelper.processLocalSign(si, request, response);
- dispatch(request, response, dispatch_to, context);
- return;
- }
- log.debug("Connector is not local -> finishing the sign."); //$NON-NLS-1$
-
- PdfASID algorithm = FormFields.translateSignatureModeToPdfASID(si.mode);
- Signator signator = SignatorFactory.createSignator(algorithm);
-
- log.debug("RequestURL = " + request.getRequestURL());
- log.debug("ContextPath = " + request.getContextPath());
- String host = request.getServerName();
-
- // TODO TR: Web-Applikation verwendet in Loc-Ref-Variante ext. Referenz, um performanter zu sein;
- // nachfolend auskommentieren, wenn anstatt SwA-Connector LocRef-Connector verwendet wird
-// URL signature_data_URL = new URL(WebUtils.addJSessionID(LocalRequestHelper.getLocalContextAddress(request, response) + "/RetrieveSignatureData", request));
- URL signature_data_URL = new URL(WebUtils.buildRetrieveSignatureDataURL(request, response));
- String signature_data_url = response.encodeURL(signature_data_URL.toString());
-
- Connector c = ConnectorChooser.chooseWebConnectorForSign(si.connector, si.type, signature_data_url);
- SignSignatureObject signSignatureObject = c.doSign(si.si.getSignatureData());
-
- si.si.setSignSignatureObject(signSignatureObject);
-
- si.output = TempDirHelper.createTempDataSink(si.filename + "_signed.pdf");
- signator.finishSign(si.si, si.output);
-
- returnSignResponse(si, request, response);
- log.debug("finishSign finished."); //$NON-NLS-1$
-
- }
-
- /**
- * Returns the data in the SignResult with proper content disposition.
- *
- * @param si
- * SessionInformation.
- * @parem request The servlet request.
- * @param response
- * The servlet response.
- * @throws IOException
- * The IO Exception.
- */
- public static void returnSignResponse(SignSessionInformation si, HttpServletRequest request, HttpServletResponse response) throws IOException
- {
-// SignResult sign_result = si.sign_result;
-
- String file_name = formatFileNameForSignResult(si.filename, si.output.getMimeType());
-
- // tzefferer: added condition
- if (si.exappinf == null)
- {
-
- // The name parameter is actually deprecated in favour of
- // Content-Disposition filename
- // Unfortunately Acrobat reader does recognize neither of these parameters
- // with its inline save-as. It always takes the page name.
- response.setContentType(si.output.getMimeType() + "; name=\"" + file_name + "\"");
- if (si.download_inline)
- {
- response.addHeader("Content-Disposition", "inline; filename=\"" + file_name + "\"");
- }
- else
- {
- response.addHeader("Content-Disposition", "attachment; filename=\"" + file_name + "\"");
- }
-
- TempDirHelper.writeDataSinkToHttpResponse(si.output, response);
- //response.getOutputStream().write(sign_result.getData());
-
- // tzefferer: added else-block
- }
- else
- {
- /**
- * The following code handles an external invocation of pdf-as. External invocation is done by
- * redirecting the user to the Sign-Servlet using the parameters defined in class
- * at.knowcenter.wag.egov.egiz.web.FormFields.
- * e.g. http://localhost:48080/pdf-as/Sign?preview=false&connector=bku&mode=textual&sig_type=SIGNATURBLOCK_DE&inline=false&filename=test.pdf&num-bytes=45916&pdf-url=http%3A%2F%2Flocalhost%3A8080%2Fmyapp%2FProvidePDF&pdf-id=1956507909008215134&invoke-app-url=https%3A%2F%2Flocalhost%3A8443%2Fmyapp%2FReturnSignedPDF&invoke-app-error-url=https%3A%2F%2Flocalhost%3A8443%2Fmyapp%2Fpdfaserror.do&session-id=9085B85B364BEC31E7D38047FE54577D&locale=de
- */
- log.debug("External webapp invocation detected.");
- byte [] signed_pdf = null;
- if (si.output instanceof FileBasedDataSink)
- {
- FileBasedDataSink fbds = (FileBasedDataSink)si.output;
- signed_pdf = new byte [(int)fbds.getFile().length()];
- FileInputStream fis = new FileInputStream(fbds.getFile());
- fis.read(signed_pdf);
- fis.close();
- }
- else
- {
- ByteArrayDataSink bads = (ByteArrayDataSink)si.output;
- signed_pdf = bads.getByteArray();
- }
- HttpSession session = request.getSession();
-
- PDFContainer entry = new PDFContainer(signed_pdf, si.exappinf.pdf_id);
- ProvidePDFServlet.signedDocuments.add(entry);
-
- // notify webapp...
- String invoke_url = si.exappinf.invoke_url;
-
- String providePDFServlet = "ProvidePDF";
- String pdf_id = String.valueOf(si.exappinf.pdf_id);
- String session_id = si.exappinf.session_id;
-
- log.debug("External application has to be notified. Building url from callback url \"" + invoke_url + "\".");
-
- // build URL
- int ind = invoke_url.indexOf("?");
-
- // fixed by tknall: must not presume that invoke_url contains "?"
- String sep = "&";
- if (ind == -1) {
- ind = invoke_url.length();
- sep = "?";
- }
-
- String query = invoke_url.substring(0, ind) + ";jsessionid=" + session_id + invoke_url.substring(ind)
- + sep + FormFields.FIELD_PDF_URL + "=" + providePDFServlet + "&" + FormFields.FIELD_PDF_ID
- + "=" + pdf_id + "&" + FormFields.FIELD_FILE_LENGTH + "=" + signed_pdf.length
- + "&" + FormFields.FIELD_PDFAS_SESSION_ID + "=" + session.getId();
-
- /*
- * Using the external web-interface of pdf-as (as described above) pdf-as should be run within
- * an iframe. In case of a signature performed with a local citizen card software or with the
- * server bku the result has to be provided outside the iframe. To break out of the iframe a
- * helper jsp (redirect_to_parent) has to be used that redirects the user to the parent
- * window.
- */
- disableBrowserCacheForResponse(response);
- if (Constants.SIGNATURE_DEVICE_BKU.equals(si.connector) || Constants.SIGNATURE_DEVICE_MOC.equals(si.connector)) {
- log.debug("Pdf-as is supposed to run within an iframe.");
- log.debug("Putting external application notify url (\"" + query + "\") in session (" + session.getId() + ") for later use.");
- session.setAttribute(SessionAttributes.PARENT_WEBAPP_REDIRECT_URL, query);
- String redirectHelper = response.encodeRedirectURL(request.getContextPath() + "/jsp/redirect_to_parent.jsp");
-
- log.debug("Redirecting to " + redirectHelper);
- log.debug("The browser will finally be redirected outside the iframe to " + query + " in order to notify the external application.");
-
- response.sendRedirect(redirectHelper);
-
- } else {
- log.debug("Notifying external application by redirecting to \"" + query + "\".");
- response.sendRedirect(query);
- }
-
- }
-
- }
-
- public static void disableBrowserCacheForResponse(HttpServletResponse response) {
- log.debug("Disabling browser cache for HttpServletResponse.");
- response.setHeader("Cache-Control", "no-cache");
- response.setHeader("Pragma","no-cache");
- response.setDateHeader("Expires", -1);
- }
-
- /**
- * Formats the file name according to the SignResult.
- *
- * @param file_name
- * The file name.
- * @param sign_result
- * The sign result.
- * @return Returns the formatted file name.
- */
- public static String formatFileNameForSignResult(String file_name, String mimeType)
- {
- String output = file_name + "_signed";
- if (mimeType.equals(DetachedSignator_1_0_0.MIME_TYPE))
- {
- output += ".xml";
- }
- else
- {
- output += ".pdf";
- }
-
- return output;
- }
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java
deleted file mode 100644
index 673c197..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/SigningTimeHelper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package at.gv.egiz.pdfas.web.helper;
-
-import java.util.Date;
-
-import org.apache.commons.lang.time.DateFormatUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.exceptions.ErrorCode;
-import at.gv.egiz.pdfas.framework.signator.SignatorInformation;
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
-import at.knowcenter.wag.egov.egiz.pdf.EGIZDate;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
-
-/**
- * This class deals with invalid signing times.
- * @author tknall
- */
-public final class SigningTimeHelper {
-
- private SigningTimeHelper() {
- }
-
- private static Integer tolerance = null;
-
- /**
- * The log.
- */
- private final static Log LOG = LogFactory.getLog(SigningTimeHelper.class);
-
- private final static String SIGNING_TIME_TOLERANCE_KEY = "signing_time_tolerance";
- private final static String FORMAT_UTC_DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'";
-
- public static void checkSigningTimeAgainstHostTime(SignatorInformation si) throws SignatureException {
- checkSigningTimeAgainstHostTime(si.getSignSignatureObject());
- }
-
- public static synchronized void checkSigningTimeAgainstHostTime(SignSignatureObject sso) throws SignatureException {
- if (tolerance == null) {
- try {
- String toleranceString = SettingsReader.getInstance().getSetting(SIGNING_TIME_TOLERANCE_KEY, "-1");
- tolerance = new Integer(Integer.parseInt(toleranceString));
- } catch (NumberFormatException e) {
- LOG.warn("Invalid configuration key = " + SIGNING_TIME_TOLERANCE_KEY + ". Disabling signing time check.");
- tolerance = new Integer(-1);
- } catch (SettingsException e) {
- LOG.error("Error reading settings. Disabling signing time check.", e);
- tolerance = new Integer(-1);
- }
- }
- if (tolerance.intValue() == -1) {
- return;
- }
-
- // signing time
- Date signingTime = EGIZDate.parseDateFromString(sso.getDate());
-
- // current time
- Date currentTime = new Date();
-
- // lower limit
- Date lowerLimit = new Date(currentTime.getTime() - tolerance.intValue()*1000);
-
- // upper limit
- Date upperLimit = new Date(currentTime.getTime() + tolerance.intValue()*1000);
-
- String signingTimeString = DateFormatUtils.formatUTC(signingTime, FORMAT_UTC_DATE_PATTERN);
-
- if (LOG.isDebugEnabled()) {
- String lower = DateFormatUtils.formatUTC(lowerLimit, FORMAT_UTC_DATE_PATTERN);
- String upper = DateFormatUtils.formatUTC(upperLimit, FORMAT_UTC_DATE_PATTERN);
- LOG.debug("Checking if signing time " + signingTimeString + " is valid according to the given time frame [ " + lower + ", " + upper + " ].");
- }
-
- if (signingTime.before(lowerLimit) || signingTime.after(upperLimit)) {
- throw new SignatureException(ErrorCode.INVALID_SIGNING_TIME, "The signing time " + signingTimeString + " is out of the given tolerance of " + tolerance.intValue() + " seconds.");
- }
-
- }
-
-}
diff --git a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java b/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
deleted file mode 100644
index e7ce3ac..0000000
--- a/src/main/java/at/gv/egiz/pdfas/web/helper/TempDirHelper.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/**
- *
- */
-package at.gv.egiz.pdfas.web.helper;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import at.gv.egiz.pdfas.framework.input.DataSource;
-import at.gv.egiz.pdfas.framework.input.PdfDataSource;
-import at.gv.egiz.pdfas.framework.input.TextDataSource;
-import at.gv.egiz.pdfas.framework.output.DataSink;
-import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl;
-import at.gv.egiz.pdfas.impl.input.FileBased;
-import at.gv.egiz.pdfas.impl.input.FileBasedTextDataSourceImpl;
-import at.gv.egiz.pdfas.impl.input.TextDataSourceImpl;
-import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
-import at.gv.egiz.pdfas.impl.output.ByteArrayDataSink;
-import at.gv.egiz.pdfas.impl.output.FileBasedDataSink;
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
-import at.knowcenter.wag.egov.egiz.pdf.TextualSignatureHolder;
-
-/**
- * @author wprinz
- *
- */
-public class TempDirHelper
-{
- /**
- * The log.
- */
- private static Log log = LogFactory.getLog(TempDirHelper.class);
-
- protected static long runningIndex = 0;
-
- /**
- * Assembles the File of the temporary directory without checking if it really
- * exists.
- */
- public static File assembleTemporaryDirectoryFile()
- {
- File temp_dir = new File(SettingsReader.TMP_PATH);
- return temp_dir;
- }
-
- /**
- * Returns the directory where temporary files should be stored.
- *
- * <p>
- * If the directory doesn't exist, it is created.
- * </p>
- *
- * @return Returns the directory where temporary files should be stored.
- */
- public static File getTemporaryDirectory()
- {
- File temp_dir = assembleTemporaryDirectoryFile();
- if (!temp_dir.exists())
- {
- temp_dir.mkdirs();
- }
- return temp_dir;
- }
-
- /**
- * Deletes all files in the temporary directory, if it exists.
- *
- * <p>
- * This should be used to clear temporary files when the application shuts
- * down.
- * </p>
- */
- public static void clearTemporaryDirectory()
- {
- File temp_dir = assembleTemporaryDirectoryFile();
- log.debug("Clearing temporary directory: " + temp_dir);
-
- if (!temp_dir.exists())
- {
- return;
- }
-
- File[] files = temp_dir.listFiles();
- for (int i = 0; i < files.length; i++)
- {
- // added by tknall: do not try to remove svn-metadata
- if (files[i].getName().endsWith(".svn")) {
- continue;
- }
- log.debug(" Clearing temporary file: " + files[i]);
- boolean delete_success = files[i].delete();
- if (!delete_success)
- {
- log.error("Couldn't delete the temporary file: " + files[i]);
- }
- }
- }
-
- public static void storeTextSignatureHoldersIfApplicable(List shs, String fileNameSuffix) throws IOException
- {
- Iterator it = shs.iterator();
- while (it.hasNext())
- {
- SignatureHolder sh = (SignatureHolder) it.next();
- if (sh instanceof TextualSignatureHolder)
- {
- TextualSignatureHolder tsh = (TextualSignatureHolder) sh;
- if (!(tsh.getDataSource() instanceof FileBased))
- {
- TextDataSource tds = (TextDataSource) tsh.getDataSource();
- if (isReasonableToStore(tds.getText().length()))
- {
- TextDataSource fbtds = placeTextIntoTempDir(tds.getText(), fileNameSuffix);
- tsh.exchangeDataSource(fbtds);
- }
- }
- }
- }
- }
-
- /**
- * Places the text into the temp dir if reasonable.
- *
- * <p>
- * Reasonable means that the text is longer than a certain threshold.
- * Otherwise a short text is simply held in memory.
- * </p>
- *
- * @param text
- * The text to be stored.
- * @param fileNameSuffix
- * A file name suffix so that the temp file gets a more "readable"
- * name.
- * @return Returns the TextDataSource.
- * @throws IOException
- * F.e.
- */
- public static TextDataSource placeTextIntoTempDir(String text, String fileNameSuffix) throws IOException
- {
- if (isReasonableToStore(text.length()))
- {
- String fileName = formatFileName(fileNameSuffix);
-
- File tmpFile = createTempFileInDir(fileName);
-
- FileOutputStream fos = new FileOutputStream(tmpFile);
- OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
- osw.write(text);
- osw.close();
-
- FileBasedTextDataSourceImpl textDataSource = new FileBasedTextDataSourceImpl(tmpFile, "UTF-8");
- return textDataSource;
- }
- else
- {
- return new TextDataSourceImpl(text);
- }
- }
-
- /**
- * Tells, if it is reasonable to store the text of the given length onto the
- * disk.
- *
- * @param textLength
- * The length of the text under question.
- * @return Returns true if the text should be stored on the disk.
- */
- public static boolean isReasonableToStore(int textLength)
- {
- return false;
-// return textLength >= 10000;
- }
-
- public static PdfDataSource placePdfIntoTempDir(InputStream pdfInput, String fileNameSuffix) throws IOException
- {
- log.debug("PERF: placing pdf into memory cache");
-
- byte [] pdfData = DataSourceHelper.convertInputStreamToByteArray(pdfInput);
- PdfDataSource pdfDataSource = new ByteArrayPdfDataSourceImpl(pdfData);
-
-// File pdfFile = placeInputIntoTempDirFile(pdfInput, fileNameSuffix);
-//
-// FileBasedPdfDataSourceImpl pdfDataSource = new FileBasedPdfDataSourceImpl(pdfFile, (int) pdfFile.length());
- return pdfDataSource;
- }
-
- public static File placeInputIntoTempDirFile(InputStream input, String fileNameSuffix) throws IOException
- {
- String fileName = formatFileName(fileNameSuffix);
-
- File tmpFile = createTempFileInDir(fileName);
-
- FileOutputStream fos = new FileOutputStream(tmpFile);
-
- byte[] buffer = new byte[2048];
- int read = -1;
- while ((read = input.read(buffer)) > 0)
- {
- fos.write(buffer, 0, read);
- }
- fos.close();
- input.close();
-
- return tmpFile;
- }
-
- public static File formTempFile(String fileNameSuffix)
- {
- String fileName = formatFileName(fileNameSuffix);
- File tmpFile = getFileInTempDir(fileName);
-
- return tmpFile;
- }
-
- protected static File getFileInTempDir (String fileName)
- {
-// File tempDir = new File(new File(SettingsReader.RESOURCES_PATH), "pdfastmp");
- File tempDir = assembleTemporaryDirectoryFile();
-
- File tmpFile = new File(tempDir, fileName);
-
- return tmpFile;
- }
-
- protected static String formatFileName(String fileNameSuffix)
- {
- // double check so that file name is always correct.
- fileNameSuffix = extractFileNameSuffix(fileNameSuffix);
- String fileName = "tmp" + formatIndex(runningIndex) + "_" + fileNameSuffix;
- runningIndex++;
-
- return fileName;
- }
-
- protected static String formatIndex(long index)
- {
- NumberFormat nf = new DecimalFormat("00000000");
-
- return nf.format(index);
- }
-
- protected static File createTempFileInDir(String fileName) throws IOException
- {
- File tmpFile = getFileInTempDir(fileName);
-
- tmpFile.createNewFile();
-
- tmpFile.deleteOnExit();
-
- return tmpFile;
- }
-
- public static DataSink createTempDataSink(String fileNameSuffix) throws IOException
- {
- log.debug("PERF: placing pdf into memory cache");
-
- DataSink ds = new ByteArrayDataSink();
-
-// String fileName = formatFileName(fileNameSuffix);
-//
-// File tmpFile = createTempFileInDir(fileName);
-//
-// FileBasedDataSink ds = new FileBasedDataSink(tmpFile);
-
- return ds;
- }
-
- public static void writeDataSinkToHttpResponse(DataSink ds, HttpServletResponse response) throws IOException
- {
-
- response.setContentType(ds.getMimeType());
- response.setCharacterEncoding(ds.getCharacterEncoding());
-
- OutputStream os = response.getOutputStream();
-
- if (ds instanceof FileBasedDataSink)
- {
- FileBasedDataSink fbds = (FileBasedDataSink)ds;
- byte[] buffer = new byte[2048];
- FileInputStream fis = new FileInputStream(fbds.getFile());
- int n = -1;
- while ((n = fis.read(buffer)) > 0)
- {
- os.write(buffer, 0, n);
- }
- fis.close();
- }
- else
- {
- ByteArrayDataSink bads = (ByteArrayDataSink)ds;
- os.write(bads.getByteArray());
- os.flush();
-
- }
-
- os.close();
-}
-
- /**
- * Deletes the underlying file of the FileBased DataSource.
- *
- * <p>
- * If the DataSource is not FileBased, nothing is done.
- * </p>
- * <p>
- * This is usually used by the application to delete temporary files.
- * </p>
- *
- * @param dataSource
- */
- public static void deleteDataSourceIfFileBased(DataSource dataSource)
- {
- if (dataSource instanceof FileBased)
- {
- FileBased fb = (FileBased) dataSource;
- log.debug("Deleting temp file " + fb.getFile());
- boolean deleted = fb.getFile().delete();
- log.debug("deleted = " + deleted);
- }
- }
-
- public static void deleteDataSinkIfFileBased(DataSink dataSink)
- {
- if (dataSink instanceof FileBased)
- {
- FileBased fb = (FileBased) dataSink;
- log.debug("Deleting temp file " + fb.getFile());
- boolean deleted = fb.getFile().delete();
- log.debug("deleted = " + deleted);
- }
- }
-
- /**
- * Given a file (maybe with path), extracts the file name suffix.
- * @param file The file and maybe path.
- * @return Returns the file name.
- */
- public static String extractFileNameSuffix (String file)
- {
- if (file == null || file.trim().length() == 0)
- {
- return "nofilename";
- }
- File f = new File(file);
- return f.getName();
- }
-}