private InstanceInformation getHeader()

in samoa-instances/src/main/java/org/apache/samoa/instances/ArffLoader.java [370:470]


  private InstanceInformation getHeader() {
    //commented JD
    //this.range.setUpper(10000); //TO DO: Create a new range object with isInRange that does not need the upper limit
    String relation = "file stream";
    //System.out.println("RELATION " + relation);
    //inputAttributes = new ArrayList<Attribute>();
    //outputAttributes = new ArrayList<Attribute>();
    //ArrayList<Attribute>
    auxAttributes = new ArrayList<Attribute>();//JD
    int numAttributes = 0;
    try {
      streamTokenizer.nextToken();
      while (streamTokenizer.ttype != StreamTokenizer.TT_EOF) {
        //For each line
        //if (streamTokenizer.ttype == '@') {
        if (streamTokenizer.ttype == StreamTokenizer.TT_WORD && streamTokenizer.sval.startsWith("@") == true) {
          //streamTokenizer.nextToken();
          String token = streamTokenizer.sval.toUpperCase();
          if (token.startsWith("@RELATION")) {
            streamTokenizer.nextToken();
            relation = streamTokenizer.sval;
            //  System.out.println("RELATION " + relation);
          } else if (token.startsWith("@ATTRIBUTE")) {
            streamTokenizer.nextToken();
            String name = streamTokenizer.sval;
            //System.out.println("* " + name);
            if (name == null) {
              name = Double.toString(streamTokenizer.nval);
            }
            streamTokenizer.nextToken();
            String type = streamTokenizer.sval;
            // System.out.println("* " + name + ":" + type + " ");
            if (streamTokenizer.ttype == '{') {
              streamTokenizer.nextToken();
              List<String> attributeLabels = new ArrayList<String>();
              while (streamTokenizer.ttype != '}') {

                if (streamTokenizer.sval != null) {
                  attributeLabels.add(streamTokenizer.sval);
                  // System.out.print(streamTokenizer.sval + ",");
                } else {
                  attributeLabels.add(Double.toString(streamTokenizer.nval));
                  //System.out.print(streamTokenizer.nval + ",");
                }

                streamTokenizer.nextToken();
              }
              // System.out.println();
              //attributes.add(new Attribute(name, attributeLabels));
              //commented JD
              /* if (this.range.isInRange(numAttribute)) {
                             outputAttributes.add(new Attribute(name, attributeLabels));
                             } else {
                             inputAttributes.add(new Attribute(name, attributeLabels));
                             }*/
              auxAttributes.add(new Attribute(name, attributeLabels));
              ++numAttributes;
            } else {
              // Add attribute
              //commented JD
              /*if (this.range.isInRange(numAttribute)) {
                             outputAttributes.add(new Attribute(name));
                             } else {
                             inputAttributes.add(new Attribute(name));
                             }*/
              auxAttributes.add(new Attribute(name));
              ++numAttributes;
            }

          } else if (token.startsWith("@DATA")) {
            //System.out.print("END");
            streamTokenizer.nextToken();
            break;
          }
        }
        streamTokenizer.nextToken();
      }
      if (range != null) {
        this.range.setUpper(numAttributes);
      }
      /*if (range==null) //is single-target. All instances should go to inputAtrributes (see setClassIndex(int) from InstanceInformation )
             inputAttributes=auxAttributes;
             else//is multi-target
             {
             this.range.setUpper(numAttribute);
             for (int i=0; i<auxAttributes.size();i++)
             {
             //if (this.range.isInRange(i))
             //	outputAttributes.add(auxAttributes.get(i));
             //else
             inputAttributes.add(auxAttributes.get(i));

             }
             }*/

    } catch (IOException ex) {
      Logger.getLogger(ArffLoader.class.getName()).log(Level.SEVERE, null, ex);
    }
    // this.range.setUpper(inputAttributes.size()+outputAttributes.size());
    return new InstanceInformation(relation, auxAttributes);
  }