/*
* Copyright 2013 GiavaCms.org.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.giavacms.common.controller;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.giavacms.common.model.Uploadable;
import org.giavacms.common.model.UploadableProcessor;
import org.giavacms.common.util.FileUtils;
import org.jboss.logging.Logger;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
public class UploadableController<T extends Uploadable> implements Serializable
{
private static final long serialVersionUID = 1L;
Logger logger = Logger.getLogger(getClass());
Class<T> t;
List<T> files;
private List<UploadableProcessor<T>> processors = new ArrayList<UploadableProcessor<T>>();
public UploadableController(Class<T> t)
{
files = new ArrayList<T>();
this.t = t;
}
public void handleFileUpload(FileUploadEvent event)
{
// FacesMessage msg = new FacesMessage("Succesful", event.getFile()
// .getFileName() + " is uploaded.");
// FacesContext.getCurrentInstance().addMessage(null, msg);
T i;
try
{
i = t.newInstance();
i.setName(FileUtils.getLastPartOf(event.getFile().getFileName()));
i.setData(event.getFile().getContents());
boolean okToUpload = true;
for (UploadableProcessor<T> up : processors)
{
if (!okToUpload)
{
continue;
}
okToUpload = okToUpload & up.process(i);
}
if (okToUpload)
{
files.add(i);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public List<T> getFiles()
{
return files;
}
public void remove(String index)
{
getFiles().remove(Integer.parseInt(index));
}
public void setFiles(List<T> files)
{
this.files = files;
}
public void paint(OutputStream stream, Object object) throws IOException
{
stream.write(getFiles().get((Integer) object).getData());
stream.close();
}
public StreamedContent getContent(Integer index)
{
return new DefaultStreamedContent(new ByteArrayInputStream(getFiles()
.get(index).getData()), getFiles().get(index).getMime());
}
public long getTimeStamp()
{
return System.currentTimeMillis();
}
public String clearUploadData()
{
files.clear();
return null;
}
/**
* @param processor
*/
public void addProcessor(UploadableProcessor<T> processor)
{
if (processor != null)
this.processors.add(processor);
}
}