diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000..a5d3a7c
Binary files /dev/null and b/icon.png differ
diff --git a/icon.svg b/icon.svg
new file mode 100644
index 0000000..cb22963
--- /dev/null
+++ b/icon.svg
@@ -0,0 +1,76 @@
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f91871b
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+ com.mundosica
+ Wifi-Manager
+ 1.0-SNAPSHOT
+ jar
+
+ UTF-8
+ 1.8
+ 1.8
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.3.2
+
+
+
+
+
+
+
diff --git a/src/main/java/com/mundosica/wifi/manager/CoarseGrid.png b/src/main/java/com/mundosica/wifi/manager/CoarseGrid.png
new file mode 100644
index 0000000..9f54e7b
Binary files /dev/null and b/src/main/java/com/mundosica/wifi/manager/CoarseGrid.png differ
diff --git a/src/main/java/com/mundosica/wifi/manager/LoginLogo.png b/src/main/java/com/mundosica/wifi/manager/LoginLogo.png
new file mode 100644
index 0000000..b901bd9
Binary files /dev/null and b/src/main/java/com/mundosica/wifi/manager/LoginLogo.png differ
diff --git a/src/main/java/com/mundosica/wifi/manager/MainController.java b/src/main/java/com/mundosica/wifi/manager/MainController.java
new file mode 100644
index 0000000..86fcf8a
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/MainController.java
@@ -0,0 +1,204 @@
+/*
+ * Licencia MIT
+ *
+ * Copyright (c) 2017 @Fitorec .
+ *
+ * Se concede permiso, de forma gratuita, a cualquier persona que obtenga una
+ * copia de este software y de los archivos de documentación asociados
+ * (el "Software"), para utilizar el Software sin restricción, incluyendo sin
+ * limitación los derechos a usar, copiar, modificar, fusionar, publicar,
+ * distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las
+ * personas a las que se les proporcione el Software a hacer lo mismo, sujeto a
+ * las siguientes condiciones:
+ *
+ * El aviso de copyright anterior y este aviso de permiso se incluirán en todas
+ * las copias o partes sustanciales del Software.
+ *
+ * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
+ * IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN,
+ * IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS
+ * AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN,
+ * DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O
+ * CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U
+ * OTRO TIPO DE ACCIONES EN EL SOFTWARE.
+ *
+ */
+package main.java.com.mundosica.wifi.manager;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ResourceBundle;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.event.EventType;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuButton;
+import javafx.scene.control.MenuItem;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableColumn.CellEditEvent;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.control.cell.TextFieldTableCell;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.stage.FileChooser;
+import javafx.stage.FileChooser.ExtensionFilter;
+import main.java.com.mundosica.wifi.manager.Model.Config;
+import main.java.com.mundosica.wifi.manager.Model.Profile;
+
+/**
+ *
+ * @author @Fitorec
+ */
+public class MainController implements Initializable {
+
+ @FXML
+ private TableView tableProfiles;
+ @FXML
+ private TableColumn columnSttus;
+ @FXML
+ private TableColumn columnName;
+ @FXML
+ private TableColumn columnMode;
+ @FXML
+ private TableColumn columnAuth;
+ @FXML
+ private TableColumn columnKey;
+ @FXML
+ private MenuButton buscarType;
+ @FXML
+ private TextField buscarField;
+
+ private static final ExtensionFilter filterXml = new ExtensionFilter("Archivo de Configuración", "*.xml");
+
+ private Profile currentProfile() {
+ return (Profile) tableProfiles.getSelectionModel().getSelectedItem();
+ }
+
+ /**
+ *
+ * @param e
+ */
+ @FXML
+ public void importar(ActionEvent e) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle("Importar Configuración");
+ fileChooser.getExtensionFilters().add(filterXml);
+ //fileChooser.setInitialFileName(p.);
+ File selectedFile = fileChooser.showOpenDialog(WifiManager.stage);
+ }
+
+ public void exportar() {
+ Profile p = currentProfile();
+ FileChooser fileChooser = new FileChooser();
+ System.out.println("Directorio: " + Config.getSavePath());
+ fileChooser.setTitle("Exportar red " + p.getName());
+ fileChooser.getExtensionFilters().add(filterXml);
+ fileChooser.setInitialDirectory(new File(Config.getSavePath()));
+ fileChooser.setInitialFileName(p.getFileName());
+ File selectedFile = fileChooser.showSaveDialog(WifiManager.stage);
+ if (selectedFile != null) {
+ Profile.export(p, selectedFile.getAbsolutePath());
+ }
+ }
+
+ /**
+ *
+ * @param ke
+ */
+ @FXML
+ public void buscar(KeyEvent ke) {
+ String search = buscarField.getText();
+ String type = "";
+ if (search.length() == 0) {
+ this.tableProfiles.getItems().clear();
+ this.tableProfiles.setItems(Profile.list());
+ }
+ this.tableProfiles.getItems().clear();
+ this.tableProfiles.setItems(Profile.search(search, type));
+ System.out.println(search);
+ }
+ /**
+ *
+ * @param ke
+ */
+ @FXML
+ public void keyOnTable(KeyEvent ke) {
+ KeyCode code = ke.getCode();
+ if (code.toString() == "DELETE") {
+ Alert alert = new Alert(AlertType.WARNING, "¿Estas seguro de borrar?", ButtonType.YES, ButtonType.CANCEL);
+ alert.showAndWait();
+ if (alert.getResult() == ButtonType.YES) {
+ Profile p = (Profile) tableProfiles.getSelectionModel().getSelectedItem();
+ NetshWlan.delete(p);
+ this.tableProfiles.getItems().clear();
+ this.tableProfiles.setItems(Profile.remove(p));
+ }
+ }
+ }
+
+ @Override
+ public void initialize(URL url, ResourceBundle rb) {
+ tableProfiles.setEditable(true);
+ columnName.setCellValueFactory(
+ new PropertyValueFactory("name")
+ );
+ columnMode.setCellValueFactory(
+ new PropertyValueFactory("connectionMode")
+ );
+ columnAuth.setCellValueFactory(
+ new PropertyValueFactory("authentication")
+ );
+ columnKey.setCellFactory(TextFieldTableCell.forTableColumn());
+ columnKey.setOnEditCommit(
+ new EventHandler>() {
+ @Override
+ public void handle(CellEditEvent t) {
+ /*t.getOldValue();
+ t.getNewValue();*/
+ }
+ }
+ );
+ columnKey.setCellValueFactory(
+ new PropertyValueFactory("keyMaterial")
+ );
+ Profile.loadList();
+ this.tableProfiles.getItems().clear();
+ this.tableProfiles.setItems(Profile.list());
+
+ /// Menu
+ ContextMenu cm = new ContextMenu();
+ MenuItem mi1 = new MenuItem("Exportar");
+ mi1.setOnAction(new EventHandler() {
+ public void handle(ActionEvent e) {
+ exportar();
+ }
+ });
+ cm.getItems().add(mi1);
+ MenuItem mi2 = new MenuItem("Compartir");
+ cm.getItems().add(mi2);
+ MenuItem mi3 = new MenuItem("Eliminar");
+ cm.getItems().add(mi3);
+ tableProfiles.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler() {
+ @Override
+ public void handle(MouseEvent t) {
+ if (t.getButton() == MouseButton.SECONDARY) {
+ cm.show(tableProfiles , t.getScreenX() , t.getScreenY());
+ Profile prof = (Profile) tableProfiles.getSelectionModel().getSelectedItem();
+ System.out.println("Profile: " + prof.getName());
+ }
+ }
+ // buscar
+ });
+ //buscarType.se
+ }
+
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/MainView.fxml b/src/main/java/com/mundosica/wifi/manager/MainView.fxml
new file mode 100644
index 0000000..a9f3e34
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/MainView.fxml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/mundosica/wifi/manager/Model/Config.java b/src/main/java/com/mundosica/wifi/manager/Model/Config.java
new file mode 100644
index 0000000..d510d9f
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/Model/Config.java
@@ -0,0 +1,51 @@
+/*
+ * Licencia MIT
+ *
+ * Copyright (c) 2017 @Fitorec .
+ *
+ * Se concede permiso, de forma gratuita, a cualquier persona que obtenga una
+ * copia de este software y de los archivos de documentación asociados
+ * (el "Software"), para utilizar el Software sin restricción, incluyendo sin
+ * limitación los derechos a usar, copiar, modificar, fusionar, publicar,
+ * distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las
+ * personas a las que se les proporcione el Software a hacer lo mismo, sujeto a
+ * las siguientes condiciones:
+ *
+ * El aviso de copyright anterior y este aviso de permiso se incluirán en todas
+ * las copias o partes sustanciales del Software.
+ *
+ * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
+ * IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN,
+ * IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS
+ * AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN,
+ * DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O
+ * CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U
+ * OTRO TIPO DE ACCIONES EN EL SOFTWARE.
+ *
+ */
+
+package main.java.com.mundosica.wifi.manager.Model;
+
+import java.util.Properties;
+import java.util.prefs.Preferences;
+
+/**
+ *
+ * @author @Fitorec
+ */
+public class Config {
+ private static Preferences prefs = Preferences.userRoot().node("main.java.com.mundosica.wifi.manager");
+ public static String getSavePath() {
+ String path = prefs.get("savePath", null);
+ System.out.println("Directorio leido:" + path);
+ if (path == null) {
+ return System.getProperty("user.home");
+ }
+ return path;
+ }
+
+ public static void setSavePath(String path) {
+ System.out.println("Directorio a guardar: " + path);
+ prefs.put("savePath", path);
+ }
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/Model/ParseProfile.java b/src/main/java/com/mundosica/wifi/manager/Model/ParseProfile.java
new file mode 100644
index 0000000..b141e15
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/Model/ParseProfile.java
@@ -0,0 +1,84 @@
+/*
+ * Licencia MIT
+ *
+ * Copyright (c) 2017 @Fitorec .
+ *
+ * Se encarga de parsear un archivo XML del tipo:
+ * URL: http://www.microsoft.com/networking/WLAN/profile/v1
+ *
+ */
+
+package main.java.com.mundosica.wifi.manager.Model;
+
+import java.io.BufferedReader;
+import java.util.HashMap;
+import java.util.Map;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.stream.Stream;
+import main.java.com.mundosica.wifi.manager.NetshWlan;
+
+
+/**
+ *
+ * @author @Fitorec
+ */
+public class ParseProfile {
+
+ private ParseProfile(){}
+
+ /**
+ *
+ * @param fileName
+ * @return
+ */
+ public static Map get(String fileName) {
+ if (fileName == null || fileName.length()< 4 ) {
+ throw new NullPointerException("input cannot be null");
+ }
+ Stream fContent = ParseProfile.readFile(fileName);
+ ArrayList instance = new ArrayList<>();
+ Map xmlData = new HashMap();
+ fContent.forEach(line -> {
+ for (int i=0; i< line.length() - 2; i++) {
+ Character c = line.charAt(i);
+ // Getting new instance: '<'Instance
+ if (c == '<' && line.charAt(i+1) != '?') {
+ if (line.charAt(i+1) == '/') {
+ instance.remove(instance.size()-1);
+ } else {
+ String ins = line.substring(i+1, line.indexOf(">", i+2));
+ if (ins.indexOf("WLANProfile") == 0) {
+ ins = "WLANProfile";
+ }
+ instance.add(ins);
+ }
+ i = line.indexOf(">", i+1) - 1;
+ }
+ // Getting instance value: '>'Value
+ if (c == '>') {
+ String val = line.substring(i+1, line.indexOf("<", i+2));
+ String key = "/";
+ for (int k = 1; k readFile(String fileName) {
+ String fName = NetshWlan.dataPath() + File.separator + fileName;
+ try{
+ return (new BufferedReader(new FileReader(new File(fName)))).lines();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/Model/Profile.java b/src/main/java/com/mundosica/wifi/manager/Model/Profile.java
new file mode 100644
index 0000000..64d9a40
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/Model/Profile.java
@@ -0,0 +1,289 @@
+package main.java.com.mundosica.wifi.manager.Model;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import java.util.HashMap;
+import java.util.Map;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import main.java.com.mundosica.wifi.manager.NetshWlan;
+
+/**
+ *
+ * @author @Fitorec
+ */
+public final class Profile {
+ //
+ private static Map list = new HashMap();
+
+ private String fileName = null;
+ private String name = "";
+ /// SSIDConfig/SSID
+ private String ssid_name = "";
+ private String ssid_hex = "";
+ /// connectionMode
+ private String connectionType = "";
+ private String connectionMode = "";
+ /// MSM/security/authEncryption
+ private String authentication = "";
+ private String encryption = "";
+ private String useOneX = "";
+ /// MSM/security/security
+ private String keyType = "";
+ private String keyProtected = "";
+ private String keyMaterial = "";
+
+ /**
+ *
+ * @param fileName
+ */
+ public Profile(String fileName) {
+ Map data = ParseProfile.get(fileName);
+ this.fileName = fileName;
+ this.setName(data.get("/name/"));
+ this.setConnectionMode(data.get("/connectionMode/"));
+ String auth = data.get("/MSM/security/authEncryption/authentication/");
+ String KeyMat = "";
+ if (!auth.equals("open")) {
+ KeyMat = data.get("/MSM/security/sharedKey/keyMaterial/");
+ }
+ this.setAuthentication(auth);
+ this.setKeyMaterial(KeyMat);
+ }
+
+ public static boolean export(Profile f, String fileAbsolutePath) {
+ try {
+ File srcFile = new File(NetshWlan.dataPath() + File.separator + f.getFileName());
+ File dest = new File(fileAbsolutePath);
+ Files.copy(srcFile.toPath(), dest.toPath(), REPLACE_EXISTING);
+ Config.setSavePath(dest.getParent());
+ return true;
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ *
+ */
+ public static void loadList() {
+ NetshWlan.exportProfiles().forEach(fileXML -> {
+ Profile prof = new Profile(fileXML);
+ Profile.list.put(prof.getName(), prof);
+ });
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static ObservableList list() {
+ ObservableList profilesList = FXCollections.observableArrayList();
+ Profile.list.forEach((k, prof) -> {
+ profilesList.add(prof);
+ });
+ return profilesList;
+ }
+
+ /**
+ *
+ * @param p
+ * @return
+ */
+ public static ObservableList remove(Profile p) {
+ if (p != null ) {
+ Profile.list.remove(p.getName());
+ }
+ return Profile.list();
+ }
+ /**
+ *
+ * @param search
+ * @param type
+ * @return
+ */
+ public static ObservableList search(String search, String type) {
+ ObservableList profilesList = FXCollections.observableArrayList();
+ Profile.list.forEach((k, profile) -> {
+ if ( profile.name.toLowerCase().contains(search.toLowerCase()) ||
+ profile.keyMaterial.toLowerCase().contains(search.toLowerCase()) ||
+ profile.authentication.toLowerCase().contains(search.toLowerCase())
+ ) {
+ profilesList.add(profile);
+ }
+ });
+ return profilesList;
+ }
+
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the ssid_name
+ */
+ public String getSsid_name() {
+ return ssid_name;
+ }
+
+ /**
+ * @param ssid_name the ssid_name to set
+ */
+ public void setSsid_name(String ssid_name) {
+ this.ssid_name = ssid_name;
+ }
+
+ /**
+ * @return the ssid_hex
+ */
+ public String getSsid_hex() {
+ return ssid_hex;
+ }
+
+ /**
+ * @param ssid_hex the ssid_hex to set
+ */
+ public void setSsid_hex(String ssid_hex) {
+ this.ssid_hex = ssid_hex;
+ }
+
+ /**
+ * @return the connectionType
+ */
+ public String getConnectionType() {
+ return connectionType;
+ }
+
+ /**
+ * @param connectionType the connectionType to set
+ */
+ public void setConnectionType(String connectionType) {
+ this.connectionType = connectionType;
+ }
+
+ /**
+ * @return the connectionMode
+ */
+ public String getConnectionMode() {
+ return connectionMode;
+ }
+
+ /**
+ * @param connectionMode the connectionMode to set
+ */
+ public void setConnectionMode(String connectionMode) {
+ this.connectionMode = connectionMode;
+ }
+
+ /**
+ * @return the authentication
+ */
+ public String getAuthentication() {
+ return authentication;
+ }
+
+ /**
+ * @param authentication the authentication to set
+ */
+ public void setAuthentication(String authentication) {
+ this.authentication = authentication;
+ }
+
+ /**
+ * @return the encryption
+ */
+ public String getEncryption() {
+ return encryption;
+ }
+
+ /**
+ * @param encryption the encryption to set
+ */
+ public void setEncryption(String encryption) {
+ this.encryption = encryption;
+ }
+
+ /**
+ * @return the useOneX
+ */
+ public String getUseOneX() {
+ return useOneX;
+ }
+
+ /**
+ * @param useOneX the useOneX to set
+ */
+ public void setUseOneX(String useOneX) {
+ this.useOneX = useOneX;
+ }
+
+ /**
+ * @return the keyType
+ */
+ public String getKeyType() {
+ return keyType;
+ }
+
+ /**
+ * @param keyType the keyType to set
+ */
+ public void setKeyType(String keyType) {
+ this.keyType = keyType;
+ }
+
+ /**
+ * @return the keyProtected
+ */
+ public String getKeyProtected() {
+ return keyProtected;
+ }
+
+ /**
+ * @param keyProtected the keyProtected to set
+ */
+ public void setKeyProtected(String keyProtected) {
+ this.keyProtected = keyProtected;
+ }
+
+ /**
+ * @return the keyMaterial
+ */
+ public String getKeyMaterial() {
+ return keyMaterial;
+ }
+
+ /**
+ * @param keyMaterial the keyMaterial to set
+ */
+ public void setKeyMaterial(String keyMaterial) {
+ this.keyMaterial = keyMaterial;
+ }
+
+ /**
+ * @return the fileName
+ */
+ public String getFileName() {
+ return fileName;
+ }
+
+ /**
+ * @param fileName the fileName to set
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/NetshWlan.java b/src/main/java/com/mundosica/wifi/manager/NetshWlan.java
new file mode 100644
index 0000000..f13e78b
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/NetshWlan.java
@@ -0,0 +1,140 @@
+/*
+ * Licencia MIT
+ *
+ * Copyright (c) 2017 @Fitorec .
+ *
+ * Se concede permiso, de forma gratuita, a cualquier persona que obtenga una
+ * copia de este software y de los archivos de documentación asociados
+ * (el "Software"), para utilizar el Software sin restricción, incluyendo sin
+ * limitación los derechos a usar, copiar, modificar, fusionar, publicar,
+ * distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las
+ * personas a las que se les proporcione el Software a hacer lo mismo, sujeto a
+ * las siguientes condiciones:
+ *
+ * El aviso de copyright anterior y este aviso de permiso se incluirán en todas
+ * las copias o partes sustanciales del Software.
+ *
+ * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
+ * IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN,
+ * IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS
+ * AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN,
+ * DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O
+ * CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U
+ * OTRO TIPO DE ACCIONES EN EL SOFTWARE.
+ *
+ */
+
+package main.java.com.mundosica.wifi.manager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+import main.java.com.mundosica.wifi.manager.Model.Profile;
+
+/**
+ *
+ * @author @Fitorec
+ */
+public class NetshWlan {
+
+ /**
+ *
+ */
+ public static final String PREFIX = "netsh wlan ";
+
+ /**
+ *
+ * @return
+ */
+ public static String dataPath() {
+ try {
+ String path = new java.io.File(".").getCanonicalPath();
+ return path + "\\data";
+ } catch(IOException ioError) {
+ ioError.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param cmd
+ * @return
+ */
+ public static Stream exec(String cmd) {
+ try {
+ Process process=Runtime.getRuntime().exec(PREFIX + cmd);
+ return new BufferedReader(
+ new InputStreamReader(process.getInputStream())
+ ).lines();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param cmd
+ * @return
+ */
+ public static boolean simpleExec(String cmd) {
+ try {
+ Process process=Runtime.getRuntime().exec(PREFIX + cmd);
+ return true;
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ /**
+ *
+ */
+ public static void showNetworks() {
+ String cmd = "show networks";
+ try {
+ Stream outCmd = NetshWlan.exec(cmd);
+ outCmd.forEach(line -> System.out.println(line));
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ *
+ * @return
+ */
+ public static Stream exportProfiles() {
+ String cmd = "export profile key=clear folder=\"" + NetshWlan.dataPath()+"\"";
+ System.out.println(cmd+"\n\n\n\n");
+ List files = new ArrayList();
+ try {
+ NetshWlan.exec(cmd).forEach( line -> {
+ if (line.indexOf(".xml") > 1) {
+ String fName = line.substring(line.lastIndexOf("\\")+1, line.lastIndexOf("l")+1);
+ files.add(fName);
+ }
+ });
+ return files.stream();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * networks
+ */
+ public static void networks() {
+ String cmd = "show network mode=bssid";
+ }
+
+ static boolean delete(Profile p) {
+ String cmd = "delete profile name=\""+p.getName()+"\"";
+ return NetshWlan.simpleExec(cmd);
+ }
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/WifiManager.java b/src/main/java/com/mundosica/wifi/manager/WifiManager.java
new file mode 100644
index 0000000..e359c6c
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/WifiManager.java
@@ -0,0 +1,62 @@
+/*
+ * Licencia MIT
+ *
+ * Copyright (c) 2017 @Fitorec .
+ *
+ * Se concede permiso, de forma gratuita, a cualquier persona que obtenga una
+ * copia de este software y de los archivos de documentación asociados
+ * (el "Software"), para utilizar el Software sin restricción, incluyendo sin
+ * limitación los derechos a usar, copiar, modificar, fusionar, publicar,
+ * distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las
+ * personas a las que se les proporcione el Software a hacer lo mismo, sujeto a
+ * las siguientes condiciones:
+ *
+ * El aviso de copyright anterior y este aviso de permiso se incluirán en todas
+ * las copias o partes sustanciales del Software.
+ *
+ * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O
+ * IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN,
+ * IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS
+ * AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN,
+ * DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O
+ * CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U
+ * OTRO TIPO DE ACCIONES EN EL SOFTWARE.
+ *
+ */
+package main.java.com.mundosica.wifi.manager;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.image.Image;
+import javafx.stage.Stage;
+
+/**
+ *
+ * @author @Fitorec
+ */
+public class WifiManager extends Application {
+ static Stage stage = null;
+
+ @Override
+ public void start(Stage st) throws Exception {
+ WifiManager.stage = st;
+ Parent root = FXMLLoader.load(getClass().getResource("MainView.fxml"));
+ Scene scene = new Scene(root);
+ WifiManager.stage.setScene(scene);
+ WifiManager.stage.setTitle("Conexiones Inalambricas");
+ WifiManager.stage.getIcons().add(new Image("file:icon.png"));
+ //WifiManager.stage.initStyle(StageStyle.UNDECORATED);
+ WifiManager.stage.show();
+ }
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String[] args) {
+ //System.out.println(Netsh.dataPath());
+ launch(args);
+ }
+
+}
diff --git a/src/main/java/com/mundosica/wifi/manager/style.css b/src/main/java/com/mundosica/wifi/manager/style.css
new file mode 100644
index 0000000..bb5ceba
--- /dev/null
+++ b/src/main/java/com/mundosica/wifi/manager/style.css
@@ -0,0 +1,121 @@
+.root {
+ -fx-background-color: transparent;
+}
+.background {
+ -fx-background-image: url("CoarseGrid.png");
+ -fx-background-repeat: repeat;
+ -fx-background-color:
+ linear-gradient(#38424b 0%, #1f2429 20%, #191d22 100%),
+ linear-gradient(#20262b, #191d22),
+ radial-gradient(center 50% 0%, radius 100%, rgba(114,131,148,0.9), rgba(255,255,255,0));
+ /* -fx-background-radius: 20; */
+}
+
+.context-menu {
+ -fx-background-radius: 5;
+ -fx-background-color: rgba(0, 0, 0, 0.9);
+}
+.context-menu .label {
+ -fx-text-fill: #FFFFFF;
+ -fx-effect: dropshadow( one-pass-box , rgba(0, 0, 0, 0.6), 0, 0.0 , 0 , 1 );
+}
+.label {
+ -fx-font-family: "Arial";
+ -fx-font-size: 14;
+ /* -fx-text-fill: rgba(255, 255, 255, 0.4); */
+ -fx-effect: dropshadow( one-pass-box , rgba(255, 255, 255, 0.6), 0, 0.0 , 0 , 1 );
+}
+
+.profileTitle {
+ -fx-font-size: 18;
+}
+
+.hyperlink {
+ -fx-font-family: "Arial";
+ -fx-font-size: 18;
+ -fx-text-fill: rgba(255, 255, 255, 0.4);
+ -fx-effect: dropshadow( one-pass-box , rgba(0, 0, 0, 0.6), 0, 0.0 , 0 , 1 );
+ -fx-border-width: 0;
+}
+
+.hyperlink:focused {
+ -fx-text-fill: rgba(255, 255, 255, 0.6);
+}
+
+.check-box .box {
+ -fx-background-color:
+ rgba(255, 255, 255, 0.1),
+ rgba(0, 0, 0, 1),
+ -fx-outer-border,
+ -fx-inner-border,
+ -fx-body-color;
+ -fx-background-insets: 0 -1.6 -2 -1.6, -1.4, 0, 1, 2;
+}
+
+.check-box:focused .box {
+ -fx-background-color:
+ rgba(255, 255, 255, 0.15),
+ rgba(0, 0, 0, 0.8),
+ -fx-outer-border,
+ -fx-inner-border,
+ white;
+}
+
+.button .text {
+ -fx-effect: dropshadow( one-pass-box , rgba(0, 0, 0, 0.8), 0, 0.0 , 0 , -1 );
+}
+
+.button {
+ -fx-background-color:
+ rgba(255, 255, 255, 0.08),
+ rgba(0, 0, 0, 0.8),
+ #090a0c,
+ linear-gradient(#4a5661 0%, #1f2429 20%, #1f242a 100%),
+ linear-gradient(#242a2e, #23282e),
+ radial-gradient(center 50% 0%, radius 100%, rgba(135,142,148,0.9),
+ rgba(255,255,255,0));
+ -fx-background-radius: 7, 6, 5, 4, 3, 5;
+ -fx-background-insets: -3 -3 -4 -3, -3, 0, 1, 2, 0;
+ -fx-font-family: "Arial";
+ -fx-text-fill: white;
+ -fx-font-size: 18;
+ -fx-text-fill: linear-gradient(white, #d0d0d0);
+ -fx-padding: 5 10 5 10;
+}
+
+.button:focused, .button:hover {
+ -fx-background-color:
+ rgba(255, 255, 255, 0.08),
+ rgba(0, 0, 0, 0.8),
+ #090a0c,
+ linear-gradient(#4a5661 0%, #1f2429 20%, #1f242a 100%),
+ linear-gradient(#3f4950, #23282e),
+ radial-gradient(center 50% 0%, radius 100%, rgba(135,142,148,0.9),
+ rgba(255,255,255,0));
+}
+
+.text-field, .text-area {
+ -fx-font-size: 18;
+ -fx-background-color:
+ rgba(255, 255, 255, 0.3),
+ linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.8) 50%),
+ rgb(218, 226, 224);
+ -fx-background-insets: 0 0 -1 0, 0, 1.5;
+ -fx-background-radius: 6, 5, 4;
+ -fx-padding: 6 10 4 10;
+ -fx-effect: innershadow( gaussian, rgba(0, 0, 0, 0.8), 5, 0, 0, 2 );
+ -fx-font-family: "Arial";
+}
+
+.text-area {
+ -fx-padding: 6 5 6 5;
+}
+
+.text-field:focused, .text-area:focused {
+ -fx-prompt-text-fill:
+ rgb(128,128,128);
+ -fx-background-color:
+ rgba(235, 235, 235, 0.5),
+ rgba(0, 0, 0, 0.4),
+ rgb(255, 255, 255);
+}