public static void saveMapB( final File file, final Map<String, byte[]> props, final String comment) { HashMap<String, String> m = new HashMap<String, String>(); for (Map.Entry<String, byte[]> e : props.entrySet()) m.put(e.getKey(), UTF8.String(e.getValue())); saveMap(file, m, comment); }
/** * main - writes some data and checks the tables size (with time measureing) * * @param args */ public static void main(final String[] args) { // open a file, add one entry and exit final File f = new File(args[0]); if (f.exists()) FileUtils.deletedelete(f); try { final Records t = new Records(f, 8); final byte[] b = new byte[8]; t.add("01234567".getBytes(), 0); t.add("ABCDEFGH".getBytes(), 0); t.add("abcdefgh".getBytes(), 0); t.add("--------".getBytes(), 0); t.add("********".getBytes(), 0); for (int i = 0; i < 1000; i++) t.add("++++++++".getBytes(), 0); t.add("=======0".getBytes(), 0); t.add("=======1".getBytes(), 0); t.add("=======2".getBytes(), 0); t.cleanLast(b, 0); System.out.println(UTF8.String(b)); t.cleanLast(b, 0); // t.clean(2, b, 0); System.out.println(UTF8.String(b)); t.get(1, b, 0); System.out.println(UTF8.String(b)); t.put(1, "AbCdEfGh".getBytes(), 0); t.get(1, b, 0); System.out.println(UTF8.String(b)); t.get(3, b, 0); System.out.println(UTF8.String(b)); t.get(4, b, 0); System.out.println(UTF8.String(b)); System.out.println("size = " + t.size()); // t.clean(t.size() - 2); t.cleanLast(); final long start = System.currentTimeMillis(); long c = 0; for (int i = 0; i < 100000; i++) { c = t.size(); } System.out.println( "size() needs " + ((System.currentTimeMillis() - start) / 100) + " nanoseconds"); System.out.println("size = " + c); t.close(); } catch (final IOException e) { ConcurrentLog.logException(e); } }
@Override public Document[] parse( final DigestURL location, final String mimeType, final String charset, final VocabularyScraper scraper, final int timezoneOffset, final InputStream source) throws Parser.Failure, InterruptedException { byte[] b = null; try { b = FileUtils.read(source); } catch (final IOException e1) { throw new Parser.Failure(e1.toString(), location); } final BDecoder bd = new BDecoder(b); final BObject bo = bd.parse(); if (bo == null) throw new Parser.Failure("BDecoder.parse returned null", location); if (bo.getType() != BType.dictionary) throw new Parser.Failure("BDecoder object is not a dictionary", location); final Map<String, BObject> map = bo.getMap(); final BObject commento = map.get("comment"); final String comment = (commento == null) ? "" : UTF8.String(commento.getString()); // Date creation = new Date(map.get("creation date").getInteger()); final BObject infoo = map.get("info"); final StringBuilder filenames = new StringBuilder(80); String title = ""; if (infoo != null) { final Map<String, BObject> info = infoo.getMap(); final BObject fileso = info.get("files"); if (fileso != null) { final List<BObject> filelist = fileso.getList(); for (final BObject fo : filelist) { final BObject patho = fo.getMap().get("path"); if (patho != null) { final List<BObject> l = patho.getList(); // one file may have several names for (final BObject fl : l) { filenames.append(fl.toString()).append(" "); } } } } final BObject nameo = info.get("name"); if (nameo != null) title = UTF8.String(nameo.getString()); } if (title == null || title.isEmpty()) title = MultiProtocolURL.unescape(location.getFileName()); return new Document[] { new Document( location, mimeType, charset, this, null, null, singleList(title), // title comment, // author location.getHost(), null, null, 0.0d, 0.0d, filenames.toString(), null, null, null, false, new Date()) }; }
/** * delete files and directories if a directory is not empty, delete also everything inside because * deletion sometimes fails on windows, there is also a windows exec included * * @param path */ public static void deletedelete(final File path) { if (path == null || !path.exists()) { return; } // empty the directory first if (path.isDirectory()) { final String[] list = path.list(); if (list != null) { for (final String s : list) { deletedelete(new File(path, s)); } } } if (path.exists()) path.delete(); /* int c = 0; while ( c++ < 20 ) { if ( !path.exists() ) { break; } if ( path.delete() ) { break; } // some OS may be slow when giving up file pointer //System.runFinalization(); //System.gc(); try { Thread.sleep(200); } catch (final InterruptedException e ) { break; } } */ if (path.exists()) { path.deleteOnExit(); String p = ""; try { p = path.getCanonicalPath(); } catch (final IOException e1) { ConcurrentLog.logException(e1); } if (System.getProperties().getProperty("os.name", "").toLowerCase().startsWith("windows")) { // deleting files on windows sometimes does not work with java try { final String command = "cmd /C del /F /Q \"" + p + "\""; final Process r = Runtime.getRuntime().exec(command); if (r == null) { ConcurrentLog.severe("FileUtils", "cannot execute command: " + command); } else { final byte[] response = read(r.getInputStream()); ConcurrentLog.info("FileUtils", "deletedelete: " + UTF8.String(response)); } } catch (final IOException e) { ConcurrentLog.logException(e); } } if (path.exists()) { ConcurrentLog.severe("FileUtils", "cannot delete file " + p); } } }
private static final void sendRespondError( final HashMap<String, Object> conProp, final OutputStream respond, final int errorcase, final int httpStatusCode, String httpStatusText, final String detailedErrorMsgText, final Object detailedErrorMsgFile, final serverObjects detailedErrorMsgValues, final Throwable stackTrace, ResponseHeader header) throws IOException { FileInputStream fis = null; ByteArrayOutputStream o = null; try { // setting the proper http status message String httpVersion = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HTTP_VER); if (httpVersion == null) httpVersion = "HTTP/1.1"; if ((httpStatusText == null) || (httpStatusText.length() == 0)) { // http1_1 includes http1_0 messages if (HeaderFramework.http1_1.containsKey(Integer.toString(httpStatusCode))) httpStatusText = HeaderFramework.http1_1.get(Integer.toString(httpStatusCode)); else httpStatusText = "Unknown"; } // generating the desired request url String host = (String) conProp.get(HeaderFramework.CONNECTION_PROP_HOST); String path = (String) conProp.get(HeaderFramework.CONNECTION_PROP_PATH); if (path == null) path = "/"; final String args = (String) conProp.get(HeaderFramework.CONNECTION_PROP_ARGS); final String method = (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD); final int port = Domains.stripToPort(host); host = Domains.stripToHostName(host); String urlString; try { urlString = (new DigestURL( (method.equals(HeaderFramework.METHOD_CONNECT) ? "https" : "http"), host, port, (args == null) ? path : path + "?" + args)) .toString(); } catch (final MalformedURLException e) { urlString = "invalid URL"; } // set rewrite values final serverObjects tp = new serverObjects(); String clientIP = (String) conProp.get(HeaderFramework.CONNECTION_PROP_CLIENTIP); if (clientIP == null) clientIP = Domains.LOCALHOST; tp.put("peerName", (switchboard.peers == null) ? "" : switchboard.peers.myName()); tp.put("errorMessageType", Integer.toString(errorcase)); tp.put("httpStatus", Integer.toString(httpStatusCode) + " " + httpStatusText); tp.put("requestMethod", (String) conProp.get(HeaderFramework.CONNECTION_PROP_METHOD)); tp.put("requestURL", urlString); switch (errorcase) { case ERRORCASE_FILE: tp.put( "errorMessageType_file", (detailedErrorMsgFile == null) ? "" : detailedErrorMsgFile.toString()); if ((detailedErrorMsgValues != null) && !detailedErrorMsgValues.isEmpty()) { // rewriting the value-names and add the proper name prefix: for (final Entry<String, String> entry : detailedErrorMsgValues.entrySet()) { tp.put("errorMessageType_" + entry.getKey(), entry.getValue()); } } break; case ERRORCASE_MESSAGE: default: tp.put( "errorMessageType_detailedErrorMsg", (detailedErrorMsgText == null) ? "" : detailedErrorMsgText.replaceAll("\n", "<br />")); break; } // building the stacktrace if (stackTrace != null) { tp.put("printStackTrace", "1"); final ByteBuffer errorMsg = new ByteBuffer(100); final PrintStream printStream = new PrintStream(errorMsg); stackTrace.printStackTrace(printStream); tp.put("printStackTrace_exception", stackTrace.toString()); tp.put("printStackTrace_stacktrace", UTF8.String(errorMsg.getBytes())); printStream.close(); } else { tp.put("printStackTrace", "0"); } // Generated Tue, 23 Aug 2005 11:19:14 GMT by brain.wg (squid/2.5.STABLE3) // adding some system information final String systemDate = HeaderFramework.formatRFC1123(new Date()); tp.put("date", systemDate); // rewrite the file final File htRootPath = new File( switchboard.getAppPath(), switchboard.getConfig( SwitchboardConstants.HTROOT_PATH, SwitchboardConstants.HTROOT_PATH_DEFAULT)); TemplateEngine.writeTemplate( "/proxymsg/error.html", fis = new FileInputStream(new File(htRootPath, "/proxymsg/error.html")), o = new ByteArrayOutputStream(512), tp); final byte[] result = o.toByteArray(); o.close(); o = null; if (header == null) header = new ResponseHeader(httpStatusCode); header.put( HeaderFramework.CONNECTION_PROP_PROXY_RESPOND_STATUS, Integer.toString(httpStatusCode)); header.put(HeaderFramework.DATE, systemDate); header.put(HeaderFramework.CONTENT_TYPE, "text/html"); header.put(HeaderFramework.CONTENT_LENGTH, Integer.toString(result.length)); header.put(HeaderFramework.PRAGMA, "no-cache, no-store"); sendRespondHeader(conProp, respond, httpVersion, httpStatusCode, httpStatusText, header); if (!method.equals(HeaderFramework.METHOD_HEAD)) { // write the array to the client FileUtils.copy(result, respond); } respond.flush(); } finally { if (fis != null) try { fis.close(); } catch (final Exception e) { ConcurrentLog.logException(e); } if (o != null) try { o.close(); } catch (final Exception e) { ConcurrentLog.logException(e); } } }