--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class DriversAddActivity extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.drivers_add);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ Intent intent = getIntent();\r
+ String getSetsCommand = intent.getExtras().getString("getConfigCommand");\r
+\r
+\r
+ String getIoTDeviceAddressListCommand = this.getString(R.string.getIoTDeviceAddress); //edit this to new file\r
+ List<String> results = new ArrayList<>();\r
+ final String driverConfigFilename = this.getString(R.string.driverConfigFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ super.hasRelations = false;\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<>();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ System.out.println("THIS COMMAND " + getSetsCommand);\r
+\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, driverConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(driverConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), driverConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ super.hasRelations = true;\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getIoTDeviceAddressListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ if(super.hasIndependentSets){\r
+ setsOrRelationArrayList.add("SETS");\r
+\r
+ }\r
+ if(super.hasRelations) {\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ }\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ Collections.sort(availableDevicesLeft);\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+}\r
+\r