diff --git a/.DS_Store b/.DS_Store index 10f3655..9e7d8dd 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/pom.xml b/pom.xml index d2c921c..6ed730f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.lucaoonk.Virt_Commander Virt_Commander jar - 0.4.1 + 0.5.1 Virt_Commander http://maven.apache.org diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Context.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Context.java index efdbea9..63693cb 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Context.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Context.java @@ -1,11 +1,19 @@ package com.lucaoonk.Virt_Commander.Backend.Objects; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Map; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.lucaoonk.Virt_Commander.Backend.Processors.Local.VMDOMProcessorThread; import com.lucaoonk.Virt_Commander.Backend.Processors.Local.VMListProcessor; import com.lucaoonk.Virt_Commander.Backend.Processors.Remote.RemoteVMListProcessor; @@ -14,6 +22,8 @@ import com.lucaoonk.Virt_Commander.ui.ScrollableVMList; import com.lucaoonk.Virt_Commander.ui.VMDetailsPanel; +import org.json.simple.JSONObject; + public class Context { public static String latestVersion; @@ -25,7 +35,7 @@ public class Context { public MainContent mainContent; public JFrame mainJFrame; public String defaultSaveLocation; - private static final String versionString = "0.5"; + private static final String versionString = "0.5.1"; public Boolean checkForUpdates; private String applicationDefaultSaveLocation; public Integer windowHeight; @@ -35,21 +45,25 @@ public class Context { public long autoRefreshRate; public boolean local; public String remoteAddress; - public boolean remoteOrLocal; private String currentSelectedUUID; + public ArrayList remoteConnections; + private final static String connectionsFileLocation = System.getProperty("user.home") + "/Library/Application Support/Virt_Commander/connections.json"; + public Context(){ initDefaults(); this.autoRefresh = true; this.autoRefreshRate =10; - } + + readConnectionsFile(); +} private void initDefaults(){ this.checkForUpdates = true; - this.remoteOrLocal = false; this.local = true; this.remoteAddress = ""; + this.remoteConnections = new ArrayList(); this.defaultSaveLocation=System.getProperty("user.home")+"/vms/"; this.applicationDefaultSaveLocation=System.getProperty("user.home")+"/vms/"; @@ -69,6 +83,30 @@ public ArrayList getVMList(){ return this.vmList; } + public RemoteConnectionComboItem[] getRemoteConnectionComboItems(){ + readConnectionsFile(); + + if(this.remoteConnections == null || this.remoteConnections.size() == 0){ + + RemoteConnection r = new RemoteConnection(); + r.name = "No connections"; + RemoteConnectionComboItem[] array = new RemoteConnectionComboItem[1]; + array[0] = new RemoteConnectionComboItem(r); + + return array; + + }else{ + RemoteConnectionComboItem[] array = new RemoteConnectionComboItem[this.remoteConnections.size()]; + int i = 0; + for (RemoteConnection connection : remoteConnections) { + array[i] = new RemoteConnectionComboItem(connection); + i++; + } + + return array; + } + } + public VM getCurrentSelectedVM(){ for (VM vm : vmList) { @@ -141,4 +179,92 @@ public String getDefaultSaveLocation() { } } + + + public void writeConnections(){ + + JSONObject jsonObject = new JSONObject(); + Gson g = new Gson(); + + + jsonObject.put("connections", g.toJson(remoteConnections)); + + + File location = new File(connectionsFileLocation); + location.getParentFile().mkdirs(); + + FileWriter file; + try { + if(Context.connectionsFileExists()){ + + + file = new FileWriter(connectionsFileLocation, false); + + file.write(jsonObject.toJSONString()); + file.close(); + }else{ + + file = new FileWriter(connectionsFileLocation); + + + file.write(jsonObject.toJSONString()); + file.close(); + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public static Boolean connectionsFileExists(){ + + File f = new File(connectionsFileLocation); + if(f.exists() && !f.isDirectory()) { + return true; + }else{ + return false; + } + + + } + + public void readConnectionsFile(){ + + if(Context.connectionsFileExists()){ + + try { + // create Gson instance + Gson gson = new Gson(); + + // create a reader + Reader reader = Files.newBufferedReader(Paths.get(connectionsFileLocation)); + + // convert JSON file to map + Map map = gson.fromJson(reader, Map.class); + + // print map entries + for (Map.Entry entry : map.entrySet()) { + if(entry.getKey().equals("connections")){ + Gson g = new Gson(); + remoteConnections = g.fromJson((String) entry.getValue(),new TypeToken>() { + }.getType()); + } + } + + // close reader + reader.close(); + + } catch (Exception ex) { + ex.printStackTrace(); + } + + }else{ + System.out.println("Connections-File does not exists. Using defaults"); + + } + + + } + } diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Device.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Device.java index e430503..9418383 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Device.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/Device.java @@ -6,4 +6,5 @@ public class Device { public String target; + } diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnection.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnection.java new file mode 100644 index 0000000..f855a7f --- /dev/null +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnection.java @@ -0,0 +1,9 @@ +package com.lucaoonk.Virt_Commander.Backend.Objects; + +public class RemoteConnection { + + public String name; + public String address; + public Boolean favorite; + +} diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnectionComboItem.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnectionComboItem.java new file mode 100644 index 0000000..e047fd8 --- /dev/null +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/RemoteConnectionComboItem.java @@ -0,0 +1,33 @@ +package com.lucaoonk.Virt_Commander.Backend.Objects; + +public class RemoteConnectionComboItem { + + private String key; + private RemoteConnection value; + + public RemoteConnectionComboItem(){ + + } + + public RemoteConnectionComboItem(RemoteConnection connection) + { + this.key = connection.name + " | "+connection.address; + this.value = connection; + } + + @Override + public String toString() + { + return key; + } + + public String getKey() + { + return key; + } + + public RemoteConnection getValue() + { + return value; + } +} diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/VM.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/VM.java index 90f93f6..18e2f56 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/VM.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Objects/VM.java @@ -120,17 +120,26 @@ public String vmDetailsTable(){ String disksString = ""; + String devicesString = ""; + int amountOfDisks = 0; + int amountOfDevices = 0; for (Device dev : this.getDevices()) { - if(dev.getClass().getName().equals("com.lucaoonk.virsh_gui.Backend.Objects.Disk")){ + if(dev.getClass().getName().equals("com.lucaoonk.Virt_Commander.Backend.Objects.Disk")){ amountOfDisks+=1; Disk disk = (Disk) dev; + disksString+= disk.device + ":"+"
"+" Location: "+ disk.source + "
 Type: "+ disk.driver + "

