コード例 #1
0
ファイル: WebUtils.java プロジェクト: liuqinggang/neixunutil
  public static String getAddressByIP(String ip) {
    try {
      String js = visitWeb("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=" + ip);
      JsonParser jsonParser = new JsonParser();
      js = js.trim();
      JsonObject jo = jsonParser.parse(js.substring(21, js.length() - 1)).getAsJsonObject();
      String province = "";
      String city = "";
      try {
        // 获取 省、市
        province =
            jo.get("province") == null
                ? ""
                : URLDecoder.decode(jo.get("province").toString(), "UTF-8");
        city = jo.get("city") == null ? "" : URLDecoder.decode(jo.get("city").toString(), "UTF-8");
        // 省为空用国家代替
        if (StringUtils.isEmpty(province)) {
          province =
              jo.get("country") == null
                  ? ""
                  : URLDecoder.decode(jo.get("country").toString(), "UTF-8");
        }

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

      return (province.equals("") || province.equals(city)) ? city : province + " " + city;
    } catch (Exception e) {
      e.printStackTrace();
      return "";
    }
  }
コード例 #2
0
ファイル: RESTReservations.java プロジェクト: mksh/jicofo
  /** {@inheritDoc} */
  public synchronized Result createConference(String creator, String mucRoomName) {
    Conference conference = conferenceMap.get(mucRoomName);
    if (conference == null) {
      // Create new conference
      try {
        ApiResult result = api.createNewConference(creator, mucRoomName);

        if (result.getError() == null) {
          conference = result.getConference();
          conferenceMap.put(mucRoomName, conference);
        } else if (result.getStatusCode() == 409 && result.getError().getConflictId() != null) {
          Number conflictId = result.getError().getConflictId();

          // Conference already exists(check if we have it locally)
          conference = findConferenceForId(conflictId);

          logger.info("Conference '" + mucRoomName + "' already " + "allocated, id: " + conflictId);

          // do GET conflict conference
          if (conference == null) {
            ApiResult getResult = api.getConference(conflictId);
            if (getResult.getConference() != null) {
              conference = getResult.getConference();
              // Fill full room name as it is not transferred
              // over REST API
              conference.setMucRoomName(mucRoomName);

              conferenceMap.put(mucRoomName, conference);
            } else {
              logger.error("API error: " + result);
              return new Result(RESULT_INTERNAL_ERROR, result.getError().getMessage());
            }
          }
        } else {
          // Other error
          logger.error("API error: " + result);
          return new Result(RESULT_INTERNAL_ERROR, result.getError().getMessage());
        }
      } catch (FaultTolerantRESTRequest.RetryExhaustedException e) {
        logger.error(e, e);
        return new Result(RESULT_INTERNAL_ERROR, e.getMessage());
      } catch (UnsupportedEncodingException e) {
        logger.error(e, e);
        return new Result(RESULT_INTERNAL_ERROR, e.getMessage());
      }
    }

    // Verify owner == creator
    if (creator.equals(conference.getOwner())) {
      return new Result(RESULT_OK);
    } else {
      logger.error(
          "Room " + mucRoomName + ", conflict : " + creator + " != " + conference.getOwner());

      return new Result(RESULT_CONFLICT);
    }
  }
コード例 #3
0
ファイル: Model.java プロジェクト: Jankish/GRAB
 private void extractInfo(File filename) {
   checkpoint = false;
   String line;
   try {
     ArrayList<String> order = new ArrayList<String>();
     BufferedReader input =
         new BufferedReader(new InputStreamReader(new FileInputStream(filename), "iso-8859-1"));
     while ((line = input.readLine()) != null) {
       if (line.equalsIgnoreCase("hämtas")) checkpoint = true;
       if (checkpoint) order.add(new String(line));
     }
     //	printList(order);
     int quant = Integer.parseInt(order.get(2));
     int rows = 9;
     int outer = (quant * rows);
     double price;
     double total;
     // DecimalFormat decimal = (DecimalFormat) format;
     Number number;
     for (int i = 4; i <= outer; i += 9) {
       Data d =
           new Data(
               order.get(i + 1),
               order.get(i + 3),
               order.get(i + 4),
               order.get(i + 5),
               order.get(i + 7));
       dataList.add(d);
       /*	try {
       System.out.println(order.get(i+5));
       number = format.parse(order.get(i+5));
       System.out.println("Number is " + number);
       price = number.doubleValue();
       System.out.println("Price is " + price);
       number = format.parse(order.get(i+7));
       total = number.doubleValue();
       Data d = new Data(order.get(i), Integer.parseInt(order.get(i+1)), Integer.parseInt(order.get(i+2)), order.get(i+3), order.get(i+4), price, total);
       dataList.add(d);
       } catch (ParseException numExcep) {
       numExcep.printStackTrace();
       System.exit(1);
       }
       **/
     }
     //	printDataList(dataList);
   } catch (FileNotFoundException found) {
     found.printStackTrace();
     System.exit(1);
   } catch (UnsupportedEncodingException encode) {
     encode.printStackTrace();
     System.exit(1);
   } catch (IOException ioexcep) {
     ioexcep.printStackTrace();
     System.exit(1);
   }
 }
コード例 #4
0
ファイル: OpenssoHelper.java プロジェクト: vedina/Pol
  public ErrorInfo listPolicy(String polname, String token) throws IOException, RestException {

    String realm = "/";
    String data = null;
    ErrorInfo ei = null;
    InputStreamReader iss = null;
    BufferedReader br = null;
    HttpURLConnection urlc = null;
    InputStream inputStream = null;

    try {
      data =
          "policynames="
              + URLEncoder.encode(polname, "UTF-8")
              + "&realm="
              + URLEncoder.encode(realm, "UTF-8")
              + "&submit="
              + URLEncoder.encode("Submit", "UTF-8");
    } catch (UnsupportedEncodingException e) {
      System.out.println("OpenssoHelper: " + e.getMessage());
      e.printStackTrace();
    }

    if (data != null) {
      try {
        r.Connect(new URL(url + ssoadm_list));
      } catch (MalformedURLException e) {
        System.out.println("OpenssoHelper: " + e.getMessage());
        e.printStackTrace();
      }

      urlc = (HttpURLConnection) r.c;
      urlc.addRequestProperty("Cookie", "iPlanetDirectoryPro=\"" + token + "\"");
      r.Send(urlc, data);

      String answer = null;
      int status = 0;
      inputStream = urlc.getInputStream();
      iss = new InputStreamReader(inputStream);
      br = new BufferedReader(iss);
      answer = BrToString(br);
      status = urlc.getResponseCode();
      if (answer != null) {
        ei = new ErrorInfo(answer, status);
      }
      br.close();
      iss.close();
      inputStream.close();
      urlc.disconnect();
    }

    return ei;
  }
コード例 #5
0
ファイル: OpenssoHelper.java プロジェクト: vedina/Pol
  public ErrorInfo doLogin() throws IOException, RestException {

    String data = null;
    ErrorInfo ei = null;
    InputStreamReader iss = null;
    BufferedReader br = null;
    HttpURLConnection urlc = null;
    InputStream inputStream = null;

    try {
      data =
          "username="******"UTF-8")
              + "&password="******"UTF-8");
    } catch (UnsupportedEncodingException e) {
      System.out.println("OpenssoHelper: " + e.getMessage());
      e.printStackTrace();
    }

    if (data != null) {
      try {
        r.Connect(new URL(url + authenticate));
      } catch (MalformedURLException e) {
        System.out.println("OpenssoHelper: " + e.getMessage());
        e.printStackTrace();
      }

      urlc = (HttpURLConnection) r.c;
      r.Send(urlc, data);

      String answer = null;
      int status = 0;

      inputStream = urlc.getInputStream();
      iss = new InputStreamReader(inputStream);
      br = new BufferedReader(iss);
      answer = BrToString(br);
      status = urlc.getResponseCode();
      if (answer != null) {
        ei = new ErrorInfo(answer, status);
      }
      br.close();
      iss.close();
      inputStream.close();
      urlc.disconnect();
    }

    return ei;
  }
