//$Header: /cvsroot-fuse/mec-as2/39/mendelson/util/clientserver/clients/filesystemview/RemoteFileBrowser.java,v 1.1 2012/04/18 14:10:44 heller Exp $Revision: 1 $
package de.mendelson.util.clientserver.clients.filesystemview;
import de.mendelson.util.MecResourceBundle;
import de.mendelson.util.clientserver.BaseClient;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
/*
* Copyright (C) mendelson-e-commerce GmbH Berlin Germany
*
* This software is subject to the license agreement set forth in the license.
* Please read and agree to all terms before using this software.
* Other product and brand names are trademarks of their respective owners.
*/
/**
* Browser widget for remote files/directories
* @author S.Heller
* @version $Revision: 1.1 $
*/
public class RemoteFileBrowser extends JDialog {
private String selectedPath = null;
private FileSystemViewClientServer fileView;
private MecResourceBundle rb;
/** Creates new form RemoteFileBrowser */
public RemoteFileBrowser(JFrame parent, BaseClient client, String title) {
super(parent, true);
//load resource bundle
try {
this.rb = (MecResourceBundle) ResourceBundle.getBundle(
ResourceBundleFileBrowser.class.getName());
} catch (MissingResourceException e) {
throw new RuntimeException("Oops..resource bundle "
+ e.getClassName() + " not found.");
}
this.setTitle(title);
initComponents();
this.fileView = new FileSystemViewClientServer(client);
List<FileObject> rootList = this.fileView.listRoots();
this.jTreeRemoteStructure.addRoots(rootList);
}
/**Sets a preselection on the server. Nothing will happen if the preselected
* path does not exist on the server side
* @param path
*/
public void setSelectedFile(String path) {
List<FileObject> pathList = this.fileView.getPathElements(path);
for (FileObject object : pathList) {
//if the path does NOT exist there could be nothing added - the
//path is invalid on the server side
if (this.jTreeRemoteStructure.nodeexists(object)) {
List<FileObject> childList = this.fileView.listChildren(object);
this.jTreeRemoteStructure.addChildren(object, childList);
}
}
if (!pathList.isEmpty()) {
FileObject selection = pathList.get(pathList.size() - 1);
this.jTreeRemoteStructure.setSelectedNode(selection);
this.jLabelActualPath.setText(selection.getPathStr());
} else {
this.jLabelActualPath.setText("");
}
}
private void performLazyLoad(TreePath path) {
final DefaultMutableTreeNode nodeToExpand = (DefaultMutableTreeNode) path.getLastPathComponent();
if (!this.jTreeRemoteStructure.isExplored(nodeToExpand)) {
Runnable lazyLoad = new Runnable() {
@Override
public void run() {
//unexplored node, reload it from remote
FileObject parent = (FileObject) nodeToExpand.getUserObject();
List<FileObject> childList = RemoteFileBrowser.this.fileView.listChildren(parent);
RemoteFileBrowser.this.jTreeRemoteStructure.addChildren(parent, childList);
}
};
SwingUtilities.invokeLater(lazyLoad);
}
}
/** 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() {
java.awt.GridBagConstraints gridBagConstraints;
jPanelMain = new javax.swing.JPanel();
jScrollPaneRemote = new javax.swing.JScrollPane();
jTreeRemoteStructure = new de.mendelson.util.clientserver.clients.filesystemview.JTreeRemoteStructure();
jLabelActualPath = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jButtonOk = new javax.swing.JButton();
jButtonCancel = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(new java.awt.GridBagLayout());
jPanelMain.setLayout(new java.awt.GridBagLayout());
jTreeRemoteStructure.addTreeExpansionListener(new javax.swing.event.TreeExpansionListener() {
public void treeCollapsed(javax.swing.event.TreeExpansionEvent evt) {
}
public void treeExpanded(javax.swing.event.TreeExpansionEvent evt) {
jTreeRemoteStructureTreeExpanded(evt);
}
});
jTreeRemoteStructure.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
jTreeRemoteStructureValueChanged(evt);
}
});
jScrollPaneRemote.setViewportView(jTreeRemoteStructure);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
jPanelMain.add(jScrollPaneRemote, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
jPanelMain.add(jLabelActualPath, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.ipadx = 100;
gridBagConstraints.ipady = 100;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
getContentPane().add(jPanelMain, gridBagConstraints);
jPanel2.setLayout(new java.awt.GridBagLayout());
jButtonOk.setText(this.rb.getResourceString( "button.ok"));
jButtonOk.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonOkActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 5);
jPanel2.add(jButtonOk, gridBagConstraints);
jButtonCancel.setText(this.rb.getResourceString( "button.cancel"));
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCancelActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_END;
gridBagConstraints.insets = new java.awt.Insets(10, 5, 10, 10);
jPanel2.add(jButtonCancel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
getContentPane().add(jPanel2, gridBagConstraints);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-421)/2, (screenSize.height-339)/2, 421, 339);
}// </editor-fold>//GEN-END:initComponents
private void jTreeRemoteStructureTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {//GEN-FIRST:event_jTreeRemoteStructureTreeExpanded
this.performLazyLoad(evt.getPath());
}//GEN-LAST:event_jTreeRemoteStructureTreeExpanded
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed
this.setVisible(false);
}//GEN-LAST:event_jButtonCancelActionPerformed
private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOkActionPerformed
DefaultMutableTreeNode selectedNode = this.jTreeRemoteStructure.getSelectedNode();
if (selectedNode != null && selectedNode.getUserObject() instanceof FileObject) {
this.selectedPath = this.fileView.getPathStr((FileObject) selectedNode.getUserObject());
}
this.setVisible(false);
}//GEN-LAST:event_jButtonOkActionPerformed
private void jTreeRemoteStructureValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeRemoteStructureValueChanged
DefaultMutableTreeNode selectedNode = this.jTreeRemoteStructure.getSelectedNode();
if (selectedNode != null && selectedNode.getUserObject() instanceof FileObject) {
this.jLabelActualPath.setText(((FileObject) selectedNode.getUserObject()).getPathStr());
}
}//GEN-LAST:event_jTreeRemoteStructureValueChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonCancel;
private javax.swing.JButton jButtonOk;
private javax.swing.JLabel jLabelActualPath;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanelMain;
private javax.swing.JScrollPane jScrollPaneRemote;
private de.mendelson.util.clientserver.clients.filesystemview.JTreeRemoteStructure jTreeRemoteStructure;
// End of variables declaration//GEN-END:variables
/**
* @return the selectedPath
*/
public String getSelectedPath() {
return selectedPath;
}
/**
* @param directoriesOnly the directoriesOnly to set
*/
public void setDirectoriesOnly(boolean directoriesOnly) {
this.jTreeRemoteStructure.setDirectoriesOnly(directoriesOnly);
}
}