// 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.echocomp; import java.io.IOException; 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.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.UploadSelect; import nextapp.echo.filetransfer.app.event.UploadEvent; import nextapp.echo.filetransfer.app.event.UploadListener; import nextapp.echo.filetransfer.model.Upload; /** * This is an upload window that allows the user to choose a local file to be uploaded to the server. * * @author Tobias Kuhn */ public class UploadWindow extends WindowPane implements ActionListener, UploadListener { private static final long serialVersionUID = -8594954833738936914L; private ActionListener actionListener; private String fileContent; private Label fileLabel; private GeneralButton openButton; private long maxFileSize = 0; private String actionCommand = "Upload"; /** * Creates a new upload window. * * @param title The window title. * @param message The message that is displayed above the upload button. * @param parent The parent window. * @param actionListener An action-listener or null. */ public UploadWindow(String title, String message, WindowPane parent, ActionListener actionListener) { this.actionListener = actionListener; setTitle(title); setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); setModal(true); setWidth(new Extent(420)); setHeight(new Extent(200)); 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(UploadWindow.this, "Close")); } }); Grid grid = new Grid(1); grid.setInsets(new Insets(10, 10, 10, 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); for (String l : message.split("\\n")) { Label label = new Label(l); label.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); messageColumn.add(label); } UploadSelect uploadSelect = new UploadSelect(); uploadSelect.addUploadListener(this); //uploadSelect.setSendButtonDisplayed(false); //uploadSelect.setHeight(new Extent(40)); //uploadSelect.setWidth(new Extent(300)); messageColumn.add(uploadSelect); fileLabel = new Label(); messageColumn.add(fileLabel); grid.add(messageColumn); Row buttonBar = new Row(); buttonBar.setCellSpacing(new Extent(10)); buttonBar.setInsets(new Insets(0, 0, 0, 10)); openButton = new GeneralButton("Open", this, 100); openButton.setEnabled(false); buttonBar.add(openButton); buttonBar.add(new GeneralButton("Cancel", this, 100)); GridLayoutData layout2 = new GridLayoutData(); layout2.setAlignment(new Alignment(Alignment.CENTER, Alignment.BOTTOM)); buttonBar.setLayoutData(layout2); grid.add(buttonBar); add(grid); if (parent != null) { setPositionX(new Extent(parent.getPositionX().getValue() + (parent.getWidth().getValue() - getWidth().getValue())/2)); setPositionY(new Extent(parent.getPositionY().getValue() + (parent.getHeight().getValue() - getHeight().getValue())/2)); } } /** * Sets the maximum file size. * * @param maxFileSize The maximum file size in bytes. 0 for unlimited size. */ public void setMaxFileSize(long maxFileSize) { this.maxFileSize = maxFileSize; } /** * Sets the action command for the upload event. * * @param actionCommand The action command. */ public void setActionCommand(String actionCommand) { this.actionCommand = actionCommand; } /** * Returns the content of the uploaded file as a string. * * @return The content of the uploaded file. */ public String getFileContent() { return fileContent; } public void actionPerformed(ActionEvent e) { setVisible(false); if (actionListener == null) return; if (e.getActionCommand().equals("Open")) { actionListener.actionPerformed(new ActionEvent(this, actionCommand)); } } public void uploadComplete(UploadEvent e) { Upload upload = e.getUpload(); if (maxFileSize > 0 && upload.getSize() > maxFileSize) { fileContent = null; fileLabel.setText("The chosen file is too large (" + upload.getSize() + " Bytes)."); openButton.setEnabled(false); return; } try { byte[] b = new byte[(int) upload.getSize()]; upload.getInputStream().read(b, 0, (int) upload.getSize()); fileContent = new String(b); String fileName = upload.getFileName(); if (fileName.length() > 15) fileName = fileName.substring(0, 15) + "..."; fileLabel.setText("Chosen file: " + fileName + " (" + upload.getSize() + " Bytes)"); openButton.setEnabled(true); } catch (IOException ioe) { ioe.printStackTrace(); } } }