package commons.cmd;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import basics.filesystem.file.FileUtl;
import basics.filesystem.scanner.FileEventListener;
import basics.filesystem.scanner.FileSystemScanner;
import basics.unexpected.Problem;
import basics.utl.SysUtl;
import basics.utl.SUtl;
import commons.application.core.Command;
import commons.utl.CtxUtl;
public class liststore extends Command implements FileEventListener
{

private static final String MUSTHAVE      = "p,ok";
private static final String ARGS          = "p:<filepattern>;ok:<output-key>";
String                      storageFolder = null;
String                      inPattern     = "";                               // files
// what
// we
// work
// on
String                      outkey        = "";                               // files
// what
// we
// work
// on
List<File>                  fileListing   = null;

// ---service labour----
public void process () throws Problem
{
   fileListing = new ArrayList<File>();
   try
   {
      inPattern = ctx.consume("p", "*.");
      outkey = ctx.consume("ok", "");
      storageFolder = CtxUtl.storageHome(ctx).getAbsolutePath();
      if (!FileUtl.exists(storageFolder)) FileUtl.mkdir(storageFolder);
      SysUtl.trace("Store in: " + storageFolder);
      FileSystemScanner scanner = new FileSystemScanner(this);
      scanner.setPattern(SUtl.split(inPattern, ","));
      scanner.startScan(storageFolder, false);
      ctx.put(outkey, fileListing);
   }
   catch (Exception e)
   {
      e.printStackTrace();
      throw new Problem(e);
   }
}

// ---file system scanner----
public synchronized void nextFile (File file)
{
   fileListing.add(file);
}

public boolean acceptFile (File file)
{
   return true;
}

// ---service----
public void signContract ()
{
   demand(MUSTHAVE, null);
}

public String description ()
{
   return implName() + " Compile a list of file, store list in context. " + ARGS;
}
}
