/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. */ package org.sintef.thingml; import javax.swing.*; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Properties; /** * Created by bmori on 26.05.2015. */ public class ThingMLSettings { private static ThingMLSettings ourInstance = new ThingMLSettings(); public static ThingMLSettings getInstance() { return ourInstance; } private ThingMLSettings() { } public boolean isWindows() { String os = System.getProperty("os.name").toLowerCase(); return (os.indexOf("win") >= 0); } public boolean isMac() { String os = System.getProperty("os.name").toLowerCase(); return (os.indexOf("mac") >= 0); } public boolean isUnix() { String os = System.getProperty("os.name").toLowerCase(); return (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0); } public boolean isValidArduinoDir(String arduino_dir) { if (arduino_dir == null) return false; File arduino_dir_file = new java.io.File(arduino_dir); // Check if the provided file exists and is a directory if (!arduino_dir_file.exists()) return false; if (!arduino_dir_file.isDirectory()) return false; // Check that it contains something that looks like an arduino distrib List<String> file_list = new ArrayList<String>(Arrays.asList(arduino_dir_file.list())); if (!file_list.contains("hardware")) return false; if (!file_list.contains("lib")) return false; if (!file_list.contains("libraries")) return false; if (!file_list.contains("tools")) return false; return true; } public File get_settings_file() { // Get the user home dir File userdir = new File(System.getProperty("user.home")); if (!userdir.exists() || !userdir.isDirectory()) { System.err.println("ERROR : Cannot find user directory"); } // Get the .thingml configuration folder File confdir = new File(userdir, ".thingml"); if (!confdir.exists()) confdir.mkdirs(); // Get the settings.properties file File settings_file = new File(confdir, "settings.properties"); return settings_file; } public Properties get_settings() { Properties settings = new java.util.Properties(); File settings_file = get_settings_file(); try { if (settings_file.exists()) { // Load the file settings.load(new FileInputStream(settings_file)); } else { // Create the file settings.store(new FileOutputStream(settings_file), null); } } catch (Exception e) { e.printStackTrace(); } return settings; } public File get_default_work_dir() { Properties settings = get_settings(); String default_work_dir = settings.getProperty("default_work_dir"); if (default_work_dir == null) return null; File default_work_dir_file = new File(default_work_dir); if (!default_work_dir_file.exists()) return null; if (!default_work_dir_file.isDirectory()) return null; return default_work_dir_file; } public void store_default_work_dir(File default_work_dir) { Properties settings = get_settings(); settings.put("default_work_dir", default_work_dir.getAbsolutePath()); try { settings.store(new FileOutputStream(get_settings_file()), null); } catch (Exception e) { e.printStackTrace(); } } public String get_arduino_lib_dir() { String result = get_arduino_dir(); if (result == null) return null; if (isWindows()) { return result; } else if (isMac()) { // TODO: check where le libraries are on a MAC ! return result; } else if (isUnix()) { // Special case for the arduino install from Ubuntu packet if (result == "/usr/share/arduino") return "/usr/lib/jni"; // Default unix location return result + "/lib"; // for the arduino linux distribution } return result; } public String get_arduino_dir() { Properties settings = get_settings(); String _arduino_dir = settings.getProperty("arduino_dir"); if (isValidArduinoDir(_arduino_dir)) return _arduino_dir; else return null; } public String get_arduino_dir_or_choose_if_not_set(java.awt.Component parent) { Properties settings = get_settings(); String _arduino_dir = settings.getProperty("arduino_dir"); // Ask for the arduino_dir if it is not registered while (!isValidArduinoDir(_arduino_dir)) { JFileChooser arduino_dir_fc = new JFileChooser(); arduino_dir_fc.setDialogTitle("Select your arduino installation directory"); arduino_dir_fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = arduino_dir_fc.showOpenDialog(parent); if (returnVal == 0) { _arduino_dir = arduino_dir_fc.getSelectedFile().toString(); } else return null; // Abort } settings.put("arduino_dir", _arduino_dir); try { settings.store(new FileOutputStream(get_settings_file()), null); } catch (Exception e) { e.printStackTrace(); } return _arduino_dir; } }