/**
* Global Sensor Networks (GSN) Source Code
* Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL)
* <p/>
* This file is part of GSN.
* <p/>
* GSN is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p/>
* GSN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p/>
* You should have received a copy of the GNU General Public License
* along with GSN. If not, see <http://www.gnu.org/licenses/>.
* <p/>
* File: gsn-tiny/src/tinygsn/beans/VSensorConfig.java
*
* @author Do Ngoc Hoan
*/
package tinygsn.beans;
import java.util.ArrayList;
import tinygsn.model.wrappers.AbstractWrapper;
import android.os.Parcel;
import android.os.Parcelable;
public class VSensorConfig implements Parcelable {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private int id;
private String name;
private InputStream inputStream = null;
private DataField[] outputStructure;
private String processingClassName;
private boolean running;
private ArrayList<StreamSource> streamSources = new ArrayList<StreamSource>();
public VSensorConfig() {
}
public VSensorConfig(Parcel source) {
inputStream = new InputStream();
int idid = Integer.parseInt(source.readString());
String processingClass = source.readString();
String vsName = source.readString();
int nb = Integer.parseInt(source.readString());
for (int i = 0; i < nb; i++) {
String wrapperN = source.readString();
int windowSize = Integer.parseInt(source.readString());
int step = Integer.parseInt(source.readString());
boolean timeBased = Boolean.parseBoolean(source.readString());
int aggregator = Integer.parseInt(source.readString());
try {
StreamSource ss = new StreamSource(windowSize, step, timeBased, aggregator);
AbstractWrapper w = StaticData.getWrapperByName(wrapperN);
w.registerListener(ss);
ss.setWrapper(w);
ss.setInputStream(inputStream);
streamSources.add(ss);
inputStream.addStreamSource(ss);
DataField[] woutputStructure = ss.getWrapper().getOutputStructure();
DataField[] _outputStructure = StaticData.getProcessingClassByVSConfig(this).getOutputStructure(woutputStructure);
if (_outputStructure != null){
outputStructure = _outputStructure;
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
boolean runningState = Boolean.parseBoolean(source.readString());
this.id = idid;
this.name = vsName;
this.processingClassName = processingClass;
this.running = runningState;
try {
inputStream.setVirtualSensor(StaticData.getProcessingClassByVSConfig(this));
} catch (Exception e) {
e.printStackTrace();
}
}
public VSensorConfig(int id, String processingClass, String vsName,
ArrayList<StreamSource> ss, boolean running) {
this.id = id;
this.name = vsName;
this.processingClassName = processingClass;
this.running = running;
inputStream = new InputStream();
for (StreamSource s : ss) {
try {
s.setInputStream(inputStream);
streamSources.add(s);
inputStream.addStreamSource(s);
DataField[] woutputStructure = s.getWrapper().getOutputStructure();
DataField[] _outputStructure = StaticData.getProcessingClassByVSConfig(this).getOutputStructure(woutputStructure);
if (_outputStructure != null){
outputStructure = _outputStructure;
}
} catch (Exception e) {
e.printStackTrace();
}
}
try {
inputStream.setVirtualSensor(StaticData.getProcessingClassByVSConfig(this));
} catch (Exception e) {
e.printStackTrace();
}
}
public String getProcessingClassName() {
return processingClassName;
}
public void setProcessingClassName(String processingClassName) {
this.processingClassName = processingClassName;
}
public boolean getRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
/**
* @return Returns the inputStreams.
*/
public ArrayList<StreamSource> getStreamSource() {
return streamSources;
}
public String getName() {
return this.name;
}
/**
* @return Returns the outputStructure.
*/
public DataField[] getOutputStructure() {
return this.outputStructure;
}
/**
* @param virtualSensorName
* The name to set.
*/
public void setName(final String virtualSensorName) {
this.name = virtualSensorName;
}
/**
* @param outputStructure
* The outputStructure to set.
*/
public void setOutputStructure(DataField[] outputStructure) {
this.outputStructure = outputStructure;
}
public boolean equals(Object obj) {
if (obj instanceof VSensorConfig) {
VSensorConfig vSensorConfig = (VSensorConfig) obj;
return name.equals(vSensorConfig.getName());
}
return false;
}
public int hashCode() {
if (name != null) {
return name.hashCode();
} else {
return super.hashCode();
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(Integer.toString(id));
dest.writeString(getProcessingClassName());
dest.writeString(getName());
dest.writeString(Integer.toString(streamSources.size()));
for (StreamSource s : streamSources) {
dest.writeString(s.getWrapper().getWrapperName());
dest.writeString(Integer.toString(s.getWindowSize()));
dest.writeString(Integer.toString(s.getStep()));
dest.writeString(Boolean.toString(s.isTimeBased()));
dest.writeString(Integer.toString(s.getAggregator()));
}
dest.writeString(Boolean.toString(getRunning()));
}
public static final Parcelable.Creator<VSensorConfig> CREATOR = new Creator<VSensorConfig>() {
public VSensorConfig createFromParcel(Parcel source) {
VSensorConfig vs = new VSensorConfig(source);
StaticData.addConfig(vs.id, vs);
StaticData.saveNameID(vs.id, vs.getName());
return vs;
}
public VSensorConfig[] newArray(int size) {
return new VSensorConfig[size];
}
};
public InputStream getInputStream() {
return inputStream;
}
}