/*
* Copyright (C) 2002 Erik Swenson - erik@oreports.com
*
* 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 reserved 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.
*
*/
package org.efs.openreports.actions.admin;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.efs.openreports.objects.ReportTemplate;
import org.efs.openreports.providers.DirectoryProvider;
import org.efs.openreports.providers.ReportProvider;
import com.opensymphony.xwork2.ActionSupport;
public class ReportUploadAction extends ActionSupport
{
private static final long serialVersionUID = 3832737720793888800L;
protected static Logger log = Logger.getLogger(ReportUploadAction.class);
private ReportProvider reportProvider;
private List<ReportTemplate> reportTemplates;
private File reportFile;
private String reportFileContentType;
private String reportFileFileName;
private String revision;
private String command;
private DirectoryProvider directoryProvider;
@Override
public String execute()
{
try
{
if ("upload".equals(command))
{
if (reportFile != null)
{
File destinationFile = new File(directoryProvider.getReportDirectory() + reportFileFileName);
try
{
if (destinationFile.exists())
{
int revisionCount = reportProvider.getReportTemplate(reportFileFileName).getRevisionCount();
File versionedFile = new File(directoryProvider.getReportDirectory() + reportFileFileName + "." + revisionCount);
FileUtils.copyFile(destinationFile, versionedFile);
}
FileUtils.copyFile(reportFile, destinationFile);
}
catch(IOException ioe)
{
addActionError(ioe.toString());
return SUCCESS;
}
}
else
{
addActionError("Invalid File.");
}
}
if ("download".equals(command))
{
String templateFileName = revision;
// if there is a revision at the end of the file name, strip it off
if (StringUtils.countMatches(templateFileName, ".") > 1)
{
templateFileName = revision.substring(0, revision.lastIndexOf("."));
}
File templateFile = new File(directoryProvider.getReportDirectory() + revision);
byte[] template = FileUtils.readFileToByteArray(templateFile);
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Content-disposition", "inline; filename=" + templateFileName);
response.setContentType("application/octet-stream");
response.setContentLength(template.length);
ServletOutputStream out = response.getOutputStream();
out.write(template, 0, template.length);
out.flush();
out.close();
}
if ("revert".equals(command))
{
String templateFileName = revision.substring(0, revision.lastIndexOf("."));
File revisionFile = new File(directoryProvider.getReportDirectory() + revision);
File currentFile = new File(directoryProvider.getReportDirectory() + templateFileName);
// create a new revision from the current version
int revisionCount = reportProvider.getReportTemplate(templateFileName).getRevisionCount();
File versionedFile = new File(directoryProvider.getReportDirectory() + templateFileName + "." + revisionCount);
FileUtils.copyFile(currentFile, versionedFile);
// copy the selected revision to the current version
FileUtils.copyFile(revisionFile, currentFile);
}
reportTemplates = reportProvider.getReportTemplates();
}
catch (Exception pe)
{
addActionError(pe.getMessage());
}
return SUCCESS;
}
public List<ReportTemplate> getReportTemplates()
{
return reportTemplates;
}
public void setReportProvider(ReportProvider reportProvider)
{
this.reportProvider = reportProvider;
}
public String getCommand()
{
return command;
}
public void setCommand(String command)
{
this.command = command;
}
public File getReportFile()
{
return reportFile;
}
public void setReportFile(File reportFile)
{
this.reportFile = reportFile;
}
public String getReportFileContentType()
{
return reportFileContentType;
}
public void setReportFileContentType(String reportFileContentType)
{
this.reportFileContentType = reportFileContentType;
}
public String getReportFileFileName()
{
return reportFileFileName;
}
public void setReportFileFileName(String reportFileFileName)
{
this.reportFileFileName = reportFileFileName;
}
public String getRevision()
{
return revision;
}
public void setRevision(String revision)
{
this.revision = revision;
}
public void setDirectoryProvider(DirectoryProvider directoryProvider)
{
this.directoryProvider = directoryProvider;
}
}