/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.acquire.explorer.gui.dialog;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.prefs.Preferences;
import org.weasis.acquire.explorer.AcquireExplorer;
import org.weasis.acquire.explorer.AcquireManager;
import org.weasis.acquire.explorer.Messages;
import org.weasis.acquire.explorer.core.bean.SeriesGroup;
import org.weasis.acquire.explorer.gui.control.ImportPanel;
import org.weasis.core.api.gui.util.JMVUtils;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.core.api.service.BundlePreferences;
import org.weasis.core.api.util.StringUtil;
import org.weasis.core.api.util.ThreadUtil;
public class AcquireImportDialog extends JDialog implements PropertyChangeListener {
private static final long serialVersionUID = -8736946182228791444L;
private static final String P_MAX_RANGE = "maxMinuteRange"; //$NON-NLS-1$
private final ImportPanel importPanel;
public static final ExecutorService IMPORT_IMAGES = ThreadUtil.buildNewSingleThreadExecutor("ImportImage"); //$NON-NLS-1$
static final Object[] OPTIONS =
{ Messages.getString("AcquireImportDialog.validate"), Messages.getString("AcquireImportDialog.cancel") }; //$NON-NLS-1$ //$NON-NLS-2$
static final String REVALIDATE = "ReValidate"; //$NON-NLS-1$
private final JTextField serieName = new JTextField();
private final ButtonGroup btnGrp = new ButtonGroup();
private final JRadioButton btn1 = new JRadioButton(Messages.getString("AcquireImportDialog.no_grp")); //$NON-NLS-1$
private final JRadioButton btn2 = new JRadioButton(Messages.getString("AcquireImportDialog.date_grp")); //$NON-NLS-1$
private final JRadioButton btn3 = new JRadioButton(Messages.getString("AcquireImportDialog.name_grp")); //$NON-NLS-1$
private final JSpinner spinner;
private JOptionPane optionPane;
private List<ImageElement> mediaList;
public AcquireImportDialog(ImportPanel importPanel, List<ImageElement> mediaList) {
super();
this.importPanel = importPanel;
this.mediaList = mediaList;
int maxRange = 60;
Preferences prefs =
BundlePreferences.getDefaultPreferences(FrameworkUtil.getBundle(this.getClass()).getBundleContext());
if (prefs != null) {
Preferences p = prefs.node(AcquireExplorer.PREFERENCE_NODE);
maxRange = p.getInt(P_MAX_RANGE, maxRange);
}
spinner = new JSpinner(new SpinnerNumberModel(maxRange, 1, 5256000, 5)); // <=> 4 years
optionPane = new JOptionPane(initPanel(), JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null,
OPTIONS, OPTIONS[0]);
optionPane.addPropertyChangeListener(this);
setContentPane(optionPane);
setModal(true);
setLocationRelativeTo(null);
pack();
}
private JPanel initPanel() {
JPanel panel = new JPanel();
panel.setBorder(new EmptyBorder(10, 10, 20, 15));
panel.setLayout(new GridBagLayout());
JLabel question = new JLabel(Messages.getString("AcquireImportDialog.grp_msg") + StringUtil.COLON); //$NON-NLS-1$
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(0, 0, 15, 0);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
panel.add(question, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
panel.add(btn1, c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 2;
c.gridwidth = GridBagConstraints.RELATIVE;
c.anchor = GridBagConstraints.WEST;
panel.add(btn2, c);
JMVUtils.setPreferredWidth(spinner, 75);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 2;
c.gridwidth = GridBagConstraints.RELATIVE;
c.anchor = GridBagConstraints.WEST;
panel.add(spinner, c);
installFocusListener(spinner);
c = new GridBagConstraints();
c.insets = new Insets(5, 2, 0, 0);
c.gridx = 2;
c.gridy = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
panel.add(new JLabel(Messages.getString("AcquireImportDialog.max_range_min")), c); //$NON-NLS-1$
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
c.anchor = GridBagConstraints.WEST;
panel.add(btn3, c);
JMVUtils.setPreferredWidth(serieName, 150);
serieName.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// Do nothing
}
@Override
public void focusGained(FocusEvent e) {
btnGrp.setSelected(btn3.getModel(), true);
}
});
c = new GridBagConstraints();
c.insets = new Insets(5, 2, 0, 0);
c.gridx = 1;
c.gridy = 3;
c.gridwidth = 2;
c.anchor = GridBagConstraints.WEST;
panel.add(serieName, c);
btnGrp.add(btn1);
btnGrp.add(btn2);
btnGrp.add(btn3);
btnGrp.setSelected(btn1.getModel(), true);
return panel;
}
public void installFocusListener(JSpinner spinner) {
JComponent spinnerEditor = spinner.getEditor();
if (spinnerEditor != null) {
Component c = spinnerEditor.getComponent(0);
if (c != null) {
c.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// Do nothing
}
@Override
public void focusGained(FocusEvent e) {
btnGrp.setSelected(btn2.getModel(), true);
}
});
}
}
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
Object action = evt.getNewValue();
if (action != null) {
boolean close = true;
if (action.equals(OPTIONS[0])) {
SeriesGroup serieType = null;
if (btnGrp.getSelection().equals(btn1.getModel())) {
serieType = AcquireManager.getDefaultSeries();
} else if (btnGrp.getSelection().equals(btn2.getModel())) {
serieType = SeriesGroup.DATE_SERIE;
} else {
if (serieName.getText() != null && !serieName.getText().isEmpty()) {
serieType = new SeriesGroup(serieName.getText());
} else {
JOptionPane.showMessageDialog(this, Messages.getString("AcquireImportDialog.add_name_msg"), //$NON-NLS-1$
Messages.getString("AcquireImportDialog.add_name_title"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$
optionPane.setValue(REVALIDATE);
close = false;
}
}
if (close && serieType != null) {
importPanel.getCentralPane().setSelectedAndGetFocus();
Integer maxRangeInMinutes = (Integer) spinner.getValue();
Preferences prefs = BundlePreferences
.getDefaultPreferences(FrameworkUtil.getBundle(this.getClass()).getBundleContext());
if (prefs != null) {
Preferences p = prefs.node(AcquireExplorer.PREFERENCE_NODE);
BundlePreferences.putIntPreferences(p, P_MAX_RANGE, maxRangeInMinutes);
}
importPanel.importImageList(mediaList, serieType, maxRangeInMinutes);
}
} else if (action.equals(REVALIDATE)) {
close = false;
}
if (close) {
clearAndHide();
}
}
}
public void clearAndHide() {
serieName.setText(null);
setVisible(false);
}
}