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 classify Multi Page Hocr./*  w  w w  .  j a  v a  2 s .c o m*/
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/classifyMultiPageHocr", method = RequestMethod.POST)
@ResponseBody
public void classifyMultiPageHocr(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("Error response at server:" + respStr);
            } else {
                BatchClass bc = bcService.getBatchClassByIdentifier(batchClassId);
                if (bc == null) {
                    respStr = "Batch class with the specified identifier : " + batchClassId
                            + " does not exist.";
                    LOGGER.error("Error response at server:" + respStr);
                } else {
                    Set<String> loggedInUserRole = getUserRoles(req);
                    if (!isBatchClassViewableToUser(batchClassId, loggedInUserRole, isSuperAdmin(req))) {
                        respStr = "User is not authorized to view the batch class for given identifier:"
                                + batchClassId;
                        LOGGER.error("Error response at server:" + 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("Error response at server:" + 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("Error response at server:" + 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 path = "";
                    for (final String fileName : fileMap.keySet()) {
                        // only single zip file is expected as input containing multiple HTML files.
                        try {
                            boolean isZipContent = multipartReq.getFile(fileName).getContentType().toLowerCase()
                                    .contains(APPLICATION_ZIP);
                            if (fileName.toLowerCase()
                                    .indexOf(FileType.ZIP.getExtension()) > -WebserviceConstants.ONE
                                    || isZipContent) {
                                // only HTML file is expected
                                final MultipartFile f = multipartReq.getFile(fileName);
                                instream = f.getInputStream();
                                path = workingDir + File.separator + fileName;
                                if (isZipContent
                                        && !fileName.toLowerCase().endsWith(FileType.ZIP.getExtension())) {
                                    path = workingDir + File.separator + fileName
                                            + FileType.ZIP.getExtensionWithDot();
                                }
                                final File file = new File(path);
                                outStream = new FileOutputStream(file);
                                final byte buf[] = new byte[WebServiceUtil.bufferSize];
                                int len;
                                while ((len = instream.read(buf)) > WebserviceConstants.ZERO) {
                                    outStream.write(buf, 0, len);
                                }
                                break;
                            } else {
                                respStr = "Improper input to server. Expected only one zip file. Returning without processing the results.";
                                LOGGER.error("Error response at server:" + respStr);
                            }
                        } finally {
                            IOUtils.closeQuietly(instream);
                            IOUtils.closeQuietly(outStream);
                        }
                    }
                    if (respStr.isEmpty()) {
                        zipService.unzipFiles(new File(path), workingDir);
                        CustomFileFilter filter = new CustomFileFilter(false, FileType.HTML.getExtension());
                        String htmlFileList[] = new File(workingDir).list(filter);
                        if (htmlFileList != null && htmlFileList.length > WebserviceConstants.ZERO) {
                            ObjectFactory objectFactory = new ObjectFactory();
                            List<Document> xmlDocuments = new ArrayList<Document>();
                            HocrPages hocrPages = new HocrPages();
                            Pages pages = new Pages();
                            List<Page> listOfPages = pages.getPage();
                            Document doc = objectFactory.createDocument();
                            xmlDocuments.add(doc);
                            doc.setPages(pages);

                            for (int index = 0; index < htmlFileList.length; index++) {
                                // generate hocr file from html file.
                                String htmlFile = htmlFileList[index];
                                String htmlFilePath = workingDir + File.separator + htmlFile;
                                HocrPage hocrPage = new HocrPage();
                                List<HocrPage> hocrPageList = hocrPages.getHocrPage();
                                String pageID = PG_IDENTIFIER + index;
                                hocrPage.setPageID(pageID);
                                hocrPageList.add(hocrPage);
                                bsService.hocrGenerationAPI(workingDir, pageID, htmlFilePath, hocrPage);

                                Page pageType = objectFactory.createPage();
                                pageType.setIdentifier(EphesoftProperty.PAGE.getProperty() + index);
                                pageType.setHocrFileName(htmlFile);
                                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("Error response at server:" + respStr);
                                }
                            } catch (final DCMAApplicationException e) {
                                respStr = "Error while executing plugin. Detailed exception is " + e;
                                LOGGER.error("Error response at server:" + respStr);
                            }
                        } else {
                            respStr = "Improper input to server. Expected HTML file inside zip file.";
                            LOGGER.error("Error response at server:" + respStr);
                        }
                    }
                } else {
                    respStr = "Improper input to server. Expected only one zip file. Returning without processing the results.";
                    LOGGER.error("Error response at server:" + respStr);
                }
            }
        } catch (final XmlMappingException xmle) {
            respStr = "Error in mapping input XML in the desired format. Please send it in the specified format. Detailed exception is "
                    + xmle;
            LOGGER.error("Error response at server:" + respStr);
        } catch (final DCMAException dcmae) {
            respStr = "Error in processing request. Detailed exception is " + dcmae;
            LOGGER.error("Error response at server:" + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error("Error response at server:" + 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("Error response at server:" + respStr);
    }

    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error("Error response at server:" + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(
                    "Exception in sending the error code to client. Logged the exception for debugging:" + ioe,
                    ioe);
        }
    }
}

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

/**
 * This method is Added to process input XML to implement auto Learning for KV feature
 * //  ww w  .  j a va  2s. c om
 * @param req the {@link HttpServletRequest} the request header for this web service hit
 * @throws InternalServerException the internal server exception
 * @throws ValidationException the validation exception
 */

public ExtractKV processKVLearningDocType(final HttpServletRequest req)
        throws InternalServerException, ValidationException {
    final com.ephesoft.dcma.batch.schema.ExtractKV extractKV = new com.ephesoft.dcma.batch.schema.ExtractKV();

    LOGGER.info("Inside autoLearningKV method for WebService");
    String respStr = WebServiceConstants.EMPTY_STRING;
    String workingDir = WebServiceConstants.EMPTY_STRING;
    Coordinates keyRectangleCoordinates = null;
    Coordinates valueRectangleCoordinates = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = batchSchemaService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            if (fileMap.size() != 2) {
                final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
                respStr = "Improper input to server. Expected two files: hocrFileZip and xml parameter file.";
                final RestError restError = new RestError(status,
                        WebServiceConstants.IMPROPER_INPUT_TO_SERVER_CODE, respStr,
                        WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE
                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                        WebServiceConstants.DEFAULT_URL);
                LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
                throw new InternalServerException(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                        restError);
            }
            String xmlFileName = WebServiceConstants.EMPTY_STRING;
            xmlFileName = getXMLFile(workingDir, multiPartRequest, fileMap);
            LOGGER.info("XML file name is" + xmlFileName);
            KVExtractionDocType kvExtract = null;
            final File xmlFile = new File(workingDir + File.separator + xmlFileName);
            if (xmlFile.exists()) {
                final FileInputStream inputStream = new FileInputStream(xmlFile);
                final Source source = XMLUtil.createSourceFromStream(inputStream);
                kvExtract = (KVExtractionDocType) batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                        .unmarshal(source);
                if (kvExtract != null) {
                    final String inputXMLValidationRes = validateInputXMLForAutoKVExtraction(kvExtract);
                    if (inputXMLValidationRes.isEmpty()) {
                        final String documentName = kvExtract.getDocumentType();

                        final BatchClass batchClass = batchClassService
                                .getBatchClassByIdentifier(kvExtract.getBatchClass());
                        DocumentType documentType = new DocumentType();
                        final List<DocumentType> docTypes = batchClass.getDocumentTypes();
                        if (docTypes != null && !docTypes.isEmpty()) {
                            for (final DocumentType docType : docTypes) {
                                if (documentName.equalsIgnoreCase(docType.getName())) {
                                    documentType = batchClass
                                            .getDocumentTypeByIdentifier(docType.getIdentifier());
                                }
                            }

                        } else {
                            respStr = "Document Type doesn't Exist.Please enter a valid document type of batch class"
                                    + batchClass;
                            final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_CODE, respStr,
                                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_MESSAGE
                                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                                    WebServiceConstants.DEFAULT_URL);
                            LOGGER.error("Error response at server:" + respStr);
                            throw new InternalServerException(respStr, restError);
                        }
                        final List<com.ephesoft.dcma.batch.schema.HOCRFile> hocrFileList = new ArrayList<com.ephesoft.dcma.batch.schema.HOCRFile>();
                        final String hocrFileZipFileName = kvExtract.getHOCRFile();

                        final String unZipFileLocation = unZipToTemporaryOutputLocation(hocrFileZipFileName,
                                workingDir);

                        final File fPageFolder = new File(unZipFileLocation);
                        final String[] listOfHOCRFiles = fPageFolder
                                .list(new CustomFileFilter(false, FileType.XML.getExtensionWithDot()));
                        for (final String hocrFileName : listOfHOCRFiles) {
                            final HOCRFile hocrFile1 = new HOCRFile();
                            final HOCRFile.DocumentLevelFields dlfs = new HOCRFile.DocumentLevelFields();

                            LOGGER.info("Number of HOCR files" + listOfHOCRFiles.length);
                            List<com.ephesoft.dcma.da.domain.FieldType> fieldTypes = null;
                            if (documentType != null) {
                                fieldTypes = documentType.getFieldTypes();
                            } else {
                                respStr = "Document Type doesn't Exist.Please enter a valid document type of batch class"
                                        + batchClass;
                                final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                                        WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_CODE, respStr,
                                        WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_MESSAGE
                                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                                        WebServiceConstants.DEFAULT_URL);
                                LOGGER.error("Error response at server:" + respStr);
                                throw new InternalServerException(respStr, restError);
                            }
                            if (fieldTypes != null && !fieldTypes.isEmpty()) {
                                for (final com.ephesoft.dcma.da.domain.FieldType fieldType : fieldTypes) {
                                    final List<com.ephesoft.dcma.da.domain.KVExtraction> kvExtracttion = fieldType
                                            .getKvExtraction();
                                    final List<DocField> updtDocList = new ArrayList<DocField>(5);
                                    if (kvExtracttion != null && !kvExtracttion.isEmpty()) {
                                        for (final com.ephesoft.dcma.da.domain.KVExtraction extractKVFields : kvExtracttion) {

                                            final ExtractKVParams params = new ExtractKVParams();

                                            final OutputStream outStream = null;
                                            final InputStream instream = null;

                                            final Params paramList = new Params();
                                            if (extractKVFields.getLocationType() != null) {
                                                paramList.setLocationType(
                                                        extractKVFields.getLocationType().toString());
                                            }
                                            if (extractKVFields.getNoOfWords() != null) {
                                                paramList.setNoOfWords(extractKVFields.getNoOfWords());
                                            }
                                            if (extractKVFields.getKeyPattern() != null) {
                                                paramList.setKeyPattern(extractKVFields.getKeyPattern());
                                            }
                                            if (extractKVFields.getValuePattern() != null) {
                                                paramList.setValuePattern(extractKVFields.getValuePattern());
                                            }
                                            if (extractKVFields.getFetchValue() != null) {
                                                paramList.setKVFetchValue(
                                                        extractKVFields.getFetchValue().toString());
                                            }

                                            // Null values are allowed
                                            paramList.setWeight(extractKVFields.getWeight());
                                            paramList.setKeyFuzziness(extractKVFields.getKeyFuzziness());

                                            if (extractKVFields.getAdvancedKVExtraction() != null) {
                                                paramList.setLength(extractKVFields.getLength());
                                                paramList.setWidth(extractKVFields.getWidth());
                                                paramList.setXoffset(extractKVFields.getXoffset());
                                                paramList.setYoffset(extractKVFields.getYoffset());
                                                paramList.setMultiplier(Float.valueOf(1));
                                                paramList.setAdvancedKV(true);

                                                final AdvancedKVExtraction advancedKVExtraction = extractKVFields
                                                        .getAdvancedKVExtraction();
                                                if (advancedKVExtraction != null) {
                                                    keyRectangleCoordinates = new Coordinates();
                                                    valueRectangleCoordinates = new Coordinates();
                                                    keyRectangleCoordinates.setX0(BigInteger
                                                            .valueOf(advancedKVExtraction.getKeyX0Coord()));
                                                    keyRectangleCoordinates.setY0(BigInteger
                                                            .valueOf(advancedKVExtraction.getKeyY0Coord()));
                                                    keyRectangleCoordinates.setX1(BigInteger
                                                            .valueOf(advancedKVExtraction.getKeyX1Coord()));
                                                    keyRectangleCoordinates.setY1(BigInteger
                                                            .valueOf(advancedKVExtraction.getKeyY1Coord()));
                                                    valueRectangleCoordinates.setX0(BigInteger
                                                            .valueOf(advancedKVExtraction.getValueX0Coord()));
                                                    valueRectangleCoordinates.setY0(BigInteger
                                                            .valueOf(advancedKVExtraction.getValueY0Coord()));
                                                    valueRectangleCoordinates.setX1(BigInteger
                                                            .valueOf(advancedKVExtraction.getValueX1Coord()));
                                                    valueRectangleCoordinates.setY1(BigInteger
                                                            .valueOf(advancedKVExtraction.getValueY1Coord()));
                                                }

                                            }
                                            params.getParams().add(paramList);
                                            final String filePath = unZipFileLocation + File.separator
                                                    + hocrFileName;
                                            final HocrPages hocrPages = batchSchemaService.getHOCR(filePath);

                                            final boolean isSuccess = kvService.extractKVDocumentFieldsFromHOCR(
                                                    updtDocList, hocrPages, params, keyRectangleCoordinates,
                                                    valueRectangleCoordinates);
                                            // final boolean
                                            // isSuccess=kvService.extractKVFromHOCRForBatchClass(updtDocList,hocrPages,kvDocTypeLearning.getBatchClass(),kvDocTypeLearning.getDocumentType());

                                            if (!isSuccess) {
                                                respStr = "Unable to perform KV Extraction for HOCR file"
                                                        + hocrFileName;
                                                final RestError restError = new RestError(
                                                        HttpStatus.UNPROCESSABLE_ENTITY,
                                                        WebServiceConstants.INTERNAL_SERVER_ERROR_CODE,
                                                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE,
                                                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE
                                                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                                                        WebServiceConstants.DEFAULT_URL);
                                                LOGGER.error("Error response at server:" + respStr);
                                                throw new InternalServerException(respStr, restError);
                                            }
                                            hocrFile1.setFileName(hocrFileName);

                                        }
                                    }

                                    final DocField docField = getDocLevelField(fieldType, updtDocList);
                                    dlfs.getDocumentLevelField().add(docField);
                                }
                            } else {
                                respStr = "No Field Type is Defined for the document.Please try again.";
                                final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                                        WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_CODE, respStr,
                                        WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_MESSAGE
                                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                                        WebServiceConstants.DEFAULT_URL);
                                LOGGER.error("Error response at server:" + respStr);
                                throw new InternalServerException(respStr, restError);

                            }
                            hocrFile1.setDocumentLevelFields(dlfs);
                            extractKV.getHOCRFile().add(hocrFile1);
                        }
                    } else {
                        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
                        final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                                WebServiceConstants.PARAMETER_XML_INCORRECT_CODE, inputXMLValidationRes,
                                WebServiceConstants.PARAMETER_XML_INCORRECT_MESSAGE
                                        + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                                WebServiceConstants.DEFAULT_URL);
                        LOGGER.error(WebServiceConstants.PARAMETER_XML_INCORRECT_MESSAGE
                                + WebServiceConstants.HTTP_STATUS + HttpStatus.UNPROCESSABLE_ENTITY);
                        throw new InternalServerException(inputXMLValidationRes, restError);
                    }
                } else {
                    respStr = WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE;
                    final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                            WebServiceConstants.INPUT_FILES_NOT_FOUND_CODE,
                            WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE,
                            WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE
                                    + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                            WebServiceConstants.DEFAULT_URL);
                    LOGGER.error(WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE
                            + WebServiceConstants.HTTP_STATUS + HttpStatus.UNPROCESSABLE_ENTITY);
                    throw new ValidationException(WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE, restError);
                }
            } else {
                respStr = WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE;
                final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                        WebServiceConstants.INPUT_FILES_NOT_FOUND_CODE,
                        WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE,
                        WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE
                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                        WebServiceConstants.DEFAULT_URL);
                LOGGER.error(WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE + WebServiceConstants.HTTP_STATUS
                        + HttpStatus.UNPROCESSABLE_ENTITY);
                throw new ValidationException(WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE, restError);
            }

        } catch (final ValidationException validationException) {
            throw validationException;
        } catch (final InternalServerException internalServerError) {
            throw internalServerError;
        } catch (final java.io.FileNotFoundException ex) {
            respStr = "Input File not found.Please check logs for Exception";
            final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                    WebServiceConstants.INPUT_FILES_NOT_FOUND_CODE,
                    WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE,
                    WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error(WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE + WebServiceConstants.HTTP_STATUS
                    + HttpStatus.UNPROCESSABLE_ENTITY + ex);
            throw new ValidationException(respStr, restError);
        } catch (final org.xml.sax.SAXParseException Ex) {
            respStr = "Error in Parsing Input XML.Please try again";
            final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_CODE, respStr,
                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error("Error response at server:" + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
            final InternalServerException internalServerExcpetion = new InternalServerException(
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
            LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS);
            throw internalServerExcpetion;

        } catch (final Exception exception) {
            final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
            respStr = WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE + exception;
            final RestError restError = new RestError(status, WebServiceConstants.INTERNAL_SERVER_ERROR_CODE,
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE,
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error("Error response at server:" + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
            final InternalServerException internalServerExcpetion = new InternalServerException(
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
            LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
            throw internalServerExcpetion;
        }
    }

    else {
        final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
        respStr = WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE;
        final RestError restError = new RestError(status, WebServiceConstants.IMPROPER_INPUT_TO_SERVER_CODE,
                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE
                        + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                WebServiceConstants.DEFAULT_URL);
        LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
        throw new InternalServerException(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE, restError);
    }
    if (!workingDir.isEmpty()) {
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    return extractKV;
}

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

public void processCreateHOCRXML(final HttpServletRequest req, final HttpServletResponse resp)
        throws InternalServerException, ValidationException {
    LOGGER.info("Start processing web service for create HOCR-XML for Batch Class");
    String respStr = WebServiceUtil.EMPTY_STRING;
    String workingDir = WebServiceUtil.EMPTY_STRING;
    File zipInFolder = null;//  w  ww.jav  a 2s  .  c om
    File zipOutFolder = null;
    int responseCode = 0;
    WebServiceParams webServiceParams = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = batchSchemaService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final String outputDir = WebServiceUtil.createWebServiceOutputDir(workingDir);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            if (fileMap.size() != 2) {
                LOGGER.error("Invalid Number of files sent to the server");
                respStr = WebServiceConstants.INVALID_ARGUMENTS_FOR_CREATE_HOCR;
                responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
            } else {
                String xmlFileName = WebServiceUtil.EMPTY_STRING;
                String zipOutputLocation = WebServiceUtil.EMPTY_STRING;
                String zipFileNameWithOutExt = WebServiceUtil.EMPTY_STRING;
                for (final String fileName : fileMap.keySet()) {
                    InputStream instream = null;
                    OutputStream outStream = null;
                    ZipInputStream zipstream = null;
                    try {

                        if (!(fileName.endsWith(FileType.ZIP.getExtensionWithDot())
                                || fileName.endsWith(FileType.XML.getExtensionWithDot())
                                || fileName.endsWith(FileType.TIF.getExtensionWithDot())
                                || fileName.endsWith(FileType.TIFF.getExtensionWithDot()))) {
                            respStr = WebServiceConstants.INVALID_ARGUMENTS_FOR_CREATE_OCR_BATCH_CLASS;
                            responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                        }
                        final MultipartFile multiPartFile = multiPartRequest.getFile(fileName);
                        instream = multiPartFile.getInputStream();

                        if (fileName.endsWith(FileType.XML.getExtensionWithDot())) {
                            xmlFileName = fileName;
                            final File file = new File(workingDir + File.separator + fileName);
                            outStream = new FileOutputStream(file);
                            final byte[] buf = new byte[WebServiceUtil.bufferSize];
                            int len;
                            while ((len = instream.read(buf)) > 0) {
                                outStream.write(buf, 0, len);
                            }
                        }
                        if (fileName.endsWith(FileType.ZIP.getExtensionWithDot())) {
                            zipFileNameWithOutExt = FilenameUtils.removeExtension(fileName);
                            zipInFolder = new File(workingDir + File.separator + zipFileNameWithOutExt);
                            if (zipInFolder != null) {
                                zipInFolder.mkdirs();
                            }
                            zipstream = new ZipInputStream(instream);
                            ZipEntry ze = zipstream.getNextEntry();
                            if (ze == null) {
                                respStr = WebServiceConstants.NO_FILES_IN_ZIP_DIR;
                                responseCode = WebServiceConstants.NO_FILES_IN_ZIP_DIR_CODE;
                                LOGGER.error(respStr + " No files in the zip directory ");
                            }
                            while (ze != null) {
                                String upzipFileName = ze.getName();
                                LOGGER.info("Unzipping " + upzipFileName);

                                if (!(upzipFileName.endsWith(FileType.TIF.getExtensionWithDot())
                                        || upzipFileName.endsWith(FileType.TIFF.getExtensionWithDot())
                                        || upzipFileName.endsWith(FileType.PDF.getExtensionWithDot()))) {
                                    respStr = WebServiceConstants.UNSUPPORTED_FILE_TYPE_EXCEPTION_MESSAGE;
                                    responseCode = WebServiceConstants.UNSUPPORTED_FILE_TYPE_EXCEPTION_CODE;
                                    LOGGER.error("File name should be a valid tif, tiff or pdf file name only");
                                }
                                final File filePath = new File(zipInFolder + File.separator + upzipFileName);
                                outStream = new FileOutputStream(filePath);
                                final byte[] buf = new byte[WebServiceUtil.bufferSize];
                                int len;
                                while ((len = zipstream.read(buf)) > 0) {
                                    outStream.write(buf, 0, len);
                                }
                                final int pageCount = TIFFUtil
                                        .getTIFFPageCount(zipInFolder + File.separator + upzipFileName);
                                if (pageCount > 1
                                        || upzipFileName.endsWith(FileType.PDF.getExtensionWithDot())) {
                                    final BatchInstanceThread threadList = new BatchInstanceThread(
                                            new File(zipInFolder.toString()).getName() + Math.random());
                                    LOGGER.info(
                                            "Start spliting multipage tiff/pdf file into tiffs using image magick");
                                    imService.convertPdfOrMultiPageTiffToTiffUsingIM("", filePath, "",
                                            new File(EphesoftStringUtil.concatenate(zipInFolder.toString(),
                                                    File.separator, upzipFileName)),
                                            threadList);
                                    threadList.execute();
                                }
                                ze = zipstream.getNextEntry();
                            }
                        }
                        if (fileName.endsWith(FileType.TIFF.getExtensionWithDot())
                                || fileName.endsWith(FileType.TIF.getExtensionWithDot())) {
                            zipFileNameWithOutExt = WebServiceUtil.EMPTY_STRING;
                            final File file = new File(workingDir + File.separator + fileName);
                            zipInFolder = new File(workingDir);
                            outStream = new FileOutputStream(file);
                            final byte[] buf = new byte[WebServiceUtil.bufferSize];
                            int len;
                            while ((len = instream.read(buf)) > 0) {
                                outStream.write(buf, 0, len);
                            }
                            final int pageCount = TIFFUtil
                                    .getTIFFPageCount(workingDir + File.separator + fileName);
                            if (pageCount > 1) {
                                final BatchInstanceThread threadList = new BatchInstanceThread(
                                        zipInFolder.getName() + Math.random());
                                LOGGER.info(
                                        "Start spliting multipage tiff/pdf file into tiffs using image magick");
                                imService.convertPdfOrMultiPageTiffToTiffUsingIM(WebServiceUtil.EMPTY_STRING,
                                        file, WebServiceUtil.EMPTY_STRING, new File(EphesoftStringUtil
                                                .concatenate(workingDir.toString(), File.separator, fileName)),
                                        threadList);
                                threadList.execute();
                            }
                        }
                    } finally {
                        IOUtils.closeQuietly(instream);
                        IOUtils.closeQuietly(outStream);
                        IOUtils.closeQuietly(zipstream);
                    }
                }
                final File xmlFile = new File(workingDir + File.separator + xmlFileName);
                if (StringUtils.isNotEmpty(xmlFileName) && xmlFile.exists()) {
                    final FileInputStream inputStream = new FileInputStream(xmlFile);
                    final Source source = XMLUtil.createSourceFromStream(inputStream);
                    final Object unmarshelledObject = batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                            .unmarshal(source);
                    if (!(unmarshelledObject instanceof WebServiceParams)) {
                        respStr = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_MESSAGE;
                        responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
                    } else {
                        webServiceParams = (WebServiceParams) unmarshelledObject;
                        if (null != webServiceParams.getParams()) {
                            final List<Param> paramList = webServiceParams.getParams().getParam();
                            if (paramList == null || paramList.isEmpty()) {
                                final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
                                respStr = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_MESSAGE;
                                responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
                                LOGGER.error(respStr + "\n No Parameters in the request" + status);
                            } else {
                                String batchClassId = WebServiceUtil.EMPTY_STRING;
                                for (final Param param : paramList) {
                                    if (WebServiceConstants.BATCH_CLASS_IDENTIFIER
                                            .equalsIgnoreCase(param.getName())) {
                                        batchClassId = param.getValue();
                                        continue;
                                    }
                                    if (WebServiceUtil.ZIP_OUTPUT_LOCATION.equalsIgnoreCase(param.getName())) {
                                        zipOutputLocation = param.getValue();
                                        if (StringUtils.isBlank(zipOutputLocation)
                                                || !(new File(zipOutputLocation).isDirectory())) {
                                            respStr = WebServiceConstants.ZIP_OUTPUT_LOCATION_INVALID_MESSAGE;
                                            responseCode = WebServiceConstants.ZIP_OUTPUT_LOCATION_INVALID_CODE;
                                            LOGGER.error(
                                                    "Zip output location is blank or invalid in xml input file");
                                        }
                                        continue;
                                    }
                                    if (WebServiceUtil.ZIP_NAME.equalsIgnoreCase(param.getName())) {
                                        if (!((zipFileNameWithOutExt + FileType.ZIP.getExtensionWithDot())
                                                .equals(param.getValue()))) {
                                            respStr = WebServiceConstants.INPUT_ZIP_NOT_FOUND_MESSAGE;
                                            responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
                                            LOGGER.error(
                                                    "Zip file name doesn't match zip file name in xml input file");
                                        } else
                                            continue;
                                    }
                                }
                                if (respStr == null || respStr.isEmpty()) {
                                    if (batchClassId != null && !batchClassId.isEmpty()) {
                                        final BatchClass batchClass = batchClassService
                                                .getBatchClassByIdentifier(batchClassId);
                                        if (batchClass != null) {

                                            final String ocrEngine = getDefaultHOCRPlugin(batchClassId);
                                            String colorSwitch = WebServiceUtil.EMPTY_STRING;
                                            String cmdLanguage = WebServiceUtil.EMPTY_STRING;
                                            LOGGER.info(EphesoftStringUtil.concatenate("Ocr engine used is : ",
                                                    ocrEngine));

                                            if (WebServiceConstants.TESSERACT_HOCR_PLUGIN
                                                    .equalsIgnoreCase(ocrEngine)) {
                                                final File dir = new File(zipInFolder + "");
                                                File[] directoryListing = dir.listFiles();
                                                if (directoryListing != null) {
                                                    zipOutFolder = new File(
                                                            outputDir + File.separator + zipFileNameWithOutExt);
                                                    if (zipOutFolder != null) {
                                                        zipOutFolder.mkdirs();
                                                    }
                                                    for (File inputFile : directoryListing) {
                                                        String inputFileName = inputFile.getName();
                                                        if (inputFileName != null && !inputFileName.isEmpty()) {
                                                            if (inputFileName.endsWith(
                                                                    FileType.TIFF.getExtensionWithDot())
                                                                    || inputFileName.endsWith(FileType.TIF
                                                                            .getExtensionWithDot())) {
                                                                final int pageCountTiff = TIFFUtil
                                                                        .getTIFFPageCount(inputFile.toString());
                                                                if (pageCountTiff > 1) {
                                                                    continue;
                                                                }

                                                                if (WebServiceConstants.TESSERACT_HOCR_PLUGIN
                                                                        .equalsIgnoreCase(ocrEngine)) {
                                                                    final BatchPlugin pluginProperties = classPluginPropertiesService
                                                                            .getPluginProperties(batchClassId,
                                                                                    WebServiceConstants.TESSERACT_HOCR_PLUGIN);
                                                                    if (pluginProperties != null) {
                                                                        if (pluginProperties
                                                                                .getPluginConfigurations(
                                                                                        TesseractProperties.TESSERACT_COLOR_SWITCH) != null) {
                                                                            colorSwitch = classPluginPropertiesService
                                                                                    .getPropertyValue(
                                                                                            batchClassId,
                                                                                            WebServiceConstants.TESSERACT_HOCR_PLUGIN,
                                                                                            TesseractProperties.TESSERACT_COLOR_SWITCH);
                                                                            if (pluginProperties
                                                                                    .getPluginConfigurations(
                                                                                            TesseractProperties.TESSERACT_LANGUAGE) != null) {
                                                                                cmdLanguage = classPluginPropertiesService
                                                                                        .getPropertyValue(
                                                                                                batchClassId,
                                                                                                WebServiceConstants.TESSERACT_HOCR_PLUGIN,
                                                                                                TesseractProperties.TESSERACT_LANGUAGE);
                                                                                tesseractService.createOCR(
                                                                                        zipInFolder.toString(),
                                                                                        colorSwitch,
                                                                                        inputFileName,
                                                                                        zipOutFolder.toString(),
                                                                                        cmdLanguage,
                                                                                        WebServiceConstants.TESSERACT_CURRENT_VERSION);
                                                                            } else {
                                                                                respStr = WebServiceConstants.NO_TESSERACT_LANGUAGE_SUPPORT;
                                                                                responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                                                LOGGER.error(
                                                                                        "No Language Support");
                                                                            }

                                                                        } else {
                                                                            respStr = WebServiceConstants.NO_TESSERACT_COLOR_SWITCH;
                                                                            responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                                            LOGGER.error(
                                                                                    "Colour Switch Not Found");
                                                                        }
                                                                    } else {
                                                                        respStr = WebServiceConstants.NO_PROPERTY_FOR_TESSERACT_HOCR;
                                                                        responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                                    }
                                                                }

                                                            }
                                                        } else {
                                                            respStr = WebServiceConstants.INVALID_FILE_NAME;
                                                            responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                                                            LOGGER.error(
                                                                    "File Name should not be NULL or empty ");
                                                        }
                                                    } // End of for loop

                                                }

                                                else {
                                                    respStr = WebServiceConstants.NO_FILES_IN_ZIP_DIR;
                                                    responseCode = WebServiceConstants.NO_FILES_IN_ZIP_DIR_CODE;
                                                    LOGGER.error(respStr + " No files in the zip directory ");
                                                }

                                            }
                                            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()
                                                                + "\"\r\n");
                                                resp.setStatus(HttpServletResponse.SC_OK);
                                                try {
                                                    out = resp.getOutputStream();
                                                    zout = new ZipOutputStream(out);
                                                    FileUtils.zipDirectory(zipOutFolder.toString(), zout,
                                                            zipFileName);
                                                } catch (final FileNotFoundException fileNotFoundException) {
                                                    String messageString = fileNotFoundException.getMessage();
                                                    messageString = messageString.substring(
                                                            messageString.lastIndexOf(File.separator));
                                                    respStr = WebServiceConstants.FILE_NOT_FOUND
                                                            + messageString;
                                                    responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                    LOGGER.error("Could Not Copy the File "
                                                            + fileNotFoundException.getMessage());
                                                } catch (final IOException ioExcpetion) {
                                                    respStr = WebServiceConstants.ERROR_WHILE_CREATING_ZIPPED_FILE
                                                            + ioExcpetion;
                                                    responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                    LOGGER.error(respStr);
                                                } finally {
                                                    IOUtils.closeQuietly(zout);
                                                    IOUtils.closeQuietly(out);
                                                }
                                            }
                                            if (respStr.isEmpty()) {
                                                FileOutputStream fos = null;
                                                ZipOutputStream zos = null;
                                                final File out = new File(zipOutputLocation + File.separator
                                                        + zipFileNameWithOutExt
                                                        + FileType.ZIP.getExtensionWithDot());
                                                try {
                                                    fos = new FileOutputStream(out);
                                                    zos = new ZipOutputStream(fos);
                                                    FileUtils.zipDirectory(zipOutFolder.toString(), zos,
                                                            zipFileNameWithOutExt);

                                                } catch (final FileNotFoundException fileNotFoundException) {
                                                    String messageString = fileNotFoundException.getMessage();
                                                    messageString = messageString.substring(
                                                            messageString.lastIndexOf(File.separator));
                                                    respStr = WebServiceConstants.FILE_NOT_FOUND
                                                            + messageString;
                                                    responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                    LOGGER.error("Could Not Copy the File "
                                                            + fileNotFoundException.getMessage());
                                                } catch (final IOException ioExcpetion) {
                                                    respStr = WebServiceConstants.ERROR_WHILE_CREATING_ZIPPED_FILE
                                                            + ioExcpetion;
                                                    responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
                                                    LOGGER.error(respStr);
                                                } finally {
                                                    IOUtils.closeQuietly(zos);
                                                    IOUtils.closeQuietly(fos);
                                                }
                                            }

                                        } else {
                                            respStr = WebServiceConstants.INVALID_BATCH_CLASS_ID_MESSAGE;
                                            responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
                                            LOGGER.error(respStr + " Batch Class ID doesnot exist ");
                                        }
                                    } else {
                                        respStr = WebServiceConstants.INVALID_BATCH_CLASS_ID_MESSAGE;
                                        responseCode = WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE;
                                        LOGGER.error(respStr + " No input of Batch Class ID ");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    respStr = WebServiceConstants.INPUT_FILES_NOT_FOUND_MESSAGE;
                    responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
                }
            }
        } catch (final FileNotFoundException fileNotFoundException) {
            String message = fileNotFoundException.getMessage();
            message = message.substring(message.lastIndexOf(File.separator));
            respStr = WebServiceConstants.FILE_NOT_FOUND + message;
        } catch (final ValidationException validationException) {
            throw validationException;
        } catch (final InternalServerException internalServerError) {
            throw internalServerError;
        } catch (final Exception exception) {
            respStr = WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE + exception;
            responseCode = WebServiceConstants.INTERNAL_SERVER_ERROR_CODE;
            exception.printStackTrace();
        } finally {
            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir));
        }
    } else {
        respStr = WebServiceConstants.INVALID_MULTIPART_REQUEST;
        responseCode = WebServiceConstants.INVALID_PARAMETERS_CODE;
    }
    validateResponse(responseCode, respStr);
}

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

/**
 * This Web Service implements the functionality of uploading the Batch and creating the new BatchInstances with the name provided
 * by the user making sure that the there is no Other Batch Instance with the same name under that Batch class and as well as the
 * user has the access to that Batch Class
 * /*from   w w  w  . j a  v a 2  s. co m*/
 * @param req {@link HttpServletRequest} The request Object encapsulated for the clients Request
 * @param batchClassIdentifier {@link String} Batch Class Identifier which uniquely Identifies the Object
 * @param batchInstanceName {@link String} Batch Instance Name that is the unique name which identifies the batch Instance
 * @param roles {@link Set} Set of the roles assigned to the user
 * @return {@link String} the Result to be displaying When the Request is executed successfully withoput generating an Exception
 * @throws ValidationException When the Input Parameters cannot be validated
 * @throws UnAuthorisedAccessException When User tries to make an access to a batch which is not under his role
 * @throws NoUserRoleException : When the user is not assigned to any role
 * @throws UnSupportedFileTypeException : When the uploaded file is not from any of the supprted file type by plugin pdf/tif/tiff
 * @throws BatchNameAlreadyExistException : The Batch With same Name aslready exist
 * @throws InternalServerException : When Some IOException Occurs at Server
 * @throws Exception When unable to process the Multi-Part Request
 */
public String uploadBatch(final HttpServletRequest req, final String batchClassIdentifier,
        final String batchInstanceName, final Set<String> roles)
        throws ValidationException, UnAuthorisedAccessException, NoUserRoleException,
        UnSupportedFileTypeException, BatchNameAlreadyExistException, InternalServerException, Exception {
    String workingDir = WebServiceUtil.EMPTY_STRING;
    boolean isSuccess = false;
    try {
        InputStream inStream = null;
        OutputStream outStream = null;
        if (StringUtils.isBlank(batchClassIdentifier)) {
            throw new ValidationException(
                    WebServiceConstants.INVALID_BATCH_CLASS_ID_MESSAGE + batchClassIdentifier,
                    createUnprocessableEntityRestError(WebServiceConstants.INVALID_BATCH_CLASS_ID_MESSAGE,
                            WebServiceConstants.INVALID_BATCH_CLASS_ID_CODE));
        } else if (StringUtils.isBlank(batchInstanceName)) {
            throw new ValidationException(
                    WebServiceConstants.INVALID_BATCH_INSTANCE_NAME_MESSAGE + batchClassIdentifier,
                    createUnprocessableEntityRestError(WebServiceConstants.INVALID_BATCH_INSTANCE_NAME_MESSAGE,
                            WebServiceConstants.INVALID_BATCH_INSTANCE_NAME_CODE));
        } else if (req instanceof DefaultMultipartHttpServletRequest) {
            final String webServiceFolderPath = batchSchemaService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            String uncFolderPath = WebServiceUtil.EMPTY_STRING;
            final List<File> fileList = new ArrayList<File>();
            if (CollectionUtils.isNotEmpty(roles)) {
                final BatchClass batchClass = batchClassService.getBatchClassByUserRoles(roles,
                        batchClassIdentifier);
                if (batchClass == null) {
                    LOGGER.error(
                            "The user does not have the authentication to run the batch in the requested batch class with id: "
                                    + batchClassIdentifier);
                    throw new UnAuthorisedAccessException();
                } else {
                    uncFolderPath = batchClass.getUncFolder();
                }
            } else {
                LOGGER.error(WebServiceConstants.NO_USER_ROLE_EXCEPTION_MESSAGE);
                throw new NoUserRoleException();
            }
            if (fileMap.size() == 0) {
                throw new ValidationException(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                        createUnprocessableEntityRestError(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_CODE));
            }
            for (final String srcFileName : fileMap.keySet()) {
                if (FileType.isValidFileName(srcFileName)) {
                    final File file = new File(workingDir + File.separator + srcFileName);
                    fileList.add(file);
                    final MultipartFile multiPartFile = multiPartRequest.getFile(srcFileName);
                    inStream = multiPartFile.getInputStream();
                    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);
                    }
                    IOUtils.closeQuietly(inStream);
                    IOUtils.closeQuietly(outStream);
                } else {
                    LOGGER.error(WebServiceConstants.UNSUPPORTED_FILE_TYPE_EXCEPTION_MESSAGE);
                    throw new UnSupportedFileTypeException();
                }
            }
            final String filePath = workingDir + File.separator + batchInstanceName;
            final File file = new File(filePath);
            if (file.mkdir()) {
                for (final File srcFileName : fileList) {
                    final File destFile = new File(filePath + File.separator + srcFileName.getName());
                    FileUtils.copyFile(srcFileName, destFile);
                }
                final File destFile = new File(uncFolderPath + File.separator + batchInstanceName);
                if (!destFile.exists()) {
                    FileUtils.copyDirectoryWithContents(file, destFile);
                } else {
                    LOGGER.error(WebServiceConstants.BATCH_NAME_ALREADY_EXIST_EXCEPTION_MESSAGE);
                    throw new BatchNameAlreadyExistException();
                }
                isSuccess = true;
            } else {
                LOGGER.error(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE);
                throw new InternalServerException(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                        createUnprocessableEntityRestError(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_CODE));
            }
        } else {
            throw new ValidationException(WebServiceConstants.INVALID_INPUT_FOR_UPLOAD_BATCH,
                    createUnprocessableEntityRestError(WebServiceConstants.INVALID_INPUT_FOR_UPLOAD_BATCH,
                            WebServiceConstants.INVALID_PARAMETERS_CODE));
        }
    } finally {
        if (!workingDir.isEmpty()) {
            FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
        }
    }
    return isSuccess ? WebServiceConstants.BATCH_UPLOADED_SUCCESS_MESSAGE
            : WebServiceConstants.BATCH_UPLOADED_FAILURE_MESSAGE;
}

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

