1 package com.example.lede2;
\r
3 import android.content.Context;
\r
4 import android.content.Intent;
\r
5 import android.os.Bundle;
\r
6 import android.util.Log;
\r
7 import android.util.Pair;
\r
8 import android.view.View;
\r
9 import android.widget.AdapterView;
\r
10 import android.widget.ArrayAdapter;
\r
11 import android.widget.Button;
\r
12 import android.widget.ListView;
\r
13 import android.widget.Spinner;
\r
14 import java.io.File;
\r
15 import java.io.FileInputStream;
\r
16 import java.io.IOException;
\r
17 import java.util.ArrayList;
\r
18 import java.util.Collections;
\r
19 import java.util.HashMap;
\r
20 import java.util.HashSet;
\r
21 import java.util.List;
\r
22 import java.util.Properties;
\r
23 import java.util.Set;
\r
26 * Created by Brian on 4/16/2018.
\r
29 public class DriversAddActivity extends ApplicationWithRelations{
\r
31 private SSH_MySQL getSetsAndRelations;
\r
32 private SSH_MySQL getSetList;
\r
33 private ArrayList<String> relationNames; //relations in this application
\r
36 private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi
\r
40 protected void onCreate( Bundle savedInstanceState) {
\r
41 super.onCreate(savedInstanceState);
\r
42 setContentView(R.layout.drivers_add);
\r
43 super.context = this;
\r
44 context = super.context;
\r
45 getSetsAndRelations = new SSH_MySQL();
\r
46 getSetList = new SSH_MySQL();
\r
47 Intent intent = getIntent();
\r
48 String getSetsCommand = intent.getExtras().getString("getConfigCommand");
\r
51 String getIoTDeviceAddressListCommand = this.getString(R.string.getIoTDeviceAddress); //edit this to new file
\r
52 List<String> results = new ArrayList<>();
\r
53 final String driverConfigFilename = this.getString(R.string.driverConfigFilename);
\r
54 relations = new HashMap<>();
\r
55 relationNames = new ArrayList<>();
\r
56 relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);
\r
57 relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);
\r
58 relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);
\r
59 addRelationButton = (Button) findViewById(R.id.addRelationButton);
\r
60 doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);
\r
61 deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);
\r
62 setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);
\r
63 super.hasIndependentSets = true;
\r
64 super.independentSetNames = new ArrayList<>();
\r
65 super.independentSetList = new HashMap<>();
\r
66 super.addedSetList = new HashMap<>();
\r
67 super.addedIndependentSets = new HashMap<>();
\r
69 super.hasRelations = false;
\r
71 addRelationButton.setOnClickListener(this);
\r
72 doneRelationButton.setOnClickListener(this);
\r
73 deleteRelationButton.setOnClickListener(this);
\r
74 addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);
\r
75 addRelationsListView.setFocusable(false);
\r
76 super.addedRelations = new HashMap<>();
\r
77 HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();
\r
78 //addedRelations.put("", addedrelationsSet);
\r
79 super.applicationSetList = new HashSet<>();
\r
80 setHashMap = new HashMap<>();
\r
81 System.out.println("THIS COMMAND " + getSetsCommand);
\r
83 //pull data from config file on iotuser
\r
85 getSetsAndRelations.execute(getSetsCommand);
\r
86 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
87 results = getSetsAndRelations.getResultLines();
\r
88 while(results.size() == 0){
\r
90 results = getSetsAndRelations.getResultLines();
\r
92 System.out.println(results);
\r
93 } catch (Exception e) {
\r
94 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
97 addSSHResultsToConfig(results, driverConfigFilename);
\r
98 System.out.println("read from file: " + ConfigFileIO.readFromFile(driverConfigFilename, this));
\r
99 super.prop = new Properties();
\r
100 File file = new File(getApplicationContext().getFilesDir(), driverConfigFilename);
\r
101 FileInputStream fis = null;
\r
103 fis = new FileInputStream(file);
\r
104 super.prop.load(fis);
\r
107 catch (IOException ex){
\r
108 System.out.println("Error when reading SpeakerController Config file ");
\r
109 ex.printStackTrace();
\r
112 //add sets relations to the relation hashmap
\r
113 super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));
\r
114 for(int i = 0; i < super.numFields; i++){
\r
115 String name = (super.prop.getProperty("FIELD_" + i));
\r
116 if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {
\r
117 String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);
\r
118 addPair(name, relationPair);
\r
119 super.hasRelations = true;
\r
120 relationNames.add(name);
\r
122 if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {
\r
123 if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){
\r
124 independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));
\r
125 independentSetNames.add(name);
\r
128 setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));
\r
133 //pull availableSets file from iotuser
\r
135 getSetList.execute(getIoTDeviceAddressListCommand);
\r
136 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
137 results = getSetList.getResultLines();
\r
138 while(results.size() == 0){
\r
140 results = getSetList.getResultLines();
\r
142 System.out.println(results);
\r
143 } catch (Exception e) {
\r
144 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
146 String setListFilename = this.getString(R.string.setListFilename);
\r
147 addSSHResultsToConfig(results, setListFilename);
\r
148 availableSets = createSetList(setListFilename);
\r
149 System.out.println();
\r
151 ArrayList<String> setsOrRelationArrayList = new ArrayList<>();
\r
152 if(super.hasIndependentSets){
\r
153 setsOrRelationArrayList.add("SETS");
\r
156 if(super.hasRelations) {
\r
157 setsOrRelationArrayList.add("RELATIONS");
\r
159 ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);
\r
160 setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);
\r
164 setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
166 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
167 //set array adapter values = listed relations
\r
168 if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {
\r
169 ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);
\r
170 nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
171 relationNameSpinner.setAdapter(nameAdapter);
\r
174 ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);
\r
175 nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
176 relationNameSpinner.setAdapter(nameAdapter);
\r
181 public void onNothingSelected(AdapterView<?> adapterView) {
\r
189 //sets left and right possible values to registered devices in the sets
\r
190 relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
192 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
195 if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {
\r
196 relationRightSpinner.setVisibility(View.VISIBLE);
\r
197 String selectedRelation = relationNameSpinner.getSelectedItem().toString();
\r
198 ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);
\r
199 ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);
\r
201 ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);
\r
202 ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);
\r
204 leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
205 rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
206 relationLeftSpinner.setAdapter(leftAdapter);
\r
207 relationRightSpinner.setAdapter(rightAdapter);
\r
210 relationRightSpinner.setVisibility(View.GONE);
\r
212 String selectedSet = relationNameSpinner.getSelectedItem().toString();
\r
213 ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));
\r
214 Collections.sort(availableDevicesLeft);
\r
215 ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);
\r
216 leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
217 relationLeftSpinner.setAdapter(leftAdapter);
\r
221 public void onNothingSelected(AdapterView<?> adapterView) {
\r
225 ArrayList<String> addedRelationsArrayList = new ArrayList<>();
\r
226 Set<String> relationTypes = super.addedRelations.keySet();
\r
227 for(String s: relationTypes) {
\r
228 for (Pair<String, String> temp : super.addedRelations.get(s)) {
\r
229 addedRelationsArrayList.add(temp.first + " " + temp.second);
\r
232 adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);
\r
233 addRelationsListView.setAdapter(adapter);
\r
234 addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
\r
235 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
\r
237 for(int i= 0; i < relationNames.size(); i++){
\r
238 Pair<String, String> tempPair = relations.get(relationNames.get(i));
\r
239 applicationSetList.add(tempPair.first);
\r
240 applicationSetList.add(tempPair.second);
\r