Example usage for org.apache.commons.fileupload FileItemIterator next

List of usage examples for org.apache.commons.fileupload FileItemIterator next

Introduction

In this page you can find the example usage for org.apache.commons.fileupload FileItemIterator next.

Prototype

FileItemStream next() throws FileUploadException, IOException;

Source Link

Document

Returns the next available FileItemStream .

Usage

From source file:org.camunda.bpm.engine.rest.mapper.MultipartPayloadProvider.java

protected void parseRequest(MultipartFormData multipartFormData, FileUpload fileUpload,
        RestMultipartRequestContext requestContext) {
    try {//ww  w. jav  a2s  . co m
        FileItemIterator itemIterator = fileUpload.getItemIterator(requestContext);
        while (itemIterator.hasNext()) {
            FileItemStream stream = itemIterator.next();
            multipartFormData.addPart(new FormPart(stream));
        }
    } catch (Exception e) {
        throw new RestException(Status.BAD_REQUEST, e, "multipart/form-data cannot be processed");

    }
}

From source file:org.cellprofiler.subimager.ImageWriterHandler.java

public void handle(HttpExchange exchange) throws IOException {
    if (!exchange.getRequestMethod().equals("POST")) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_METHOD,
                "<html><body>writeimage only accepts HTTP post</body></html>");
        return;//  ww w .j av a 2  s .  com
    }
    final String contentType = exchange.getRequestHeaders().getFirst("Content-Type");
    if (contentType == null) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                "<html><body>No Content-type request header</body></html>");
        return;
    }
    if (!contentType.startsWith(MULTIPART_FORM_DATA)) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                "<html><body>Content type must be " + MULTIPART_FORM_DATA + ".</body></html>");
        return;
    }
    int idx = contentType.indexOf(BOUNDARY_EQUALS, MULTIPART_FORM_DATA.length());
    if (idx == -1) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                "<html><body>Did not find boundary identifier in multipart/form-data content type.</body></html>");
        return;
    }
    final String contentEncoding = exchange.getRequestHeaders().getFirst("Content-Encoding");
    String contentLengthString = exchange.getRequestHeaders().getFirst("Content-Length");
    if (contentLengthString == null) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                "<html><body>No Content-Length request header</body></html>");
        return;
    }
    try {
        Integer.parseInt(contentLengthString);
    } catch (NumberFormatException e) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST, String
                .format("<html><body>Content length was not a number: %s</body></html>", contentLengthString));
        return;
    }
    final int contentLength = Integer.parseInt(contentLengthString);
    final InputStream requestBodyStream = exchange.getRequestBody();
    FileUpload upload = new FileUpload();
    FileItemIterator fileItemIterator;
    String omeXML = null;
    URI uri = null;
    int index = 0;
    NDImage ndimage = null;
    String compression = DEFAULT_COMPRESSION;
    try {
        fileItemIterator = upload.getItemIterator(new RequestContext() {

            public String getCharacterEncoding() {
                return contentEncoding;
            }

            public String getContentType() {
                return contentType;
            }

            public int getContentLength() {
                return contentLength;
            }

            public InputStream getInputStream() throws IOException {
                return requestBodyStream;
            }
        });
        while (fileItemIterator.hasNext()) {
            FileItemStream fis = fileItemIterator.next();
            String name = fis.getFieldName();

            if (name.equals(NAME_IMAGE)) {
                String imageContentType = fis.getContentType();
                if (imageContentType == null) {
                    reportError(exchange, HttpURLConnection.HTTP_UNSUPPORTED_TYPE,
                            "<html><body>Image form-data field must have a content type.</body></html>");
                    return;
                }
                try {
                    InputStream is = SubimagerUtils.getInputStream(exchange, fis);
                    if (is == null)
                        return;
                    ndimage = NDImage.decode(is);
                } catch (MalformedStreamException e) {
                    reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                            "<html><body>Failed to read body for part, " + name + ".</body></html>");
                } catch (IOException e) {
                    reportError(exchange, HttpURLConnection.HTTP_INTERNAL_ERROR,
                            "<html><body>Failed to read multipart body data</body></html>");
                    return;
                } catch (org.cellprofiler.subimager.NDImage.FormatException e) {
                    reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                            "<html><body>Image data was not in correct format: " + e.getMessage()
                                    + "</body></html>");
                    return;
                }
            } else {
                String partDataString = SubimagerUtils.readFully(exchange, fis);
                if (partDataString == null)
                    return;
                if (name.equals(NAME_INDEX)) {
                    try {
                        index = Integer.parseInt(partDataString);
                    } catch (NumberFormatException e) {
                        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                                "<html><body>Index form-data field must be a number: " + partDataString
                                        + ".</body></html>");
                        return;
                    }
                } else if (name.equals(NAME_OMEXML)) {
                    omeXML = partDataString;
                } else if (name.equals(NAME_URL)) {
                    try {
                        uri = new URI(partDataString);
                    } catch (URISyntaxException e) {
                        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                                "<html><body>Improperly formatted URL: " + partDataString + ".</body></html>");
                        return;
                    }
                } else if (name.equals(NAME_COMPRESSION)) {
                    compression = partDataString;
                }
            }
        }
        if (ndimage == null) {
            reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                    "<html><body>Request did not have an image part</body></html>");
            return;
        }
        if (uri == null) {
            reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                    "<html><body>Request did not have a URL part</body></html>");
            return;
        }
        if (omeXML == null) {
            reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST,
                    "<html><body>Request did not have an omexml part</body></html>");
            return;
        }
        writeImage(exchange, ndimage, uri, omeXML, index, compression);
    } catch (FileUploadException e) {
        reportError(exchange, HttpURLConnection.HTTP_BAD_REQUEST, String
                .format("<html><body>Parsing error in multipart message: %s</body></html>", e.getMessage()));
        return;
    }
}