コード例 #6
0
 public void parsePyPIList(final List<String> packages, final PyPackageService service) {
   myPackageNames = null;
   for (String pyPackage : packages) {
     try {
       final Matcher matcher = PYPI_PATTERN.matcher(URLDecoder.decode(pyPackage, "UTF-8"));
       if (matcher.find()) {
         final String packageName = matcher.group(1);
         final String packageVersion = matcher.group(2);
         if (!packageName.contains(" ")) service.PY_PACKAGES.put(packageName, packageVersion);
       }
     } catch (UnsupportedEncodingException e) {
       LOG.warn(e.getMessage());
     }
   }
 }
コード例 #7
0
ファイル: Test.java プロジェクト: Stronhold/NewsClasifier
  private static void createFile(List<String> palabras, String pathToWords) {
    PrintWriter writer = null;
    try {
      writer = new PrintWriter(pathToWords, "UTF-8");
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }

    for (String temp : palabras) {
      writer.println(temp);
    }
    writer.close();
  }
コード例 #8
0
 public void printString(String output) {
   PrintWriter printer;
   try {
     printer = new PrintWriter("botOutput.txt", "UTF-8");
     printer.write(output);
     printer.close();
     /*                for (String word : individual.toString().split(" ")) {
         printer.write(word);
     }*/
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
   }
 }
