/*******************************************************************************
* Copyright 2013-2016 alladin-IT GmbH
*
* 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.
******************************************************************************/
package at.alladin.rmbt.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Calendar;
import java.util.UUID;
import at.alladin.rmbt.shared.Helperfunctions;
public class Signal
{
final static int UNKNOWN = Integer.MIN_VALUE;
private UUID open_test_uuid;
private long uid;
private long test_id;
private Timestamp time;
private int network_type_id;
private int signal_strength; // RSSI value, used in GSM, UMTS and Wifi (sometimes in LTE)
private int gsm_bit_error_rate;
private int wifi_link_speed;
private int wifi_rssi;
private int lte_rsrp; // signal strength value as RSRP, used in LTE
private int lte_rsrq; // signal quality RSRQ, used in LTE
private int lte_rssnr;
private int lte_cqi;
private long time_ns; // relative ts in ns
private Calendar timeZone = null;
private Connection conn = null;
private String errorLabel = "";
private boolean error = false;
public Signal(final Connection conn)
{
reset();
this.conn = conn;
}
public Signal(final Connection conn, final UUID open_test_uuid, final long uid, final long test_id, final Timestamp time,
final int network_type_id, final int signal_strength, final int gsm_bit_error_rate,
final int wifi_link_speed, final int wifi_rssi,
final int lte_rsrp, final int lte_rsrq, final int lte_rssnr, final int lte_cqi,
final String timeZoneId, final long time_ns)
{
reset();
this.conn = conn;
this.open_test_uuid = open_test_uuid;
this.uid = uid;
this.test_id = test_id;
this.time = time;
this.network_type_id = network_type_id;
this.signal_strength = signal_strength;
this.gsm_bit_error_rate = gsm_bit_error_rate;
this.wifi_link_speed = wifi_link_speed;
this.wifi_rssi = wifi_rssi;
this.lte_rsrp = lte_rsrp;
this.lte_rsrq = lte_rsrp;
this.lte_rssnr = lte_rsrp;
this.lte_cqi = lte_cqi;
this.time_ns = time_ns;
timeZone = Helperfunctions.getTimeWithTimeZone(timeZoneId);
}
public void reset()
{
open_test_uuid = null;
uid = 0;
test_id = UNKNOWN;
time = null;
network_type_id = UNKNOWN;
signal_strength = UNKNOWN;
gsm_bit_error_rate = UNKNOWN;
wifi_link_speed = UNKNOWN;
wifi_rssi = UNKNOWN;
lte_rsrp = UNKNOWN;
lte_rsrq = UNKNOWN;
lte_rssnr = UNKNOWN;
lte_cqi = UNKNOWN;
time_ns = UNKNOWN;
timeZone = null;
resetError();
}
private void resetError()
{
error = false;
errorLabel = "";
}
private void setError(final String errorLabel)
{
error = true;
this.errorLabel = errorLabel;
}
public void storeSignal()
{
PreparedStatement st;
try
{
st = conn.prepareStatement(
"INSERT INTO signal(" +
"open_test_uuid, test_id, time, network_type_id, signal_strength, gsm_bit_error_rate, wifi_link_speed, wifi_rssi, " +
"lte_rsrp, lte_rsrq, lte_rssnr, lte_cqi, time_ns) " +
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
int i = 1;
// System.out.println(st2.toString());
st.setObject(i++,open_test_uuid);
if (test_id == UNKNOWN)
st.setNull(i++, Types.BIGINT);
else
st.setLong(i++, test_id);
if (time == null)
st.setNull(i++, Types.TIMESTAMP);
else
st.setTimestamp(i++, time, timeZone);
if (network_type_id == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, network_type_id);
if (signal_strength == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, signal_strength);
if (gsm_bit_error_rate == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, gsm_bit_error_rate);
if (wifi_link_speed == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, wifi_link_speed);
if (wifi_rssi == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, wifi_rssi);
if (lte_rsrp == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, lte_rsrp);
if (lte_rsrq == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, lte_rsrq);
if (lte_rssnr == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, lte_rssnr);
if (lte_cqi == UNKNOWN)
st.setNull(i++, Types.INTEGER);
else
st.setInt(i++, lte_cqi);
if (time_ns == UNKNOWN)
st.setNull(i++, Types.BIGINT);
else
st.setLong(i++, time_ns);
// System.out.println(st2.toString());
final int affectedRows2 = st.executeUpdate();
if (affectedRows2 == 0)
setError("ERROR_DB_STORE_SIGNAL");
else
{
final ResultSet rs = st.getGeneratedKeys();
if (rs.next())
// Retrieve the auto generated key(s).
uid = rs.getInt(1);
}
st.close();
}
catch (final SQLException e)
{
setError("ERROR_DB_STORE_SIGNAL_SQL");
e.printStackTrace();
}
}
public boolean hasError()
{
return error;
}
public String getError()
{
return errorLabel;
}
public UUID getOpenTestUuid()
{
return open_test_uuid;
}
public long getUid()
{
return uid;
}
public long getTest_id()
{
return test_id;
}
public Timestamp getTime()
{
return time;
}
public int getNetwork_type_id()
{
return network_type_id;
}
public int getSignal_strength()
{
return signal_strength;
}
public int getGsm_bit_error_rate()
{
return gsm_bit_error_rate;
}
public int getWifi_link_speed()
{
return wifi_link_speed;
}
public int getWifi_rssi()
{
return wifi_rssi;
}
public void setUid(final long uid)
{
this.uid = uid;
}
public void setOpenTestUuid(final UUID open_test_uuid)
{
this.open_test_uuid = open_test_uuid;
}
public void setTest_id(final long test_id)
{
this.test_id = test_id;
}
public void setTime(final Timestamp time, final String timeZoneId)
{
this.time = time;
timeZone = Helperfunctions.getTimeWithTimeZone(timeZoneId);
}
public void setNetwork_type_id(final int network_type_id)
{
this.network_type_id = network_type_id;
}
public void setSignal_strength(final int signal_strength)
{
this.signal_strength = signal_strength;
}
public void setGsm_bit_error_rate(final int gsm_bit_error_rate)
{
this.gsm_bit_error_rate = gsm_bit_error_rate;
}
public void setWifi_link_speed(final int wifi_link_speed)
{
this.wifi_link_speed = wifi_link_speed;
}
public void setWifi_rssi(final int wifi_rssi)
{
this.wifi_rssi = wifi_rssi;
}
public int getLte_rsrp()
{
return lte_rsrp;
}
public void setLte_rsrp(int lte_rsrp)
{
this.lte_rsrp = lte_rsrp;
}
public int getLte_rsrq()
{
return lte_rsrq;
}
public void setLte_rsrq(int lte_rsrq)
{
this.lte_rsrq = lte_rsrq;
}
public int getLte_rssnr()
{
return lte_rssnr;
}
public void setLte_rssnr(int lte_rssnr)
{
this.lte_rssnr = lte_rssnr;
}
public int getLte_cqi()
{
return lte_cqi;
}
public void setLte_cqi(int lte_cqi)
{
this.lte_cqi = lte_cqi;
}
public long getTime_ns() {
return time_ns;
}
public void setTime_ns(long time_ns) {
this.time_ns = time_ns;
}
}