private List<String> parse(String input) {
    ArrayList<String> tokens = new ArrayList<String>();
    int index = input.indexOf('(');
    if (index < 0) {
      tokens.add(input);
    }
    else {
      tokens.add(input.substring(0, index));
      while (++index < input.length()) {
        int depth = 0;
        int beginIndex = index;
        while ((depth >= 0) && (++index < input.length())) {
          if ((input.charAt(index) == ',') && (depth == 0)) {
            break;
          }
          if (input.charAt(index) == '(') {
            ++depth;
          }
          else if (input.charAt(index) == ')') {
            --depth;
          }
        }
        if ( index < input.length()) {
          tokens.add(input.substring(beginIndex, index));
        }
      }
    }
    return tokens;
  }