コード例 #9
0
  // добавить продукт в базу json server
  public static void add(ProductREST product) throws NotValidProductException, IOException {
    try {
      check(product); // рповеряем продукт
      // connection к серверу
      HttpURLConnection con = (HttpURLConnection) ((new URL(PRODUCT_URL).openConnection()));
      con.setRequestMethod("POST"); // метод post для добавления

      // генерируем запрос
      StringBuilder urlParameters = new StringBuilder();
      urlParameters
          .append("name=")
          .append(URLEncoder.encode(product.getName(), "UTF8"))
          .append("&");
      urlParameters.append("price=").append(product.getPrice()).append("&");
      urlParameters.append("weight=").append(product.getWeight()).append("&");
      urlParameters
          .append("manufacturer=")
          .append(product.getManufacturer().getCountry())
          .append("&");
      urlParameters.append("category=").append(URLEncoder.encode(product.getCategory(), "UTF8"));

      con.setDoOutput(true); // разрешаем отправку данных
      // отправляем
      try (DataOutputStream out = new DataOutputStream(con.getOutputStream())) {
        out.writeBytes(urlParameters.toString());
      }
      // код ответа
      int responseCode = con.getResponseCode();
      System.out.println("\nSending 'POST' request to URL : " + PRODUCT_URL);
      System.out.println("Response Code : " + responseCode);

    } catch (NotValidProductException e) {
      e.printStackTrace();
      throw e;
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
      throw new UnsupportedEncodingException("cannot recognize encoding");
    } catch (ProtocolException e) {
      e.printStackTrace();
      throw new ProtocolException("No such protocol, protocol must be POST,DELETE,PATCH,GET etc.");
    } catch (MalformedURLException e) {
      e.printStackTrace();
      throw new MalformedURLException("Url is not valid");
    } catch (IOException e) {
      e.printStackTrace();
      throw new IOException("cannot write information to server");
    }
  }
