Log in Help
Print
HomegatepluginsLang_Welshsrcwnltmorph 〉 CharacterRange.java
 
package wnlt.morph;

import java.util.Arrays;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class CharacterRange extends Variable {

  private char [] varChars;

  /**
   * Constructor
   */
  public CharacterRange() {

  }

  /**
   * Tells if any value available which can be retrieved
   * @return true if value available, false otherwise
   */
  @Override
  public boolean hasNext() {
    if(pointer<varChars.length) {
      return true;
    } else {
      return false;
    }
  }

  /**
   * Returns the next available value for this variable
   * @return value of the variable in the String format
   */
  @Override
  public String next() {
    if(pointer<varChars.length) {
      pointer++;
      return ""+varChars[pointer-1];
    } else {
      return null;
    }
  }


  /**
   * Process the provided value and stores in the underlying data structure
   * @param varName name of the variable
   * @param varValue String that contains possible different values
   * @return true if successfully stored, false otherwise
   */
  @Override
  public boolean set(String varName, String varValue) {
    this.varName = varName;
    this.varValue = varValue.trim();
    // lets process the varValue
    // remove the [- and ] from the varValue
    varValue = varValue.substring(2,varValue.length()-1);
    // we need to find the sets
    String characters = "";
    for(int i=0; i<varValue.length();i = i + 3) {
      String set = varValue.substring(i,i+3);
      char startWith = set.charAt(0);
      char endWith = set.charAt(2);
      if(startWith>endWith) {
        char temp = startWith;
        startWith = endWith;
        endWith = temp;
      }
      for(int j=startWith;j<=endWith;j++) {
        // if it is already present no need to add it
        if(characters.indexOf((char)j)<0) {
          characters = characters + (char)(j);
        }
      }
    }
    // convert it into the character array and sort it
    this.varChars = characters.toCharArray();
    Arrays.sort(this.varChars);

    // now we need to convert the varValue into the proper pattern
    // simply remove the second character (i.e. '-')
    this.varValue = new String(new StringBuffer(this.varValue).deleteCharAt(1));
    return true;
  }

  /**
   * A method that tells if the characters of the provided value are
   * from the character range only
   * @param value String of which the characters to be searched in the
   * character range
   * @return true if all characters of value string are from the
   * specified character range, false otherwise
   */
  @Override
  public boolean contains(String value) {
    for(int i=0;i<value.length();i++) {
      if(Arrays.binarySearch(this.varChars,value.charAt(i))<0) {
        return false;
      }
    }
    return true;
  }

}