// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // 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 // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: ExportGuidesAction.java,v 1.9 2008/03/17 15:12:47 spyromus Exp $ // package com.salas.bb.core.actions.guide; import com.salas.bb.core.GlobalController; import com.salas.bb.core.GlobalModel; import com.salas.bb.dialogs.guide.ExportGuidesDialog; import com.salas.bb.domain.GuidesSet; import com.salas.bb.domain.IGuide; import com.salas.bb.domain.StandardGuide; import com.salas.bb.utils.ThreadedAction; import com.salas.bb.utils.i18n.Strings; import com.salas.bb.utils.opml.Converter; import com.salas.bb.views.mainframe.MainFrame; import com.salas.bbutilities.opml.export.Exporter; import com.salas.bbutilities.opml.objects.OPMLGuide; import org.jdom.Document; import org.jdom.output.XMLOutputter; import javax.swing.*; import java.awt.event.ActionEvent; import java.io.FileOutputStream; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /** * Export of selected or all guides to OPML file. */ public final class ExportGuidesAction extends ThreadedAction { private static final Logger LOG = Logger.getLogger(ExportGuidesAction.class.getName()); private static final String OPML_TITLE = "BlogBridge Feeds"; private static ExportGuidesAction instance; /** * Hidden singleton constructor. */ private ExportGuidesAction() { setEnabled(false); } /** * Returns initialized instance. * * @return instance of action. */ public static synchronized ExportGuidesAction getInstance() { if (instance == null) instance = new ExportGuidesAction(); return instance; } /** * Actual action. * * @param event original event object. */ protected void doAction(ActionEvent event) { MainFrame mainFrame = GlobalController.SINGLETON.getMainFrame(); boolean isGuideSelected = GlobalModel.SINGLETON.getSelectedGuide() != null; ExportGuidesDialog dialog = new ExportGuidesDialog(mainFrame); dialog.setAllowSelectedGuide(isGuideSelected); dialog.open(); if (!dialog.hasBeenCanceled()) { String filename = dialog.getFilename(); boolean extended = dialog.isExtendedMode(); if (dialog.isSelectedGuideMode()) { processExportSelected(filename, extended); } else { processExportAll(filename, extended); } } } /** * Writes information to the specified file name. * * @param filename filename to use for writing. * @param extended TRUE to perform export in the extended mode. */ void processExportSelected(String filename, boolean extended) { IGuide[] guides = GlobalController.SINGLETON.getSelectedGuides(); if (guides.length > 0) { List<OPMLGuide> opmlGuides = new ArrayList<OPMLGuide>(guides.length); for (IGuide guide : guides) { if (guide instanceof StandardGuide) { opmlGuides.add(Converter.convertToOPML((StandardGuide)guide)); } } final OPMLGuide[] opmlGuidesA = opmlGuides.toArray(new OPMLGuide[opmlGuides.size()]); processExport(opmlGuidesA, filename, extended); } } /** * Writes information to the specified file name. * * @param filename filename to use for writing. * @param extended TRUE to perform export in the extended mode. */ void processExportAll(String filename, boolean extended) { GuidesSet set = GlobalModel.SINGLETON.getGuidesSet(); processExport(Converter.convertToOPML(set.getStandardGuides(null)), filename, extended); } /** * Exports guides to the specified file name. * * @param opmlGuides guide(s) to export * @param filename filename to use for writing. * @param extended TRUE to perform export in the extended mode. */ void processExport(OPMLGuide[] opmlGuides, String filename, boolean extended) { Exporter exporter = new Exporter(extended); Document doc = exporter.export(Converter.convertToOPML(opmlGuides, OPML_TITLE)); try { FileOutputStream fos = new FileOutputStream(filename); XMLOutputter xo = new XMLOutputter(); xo.output(doc, fos); fos.close(); } catch (IOException e) { processException(e); } } /** * Shows appropriate warning / error dialog. * * @param e exception object. */ private void processException(IOException e) { LOG.log(Level.SEVERE, Strings.error("failed.to.export.guide.data"), e); JOptionPane.showMessageDialog(GlobalController.SINGLETON.getMainFrame(), MessageFormat.format(Strings.message("export.guides.dialog.text.error"), e.getMessage()), Strings.message("export.guides.dialog.title"), JOptionPane.ERROR_MESSAGE); } }