/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.components.reports;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import java.io.File;
import java.util.List;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import com.opendoorlogistics.api.ui.UIFactory.FilenameChangeListener;
import com.opendoorlogistics.api.ui.UIFactory.TextChangedListener;
import com.opendoorlogistics.core.utils.ui.FileBrowserPanel;
import com.opendoorlogistics.core.utils.ui.OkCancelDialog;
import com.opendoorlogistics.core.utils.ui.TextEntryPanel;
import com.opendoorlogistics.core.utils.ui.VerticalLayoutPanel;
final public class MultiExportDialog extends OkCancelDialog{
private VerticalLayoutPanel panel;
private final FileBrowserPanel dir;
private final TextEntryPanel prefix;
public MultiExportDialog(Window parent, String initialDirectory,String initialPrefix,final List<Map.Entry<String,String>> nameDescriptionList) {
super(parent);
final JTable table = new JTable();
dir = new FileBrowserPanel("Output directory ",initialDirectory, new FilenameChangeListener() {
@Override
public void filenameChanged(String newFilename) {
if(table.getModel()!=null){
table.tableChanged(new TableModelEvent(table.getModel()));
}
}
}, true, "OK");
panel.addIndentedLine(4,dir);
prefix = new TextEntryPanel("File prefix", initialPrefix!=null?initialPrefix:"", new TextChangedListener() {
@Override
public void textChange(String newText) {
if(table.getModel()!=null){
table.tableChanged(new TableModelEvent(table.getModel()));
}
}
});
panel.add(prefix);
final Object filePrefix = new Object(){
@Override
public String toString(){
String ret = dir.getFilename();
if(ret.length()>0 && ret.charAt(ret.length()-1)!=File.separatorChar){
ret += File.separator;
}
ret += prefix.getText();
return ret;
}
};
// add table to the panel
panel.addWhitespace();
panel.addIndentedLine(4,new JLabel("Exporting files:"));
JScrollPane scrollPane = new JScrollPane(table);
panel.addIndentedLine(4,scrollPane);
// set-up table model
table.setModel(new AbstractTableModel() {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Map.Entry<String,String> row = nameDescriptionList.get(rowIndex);
if(columnIndex==0){
return row.getValue();
}
return filePrefix.toString() + row.getKey();
}
@Override
public int getRowCount() {
return nameDescriptionList.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int column) {
if(column==0){
return "Description";
}
return "Output filename";
}
});
table.setFillsViewportHeight(true);
// table.setPreferredSize(new Dimension(table.getPreferredSize().width, 100));
scrollPane.setPreferredSize(new Dimension(scrollPane.getPreferredSize().width, 100));
// table.setPreferredScrollableViewportSize(new Dimension(table.getPreferredSize().width, 250));
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setTitle("Exporting multiple files");
pack();
}
@Override
protected Component createMainComponent(boolean inWindowsBuilder) {
panel= new VerticalLayoutPanel();
return panel;
}
// public static void main(String []args){
// ArrayList<Map.Entry<String,String>> list = new ArrayList<>();
// list.add(new AbstractMap.SimpleEntry<String,String>("customers.jrxml", "Customers report template"));
// list.add(new AbstractMap.SimpleEntry<String,String>("customers.jasper", "Compiled customers report template"));
// MultiExportDialog dlg = new MultiExportDialog(null, "c:\\temp\\", list);
// dlg.showModal();
// }
@Override
protected String getOkButtonText(){
return "Export";
}
public String getExportDirectory(){
return dir.getFilename();
}
public String getExportPrefix(){
return prefix.getText();
}
}