package de.edotzlaff.schockwelle; import android.net.wifi.WifiManager; import android.os.Build; import android.util.Log; import android.widget.Toast; import androidx.annotation.NonNull; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.Calendar; public class Datenbank { private String myAndroidID; private String myIPadress; private int myWaveSpeed; // Meter pro Sekunde private double shakeBreitengrad; private double shakeLaengengrad; private String a_androidid; private String b_localdatetime; private String c_ip; private double d_breitengrad; private double e_laengengrad; private boolean f_nativegps; private boolean g_vibration; private long h_timestamp; private int i_amplitude; private int w_wellengeschwindigkeit; private DatabaseReference mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewnodes"); private String TAG = "Datenbank"; DataSnapshot DatenBankInhalt; //######### Für andere Klassen: ########################### //Datenbank db = new Datenbank(); <--Bei Initialisierung //db.getDatafromDBnoListener(); <--OnCreate //db.getDataBaseValuesWithListener(); <--OnCreate public Datenbank(String a_androidid, String b_localdatetime, String c_ip, double d_breitengrad, double e_laengengrad, boolean f_nativegps, boolean g_vibration, long h_timestamp, int i_amplitude, int w_wellengeschwindigkeit) { this.a_androidid = a_androidid; this.b_localdatetime = b_localdatetime; this.c_ip = c_ip; this.d_breitengrad = d_breitengrad; this.e_laengengrad = e_laengengrad; this.f_nativegps = f_nativegps; this.g_vibration = g_vibration; this.h_timestamp = h_timestamp; this.i_amplitude = i_amplitude; this.w_wellengeschwindigkeit = w_wellengeschwindigkeit; } public Datenbank () { } //DatenBankInhalt wird einmalig Aktualisiert public void getDatafromDBnoListener() { mDatenbank.get().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (!task.isSuccessful()) { Log.d(TAG,"Fehler in getDatafromDBnoListener" + task.getException()); } else { setDatenBankInhalt(task.getResult()); initializeDataBase_ShockApplication_Main(); } } }); } //DatenBankInhalt wird bei Veränderung Aktualisiert public void getDataBaseValuesWithListener() { mDatenbank.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { setDatenBankInhalt(snapshot); //Geänderte DB schicken an SensorMapActivity SensorMapsActivity sensor = new SensorMapsActivity(); } @Override public void onCancelled(@NonNull DatabaseError error) { getDataBaseFailure(error); } }); } public void getDataBaseFailure (DatabaseError error) { Log.w("Datenbankfehler", error.toException()); } public void initializeDataBase_ShockApplication_Main() { if(getDatenBankInhalt().exists()) { //Wenn DB schon exisitiert if(getIfPureIDGareEmpty()) { //Wenn IDG nocht KOMPLETT leer sind und keine weiteren Children haben setEmptyDataInDBcompletly(); Log.d(TAG,"Datenbankzweig wurde für Anwendung angepasst. Weitermachen."); } }else { //Wenn DB nicht exisitert setEmptyIDGinDBcomplety(); Log.d(TAG,"Datenbankzweig nicht existent. Dieser wurde angelgt. Neustart der App nötig"); } } public void setCommand() { setAndroidIDInDB(2,"hello"); setBreitengrad(2,15); } public String getCommand() { getAndroidIDInDB(2); getBreitengrad(2); return getAndroidIDInDB(2) + getBreitengrad(2); } //########################################################################### Set / Get von IDGs public void setEmptyDataInIDG(int i) //Setzt leere Strings children von IDGi { mDatenbank.child("IDG" + i).child("a_androidid").setValue(""); mDatenbank.child("IDG" + i).child("b_localdatetime").setValue(""); mDatenbank.child("IDG" + i).child("c_ip").setValue(""); mDatenbank.child("IDG" + i).child("d_breitengrad").setValue(""); mDatenbank.child("IDG" + i).child("e_laengengrad").setValue(""); mDatenbank.child("IDG" + i).child("f_nativegps").setValue(""); mDatenbank.child("IDG" + i).child("g_vibration").setValue(""); mDatenbank.child("IDG" + i).child("h_timestamp").setValue(""); mDatenbank.child("IDG" + i).child("i_amplitude").setValue(""); mDatenbank.child("IDG" + i).child("w_wellengeschwindigkeit").setValue(""); } public boolean getStatusEmptyAboutIDG(int i) //Gibt true wenn IDG i leer ist { String androidid = getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString(); String localdatetime = getDatenBankInhalt().child("IDG" + i).child("b_localdatetime").getValue().toString(); String ip = getDatenBankInhalt().child("IDG" + i).child("c_ip").getValue().toString(); String breitengrad = getDatenBankInhalt().child("IDG" + i).child("d_breitengrad").getValue().toString(); String laengengrad = getDatenBankInhalt().child("IDG" + i).child("e_laengengrad").getValue().toString(); String nativegps = getDatenBankInhalt().child("IDG" + i).child("f_nativegps").getValue().toString(); String vibration = getDatenBankInhalt().child("IDG" + i).child("g_vibration").getValue().toString(); String timestamp = getDatenBankInhalt().child("IDG" + i).child("h_timestamp").getValue().toString(); String amplitude = getDatenBankInhalt().child("IDG" + i).child("i_amplitude").getValue().toString(); String wellengeschwindigkeit = getDatenBankInhalt().child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); if(androidid.isEmpty() && localdatetime.isEmpty() && ip.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && nativegps.isEmpty() && vibration.isEmpty() && timestamp.isEmpty() && amplitude.isEmpty() && wellengeschwindigkeit.isEmpty()) { return true; }else { return false; } } public boolean getStatusEmptyAboutIDGexceptNativeGPSandVibration(int i) //Gibt true wenn IDG i, bis auf nativegps und vibration, leer ist { String androidid = getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString(); String localdatetime = getDatenBankInhalt().child("IDG" + i).child("b_localdatetime").getValue().toString(); String ip = getDatenBankInhalt().child("IDG" + i).child("c_ip").getValue().toString(); String breitengrad = getDatenBankInhalt().child("IDG" + i).child("d_breitengrad").getValue().toString(); String laengengrad = getDatenBankInhalt().child("IDG" + i).child("e_laengengrad").getValue().toString(); String timestamp = getDatenBankInhalt().child("IDG" + i).child("h_timestamp").getValue().toString(); String amplitude = getDatenBankInhalt().child("IDG" + i).child("i_amplitude").getValue().toString(); String wellengeschwindigkeit = getDatenBankInhalt().child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); if(androidid.isEmpty() && localdatetime.isEmpty() && ip.isEmpty() && breitengrad.isEmpty() && laengengrad.isEmpty() && timestamp.isEmpty() && amplitude.isEmpty() && wellengeschwindigkeit.isEmpty()) { return true; }else { return false; } } public boolean getStatusFullAboutIDG(int i) //Gibt true wenn IDG i voll ist { String androidid = getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString(); String localdatetime = getDatenBankInhalt().child("IDG" + i).child("b_localdatetime").getValue().toString(); String ip = getDatenBankInhalt().child("IDG" + i).child("c_ip").getValue().toString(); String breitengrad = getDatenBankInhalt().child("IDG" + i).child("d_breitengrad").getValue().toString(); String laengengrad = getDatenBankInhalt().child("IDG" + i).child("e_laengengrad").getValue().toString(); String nativegps = getDatenBankInhalt().child("IDG" + i).child("f_nativegps").getValue().toString(); String vibration = getDatenBankInhalt().child("IDG" + i).child("g_vibration").getValue().toString(); String timestamp = getDatenBankInhalt().child("IDG" + i).child("h_timestamp").getValue().toString(); String amplitude = getDatenBankInhalt().child("IDG" + i).child("i_amplitude").getValue().toString(); String wellengeschwindigkeit = getDatenBankInhalt().child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); if(!androidid.isEmpty() && !localdatetime.isEmpty() && !ip.isEmpty() && !breitengrad.isEmpty() && !laengengrad.isEmpty() && !nativegps.isEmpty() && !vibration.isEmpty() && !timestamp.isEmpty() && !amplitude.isEmpty() && !wellengeschwindigkeit.isEmpty()) { return true; }else { return false; } } //########################################################################### Set / Get von kompletter DB public void setEmptyDataInDBcompletly() //Setzt leere Strings in alle children von allen IDGs { for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { mDatenbank.child("IDG" + i).child("a_androidid").setValue(""); mDatenbank.child("IDG" + i).child("b_localdatetime").setValue(""); mDatenbank.child("IDG" + i).child("c_ip").setValue(""); mDatenbank.child("IDG" + i).child("d_breitengrad").setValue(""); mDatenbank.child("IDG" + i).child("e_laengengrad").setValue(""); mDatenbank.child("IDG" + i).child("f_nativegps").setValue(""); mDatenbank.child("IDG" + i).child("g_vibration").setValue(""); mDatenbank.child("IDG" + i).child("h_timestamp").setValue(""); mDatenbank.child("IDG" + i).child("i_amplitude").setValue(""); mDatenbank.child("IDG" + i).child("w_wellengeschwindigkeit").setValue(""); } } public void setEmptyDataInDBcompletlyForNativeUse() //Setzt leere Strings in alle children von allen IDGs, wobei nativeGPS = true und vibration = false gesetzt werden { for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { mDatenbank.child("IDG" + i).child("a_androidid").setValue(""); mDatenbank.child("IDG" + i).child("b_localdatetime").setValue(""); mDatenbank.child("IDG" + i).child("c_ip").setValue(""); mDatenbank.child("IDG" + i).child("d_breitengrad").setValue(""); mDatenbank.child("IDG" + i).child("e_laengengrad").setValue(""); mDatenbank.child("IDG" + i).child("f_nativegps").setValue(true); mDatenbank.child("IDG" + i).child("g_vibration").setValue(false); mDatenbank.child("IDG" + i).child("h_timestamp").setValue(""); mDatenbank.child("IDG" + i).child("i_amplitude").setValue(""); mDatenbank.child("IDG" + i).child("w_wellengeschwindigkeit").setValue(""); } } public boolean getStatusOnEmptyDBcomplety() //Gibt true wenn alle Strings aller IDGs leer sind { int emptyIDGs = 0; for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { if(getStatusEmptyAboutIDG(i)) { emptyIDGs++; } } if(emptyIDGs == (int) getDatenBankInhalt().getChildrenCount()) { return true; }else{ return false; } } public void setVibrationInDBcompletly(boolean boolValue) //Setzt Vibration true/false in allen children aller IDGs { for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { mDatenbank.child("IDG" + i).child("g_vibration").setValue(boolValue); } } public void setNativeGPSInDBcompletly(boolean boolValue) //Setzt nativeGPS true/false in allen children aller IDGs { for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { mDatenbank.child("IDG" + i).child("f_nativegps").setValue(boolValue); } } public boolean getNativeGPScaseInDB() //Gibt true an, wenn in allen IDGs der wert nativeGPs true oder leer ist { int nativeGPS = 0; for (int i = 1; i<=getAmountOfIDGs(); i++) { if(getDatenBankInhalt().child("IDG" + i).child("f_nativegps").getValue().toString().equals("true") || getDatenBankInhalt().child("IDG" + i).child("f_nativegps").getValue().toString().isEmpty()) { nativeGPS++; } } if(nativeGPS == getDatenBankInhalt().getChildrenCount()) { return true; }else { return false; } } public boolean getIfPureIDGareEmpty() //Gibt true an, wenn alle IDGs komplett leer sind { int pureEmptyIDG = 0; for (int i = 1; i<=getDatenBankInhalt().getChildrenCount(); i++) { if(getDatenBankInhalt().child("IDG" + i).getValue().toString().isEmpty()) { pureEmptyIDG++; } } if(pureEmptyIDG == getDatenBankInhalt().getChildrenCount()) { return true; } else { return false; } } public void setNonNativeCaseInDB() //Setzt Musterwerte ein { Devices d1 = new Devices("","","",49.58967957913626,11.011387124069765,false,false,0,1000,10); //Erlangen 49.58967957913626, 11.011387124069765 Devices d2 = new Devices("","","",48.7560280895443,11.425157702952347,false,false,0,1000,10); //Ingolstadt 48.7560280895443, 11.425157702952347 Devices d3 = new Devices("","","",48.16958655466396,11.617418429524394,false,false,0,1000,10); //München 48.16958655466396, 11.617418429524394 Devices d4 = new Devices("","","",45.55620112204013,12.342516140205387,false,false,0,1000,10); //Venedig 45.55620112204013, 12.342516140205387 Devices d5 = new Devices("","","",41.9204784730154,12.651055829215638,false,false,0,1000,10); //Rom 41.9204784730154, 12.651055829215638 mDatenbank.child("IDG1").setValue(d1); mDatenbank.child("IDG2").setValue(d2); mDatenbank.child("IDG3").setValue(d3); mDatenbank.child("IDG4").setValue(d4); mDatenbank.child("IDG5").setValue(d4); mDatenbank.child("IDG5").setValue(d5); } public void setEmptyIDGinDBcomplety() //Setzt leer IDGs in einen Dantenbankzweig { for (int i = 1; i<=5; i++) { mDatenbank.child("IDG" + i).setValue(""); } } //########################################################################### Allgemeine Getter und Setter public long getAmountOfIDGs() //Gibt Anzahl der Children an { return getDatenBankInhalt().getChildrenCount(); } public void setIDGtoDevice(int i, Devices dev) //Gibt Anzahl der Children an { mDatenbank.child("IDG" + i).setValue(dev); } //Get-Set AndroidID public void setAndroidIDInDB(int i, String andoridID) { mDatenbank.child("IDG" + i).child("a_androidid").setValue(andoridID); } public String getAndroidIDInDB(int i) { return getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString(); } public boolean getAndroidIDisEmpty(int i) { if(getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString().isEmpty()) { return true; }else { return false; } } public boolean getStatusIFAndroidIDexistsInDB(String androidID) { boolean androidIDexists; for (int i = 1; i<=getAmountOfIDGs(); i++) { if(getDatenBankInhalt().child("IDG" + i).child("a_androidid").getValue().toString().equals(getMyAndroidID())) { androidIDexists = true; return androidIDexists; }else { if(i == (int) getAmountOfIDGs()) { androidIDexists = false; return androidIDexists; } } } return false; } //Get-Set LocalDatetime public void setLocalDateTimeInDB(int i, String localdatetime) { mDatenbank.child("IDG" + i).child("b_localdatetime").setValue(localdatetime); } public String getLocalDateTimeInDB(int i) { return getDatenBankInhalt().child("IDG" + i).child("b_localdatetime").getValue().toString(); } public boolean getLocalDateTimeIsEmpty(int i) { if(getDatenBankInhalt().child("IDG" + i).child("b_localdatetime").getValue().toString().isEmpty()) { return true; }else { return false; } } //Get-Set IP public void setIPInDB(int i, String ipAdress) { mDatenbank.child("IDG" + i).child("c_ip").setValue(ipAdress); } public String getIPInDB(int i) { return getDatenBankInhalt().child("IDG" + i).child("c_ip").getValue().toString(); } //Get-Set Breitengrad public void setBreitengrad(int i, double breitengrad) { mDatenbank.child("IDG" + i).child("d_breitengrad").setValue(breitengrad); } public String getBreitengrad(int i) { return getDatenBankInhalt().child("IDG" + i).child("d_breitengrad").getValue().toString(); } public boolean getBreitengradIsEmpty(int i) { if(getDatenBankInhalt().child("IDG" + i).child("d_breitengrad").getValue().toString().isEmpty()) { return true; }else { return false; } } //Get-Set Laengengrad public void setLaengengrad(int i, double laengengrad) { mDatenbank.child("IDG" + i).child("e_laengengrad").setValue(laengengrad); } public String getLaengengrad(int i) { return getDatenBankInhalt().child("IDG" + i).child("e_laengengrad").getValue().toString(); } public boolean getLaengengradIsEmpty(int i) { if(getDatenBankInhalt().child("IDG" + i).child("e_laengengrad").getValue().toString().isEmpty()) { return true; }else { return false; } } //Set GPS public void setBreitengradUndLaengengrad(int i, double breitengrad, double laengengrad) { mDatenbank.child("IDG" + i).child("d_breitengrad").setValue(breitengrad); mDatenbank.child("IDG" + i).child("e_laengengrad").setValue(laengengrad); } //Get-Set NativeGPS public void setNativeGPS(int i, boolean nativegps) { mDatenbank.child("IDG" + i).child("f_nativegps").setValue(nativegps); } public String getNativeGPS(int i) { return getDatenBankInhalt().child("IDG" + i).child("f_nativegps").getValue().toString(); } //Get-Set Vibration public void setVibration(int i, boolean vibration) { mDatenbank.child("IDG" + i).child("g_vibration").setValue(vibration); } public String getVibration(int i) { return getDatenBankInhalt().child("IDG" + i).child("g_vibration").getValue().toString(); } //Get-Set timestamp public void setTimestamp(int i, long timestamp) { mDatenbank.child("IDG" + i).child("h_timestamp").setValue(timestamp); } public String getTimestamp(int i) { return getDatenBankInhalt().child("IDG" + i).child("h_timestamp").getValue().toString(); } public boolean getTimestampIsEmpty(int i) { if(getDatenBankInhalt().child("IDG" + i).child("h_timestamp").getValue().toString().isEmpty()) { return true; }else { return false; } } //Get-Set Amplitude public void setAmplitude(int i, int amplitude) { mDatenbank.child("IDG" + i).child("i_amplitude").setValue(amplitude); } public String getAmplitude(int i) { return getDatenBankInhalt().child("IDG" + i).child("i_amplitude").getValue().toString(); } //Get-Set Wellengeschwindigkeit public void setWellengeschwindigkeit(int i, int wellengeschwindigkeit) { mDatenbank.child("IDG" + i).child("w_wellengeschwindigkeit").setValue(wellengeschwindigkeit); } public String getWellengeschwindigkeit(int i) { return getDatenBankInhalt().child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); } //########################################################################### Sontiges //########################################################################### Contruktor Getter und Setter public String getA_androidid() { return a_androidid; } public void setA_androidid(String a_androidid) { this.a_androidid = a_androidid; } public String getB_localdatetime() { return b_localdatetime; } public void setB_localdatetime(String b_localdatetime) { this.b_localdatetime = b_localdatetime; } public String getC_ip() { return c_ip; } public void setC_ip(String c_ip) { this.c_ip = c_ip; } public double getD_breitengrad() { return d_breitengrad; } public void setD_breitengrad(double d_breitengrad) { this.d_breitengrad = d_breitengrad; } public double getE_laengengrad() { return e_laengengrad; } public void setE_laengengrad(double e_laengengrad) { this.e_laengengrad = e_laengengrad; } public boolean isF_nativegps() { return f_nativegps; } public void setF_nativegps(boolean f_nativegps) { this.f_nativegps = f_nativegps; } public boolean isG_vibration() { return g_vibration; } public void setG_vibration(boolean g_vibration) { this.g_vibration = g_vibration; } public long getH_timestamp() { return h_timestamp; } public void setH_timestamp(long h_timestamp) { this.h_timestamp = h_timestamp; } public int getI_amplitude() { return i_amplitude; } public void setI_amplitude(int i_amplitude) { this.i_amplitude = i_amplitude; } public int getW_wellengeschwindigkeit() { return w_wellengeschwindigkeit; } public void setW_wellengeschwindigkeit(int w_wellengeschwindigkeit) { this.w_wellengeschwindigkeit = w_wellengeschwindigkeit; } public DataSnapshot getDatenBankInhalt() { return DatenBankInhalt; } public void setDatenBankInhalt(DataSnapshot datenBankInhalt) { DatenBankInhalt = datenBankInhalt; } public String getMyAndroidID() { return myAndroidID; } public void setMyAndroidID(String myAndroidID) { this.myAndroidID = myAndroidID; } public int getMyWaveSpeed() { return myWaveSpeed; } public void setMyWaveSpeed(int myWaveSpeed) { this.myWaveSpeed = myWaveSpeed; } public String getMyIPadress() { return myIPadress; } public void setMyIPadress(String myIPadress) { this.myIPadress = myIPadress; } public double getShakeBreitengrad() { return shakeBreitengrad; } public void setShakeBreitengrad(double shakeBreitengrad) { this.shakeBreitengrad = shakeBreitengrad; } public double getShakeLaengengrad() { return shakeLaengengrad; } public void setShakeLaengengrad(double shakeLaengengrad) { this.shakeLaengengrad = shakeLaengengrad; } }