/** * Cleans up the given store. * * @param crdf could be a triple or a quad store. * @throws CumulusStoreException in case the cleanup fails. */ public static void clean(final Store crdf) throws CumulusStoreException { crdf.clear(); assertEquals( "Store seems not empty after issuing a delete * command.", 0, numOfRes( crdf.query( crdf instanceof TripleStore ? SELECT_ALL_TRIPLES_PATTERN : SELECT_ALL_QUADS_PATTERN))); }
@Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { long start = System.currentTimeMillis(); ServletContext ctx = getServletContext(); if (req.getCharacterEncoding() == null) req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); String accept = req.getHeader("Accept"); SerializationFormat formatter = Listener.getSerializationFormat(accept); if (formatter == null) { sendError( ctx, req, resp, HttpServletResponse.SC_NOT_ACCEPTABLE, "no known mime type in Accept header"); return; } PrintWriter out_r = resp.getWriter(); String resp_msg = ""; // check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(req); if (!isMultipart) { sendError(ctx, req, resp, HttpServletResponse.SC_NOT_ACCEPTABLE, "no file upload"); return; } // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request try { List<FileItem> items = upload.parseRequest(req); // bulk load options int threads = -1; String format = "nt"; int batchSizeMB = 1; // get store AbstractCassandraRdfHector crdf = (AbstractCassandraRdfHector) ctx.getAttribute(Listener.STORE); crdf.setBatchSize(batchSizeMB); // Process the uploaded items Iterator iter = items.iterator(); String a = ""; String graph = ""; boolean a_exists = false; String file = ""; while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); if (name.equals("g")) { a_exists = true; a = new String(value); // escape if the accept header is not text/plain graph = new String(a); if (formatter.getContentType().equals("text/html")) graph = escapeHtml(a); } } else { String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); // Process a file upload InputStream uploadedStream = item.getInputStream(); // write the inputStream to a FileOutputStream file = "/tmp/upload_bulkload_" + UUID.randomUUID(); OutputStream out = new FileOutputStream(new File(file)); int read = 0; byte[] bytes = new byte[1024]; while ((read = uploadedStream.read(bytes)) != -1) { out.write(bytes, 0, read); } uploadedStream.close(); out.flush(); out.close(); resp_msg += "Bulkload " + fileName + ", size " + sizeInBytes; } } if (!a_exists || a == null || a.isEmpty()) { sendError( ctx, req, resp, HttpServletResponse.SC_BAD_REQUEST, "Please pass also the graph name as 'g' parameter"); } else { if (!a.startsWith("<") || !a.endsWith(">")) { sendError( ctx, req, resp, HttpServletResponse.SC_BAD_REQUEST, "Please pass a resource as the graph name."); return; } // load here // note: if threads==-1, it will be then set to the number of hosts if (crdf.bulkLoad(new File(file), format, threads, Store.encodeKeyspace(a)) == 1) sendError( ctx, req, resp, HttpServletResponse.SC_CONFLICT, "Graph " + graph + " does not exist yet. Please create it before bulk loading."); else { resp_msg = "Graph " + graph + " time " + (System.currentTimeMillis() - start) + "ms"; sendResponse(ctx, req, resp, HttpServletResponse.SC_BAD_REQUEST, resp_msg); _log.info(resp_msg); } } // delete the tmp file new File(file).delete(); out_r.println(resp_msg); out_r.close(); } catch (FileUploadException ex) { ex.printStackTrace(); return; } catch (StoreException ex) { ex.printStackTrace(); return; } return; }