/**
 * This Method is Added to process the input provided for WebService to upload files for Learning
 * /*from   ww w .j  av a  2  s  .c o m*/
 * @param req the {@link HttpServletRequest} the request header for this web service hit
 * @throws InternalServerException the internal server exception
 * @throws ValidationException the validation exception
 */
public void getUploadFilesforLearning(final HttpServletRequest req)
        throws InternalServerException, ValidationException {
    LOGGER.info("Inside getUploadFilesforLearning method");
    String respStr = WebServiceConstants.EMPTY_STRING;
    String workingDir = WebServiceConstants.EMPTY_STRING;
    String docTypeName = WebServiceConstants.EMPTY_STRING;
    String learningType = WebServiceConstants.EMPTY_STRING;
    List<String> fileNamesFirst = null;
    List<String> fileNamesMiddle = null;
    List<String> fileNamesLast = null;
    if (req instanceof DefaultMultipartHttpServletRequest) {
        try {
            final String webServiceFolderPath = batchSchemaService.getWebServicesFolderPath();
            workingDir = WebServiceUtil.createWebServiceWorkingDir(webServiceFolderPath);
            final DefaultMultipartHttpServletRequest multiPartRequest = (DefaultMultipartHttpServletRequest) req;
            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            final int fileCountValue = checkFileCountForExtentionType("xml", fileMap);
            if (fileCountValue >= 2) {
                final HttpStatus status = HttpStatus.UNPROCESSABLE_ENTITY;
                respStr = "There are more than 1 xml file uploaded with the request. Only 1 xml is expected";
                final RestError restError = new RestError(status,
                        WebServiceConstants.INTERNAL_SERVER_ERROR_CODE, respStr,
                        respStr + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                        WebServiceConstants.DEFAULT_URL);
                LOGGER.error("Error response at server:" + respStr);

                final InternalServerException internalServerExcpetion = new InternalServerException(
                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
                LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
                throw internalServerExcpetion;
            }

            String xmlFileName = WebServiceConstants.EMPTY_STRING;
            xmlFileName = getXMLFile(workingDir, multiPartRequest, fileMap);
            LOGGER.info("XML file name is" + xmlFileName);
            UploadLearningFiles uploadLearningFileXML = null;
            final File xmlFile = new File(workingDir + File.separator + xmlFileName);

            final FileInputStream inputStream = new FileInputStream(xmlFile);
            final Source source = XMLUtil.createSourceFromStream(inputStream);
            uploadLearningFileXML = (UploadLearningFiles) batchSchemaDao.getJAXB2Template().getJaxb2Marshaller()
                    .unmarshal(source);
            final String inputXMLValidationRes = validateInputXMLForLearning(uploadLearningFileXML);
            if (inputXMLValidationRes.isEmpty()) {
                String searchPathName = WebServiceConstants.EMPTY_STRING;
                final List<DocType> docTypes = uploadLearningFileXML.getDocType();
                if (isValidFileCountForLearning(docTypes, fileMap.size() - 1)) {
                    for (final DocType docType : docTypes) {
                        docTypeName = docType.getDocTypeName();
                        learningType = docType.getLearningType();
                        if (docType.getPageTypeFirst() != null
                                && docType.getPageTypeFirst().getFilesToBeUploaded().getFileName() != null
                                && !docType.getPageTypeFirst().getFilesToBeUploaded().getFileName().isEmpty()) {
                            fileNamesFirst = docType.getPageTypeFirst().getFilesToBeUploaded().getFileName();
                            if (LUCENE_SEARCH_CLASSIFICATION_TYPE.equalsIgnoreCase(learningType)) {
                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.FIRST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesFirst);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");
                            } else if ("Image".equalsIgnoreCase(learningType)) {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.FIRST_PAGE);
                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesFirst);
                            } else {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.FIRST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesFirst);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.FIRST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesFirst);
                                LOGGER.info("Sucessfully Uploaded Images for image-classification-sample");
                            }
                        }

                        if (docType.getPageTypeMiddle() != null
                                && docType.getPageTypeMiddle().getFilesToBeUploaded().getFileName() != null
                                && !docType.getPageTypeMiddle().getFilesToBeUploaded().getFileName()
                                        .isEmpty()) {
                            fileNamesMiddle = docType.getPageTypeMiddle().getFilesToBeUploaded().getFileName();
                            if (LUCENE_SEARCH_CLASSIFICATION_TYPE.equalsIgnoreCase(learningType)) {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.MIDDLE_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesMiddle);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");
                            } else if ("Image".equalsIgnoreCase(learningType)) {
                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.MIDDLE_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesMiddle);
                                LOGGER.info("Sucessfully Uploaded Images for image-classification-sample");
                            } else {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.MIDDLE_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesMiddle);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.MIDDLE_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesMiddle);
                                LOGGER.info("Sucessfully Uploaded Images for image-classification-sample");
                            }
                        }

                        if (docType.getPageTypeLast() != null
                                && docType.getPageTypeLast().getFilesToBeUploaded().getFileName() != null
                                && !docType.getPageTypeLast().getFilesToBeUploaded().getFileName().isEmpty()) {
                            fileNamesLast = docType.getPageTypeLast().getFilesToBeUploaded().getFileName();
                            if (LUCENE_SEARCH_CLASSIFICATION_TYPE.equalsIgnoreCase(learningType)) {
                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.LAST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesLast);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");
                            } else if ("Image".equalsIgnoreCase(learningType)) {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.LAST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesLast);
                                LOGGER.info("Sucessfully Uploaded Images for image-classification-sample");
                            } else {

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getSearchClassSamplePath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.LAST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesLast);
                                LOGGER.info(
                                        "Sucessfully Uploaded Images for lucene-search-classification-sample");

                                searchPathName = EphesoftStringUtil.concatenate(
                                        batchSchemaService.getImageMagickBaseFolderPath(
                                                uploadLearningFileXML.getBatchClassId(), true),
                                        File.separator, docType.getDocTypeName(), File.separator, docTypeName,
                                        WebServiceConstants.LAST_PAGE);

                                uploadInputImagesToLearningFolder(searchPathName, workingDir, fileNamesLast);
                                LOGGER.info("Sucessfully Uploaded Images for image-classification-sample");
                            }
                        }
                    }
                } else {
                    final RestError restError = createUnprocessableEntityRestError(
                            WebServiceConstants.INVALID_NUMBER_OF_FILES_FOR_UPLOAD_LEARNING,
                            WebServiceConstants.INVALID_ARGUMENTS_IN_XML_INPUT_CODE);
                    LOGGER.error("Mismatch in the XML input and files sent.");
                    throw new ValidationException(
                            WebServiceConstants.INVALID_NUMBER_OF_FILES_FOR_UPLOAD_LEARNING, restError);
                }
            } else {
                final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                        WebServiceConstants.PARAMETER_XML_INCORRECT_CODE, inputXMLValidationRes,
                        inputXMLValidationRes + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                        WebServiceConstants.DEFAULT_URL);
                LOGGER.error(WebServiceConstants.PARAMETER_XML_INCORRECT_MESSAGE
                        + WebServiceConstants.HTTP_STATUS + HttpStatus.UNPROCESSABLE_ENTITY);
                throw new InternalServerException(inputXMLValidationRes, restError);
            }

        } catch (final FileNotFoundException fe) {

            respStr = WebServiceConstants.INPUT_XML_NOT_FOUND_MESSAGE;
            final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                    WebServiceConstants.INPUT_XML_NOT_FOUND_CODE, respStr,
                    WebServiceConstants.INPUT_XML_NOT_FOUND_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error("Error response at server:" + respStr);

            final InternalServerException internalServerExcpetion = new InternalServerException(
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
            LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS);
            throw internalServerExcpetion;
        } catch (final org.xml.sax.SAXParseException ex) {

            respStr = "Error in Parsing Input XML.Please try again" + ex.getMessage();
            final RestError restError = new RestError(HttpStatus.UNPROCESSABLE_ENTITY,
                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_CODE, respStr,
                    WebServiceConstants.INPUT_XML_NOT_ABLE_TO_PARSE_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error("Error response at server:" + respStr);

            final InternalServerException internalServerExcpetion = new InternalServerException(
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
            LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS);
            throw internalServerExcpetion;
            // JIRA-Bug-11130
        } catch (InternalServerException internalServerException) {
            throw internalServerException;
        } catch (ValidationException validationException) {
            throw validationException;
        } catch (final Exception exception) {
            final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
            respStr = WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE + exception;
            final RestError restError = new RestError(status, WebServiceConstants.INTERNAL_SERVER_ERROR_CODE,
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE,
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE
                            + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                    WebServiceConstants.DEFAULT_URL);
            LOGGER.error("Error response at server:" + respStr);

            final InternalServerException internalServerExcpetion = new InternalServerException(
                    WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
            LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
            throw internalServerExcpetion;
        }

        finally {
            try {
                if (!workingDir.isEmpty()) {
                    FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
                }
            } catch (final Exception ex) {
                final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
                respStr = WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE + ex.getMessage();
                final RestError restError = new RestError(status,
                        WebServiceConstants.INTERNAL_SERVER_ERROR_CODE,
                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE,
                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE
                                + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                        WebServiceConstants.DEFAULT_URL);
                LOGGER.error("Error response at server:" + respStr);
                final InternalServerException internalServerExcpetion = new InternalServerException(
                        WebServiceConstants.INTERNAL_SERVER_ERROR_MESSAGE, restError);
                LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
                throw internalServerExcpetion;
            }
        }
    } else {
        final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
        respStr = WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE;
        final RestError restError = new RestError(status, WebServiceConstants.IMPROPER_INPUT_TO_SERVER_CODE,
                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE,
                WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE
                        + WebServiceConstants.CLASS_WEB_SERVICE_UTILITY,
                WebServiceConstants.DEFAULT_URL);
        LOGGER.error(respStr + WebServiceConstants.HTTP_STATUS + status);
        throw new InternalServerException(WebServiceConstants.IMPROPER_INPUT_TO_SERVER_MESSAGE, restError);
    }

}

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

