import java.io.*;

class WFilter implements FilenameFilter
{
  public WFilter(String s) {
    if(s==null || s.equals(""))
      pass=true;
    else
      pass=false;

    myFilter=s;
    len=myFilter.length();
  }

  public boolean accept(File dir, String name) {
    if(pass)
      return true;

    int nlen=name.length();

    String fComp;
    String nComp;
    int nPos=0;
    int fPos=0;
    int fLen=0;
    boolean end=false;
    boolean wildcard1=false;
    boolean wildcard2=false;
    int i;

    while(!end) {
      // find filter compare string
      nPos=nPos+fLen;
      fPos=fPos+fLen;
      i=myFilter.indexOf('*',fPos);
      if(i<0) {
        fComp=myFilter.substring(fPos,len);
        end=true;
      }
      else {
        fComp=myFilter.substring(fPos,i);
        wildcard1=true;
      }

      fLen=fComp.length();
      if(fLen==0) // done matching
        if(fPos<len)  { // hit wildcard
          fPos++;
          wildcard2=wildcard1;
          continue;
        }
        else
          return true;  // done matching

      // find name compare string
      if(nlen<fLen+nPos)  // lengths are different, not same
        return false;
      if(!wildcard2) {
        nComp=name.substring(nPos,fLen+nPos);

        // compare
        if(!fComp.equals(nComp))
          return false;
      }
      else {  // since following wildcard, could be anywhere after postition
        char c=fComp.charAt(0);
        boolean cont=true;
        while(cont) {
          i=name.indexOf(c,nPos);
          if(i<0)
            return false;
          else {
            nPos=i;
            nComp=name.substring(nPos,fLen+nPos);

            // compare
            if(fComp.equals(nComp))
              cont=false;
          }
        }  // while
      }
      wildcard2=wildcard1;
      fPos++;
    }
    return true;
  }  // while

  boolean pass;
  String myFilter;
  int len;
}