/*
* Jajuk
* Copyright (C) The Jajuk Team
* http://jajuk.info
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.jajuk.ui.wizard;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import net.miginfocom.swing.MigLayout;
import org.jajuk.base.Device;
import org.jajuk.base.DeviceManager;
import org.jajuk.ui.widgets.JajukFileChooser;
import org.jajuk.ui.widgets.JajukJDialog;
import org.jajuk.ui.widgets.OKCancelPanel;
import org.jajuk.ui.windows.JajukMainWindow;
import org.jajuk.util.Const;
import org.jajuk.util.IconLoader;
import org.jajuk.util.JajukFileFilter;
import org.jajuk.util.JajukIcons;
import org.jajuk.util.Messages;
import org.jajuk.util.UtilGUI;
import org.jajuk.util.filters.DirectoryFilter;
import org.jajuk.util.log.Log;
/**
* Simple device creation wizard that creates a directory device given a
* directory.
*/
public class SimpleDeviceWizard extends JajukJDialog implements ActionListener {
/** Generated serialVersionUID. */
private static final long serialVersionUID = 1L;
JButton jbFileSelection;
JLabel jlSelectedFile;
JTextField jtfRefreshTime;
OKCancelPanel okp;
String deviceName;
/** Selected directory. */
private File fDir;
/**
* Instantiates a new simple device wizard.
*/
public SimpleDeviceWizard() {
super(JajukMainWindow.getInstance(), true);
setTitle(Messages.getString("SimpleDeviceWizard.0"));
setAlwaysOnTop(true);
okp = new OKCancelPanel(this);
jbFileSelection = new JButton(IconLoader.getIcon(JajukIcons.OPEN_DIR));
jbFileSelection.addActionListener(this);
jlSelectedFile = new JLabel(Messages.getString("FirstTimeWizard.9"));
jlSelectedFile.setBorder(new BevelBorder(BevelBorder.LOWERED));
jtfRefreshTime = new JTextField(Const.DEFAULT_REFRESH_INTERVAL);
// Add items
setLayout(new MigLayout("insets 10,gapx 10,gapy 15", "[][grow]"));
add(new JLabel(UtilGUI.getImage(Const.IMAGE_SEARCH)), "cell 0 0 0 3");
add(new JLabel(Messages.getString("FirstTimeWizard.2")), "cell 1 0,split 2");
add(jbFileSelection, ""); // please
add(new JLabel(Messages.getString("FirstTimeWizard.8")), "split 2,cell 1 1");
add(jlSelectedFile, "cell 1 1, grow");
// select music location
add(new JLabel(Messages.getString("DeviceWizard.53")), "cell 1 2,split 3");
add(jtfRefreshTime, "grow");
add(new JLabel(Messages.getString("DeviceWizard.54")), "wrap"); // mins
add(okp, "right,cell 1 3");
getRootPane().setDefaultButton(okp.getOKButton());
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(final ActionEvent e) {
if (e.getSource() == okp.getCancelButton()) {
dispose(); // close window
} else if (e.getSource() == jbFileSelection) {
final JajukFileChooser jfc = new JajukFileChooser(new JajukFileFilter(
DirectoryFilter.getInstance()));
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
jfc.setDialogTitle(Messages.getString("FirstTimeWizard.5"));
jfc.setMultiSelectionEnabled(false);
final int returnVal = jfc.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
fDir = jfc.getSelectedFile();
deviceName = fDir.getName();
// First, check device *name* availability, otherwise, use a <name>~<nb>
// name
int code = DeviceManager.getInstance().checkDeviceAvailablity(deviceName,
Device.Type.DIRECTORY, fDir.getAbsolutePath(), true);
int prefix = 1;
while (code == 19) { // code 19 means a device already exists with this
// name
deviceName = fDir.getName() + '~' + prefix;
code = DeviceManager.getInstance().checkDeviceAvailablity(deviceName,
Device.Type.DIRECTORY, fDir.getAbsolutePath(), true);
prefix++;
}
// Now, test again to detected others availability issues like wrong URL
code = DeviceManager.getInstance().checkDeviceAvailablity(deviceName,
Device.Type.DIRECTORY, fDir.getAbsolutePath(), true);
if (code != 0 && code != 19) {
Messages.showErrorMessage(code);
okp.getOKButton().setEnabled(false);
return;
}
okp.getOKButton().setEnabled(true);
okp.getOKButton().grabFocus();
jlSelectedFile.setText(fDir.getAbsolutePath());
pack(); // repack as size of dialog can be exceeded now
}
} else if (e.getSource() == okp.getOKButton()) {
try {
if (fDir == null) {
Messages.showErrorMessage(143);
return;
}
// Create a directory device
final Device device = DeviceManager.getInstance().registerDevice(deviceName,
Device.Type.DIRECTORY, fDir.getAbsolutePath());
device.setProperty(Const.XML_DEVICE_AUTO_MOUNT, true);
// Set refresh time
double dRefreshTime;
try {
dRefreshTime = Double.parseDouble(jtfRefreshTime.getText());
if (dRefreshTime < 0) {
dRefreshTime = 0;
}
} catch (final NumberFormatException e1) {
dRefreshTime = 0;
}
device.setProperty(Const.XML_DEVICE_AUTO_REFRESH, dRefreshTime);
try {
device.refresh(true, false, false, null);
} catch (final Exception e2) {
Log.error(112, device.getName(), e2);
Messages.showErrorMessage(112, device.getName());
}
} finally {
// exit
dispose();
}
}
}
}