Package org.nutz.lang.util

Examples of org.nutz.lang.util.NutMap


        if (log.isDebugEnabled())
            log.debug("info created");
        /*
         * 创建参数表
         */
        NutMap params = Uploads.createParamsMap(req);
        if (log.isDebugEnabled())
            log.debugf("Params map created - %s params", params.size());
        /*
         * 解析边界
         */
        String firstBoundary = "--" + Http.multipart.getBoundary(req.getContentType());
        RemountBytes firstBoundaryBytes = RemountBytes.create(firstBoundary);
        String itemEndl = "\r\n--" + Http.multipart.getBoundary(req.getContentType());
        RemountBytes itemEndlBytes = RemountBytes.create(itemEndl);
        RemountBytes nameEndlBytes = RemountBytes.create("\r\n\r\n");

        if (Http.multipart.getBoundary(req.getContentType()) == null) {
            if (log.isInfoEnabled())
                log.info("boundary no found!!");
            return params;
        }

        if (log.isDebugEnabled())
            log.debug("boundary: " + itemEndl);

        /*
         * 准备缓冲环,并跳过开始标记
         */
        MarkMode mm;
        BufferRing br;
        try {
            ServletInputStream ins = req.getInputStream();
            // 构建 3 个环节点的缓冲环
            br = new BufferRing(ins, 3, bufferSize);
            // 初始加载
            info.current = br.load();
            // 跳过开始的标记
            mm = br.mark(firstBoundaryBytes);
            // 这是不可能的,应该立即退出
            if (mm != MarkMode.FOUND) {
                if (log.isWarnEnabled())
                    log.warnf("Fail to find the firstBoundary (%s) in stream, quit!", firstBoundary);
                return params;
            }
            br.skipMark();
            if (log.isDebugEnabled())
                log.debug("skip first boundary");
        }
        catch (IOException e) {
            throw Lang.wrapThrow(e);
        }

        /**
         * ========================================================<br>
         * 进入循环
         */
        if (log.isDebugEnabled())
            log.debug("Reading...");
        try {
            FieldMeta meta;
            do {
                info.current = br.load();
                // 标记项目头
                mm = br.mark(nameEndlBytes);
                String s = br.dumpAsString(charset);

                // 肯定碰到了 "--\r\n", 这标志着整个流结束了
                if ("--".equals(s) || MarkMode.STREAM_END == mm) {
                    break;
                }
                // 找到头的结束标志
                else if (MarkMode.FOUND == mm) {
                    meta = new FieldMeta(s);
                }
                // 这是不可能的,抛错
                else {
                    throw new UploadInvalidFormatException("Fail to found nameEnd!");
                }
                if(log.isDebugEnabled())
                    log.debugf("Upload File info: FilePath=[%s],fieldName=[%s]",meta.getFileLocalPath(),meta.getName());
                // 作为文件读取
                if (meta.isFile()) {
                    if (log.isDebugEnabled())
                        log.debugf("Upload Info: name=%s,content_type=%s", meta.getFileLocalName(),meta.getContentType());
                    // 检查是否通过文件名过滤
                    if (!context.isNameAccepted(meta.getFileLocalName())) {
                        throw new UploadUnsupportedFileNameException(meta);
                    }
                    // 检查是否通过文件类型过滤
                    if (!context.isContentTypeAccepted(meta.getContentType())) {
                        throw new UploadUnsupportedFileTypeException(meta);
                    }

                    // 上传的是一个空文件
                    if ("\"\"".equals(meta.getName()) || Strings.isBlank(meta.getFileLocalPath())) {
                        do {
                            info.current = br.load();
                            mm = br.mark(itemEndlBytes);
                            assertStreamNotEnd(mm);
                            br.skipMark();
                        } while (mm == MarkMode.NOT_FOUND);
                    }
                    // 保存临时文件
                    else {
                        File tmp = tmps.createFile(meta.getFileExtension());
                        OutputStream ops = null;
                        try {
                            ops = new BufferedOutputStream(    new FileOutputStream(tmp),
                                                            bufferSize * 2);
                            // 需要限制文件大小
                            if (maxFileSize > 0) {
                                long maxPos = info.current + maxFileSize;
                                do {
                                    info.current = br.load();
                                    mm = br.mark(itemEndlBytes);
                                    assertStreamNotEnd(mm);
                                    if (info.current > maxPos) {
                                        throw new UploadOutOfSizeException(meta);
                                    }
                                    br.dump(ops);
                                    if(info.stop)
                                        throw new UploadStopException(info);
                                } while (mm == MarkMode.NOT_FOUND);
                            }
                            // 不限制文件大小
                            else {
                                do {
                                    info.current = br.load();
                                    mm = br.mark(itemEndlBytes);
                                    assertStreamNotEnd(mm);
                                    br.dump(ops);
                                    if(info.stop)
                                        throw new UploadStopException(info);
                                } while (mm == MarkMode.NOT_FOUND);
                            }
                        }
                        finally {
                            Streams.safeFlush(ops);
                            Streams.safeClose(ops);
                        }
                        // 如果是空文件,不保存
                        if (context.isIgnoreNull() && tmp.length() == 0) {}
                        // 默认,空文件也保存
                        else {
                            params.addv(meta.getName(), new TempFile(meta, tmp));
                        }
                    }
                }
                // 作为提交值读取
                else {
                    StringBuilder sb = new StringBuilder();
                    do {
                        info.current = br.load();
                        mm = br.mark(itemEndlBytes);
                        assertStreamNotEnd(mm);
                        sb.append(br.dumpAsString(charset));
                    } while (mm == MarkMode.NOT_FOUND);
                    params.addv(meta.getName(), sb.toString());
                    if (log.isDebugEnabled())
                        log.debugf(    "Found a param, name=[%s] value=[%s]",
                                    meta.getName(),
                                    sb.toString());
                }
View Full Code Here


    private NutMap keys;

    public void parse(Reader reader) {
        nodes = new LinkedList<SegmentNode>();
        context = Lang.context();
        keys = new NutMap();
        StringBuilder org = new StringBuilder();
        StringBuilder sb = new StringBuilder();
        int b;
        try {
            while (-1 != (b = reader.read())) {
View Full Code Here

    return -1;
  }

  @Override
  public String getCollectionName(Object ref) {
    NutMap map = Mongos.obj2map(ref);
    return map.get(Mongos.COLLECTION_KEY).toString();
  }
View Full Code Here

  @Override
  public Object toObject(DBObject dbo) {
    if (null == dbo)
      return null;
    NutMap map = new NutMap();
    for (String key : dbo.keySet()) {
      Object dbval = dbo.get(key);
      if (dbval instanceof ObjectId)
        map.put(key, dbval.toString());
      else
        map.put(key, dbval);
    }
    return map;
  }
View Full Code Here

   * 是一样的效果
   *
   * @return Map 对象
   */
  public NutMap toMap() {
    final NutMap rootMap = new NutMap();
    each(new Each<MoChain>() {
      @SuppressWarnings("unchecked")
      public void invoke(int index, MoChain c, int length) {
        Object o = c.value;
        // null val,直接添加
        if (null == o) {
          rootMap.put(c.key, o);
          return;
        }
        /*
         * 格式化 val
         */
        Object val = rootMap.get(c.key);
        // 如果是 MoChain,则变 Map
        if (o instanceof MoChain) {
          // 如果是 $not,那么就修改这个 Map,并且将其加入顶层 map
          if ("$not".equals(c.key)) {
            NutMap map = ((MoChain) o).toMap();
            NutMap notMap = new NutMap();
            for (Map.Entry<String, Object> en : map.entrySet()) {
              notMap.put(en.getKey(), Mongos.map("$not", en.getValue()));
            }
            // 加入顶层
            rootMap.putAll(notMap);
            return;
          }
          // 否则,直接变 Map
          else {
            o = ((MoChain) o).toMap();
          }
        }
        // 如果是集合,且第一个元素是 MoChain, 那么就变数组
        else if (Mirror.me(o).isColl() && Lang.first(o) instanceof MoChain) {
          int len = Lang.length(o);
          Object[] array = new Object[len];
          for (int i = 0; i < len; i++) {
            MoChain mo = (MoChain) Array.get(o, i);
            NutMap map = mo.toMap();
            Array.set(array, i, map);
          }
          o = array;
        }
        /*
 
View Full Code Here

   */
  @SuppressWarnings("unchecked")
  public static NutMap obj2map(Object o) {
    // 空
    if (null == o)
      return new NutMap();

    // MoChain
    if (o instanceof MoChain)
      return ((MoChain) o).toMap();

    // NutMap
    if (o instanceof NutMap)
      return (NutMap) o;

    // 字符串
    if (o instanceof CharSequence)
      return Json.fromJson(NutMap.class, o.toString());

    // 更多判断 ...
    Mirror<?> mirror = Mirror.me(o.getClass());

    // 普通 Map
    if (mirror.isMap()) {
      return new NutMap((Map<String, Object>) o);
    }

    // POJO
    if (mirror.isPojo())
      return new NutMap(Lang.obj2map(o));

    // 其他的,调用 Castors 先变 Map 再说
    return Castors.me().castTo(o, NutMap.class);
  }
View Full Code Here

   * @param val
   *            值
   * @return Map 对象
   */
  public static NutMap map(String key, Object val) {
    NutMap map = new NutMap();
    map.put(key, val);
    return map;
  }
View Full Code Here

TOP

Related Classes of org.nutz.lang.util.NutMap

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.