Example usage for org.springframework.util MultiValueMap size

List of usage examples for org.springframework.util MultiValueMap size

Introduction

In this page you can find the example usage for org.springframework.util MultiValueMap size.

Prototype

int size();

Source Link

Document

Returns the number of key-value mappings in this map.

Usage

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

/**
 * To extract Field from Hocr./*from   www  .j a v a  2 s. co m*/
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/extractFieldFromHocr", method = RequestMethod.POST)
@ResponseBody
public void extractFieldFromHocr(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for extractFieldFromHocr.");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req;
            String fieldValue = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multipartReq.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase("fieldValue")) {
                    fieldValue = multipartReq.getParameter(paramName);
                    break;
                }
            }

            if (fieldValue == null || fieldValue.isEmpty()) {
                respStr = "Field Value not specified.";
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            }
            if (respStr.isEmpty()) {
                final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap();

                if (fileMap.size() == 1) {
                    String hocrFileName = "";
                    for (final String fileName : fileMap.keySet()) {
                        // only single html file is expected as input
                        try {
                            if (fileName.toLowerCase(Locale.getDefault())
                                    .indexOf(FileType.HTML.getExtension()) > -1) {
                                // only HTML file is expected
                                hocrFileName = fileName;
                                final MultipartFile multiPartFile = multipartReq.getFile(fileName);
                                instream = multiPartFile.getInputStream();
                                final File file = new File(workingDir + File.separator + fileName);
                                outStream = new FileOutputStream(file);
                                final byte buf[] = new byte[WebserviceConstants.BUF];
                                int len = instream.read(buf);
                                while (len > 0) {
                                    outStream.write(buf, 0, len);
                                    len = instream.read(buf);
                                }

                                break;
                            } else {
                                respStr = IMPROPER_INPUT_ONLY_ONE_HTML_FILE_EXPECTED;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    if (respStr.isEmpty()) {
                        String fileName = workingDir + File.separator + hocrFileName;

                        // generate hocr file from html file.
                        HocrPages hocrPages = new HocrPages();
                        List<HocrPage> hocrPageList = hocrPages.getHocrPage();
                        HocrPage hocrPage = new HocrPage();
                        String pageID = WebServiceUtil.PG0;
                        hocrPage.setPageID(pageID);
                        hocrPageList.add(hocrPage);
                        bsService.hocrGenerationAPI(workingDir, WebServiceUtil.PG0, fileName, hocrPage);

                        List<KVExtraction> kvExtractionList = kvFieldService.createKeyValueFieldAPI(fieldValue,
                                hocrPage);

                        final KVExtractionFieldPatterns patterns = new KVExtractionFieldPatterns();

                        final List<KVExtractionFieldPattern> pattern = patterns.getKVExtractionFieldPattern();
                        for (final KVExtraction eachKVExtraction : kvExtractionList) {
                            final KVExtractionFieldPattern kvField = new KVExtractionFieldPattern();
                            kvField.setDistance(eachKVExtraction.getDistance());
                            kvField.setFetchValue(eachKVExtraction.getFetchValue().name());
                            kvField.setKeyPattern(eachKVExtraction.getKeyPattern());
                            kvField.setLength(eachKVExtraction.getLength());
                            if (eachKVExtraction.getLocationType() != null) {
                                kvField.setLocation(eachKVExtraction.getLocationType().name());
                            }
                            kvField.setMultiplier(eachKVExtraction.getMultiplier());
                            kvField.setNoOfWords(eachKVExtraction.getNoOfWords() == null ? 0
                                    : eachKVExtraction.getNoOfWords());
                            kvField.setValuePattern(eachKVExtraction.getValuePattern());
                            kvField.setWidth(eachKVExtraction.getWidth());
                            kvField.setXOffset(eachKVExtraction.getXoffset());
                            kvField.setYOffset(eachKVExtraction.getYoffset());
                            pattern.add(kvField);
                        }
                        StreamResult result;
                        try {
                            result = new StreamResult(resp.getOutputStream());
                            resp.setStatus(HttpServletResponse.SC_OK);
                            batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(patterns, result);
                        } catch (final IOException e) {
                            try {
                                resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                        INTERNAL_SERVER_ERROR + e.getMessage());
                            } catch (final IOException ioe) {
                                LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
                            }
                        }
                    }
                } else {
                    respStr = IMPROPER_INPUT_ONLY_ONE_HTML_FILE_EXPECTED;
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                }
            }
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = "Improper input to server. Expected multipart request. Returing without processing the results.";
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }

    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

private void processBarcodeExtarction(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for barcode extraction");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;//from ww w .  j  a  va2s .  com
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();

            if (fileMap.size() != 2) {
                respStr = "Invalid number of files. Expected input should be 1 tif file and 1 xml file.";
            }
            if (respStr.isEmpty()) {
                String xmlFileName = WebServiceUtil.EMPTY_STRING;
                for (final String fileName : fileMap.keySet()) {
                    if (fileName.endsWith(FileType.XML.getExtensionWithDot())) {
                        xmlFileName = fileName;
                    }
                    final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                    instream = multiPartFile.getInputStream();
                    final File file = new File(workingDir + File.separator + fileName);
                    outStream = new FileOutputStream(file);
                    final byte[] buf = new byte[WebServiceUtil.bufferSize];
                    int len = instream.read(buf);
                    while (len > 0) {
                        outStream.write(buf, 0, len);
                        len = instream.read(buf);
                    }
                }
                if (!xmlFileName.isEmpty()) {
                    WebServiceParams webServiceParams = null;
                    final File xmlFile = new File(workingDir + File.separator + xmlFileName);
                    if (xmlFile.exists()) {
                        final FileInputStream inputStream = new FileInputStream(xmlFile);
                        Source source = XMLUtil.createSourceFromStream(inputStream);
                        webServiceParams = (WebServiceParams) batchSchemaDao.getJAXB2Template()
                                .getJaxb2Marshaller().unmarshal(source);
                    }
                    if (webServiceParams != null) {
                        List<Param> paramList = webServiceParams.getParams().getParam();
                        if (paramList == null || paramList.isEmpty()) {
                            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
                            respStr = IMPROPER_XML_PARAMETER;
                        } else {
                            String batchClassIdentifier = WebServiceUtil.EMPTY_STRING;
                            String imageName = WebServiceUtil.EMPTY_STRING;
                            String docType = WebServiceUtil.EMPTY_STRING;
                            for (final Param param : paramList) {
                                LOGGER.error("Parameter: " + param.getName() + " Value: " + param.getValue());
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.BATCH_CLASS_IDENTIFIER)) {
                                    batchClassIdentifier = param.getValue();
                                    continue;
                                }
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.IMAGE_NAME)) {
                                    imageName = param.getValue();
                                    continue;
                                }
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.DOC_TYPE)) {
                                    docType = param.getValue();
                                    continue;
                                }
                            }
                            String results = WebServiceUtil.validateBarcodeExtractionInput(batchClassIdentifier,
                                    imageName, docType);
                            if (!results.isEmpty()) {
                                respStr = results;
                            } else {
                                Set<String> loggedInUserRole = getUserRoles(req);
                                if (loggedInUserRole == null || loggedInUserRole.isEmpty()) {
                                    respStr = "User not authorized to view this API.";
                                } else {
                                    boolean isBatchClassViewableToUser = isBatchClassViewableToUser(
                                            batchClassIdentifier, loggedInUserRole, isSuperAdmin(req));
                                    if (isBatchClassViewableToUser) {
                                        BatchClass batchClass = bcService
                                                .getBatchClassByIdentifier(batchClassIdentifier);
                                        if (batchClass != null) {
                                            List<DocField> updtDocFdTyList = new ArrayList<DocField>();
                                            updtDocFdTyList = barcodeExtractionService.extractPageBarCodeAPI(
                                                    batchClassIdentifier, workingDir, imageName, docType);
                                            LOGGER.info(
                                                    "Generating document level fields for the output result");
                                            final DocumentLevelFields dlfs = new DocumentLevelFields();
                                            dlfs.getDocumentLevelField().addAll(updtDocFdTyList);
                                            Documents docs = new Documents();
                                            Document doc = new Document();
                                            docs.getDocument().add(doc);
                                            doc.setDocumentLevelFields(dlfs);

                                            StreamResult result;
                                            try {
                                                result = new StreamResult(resp.getOutputStream());
                                                resp.setStatus(HttpServletResponse.SC_OK);
                                                batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                                                        .marshal(docs, result);
                                            } catch (final IOException e) {
                                                respStr = INTERNAL_SERVER_ERROR + e.getMessage();
                                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                                            }
                                        }
                                    } else {
                                        respStr = "User not authorized to view this batch class id:"
                                                + batchClassIdentifier;
                                    }
                                }

                            }
                        }
                    }
                } else {
                    respStr = "Invalid format specified in the input. Expected XML found " + xmlFileName;
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        } finally {
            IOUtils.closeQuietly(instream);
            IOUtils.closeQuietly(outStream);
        }

        if (!workingDir.isEmpty()) {
            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
        }
        if (!respStr.isEmpty()) {
            try {
                resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            } catch (final IOException ioe) {
                LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
            }
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

/**
 * To classify Barcode Image./*  w w  w .j a v  a 2s. c  o  m*/
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/classifyBarcodeImage", method = RequestMethod.POST)
@ResponseBody
public void classifyBarcodeImage(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for classifyBarcode.");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req;
            String batchClassId = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multipartReq.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase("batchClassId")) {
                    batchClassId = multipartReq.getParameter(paramName);
                    break;
                }
            }
            Map<BarcodeProperties, String> batchClassConfigMap = new HashMap<BarcodeProperties, String>();

            if (batchClassId == null || batchClassId.isEmpty()) {
                respStr = "Batch Class identifier not specified.";
            } else {
                BatchClass batchClass = bcService.getBatchClassByIdentifier(batchClassId);
                if (batchClass == null) {
                    respStr = "Batch class with the specified identifier: " + batchClassId + " does not exist.";
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                } else {
                    Set<String> loggedInUserRole = getUserRoles(req);
                    if (!isBatchClassViewableToUser(batchClassId, loggedInUserRole, isSuperAdmin(req))) {
                        respStr = USER_NOT_AUTHORIZED_TO_VIEW_THE_BATCH_CLASS + batchClassId;
                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                    } else {
                        BatchPlugin barcodeReader = batchClassPPService.getPluginProperties(batchClassId,
                                ICommonConstants.BARCODE_READER_PLUGIN);
                        BatchPlugin docAssemblyPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                DocumentAssemblerConstants.DOCUMENT_ASSEMBLER_PLUGIN);
                        if (barcodeReader == null || docAssemblyPlugin == null) {
                            respStr = "Either Barcode Reader plugin or document assembly plugin does not exist for the specified batch class id: "
                                    + batchClassId;
                        } else if (docAssemblyPlugin.getPluginConfigurations(
                                DocumentAssemblerProperties.DA_BARCODE_CONFIDENCE) == null) {
                            respStr = "Incomplete properties of the Document assembler plugin for the specified batch class id:"
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else if (barcodeReader
                                .getPluginConfigurations(BarcodeProperties.BARCODE_VALID_EXTNS) == null
                                || barcodeReader
                                        .getPluginConfigurations(BarcodeProperties.BARCODE_READER_TYPES) == null
                                || barcodeReader
                                        .getPluginConfigurations(BarcodeProperties.MAX_CONFIDENCE) == null
                                || barcodeReader
                                        .getPluginConfigurations(BarcodeProperties.MIN_CONFIDENCE) == null) {
                            respStr = "Incomplete properties of the Barcode reader plugin for the specified batch class id: "
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                }
            }
            if (respStr.isEmpty()) {
                batchClassConfigMap.put(BarcodeProperties.BARCODE_VALID_EXTNS,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.BARCODE_VALID_EXTNS));
                batchClassConfigMap.put(BarcodeProperties.BARCODE_READER_TYPES,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.BARCODE_READER_PLUGIN,
                                BarcodeProperties.BARCODE_READER_TYPES));
                batchClassConfigMap.put(BarcodeProperties.MAX_CONFIDENCE,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.MAX_CONFIDENCE));
                batchClassConfigMap.put(BarcodeProperties.MIN_CONFIDENCE,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.BARCODE_READER_PLUGIN, BarcodeProperties.MIN_CONFIDENCE));

                final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap();

                if (fileMap.size() == 1) {
                    String tiffFileName = WebServiceUtil.EMPTY_STRING;
                    for (final String fileName : fileMap.keySet()) {
                        // only single tiff/tif file is expected as input
                        try {
                            if ((fileName.toLowerCase(Locale.getDefault())
                                    .indexOf(FileType.TIF.getExtension()) > -1
                                    || fileName.toLowerCase(Locale.getDefault())
                                            .indexOf(FileType.TIFF.getExtension()) > -1)) {

                                final MultipartFile multiPartFile = multipartReq.getFile(fileName);
                                instream = multiPartFile.getInputStream();
                                final File file = new File(workingDir + File.separator + fileName);
                                outStream = new FileOutputStream(file);
                                final byte buf[] = new byte[WebserviceConstants.BUF];
                                int len = instream.read(buf);
                                while (len > 0) {
                                    outStream.write(buf, 0, len);
                                    len = instream.read(buf);
                                }

                                if (TIFFUtil.getTIFFPageCount(file.getAbsolutePath()) > 1) {
                                    respStr = ONLY_ONE_SINGLE_PAGE_TIFF_EXPECTED;
                                }
                                tiffFileName = file.getName();
                                break;
                            } else {
                                respStr = "Improper input to server. Expected only one tiff file. Returning without processing the results.";
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    if (respStr.isEmpty()) {
                        ObjectFactory objectFactory = new ObjectFactory();

                        Pages pages = new Pages();
                        List<Page> listOfPages = pages.getPage();
                        List<Document> xmlDocuments = new ArrayList<Document>();
                        Document doc = objectFactory.createDocument();
                        xmlDocuments.add(doc);
                        doc.setPages(pages);

                        Page pageType = objectFactory.createPage();
                        pageType.setIdentifier(EphesoftProperty.PAGE.getProperty() + "0");
                        pageType.setNewFileName(tiffFileName);
                        listOfPages.add(pageType);
                        String batchInstanceIdentifier = new File(workingDir).getName() + Math.random();
                        barcodeService.extractPageBarCodeAPI(xmlDocuments, batchInstanceIdentifier, workingDir,
                                batchClassConfigMap);

                        try {
                            // invoke the document assembler plugin
                            xmlDocuments = docAssembler.createDocumentAPI(DocumentClassificationFactory.BARCODE,
                                    batchClassId, listOfPages);
                            Documents docs = new Documents();
                            docs.getDocument().addAll(xmlDocuments);
                            StreamResult result;
                            try {
                                result = new StreamResult(resp.getOutputStream());
                                resp.setStatus(HttpServletResponse.SC_OK);
                                batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(docs, result);
                            } catch (final IOException e) {
                                respStr = INTERNAL_SERVER_ERROR + e;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        } catch (final DCMAApplicationException e) {
                            respStr = "Error while executing plugin. Detailed exception is " + e;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                } else {
                    respStr = IMPROPER_INPUT_ONLY_ONE_HTML_FILE_EXPECTED;
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = "Improper input to server. Expected multipart request. Returing without processing the results.";
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }

    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

/**
 * To classify Image.//from   w ww  . j  av a 2s  .com
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/classifyImage", method = RequestMethod.POST)
@ResponseBody
public void classifyImage(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for classifyImage.");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req;
            String batchClassId = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multipartReq.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase("batchClassId")) {
                    batchClassId = multipartReq.getParameter(paramName);
                    break;
                }
            }

            if (batchClassId == null || batchClassId.isEmpty()) {
                respStr = "Batch Class identifier not specified.";
            } else {

                BatchClass batchClass = bcService.getBatchClassByIdentifier(batchClassId);
                if (batchClass == null) {
                    respStr = "Batch class with the specified identifier:" + batchClassId + " does not exist.";
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                } else {
                    Set<String> loggedInUserRole = getUserRoles(req);
                    if (!isBatchClassViewableToUser(batchClassId, loggedInUserRole, isSuperAdmin(req))) {
                        respStr = USER_NOT_AUTHORIZED_TO_VIEW_THE_BATCH_CLASS + batchClassId;
                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                    } else {
                        BatchPlugin createThumbPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                ImageMagicKConstants.CREATE_THUMBNAILS_PLUGIN);
                        BatchPlugin classifyImgPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                ImageMagicKConstants.CLASSIFY_IMAGES_PLUGIN);
                        BatchPlugin docAssemblyPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                DocumentAssemblerConstants.DOCUMENT_ASSEMBLER_PLUGIN);
                        if (createThumbPlugin == null || classifyImgPlugin == null
                                || docAssemblyPlugin == null) {
                            respStr = "Either create Thumbnails plugin or Classify Image plugin or document assembly plugin does not exist for the specified batch class id: "
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else if (createThumbPlugin.getPluginConfigurations(
                                ImageMagicProperties.CREATE_THUMBNAILS_OUTPUT_IMAGE_PARAMETERS) == null
                                || createThumbPlugin.getPluginConfigurations(
                                        ImageMagicProperties.CREATE_THUMBNAILS_COMP_THUMB_WIDTH) == null
                                || createThumbPlugin.getPluginConfigurations(
                                        ImageMagicProperties.CREATE_THUMBNAILS_COMP_THUMB_HEIGHT) == null) {
                            respStr = "Create Thumbnails Height or width or output image parameters does not exist for the specified batch class id: "
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else if (classifyImgPlugin.getPluginConfigurations(
                                ImageMagicProperties.CLASSIFY_IMAGES_COMP_METRIC) == null
                                || classifyImgPlugin.getPluginConfigurations(
                                        ImageMagicProperties.CLASSIFY_IMAGES_MAX_RESULTS) == null
                                || classifyImgPlugin.getPluginConfigurations(
                                        ImageMagicProperties.CLASSIFY_IMAGES_FUZZ_PERCNT) == null) {
                            respStr = "Classify Images comp metric or fuzz percent or max results does not exist for the specified batch class id: "
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else if (docAssemblyPlugin
                                .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_FP_MP_LP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_FP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_MP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_LP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_FP_LP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_FP_MP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_MP_LP) == null) {
                            respStr = "Incomplete properties of the Document assembler plugin for the specified batch class id: "
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                }
            }
            if (respStr.isEmpty()) {

                final String outputParams = batchClassPPService.getPropertyValue(batchClassId,
                        ImageMagicKConstants.CREATE_THUMBNAILS_PLUGIN,
                        ImageMagicProperties.CREATE_THUMBNAILS_OUTPUT_IMAGE_PARAMETERS);

                final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap();

                if (fileMap.size() == 1) {
                    String[][] sListOfTiffFiles = new String[fileMap.size()][WebserviceConstants.THREE];
                    for (final String fileName : fileMap.keySet()) {
                        // only single tiff file is expected as input
                        try {
                            if ((fileName.toLowerCase(Locale.getDefault())
                                    .indexOf(FileType.TIF.getExtension()) > -1
                                    || fileName.toLowerCase(Locale.getDefault())
                                            .indexOf(FileType.TIFF.getExtension()) > -1)) {

                                final MultipartFile multipartFile = multipartReq.getFile(fileName);
                                instream = multipartFile.getInputStream();
                                final File file = new File(workingDir + File.separator + fileName);
                                outStream = new FileOutputStream(file);
                                final byte buf[] = new byte[WebserviceConstants.BUF];
                                int len = instream.read(buf);
                                while (len > WebserviceConstants.ZERO) {
                                    outStream.write(buf, 0, len);
                                    len = instream.read(buf);
                                }

                                if (TIFFUtil
                                        .getTIFFPageCount(file.getAbsolutePath()) > WebserviceConstants.ONE) {
                                    respStr = ONLY_ONE_SINGLE_PAGE_TIFF_EXPECTED;
                                }
                                break;
                            } else {
                                respStr = "Improper input to server. Expected only one tiff file. Returning without processing the results.";
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    if (respStr.isEmpty()) {
                        String compareThumbnailH = batchClassPPService.getPropertyValue(batchClassId,
                                ImageMagicKConstants.CREATE_THUMBNAILS_PLUGIN,
                                ImageMagicProperties.CREATE_THUMBNAILS_COMP_THUMB_HEIGHT);
                        String compareThumbnailW = batchClassPPService.getPropertyValue(batchClassId,
                                ImageMagicKConstants.CREATE_THUMBNAILS_PLUGIN,
                                ImageMagicProperties.CREATE_THUMBNAILS_COMP_THUMB_WIDTH);

                        String batchId = new File(workingDir).getName() + Math.random();
                        ObjectFactory objectFactory = new ObjectFactory();
                        Pages pages = new Pages();
                        List<Page> listOfPages = pages.getPage();
                        String[] imageFiles = new File(workingDir).list(new CustomFileFilter(false,
                                FileType.TIFF.getExtensionWithDot(), FileType.TIF.getExtensionWithDot()));
                        for (int i = 0; i < imageFiles.length; i++) {
                            String fileName = workingDir + File.separator + imageFiles[i];
                            String thumbFileName = "th" + FileType.TIF.getExtensionWithDot();
                            String fileTiffPath = workingDir + File.separator + thumbFileName;
                            sListOfTiffFiles[i][0] = fileName;
                            sListOfTiffFiles[i][1] = fileTiffPath;
                            sListOfTiffFiles[i][2] = Integer.toString(i);

                            Page pageType = objectFactory.createPage();
                            pageType.setIdentifier(EphesoftProperty.PAGE.getProperty() + i);
                            pageType.setNewFileName(fileName);
                            pageType.setOldFileName(fileName);
                            pageType.setDirection(Direction.NORTH);
                            pageType.setIsRotated(false);
                            pageType.setComparisonThumbnailFileName(thumbFileName);
                            listOfPages.add(pageType);
                        }

                        final BatchInstanceThread threadList = imService.createCompThumbForImage(batchId,
                                workingDir, sListOfTiffFiles, outputParams, compareThumbnailH,
                                compareThumbnailW);

                        try {
                            threadList.execute();
                            // invoke the Classification Image plugin
                            String imMetric = batchClassPPService.getPropertyValue(batchClassId,
                                    ImageMagicKConstants.CLASSIFY_IMAGES_PLUGIN,
                                    ImageMagicProperties.CLASSIFY_IMAGES_COMP_METRIC);
                            String imFuzz = batchClassPPService.getPropertyValue(batchClassId,
                                    ImageMagicKConstants.CLASSIFY_IMAGES_PLUGIN,
                                    ImageMagicProperties.CLASSIFY_IMAGES_FUZZ_PERCNT);
                            String maxVal = batchClassPPService.getPropertyValue(batchClassId,
                                    ImageMagicKConstants.CLASSIFY_IMAGES_PLUGIN,
                                    ImageMagicProperties.CLASSIFY_IMAGES_MAX_RESULTS);

                            imService.classifyImagesAPI(maxVal, imMetric, imFuzz, batchId, batchClassId,
                                    workingDir, listOfPages);

                            // invoke the document assembler plugin
                            List<Document> doc = docAssembler.createDocumentAPI(
                                    DocumentClassificationFactory.IMAGE, batchClassId, listOfPages);
                            Documents docs = new Documents();
                            docs.getDocument().addAll(doc);
                            StreamResult result;
                            try {
                                result = new StreamResult(resp.getOutputStream());
                                batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(docs, result);
                            } catch (final IOException e) {
                                respStr = INTERNAL_SERVER_ERROR + e;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        } catch (final DCMAApplicationException e) {
                            threadList.remove();
                            respStr = "Error while executing threadpool. Detailed exception is " + e;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } catch (final DCMAException e) {
                            threadList.remove();
                            respStr = "Error while executing threadpool. Detailed exception is " + e;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                } else {
                    respStr = "Improper input to server. Expected only one tiff file. Returning without processing the results.";
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                }
            }
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = IMPROPER_INPUT_TO_SERVER;
    }
    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

private void processRegularRegexExtraction(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for extracting fields using regex...");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;//from   w  w w . ja va  2s  .  co m
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;

            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();

            if (respStr.isEmpty()) {
                String xmlFileName = WebServiceUtil.EMPTY_STRING;
                if (fileMap.size() == 2) {
                    Set<String> fileNameSet = fileMap.keySet();
                    for (final String fileName : fileNameSet) {
                        try {
                            if (fileName.endsWith(FileType.XML.getExtensionWithDot())) {
                                xmlFileName = fileName;
                            }
                            if (!xmlFileName.isEmpty()) {
                                final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                                instream = multiPartFile.getInputStream();
                                final File file = new File(workingDir + File.separator + fileName);
                                outStream = new FileOutputStream(file);
                                final byte[] buf = new byte[WebServiceUtil.bufferSize];
                                int len = instream.read(buf);
                                while (len > 0) {
                                    outStream.write(buf, 0, len);
                                    len = instream.read(buf);
                                }
                                break;
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    WebServiceParams webServiceParams = null;
                    final File xmlFile = new File(workingDir + File.separator + xmlFileName);
                    if (xmlFileName == null) {
                        respStr = "No xml file passed...";
                    } else if (xmlFile.exists()) {
                        FileInputStream inputStream = null;
                        try {
                            inputStream = new FileInputStream(xmlFile);
                            Source source = XMLUtil.createSourceFromStream(inputStream);
                            webServiceParams = (WebServiceParams) batchSchemaDao.getJAXB2Template()
                                    .getJaxb2Marshaller().unmarshal(source);
                        } finally {
                            IOUtils.closeQuietly(inputStream);
                        }

                        List<Param> paramList = webServiceParams.getParams().getParam();
                        if (paramList == null || paramList.isEmpty()) {
                            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
                            respStr = IMPROPER_XML_PARAMETER;
                        } else {
                            String batchClassIdentifier = WebServiceUtil.EMPTY_STRING;
                            String documentType = WebServiceUtil.EMPTY_STRING;
                            String hocrFileName = WebServiceUtil.EMPTY_STRING;
                            for (final Param param : paramList) {
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.DOCUMENT_TYPE)) {
                                    documentType = param.getValue();
                                    LOGGER.info("Value for documentType parameter is " + documentType);
                                    continue;
                                }
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.BATCH_CLASS_IDENTIFIER)) {
                                    batchClassIdentifier = param.getValue();
                                    LOGGER.info("Value for batchClassIdentifier parameter is "
                                            + batchClassIdentifier);
                                    continue;
                                }
                                if (param.getName().equalsIgnoreCase(WebServiceUtil.HOCR_FILE)) {
                                    hocrFileName = param.getValue();
                                    LOGGER.info("Value for hocrFile parameter is " + hocrFileName);
                                    continue;
                                }
                            }
                            respStr = WebServiceUtil.validateExtractRegexFieldsAPI(workingDir,
                                    batchClassIdentifier, documentType, hocrFileName);
                            if (respStr.isEmpty()) {
                                respStr = validateInputAndPerformExtraction(req, resp, respStr, workingDir,
                                        multiPartRequest, fileNameSet, batchClassIdentifier, documentType,
                                        hocrFileName);
                            }
                        }
                    }
                } else {
                    respStr = "Invalid number of files. We are supposed only 2 files each of type: XML and html file.";
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = IMPROPER_INPUT_TO_SERVER;
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }
    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

private void processFuzzyDbExtraction(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for extract fuzzy DB for given HOCR file");
    String respStr = "";
    String workingDir = "";
    Documents documents = null;/*from  w  w w  .j  a v  a 2 s.c  o m*/
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;

            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            String htmlFile = WebServiceUtil.EMPTY_STRING;
            if (fileMap.size() == 1) {
                for (final String fileName : fileMap.keySet()) {
                    try {
                        if (fileName.endsWith(FileType.HTML.getExtensionWithDot())) {
                            htmlFile = fileName;
                        } else {
                            respStr = "Invalid file. Please passed the valid html file";
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                            break;
                        }
                        final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                        instream = multiPartFile.getInputStream();
                        final File file = new File(workingDir + File.separator + fileName);
                        outStream = new FileOutputStream(file);
                        final byte[] buf = new byte[WebServiceUtil.bufferSize];
                        int len = instream.read(buf);
                        while (len > 0) {
                            outStream.write(buf, 0, len);
                            len = instream.read(buf);
                        }
                    } finally {
                        IOUtils.closeQuietly(instream);
                        IOUtils.closeQuietly(outStream);
                    }

                }
            } else {
                respStr = "Invalid number of files. We are supposed only one file";
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            }

            String batchClassIdentifier = WebServiceUtil.EMPTY_STRING;
            String documentType = WebServiceUtil.EMPTY_STRING;
            String hocrFileName = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multiPartRequest.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase("documentType")) {
                    documentType = multiPartRequest.getParameter(paramName);
                    LOGGER.info("Value for documentType parameter is : " + documentType);
                    continue;
                }
                if (paramName.equalsIgnoreCase("batchClassIdentifier")) {
                    batchClassIdentifier = multiPartRequest.getParameter(paramName);
                    LOGGER.info("Value for batchClassIdentifier parameter is : " + batchClassIdentifier);
                    continue;
                }
                if (paramName.equalsIgnoreCase("hocrFile")) {
                    hocrFileName = multiPartRequest.getParameter(paramName);
                    LOGGER.info("Value for hocrFile parameter is : " + hocrFileName);
                    continue;
                }
            }

            if (!hocrFileName.equalsIgnoreCase(htmlFile)) {
                respStr = "Please pass the valid hocr File.";
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            }
            if (respStr.isEmpty()) {
                respStr = WebServiceUtil.validateExtractFuzzyDBAPI(workingDir, hocrFileName,
                        batchClassIdentifier, documentType);
                if (respStr.isEmpty()) {
                    BatchClass batchClass = bcService.getBatchClassByIdentifier(batchClassIdentifier);
                    if (batchClass == null) {
                        respStr = "Please enter valid batch class identifier";
                    } else {
                        Set<String> loggedInUserRole = getUserRoles(req);
                        if (!isBatchClassViewableToUser(batchClassIdentifier, loggedInUserRole,
                                isSuperAdmin(req))) {
                            respStr = USER_NOT_AUTHORIZED_TO_VIEW_THE_BATCH_CLASS + batchClassIdentifier;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else {
                            BatchPlugin fuzzyDBPlugin = batchClassPPService
                                    .getPluginProperties(batchClassIdentifier, "FUZZYDB");
                            if (fuzzyDBPlugin == null || fuzzyDBPlugin.getPropertiesSize() == 0) {
                                respStr = "Fuzzy DB plugin is not configured for batch class : "
                                        + batchClassIdentifier + " . Please select proper batch class";
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            } else if (fuzzyDBPlugin
                                    .getPluginConfigurations(FuzzyDBProperties.FUZZYDB_STOP_WORDS) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_MIN_TERM_FREQ) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_MIN_WORD_LENGTH) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_MAX_QUERY_TERMS) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_NO_OF_PAGES) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_DB_DRIVER) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_CONNECTION_URL) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_DB_USER_NAME) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_DB_PASSWORD) == null
                                    || fuzzyDBPlugin.getPluginConfigurations(
                                            FuzzyDBProperties.FUZZYDB_THRESHOLD_VALUE) == null) {
                                respStr = "Incomplete properties of the Fuzzy DB plugin for the specified batch class id: "
                                        + batchClassIdentifier;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        }
                    }

                    if (respStr.isEmpty()) {
                        List<com.ephesoft.dcma.da.domain.FieldType> allFdTypes = fieldTypeService
                                .getFdTypeByDocTypeNameForBatchClass(documentType, batchClassIdentifier);

                        if (allFdTypes == null || allFdTypes.size() == 0) {
                            respStr = "Document Level Fields doesn't exist for document type: " + documentType;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }

                    if (respStr.isEmpty()) {
                        try {
                            HocrPages hocrPages = new HocrPages();
                            List<HocrPage> hocrPageList = hocrPages.getHocrPage();
                            HocrPage hocrPage = new HocrPage();
                            String pageID = WebServiceUtil.PG0;
                            hocrPage.setPageID(pageID);
                            hocrPageList.add(hocrPage);
                            bsService.hocrGenerationAPI(workingDir, pageID,
                                    workingDir + File.separator + hocrFileName, hocrPage);
                            documents = fuzzyDBSearchService.extractDataBaseFields(batchClassIdentifier,
                                    documentType, hocrPages);
                            if (documents != null) {
                                StreamResult result = new StreamResult(resp.getOutputStream());
                                batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(documents,
                                        result);
                            }
                        } catch (final DCMAException e) {
                            respStr = "Exception while extracting field using fuzzy db" + e;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = IMPROPER_INPUT_TO_SERVER;
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }
    if (!respStr.isEmpty()) {
        try {
            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.util.WebServiceHelper.java

/**
 * performs table extraction on the HOCR file provided ,accepts input xml with HOCR page and document type classification along
 * with HOCR pages on whuich extraction is to be performed
 * //  w  w  w  .  java  2s.com
 * @param req
 * @param resp
 * @return
 * @throws ValidationException
 * @throws InternalServerException
 */
public Batch.Documents processtableExtractionHOCR(final HttpServletRequest req, final HttpServletResponse resp)
        throws ValidationException, InternalServerException {
    LOGGER.info("Start processing web service for table extraction....");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String xmlFileName = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    Batch.Documents documents = null;
    InputStream instream = null;
    int responseCode = 0;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        final String webServiceFolderPath = bsService.getWebServicesFolderPath();
        try {
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            boolean isFileHOCR = false;
            boolean isFilePlainXML = false;
            if (fileMap.size() >= WebServiceConstants.MINIMUM_FILE_COUNT_FOR_TABLE_EXTRACTION) {
                for (final String inputFileName : fileMap.keySet()) {
                    try {
                        isFileHOCR = inputFileName.trim().endsWith(WebServiceConstants.HOCR_EXTENSION);
                        isFilePlainXML = inputFileName.toLowerCase()
                                .endsWith(FileType.XML.getExtensionWithDot());
                        if (!(isFileHOCR || isFilePlainXML)) {
                            respStr = WebServiceConstants.INVALID_FILES_TABLE_EXTRACTION;
                            responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                            createAndThrowValidationException(null, responseCode, respStr);
                        }
                        if (!isFileHOCR) {
                            xmlFileName = inputFileName;
                        }
                        final MultipartFile multiPartFile = multiPartRequest.getFile(inputFileName);
                        instream = multiPartFile.getInputStream();
                        WebServiceUtil.copyFile(workingDir, inputFileName, instream);
                    } catch (FileNotFoundException fileNotFoundException) {
                        respStr = WebServiceConstants.ERROR;
                        responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                    }
                }
                LOGGER.info("XML file name is" + xmlFileName);
                final File xmlFile = new File(
                        EphesoftStringUtil.concatenate(workingDir, File.separator, xmlFileName));
                final FileInputStream inputStream = new FileInputStream(xmlFile);
                final Source source = XMLUtil.createSourceFromStream(inputStream);
                String response = WebServiceUtil.EMPTY_STRING;
                ExtractTableParam extractTableParams = (ExtractTableParam) batchSchemaDao.getJAXB2Template()
                        .getJaxb2Marshaller().unmarshal(source);
                List<com.ephesoft.dcma.batch.schema.ExtractTableParam.Documents.Document> docList = extractTableParams
                        .getDocuments().getDocument();
                final String batchClassIdentifier = extractTableParams.getBatchClassId();
                Map<DocumentType, List<HocrPages>> documentHOCRMap = new HashMap<DocumentType, List<HocrPages>>();
                if (EphesoftStringUtil.isNullOrEmpty(batchClassIdentifier)) {
                    responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                    respStr = WebServiceConstants.UNDEFINED_BATCH_IDENTIFIER;
                    createAndThrowValidationException(null, responseCode, respStr);
                }
                final BatchClass batchClass = bcService.getBatchClassByIdentifier(batchClassIdentifier);
                if (null == batchClass) {
                    response = WebServiceUtil.BATCH_NOT_EXISTS;
                }
                if (EphesoftStringUtil.isNullOrEmpty(response)) {
                    String tableExtractionSwitch = WebServiceConstants.EMPTY_STRING;
                    try {
                        tableExtractionSwitch = batchClassPPService.getPropertyValue(batchClassIdentifier,
                                WebServiceConstants.TABLE_EXTRACTION_PLUGIN,
                                TableExtractionProperties.TABLE_EXTRACTION_SWITCH);
                    } catch (NullPointerException nullPointerException) {
                        responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                        respStr = EphesoftStringUtil.concatenate(
                                WebServiceConstants.UNDEFINED_TABLE_EXTRACTION_SWITCH, batchClassIdentifier);
                        createAndThrowConfigurationException(responseCode, respStr);
                    }
                    if (WebServiceUtil.OFF_STRING.equals(tableExtractionSwitch)) {
                        respStr = EphesoftStringUtil.concatenate(
                                WebServiceConstants.TABLE_EXTRACCTION_SWITCH_OFF_MESSAGE, batchClassIdentifier);
                        responseCode = WebServiceConstants.TABLE_EXTRACTION_SWITCH_OFF_CODE;
                        createAndThrowConfigurationException(responseCode, respStr);
                    }
                    final List<DocumentType> docTypeList = batchClass.getDocumentTypes();
                    List<String> docTypesName = obtainDocumentNameList(docTypeList);
                    documentHOCRMap = generateDocumentMapHOCR(docList, workingDir, docTypesName,
                            batchClassIdentifier);
                    if (documentHOCRMap.isEmpty()) {
                        respStr = WebServiceConstants.INVALID_MAPPING_DOCUMENT_HOCR_PAGES;
                        responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                        createAndThrowValidationException(null, responseCode, respStr);
                    }
                    final int gapBetweenColumnWords = tableFinderService.getGapBetweenColumnWords();
                    documents = tableExtraction.processDocPageForTableExtractionWebService(
                            gapBetweenColumnWords, documentHOCRMap, docTypeList, docTypesName);
                } else {
                    respStr = response;
                    responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                    createAndThrowValidationException(null, responseCode, respStr);
                }

            } else {
                respStr = WebServiceConstants.TABLE_EXTRACTION_MINIMUM_PARAMETERS_REQUIRED_ERROR_MESSAGE;
                responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                createAndThrowValidationException(null, responseCode, respStr);
            }
        } catch (ClassCastException classCastException) {
            LOGGER.error(EphesoftStringUtil.concatenate("Not an Object of extract table Params",
                    classCastException.getMessage()));
            respStr = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_MESSAGE;
            responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
        } catch (DCMABusinessException dcmaBusinessException) {
            LOGGER.error(EphesoftStringUtil.concatenate("Invalid HOCR xml file uploaded",
                    dcmaBusinessException.getMessage()));
            respStr = WebServiceConstants.INVALID_HOCR_FILE_UPLOAD_MESSAGE;
            responseCode = WebServiceConstants.INVALID_HOCR_FILE_UPLOADED_CODE;
        } catch (org.springframework.oxm.UnmarshallingFailureException unmarshallingFailureException) {
            LOGGER.error(EphesoftStringUtil.concatenate("Not an Object of extract table Params",
                    unmarshallingFailureException.getMessage()));
            respStr = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_MESSAGE;
            responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
        } catch (Exception exception) {
            LOGGER.error(EphesoftStringUtil.concatenate("Error generated is ", exception.getMessage()));
            if (EphesoftStringUtil.isNullOrEmpty(respStr)) {
                respStr = WebServiceConstants.INVALID_MULTIPART_REQUEST;
                responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
            }
        } finally {
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        if (EphesoftStringUtil.isNullOrEmpty(respStr)) {
            respStr = WebServiceConstants.INVALID_MULTIPART_REQUEST;
            responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
        }
    }
    validateResponse(responseCode, respStr);
    return documents;
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

private void processFixedFormExtraction(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for extract fixed form....");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    com.ephesoft.dcma.batch.schema.Documents documents = null;
    InputStream instream = null;// w  ww  .j  a  va 2  s . c  om
    OutputStream outStream = null;

    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;

            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            String xmlFileName = WebServiceUtil.EMPTY_STRING;

            if (fileMap.size() != WebserviceConstants.THREE) {
                respStr = "Invalid number of files. We are supposed only 3 files each of type: XML, RSP and tif/tiff/png.";
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            }

            if (respStr.isEmpty()) {
                for (final String fileName : fileMap.keySet()) {
                    try {
                        if (fileName.endsWith(FileType.XML.getExtensionWithDot())) {
                            xmlFileName = fileName;
                        }

                        final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                        instream = multiPartFile.getInputStream();
                        final File file = new File(workingDir + File.separator + fileName);
                        outStream = new FileOutputStream(file);
                        final byte[] buf = new byte[WebServiceUtil.bufferSize];
                        int len = instream.read(buf);
                        while (len > 0) {
                            outStream.write(buf, 0, len);
                            len = instream.read(buf);
                        }
                        if (fileName.toLowerCase(Locale.getDefault())
                                .endsWith(FileType.TIF.getExtensionWithDot())
                                || fileName.toLowerCase(Locale.getDefault())
                                        .endsWith(FileType.TIFF.getExtensionWithDot())) {
                            int pageCount = TIFFUtil.getTIFFPageCount(workingDir + File.separator + fileName);
                            if (pageCount > 1) {
                                respStr = ONLY_ONE_SINGLE_PAGE_TIFF_EXPECTED;
                                break;
                            }
                        }
                    } finally {
                        IOUtils.closeQuietly(instream);
                        IOUtils.closeQuietly(outStream);
                    }
                }

                if (xmlFileName.isEmpty()) {
                    respStr = "XML file is not found. Returning without processing the results.";
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                }

                if (respStr.isEmpty()) {
                    final File xmlFile = new File(workingDir + File.separator + xmlFileName);
                    final FileInputStream inputStream = new FileInputStream(xmlFile);

                    Source source = null;
                    try {
                        source = XMLUtil.createSourceFromStream(inputStream);
                        if (respStr.isEmpty()) {
                            final WebServiceParams webServiceParams = (WebServiceParams) batchSchemaDao
                                    .getJAXB2Template().getJaxb2Marshaller().unmarshal(source);

                            List<Param> paramList = null;

                            if (webServiceParams != null && webServiceParams.getParams() != null) {
                                paramList = webServiceParams.getParams().getParam();
                            } else {
                                FileUtils.deleteDirectoryAndContentsRecursive(
                                        new File(workingDir).getParentFile());
                                respStr = "Invalid xml file mapped. Returning without processing the results.";
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }

                            if (respStr.isEmpty()) {
                                String colorSwitch = WebServiceUtil.EMPTY_STRING;
                                String projectFile = WebServiceUtil.EMPTY_STRING;
                                if (paramList == null || paramList.size() <= 0) {
                                    respStr = "Improper input to server. Returning without processing the results.";
                                } else {
                                    for (final Param param : paramList) {
                                        if (param.getName().equalsIgnoreCase(WebServiceUtil.COLOR_SWITCH)) {
                                            colorSwitch = param.getValue();
                                            LOGGER.info("Color Switch for recostar is :" + colorSwitch);
                                            continue;
                                        }
                                        if (param.getName().equalsIgnoreCase(WebServiceUtil.PROJECT_FILE)) {
                                            projectFile = param.getValue();
                                            LOGGER.info("Project file for recostar is :" + projectFile);
                                            continue;
                                        }
                                    }
                                }

                                String[] fileNames = null;
                                final File file = new File(workingDir);
                                respStr = WebServiceUtil.validateExtractFixedFormAPI(workingDir, projectFile,
                                        colorSwitch);

                                if (respStr.isEmpty()) {
                                    if (colorSwitch.equalsIgnoreCase(WebServiceUtil.ON_STRING)) {
                                        String[] tifFileNames = file.list(
                                                new CustomFileFilter(false, FileType.TIF.getExtensionWithDot(),
                                                        FileType.TIFF.getExtensionWithDot()));
                                        // generate png file for each tiff/tif file
                                        for (String tifFile : tifFileNames) {
                                            imService.generatePNGForImage(
                                                    new File(workingDir + File.separator + tifFile));
                                        }
                                        LOGGER.info("Picking up the png file for processing.");
                                        fileNames = file.list(new CustomFileFilter(false,
                                                FileType.PNG.getExtensionWithDot()));
                                    } else {
                                        LOGGER.info("Picking up the tif file for processing.");
                                        fileNames = file.list(
                                                new CustomFileFilter(false, FileType.TIF.getExtensionWithDot(),
                                                        FileType.TIFF.getExtensionWithDot()));
                                    }
                                    LOGGER.info("Number of file is:" + fileNames.length);

                                    if (fileNames != null && fileNames.length > 0) {
                                        for (final String fileName : fileNames) {
                                            LOGGER.info("File processing for recostar is :" + fileName);
                                            documents = recostarExtractionService
                                                    .extractDocLevelFieldsForRspFile(projectFile, workingDir,
                                                            colorSwitch, fileName, workingDir);
                                        }
                                    } else {
                                        if (colorSwitch.equalsIgnoreCase(WebServiceUtil.ON_STRING)) {
                                            respStr = "Image file of png type is not found for processing";
                                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                                        } else {
                                            respStr = "Image file of tif type is not found for processing";
                                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                                        }
                                    }

                                    if (respStr.isEmpty() && documents != null) {
                                        StreamResult result = new StreamResult(resp.getOutputStream());
                                        batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                                                .marshal(documents, result);
                                    }
                                }
                            }
                        }
                    } catch (final DCMAException e) {
                        respStr = "Error occuring while creating OCR file using recostar. Please try later. "
                                + e;
                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                    } catch (final Exception e) {
                        respStr = "Improper input to server. Returning without processing the results." + e;
                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                    }
                }
            }
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        } catch (Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        }

    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

/**
 * To create OCR.//w ww  .  j av a 2  s  . c o m
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/createOCR", method = RequestMethod.POST)
@ResponseBody
public void createOCR(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for create OCRing");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final String outputDir = WebServiceUtil.createWebServiceOutputDir(workingDir);

            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;

            final BatchInstanceThread batchInstanceThread = new BatchInstanceThread(
                    new File(workingDir).getName() + Math.random());

            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();

            if (!(fileMap.size() >= 2 && fileMap.size() <= WebserviceConstants.THREE)) {
                respStr = "Invalid number of files. We are supposed only 3 files each of type:XML, Project RSP file(if recostar tool) and tif/tiff/png file.";
            }
            if (respStr.isEmpty()) {
                String xmlFileName = WebServiceUtil.EMPTY_STRING;
                for (final String fileName : fileMap.keySet()) {
                    try {
                        if (fileName.endsWith(FileType.XML.getExtensionWithDot())) {
                            xmlFileName = fileName;
                        }
                        final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                        instream = multiPartFile.getInputStream();
                        final File file = new File(workingDir + File.separator + fileName);
                        outStream = new FileOutputStream(file);
                        final byte[] buf = new byte[WebServiceUtil.bufferSize];
                        int len = instream.read(buf);
                        while (len > 0) {
                            outStream.write(buf, 0, len);
                            len = instream.read(buf);
                        }
                        if (fileName.endsWith(FileType.TIF.getExtensionWithDot())
                                || fileName.endsWith(FileType.TIFF.getExtensionWithDot())) {
                            int pageCount = TIFFUtil.getTIFFPageCount(workingDir + File.separator + fileName);
                            if (pageCount > 1) {
                                respStr = ONLY_ONE_SINGLE_PAGE_TIFF_EXPECTED;
                                break;
                            }
                        }
                    } finally {
                        IOUtils.closeQuietly(instream);
                        IOUtils.closeQuietly(outStream);
                    }

                }
                WebServiceParams webServiceParams = null;
                final File xmlFile = new File(workingDir + File.separator + xmlFileName);
                if (xmlFile.exists()) {
                    final FileInputStream inputStream = new FileInputStream(xmlFile);
                    Source source = XMLUtil.createSourceFromStream(inputStream);
                    webServiceParams = (WebServiceParams) batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                            .unmarshal(source);
                }

                List<Param> paramList = webServiceParams.getParams().getParam();
                if (paramList == null || paramList.isEmpty()) {
                    FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
                    respStr = IMPROPER_XML_PARAMETER;
                } else {
                    String ocrEngine = WebServiceUtil.EMPTY_STRING;
                    String colorSwitch = WebServiceUtil.EMPTY_STRING;
                    String projectFile = WebServiceUtil.EMPTY_STRING;
                    String tesseractVersion = WebServiceUtil.EMPTY_STRING;
                    String cmdLanguage = WebServiceUtil.EMPTY_STRING;
                    for (final Param param : paramList) {
                        if (param.getName().equalsIgnoreCase(WebServiceUtil.OCR_ENGINE)) {
                            ocrEngine = param.getValue();
                            continue;
                        }
                        if (param.getName().equalsIgnoreCase(WebServiceUtil.COLOR_SWITCH)) {
                            colorSwitch = param.getValue();
                            continue;
                        }
                        if (param.getName().equalsIgnoreCase(WebServiceUtil.PROJECT_FILE)) {
                            projectFile = param.getValue();
                            LOGGER.info("Project file for recostar is :" + projectFile);
                            continue;
                        }
                        if (param.getName().equalsIgnoreCase(WebServiceUtil.TESSERACT_VERSION)) {
                            tesseractVersion = param.getValue();
                            LOGGER.info("Tesseract version is: " + tesseractVersion);
                            continue;
                        }
                        if (param.getName().equalsIgnoreCase(WebServiceUtil.CMD_LANGUAGE)) {
                            // supported values are "eng" and "tha" for now provided tesseract engine is learnt.
                            cmdLanguage = param.getValue();
                            LOGGER.info("cmd langugage is :" + cmdLanguage);
                            continue;
                        }
                    }

                    String results = WebServiceUtil.validateCreateOCRAPI(workingDir, ocrEngine, colorSwitch,
                            projectFile, tesseractVersion, cmdLanguage);
                    if (!results.isEmpty()) {
                        respStr = results;
                    } else {
                        String[] fileNames = null;
                        final File file = new File(workingDir);
                        if (colorSwitch.equalsIgnoreCase(WebServiceUtil.ON_STRING)) {
                            String[] tifFileNames = file.list(new CustomFileFilter(false,
                                    FileType.TIF.getExtensionWithDot(), FileType.TIFF.getExtensionWithDot()));
                            // generate png file for each tiff/tif file
                            for (String tifFile : tifFileNames) {
                                imService.generatePNGForImage(new File(workingDir + File.separator + tifFile));
                            }
                            LOGGER.info("Picking up the png file for processing.");
                            fileNames = file
                                    .list(new CustomFileFilter(false, FileType.PNG.getExtensionWithDot()));
                        } else {
                            LOGGER.info("Picking up the tif file for processing.");
                            fileNames = file.list(new CustomFileFilter(false,
                                    FileType.TIF.getExtensionWithDot(), FileType.TIFF.getExtensionWithDot()));
                        }
                        LOGGER.info("Number of file is:" + fileNames.length);
                        LOGGER.info("OcrEngine used for generating ocr is :" + ocrEngine);
                        if (ocrEngine.equalsIgnoreCase(WebServiceUtil.RECOSTAR)) {
                            if (fileNames != null && fileNames.length > 0) {
                                for (final String fileName : fileNames) {
                                    try {
                                        LOGGER.info("File processing for recostar is :" + fileName);
                                        recostarService.createOCR(projectFile, workingDir, colorSwitch,
                                                fileName, batchInstanceThread, outputDir);
                                    } catch (final DCMAException e) {
                                        respStr = "Error occuring while creating OCR file using recostar. Please try again."
                                                + e;
                                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                                        break;
                                    }
                                }
                            } else {
                                if (colorSwitch.equalsIgnoreCase(WebServiceUtil.OFF_STRING)) {
                                    respStr = "Improper input to server. No tiff files provided.";
                                } else {
                                    respStr = "Improper input to server. No tiff/png files provided.";
                                }
                            }
                        } else if (ocrEngine.equalsIgnoreCase(WebServiceUtil.TESSERACT)) {
                            if (fileNames != null && fileNames.length > 0) {
                                for (final String fileName : fileNames) {
                                    try {
                                        LOGGER.info("File processing for ocr with tesseract is :" + fileName);
                                        tesseractService.createOCR(workingDir, colorSwitch, fileName,
                                                batchInstanceThread, outputDir, cmdLanguage, tesseractVersion);
                                    } catch (final DCMAException e) {
                                        respStr = "Error occuring while creating OCR file using tesseract. Please try again."
                                                + e;
                                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                                        break;
                                    }
                                }
                            } else {
                                respStr = "Improper input to server. No tiff/png files provided.";
                                LOGGER.error(SERVER_ERROR_MSG + respStr);

                            }
                        } else {
                            respStr = "Please select valid tool for generating OCR file.";
                        }
                        if (respStr.isEmpty()) {
                            try {
                                batchInstanceThread.execute();
                                if (ocrEngine.equalsIgnoreCase(WebServiceUtil.RECOSTAR)) {
                                    for (final String fileName : fileNames) {
                                        final String recostarXMLFileName = fileName.substring(0,
                                                fileName.lastIndexOf(WebServiceUtil.DOT))
                                                + FileType.XML.getExtensionWithDot();
                                        try {
                                            FileUtils.copyFile(
                                                    new File(workingDir + File.separator + recostarXMLFileName),
                                                    new File(outputDir + File.separator + recostarXMLFileName));
                                        } catch (final Exception e) {
                                            respStr = "Error while generating copying result file." + e;
                                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                                            break;
                                        }
                                    }
                                }
                            } catch (final DCMAApplicationException e) {
                                respStr = "Exception while generating ocr using threadpool" + e;
                            }
                            if (respStr.isEmpty()) {
                                ServletOutputStream out = null;
                                ZipOutputStream zout = null;
                                final String zipFileName = WebServiceUtil.SERVEROUTPUTFOLDERNAME;
                                resp.setContentType(WebServiceUtil.APPLICATION_X_ZIP);
                                resp.setHeader(WebServiceUtil.CONTENT_DISPOSITION,
                                        WebServiceUtil.ATTACHMENT_FILENAME + zipFileName
                                                + FileType.ZIP.getExtensionWithDot() + NEXT_LINE_STRING);
                                try {
                                    out = resp.getOutputStream();
                                    zout = new ZipOutputStream(out);
                                    FileUtils.zipDirectory(outputDir, zout, zipFileName);
                                    resp.setStatus(HttpServletResponse.SC_OK);
                                } catch (final IOException e) {
                                    respStr = "Error in creating output zip file.Please try again." + e;
                                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                                } finally {
                                    IOUtils.closeQuietly(zout);
                                    IOUtils.closeQuietly(out);

                                    FileUtils.deleteDirectoryAndContentsRecursive(
                                            new File(workingDir).getParentFile());
                                }
                            }
                        }
                    }
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = IMPROPER_INPUT_TO_SERVER;
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }
    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}

From source file:com.ephesoft.dcma.webservice.EphesoftWebServiceAPI.java

/**
 * To classify Hocr.//from w ww.  ja  v a2s.c om
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/classifyHocr", method = RequestMethod.POST)
@ResponseBody
public void classifyHocr(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for classifyHocr.");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    InputStream instream = null;
    OutputStream outStream = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = bsService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);

            final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req;
            String batchClassId = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multipartReq.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase("batchClassId")) {
                    batchClassId = multipartReq.getParameter(paramName);
                    break;
                }
            }
            Map<LuceneProperties, String> batchClassConfigMap = new HashMap<LuceneProperties, String>();

            if (batchClassId == null || batchClassId.isEmpty()) {
                respStr = "Batch Class identifier not specified.";
                LOGGER.error(SERVER_ERROR_MSG + respStr);
            } else {
                BatchClass batchClass = bcService.getBatchClassByIdentifier(batchClassId);
                if (batchClass == null) {
                    respStr = "Batch class with the specified identifier : " + batchClassId
                            + " does not exist.";
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                } else {
                    Set<String> loggedInUserRole = getUserRoles(req);
                    if (!isBatchClassViewableToUser(batchClassId, loggedInUserRole, isSuperAdmin(req))) {
                        respStr = USER_NOT_AUTHORIZED_TO_VIEW_THE_BATCH_CLASS + batchClassId;
                        LOGGER.error(SERVER_ERROR_MSG + respStr);
                    } else {
                        BatchPlugin searchClassPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN);
                        BatchPlugin docAssemblyPlugin = batchClassPPService.getPluginProperties(batchClassId,
                                DocumentAssemblerConstants.DOCUMENT_ASSEMBLER_PLUGIN);
                        if (searchClassPlugin == null || docAssemblyPlugin == null) {
                            respStr = "Either Search Classification plugin or document assembly plugin does not exist for the specified batch class id: "
                                    + batchClassId;
                        } else if (docAssemblyPlugin
                                .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_FP_MP_LP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_FP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_MP) == null
                                || docAssemblyPlugin
                                        .getPluginConfigurations(DocumentAssemblerProperties.DA_RULE_LP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_FP_LP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_FP_MP) == null
                                || docAssemblyPlugin.getPluginConfigurations(
                                        DocumentAssemblerProperties.DA_RULE_MP_LP) == null) {
                            respStr = "Incomplete properties of the Document assembler plugin for the specified batch class id :"
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        } else if (searchClassPlugin
                                .getPluginConfigurations(LuceneProperties.LUCENE_VALID_EXTNS) == null
                                || searchClassPlugin
                                        .getPluginConfigurations(LuceneProperties.LUCENE_INDEX_FIELDS) == null
                                || searchClassPlugin
                                        .getPluginConfigurations(LuceneProperties.LUCENE_STOP_WORDS) == null
                                || searchClassPlugin
                                        .getPluginConfigurations(LuceneProperties.LUCENE_MIN_TERM_FREQ) == null
                                || searchClassPlugin
                                        .getPluginConfigurations(LuceneProperties.LUCENE_MIN_DOC_FREQ) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_MIN_WORD_LENGTH) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_MAX_QUERY_TERMS) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_TOP_LEVEL_FIELD) == null
                                || searchClassPlugin
                                        .getPluginConfigurations(LuceneProperties.LUCENE_NO_OF_PAGES) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_MAX_RESULT_COUNT) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_FIRST_PAGE_CONF_WEIGHTAGE) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_MIDDLE_PAGE_CONF_WEIGHTAGE) == null
                                || searchClassPlugin.getPluginConfigurations(
                                        LuceneProperties.LUCENE_LAST_PAGE_CONF_WEIGHTAGE) == null) {
                            respStr = "Incomplete properties of the Search Classification plugin for the specified batch class id :"
                                    + batchClassId;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                }
            }
            if (respStr.isEmpty()) {
                batchClassConfigMap.put(LuceneProperties.LUCENE_VALID_EXTNS,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_VALID_EXTNS));
                batchClassConfigMap.put(LuceneProperties.LUCENE_INDEX_FIELDS,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_INDEX_FIELDS));
                batchClassConfigMap.put(LuceneProperties.LUCENE_STOP_WORDS,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_STOP_WORDS));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MIN_TERM_FREQ,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MIN_TERM_FREQ));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MIN_DOC_FREQ,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MIN_DOC_FREQ));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MIN_WORD_LENGTH,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MIN_WORD_LENGTH));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MAX_QUERY_TERMS,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MAX_QUERY_TERMS));
                batchClassConfigMap.put(LuceneProperties.LUCENE_TOP_LEVEL_FIELD,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_TOP_LEVEL_FIELD));
                batchClassConfigMap.put(LuceneProperties.LUCENE_NO_OF_PAGES,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_NO_OF_PAGES));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MAX_RESULT_COUNT,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MAX_RESULT_COUNT));
                batchClassConfigMap.put(LuceneProperties.LUCENE_FIRST_PAGE_CONF_WEIGHTAGE,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_FIRST_PAGE_CONF_WEIGHTAGE));
                batchClassConfigMap.put(LuceneProperties.LUCENE_MIDDLE_PAGE_CONF_WEIGHTAGE,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_MIDDLE_PAGE_CONF_WEIGHTAGE));
                batchClassConfigMap.put(LuceneProperties.LUCENE_LAST_PAGE_CONF_WEIGHTAGE,
                        batchClassPPService.getPropertyValue(batchClassId,
                                ICommonConstants.SEARCH_CLASSIFICATION_PLUGIN,
                                LuceneProperties.LUCENE_LAST_PAGE_CONF_WEIGHTAGE));

                final MultiValueMap<String, MultipartFile> fileMap = multipartReq.getMultiFileMap();

                if (fileMap.size() == 1) {
                    String hocrFileName = "";
                    for (final String fileName : fileMap.keySet()) {
                        // only single html file is expected as input
                        try {
                            if (fileName.toLowerCase(Locale.getDefault())
                                    .indexOf(FileType.HTML.getExtension()) > -1) {
                                // only HTML file is expected
                                hocrFileName = fileName;
                                final MultipartFile multiPartFile = multipartReq.getFile(fileName);
                                instream = multiPartFile.getInputStream();
                                final File file = new File(workingDir + File.separator + fileName);
                                outStream = new FileOutputStream(file);
                                final byte buf[] = new byte[WebServiceUtil.bufferSize];
                                int len = instream.read(buf);
                                while (len > 0) {
                                    outStream.write(buf, 0, len);
                                    len = instream.read(buf);
                                }

                                break;
                            } else {
                                respStr = IMPROPER_INPUT_ONLY_ONE_HTML_FILE_EXPECTED;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    if (respStr.isEmpty()) {
                        ObjectFactory objectFactory = new ObjectFactory();

                        Pages pages = new Pages();
                        List<Page> listOfPages = pages.getPage();
                        List<Document> xmlDocuments = new ArrayList<Document>();
                        Document doc = objectFactory.createDocument();
                        xmlDocuments.add(doc);
                        doc.setPages(pages);
                        String fileName = workingDir + File.separator + hocrFileName;

                        // generate hocr file from html file.
                        HocrPages hocrPages = new HocrPages();
                        List<HocrPage> hocrPageList = hocrPages.getHocrPage();
                        HocrPage hocrPage = new HocrPage();
                        String pageID = WebServiceUtil.PG0;
                        hocrPage.setPageID(pageID);
                        hocrPageList.add(hocrPage);
                        bsService.hocrGenerationAPI(workingDir, WebServiceUtil.PG0, fileName, hocrPage);

                        Page pageType = objectFactory.createPage();
                        pageType.setIdentifier(EphesoftProperty.PAGE.getProperty() + "0");
                        pageType.setHocrFileName(hocrFileName);
                        listOfPages.add(pageType);
                        scService.generateConfidenceScoreAPI(xmlDocuments, hocrPages, workingDir,
                                batchClassConfigMap, batchClassId);

                        try {
                            // invoke the document assembler plugin
                            xmlDocuments = docAssembler.createDocumentAPI(
                                    DocumentClassificationFactory.SEARCHCLASSIFICATION, batchClassId,
                                    listOfPages);
                            Documents docs = new Documents();
                            docs.getDocument().addAll(xmlDocuments);
                            StreamResult result;
                            try {
                                result = new StreamResult(resp.getOutputStream());
                                resp.setStatus(HttpServletResponse.SC_OK);
                                batchSchemaDao.getJAXB2Template().getJaxb2Marshaller().marshal(docs, result);
                            } catch (final IOException e) {
                                respStr = INTERNAL_SERVER_ERROR + e;
                                LOGGER.error(SERVER_ERROR_MSG + respStr);
                            }
                        } catch (final DCMAApplicationException e) {
                            respStr = "Error while executing plugin. Detailed exception is " + e;
                            LOGGER.error(SERVER_ERROR_MSG + respStr);
                        }
                    }
                } else {
                    respStr = IMPROPER_INPUT_ONLY_ONE_HTML_FILE_EXPECTED;
                    LOGGER.error(SERVER_ERROR_MSG + respStr);
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = ERROR_IN_MAPPING_INPUT + xmle;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final DCMAException dcmae) {
            respStr = ERROR_PROCESSING_REQUEST + dcmae;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error(SERVER_ERROR_MSG + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }

        }
    } else {
        respStr = "Improper input to server. Expected multipart request. Returing without processing the results.";
        LOGGER.error(SERVER_ERROR_MSG + respStr);
    }

    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error(SERVER_ERROR_MSG + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(ERROR_WHILE_SENDING_ERROR_RESPONSE_TO_CLIENT + ioe, ioe);
        }
    }
}