/*
* 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 (at your option) 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.
*
* VCS information:
* $Date: 2005-12-26 21:46:18 +0100 (Mo, 26 Dez 2005) $
* $Author: troggan $
* $Revision: 1764 $
*/
package calendarexportplugin.exporter;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.apache.commons.lang.StringUtils;
import util.program.AbstractPluginProgramFormating;
import util.ui.ExtensionFileFilter;
import util.ui.Localizer;
import calendarexportplugin.CalendarExportPlugin;
import calendarexportplugin.CalendarExportSettings;
import calendarexportplugin.utils.CalendarToolbox;
import devplugin.Program;
public abstract class CalExporter extends AbstractExporter {
/** Translator */
private static final Localizer mLocalizer = Localizer
.getLocalizerFor(CalExporter.class);
/** Path for File */
private String mSavePath;
private String mExtension;
private String mExtensionFilter;
public CalExporter(String extension, String extensionFilter) {
mExtension = extension;
mExtensionFilter = extensionFilter;
}
public boolean exportPrograms(Program[] programs, CalendarExportSettings settings,
AbstractPluginProgramFormating formatting) {
mSavePath = getSavePath(settings);
File file = chooseFile(programs);
if (file == null) {
return false;
}
if (file.exists()) {
int result = JOptionPane.showConfirmDialog(CalendarExportPlugin
.getInstance().getBestParentFrame(), mLocalizer.msg(
"overwriteMessage", "The File \n{0}\nalready exists. Overwrite it?",
file.getAbsolutePath()), mLocalizer.msg("overwriteTitle",
"Overwrite?"), JOptionPane.YES_NO_OPTION);
if (result != JOptionPane.YES_OPTION) {
return false;
}
}
mSavePath = file.getAbsolutePath();
setSavePath(settings, mSavePath);
export(file, programs, settings, formatting);
return true;
}
/**
* Shows a file chooser for calendar Files.
*
* @return selected File
* @param programs
* programs that are exported
*/
private File chooseFile(Program[] programs) {
JFileChooser select = new JFileChooser();
ExtensionFileFilter vCal = new ExtensionFileFilter(mExtension,
mExtensionFilter);
select.addChoosableFileFilter(vCal);
String ext = "." + mExtension;
if (mSavePath != null) {
select.setSelectedFile(new File(mSavePath));
select.setFileFilter(vCal);
}
// check if all programs have same title. if so, use as filename
String fileName = programs[0].getTitle();
for (int i = 1; i < programs.length; i++) {
if (!programs[i].getTitle().equals(fileName)) {
fileName = "";
}
}
fileName = CalendarToolbox.cleanFilename(fileName);
if (StringUtils.isNotEmpty(fileName)) {
if (mSavePath == null) {
mSavePath = "";
}
select.setSelectedFile(new File((new File(mSavePath).getParent())
+ File.separator + fileName + ext));
}
if (select.showSaveDialog(CalendarExportPlugin.getInstance()
.getBestParentFrame()) == JFileChooser.APPROVE_OPTION) {
String filename = select.getSelectedFile().getAbsolutePath();
if (!filename.toLowerCase().endsWith(ext)) {
if (filename.endsWith(".")) {
filename = filename.substring(0, filename.length() - 1);
}
filename = filename + ext;
}
return new File(filename);
}
return null;
}
protected abstract String getSavePath(CalendarExportSettings settings);
protected abstract void setSavePath(CalendarExportSettings settings, String path);
protected abstract void export(File file, Program[] programs,
CalendarExportSettings settings, AbstractPluginProgramFormating formatting);
}