/**
 * To extract From Image.//from  w w  w .java  2s  . c om
 * @param req {@link HttpServletRequest}
 * @param resp {@link HttpServletResponse}
 */
@RequestMapping(value = "/extractFromImage", method = RequestMethod.POST)
@ResponseBody
public void extractFromImage(final HttpServletRequest req, final HttpServletResponse resp) {
    LOGGER.info("Start processing web service for performExtractionForImage..");
    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();

            final MultiValueMap<String, MultipartFile> fileMap = multiPartRequest.getMultiFileMap();
            final DefaultMultipartHttpServletRequest multipartReq = (DefaultMultipartHttpServletRequest) req;
            String batchClassId = WebServiceUtil.EMPTY_STRING;
            String ocrEngine = WebServiceUtil.EMPTY_STRING;
            String colorSwitch = WebServiceUtil.EMPTY_STRING;
            String projectFile = WebServiceUtil.EMPTY_STRING;
            String cmdLanguage = WebServiceUtil.EMPTY_STRING;
            String documentType = WebServiceUtil.EMPTY_STRING;
            String tifFileName = WebServiceUtil.EMPTY_STRING;
            for (final Enumeration<String> params = multipartReq.getParameterNames(); params
                    .hasMoreElements();) {
                final String paramName = params.nextElement();
                if (paramName.equalsIgnoreCase(WebServiceUtil.BATCH_CLASS_IDENTIFIER)) {
                    batchClassId = multipartReq.getParameter(paramName);
                    continue;
                }
                if (paramName.equalsIgnoreCase(WebServiceUtil.OCR_ENGINE)) {
                    ocrEngine = multipartReq.getParameter(paramName);
                    continue;
                }
                if (paramName.equalsIgnoreCase(WebServiceUtil.COLOR_SWITCH)) {
                    colorSwitch = multipartReq.getParameter(paramName);
                    continue;
                }
                if (paramName.equalsIgnoreCase(WebServiceUtil.PROJECT_FILE)) {
                    projectFile = multipartReq.getParameter(paramName);
                    continue;
                }
                if (paramName.equalsIgnoreCase(WebServiceUtil.CMD_LANGUAGE)) {
                    cmdLanguage = multipartReq.getParameter(paramName);
                    continue;
                }
                if (paramName.equalsIgnoreCase(WebServiceUtil.DOCUMENT_TYPE)) {
                    documentType = multipartReq.getParameter(paramName);
                    continue;
                }

            }
            LOGGER.info("Parameters for the web service are: ");
            LOGGER.debug(WebServiceUtil.BATCH_CLASS_IDENTIFIER + " :" + batchClassId);
            LOGGER.debug(WebServiceUtil.OCR_ENGINE + " :" + ocrEngine);
            LOGGER.debug(WebServiceUtil.COLOR_SWITCH + " :" + colorSwitch);
            LOGGER.debug(WebServiceUtil.PROJECT_FILE + " :" + projectFile);
            // logger.debug("" + tesseractVersion);
            LOGGER.debug(WebServiceUtil.CMD_LANGUAGE + " :" + cmdLanguage);
            LOGGER.debug(WebServiceUtil.DOCUMENT_TYPE + " :" + documentType);

            final int attachedFileSize = fileMap.size();
            if (attachedFileSize != 1) {
                respStr = "Invalid number of files. Expected number of file(s): 1 of type: tif/tiff/png file. Recieved: "
                        + attachedFileSize + " file(s)";
            }
            if (respStr.isEmpty()) {
                for (final String fileName : fileMap.keySet()) {
                    try {
                        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())) {
                            tifFileName = fileName;
                            LOGGER.debug("Image Name :" + tifFileName);

                        }
                    } finally {
                        IOUtils.closeQuietly(instream);
                        IOUtils.closeQuietly(outStream);
                    }

                }

                final StringBuilder projectFileBuffer = new StringBuilder();
                projectFileBuffer.append(bsService.getBaseFolderLocation());
                projectFileBuffer.append(File.separator);
                projectFileBuffer.append(batchClassId);
                projectFileBuffer.append(File.separator);
                projectFileBuffer.append(RECOSTAR_EXTRACTION);
                projectFileBuffer.append(File.separator);
                projectFileBuffer.append(projectFile);
                final String projectFilePath = projectFileBuffer.toString();
                final String results = WebServiceUtil.validateExtractFromImageAPI(workingDir, ocrEngine,
                        colorSwitch, projectFilePath, cmdLanguage, tifFileName);
                if (!results.isEmpty()) {
                    respStr = results;
                } else {
                    String[] fileNames = null;
                    final File file = new File(workingDir);
                    fileNames = splitImagesAndCreatePNG(workingDir, colorSwitch, file);
                    LOGGER.info("Number of file is:" + fileNames.length);
                    LOGGER.info("OcrEngine used for generating ocr is :" + ocrEngine);
                    if (ocrEngine.equalsIgnoreCase(WebServiceUtil.RECOSTAR)) {
                        respStr = createHOCRViaRecostar(workingDir, outputDir, batchInstanceThread, colorSwitch,
                                projectFilePath, fileNames);
                    } else if (ocrEngine.contains(WebServiceUtil.TESSERACT)) {
                        respStr = createHOCRViaTesseract(workingDir, outputDir, batchInstanceThread,
                                colorSwitch, ocrEngine, cmdLanguage, fileNames);
                    } else {
                        respStr = "Please select valid tool for generating OCR file.";
                    }
                    if (respStr.isEmpty()) {
                        respStr = executeBatchInstanceThread(workingDir, outputDir, batchInstanceThread,
                                ocrEngine, fileNames);
                    }

                }
            }
            if (respStr.isEmpty()) {
                final String hocrFilePath = outputDir + File.separator
                        + tifFileName.substring(0, tifFileName.lastIndexOf(CONSTANT_DOT) + 1)
                        + FileType.HTML.getExtension();
                LOGGER.debug("Generated HOCR file located at " + hocrFilePath);
                final Set<String> loggedInUserRole = getUserRoles(req);
                if (!isBatchClassViewableToUser(batchClassId, loggedInUserRole, isSuperAdmin(req))) {
                    respStr = "User is not authorized to view the batch class for given identifier:"
                            + batchClassId;
                    LOGGER.error("Error response at server:" + respStr);
                }

                LOGGER.info("Performing Extraction using KV mechanism.");
                respStr = extractKVFromHOCR(resp, respStr, outputDir, batchClassId, hocrFilePath, documentType);
            }

        } catch (final DCMAException dcmae) {
            respStr = "Error in processing request. Detailed exception is " + dcmae;
            LOGGER.error("Error response at server:" + respStr);
        } catch (final Exception e) {
            respStr = INTERNAL_SERVER_ERROR + e;
            LOGGER.error("Error response at server:" + respStr);
            if (!workingDir.isEmpty()) {
                FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
            }
        }
    } else {
        respStr = IMPROPER_INPUT_TO_SERVER;
        LOGGER.error("Error response at server:" + respStr);
    }
    if (!workingDir.isEmpty()) {
        LOGGER.info("Clearing the temporary files.");
        FileUtils.deleteDirectoryAndContentsRecursive(new File(workingDir).getParentFile());
    }
    if (!respStr.isEmpty()) {
        try {
            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, respStr);
            LOGGER.error("Error response at server:" + respStr);
        } catch (final IOException ioe) {
            LOGGER.info(
                    "Exception in sending the error code to client. Logged the exception for debugging:" + ioe,
                    ioe);
        }
    }
}

