org.sakaiproject.umem.tool.ui.Export.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.umem.tool.ui.Export.java

Source

/**********************************************************************************
 * $URL: https://source.sakaiproject.org/contrib/ufp/usermembership/trunk/tool/src/java/org/sakaiproject/umem/tool/ui/Export.java $
 * $Id: Export.java 4298 2007-03-16 12:47:20Z nuno@ufp.pt $
 ***********************************************************************************
 *
 * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.opensource.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 **********************************************************************************/

package org.sakaiproject.umem.tool.ui;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.jsf.spreadsheet.SpreadsheetDataFileWriterCsv;
import org.sakaiproject.jsf.spreadsheet.SpreadsheetDataFileWriterXls;
import org.sakaiproject.jsf.spreadsheet.SpreadsheetUtil;
import org.sakaiproject.util.ResourceLoader;

public class Export {

    /** Our log (commons). */
    private static Log LOG = LogFactory.getLog(SiteListBean.class);
    /** Resource bundle */
    private static transient ResourceLoader msgs = new ResourceLoader("org.sakaiproject.umem.tool.bundle.Messages");

    /**
     * Given tabular data and the file-name, export the data to the response output
     * stream as an excel workbook.
     * @param content The tabular data to export
     * @param prefixFileName A filename prefix. This will be appended with unique data and the proper file extension.
     */
    public static void writeAsXls(List<List<Object>> content, String prefixFileName) {
        SpreadsheetUtil.downloadSpreadsheetData(content, getFileName(prefixFileName),
                new SpreadsheetDataFileWriterXls());
    }

    public static void writeAsCsv(List<List<Object>> content, String prefixFileName) {
        SpreadsheetUtil.downloadSpreadsheetData(content, getFileName(prefixFileName),
                new SpreadsheetDataFileWriterCsv());
    }

    public static StringBuilder appendQuoted(StringBuilder sb, String toQuote) {
        if (toQuote == null) {
            ;
        } else if ((toQuote.indexOf(',') >= 0) || (toQuote.indexOf('"') >= 0)) {
            String out = toQuote.replaceAll("\"", "\"\"");
            if (LOG.isDebugEnabled())
                LOG.debug("Turning '" + toQuote + "' to '" + out + "'");
            sb.append("\"").append(out).append("\"");
        } else {
            sb.append(toQuote);
        }
        return sb;
    }

    /**
     * Gets the filename for the export
     * @param prefix Filenameprefix
     * @return The appropriate filename for the export
     */
    public static String getFileName(String prefix) {
        Date now = new Date();
        DateFormat df = new SimpleDateFormat(msgs.getString("export_filename_date_format"));
        StringBuilder fileName = new StringBuilder(prefix);
        fileName.append("-");
        fileName.append(df.format(now));
        return fileName.toString();
    }

    /**
     * Try to head off a problem with downloading files from a secure HTTPS
     * connection to Internet Explorer. When IE sees it's talking to a secure
     * server, it decides to treat all hints or instructions about caching as
     * strictly as possible. Immediately upon finishing the download, it throws
     * the data away. Unfortunately, the way IE sends a downloaded file on to a
     * helper application is to use the cached copy. Having just deleted the
     * file, it naturally isn't able to find it in the cache. Whereupon it
     * delivers a very misleading error message like: "Internet Explorer cannot
     * download roster from sakai.yoursite.edu. Internet Explorer was not able
     * to open this Internet site. The requested site is either unavailable or
     * cannot be found. Please try again later." There are several ways to turn
     * caching off, and so to be safe we use several ways to turn it back on
     * again. This current workaround should let IE users save the files to
     * disk. Unfortunately, errors may still occur if a user attempts to open
     * the file directly in a helper application from a secure web server. TODO
     * Keep checking on the status of this.
     */
    public static void protectAgainstInstantDeletion(HttpServletResponse response) {
        response.reset(); // Eliminate the added-on stuff
        response.setHeader("Pragma", "public"); // Override old-style cache
        // control
        response.setHeader("Cache-Control", "public, must-revalidate, post-check=0, pre-check=0, max-age=0"); // New-style
    }
}