From source file:org.cellprofiler.subimager.TestImageJHandlerBase.java

protected Response post(Request request, Map<String, NDImage> ndimagesIn, Map<String, NDImage> ndimagesOut) {
    StringWriter writer = new StringWriter();
    try {//from w  ww. ja  va 2  s. c o  m
        Marshaller marshaller = new Marshaller(writer);
        marshaller.marshal(request);
    } catch (MarshalException e2) {
        throw new AssertionError(e2.getMessage());
    } catch (ValidationException e2) {
        throw new AssertionError(e2.getMessage());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        throw new AssertionError(e.getMessage());
    }
    String xml = writer.toString();

    ArrayList<Part> parts = new ArrayList<Part>();
    parts.add(new StringPart(ImageJHandler.NAME_REQUEST, xml));
    String sURL = String.format("http://localhost:%d/imagej", getPort());
    final PostMethod post = new PostMethod(sURL);
    for (Map.Entry<String, NDImage> entry : ndimagesIn.entrySet()) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            entry.getValue().encode(bos);
        } catch (IOException e1) {
            e1.printStackTrace();
            throw new AssertionError("Failed to encode image: " + e1.getMessage());
        }
        ByteArrayPartSource src = new ByteArrayPartSource(entry.getKey(), bos.toByteArray());
        FilePart filePart = new FilePart(entry.getKey(), src, "application/octet-stream", "binary");
        parts.add(filePart);
    }
    post.setRequestEntity(new MultipartRequestEntity(parts.toArray(new Part[0]), post.getParams()));
    HttpClient client = new HttpClient();
    int responseCode;
    try {
        responseCode = client.executeMethod(post);
    } catch (HttpException e) {
        throw new AssertionError(e.getMessage());
    } catch (IOException e) {
        throw new AssertionError(e.getMessage());
    }
    assertEquals(HttpURLConnection.HTTP_OK, responseCode);
    final String contentType = post.getResponseHeader("Content-Type").getValue();
    assertTrue(contentType.startsWith("multipart/form-data"));
    final long contentLength = post.getResponseContentLength();
    try {
        final InputStream responseBodyStream = post.getResponseBodyAsStream();
        FileUpload upload = new FileUpload();
        FileItemIterator fileItemIterator;
        fileItemIterator = upload.getItemIterator(new RequestContext() {

            public String getCharacterEncoding() {
                if (post.getResponseHeader("Content-Encoding") == null)
                    return null;
                return post.getResponseHeader("Content-Encoding").getValue();
            }

            public String getContentType() {
                return contentType;
            }

            public int getContentLength() {
                return (int) contentLength;
            }

            InputStream tmpStream = null;

            public InputStream getInputStream() throws IOException {
                if (tmpStream == null) {
                    byte[] buf = new byte[(int) contentLength];
                    int offset = 0;
                    while (offset < buf.length) {
                        offset += responseBodyStream.read(buf, offset, buf.length - offset);
                    }
                    tmpStream = new ByteArrayInputStream(buf);
                }
                return tmpStream;
            }
        });
        assertTrue(fileItemIterator.hasNext());
        FileItemStream fis = fileItemIterator.next();
        assertEquals(fis.getFieldName(), ImageJHandler.NAME_RESPONSE);
        Reader rdr = new InputStreamReader(fis.openStream(), "utf-8");
        Unmarshaller unmarshaller = new Unmarshaller(Response.class);
        unmarshaller.setProperty(XMLProperties.LENIENT_INTEGER_VALIDATION, "true");
        Object oresponse = unmarshaller.unmarshal(rdr);
        assertTrue(oresponse instanceof Response);
        Response response = (Response) oresponse;
        while (fileItemIterator.hasNext()) {
            fis = fileItemIterator.next();
            String name = fis.getFieldName();
            NDImage ndimage = NDImage.decode(fis.openStream());
            ndimagesOut.put(name, ndimage);
        }
        return response;
    } catch (IOException e) {
        e.printStackTrace();
        throw new AssertionError(e.getMessage());
    } catch (FileUploadException e) {
        e.printStackTrace();
        throw new AssertionError(e.getMessage());
    } catch (MarshalException e) {
        e.printStackTrace();
        throw new AssertionError(e.getMessage());
    } catch (ValidationException e) {
        e.printStackTrace();
        throw new AssertionError(e.getMessage());
    } catch (FormatException e) {
        e.printStackTrace();
        throw new AssertionError(e.getMessage());
    }

}

