// This file is part of AceWiki.
// Copyright 2008-2013, AceWiki developers.
//
// AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
// Lesser General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// AceWiki 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
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
// not, see http://www.gnu.org/licenses/.
package ch.uzh.ifi.attempto.acewiki.gui;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.swing.DefaultListSelectionModel;
import nextapp.echo.app.Alignment;
import nextapp.echo.app.Column;
import nextapp.echo.app.Extent;
import nextapp.echo.app.Font;
import nextapp.echo.app.Grid;
import nextapp.echo.app.Insets;
import nextapp.echo.app.ListBox;
import nextapp.echo.app.Row;
import nextapp.echo.app.WindowPane;
import nextapp.echo.app.event.ActionEvent;
import nextapp.echo.app.event.ActionListener;
import nextapp.echo.app.event.WindowPaneEvent;
import nextapp.echo.app.event.WindowPaneListener;
import nextapp.echo.app.layout.GridLayoutData;
import nextapp.echo.filetransfer.app.AbstractDownloadProvider;
import nextapp.echo.filetransfer.app.DownloadCommand;
import ch.uzh.ifi.attempto.acewiki.Wiki;
import ch.uzh.ifi.attempto.acewiki.core.Ontology;
import ch.uzh.ifi.attempto.acewiki.core.OntologyExporter;
import ch.uzh.ifi.attempto.echocomp.GeneralButton;
import ch.uzh.ifi.attempto.echocomp.Label;
import ch.uzh.ifi.attempto.echocomp.Style;
import ch.uzh.ifi.attempto.echocomp.VSpace;
/**
* This is a window that allows the user to choose from different kinds of file types for
* exporting the current knowledge base.
*
* @author Tobias Kuhn
*/
public class ExportWindow extends WindowPane implements ActionListener {
private static final long serialVersionUID = -8594954833738936914L;
private Wiki wiki;
private List<OntologyExporter> exporters;
private ListBox listBox;
/**
* Creates a new export window.
*
* @param wiki The wiki instance.
*/
public ExportWindow(Wiki wiki) {
this.wiki = wiki;
setTitle(wiki.getGUIText("acewiki_exportwindow_title"));
setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
setModal(true);
setWidth(new Extent(420));
setHeight(new Extent(205));
setResizable(false);
setMovable(true);
setTitleBackground(Style.windowTitleBackground);
setStyleName("Default");
addWindowPaneListener(new WindowPaneListener() {
private static final long serialVersionUID = -3897741327122083261L;
public void windowPaneClosing(WindowPaneEvent e) {
actionPerformed(new ActionEvent(ExportWindow.this, "Close"));
}
});
Grid grid = new Grid(1);
grid.setInsets(new Insets(10, 10, 0, 0));
grid.setColumnWidth(0, new Extent(400));
grid.setRowHeight(0, new Extent(110));
Column messageColumn = new Column();
GridLayoutData layout1 = new GridLayoutData();
layout1.setAlignment(new Alignment(Alignment.LEFT, Alignment.TOP));
messageColumn.setLayoutData(layout1);
Label label = new Label(wiki.getGUIText("acewiki_exportwindow_message"));
label.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
messageColumn.add(label);
messageColumn.add(new VSpace());
exporters = wiki.getOntologyExportManager().getExporters();
String[] options = new String[exporters.size()];
for (int i = 0 ; i < exporters.size() ; i++) {
OntologyExporter e = exporters.get(i);
options[i] = wiki.getGUIText(e.getName()) + " (" + e.getFileSuffix() + ")";
}
listBox = new ListBox(options);
listBox.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
listBox.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(11)));
listBox.setBackground(Style.lightBackground);
listBox.setHeight(new Extent(70));
listBox.setWidth(new Extent(375));
listBox.setSelectedIndex(0);
messageColumn.add(listBox);
grid.add(messageColumn);
Row buttonBar = new Row();
buttonBar.setCellSpacing(new Extent(10));
buttonBar.add(new GeneralButton("acewiki_exportwindow_button", this, 100));
buttonBar.add(new GeneralButton("general_action_cancel", this, 100));
GridLayoutData layout2 = new GridLayoutData();
layout2.setAlignment(new Alignment(Alignment.CENTER, Alignment.TOP));
buttonBar.setLayoutData(layout2);
grid.add(buttonBar);
add(grid);
}
public void actionPerformed(ActionEvent e) {
setVisible(false);
if (e.getActionCommand().equals("acewiki_exportwindow_button")) {
final Ontology ontology = wiki.getOntology();
final OntologyExporter exporter = exporters.get(listBox.getSelectedIndices()[0]);
AbstractDownloadProvider provider = new AbstractDownloadProvider() {
private static final long serialVersionUID = 3491081007747916029L;
public String getContentType() {
return exporter.getContentType();
}
public String getFileName() {
return ontology.getName() + exporter.getFileSuffix();
}
public void writeFile(OutputStream out) throws IOException {
exporter.export(out, wiki.getLanguage());
}
};
wiki.getApplication().enqueueCommand(new DownloadCommand(provider));
}
}
}