Should the Parameter class be replaced with Java 5 enums? My only concern is backward compatibility. I noticed that Parameter is serializable. Is this used by Lucene? I wasn't able to see any place that depended on it. The only public method, Parameter.toString() results in the same value as a Java 5 Enum.

It seems that an advanced form of enums would be helpful, too. I'm seeing a lot of "switch" statements on their value:
e.g.
In AbstractField:
    if (store == Field.Store.YES){
      this.isStored = true;
    }
    else if (store == Field.Store.NO){
      this.isStored = false;
    }
    else
throw new IllegalArgumentException("unknown store parameter " + store);

    if (index == Field.Index.NO) {
      this.isIndexed = false;
      this.isTokenized = false;
    } else if (index == Field.Index.ANALYZED) {
      this.isIndexed = true;
      this.isTokenized = true;
    } else if (index == Field.Index.NOT_ANALYZED) {
      this.isIndexed = true;
      this.isTokenized = false;
    } else if (index == Field.Index.NOT_ANALYZED_NO_NORMS) {
      this.isIndexed = true;
      this.isTokenized = false;
      this.omitNorms = true;
    } else if (index == Field.Index.ANALYZED_NO_NORMS) {
      this.isIndexed = true;
      this.isTokenized = true;
      this.omitNorms = true;
    } else {
throw new IllegalArgumentException("unknown index parameter " + index);
    }

This could be reduced to:
this.stored = store.isStored();
this.isIndexed = index.isIndexed();
this.isTokenized = index.isTokenized();
this.omitNorms = index.omitNorms();

With the following:
public enum Store {
  YES   { public boolean isStored() { return true; } },
  NO    { public boolean isStored() { return false; } };

  // Determine whether this is stored or not
  abstract boolean isStored();
}

public enum Index {
ANALYZED {
   public boolean isIndexed() { return true; }
   public boolean isTokenized() { return true; }
   public boolean omitNorms() { return false; }
   ...
},
...

abstract boolean isIndexed();
abstract boolean isTokenized();
abstract boolean omitNorms();
...
}

What I like about this pattern is that it clearly documents what each member does. As it is it is spread around in the files.

One can add a "picker" method to these to serve as a factory. E.g. given indexed = true, tokenized = false, ... what is the appropriate value from the Index enum.



-- DM


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to