1 package com.example.lede2;
\r
3 import android.content.Context;
\r
4 import android.os.Bundle;
\r
5 import android.util.Log;
\r
6 import android.util.Pair;
\r
7 import android.view.View;
\r
8 import android.widget.AdapterView;
\r
9 import android.widget.ArrayAdapter;
\r
10 import android.widget.Button;
\r
11 import android.widget.ListView;
\r
12 import android.widget.Spinner;
\r
13 import java.io.File;
\r
14 import java.io.FileInputStream;
\r
15 import java.io.IOException;
\r
16 import java.util.ArrayList;
\r
17 import java.util.HashMap;
\r
18 import java.util.HashSet;
\r
19 import java.util.List;
\r
20 import java.util.Properties;
\r
21 import java.util.Set;
\r
24 * Created by Brian on 4/16/2018.
\r
27 public class Irrigation extends ApplicationWithRelations{
\r
29 private SSH_MySQL getSetsAndRelations;
\r
30 private SSH_MySQL getSetList;
\r
31 private String filename;
\r
32 private ArrayList<String> relationNames; //relations in this application
\r
35 private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi
\r
39 protected void onCreate( Bundle savedInstanceState) {
\r
40 super.onCreate(savedInstanceState);
\r
41 setContentView(R.layout.home_security);
\r
42 super.context = this;
\r
43 context = super.context;
\r
44 getSetsAndRelations = new SSH_MySQL();
\r
45 getSetList = new SSH_MySQL();
\r
46 String getSetsAndRelationsCommand = this.getString(R.string.getIrrigationSetsAndRelationsCommand);
\r
47 String getSetListCommand = this.getString(R.string.getSetList);
\r
48 List<String> results = new ArrayList<>();
\r
49 final String controllerConfigFilename = this.getString(R.string.irrigationControllerConfigFile);
\r
50 filename = this.getString(R.string.setsAndRelationsFilename);
\r
51 relations = new HashMap<>();
\r
52 relationNames = new ArrayList<>();
\r
53 relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);
\r
54 relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);
\r
55 relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);
\r
56 addRelationButton = (Button) findViewById(R.id.addRelationButton);
\r
57 doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);
\r
58 deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);
\r
59 setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);
\r
60 super.hasIndependentSets = true;
\r
61 super.independentSetNames = new ArrayList<>();
\r
62 super.independentSetList = new HashMap<>();
\r
63 super.addedSetList = new HashMap<>();
\r
64 super.addedIndependentSets = new HashMap<>();
\r
66 addRelationButton.setOnClickListener(this);
\r
67 doneRelationButton.setOnClickListener(this);
\r
68 deleteRelationButton.setOnClickListener(this);
\r
69 addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);
\r
70 addRelationsListView.setFocusable(false);
\r
71 super.addedRelations = new HashMap<> ();
\r
72 HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();
\r
73 //addedRelations.put("", addedrelationsSet);
\r
74 super.applicationSetList = new HashSet<>();
\r
75 setHashMap = new HashMap<>();
\r
76 //pull data from config file on iotuser
\r
78 getSetsAndRelations.execute(getSetsAndRelationsCommand);
\r
79 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
80 results = getSetsAndRelations.getResultLines();
\r
81 while(results.size() == 0){
\r
83 results = getSetsAndRelations.getResultLines();
\r
85 System.out.println(results);
\r
86 } catch (Exception e) {
\r
87 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
90 addSSHResultsToConfig(results, controllerConfigFilename);
\r
91 System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));
\r
92 super.prop = new Properties();
\r
93 File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);
\r
94 FileInputStream fis = null;
\r
96 fis = new FileInputStream(file);
\r
97 super.prop.load(fis);
\r
100 catch (IOException ex){
\r
101 System.out.println("Error when reading SpeakerController Config file ");
\r
102 ex.printStackTrace();
\r
105 //add sets relations to the relation hashmap
\r
106 super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));
\r
107 for(int i = 0; i < super.numFields; i++){
\r
108 String name = (super.prop.getProperty("FIELD_" + i));
\r
109 if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {
\r
110 String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);
\r
111 addPair(name, relationPair);
\r
112 relationNames.add(name);
\r
114 if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {
\r
115 if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){
\r
116 independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));
\r
117 independentSetNames.add(name);
\r
120 setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));
\r
125 //pull availableSets file from iotuser
\r
127 getSetList.execute(getSetListCommand);
\r
128 Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread
\r
129 results = getSetList.getResultLines();
\r
130 while(results.size() == 0){
\r
132 results = getSetList.getResultLines();
\r
134 System.out.println(results);
\r
135 } catch (Exception e) {
\r
136 Log.d("Sleep exception", "exception at getSetsAndRelations");
\r
138 String setListFilename = this.getString(R.string.setListFilename);
\r
139 addSSHResultsToConfig(results, setListFilename);
\r
140 availableSets = createSetList(setListFilename);
\r
141 System.out.println();
\r
143 ArrayList<String> setsOrRelationArrayList = new ArrayList<>();
\r
144 setsOrRelationArrayList.add("SETS");
\r
145 setsOrRelationArrayList.add("RELATIONS");
\r
146 ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);
\r
147 setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);
\r
151 setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
153 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
154 //set array adapter values = listed relations
\r
155 if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {
\r
156 ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);
\r
157 nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
158 relationNameSpinner.setAdapter(nameAdapter);
\r
161 ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);
\r
162 nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
163 relationNameSpinner.setAdapter(nameAdapter);
\r
168 public void onNothingSelected(AdapterView<?> adapterView) {
\r
176 //sets left and right possible values to registered devices in the sets
\r
177 relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
\r
179 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
\r
182 if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {
\r
183 relationRightSpinner.setVisibility(View.VISIBLE);
\r
184 String selectedRelation = relationNameSpinner.getSelectedItem().toString();
\r
185 ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);
\r
186 ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);
\r
188 ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);
\r
189 ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);
\r
191 leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
192 rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
193 relationLeftSpinner.setAdapter(leftAdapter);
\r
194 relationRightSpinner.setAdapter(rightAdapter);
\r
197 relationRightSpinner.setVisibility(View.GONE);
\r
199 String selectedSet = relationNameSpinner.getSelectedItem().toString();
\r
200 ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));
\r
201 ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);
\r
202 leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
\r
203 relationLeftSpinner.setAdapter(leftAdapter);
\r
207 public void onNothingSelected(AdapterView<?> adapterView) {
\r
211 ArrayList<String> addedRelationsArrayList = new ArrayList<>();
\r
212 Set<String> relationTypes = super.addedRelations.keySet();
\r
213 for(String s: relationTypes) {
\r
214 for (Pair<String, String> temp : super.addedRelations.get(s)) {
\r
215 addedRelationsArrayList.add(temp.first + " " + temp.second);
\r
218 adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);
\r
219 addRelationsListView.setAdapter(adapter);
\r
220 addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
\r
221 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
\r
223 for(int i= 0; i < relationNames.size(); i++){
\r
224 Pair<String, String> tempPair = relations.get(relationNames.get(i));
\r
225 applicationSetList.add(tempPair.first);
\r
226 applicationSetList.add(tempPair.second);
\r