From source file:org.celstec.arlearn2.upload.BlobStoreServlet.java

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    try {/*from   w  w  w  .  java2  s  .c om*/
        Long runId = null;
        String account = null;
        ServletFileUpload upload = new ServletFileUpload();
        res.setContentType("text/plain");

        FileItemIterator iterator = upload.getItemIterator(req);

        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            InputStream stream = item.openStream();

            if (item.isFormField()) {
                if ("runId".equals(item.getFieldName())) {
                    runId = Long.parseLong(Streams.asString(stream));
                }
                if ("account".equals(item.getFieldName())) {
                    account = Streams.asString(stream);
                }
            } else {
                BlobKey blobkey = storeBlob(item.getContentType(), item.getName(), stream);
                if (blobkey != null) {
                    System.out.println(blobkey);
                    // File exists
                    BlobKey oldkey = FilePathManager.getBlobKey(account, runId, item.getName());
                    if (oldkey != null) {
                        FilePathManager.delete(oldkey);
                        blobstoreService.delete(oldkey);
                    }
                    FilePathManager.addFile(runId, account, item.getName(), blobkey);

                } else {
                    blobkey.toString();
                }

            }
        }
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.celstec.arlearn2.upload.BlobStoreServletIncremental.java

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    try {/*from w w w .j av  a  2s . com*/
        Long runId = null;
        String account = null;
        String serverPath = null;
        boolean last = false;
        ServletFileUpload upload = new ServletFileUpload();
        res.setContentType("text/plain");

        FileItemIterator iterator = upload.getItemIterator(req);
        System.out.println("before while");
        while (iterator.hasNext()) {
            System.out.println("in while");
            FileItemStream item = iterator.next();
            InputStream stream = item.openStream();

            if (item.isFormField()) {
                if ("runId".equals(item.getFieldName())) {
                    runId = Long.parseLong(Streams.asString(stream));
                    System.out.println("runid is " + runId);
                }

                if ("account".equals(item.getFieldName())) {
                    account = Streams.asString(stream);
                    System.out.println("account is " + account);
                }
                if ("last".equals(item.getFieldName())) {
                    last = Boolean.parseBoolean(Streams.asString(stream));
                    System.out.println("last is " + last);
                }
                if ("serverPath".equals(item.getFieldName())) {
                    serverPath = Streams.asString(stream);
                    System.out.println("serverPath is " + serverPath);
                }

            } else {
                log.warning("Got an uploaded file: " + item.getFieldName() + ", name = " + item.getName());
                AppEngineFile file = storeBlob(item.getContentType(), item.getName(), stream, last, serverPath);

                BlobKey blobkey = fileService.getBlobKey(file);
                if (blobkey != null) {
                    // File exists
                    BlobKey oldkey = FilePathManager.getBlobKey(account, runId, item.getName());
                    if (oldkey != null) {
                        FilePathManager.delete(oldkey);
                        blobstoreService.delete(oldkey);
                    }
                    FilePathManager.addFile(runId, account, item.getName(), blobkey);
                    System.out.println(blobkey.toString());
                }
                res.getWriter().write(file.getFullPath());
                //               else {
                //                  blobkey.toString();
                //               }

            }
        }
    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.celstec.arlearn2.upload.UploadGameServlet.java

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    long gameId = 0l;
    String auth = null;//from   w  ww .  jav a 2 s . c o m
    try {
        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iter = upload.getItemIterator(req);

        String json = "";
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            InputStream stream = item.openStream();
            if (item.isFormField()) {
                String value = Streams.asString(stream);
                if ("gameId".equals(name))
                    gameId = Long.parseLong(value);
                if ("auth".equals(name))
                    auth = value;

            } else {
                json = Streams.asString(stream);

            }
        }

        res.setContentType("text/plain");
        JSONObject jObject = new JSONObject(json);
        Object deserialized = JsonBeanDeserializer.deserialize(json);

        if (deserialized instanceof GamePackage && ((GamePackage) deserialized).getGame() != null)
            unpackGame((GamePackage) deserialized, req, auth);
        if (deserialized instanceof RunPackage && ((RunPackage) deserialized).getRun() != null)
            unpackRun((RunPackage) deserialized, req, gameId, auth);

    } catch (Exception ex) {
        throw new ServletException(ex);
    }
}