From source file:eionet.webq.web.controller.cdr.IntegrationWithCDRControllerIntegrationTest.java

@SuppressWarnings("unchecked")
@Test/*from w w w  .  ja  va 2s .c o m*/
public void expectXmlFilesSetForMenu() throws Exception {
    saveAvailableWebFormWithSchema(XML_SCHEMA);
    saveAvailableWebFormWithSchema(XML_SCHEMA);
    rpcClientWillReturnFileForSchema(XML_SCHEMA);

    MultiValueMap<String, XmlFile> files = (MultiValueMap<String, XmlFile>) requestToWebQMenuAndGetModelAttribute(
            "xmlFiles");

    assertThat(files.size(), equalTo(1));
    assertTrue(files.containsKey(XML_SCHEMA));
}

From source file:org.springframework.http.converter.FormHttpMessageConverterTests.java

@Test
public void readForm() throws Exception {
    String body = "name+1=value+1&name+2=value+2%2B1&name+2=value+2%2B2&name+3";
    MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(StandardCharsets.ISO_8859_1));
    inputMessage.getHeaders()// w ww  .j  a v a  2s. co m
            .setContentType(new MediaType("application", "x-www-form-urlencoded", StandardCharsets.ISO_8859_1));
    MultiValueMap<String, String> result = this.converter.read(null, inputMessage);

    assertEquals("Invalid result", 3, result.size());
    assertEquals("Invalid result", "value 1", result.getFirst("name 1"));
    List<String> values = result.get("name 2");
    assertEquals("Invalid result", 2, values.size());
    assertEquals("Invalid result", "value 2+1", values.get(0));
    assertEquals("Invalid result", "value 2+2", values.get(1));
    assertNull("Invalid result", result.getFirst("name 3"));
}