コード例 #10
0
ファイル: Model.java プロジェクト: Jankish/GRAB
  public void createExcel(String file) {

    String filename = createPath(file);
    System.out.println(filename);

    /*
       try {
       WorkbookSettings ws = new WorkbookSettings();
       ws.setLocale(new Locale("sv", "SE"));
       WritableWorkbook workbook = Workbook.createWorkbook(new File(filename), ws);
       WritableSheet s = workbook.createSheet("Sheet1", 0);
    //writeDataSheet(s);
    workbook.write();
    workbook.close();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (WriteException e) {
    e.printStackTrace();
    }**/

    try {

      File newFile = new File(filename);
      Writer out =
          new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile), "UTF8"));
      //	BufferedWrite output = new BufferedWriter(new OutputStreamReader(new
      // FileInputS§tream(filename), "iso-8859-1"));
      // FileWriter fw = new FileWriter(newFile.getAbsoluteFile());
      // BufferedWriter bw = new BufferedWriter(fw);
      // bw.write("Artikel;Antal/st;Pris/st;Total\n");
      out.append("Artikel;Antal/st;Pris/st;Total\n");
      for (Data d : dataList) {
        out.append(d.toString());
        out.append("\n");
        // bw.write(d.toString());
        // bw.write("\n");
      }
      // bw.close();
      out.flush();
      out.close();
    } catch (UnsupportedEncodingException unsuppEn) {
      unsuppEn.printStackTrace();
    } catch (IOException ioE) {
      ioE.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
コード例 #11
0
  public String getBody(String url, String text, LinkedHashMap header) {
    if (text != null && text.length() > 0) {
      File tmpFile = new File("/tmp/aa");
      OutputStreamWriter out = null;
      try {
        // write the input
        out = new OutputStreamWriter(new FileOutputStream(tmpFile), "UTF8");
        out.write(text);
        out.close();

        // run TextPro
        String[] CONFIG = {"TEXTPRO=" + TEXTPRO_PATH, "PATH=" + "/usr/bin/" + ":."};
        String[] cmd = {
          "/bin/tcsh",
          "-c",
          "perl " + TEXTPRO_PATH + "/textpro.pl -l eng -c token+pos+lemma+sentence -y " + tmpFile
        };
        Process process = run(cmd, CONFIG);
        process.waitFor();

        // read the TextPro's output
        BufferedReader txpFile =
            new BufferedReader(
                new InputStreamReader(new FileInputStream(tmpFile.getCanonicalPath() + ".txp")));
        StringBuilder result = new StringBuilder();
        String line;
        while ((line = txpFile.readLine()) != null) {
          if (!line.startsWith("# FILE:")) {
            result.append(line).append("\n");
          }
        }
        txpFile.close();

        return result.toString();
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    return "";
  }
コード例 #12
0
ファイル: JIPTermParser.java プロジェクト: mattyb149/jiprolog
  /**
   * Parses the term passed in the parameter and returns a JIPTerm object that wraps the
   * corresponding prolog term.<br>
   * If the string passed in the parameter doesn't contains a valid prolog term it raises a
   * JIPSyntaxErrorException.
   *
   * @param strTerm Term to be parsed. If the term doesn't end with a "dot" one is appended to it.
   * @return a new JIPTerm object.
   * @exception com.ugos.jiprolog.engine.JIPSyntaxErrorException
   */
  public final JIPTerm parseTerm(String strTerm) throws JIPSyntaxErrorException {
    try {
      final byte[] btTerm = strTerm.getBytes(getEncoding());
      final ByteArrayInputStream is = new ByteArrayInputStream(btTerm);
      PrologParser parser =
          new PrologParser(
              new ParserReader(new PushbackLineNumberInputStream(is)),
              m_opManager,
              m_engine,
              "user");

      m_singletonVars = parser.getSingletonVariables();

      final PrologObject term = parser.parseNext();

      return JIPTerm.getJIPTerm(term);
    } catch (UnsupportedEncodingException ex) {
      throw new JIPRuntimeException(ex.getMessage());
    }
  }
コード例 #13
0
ファイル: SGDGFFParser.java プロジェクト: gifford-lab/GEM
  public static Pair<String, List<String>> decodeKeyValues(String str) {
    int index = str.indexOf("=");
    if (index == -1) {
      return null;
    }
    String k = str.substring(0, index);
    LinkedList<String> vlist = new LinkedList<String>();
    try {
      String vstr = URLDecoder.decode(str.substring(index + 1, str.length()), "UTF-8");
      String[] array = vstr.split(",");
      for (int i = 0; i < array.length; i++) {
        vlist.addLast(array[i]);
      }
      return new Pair<String, List<String>>(k, vlist);

    } catch (UnsupportedEncodingException e) {
      System.err.println("BAD STRING " + str);
      e.printStackTrace();
      return null;
    } catch (Exception e) {
      System.err.println("BAD STRING " + str);
      return null;
    }
  }
コード例 #14
0
  /**
   * Parse the content of a purported HTML stream digital object and store the results in RepInfo.
   *
   * @param stream An InputStream, positioned at its beginning, which is generated from the object
   *     to be parsed. If multiple calls to <code>parse</code> are made on the basis of a nonzero
   *     value being returned, a new InputStream must be provided each time.
   * @param info A fresh (on the first call) RepInfo object which will be modified to reflect the
   *     results of the parsing If multiple calls to <code>parse</code> are made on the basis of a
   *     nonzero value being returned, the same RepInfo object should be passed with each call.
   * @param parseIndex Must be 0 in first call to <code>parse</code>. If <code>parse</code> returns
   *     a nonzero value, it must be called again with <code>parseIndex</code> equal to that return
   *     value.
   */
  public int parse(InputStream stream, RepInfo info, int parseIndex) throws IOException {
    if (parseIndex != 0) {
      // Coming in with parseIndex = 1 indicates that we've determined
      // this is XHTML; so we invoke the XML module to parse it.
      // If parseIndex is 100, this is the first invocation of the
      // XML module, so we call it with 0; otherwise we call it with
      // the value of parseIndex.
      if (isXmlAvailable()) {
        edu.harvard.hul.ois.jhove.module.XmlModule xmlMod =
            new edu.harvard.hul.ois.jhove.module.XmlModule();
        if (parseIndex == 100) {
          parseIndex = 0;
        }
        xmlMod.setApp(_app);
        xmlMod.setBase(_je);
        xmlMod.setDefaultParams(_defaultParams);
        try {
          xmlMod.applyDefaultParams();
        } catch (Exception e) {
          // really shouldn't happen
        }
        xmlMod.setXhtmlDoctype(_doctype);
        return xmlMod.parse(stream, info, parseIndex);
      } else {
        // The XML module shouldn't be missing from any installation,
        // but someone who really wanted to could remove it.  In
        // that case, you deserve what you get.
        info.setMessage(new ErrorMessage("XML-HUL module required to validate XHTML documents"));
        info.setWellFormed(false); // Treat it as completely wrong
        return 0;
      }
    } else {
      /* parseIndex = 0, first call only */
      _doctype = null;
    }
    // Test if textMD is to be generated
    if (_defaultParams != null) {
      Iterator iter = _defaultParams.iterator();
      while (iter.hasNext()) {
        String param = (String) iter.next();
        if (param.toLowerCase().equals("withtextmd=true")) {
          _withTextMD = true;
        }
      }
    }

    initParse();
    info.setFormat(_format[0]);
    info.setMimeType(_mimeType[0]);
    info.setModule(this);

    if (_textMD == null || parseIndex == 0) {
      _textMD = new TextMDMetadata();
    }
    /* We may have already done the checksums while converting a
    temporary file. */
    Checksummer ckSummer = null;
    if (_je != null && _je.getChecksumFlag() && info.getChecksum().size() == 0) {
      ckSummer = new Checksummer();
      _cstream = new ChecksumInputStream(stream, ckSummer);
      _dstream = getBufferedDataStream(_cstream, _je != null ? _je.getBufferSize() : 0);
    } else {
      _dstream = getBufferedDataStream(stream, _je != null ? _je.getBufferSize() : 0);
    }

    ParseHtml parser = null;
    HtmlMetadata metadata = null;
    HtmlCharStream cstream = null;
    try {
      cstream = new HtmlCharStream(_dstream, "ISO-8859-1");
      parser = new ParseHtml(cstream);
    } catch (UnsupportedEncodingException e) {
      info.setMessage(new ErrorMessage("Internal error: " + e.getMessage()));
      info.setWellFormed(false);
      return 0; // shouldn't happen!
    }
    int type = 0;
    try {
      List elements = parser.HtmlDoc();
      if (elements.isEmpty()) {
        // Consider an empty document bad
        info.setWellFormed(false);
        info.setMessage(new ErrorMessage("Document is empty"));
        return 0;
      }
      type = checkDoctype(elements);
      if (type < 0) {
        info.setWellFormed(false);
        info.setMessage(new ErrorMessage("DOCTYPE is not HTML"));
        return 0;
      }
      /* Check if there is at least one html, head, body or title tag.
       * A plain text document
       * might be interpreted as a single PCDATA, which is in some
       * ethereal sense well-formed HTML, but it's pointless to consider
       * it such.  It might also use angle brackets as a text delimiter,
       * and that shouldn't count as HTML either. */
      boolean hasElements = false;
      Iterator iter = elements.iterator();
      while (iter.hasNext()) {
        Object o = iter.next();
        if (o instanceof JHOpenTag) {
          String name = ((JHOpenTag) o).getName();
          if ("html".equals(name)
              || "head".equals(name)
              || "body".equals(name)
              || "title".equals(name)) {
            hasElements = true;
          }
          break;
        }
      }
      if (!hasElements) {
        info.setMessage(new ErrorMessage("Document contains no html, head, body or title tags"));
        info.setWellFormed(false);
        return 0;
      }

      // CRLF from HtmlCharStream ...
      String lineEnd = cstream.getKindOfLineEnd();
      if (lineEnd == null) {
        info.setMessage(new InfoMessage("Not able to determine type of end of line"));
        _textMD.setLinebreak(TextMDMetadata.NILL);
      } else if (lineEnd.equalsIgnoreCase("CR")) {
        _textMD.setLinebreak(TextMDMetadata.LINEBREAK_CR);
      } else if (lineEnd.equalsIgnoreCase("LF")) {
        _textMD.setLinebreak(TextMDMetadata.LINEBREAK_LF);
      } else if (lineEnd.equalsIgnoreCase("CRLF")) {
        _textMD.setLinebreak(TextMDMetadata.LINEBREAK_CRLF);
      }

      if (type == 0) {
        /* If we can't find a doctype, it still might be XHTML
         * if the elements start with an XML declaration and
         * the root element is "html" */
        switch (seemsToBeXHTML(elements)) {
          case 0: // Not XML
            break; // fall through
          case 1: // XML but not HTML
            info.setMessage(
                new ErrorMessage(
                    "Document has XML declaration but no DOCTYPE; "
                        + "probably XML rather than HTML"));
            info.setWellFormed(false);
            return 0;
          case 2: // probably XHTML
            return 100;
        }
        info.setMessage(
            new ErrorMessage(
                "Unrecognized or missing DOCTYPE declaration; "
                    + "validation continuing as HTML 3.2"));
        info.setValid(false);
        // But keep going
      }

      HtmlDocDesc docDesc = null;
      switch (type) {
        case HTML_3_2:
        default:
          docDesc = new Html3_2DocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("3.2");
          break;

        case HTML_4_0_FRAMESET:
          docDesc = new Html4_0FrameDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.0");
          break;
        case HTML_4_0_TRANSITIONAL:
          docDesc = new Html4_0TransDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.0");
          break;
        case HTML_4_0_STRICT:
          docDesc = new Html4_0StrictDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.0");
          break;
        case HTML_4_01_FRAMESET:
          docDesc = new Html4_01FrameDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.01");
          break;
        case HTML_4_01_TRANSITIONAL:
          docDesc = new Html4_01TransDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.01");
          break;
        case HTML_4_01_STRICT:
          docDesc = new Html4_01StrictDocDesc();
          _textMD.setMarkup_basis("HTML");
          _textMD.setMarkup_basis_version("4.01");
          break;
        case XHTML_1_0_STRICT:
        case XHTML_1_0_TRANSITIONAL:
        case XHTML_1_0_FRAMESET:
        case XHTML_1_1:
          // Force a second call to parse as XML. 100 is a
          // magic code for the first XML call.
          return 100;
      }
      _textMD.setMarkup_language(_doctype);
      if (docDesc == null) {
        info.setMessage(
            new InfoMessage(
                "Code for appropriate HTML version not available yet:" + "substituting HTML 3.2"));
        docDesc = new Html3_2DocDesc();
      }
      docDesc.validate(elements, info);
      metadata = docDesc.getMetadata();

      // Try to get the charset from the meta Content
      if (metadata.getCharset() != null) {
        _textMD.setCharset(metadata.getCharset());
      } else {
        _textMD.setCharset(TextMDMetadata.CHARSET_ISO8859_1);
      }
      String textMDEncoding = _textMD.getCharset();
      if (textMDEncoding.indexOf("UTF") != -1) {
        _textMD.setByte_order(
            _bigEndian ? TextMDMetadata.BYTE_ORDER_BIG : TextMDMetadata.BYTE_ORDER_LITTLE);
        _textMD.setByte_size("8");
        _textMD.setCharacter_size("variable");
      } else {
        _textMD.setByte_order(
            _bigEndian ? TextMDMetadata.BYTE_ORDER_BIG : TextMDMetadata.BYTE_ORDER_LITTLE);
        _textMD.setByte_size("8");
        _textMD.setCharacter_size("1");
      }
    } catch (ParseException e) {
      Token t = e.currentToken;
      info.setMessage(
          new ErrorMessage("Parse error", "Line = " + t.beginLine + ", column = " + t.beginColumn));
      info.setWellFormed(false);
    } catch (TokenMgrError f) {
      info.setMessage(new ErrorMessage("TokenMgrError: " + f.getLocalizedMessage()));
      info.setWellFormed(false);
    }

    if (info.getWellFormed() == RepInfo.FALSE) {
      return 0;
    }

    if (type != 0) {
      if (profileNames[type] != null) {
        info.setProfile(profileNames[type]);
      }
      info.setVersion(versionNames[type]);
    }

    if (metadata != null) {
      Property property = metadata.toProperty(_withTextMD ? _textMD : null);
      if (property != null) {
        info.setProperty(property);
      }
    }

    if (ckSummer != null) {
      info.setSize(_cstream.getNBytes());
      info.setChecksum(new Checksum(ckSummer.getCRC32(), ChecksumType.CRC32));
      String value = ckSummer.getMD5();
      if (value != null) {
        info.setChecksum(new Checksum(value, ChecksumType.MD5));
      }
      if ((value = ckSummer.getSHA1()) != null) {
        info.setChecksum(new Checksum(value, ChecksumType.SHA1));
      }
    }

    return 0;
  }
コード例 #15
0
  private boolean encodeObject(Object object) throws IOException {

    if (object instanceof BEncodableObject) {
      object = ((BEncodableObject) object).toBencodeObject();
    }

    if (object instanceof String || object instanceof Float) {

      String tempString =
          (object instanceof String) ? (String) object : String.valueOf((Float) object);

      // usually this is simpler to encode by hand as chars < 0x80 map directly in UTF-8

      boolean simple = true;

      int char_count = tempString.length();

      byte[] encoded = new byte[char_count];

      for (int i = 0; i < char_count; i++) {

        char c = tempString.charAt(i);

        if (c < 0x80) {

          encoded[i] = (byte) c;

        } else {

          simple = false;

          break;
        }
      }

      if (simple) {

        writeInt(char_count);

        writeChar(':');

        writeBytes(encoded);

      } else {

        ByteBuffer bb = Constants.DEFAULT_CHARSET.encode(tempString);

        writeInt(bb.limit());

        writeChar(':');

        writeByteBuffer(bb);
      }

    } else if (object instanceof Map) {

      Map tempMap = (Map) object;

      SortedMap tempTree = null;

      // unfortunately there are some occasions where we want to ensure that
      // the 'key' of the map is not mangled by assuming its UTF-8 encodable.
      // In particular the response from a tracker scrape request uses the
      // torrent hash as the KEY. Hence the introduction of the type below
      // to allow the constructor of the Map to indicate that the keys should
      // be extracted using a BYTE_ENCODING

      boolean byte_keys = object instanceof ByteEncodedKeyHashMap;

      // write the d
      writeChar('d');

      // are we sorted?
      if (tempMap instanceof TreeMap) {

        tempTree = (TreeMap) tempMap;

      } else {
        tempTree = new TreeMap(tempMap);
      }

      Iterator it = tempTree.entrySet().iterator();

      while (it.hasNext()) {

        Map.Entry entry = (Map.Entry) it.next();

        Object o_key = entry.getKey();

        Object value = entry.getValue();

        if (value != null) {
          if (o_key instanceof byte[]) {
            encodeObject(o_key);
            if (!encodeObject(value)) encodeObject("");
          } else if (o_key instanceof String) {
            String key = (String) o_key;
            if (byte_keys) {
              try {
                encodeObject(Constants.BYTE_CHARSET.encode(key));
                if (!encodeObject(value)) encodeObject("");
              } catch (UnsupportedEncodingException e) {
                throw (new IOException("BEncoder: unsupport encoding: " + e.getMessage()));
              }
            } else {
              encodeObject(key); // Key goes in as UTF-8
              if (!encodeObject(value)) encodeObject("");
            }
          } else
            Debug.out(
                "Attempt to encode an unsupported map key type: "
                    + object.getClass()
                    + ";value="
                    + object);
        }
      }

      writeChar('e');

    } else if (object instanceof List) {

      List tempList = (List) object;

      // write out the l

      writeChar('l');

      for (int i = 0; i < tempList.size(); i++) {

        encodeObject(tempList.get(i));
      }

      writeChar('e');

    } else if (object instanceof Long) {

      Long tempLong = (Long) object;
      // write out the l
      writeChar('i');
      writeLong(tempLong.longValue());
      writeChar('e');
    } else if (object instanceof Integer) {

      Integer tempInteger = (Integer) object;
      // write out the l
      writeChar('i');
      writeInt(tempInteger.intValue());
      writeChar('e');

    } else if (object instanceof byte[]) {

      byte[] tempByteArray = (byte[]) object;
      writeInt(tempByteArray.length);
      writeChar(':');
      if (url_encode) {
        writeBytes(
            URLEncoder.encode(
                    new String(tempByteArray, Constants.BYTE_ENCODING), Constants.BYTE_ENCODING)
                .getBytes());
      } else {
        writeBytes(tempByteArray);
      }

    } else if (object instanceof ByteBuffer) {

      ByteBuffer bb = (ByteBuffer) object;
      writeInt(bb.limit());
      writeChar(':');
      writeByteBuffer(bb);

    } else if (object == null) {

      // ideally we'd bork here but I don't want to run the risk of breaking existing stuff so just
      // log

      Debug.out("Attempt to encode a null value: sofar=" + getEncodedSoFar());
      return false;

    } else {

      Debug.out(
          "Attempt to encode an unsupported entry type: " + object.getClass() + ";value=" + object);
      return false;
    }

    return true;
  }