org.wings.UploadFilterManager Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2000,2005 wingS development team.
*
* This file is part of wingS (http://wingsframework.org).
*
* wingS 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 2.1
* of the License, or (at your option) any later version.
*
* Please see COPYING for the complete licence.
*/
package org.wings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FilterOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.util.HashMap;
/**
* Provides FilterOutputStream, that filters incoming files in {@link SFileChooser} components.
*
* You can use UploadFilters to inspect the stream or rewrite it to some own format.
*
* @author Holger Engels
*/
public class UploadFilterManager {
private final transient static Logger log = LoggerFactory.getLogger(UploadFilterManager.class);
private static HashMap filterMappings = new HashMap();
public static void registerFilter(String name, Class filter, String errorText) {
if (!FilterOutputStream.class.isAssignableFrom(filter))
throw new IllegalArgumentException("class is not a FilterOutputStream!");
Entry entry = new Entry(filter);
entry.errorText = errorText;
filterMappings.put(name, entry);
}
public static void registerFilter(String name, Class filter) {
registerFilter(name, filter, null);
}
public static Class getFilterClass(String name) {
int dividerIndex = name.indexOf(SConstants.UID_DIVIDER);
name = name.substring(dividerIndex + 1);
return ((Entry) filterMappings.get(name)).filterClass;
}
public static FilterOutputStream createFilterInstance(String name, OutputStream out) {
FilterOutputStream filter = null;
try {
Entry entry = getFilterEntry(name);
if (entry == null)
filter = new FilterOutputStream(out);
else {
Class filterClass = entry.filterClass;
if (filterClass != null) {
log.info("using " + filterClass.getName() + " for " + name);
Constructor constructor = filterClass.getConstructor(new Class[]{OutputStream.class});
filter = (FilterOutputStream) constructor.newInstance(new Object[]{out});
entry.filterInstance = filter;
}
}
} catch (Exception e) {
log.error("Exception", e);
}
return filter;
}
public static FilterOutputStream getFilterInstance(String name) {
try {
Entry entry = getFilterEntry(name);
FilterOutputStream filterInstance = entry.filterInstance;
return filterInstance;
} catch (Exception e) {
log.error(null, e);
return null;
}
}
private static Entry getFilterEntry(String name) {
int dividerIndex = name.indexOf(SConstants.UID_DIVIDER);
name = name.substring(dividerIndex + 1);
return (Entry) filterMappings.get(name);
}
private static class Entry {
public Class filterClass;
public FilterOutputStream filterInstance;
public String errorText;
public Entry(Class filterClass) {
this.filterClass = filterClass;
}
public void setInstance(FilterOutputStream filterInstance) {
this.filterInstance = filterInstance;
}
}
}