From source file:org.codelabor.system.file.web.servlet.FileUploadStreamServlet.java

@Override
protected void upload(HttpServletRequest request, HttpServletResponse response) throws Exception {
    WebApplicationContext ctx = WebApplicationContextUtils
            .getRequiredWebApplicationContext(this.getServletContext());
    FileManager fileManager = (FileManager) ctx.getBean("fileManager");

    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    Map<String, Object> paramMap = RequestUtils.getParameterMap(request);
    if (logger.isDebugEnabled()) {
        logger.debug(paramMap.toString());
    }/*from   w ww  .j  a  v  a  2s .c om*/

    String mapId = (String) paramMap.get("mapId");
    RepositoryType acceptedRepositoryType = repositoryType;
    String requestedRepositoryType = (String) paramMap.get("repositoryType");
    if (StringUtils.isNotEmpty(requestedRepositoryType)) {
        acceptedRepositoryType = RepositoryType.valueOf(requestedRepositoryType);
    }

    if (isMultipart) {
        ServletFileUpload upload = new ServletFileUpload();
        upload.setFileSizeMax(fileSizeMax);
        upload.setSizeMax(requestSizeMax);
        upload.setHeaderEncoding(characterEncoding);
        upload.setProgressListener(new FileUploadProgressListener());
        try {
            FileItemIterator iter = upload.getItemIterator(request);

            while (iter.hasNext()) {
                FileItemStream fileItemSteam = iter.next();
                if (logger.isDebugEnabled()) {
                    logger.debug(fileItemSteam.toString());
                }
                FileDTO fileDTO = null;
                if (fileItemSteam.isFormField()) {
                    paramMap.put(fileItemSteam.getFieldName(),
                            Streams.asString(fileItemSteam.openStream(), characterEncoding));
                } else {
                    if (fileItemSteam.getName() == null || fileItemSteam.getName().length() == 0)
                        continue;

                    // set DTO
                    fileDTO = new FileDTO();
                    fileDTO.setMapId(mapId);
                    fileDTO.setRealFilename(FilenameUtils.getName(fileItemSteam.getName()));
                    if (acceptedRepositoryType == RepositoryType.FILE_SYSTEM) {
                        fileDTO.setUniqueFilename(getUniqueFilename());
                    }
                    fileDTO.setContentType(fileItemSteam.getContentType());
                    fileDTO.setRepositoryPath(realRepositoryPath);
                    if (logger.isDebugEnabled()) {
                        logger.debug(fileDTO.toString());
                    }
                    UploadUtils.processFile(acceptedRepositoryType, fileItemSteam.openStream(), fileDTO);
                }
                if (fileDTO != null)
                    fileManager.insertFile(fileDTO);
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    } else {
        paramMap = RequestUtils.getParameterMap(request);
    }
    try {
        processParameters(paramMap);
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e.getMessage());
    }
    dispatch(request, response, forwardPathUpload);

}

From source file:org.collectionspace.chain.controller.WebUIRequest.java

private void initRequest(UIUmbrella umbrella, HttpServletRequest request, HttpServletResponse response,
        List<String> p) throws IOException, UIException {
    this.request = request;
    this.response = response;
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    if (isMultipart) {
        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload();

        // Parse the request
        FileItemIterator iter;
        try {//from w ww  .  j a v  a 2s . c  o  m
            iter = upload.getItemIterator(request);
            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                String name = item.getFieldName();
                //InputStream stream = item.openStream();
                if (item.isFormField()) {
                    //   System.out.println("Form field " + name + " with value "
                    //    + Streams.asString(stream) + " detected.");
                } else {
                    //   System.out.println("File field " + name + " with file name "
                    //    + item.getName() + " detected.");
                    // Process the input stream
                    contentHeaders = item.getHeaders();
                    uploadName = item.getName();

                    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
                    if (item != null) {
                        InputStream stream = item.openStream();
                        IOUtils.copy(stream, byteOut);
                        new TeeInputStream(stream, byteOut);

                    }
                    bytebody = byteOut.toByteArray();
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else {
        body = IOUtils.toString(request.getInputStream(), "UTF-8");
    }

    this.ppath = p.toArray(new String[0]);
    if (!(umbrella instanceof WebUIUmbrella))
        throw new UIException("Bad umbrella");
    this.umbrella = (WebUIUmbrella) umbrella;
    session = calculateSessionId();

}

From source file:org.csi.yucca.storage.datamanagementapi.service.MetadataService.java

@POST
@Path("/{tenant}")
@Produces(MediaType.APPLICATION_JSON)//from w w w  .j ava  2 s.co m
public String createMetadata(@PathParam("tenant") String tenant, @Context HttpServletRequest request)
        throws NumberFormatException, UnknownHostException {
    log.debug("[MetadataService::createMetadata] - START");

    String datasetMetadata = null;
    String encoding = null;
    String formatType = null;
    String csvSeparator = null;
    boolean skipFirstRow = false;
    String csvData = null;
    String fileName = null;

    try {
        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            if (IMPORT_BULKDATASET_METADATA_REQ_KEY.equals(item.getFieldName()))
                datasetMetadata = read(item.openStream());
            else if (IMPORT_BULKDATASET_ENCODING_REQ_KEY.equals(item.getFieldName()))
                encoding = read(item.openStream());
            else if (IMPORT_BULKDATASET_FORMAT_TYPE_REQ_KEY.equals(item.getFieldName()))
                formatType = read(item.openStream());
            else if (IMPORT_BULKDATASET_CSV_SEP_REQ_KEY.equals(item.getFieldName()))
                csvSeparator = read(item.openStream());
            else if (IMPORT_BULKDATASET_CSV_SKIP_FIRS_ROW_REQ_KEY.equals(item.getFieldName()))
                skipFirstRow = new Boolean(read(item.openStream()));
            else if (IMPORT_BULKDATASET_FILE_REQ_KEY.equals(item.getFieldName())) {
                csvData = readFileRows(item.openStream(), encoding);
                fileName = item.getName();
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    log.debug("[MetadataService::createMetadata] - encoding: " + encoding + ", formatType: " + formatType
            + ", csvSeparator: " + csvSeparator);
    Metadata metadata = Metadata.fromJson(datasetMetadata);
    if (fileName != null)
        metadata.getInfo().addFilename(fileName);

    CreateDatasetResponse createDatasetResponse = new CreateDatasetResponse();

    metadata.setDatasetVersion(1);
    if (metadata.getConfigData() == null)
        metadata.setConfigData(new ConfigData());
    metadata.getConfigData().setType(Metadata.CONFIG_DATA_TYPE_DATASET);
    metadata.getConfigData().setSubtype(Metadata.CONFIG_DATA_SUBTYPE_BULK_DATASET);
    metadata.getConfigData().setCurrent(1);
    if (metadata.getInfo() == null)
        metadata.setInfo(new Info());

    if (metadata.getInfo().getFields() != null) {
        for (Field field : metadata.getInfo().getFields()) {
            field.setFieldName(Util.cleanStringCamelCase(field.getFieldName()));
            if (field != null && field.getDataType() == null)
                field.setDataType("string");
        }
    }
    metadata.getInfo().setRegistrationDate(new Date());
    try {

        List<SDPBulkInsertException> checkFileToWriteErrors = null;
        MongoDBDataUpload dataUpload = new MongoDBDataUpload();
        if (csvData != null) {
            checkFileToWriteErrors = dataUpload.checkFileToWrite(csvData, csvSeparator, metadata, skipFirstRow);
        }

        if (checkFileToWriteErrors != null && checkFileToWriteErrors.size() > 0) {
            for (SDPBulkInsertException error : checkFileToWriteErrors) {
                createDatasetResponse.addErrorMessage(new ErrorMessage(error.getErrorCode(),
                        error.getErrorMessage(), error.getErrorDetail()));
            }
        } else {
            MongoClient mongo = MongoSingleton.getMongoClient();
            String supportDb = Config.getInstance().getDbSupport();
            String supportDatasetCollection = Config.getInstance().getCollectionSupportDataset();

            MongoDBMetadataDAO metadataDAO = new MongoDBMetadataDAO(mongo, supportDb, supportDatasetCollection);

            String supportApiCollection = Config.getInstance().getCollectionSupportApi();
            MongoDBApiDAO apiDAO = new MongoDBApiDAO(mongo, supportDb, supportApiCollection);

            BasicDBObject searchTenantQuery = new BasicDBObject();
            searchTenantQuery.put("tenantCode", tenant);
            DBCollection tenantCollection = mongo.getDB(supportDb).getCollection("tenant");
            DBObject tenantData = tenantCollection.find(searchTenantQuery).one();
            Long idTenant = ((Number) tenantData.get("idTenant")).longValue();

            int maxDatasetNum = ((Number) tenantData.get("maxDatasetNum")).intValue();

            if (maxDatasetNum > 0) {

                int numCurrentDataset = metadataDAO.countAllMetadata(tenant, true);
                log.info("[MetadataService::createMetadata] -  tenant=" + tenant + "     maxDatasetNum="
                        + maxDatasetNum + "        numCurrentDataset=" + numCurrentDataset);
                //TODO
                if (numCurrentDataset >= maxDatasetNum)
                    throw new MaxDatasetNumException("too many dataset");

            }

            metadata.getConfigData().setIdTenant(idTenant);

            // binary metadata: create a metadata record specific for attachment
            Metadata binaryMetadata = null;
            if (metadata.getInfo().getFields() != null) {
                for (Field field : metadata.getInfo().getFields()) {
                    if (field.getDataType().equals("binary")) {
                        binaryMetadata = Metadata.createBinaryMetadata(metadata);
                        break;
                    }
                }
            }
            if (binaryMetadata != null) {
                Metadata binaryMetadataCreated = metadataDAO.createMetadata(binaryMetadata, null);
                metadata.getInfo().setBinaryDatasetVersion(binaryMetadataCreated.getDatasetVersion());
                metadata.getInfo().setBinaryIdDataset(binaryMetadataCreated.getIdDataset());
            }

            List<Tenantsharing> lista = new ArrayList<Tenantsharing>();
            if (metadata.getInfo().getTenantssharing() != null) {
                Set<String> tenantSet = new TreeSet<String>();
                for (Tenantsharing tenantInList : metadata.getInfo().getTenantssharing().getTenantsharing()) {
                    if (!tenantInList.getTenantCode().equals(metadata.getConfigData().getTenantCode())
                            && !tenantSet.contains(metadata.getConfigData().getTenantCode())
                            && tenantInList.getIsOwner() != 1) {
                        lista.add(tenantInList);
                        tenantSet.add(tenantInList.getTenantCode());
                    }
                }
            }
            Tenantsharing owner = new Tenantsharing();
            owner.setIdTenant(metadata.getConfigData().getIdTenant());
            owner.setIsOwner(1);
            owner.setTenantCode(metadata.getConfigData().getTenantCode());
            owner.setTenantName(metadata.getConfigData().getTenantCode());
            // owner.setTenantDescription(metadata.getConfigData().get);

            lista.add(owner);
            Tenantsharing arrayTenant[] = new Tenantsharing[lista.size()];
            arrayTenant = lista.toArray(arrayTenant);
            if (metadata.getInfo().getTenantssharing() == null) {
                Tenantssharing tenantssharing = new Tenantssharing();
                metadata.getInfo().setTenantssharing(tenantssharing);
            }
            metadata.getInfo().getTenantssharing().setTenantsharing(arrayTenant);

            // opendata
            if (!"public".equals(metadata.getInfo().getVisibility())) {
                metadata.setOpendata(null);
            }

            Metadata metadataCreated = metadataDAO.createMetadata(metadata, null);

            MyApi api = MyApi.createFromMetadataDataset(metadataCreated);
            api.getConfigData().setType(Metadata.CONFIG_DATA_TYPE_API);
            api.getConfigData().setSubtype(Metadata.CONFIG_DATA_SUBTYPE_API_MULTI_BULK);

            MyApi apiCreated = apiDAO.createApi(api);

            createDatasetResponse.setMetadata(metadataCreated);
            createDatasetResponse.setApi(apiCreated);

            /*
             * Create api in the store
             */
            String apiName = "";
            try {
                apiName = StoreService.createApiforBulk(metadata, false, datasetMetadata);
            } catch (Exception duplicate) {
                if (duplicate.getMessage().toLowerCase().contains("duplicate")) {
                    try {
                        apiName = StoreService.createApiforBulk(metadata, true, datasetMetadata);
                    } catch (Exception e) {
                        log.error(
                                "[MetadataService::createMetadata] - ERROR to update API in Store for Bulk. Message: "
                                        + duplicate.getMessage());
                    }
                } else {
                    log.error(
                            "[MetadataService::createMetadata] -  ERROR in create or update API in Store for Bulk. Message: "
                                    + duplicate.getMessage());
                }
            }
            try {

                StoreService.publishStore("1.0", apiName, "admin");
                Set<String> tenantSet = new TreeSet<String>();
                if (metadata.getInfo().getTenantssharing() != null) {
                    for (Tenantsharing tenantSh : metadata.getInfo().getTenantssharing().getTenantsharing()) {
                        tenantSet.add(tenantSh.getTenantCode());
                        String appName = "userportal_" + tenantSh.getTenantCode();
                        StoreService.addSubscriptionForTenant(apiName, appName);
                    }
                }
                if (!tenantSet.contains(metadata.getConfigData().getTenantCode())) {
                    String appName = "userportal_" + metadata.getConfigData().getTenantCode();
                    StoreService.addSubscriptionForTenant(apiName, appName);
                }

            } catch (Exception e) {
                log.error("[MetadataService::createMetadata] - ERROR in publish Api in store - message: "
                        + e.getMessage());
            }

            if (csvData != null) {
                try {
                    dataUpload.writeFileToMongo(mongo, "DB_" + tenant, "data", metadataCreated);
                } catch (Exception e) {
                    log.error("[MetadataService::createMetadata] - writeFileToMongo ERROR: " + e.getMessage());
                    createDatasetResponse.addErrorMessage(new ErrorMessage(e));
                    e.printStackTrace();
                }
            }
        }
    } catch (MaxDatasetNumException ex) {
        log.error("[MetadataService::createMetadata] - MaxDatasetNumException ERROR: ", ex);
        createDatasetResponse.addErrorMessage(new ErrorMessage(ex));

    }
    return createDatasetResponse.toJson();
}

From source file:org.csi.yucca.storage.datamanagementapi.service.MetadataService.java

@POST
@Path("/add/{tenant}/{datasetCode}")
@Produces(MediaType.APPLICATION_JSON)//  w  w  w  . j  ava  2 s  . c  om
public String addData(@PathParam("tenant") String tenant, @PathParam("datasetCode") String datasetCode,
        @Context HttpServletRequest request) throws NumberFormatException, UnknownHostException {
    log.debug("[MetadataService::addData] - START");

    String encoding = null;
    String formatType = null;
    String csvSeparator = null;
    boolean skipFirstRow = false;
    String csvData = null;
    String fileName = null;

    try {
        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            if (IMPORT_BULKDATASET_ENCODING_REQ_KEY.equals(item.getFieldName()))
                encoding = read(item.openStream());
            else if (IMPORT_BULKDATASET_FORMAT_TYPE_REQ_KEY.equals(item.getFieldName()))
                formatType = read(item.openStream());
            else if (IMPORT_BULKDATASET_CSV_SEP_REQ_KEY.equals(item.getFieldName()))
                csvSeparator = read(item.openStream());
            else if (IMPORT_BULKDATASET_CSV_SKIP_FIRS_ROW_REQ_KEY.equals(item.getFieldName()))
                skipFirstRow = new Boolean(read(item.openStream()));
            else if (IMPORT_BULKDATASET_FILE_REQ_KEY.equals(item.getFieldName())) {
                csvData = readFileRows(item.openStream(), encoding);
                fileName = item.getName();
            }

        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    log.debug("[MetadataService::addData] - encoding: " + encoding + ", formatType: " + formatType
            + ", csvSeparator: " + csvSeparator);
    MongoClient mongo = MongoSingleton.getMongoClient();
    String supportDb = Config.getInstance().getDbSupport();
    String supportDatasetCollection = Config.getInstance().getCollectionSupportDataset();
    MongoDBMetadataDAO metadataDAO = new MongoDBMetadataDAO(mongo, supportDb, supportDatasetCollection);

    Metadata existingMetadata = metadataDAO.readCurrentMetadataByCode(datasetCode);
    existingMetadata.getInfo().addFilename(fileName);
    metadataDAO.updateMetadata(existingMetadata);

    UpdateDatasetResponse updateDatasetResponse = new UpdateDatasetResponse();

    MongoDBDataUpload dataUpload = new MongoDBDataUpload();

    List<SDPBulkInsertException> checkFileToWriteErrors = dataUpload.checkFileToWrite(csvData, csvSeparator,
            existingMetadata, skipFirstRow);
    if (checkFileToWriteErrors != null && checkFileToWriteErrors.size() > 0) {
        for (SDPBulkInsertException error : checkFileToWriteErrors) {
            updateDatasetResponse.addErrorMessage(
                    new ErrorMessage(error.getErrorCode(), error.getErrorMessage(), error.getErrorDetail()));
        }
    } else {

        try {
            dataUpload.writeFileToMongo(mongo, "DB_" + tenant, "data", existingMetadata);
        } catch (Exception e) {
            log.error("[MetadataService::addData] - writeFileToMongo ERROR: " + e.getMessage());
            updateDatasetResponse.addErrorMessage(new ErrorMessage(e));
            e.printStackTrace();
        }
    }

    return updateDatasetResponse.toJson();
}