"; + }else{ + amountOfDevices+=1; + + devicesString+= dev.device + "

"; } } vmDetails+= "Attached Disks ("+amountOfDisks+") :"+disksString+""; + vmDetails+= "Attached Devices ("+amountOfDevices+") :"+devicesString+""; String forwardedPorts = ""; for (String port : this.getForwardedPorts()) { diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListActionListener.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListActionListener.java new file mode 100644 index 0000000..d7bd264 --- /dev/null +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListActionListener.java @@ -0,0 +1,30 @@ +package com.lucaoonk.Virt_Commander.Backend.Processors.Remote; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JDialog; + +import com.lucaoonk.Virt_Commander.Backend.Objects.Context; + +public class RemoteVMListActionListener implements ActionListener{ + + private Context context; + private JDialog dialog; + + public RemoteVMListActionListener(Context context, JDialog dialog) { + this.context = context; + this.dialog = dialog; + } + + @Override + public void actionPerformed(ActionEvent e) { + this.dialog.dispose(); + context.local = true; + context.refresh(); + + } + + + +} \ No newline at end of file diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListProcessor.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListProcessor.java index 3cc3df9..bdd5fc2 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListProcessor.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/RemoteVMListProcessor.java @@ -1,9 +1,12 @@ package com.lucaoonk.Virt_Commander.Backend.Processors.Remote; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; +import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; @@ -28,12 +31,12 @@ public RemoteVMListProcessor(Context context){ } public void runCommand() throws IOException{ - this.vmList = getVMdomainList(context.remoteAddress); + this.vmList = getVMdomainList(context.remoteAddress, context); context.updateVMList(vmList); } - public static ArrayList getVMdomainList(String remoteAddress) throws IOException { + public static ArrayList getVMdomainList(String remoteAddress, Context context) throws IOException { try { HttpResponse response = Unirest.get(remoteAddress+"/list") @@ -55,10 +58,16 @@ public static ArrayList getVMdomainList(String remoteAddress) throws IOExcep JDialog dialog = new JDialog(); JPanel panel = new JPanel(); + JButton switchToLocalButton = new JButton("Switch to local"); + // switchToLocalButton.addActionListener(new SwitchToLocalListener()); dialog.setTitle("Error connecting to remote server!"); - JLabel label = new JLabel("Make sure u enterd the correct address"); + JLabel label = new JLabel("Make sure u entered the correct address"); + switchToLocalButton.addActionListener(new RemoteVMListActionListener(context, dialog)); panel.setBorder(new EmptyBorder(10,10,10,10)); panel.add(label); + panel.add(switchToLocalButton); + + // panel.add(switchToLocalButton); dialog.add(panel); dialog.setSize(300, 150); dialog.setLocationRelativeTo(null); @@ -73,3 +82,5 @@ public static ArrayList getVMdomainList(String remoteAddress) throws IOExcep } } + + diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/SwitchToLocalListener.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/SwitchToLocalListener.java new file mode 100644 index 0000000..de980f5 --- /dev/null +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/Processors/Remote/SwitchToLocalListener.java @@ -0,0 +1,14 @@ +package com.lucaoonk.Virt_Commander.Backend.Processors.Remote; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class SwitchToLocalListener implements ActionListener{ + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/com/lucaoonk/Virt_Commander/Backend/RemoteConnector.java b/src/main/java/com/lucaoonk/Virt_Commander/Backend/RemoteConnector.java new file mode 100644 index 0000000..382b492 --- /dev/null +++ b/src/main/java/com/lucaoonk/Virt_Commander/Backend/RemoteConnector.java @@ -0,0 +1,215 @@ +package com.lucaoonk.Virt_Commander.Backend; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.border.EmptyBorder; + +import com.lucaoonk.Virt_Commander.Backend.Objects.Context; +import com.lucaoonk.Virt_Commander.Backend.Objects.RemoteConnection; +import com.lucaoonk.Virt_Commander.Backend.Objects.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.*; + +public class RemoteConnector implements ActionListener{ + + private JDialog remoteDialog; + private JButton switchButton; + private JButton editConnections; + private Context context; + private JComboBox combobox; + private JTextArea remoteAddressText; + private JButton removeButton; + private JTextArea remoteNameText; + private JButton addButton; + private JButton switchToLocalButton; + + public RemoteConnector(Context context){ + this.context = context; + } + + public void showConnectorDialog(){ + JDialog dialog = new JDialog(); + this.remoteDialog = dialog; + JPanel panel = new JPanel(); + JButton switchButton = new JButton("Switch to remote"); + switchButton.addActionListener(this); + this.switchButton = switchButton; + JButton editConnections = new JButton("Edit connections"); + editConnections.addActionListener(this); + this.editConnections = editConnections; + // switchToLocalButton.addActionListener(new SwitchToLocalListener()); + dialog.setTitle("Remote workspace"); + JComboBox comboBox = new JComboBox<>(this.context.getRemoteConnectionComboItems()); + this.combobox = comboBox; + JLabel label = new JLabel("Select a remote address to connect to"); + JTextArea remoteAddressText = new JTextArea(); + this.remoteAddressText = remoteAddressText; + // remoteAddressText.setSize(100, 20); + panel.setBorder(new EmptyBorder(10,10,10,10)); + panel.setLayout(new GridLayout(4,1)); + + panel.add(label); + panel.add(comboBox); + panel.add(switchButton); + panel.add(editConnections); + + // panel.add(switchToLocalButton); + dialog.add(panel); + dialog.setSize(300, 150); + dialog.setLocationRelativeTo(null); + dialog.setVisible(true); + dialog.setResizable(false); + dialog.setAlwaysOnTop(true); + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + } + + @Override + public void actionPerformed(ActionEvent e) { + + if(e.getSource().equals(switchButton)){ + + if(context.remoteConnections.size() == 0){ + + showInvalidConnectionError(); + + }else{ + + Object item = this.combobox.getSelectedItem(); + RemoteConnection connection = ((RemoteConnectionComboItem)item).getValue(); + + context.remoteAddress = connection.address; + context.local = false; + remoteDialog.dispose(); + context.refresh(); + + } + + + } + + if(e.getSource().equals(editConnections)){ + remoteDialog.setVisible(false); + + showConnectionEditor(); + } + + if(e.getSource().equals(removeButton)){ + Object item = this.combobox.getSelectedItem(); + RemoteConnection value = ((RemoteConnectionComboItem)item).getValue(); + + context.remoteConnections.remove(value); + context.writeConnections(); + context.refresh(); + remoteDialog.invalidate(); + remoteDialog.repaint(); + + } + + if(e.getSource().equals(addButton)){ + + RemoteConnection connection = new RemoteConnection(); + connection.address = remoteAddressText.getText(); + connection.name = remoteNameText.getText(); + + System.out.println(connection.name+" " + connection.address); + context.remoteConnections.add(connection); + context.writeConnections(); + context.refresh(); + remoteDialog.revalidate(); + } + if(e.getSource().equals(switchToLocalButton)){ + context.local = true; + context.refresh(); + } + } + + private void showConnectionEditor(){ + JDialog dialog = new JDialog(); + this.remoteDialog = dialog; + JPanel panel = new JPanel(); + dialog.setTitle("Connections Editor"); + JComboBox comboBox = new JComboBox<>(context.getRemoteConnectionComboItems()); + this.combobox = comboBox; + JTextArea remoteAddressText = new JTextArea(); + remoteAddressText.setSize(80, 20); + this.remoteAddressText = remoteAddressText; + + JTextArea remoteNameText = new JTextArea(); + this.remoteNameText = remoteNameText; + remoteNameText.setSize(80, 20); + + // remoteAddressText.setSize(100, 20); + panel.setBorder(new EmptyBorder(10,10,10,10)); + panel.setLayout(new GridLayout(5,2)); + + panel.add(new JLabel("Select a connection and click remove to remove it")); + panel.add(new JLabel("New Connection Name")); + + panel.add(comboBox); + + panel.add(remoteNameText); + + JButton removeButton = new JButton("Remove"); + this.removeButton = removeButton; + removeButton.addActionListener(this); + panel.add(removeButton); + + panel.add(new JLabel("New Connection Adress")); + + + panel.add(new JLabel()); + + + panel.add(remoteAddressText); + + panel.add(new JLabel()); + + JButton addButton = new JButton("Add new Connection"); + this.addButton = addButton; + addButton.addActionListener(this); + panel.add(addButton); + + + // panel.add(switchToLocalButton); + dialog.add(panel); + dialog.setSize(500, 200); + dialog.setLocationRelativeTo(null); + dialog.setVisible(true); + dialog.setResizable(false); + dialog.setAlwaysOnTop(true); + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + } + + private void showInvalidConnectionError(){ + JDialog dialog = new JDialog(); + this.remoteDialog = dialog; + JPanel panel = new JPanel(); + dialog.setTitle("Invalid connection info"); + JComboBox comboBox = new JComboBox<>(context.getRemoteConnectionComboItems()); + this.combobox = comboBox; + JLabel label = new JLabel("This connection does not have a valid address. Try adding one or add it again."); + JTextArea remoteAddressText = new JTextArea(); + this.remoteAddressText = remoteAddressText; + // remoteAddressText.setSize(100, 20); + panel.setBorder(new EmptyBorder(10,10,10,10)); + panel.setLayout(new GridLayout(1,1)); + + + panel.add(label); + + // panel.add(switchToLocalButton); + dialog.add(panel); + dialog.setSize(300, 150); + dialog.setLocationRelativeTo(null); + dialog.setVisible(true); + dialog.setResizable(false); + dialog.setAlwaysOnTop(true); + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + } + +} diff --git a/src/main/java/com/lucaoonk/Virt_Commander/UpdateChecker/UpdateChecker.java b/src/main/java/com/lucaoonk/Virt_Commander/UpdateChecker/UpdateChecker.java index 18d3062..807f828 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/UpdateChecker/UpdateChecker.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/UpdateChecker/UpdateChecker.java @@ -43,7 +43,7 @@ public class UpdateChecker extends SwingWorker{ - private static final String urlToCheck = "https://api.github.com/repos/LucaOonk/Virsh-Gui/releases/latest"; + private static final String urlToCheck = "https://api.github.com/repos/LucaOonk/Virt-Commander/releases/latest"; private Context context; diff --git a/src/main/java/com/lucaoonk/Virt_Commander/ui/.DS_Store b/src/main/java/com/lucaoonk/Virt_Commander/ui/.DS_Store index 69359a1..0dffe10 100644 Binary files a/src/main/java/com/lucaoonk/Virt_Commander/ui/.DS_Store and b/src/main/java/com/lucaoonk/Virt_Commander/ui/.DS_Store differ diff --git a/src/main/java/com/lucaoonk/Virt_Commander/ui/LocalBanner.java b/src/main/java/com/lucaoonk/Virt_Commander/ui/LocalBanner.java index 896a862..90f42fc 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/ui/LocalBanner.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/ui/LocalBanner.java @@ -1,15 +1,31 @@ package com.lucaoonk.Virt_Commander.ui; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.border.EmptyBorder; +import com.lucaoonk.Virt_Commander.Backend.RemoteConnector; import com.lucaoonk.Virt_Commander.Backend.Objects.Context; +import com.lucaoonk.Virt_Commander.Backend.Objects.RemoteConnection; +import com.lucaoonk.Virt_Commander.Backend.Objects.RemoteConnectionComboItem; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; -public class LocalBanner extends JPanel{ +public class LocalBanner extends JPanel implements ActionListener { private Context context; + private JButton switchToRemoteButton; + private JButton switchButton; + private JTextArea remoteAddressText; + private JDialog remoteDialog; + private JComboBox combobox; + private JButton editConnections; public JPanel getPanel(Context context){ @@ -19,7 +35,9 @@ public JPanel getPanel(Context context){ panel.add(getBanner(), BorderLayout.CENTER); panel.add(topLeftPanel(), BorderLayout.WEST); + panel.add(switchToRemotePanel(), BorderLayout.EAST); + return panel; } @@ -38,5 +56,31 @@ private JPanel topLeftPanel(){ } + private JPanel switchToRemotePanel(){ + JPanel panel = new JPanel(); + JButton switchToRemoteButton = new JButton("Switch to remote"); + this.switchToRemoteButton = switchToRemoteButton; + switchToRemoteButton.addActionListener(this); + panel.add(switchToRemoteButton); + + return panel; + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + if(e.getSource().equals(switchToRemoteButton)){ + RemoteConnector connector = new RemoteConnector(context); + connector.showConnectorDialog(); + + + + } + + + + + } } diff --git a/src/main/java/com/lucaoonk/Virt_Commander/ui/MainFrame.java b/src/main/java/com/lucaoonk/Virt_Commander/ui/MainFrame.java index 1c78365..54c68d4 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/ui/MainFrame.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/ui/MainFrame.java @@ -229,9 +229,7 @@ public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource().equals(localButton)){ - System.out.println("Chose local"); context.local = true; - context.remoteOrLocal = true; try { localInit(); } catch (Exception e1) { @@ -240,9 +238,7 @@ public void actionPerformed(ActionEvent e) { } } if(e.getSource().equals(remoteButton)){ - System.out.println("Chose remote"); context.local = false; - context.remoteOrLocal = true; context.remoteAddress = remoteAddress.getText(); } diff --git a/src/main/java/com/lucaoonk/Virt_Commander/ui/RemoteBanner.java b/src/main/java/com/lucaoonk/Virt_Commander/ui/RemoteBanner.java index a3c0db8..fc5f86b 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/ui/RemoteBanner.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/ui/RemoteBanner.java @@ -1,14 +1,21 @@ package com.lucaoonk.Virt_Commander.ui; +import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import com.lucaoonk.Virt_Commander.Backend.RemoteConnector; import com.lucaoonk.Virt_Commander.Backend.Objects.Context; +import com.lucaoonk.Virt_Commander.Backend.Objects.RemoteConnection; -public class RemoteBanner extends JPanel{ +public class RemoteBanner extends JPanel implements ActionListener{ private Context context; + private JButton switchToLocalButton; + private JButton switchConnectionButton; public RemoteBanner(Context context){ this.context = context; @@ -22,8 +29,7 @@ public JPanel getPanel(){ panel.add(getBanner(), BorderLayout.CENTER); panel.add(topLeftPanel(), BorderLayout.WEST); - - + panel.add(switchToLocalPanel(), BorderLayout.EAST); return panel; } @@ -41,4 +47,33 @@ private JPanel topLeftPanel(){ return panel; } + + private JPanel switchToLocalPanel(){ + JPanel panel = new JPanel(); + JButton switchToLocalButton = new JButton("Switch to Local"); + this.switchToLocalButton = switchToLocalButton; + switchToLocalButton.addActionListener(this); + panel.add(switchToLocalButton); + + JButton switchConnectionButton = new JButton("Switch Connection"); + this.switchConnectionButton = switchConnectionButton; + switchConnectionButton.addActionListener(this); + panel.add(switchConnectionButton); + return panel; + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + if(e.getSource().equals(switchToLocalButton)){ + context.local = true; + context.refresh(); + } + if(e.getSource().equals(switchConnectionButton)){ + RemoteConnector remote= new RemoteConnector(context); + remote.showConnectorDialog(); + context.refresh(); + } + + } } diff --git a/src/main/java/com/lucaoonk/Virt_Commander/ui/ScrollableVMList.java b/src/main/java/com/lucaoonk/Virt_Commander/ui/ScrollableVMList.java index 99dc133..561f566 100644 --- a/src/main/java/com/lucaoonk/Virt_Commander/ui/ScrollableVMList.java +++ b/src/main/java/com/lucaoonk/Virt_Commander/ui/ScrollableVMList.java @@ -36,48 +36,51 @@ private JPanel getContent(){ JPanel content = new JPanel(); content.setBorder(new EmptyBorder(10, 10, 10, 10)); - content.setLayout(new GridLayout(context.getVMList().size() +2, 2)); - - content.add(new JLabel("VM name")); // now add to jpanel - - // first create button - JButton refreshButton = new JButton("Refresh"); - content.add(refreshButton); // now add to jpanel - this.refreshButton = refreshButton; - - // now add anonymous action listener - refreshButton.addActionListener(this); - - for (VM vm : context.getVMList()) { - - this.vm = vm; - // content.add(new JLabel(vm.getID().toString())); // now add to jpanel - - if(vm.isRunning()){ - content.add(new JLabel(""+vm.getDomain()+"")); // now add to jpanel - - }else{ - content.add(new JLabel(""+vm.getDomain()+"")); // now add to jpanel - - } + + content.setLayout(new GridLayout(context.getVMList().size() +2, 2)); + content.add(new JLabel("VM name")); // now add to jpanel + // first create button - VMinfoButton button = new VMinfoButton("Show Info", vm, context); + JButton refreshButton = new JButton("Refresh"); + content.add(refreshButton); // now add to jpanel + this.refreshButton = refreshButton; + + // now add anonymous action listener + refreshButton.addActionListener(this); + + for (VM vm : context.getVMList()) { + + this.vm = vm; + // content.add(new JLabel(vm.getID().toString())); // now add to jpanel + + if(vm.isRunning()){ + content.add(new JLabel(""+vm.getDomain()+"")); // now add to jpanel + + }else{ + content.add(new JLabel(""+vm.getDomain()+"")); // now add to jpanel + + } + + // first create button + VMinfoButton button = new VMinfoButton("Show Info", vm, context); + content.add(button); // now add to jpanel + // now add anonymous action listener + } + + content.add(new JLabel("")); // now add to jpanel + + // first create button + JButton button = new JButton("add New VM"); content.add(button); // now add to jpanel - // now add anonymous action listener - } + this.addNewVMButton = button; + if(!context.local){ + addNewVMButton.setEnabled(false); + } + // now add anonymous action listener + button.addActionListener(this); - content.add(new JLabel("")); // now add to jpanel - // first create button - JButton button = new JButton("add New VM"); - content.add(button); // now add to jpanel - this.addNewVMButton = button; - if(!context.local){ - addNewVMButton.setEnabled(false); - } - // now add anonymous action listener - button.addActionListener(this); return content; }