package com.paessler.prtg.jmx.sensors;
import java.util.List;
import java.util.Vector;
import com.google.gson.JsonObject;
import com.paessler.prtg.jmx.Logger;
import com.paessler.prtg.jmx.definitions.PingSensorDefinition;
import com.paessler.prtg.jmx.definitions.SensorConstants;
import com.paessler.prtg.jmx.sensors.profile.Profile;
public abstract class RemoteSensor<T> extends Sensor {
//----------------------------------------------------------------------
protected String remoteHost;
protected int remotePort;
protected String remoteProtocol;
protected long timeout = 1000;
protected String vectorPropertyName = "namevector";
protected String vectorSeparator = ",";
List<T> vectorOfValues = null;
// ----------------------------------------------------
public RemoteSensor(){
super();
}
// ----------------------------------------------------
public RemoteSensor(RemoteSensor<T> toclone){
super(toclone);
remoteHost = toclone.remoteHost;
remotePort = toclone.remotePort;
remoteProtocol = toclone.remoteProtocol;
timeout = toclone.timeout;
vectorPropertyName = toclone.vectorPropertyName;
vectorSeparator = toclone.vectorSeparator;
getVectorOfValues().addAll(toclone.getVectorOfValues());
}
// ----------------------------------------------------
public List<T> getVectorOfValues()
{
if(vectorOfValues == null){
// vectorOfValues = new Vector<T>();
vectorOfValues = new Vector<T>();
}
return vectorOfValues;
}
// ---------------------------
public void setVectorOfValues(List<T> vect) {
this.vectorOfValues = vect;
}
// ---------------------------
protected void addVectorEntry(T value){
List<T> vect = getVectorOfValues();
if(vect != null && vect.size() <25){
getVectorOfValues().add(value);
} else {
Logger.log("List too big, failes to AddEntry("+value.toString()+")");
}
}
// ----------------------------------------------------
// --------------------------------------------------------
@Override
public String toString() {return super.toString()+"|"+(remoteProtocol != null ?remoteProtocol+":" : "")+remoteHost+":"+remotePort;}
// ----------------------------------------------------------------------
//----------------------------------------------------------------------
private boolean initialized = false;
public void setInitialized(boolean val) {initialized = val;};
public boolean isInitialized() {return initialized;};
//----------------------------------------------------------------------
public String getVectorPropertyName() { return vectorPropertyName;}
public void setVectorPropertyName(String vectorPropertyName) {this.vectorPropertyName = vectorPropertyName;}
// ----------------------
public String getVectorSeparator() { return vectorSeparator;}
public void setVectorSeparator(String vectorSeparator) {this.vectorSeparator = vectorSeparator;}
// ----------------------
public String getRemoteHost() { return remoteHost;}
public void setRemoteHost(String remoteHost) { this.remoteHost = remoteHost;}
// ----------------------
public int getRemotePort() {return remotePort;}
public void setRemotePort(int remotePort) { this.remotePort = remotePort; }
// ----------------------
public String getRemoteProtocol() { return remoteProtocol;}
public void setRemoteProtocol(String remoteProtocol) { this.remoteProtocol = remoteProtocol;}
// ----------------------
public long getTimeout() {return timeout;}
public void setTimeout(long timeout) { this.timeout = timeout; }
//----------------------------------------------------------------------
protected void init(){
}
// ---------------------------
protected void addVectorEntry(String value, boolean inoutonly){
}
//----------------------------------------------------------------------
public void loadVectorFromJson(String jsonstring) {
if (jsonstring != null && !jsonstring.isEmpty()) {
String[] intarr = jsonstring.split(getVectorSeparator());
for(String curr: intarr){
addVectorEntry(curr, false);
}
}
}
//----------------------------------------------------------------------
public void loadVectorFromJson(JsonObject json) {
if (json != null && !json.isJsonNull()) {
loadVectorFromJson(getJsonElementString(json, getVectorPropertyName()));
}
}
//----------------------------------------------------------------------
@Override
public void loadFromJson(JsonObject json) throws Exception{
// Local parameters
String tmpval = getJsonElementString(json, SensorConstants.REMOTE_HOST);
if (tmpval != null && !tmpval.isEmpty()) {
setRemoteHost(tmpval);
}
tmpval = getJsonElementString(json, SensorConstants.REMOTE_PROTOCOL);
if (tmpval != null && !tmpval.isEmpty()) {
setRemoteProtocol(tmpval);
}
setRemotePort(getJsonElementInt(json, SensorConstants.REMOTE_PORT, getRemotePort()));
setTimeout(getJsonElementLong(json, SensorConstants.REMOTE_PORT, getTimeout()));
loadVectorFromJson(json);
// Delegate
super.loadFromJson(json);
}
// ----------------------------------------------------------------------
@Override
public void loadFrom(Profile profile) {
super.loadFrom(profile);
Object prop = profile.getProperty(SensorConstants.REMOTE_HOST);
if(prop != null){
getDefinition().setFieldDefaultValue(SensorConstants.REMOTE_HOST, prop.toString());
}
prop = profile.getProperty(SensorConstants.REMOTE_PORT);
if(prop != null){
getDefinition().setFieldDefaultValue(SensorConstants.REMOTE_PORT, prop.toString());
}
prop = profile.getProperty(SensorConstants.REMOTE_PROTOCOL);
if(prop != null){
getDefinition().setFieldDefaultValue(SensorConstants.REMOTE_PROTOCOL, prop.toString());
}
}
//----------------------------------------------------------------------
}