From source file:org.springframework.integration.configuration.EnableIntegrationTests.java

@Test
@DirtiesContext/*w  w w .  j av  a 2  s. c  om*/
public void testRoles() {
    assertThat(this.roleController.getRoles(), containsInAnyOrder("foo", "bar"));
    assertFalse(this.roleController.allEndpointsRunning("foo"));
    assertFalse(this.roleController.noEndpointsRunning("foo"));
    assertTrue(this.roleController.allEndpointsRunning("bar"));
    assertFalse(this.roleController.noEndpointsRunning("bar"));
    Map<String, Boolean> state = this.roleController.getEndpointsRunningStatus("foo");
    assertThat(state.get("annotationTestService.handle.serviceActivator"), equalTo(Boolean.FALSE));
    assertThat(state.get("enableIntegrationTests.ContextConfiguration2.sendAsyncHandler.serviceActivator"),
            equalTo(Boolean.TRUE));
    this.roleController.startLifecyclesInRole("foo");
    assertTrue(this.roleController.allEndpointsRunning("foo"));
    this.roleController.stopLifecyclesInRole("foo");
    assertFalse(this.roleController.allEndpointsRunning("foo"));
    assertTrue(this.roleController.noEndpointsRunning("foo"));

    @SuppressWarnings("unchecked")
    MultiValueMap<String, SmartLifecycle> lifecycles = TestUtils.getPropertyValue(this.roleController,
            "lifecycles", MultiValueMap.class);
    assertEquals(2, lifecycles.size());
    assertEquals(2, lifecycles.get("foo").size());
    assertEquals(1, lifecycles.get("bar").size());
    assertFalse(this.serviceActivatorEndpoint.isRunning());
    assertFalse(this.sendAsyncHandler.isRunning());
    assertEquals(2, lifecycles.size());
    assertEquals(2, lifecycles.get("foo").size());
}

