package jffile; /** * Created : Apr 28, 2012 * * @author pquiring */ import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javaforce.*; import javaforce.jbus.*; public class MapNetworkShareDialog extends javax.swing.JDialog { /** * Creates new form MapNetworkShare */ public MapNetworkShareDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); setPosition(); listDrives(); Mappings.loadMaps(); jbusClient = new JBusClient("org.jflinux.jfile." + Math.abs(new Random().nextInt()) , new JBusMethods()); jbusClient.start(); JF.assignHotKey(this, accept, KeyEvent.VK_ENTER); JF.assignHotKey(this, cancel, KeyEvent.VK_ESCAPE); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); server = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); share = new javax.swing.JTextField(); jPanel1 = new javax.swing.JPanel(); mapWineDrive = new javax.swing.JCheckBox(); wineDrive = new javax.swing.JComboBox(); accept = new javax.swing.JButton(); cancel = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); username = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); password = new javax.swing.JPasswordField(); guest = new javax.swing.JCheckBox(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Map Network Share"); setResizable(false); jLabel1.setText("Server"); jLabel2.setText("Share"); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Wine Integration")); mapWineDrive.setText("Map to Wine Drive"); mapWineDrive.setEnabled(false); wineDrive.setEnabled(false); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(mapWineDrive, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(wineDrive, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(251, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(mapWineDrive) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(wineDrive, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); accept.setText("Accept"); accept.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { acceptActionPerformed(evt); } }); cancel.setText("Cancel"); cancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelActionPerformed(evt); } }); jLabel3.setText("Username"); username.setEnabled(false); jLabel4.setText("Password"); password.setEnabled(false); guest.setSelected(true); guest.setText("Connect as Guest"); guest.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { guestActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(guest) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(share) .addComponent(server))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(cancel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(accept)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel3) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(password) .addComponent(username)))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(server, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(share, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(guest) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(username, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(accept) .addComponent(cancel)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed dispose(); }//GEN-LAST:event_cancelActionPerformed private void acceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptActionPerformed if (!valid()) return; setState(false); String _server = server.getText(); String _share = share.getText(); target = getTarget(); String user = "guest"; pass = ""; if (!guest.isSelected()) { user = username.getText(); pass = new String(password.getPassword()); } uri = "smb://" + user + "@" + _server + "/" + _share; link = "null"; if (mapWineDrive.isSelected()) { String drive = (String)wineDrive.getSelectedItem(); link = getDrive(drive); } dialog = this; jbusClient.call("org.jflinux.jdesktop." + System.getenv("JID"), "mount", quote(jbusClient.pack) + "," + quote(uri) + "," + quote(target) + "," + quote(pass) + "," + quote(link)); }//GEN-LAST:event_acceptActionPerformed private void guestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guestActionPerformed if (guest.isSelected()) { username.setEnabled(false); password.setEnabled(false); } else { username.setEnabled(true); password.setEnabled(true); } }//GEN-LAST:event_guestActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton accept; private javax.swing.JButton cancel; private javax.swing.JCheckBox guest; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JPanel jPanel1; private javax.swing.JCheckBox mapWineDrive; private javax.swing.JPasswordField password; private javax.swing.JTextField server; private javax.swing.JTextField share; private javax.swing.JTextField username; private javax.swing.JComboBox wineDrive; // End of variables declaration//GEN-END:variables private JBusClient jbusClient; private boolean hasWine = false; private void listDrives() { File file = new File(JF.getUserPath() + "/.wine/dosdevices"); if (!file.exists()) return; File drives[] = file.listFiles(); boolean avail[] = new boolean[26]; for(int a=0;a<26;a++) avail[a] = true; for(int a=0;a<drives.length;a++) { // System.out.println(drives[a].getName()); // System.out.println(drives[a].getAbsolutePath()); // try{System.out.println(drives[a].getCanonicalFile()); } catch (Exception e) {System.out.println(""+e);} char ch = drives[a].getName().toLowerCase().charAt(0); if ((ch < 'a') || (ch > 'z')) continue; avail[ch - 'a'] = false; } wineDrive.removeAllItems(); for(int a=3;a<26;a++) { //don't show A,B,C if (avail[a]) { wineDrive.addItem("" + (char)('a' + a) + ':'); } } if (wineDrive.getItemCount() == 0) return; mapWineDrive.setEnabled(true); wineDrive.setEnabled(true); hasWine = true; } private boolean valid() { boolean ok = true; if (server.getText().length() == 0) { server.setBackground(Color.red); ok = false; } else { server.setBackground(Color.white); } if (share.getText().length() == 0) { share.setBackground(Color.red); ok = false; } else { share.setBackground(Color.white); } username.setBackground(Color.white); password.setBackground(Color.white); if (guest.isSelected()) return ok; if (username.getText().length() == 0) { username.setBackground(Color.red); ok = false; } if (password.getPassword().length == 0) { password.setBackground(Color.red); ok = false; } return ok; } private static String getTarget() { Random r = new Random(); String folder; do { folder = JF.getUserPath() + "/.gvfs/" + Math.abs(r.nextInt()) + "/"; } while (new File(folder).exists()); return folder; } private static String getDrive(String drive) { return JF.getUserPath() + "/.wine/dosdevices/" + drive; } private void setPosition() { Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); Dimension d = getSize(); setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2)); } private static String target, uri, link, pass; public static void main(String args[]) { //usage : jmapshare server share [x:] if (args.length < 2) { System.out.println("Usage: jmapshare server share [x:] [--user=user] [--pass=pass]"); System.out.println(" Note: DOMAINNAME and PASSWORD environment variables are used by default"); System.exit(1); } Mappings.loadMaps(); String _server = args[0], _share = args[1]; target = getTarget(); String user = System.getenv("DOMAINNAME"); pass = System.getenv("PASSWORD"); String drive = null; for(int a=2;a<args.length;a++) { if (args[a].startsWith("--user=")) user = args[a].substring(7); if (args[a].startsWith("--pass=")) pass = args[a].substring(7); if (args[a].length() == 2) drive = args[a]; } user += "\n"; pass += "\n"; uri = "smb://" + user + "@" + _server + "/" + _share; if (drive != null) { link = getDrive(drive); } else { link = "null"; } isMain = true; JBusClient jbusClient = new JBusClient("org.jflinux.jfile." + Math.abs(new Random().nextInt()) , new JBusMethods()); jbusClient.start(); JFLog.log("mount:calling:" + "org.jflinux.jdesktop." + System.getenv("JID")); jbusClient.call("org.jflinux.jdesktop." + System.getenv("JID"), "mount", quote(jbusClient.pack) + "," + quote(uri) + "," + quote(target) + "," + quote(pass) + "," + quote(link)); } private void setState(boolean state) { accept.setEnabled(state); server.setEnabled(state); share.setEnabled(state); guest.setEnabled(state); if (guest.isSelected()) { username.setEnabled(state); password.setEnabled(state); } if (hasWine) { mapWineDrive.setEnabled(state); wineDrive.setEnabled(state); } } private static boolean isMain = false; private static MapNetworkShareDialog dialog; public static class JBusMethods { public void mountSuccess(String uri) { Mappings.addMap(uri, target, pass, link); Mappings.saveMaps(); if (isMain) { System.out.println("Success"); System.exit(0); } else { dialog.dispose(); } } public void mountFail(String uri) { if (isMain) { System.out.println("Failed"); System.exit(0); } else { JF.showError("Error", "Failed to connect to share"); dialog.setState(true); } } } private static String quote(String str) { return "\"" + str + "\""; } }