tested and improved ConfigurationHandler
This commit is contained in:
parent
68baa9e06f
commit
51b0cae86f
5
APED/app/src/main/assets/defaultConfig.json
Normal file
5
APED/app/src/main/assets/defaultConfig.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"address": "192.168.2.203",
|
||||||
|
"port" : 8080,
|
||||||
|
"favorites" : [ ]
|
||||||
|
}
|
@ -11,9 +11,13 @@ import android.view.MenuItem;
|
|||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ListView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.example.aped.communication.Communicator;
|
import com.example.aped.communication.Communicator;
|
||||||
|
import com.example.aped.ui.all_IOs.AllIOsFragment;
|
||||||
|
import com.example.aped.ui.all_IOs.MainListViewAdapter;
|
||||||
|
import com.example.aped.utils.ConfigurationHandler;
|
||||||
import com.example.aped.utils.ExternalStorageHandler;
|
import com.example.aped.utils.ExternalStorageHandler;
|
||||||
import com.example.aped.utils.IFAVORITES;
|
import com.example.aped.utils.IFAVORITES;
|
||||||
import com.example.aped.utils.IXML;
|
import com.example.aped.utils.IXML;
|
||||||
@ -55,10 +59,11 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
public IXML xml;
|
public IXML xml;
|
||||||
/** zur Verwendung von uebergabe anstatt der direkten Einbindung.*/
|
/** zur Verwendung von uebergabe anstatt der direkten Einbindung.*/
|
||||||
public Communicator uebergabe;
|
public Communicator uebergabe;
|
||||||
|
/** Handler for the custom user configurations. **/
|
||||||
|
public ConfigurationHandler configurationHandler;
|
||||||
/** zur Verwendung von favorite anstatt der direkten Einbindung.*/
|
/** zur Verwendung von favorite anstatt der direkten Einbindung.*/
|
||||||
public IFAVORITES favorite = new TestFavorites();
|
public IFAVORITES favorite = new TestFavorites();
|
||||||
/** allgemeines.*/
|
/** allgemeines.*/
|
||||||
private String ip = "192.168.1.220";
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param savedInstanceState
|
* @param savedInstanceState
|
||||||
@ -68,8 +73,9 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
//checks that the permission to read and write the xml is granted
|
//checks that the permission to read and write the xml is granted
|
||||||
ensurePermissions();
|
ensurePermissions();
|
||||||
setXML();
|
setupConfigs();
|
||||||
uebergabe = new Communicator(ip, 8080, this);
|
uebergabe = new Communicator(configurationHandler.getAddress(), configurationHandler.getPort(), this);
|
||||||
|
uebergabe.downloadXML();
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
@ -87,7 +93,6 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
NavigationUI.setupActionBarWithNavController(this,
|
NavigationUI.setupActionBarWithNavController(this,
|
||||||
navController, mAppBarConfiguration);
|
navController, mAppBarConfiguration);
|
||||||
NavigationUI.setupWithNavController(navigationView, navController);
|
NavigationUI.setupWithNavController(navigationView, navController);
|
||||||
//xml = new TestXML();
|
|
||||||
}
|
}
|
||||||
/** Fügt Elemente zur Aktionsleiste hinzu, wenn diese vorhanden ist.*/
|
/** Fügt Elemente zur Aktionsleiste hinzu, wenn diese vorhanden ist.*/
|
||||||
@Override
|
@Override
|
||||||
@ -114,7 +119,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
alert.setMessage("Please enter the ip address of the "
|
alert.setMessage("Please enter the ip address of the "
|
||||||
+ "device to be connected");
|
+ "device to be connected");
|
||||||
final EditText input = new EditText(MainActivity.this);
|
final EditText input = new EditText(MainActivity.this);
|
||||||
input.setText(ip);
|
input.setText(configurationHandler.getAddress());
|
||||||
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT);
|
LinearLayout.LayoutParams.MATCH_PARENT);
|
||||||
@ -125,11 +130,11 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
public void onClick(final DialogInterface dialog,
|
public void onClick(final DialogInterface dialog,
|
||||||
final int which) {
|
final int which) {
|
||||||
// Write your code here to execute after dialog
|
// Write your code here to execute after dialog
|
||||||
ip = input.getText().toString();
|
configurationHandler.setAddress(input.getText().toString());
|
||||||
Toast.makeText(getApplicationContext(),
|
Toast.makeText(getApplicationContext(),
|
||||||
ip + " IP connect",
|
configurationHandler.getAddress() + " IP connect",
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
uebergabe = new Communicator(ip, 8080,
|
uebergabe = new Communicator(configurationHandler.getAddress(), configurationHandler.getPort(),
|
||||||
MainActivity.this);
|
MainActivity.this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -162,6 +167,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case R.id.action_download_xml:
|
case R.id.action_download_xml:
|
||||||
|
ListView idListView = (ListView) findViewById(R.id.idListView);
|
||||||
|
idListView.setAdapter(new MainListViewAdapter(this));
|
||||||
Toast.makeText(this, "Downloaded .xml",
|
Toast.makeText(this, "Downloaded .xml",
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
break;
|
break;
|
||||||
@ -238,32 +245,52 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setXML() {
|
private void setupConfigs() {
|
||||||
try {
|
try {
|
||||||
String xmlPath = ExternalStorageHandler.
|
String externalConfigPath = ExternalStorageHandler.getExternalPrivateStorageDir(MainActivity.this);
|
||||||
getExternalPrivateStorageDir(MainActivity.this);
|
File xmlFile = new File(externalConfigPath,"config.xml");
|
||||||
File xmlFile = new File(xmlPath, "config.xml");
|
File configFile = new File(externalConfigPath, "config.json");
|
||||||
|
if(!xmlFile.exists()){
|
||||||
//create the default XML config by using the default.xml from the assets folder
|
setDefaultXML(xmlFile);
|
||||||
if (xmlFile.exists()) {
|
|
||||||
xmlFile.delete();
|
|
||||||
}
|
}
|
||||||
|
if(!configFile.exists()){
|
||||||
|
setDefaultConfig(configFile);
|
||||||
|
}
|
||||||
|
xml = new XMLHandler(xmlFile);
|
||||||
|
configurationHandler = new ConfigurationHandler(configFile.getPath());
|
||||||
|
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
Log.e("Main Activity", "failed to find the external private storage during CONFIG SETUP: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setDefaultXML(File xmlFile){
|
||||||
|
try{
|
||||||
InputStream inputStream = getAssets().open(
|
InputStream inputStream = getAssets().open(
|
||||||
"XML/Test.xml");
|
"XML/default.xml");
|
||||||
byte[] buffer = new byte[inputStream.available()];
|
byte[] buffer = new byte[inputStream.available()];
|
||||||
inputStream.read(buffer);
|
inputStream.read(buffer);
|
||||||
inputStream.close();
|
inputStream.close();
|
||||||
FileOutputStream fileOutputStream = new FileOutputStream(xmlFile);
|
FileOutputStream fileOutputStream = new FileOutputStream(xmlFile);
|
||||||
fileOutputStream.write(buffer);
|
fileOutputStream.write(buffer);
|
||||||
fileOutputStream.close();
|
fileOutputStream.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("MainActivity", "error while transferring the default.xml into the config.xml: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xml = new XMLHandler(xmlFile);
|
private void setDefaultConfig(File xmlFile){
|
||||||
} catch (FileNotFoundException e) {
|
try{
|
||||||
Log.e("Main Activity", "Exception while reading the "
|
InputStream inputStream = getAssets().open(
|
||||||
+ "external private storage dir: " + e.getMessage());
|
"defaultConfig.json");
|
||||||
} catch (ParserConfigurationException | IOException | SAXException e) {
|
byte[] buffer = new byte[inputStream.available()];
|
||||||
Log.e("Main Activity", "XMLHandler failed to initialise: "
|
inputStream.read(buffer);
|
||||||
+ e.getMessage());
|
inputStream.close();
|
||||||
|
FileOutputStream fileOutputStream = new FileOutputStream(xmlFile);
|
||||||
|
fileOutputStream.write(buffer);
|
||||||
|
fileOutputStream.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("MainActivity", "error while transferring the defaultConfig.json into the config.json: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,80 +21,6 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class ConfigurationHandler implements IFAVORITES {
|
public class ConfigurationHandler implements IFAVORITES {
|
||||||
|
|
||||||
/**
|
|
||||||
* Subclass for storing the configuration data in an OOP conform manner.
|
|
||||||
*/
|
|
||||||
private class ConfigData {
|
|
||||||
/** The address of the raspberry. **/
|
|
||||||
private String address;
|
|
||||||
/** The port of the raspberry. **/
|
|
||||||
private int port;
|
|
||||||
/** The names of the favorite devices. **/
|
|
||||||
private List<String> favoriteNames;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter for the address variable.
|
|
||||||
* @return the address of the raspberry
|
|
||||||
*/
|
|
||||||
public String getAddress() {
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter for the address variable.
|
|
||||||
* @param pAddress the new address for the raspberry
|
|
||||||
*/
|
|
||||||
public void setAddress(final String pAddress) {
|
|
||||||
this.address = address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter for the port variable.
|
|
||||||
* @return the port of the raspberry
|
|
||||||
*/
|
|
||||||
public int getPort() {
|
|
||||||
return port;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter for the port variable.
|
|
||||||
* @param pPort the new port for the raspberry
|
|
||||||
*/
|
|
||||||
public void setPort(final int pPort) {
|
|
||||||
this.port = pPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter for the favoriteNames variable.
|
|
||||||
* @return the favorite device names
|
|
||||||
*/
|
|
||||||
public List<String> getFavoriteNames() {
|
|
||||||
return favoriteNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter for the favoriteNames variable.
|
|
||||||
* @param pFavoriteNames the new favorite device names
|
|
||||||
*/
|
|
||||||
public void setFavoriteNames(final List<String> pFavoriteNames) {
|
|
||||||
this.favoriteNames = pFavoriteNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method to convert an object of {@link ConfigData} class to String.
|
|
||||||
* @return a String in JSON format
|
|
||||||
*/
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "{\n"
|
|
||||||
+ "\"address\":\"" + address + "\"\n"
|
|
||||||
+ "\"port\":\"" + port + "\"\n"
|
|
||||||
+ "\"favorites\":" + favoriteNames.toString() + "\"\n"
|
|
||||||
+ "}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** The current configurations. **/
|
/** The current configurations. **/
|
||||||
private ConfigData configurations;
|
private ConfigData configurations;
|
||||||
/** The file path of the configuration file. **/
|
/** The file path of the configuration file. **/
|
||||||
@ -106,6 +32,7 @@ public class ConfigurationHandler implements IFAVORITES {
|
|||||||
*/
|
*/
|
||||||
public ConfigurationHandler(final String configFilePath) {
|
public ConfigurationHandler(final String configFilePath) {
|
||||||
this.filePath = configFilePath;
|
this.filePath = configFilePath;
|
||||||
|
configurations = new ConfigData();
|
||||||
readJsonFile();
|
readJsonFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +130,7 @@ public class ConfigurationHandler implements IFAVORITES {
|
|||||||
new FileReader(filePath));
|
new FileReader(filePath));
|
||||||
String line;
|
String line;
|
||||||
while ((line = bufferedReader.readLine()) != null) {
|
while ((line = bufferedReader.readLine()) != null) {
|
||||||
jsonData += line + "\n";
|
jsonData += line;
|
||||||
}
|
}
|
||||||
bufferedReader.close();
|
bufferedReader.close();
|
||||||
JSONObject jsonObject = new JSONObject(jsonData);
|
JSONObject jsonObject = new JSONObject(jsonData);
|
||||||
@ -253,4 +180,78 @@ public class ConfigurationHandler implements IFAVORITES {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subclass for storing the configuration data in an OOP conform manner.
|
||||||
|
*/
|
||||||
|
private class ConfigData {
|
||||||
|
/** The address of the raspberry. **/
|
||||||
|
private String address = "";
|
||||||
|
/** The port of the raspberry. **/
|
||||||
|
private int port = -1;
|
||||||
|
/** The names of the favorite devices. **/
|
||||||
|
private List<String> favoriteNames = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for the address variable.
|
||||||
|
* @return the address of the raspberry
|
||||||
|
*/
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for the address variable.
|
||||||
|
* @param pAddress the new address for the raspberry
|
||||||
|
*/
|
||||||
|
public void setAddress(final String pAddress) {
|
||||||
|
this.address = pAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for the port variable.
|
||||||
|
* @return the port of the raspberry
|
||||||
|
*/
|
||||||
|
public int getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for the port variable.
|
||||||
|
* @param pPort the new port for the raspberry
|
||||||
|
*/
|
||||||
|
public void setPort(final int pPort) {
|
||||||
|
this.port = pPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for the favoriteNames variable.
|
||||||
|
* @return the favorite device names
|
||||||
|
*/
|
||||||
|
public List<String> getFavoriteNames() {
|
||||||
|
return favoriteNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter for the favoriteNames variable.
|
||||||
|
* @param pFavoriteNames the new favorite device names
|
||||||
|
*/
|
||||||
|
public void setFavoriteNames(final List<String> pFavoriteNames) {
|
||||||
|
this.favoriteNames = pFavoriteNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to convert an object of {@link ConfigData} class to String.
|
||||||
|
* @return a String in JSON format
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "{\n"
|
||||||
|
+ "\"address\":\"" + address + "\",\n"
|
||||||
|
+ "\"port\":\"" + port + "\",\n"
|
||||||
|
+ "\"favorites\":" + favoriteNames.toString() + "\n"
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,9 @@ import javax.xml.xpath.XPathExpression;
|
|||||||
import javax.xml.xpath.XPathExpressionException;
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
import javax.xml.xpath.XPathFactory;
|
import javax.xml.xpath.XPathFactory;
|
||||||
|
|
||||||
import kotlin.NotImplementedError;
|
/**
|
||||||
|
* Class to handle operations on the config.xml files.
|
||||||
|
*/
|
||||||
public class XMLHandler implements IXML {
|
public class XMLHandler implements IXML {
|
||||||
|
|
||||||
/** the root of the XMl file. **/
|
/** the root of the XMl file. **/
|
||||||
@ -38,12 +39,21 @@ public class XMLHandler implements IXML {
|
|||||||
* @throws IOException the XML file could not be accessed
|
* @throws IOException the XML file could not be accessed
|
||||||
* @throws SAXException the XML parse failed
|
* @throws SAXException the XML parse failed
|
||||||
*/
|
*/
|
||||||
public XMLHandler(final File xmlFile)
|
public XMLHandler(final File xmlFile) {
|
||||||
throws ParserConfigurationException, IOException, SAXException {
|
try {
|
||||||
//parse the root document from the XML file
|
DocumentBuilderFactory factory = DocumentBuilderFactory
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
.newInstance();
|
||||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
root = builder.parse(xmlFile);
|
root = builder.parse(xmlFile);
|
||||||
|
} catch (ParserConfigurationException e) {
|
||||||
|
Log.e("XMLHandler", "error while parsing the XML file: "
|
||||||
|
+ e.getMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e("XMLHandler", "error while reading from the XML file: "
|
||||||
|
+ e.getMessage());
|
||||||
|
} catch (SAXException e) {
|
||||||
|
Log.e("XMLHandler", "general SAX error: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user