From source file:org.springframework.social.oauth1.SigningSupport.java

/**
 * Builds the authorization header./*ww w .  j a  va2  s.co  m*/
 * The elements in additionalParameters are expected to not be encoded.
 */
public String buildAuthorizationHeaderValue(HttpMethod method, URI targetUrl,
        Map<String, String> oauthParameters, MultiValueMap<String, String> additionalParameters,
        String consumerSecret, String tokenSecret) {
    StringBuilder header = new StringBuilder();
    header.append("OAuth ");
    for (Entry<String, String> entry : oauthParameters.entrySet()) {
        header.append(oauthEncode(entry.getKey())).append("=\"").append(oauthEncode(entry.getValue()))
                .append("\", ");
    }
    MultiValueMap<String, String> collectedParameters = new LinkedMultiValueMap<String, String>(
            (int) ((oauthParameters.size() + additionalParameters.size()) / .75 + 1));
    collectedParameters.setAll(oauthParameters);
    collectedParameters.putAll(additionalParameters);
    String baseString = buildBaseString(method, getBaseStringUri(targetUrl), collectedParameters);
    String signature = calculateSignature(baseString, consumerSecret, tokenSecret);
    header.append(oauthEncode("oauth_signature")).append("=\"").append(oauthEncode(signature)).append("\"");
    return header.toString();
}