001package org.unix4j.unix.wc; 002 003import java.io.File; 004import java.util.List; 005 006import org.unix4j.command.AbstractCommand; 007import org.unix4j.context.ExecutionContext; 008import org.unix4j.io.FileInput; 009import org.unix4j.processor.InputLineProcessor; 010import org.unix4j.processor.LineProcessor; 011import org.unix4j.unix.Wc; 012import org.unix4j.util.FileUtil; 013 014/** 015 * Implementation of the {@link Wc wc} command. 016 */ 017class WcCommand extends AbstractCommand<WcArguments> { 018 public WcCommand(WcArguments arguments) { 019 super(Wc.NAME, arguments); 020 } 021 022 @Override 023 public LineProcessor execute(ExecutionContext context, final LineProcessor output) { 024 final WcArguments args = getArguments(context); 025 026 //input from files? 027 final List<FileInput> inputs; 028 if (args.isFilesSet()) { 029 inputs = FileInput.multiple(args.getFiles()); 030 } else if (args.isPathsSet()) { 031 final List<File> files = FileUtil.expandFiles(context.getCurrentDirectory(), args.getPaths()); 032 inputs = FileInput.multiple(files); 033 } else { 034 //standard input 035 return getStandardInputProcessor(context, output); 036 } 037 038 if(inputs.size() == 1){ 039 return new InputLineProcessor(inputs.get(0), new WcFileProcessor(context, args), output); 040 041 } else if(inputs.size() > 1){ 042 return new WcMultipleFilesProcessor(context, inputs, output, args); 043 044 } else { 045 throw new IllegalStateException("No inputs specified"); 046 } 047 } 048 049 private WcProcessor getStandardInputProcessor(ExecutionContext context, final LineProcessor output) { 050 return new WcProcessor(this, context, output); 051 } 052}