Package org.jboss.fresh.shell.commands

Source Code of org.jboss.fresh.shell.commands.CatExe

package org.jboss.fresh.shell.commands;


import org.jboss.fresh.vfs.FileName;
import org.jboss.fresh.vfs.FileOpInfo;
import org.jboss.fresh.vfs.FileReadInfo;
import org.jboss.fresh.vfs.VFS;
import org.jboss.fresh.io.BufferObjectReader;
import org.jboss.fresh.io.BufferObjectWriter;
import org.jboss.fresh.io.BufferWriter;
import org.jboss.fresh.shell.AbstractExecutable;

import java.io.PrintWriter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

// EX OK

public class CatExe extends AbstractExecutable {
  private static transient org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(CatExe.class);

//    cat [PATHS]

  /**
   Izpi�e vsebino izbranih datotek iz VFS-ja na ObjectWriter objekt.
   */

  public void process(String exename, String[] params) throws Exception {
    log.debug("entered");

    if (helpRequested()) {
      PrintWriter out = new PrintWriter(new BufferWriter(getStdOut()));
      out.print("Usage: cat [--help] [files]\n");
      out.print("    If no parameters are given, cat reads from his standard input Buffer.\n");
      out.print("    --help : this help\n");
      out.close();
      System.out.println("[CatExe] : done.");
      return;
    }

//    System.out.println("##[CatExe] : getStdOut():" + getStdOut());
//    System.out.println("##[CatExe] : getStdIn():" + getStdIn());

    BufferObjectWriter oout = new BufferObjectWriter(getStdOut());
    BufferObjectReader oin = new BufferObjectReader(getStdIn());

    VFS vfs = shell.getVFS();

    FileName pwd = new FileName(shell.getEnvProperty("PWD"));

    List paths = new LinkedList();

    for (int i = 0; i < params.length; i++) {
      String param = params[i];

      FileName path = new FileName(param);
      if (path.isRelative())
        path = pwd.absolutize(path);

      path = vfs.resolve(shell.getUserCtx(), path, false);
      paths.add(path);
    }


//    List result = new LinkedList();

//    if no paths given, read from stdin
    if (!paths.isEmpty()) {
      Iterator it = paths.iterator();
      while (it.hasNext()) {
        FileName path = (FileName) it.next();

        FileOpInfo op = new FileOpInfo();
        op.filename = path;
//        op.offset = 0;
        FileReadInfo read = null;

        do {
          read = vfs.read(shell.getUserCtx(), op);

          // if file has no content(is asset, etc.) null is returned by vfs.read()
          if (read == null)
            break;

          op.tag = read.tag;
          op.offset += read.buf.length;
          oout.writeObject(read.buf);
        } while (read.more);
      }

    } else {
      while (!oin.isFinished()) {
        Object obj = oin.readObject();
        oout.writeObject(obj);
//        System.out.println("##[CatExe] writing to out: " + obj);
      }

    }

    oout.close();

    log.debug("done");

  }
}
TOP

Related Classes of org.jboss.fresh.shell.commands.CatExe

TOP
Copyright © 2018 www.massapi.com. 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.