package org.apache.samoa.streams; /* * #%L * SAMOA * %% * Copyright (C) 2014 - 2015 Apache Software Foundation * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.samoa.instances.Instances; import org.apache.samoa.moa.core.InstanceExample; import org.apache.samoa.moa.core.ObjectRepository; import org.apache.samoa.moa.tasks.TaskMonitor; import com.github.javacliparser.FileOption; import com.github.javacliparser.IntOption; /** * InstanceStream for ARFF file * */ public class ArffFileStream extends FileStream { public FileOption arffFileOption = new FileOption("arffFile", 'f', "ARFF File(s) to load.", null, null, false); /*public IntOption classIndexOption = new IntOption("classIndex", 'c', "Class index of data. 0 for none or -1 for last attribute in file.", -1, -1, Integer.MAX_VALUE);*/ protected InstanceExample lastInstanceRead; private transient BufferedReader fileReader; @Override public void prepareForUseImpl(TaskMonitor monitor, ObjectRepository repository) { super.prepareForUseImpl(monitor, repository); String filePath = this.arffFileOption.getFile().getAbsolutePath(); this.fileSource.init(filePath, "arff"); this.lastInstanceRead = null; } @Override protected void reset() { try { fileSource.reset(); } catch (IOException ioe) { throw new RuntimeException("FileStream restart failed.", ioe); } if (!getNextFileStream()) { hitEndOfStream = true; throw new RuntimeException("FileStream is empty."); } } @Override protected boolean getNextFileStream() { if (this.fileReader != null) try { this.fileReader.close(); } catch (IOException ioe) { ioe.printStackTrace(); } this.inputStream = this.fileSource.getNextInputStream(); if (inputStream == null) return false; this.fileReader = new BufferedReader(new InputStreamReader(this.inputStream)); this.instances = new Instances(this.fileReader, 1, -1); if (this.classIndexOption.getValue() < 0) { this.instances.setClassIndex(this.instances.numAttributes() - 1); } else if (this.classIndexOption.getValue() > 0) { this.instances.setClassIndex(this.classIndexOption.getValue() - 1); } return true; } @Override protected boolean readNextInstanceFromFile() { try { if (this.instances.readInstance(this.fileReader)) { this.lastInstanceRead = new InstanceExample(this.instances.instance(0)); this.instances.delete(); // keep instances clean return true; } if (this.fileReader != null) { this.fileReader.close(); this.fileReader = null; } return false; } catch (IOException ioe) { throw new RuntimeException( "ArffFileStream failed to read instance from stream.", ioe); } } @Override protected InstanceExample getLastInstanceRead() { return this.lastInstanceRead; } /* * extend org.apache.samoa.moa.MOAObject */ @Override public void getDescription(StringBuilder sb, int indent) { // TODO Auto-generated method stub } }