1 package com.example.lede2;
\r
3 import android.content.Context;
\r
4 import android.provider.ContactsContract;
\r
5 import android.util.Log;
\r
6 import android.util.Pair;
\r
8 import java.io.BufferedWriter;
\r
10 import java.io.FileInputStream;
\r
11 import java.io.FileNotFoundException;
\r
12 import java.io.IOException;
\r
13 import java.io.OutputStreamWriter;
\r
14 import java.util.ArrayList;
\r
15 import java.util.List;
\r
16 import java.util.Properties;
\r
17 import java.util.Scanner;
\r
18 import java.util.Set;
\r
21 * Created by Brian on 2/28/2018.
\r
24 public class ConfigFileIO {
\r
26 //appends information to the bottom of file
\r
27 public static void writeToFile(String filename, String data, Context context) {
\r
29 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.
\r
30 openFileOutput(filename,
\r
31 Context.MODE_APPEND | Context.MODE_PRIVATE));
\r
32 BufferedWriter writer = new BufferedWriter(outputStreamWriter);
\r
36 } catch (IOException e) {
\r
37 Log.e("Exception", "File write failed: " + e.toString());
\r
41 //returns contents of file
\r
42 public static String readFromFile(String filename, Context context) {
\r
44 String strscan = "";
\r
47 File scanfile = context.getFileStreamPath(filename);
\r
48 Scanner scanner = new Scanner(scanfile);
\r
49 while (scanner.hasNextLine()) {
\r
50 strscan += scanner.nextLine() + "\n";
\r
53 } catch (FileNotFoundException e) {
\r
54 Log.e("login activity", "File not found: " + e.toString());
\r
62 //creates the local copy of the sql database object
\r
63 public static DatabaseObject createDatabaseObject(Context context, String idInformation){
\r
64 Properties prop = new Properties();
\r
65 String filename = context.getString(R.string.device_param_config_filename);
\r
66 File file = new File(context.getFilesDir() , filename);
\r
67 FileInputStream fis = null;
\r
69 fis = new FileInputStream(file);
\r
73 catch (IOException ex){
\r
74 System.out.println("Error when reading SpeakerController Config file ");
\r
75 ex.printStackTrace();
\r
78 int numTypes = Integer.parseInt(prop.getProperty("NUM_OF_TYPES"));
\r
79 System.out.println("numtypes: " + numTypes);
\r
80 DatabaseObject databaseObject = new DatabaseObject();
\r
81 //add all types into databaseObject
\r
82 for(int i = 0; i < numTypes; i++){
\r
83 String type = prop.getProperty("TYPE_" + i);
\r
84 String tag = prop.getProperty("TAG_" + i);
\r
85 //generates a type object, fill it with subtype objects
\r
86 DatabaseTypeObject databaseTypeObject = new DatabaseTypeObject(type, tag);
\r
87 int numSubtypes = Integer.parseInt(prop.getProperty("SUBTYPE_" + i));
\r
89 //for each subtype, create the appropriate fields
\r
90 for(int j = 0; j < numSubtypes; j++){
\r
91 String currentSubtype = "TYPE_" + i + "_" + j;
\r
92 String subtypeName = prop.getProperty(currentSubtype);
\r
93 int numAddresses = Integer.parseInt(prop.getProperty(currentSubtype + "_NUM_OF_ADDRESSES"));
\r
94 int numZigbeeAddresses = Integer.parseInt(prop.getProperty(currentSubtype + "_NUM_OF_ZBADDRESSES"));
\r
96 DatabaseSubtypeObject databaseSubtypeObject = new DatabaseSubtypeObject(subtypeName, tag, numAddresses, numZigbeeAddresses);
\r
98 if(numAddresses > 0) {
\r
99 String temp = prop.getProperty("TYPE_" + i + "_" + j + "_ADDRESS_FIELDS");
\r
100 Scanner scanner = new Scanner(temp);
\r
101 ArrayList<String> addressFieldNames = new ArrayList<>();
\r
102 while (scanner.hasNext()) {
\r
103 addressFieldNames.add(scanner.next());
\r
105 //fill in the address fields for each subtype. May have to do multiple times for some subtypes
\r
106 System.out.println("num addresses" + numAddresses);
\r
107 for (int k = 0; k < numAddresses; k++) {
\r
108 ArrayList<Pair<String, String>> addressParamList = new ArrayList<>();
\r
109 for (int l = 0; l < addressFieldNames.size(); l++) {
\r
110 System.out.println(prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k));
\r
111 String fieldValue = prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k);
\r
112 Pair<String, String> fieldPair = new Pair<>(addressFieldNames.get(l), fieldValue);
\r
113 addressParamList.add(fieldPair);
\r
115 databaseSubtypeObject.getAddressParams().add(addressParamList);
\r
116 databaseSubtypeObject.setNumAddressParams(addressFieldNames.size());
\r
120 if(numZigbeeAddresses > 0) {
\r
121 String temp = prop.getProperty("TYPE_" + i + "_" + j + "_ZBADDRESS_FIELDS");
\r
122 Scanner scanner = new Scanner(temp);
\r
123 ArrayList<String> zigbeeAddressFieldNames = new ArrayList<>();
\r
124 while (scanner.hasNext()) {
\r
125 zigbeeAddressFieldNames.add(scanner.next());
\r
127 //fill in the address fields for each subtype. May have to do multiple times for some subtypes
\r
128 System.out.println("num addresses" + numZigbeeAddresses);
\r
129 for (int k = 0; k < numZigbeeAddresses; k++) {
\r
130 ArrayList<Pair<String, String>> zigbeeAddressParamList = new ArrayList<>();
\r
131 for (int l = 0; l < zigbeeAddressFieldNames.size(); l++) {
\r
132 // System.out.println(prop.getProperty(zigbeeAddressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k));
\r
133 String fieldValue = prop.getProperty(zigbeeAddressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k);
\r
134 //System.out.println("prop command: " + " FIELD VALUE " + fieldValue);
\r
135 Pair<String, String> fieldPair = new Pair<>(zigbeeAddressFieldNames.get(l), fieldValue);
\r
136 zigbeeAddressParamList.add(fieldPair);
\r
138 databaseSubtypeObject.getZigbeeAddressParams().add(zigbeeAddressParamList);
\r
139 databaseSubtypeObject.setNumZigbeeParams(zigbeeAddressFieldNames.size());
\r
151 //fill in the device fields for each subtype. There should only be up to 1 set of device fields
\r
152 int numDevFields = Integer.parseInt(prop.getProperty("TYPE_" + i + "_" + j + "_NUM_OF_DEVICE_INFO"));
\r
153 if(numDevFields > 0) {
\r
154 String temp = prop.getProperty("TYPE_" + i + "_" + j + "_" + "DEVICE_FIELDS");
\r
155 Scanner scanner = new Scanner(temp);
\r
156 ArrayList<String> addressFieldNames = new ArrayList<>();
\r
157 while (scanner.hasNext()) {
\r
158 addressFieldNames.add(scanner.next());
\r
160 for (int l = 0; l < addressFieldNames.size(); l++) {
\r
161 String fieldValue = prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j);
\r
162 Pair<String, String> fieldPair = new Pair<>(addressFieldNames.get(l), fieldValue);
\r
163 databaseSubtypeObject.addParam(fieldPair);
\r
165 databaseSubtypeObject.setNumParams(addressFieldNames.size());
\r
167 databaseTypeObject.addSubtype(subtypeName, databaseSubtypeObject);
\r
169 System.out.println();
\r
170 databaseObject.addTypeObject( type, databaseTypeObject);
\r
172 //Now add individual instances of each device
\r
175 Scanner scanner = new Scanner(idInformation);
\r
177 while (scanner.hasNext()) {
\r
178 temp = scanner.next();
\r
179 Set<String> typeset = databaseObject.getKeySet();
\r
180 for (String key : typeset) {
\r
181 DatabaseTypeObject typeObject = databaseObject.getTypeObject(key);
\r
182 Set<String> subtypeset = typeObject.getKeySet();
\r
183 if (subtypeset.contains(temp)) {
\r
184 DatabaseSubtypeObject subtypeObject = typeObject.getSubtypeObject(temp);
\r
185 subtypeObject.addDevice(scanner.next());
\r
194 return databaseObject;
\r
199 //starts a new file instead of appending it
\r
200 public static void writeToNewFile(String filename, String data, Context context) {
\r
202 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.
\r
203 openFileOutput(filename, Context.MODE_PRIVATE));
\r
204 BufferedWriter writer = new BufferedWriter(outputStreamWriter);
\r
205 writer.write(data);
\r
208 } catch (IOException e) {
\r
209 Log.e("Exception", "File write failed: " + e.toString());
\r
213 public static ArrayList<String> getMACAddressesDevDat(String filename, Context context) {
\r
214 ArrayList<String> macAddresses = new ArrayList<>();
\r
215 String devicedat = ConfigFileIO.readFromFile(filename, context);
\r
216 System.out.println(devicedat);
\r
217 Scanner scanner = new Scanner(devicedat);
\r
218 if(scanner.hasNext()) {
\r
221 macAddresses.add(scanner.next());
\r
223 } while (scanner.hasNext());
\r
224 System.out.println(devicedat);
\r
226 return macAddresses;
\r
229 public static ArrayList<String> getMACAddressesDHCP(String filename, Context context) {
\r
230 ArrayList<String> macAddresses = new ArrayList<>();
\r
231 String dhcp = ConfigFileIO.readFromFile(filename, context);
\r
232 Scanner scanner = new Scanner(dhcp);
\r
235 macAddresses.add(scanner.next());
\r
239 }while(scanner.hasNext());
\r
240 System.out.println(dhcp);
\r
241 return macAddresses;
\r