> readUserSettings() {
- return readUserSettings(config);
- }
-
/**
- * @see Config#readUserSettings(String)
+ * Reads all settings saved in a file>
+ *
+ * @param file from which the settings should be read from
+ * @return the settings
+ *
+ * @since 1.12.0
*/
- public static TreeMap> readUserSettings(File file) {
- TreeMap> rootInfos = new TreeMap<>();
+ public static TreeMap> readSettings(File file) {
+ TreeMap> returnMap = new TreeMap<>();
+ String settingName = null;
+ Map settingValues = new HashMap<>();
+
try {
- XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
- XMLStreamReader xmlStreamReader;
- try {
- xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(file));
- } catch (FileNotFoundException e) {
- return rootInfos;
- }
+ BufferedReader configReader = new BufferedReader(new FileReader(file));
- HashMap infos = new HashMap<>();
+ String line;
- String infoName = null;
- StringBuilder infoCharacters = new StringBuilder();
- String rootName = null;
+ while ((line = configReader.readLine()) != null) {
- while (xmlStreamReader.hasNext()) {
-
- int eventType = xmlStreamReader.next();
-
- switch (eventType) {
- case XMLStreamReader.START_ELEMENT:
- String startTag = xmlStreamReader.getLocalName().trim();
- if (startTag != null) {
- if (protectedConfigNames.contains(startTag)) {
- continue;
- } else if (rootName == null) {
- rootName = startTag;
- } else {
- infoName = startTag;
- }
- }
- break;
- case XMLStreamReader.CHARACTERS:
- if (infoName != null) {
- if (!xmlStreamReader.getText().trim().equals("")) {
- infoCharacters.append(xmlStreamReader.getText());
- }
- }
- break;
- case XMLStreamReader.END_ELEMENT:
- String endTag = xmlStreamReader.getLocalName().trim();
- if (endTag != null) {
- if (protectedConfigNames.contains(endTag)) {
- continue;
- } else if (endTag.equals(rootName)) {
- rootInfos.put(rootName, infos);
- rootName = null;
- infos = new HashMap<>();
- infoCharacters = new StringBuilder();
- } else {
- infos.put(infoName, infoCharacters.toString());
- infoName = null;
- infoCharacters = new StringBuilder();
- }
- }
- break;
+ if (line.isEmpty()) {
+ continue;
+ } else if (line.startsWith("[") && line.endsWith("]")) {
+ if (settingName != null) {
+ returnMap.put(settingName, settingValues);
+ settingValues = new HashMap<>();
+ }
+ String[] newSetting = line.replace("[", "").replace("]", "").split(" ");
+ settingName = newSetting[0].trim();
+ String[] encoded = newSetting[1].split("=");
+ settingValues.put("encrypted", encoded[1]);
+ } else {
+ String[] keyValue = line.split("=");
+ try {
+ settingValues.put(keyValue[0], keyValue[1]);
+ } catch (IndexOutOfBoundsException e) {
+ settingValues.put(keyValue[0], "");
+ }
}
}
- xmlStreamReader.close();
- } catch (XMLStreamException e) {
+
+ if (settingName != null) {
+ returnMap.put(settingName, settingValues);
+ }
+
+ configReader.close();
+ } catch (FileNotFoundException e) {
e.printStackTrace();
+ warningAlert("Couldn't find file '" + file.getAbsolutePath() + "'"); // this should never raise
+ } catch (IOException e) {
+ e.printStackTrace();
+ errorAlert("An IO Exception occurred", e.getMessage());
}
- System.out.println(rootInfos);
- return rootInfos;
- }
-
- /**
- * Shows a GUI where the user can choose and load saved settings
- *
- * @param filename of the file with the settings
- * @return the setting that the user has chosen
- */
- public static TreeMap> readUserSettings(String filename) {
- return readUserSettings(new File(filename));
- }
-
- /**
- * Writes settings (could be more than one) to the pre-defined config file
- *
- * @see Config#writeConfig(File, TreeMap, Map)
- */
- public static void writeConfig(TreeMap> userSettings) {
- writeConfig(config, userSettings, null);
- }
-
- /**
- * Writes settings (could be more than one) to the pre-defined config file
- *
- * @see Config#writeConfig(File, TreeMap, Map)
- */
- public static void writeConfig(TreeMap> userSettings, Map encryptedSettings) {
- writeConfig(config, userSettings, encryptedSettings);
- }
-
- /**
- * Writes settings (could be more than one) to the pre-defined config file
- *
- * @see Config#writeConfig(String, TreeMap, Map)
- */
- public static void writeConfig(String filename, TreeMap> userSettings) {
- writeConfig(filename, userSettings, null);
- }
-
- /**
- * Writes settings (could be more than one) to the pre-defined config file
- *
- * @see Config#writeConfig(File, TreeMap, Map)
- */
- public static void writeConfig(File file, TreeMap> userSettings) {
- writeConfig(file, userSettings, null);
- }
-
- /**
- * Writes settings (could be more than one) to a file
- *
- * @see Config#writeConfig(String, TreeMap, Map)
- */
- public static void writeConfig(String filename, TreeMap> userSettings, Map encryptedSettings) {
- writeConfig(new File(filename), userSettings, encryptedSettings);
+ return returnMap;
}
/**
* Writes settings (could be more than one) to a file
*
* @param file where the settings should be written in
- * @param userSettings of the user
- * @param encryptedSettings says which settings from {@param userSettings} should be encrypted with a password
+ * @param settings of the user
+ *
+ * @since 1.12.0
*/
- public static void writeConfig(File file, TreeMap> userSettings, Map encryptedSettings) {
- EnDecrypt.AES encryptSetting;
- StringWriter stringWriter = new StringWriter();
-
- if (encryptedSettings == null) {
- encryptedSettings = new HashMap<>();
- }
-
+ public static void writeSettings(File file, TreeMap> settings) {
try {
- XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
- XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(stringWriter);
+ BufferedWriter configWriter = new BufferedWriter(new FileWriter(file));
- xmlStreamWriter.writeStartDocument();
- xmlStreamWriter.writeStartElement("cryptoGX");
- for (Map.Entry> settingElement: userSettings.entrySet()) {
- xmlStreamWriter.writeStartElement(settingElement.getKey());
- if (encryptedSettings.containsKey(settingElement.getKey())) {
- encryptSetting = new EnDecrypt.AES(settingElement.getKey(), new byte[16]);
- for (Map.Entry entry: settingElement.getValue().entrySet()) {
- xmlStreamWriter.writeStartElement(entry.getKey());
- xmlStreamWriter.writeCharacters(encryptSetting.encrypt(entry.getValue()));
- xmlStreamWriter.writeEndElement();
- }
- } else {
- for (Map.Entry entry: settingElement.getValue().entrySet()) {
- xmlStreamWriter.writeStartElement(entry.getKey());
- xmlStreamWriter.writeCharacters(entry.getValue());
- xmlStreamWriter.writeEndElement();
+ for (Map.Entry> settingElement: settings.entrySet()) {
+ configWriter.write("[" + settingElement.getKey() + " encrypted=" + Boolean.parseBoolean(settingElement.getValue().get("encrypted")) + "]");
+ configWriter.newLine();
+ for (Map.Entry entry : settingElement.getValue().entrySet()) {
+ String key = entry.getKey();
+ if (!key.equals("encrypted")) {
+ configWriter.write(entry.getKey() + "=" + entry.getValue());
+ configWriter.newLine();
+ }
}
}
- xmlStreamWriter.writeEndElement();
- }
- xmlStreamWriter.writeEndElement();
- xmlStreamWriter.writeEndDocument();
+ configWriter.newLine();
- //prettify
-
- Source xmlInput = new StreamSource(new StringReader(stringWriter.toString()));
- StringWriter prettifyStringWriter = new StringWriter();
- StreamResult xmlOutput = new StreamResult(prettifyStringWriter);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- transformerFactory.setAttribute("indent-number", 2);
- Transformer transformer = transformerFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
- transformer.transform(xmlInput, xmlOutput);
-
- BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
- for (String s: prettifyStringWriter.getBuffer().toString().split(System.lineSeparator())) {
- bufferedWriter.write(s);
- bufferedWriter.newLine();
- }
- bufferedWriter.close();
- } catch (XMLStreamException | IOException | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException | InvalidKeySpecException | TransformerException e) {
+ configWriter.close();
+ } catch (IOException e) {
e.printStackTrace();
+ errorAlert("An error occurred while saving the settings", e.getMessage());
}
}