001 // This file is part of AceWiki. 002 // Copyright 2008-2012, AceWiki developers. 003 // 004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU 005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of 006 // the License, or (at your option) any later version. 007 // 008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 // Lesser General Public License for more details. 011 // 012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If 013 // not, see http://www.gnu.org/licenses/. 014 015 package ch.uzh.ifi.attempto.acewiki.gui; 016 017 import java.io.IOException; 018 import java.io.OutputStream; 019 import java.util.List; 020 021 import javax.swing.DefaultListSelectionModel; 022 023 import nextapp.echo.app.Alignment; 024 import nextapp.echo.app.Column; 025 import nextapp.echo.app.Extent; 026 import nextapp.echo.app.Font; 027 import nextapp.echo.app.Grid; 028 import nextapp.echo.app.Insets; 029 import nextapp.echo.app.ListBox; 030 import nextapp.echo.app.Row; 031 import nextapp.echo.app.WindowPane; 032 import nextapp.echo.app.event.ActionEvent; 033 import nextapp.echo.app.event.ActionListener; 034 import nextapp.echo.app.event.WindowPaneEvent; 035 import nextapp.echo.app.event.WindowPaneListener; 036 import nextapp.echo.app.layout.GridLayoutData; 037 import nextapp.echo.filetransfer.app.AbstractDownloadProvider; 038 import nextapp.echo.filetransfer.app.DownloadCommand; 039 import ch.uzh.ifi.attempto.acewiki.Wiki; 040 import ch.uzh.ifi.attempto.acewiki.core.Ontology; 041 import ch.uzh.ifi.attempto.acewiki.core.OntologyExporter; 042 import ch.uzh.ifi.attempto.echocomp.GeneralButton; 043 import ch.uzh.ifi.attempto.echocomp.Label; 044 import ch.uzh.ifi.attempto.echocomp.Style; 045 import ch.uzh.ifi.attempto.echocomp.VSpace; 046 047 /** 048 * This is a window that allows the user to choose from different kinds of file types for 049 * exporting the current knowledge base. 050 * 051 * @author Tobias Kuhn 052 */ 053 public class ExportWindow extends WindowPane implements ActionListener { 054 055 private static final long serialVersionUID = -8594954833738936914L; 056 057 private Wiki wiki; 058 059 private List<OntologyExporter> exporters; 060 private ListBox listBox; 061 062 /** 063 * Creates a new export window. 064 * 065 * @param wiki The wiki instance. 066 */ 067 public ExportWindow(Wiki wiki) { 068 this.wiki = wiki; 069 070 setTitle("Export"); 071 setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); 072 setModal(true); 073 setWidth(new Extent(420)); 074 setHeight(new Extent(200)); 075 setResizable(false); 076 setMovable(true); 077 setTitleBackground(Style.windowTitleBackground); 078 setStyleName("Default"); 079 080 addWindowPaneListener(new WindowPaneListener() { 081 082 private static final long serialVersionUID = -3897741327122083261L; 083 084 public void windowPaneClosing(WindowPaneEvent e) { 085 actionPerformed(new ActionEvent(ExportWindow.this, "Close")); 086 } 087 088 }); 089 090 Grid grid = new Grid(1); 091 grid.setInsets(new Insets(10, 10, 10, 0)); 092 grid.setColumnWidth(0, new Extent(400)); 093 grid.setRowHeight(0, new Extent(110)); 094 095 Column messageColumn = new Column(); 096 GridLayoutData layout1 = new GridLayoutData(); 097 layout1.setAlignment(new Alignment(Alignment.LEFT, Alignment.TOP)); 098 messageColumn.setLayoutData(layout1); 099 100 Label label = new Label("Choose the type of export from the list:"); 101 label.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); 102 messageColumn.add(label); 103 messageColumn.add(new VSpace()); 104 105 exporters = wiki.getOntologyExportManager().getExporters(); 106 String[] options = new String[exporters.size()]; 107 for (int i = 0 ; i < exporters.size() ; i++) { 108 OntologyExporter e = exporters.get(i); 109 options[i] = e.getName() + " (" + e.getFileSuffix() + ")"; 110 } 111 112 listBox = new ListBox(options); 113 listBox.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION); 114 listBox.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(11))); 115 listBox.setBackground(Style.lightBackground); 116 listBox.setHeight(new Extent(70)); 117 listBox.setWidth(new Extent(375)); 118 listBox.setSelectedIndex(0); 119 messageColumn.add(listBox); 120 121 grid.add(messageColumn); 122 123 Row buttonBar = new Row(); 124 buttonBar.setCellSpacing(new Extent(10)); 125 buttonBar.setInsets(new Insets(0, 0, 0, 10)); 126 buttonBar.add(new GeneralButton("Export", 80, this)); 127 buttonBar.add(new GeneralButton("Cancel", 80, this)); 128 GridLayoutData layout2 = new GridLayoutData(); 129 layout2.setAlignment(new Alignment(Alignment.CENTER, Alignment.BOTTOM)); 130 buttonBar.setLayoutData(layout2); 131 grid.add(buttonBar); 132 133 add(grid); 134 } 135 136 public void actionPerformed(ActionEvent e) { 137 setVisible(false); 138 139 if (e.getActionCommand().equals("Export")) { 140 141 final Ontology ontology = wiki.getOntology(); 142 final OntologyExporter exporter = exporters.get(listBox.getSelectedIndices()[0]); 143 144 AbstractDownloadProvider provider = new AbstractDownloadProvider() { 145 146 private static final long serialVersionUID = 3491081007747916029L; 147 148 public String getContentType() { 149 return exporter.getContentType(); 150 } 151 152 public String getFileName() { 153 return ontology.getName() + exporter.getFileSuffix(); 154 } 155 156 public void writeFile(OutputStream out) throws IOException { 157 exporter.export(out); 158 } 159 160 }; 161 162 wiki.getApplication().enqueueCommand(new DownloadCommand(provider)); 163 } 164 } 165 166 }