package org.docear.plugin.core.util; import java.io.EOFException; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; public class DocearFileNameFilter extends CharSequenceFilter { private final LinkedList<Character> charBuffer = new LinkedList<Character>(); private static Map<Character, String> fileNameFilter = new HashMap<Character, String>(); static { fileNameFilter.put('|'," "); fileNameFilter.put('?'," "); fileNameFilter.put('*'," "); fileNameFilter.put('\\'," "); fileNameFilter.put('/'," "); fileNameFilter.put('\''," "); fileNameFilter.put(':', "--"); fileNameFilter.put('"'," "); } public DocearFileNameFilter() { this(null); } public DocearFileNameFilter(CharSequenceFilter filter) { super(filter); } protected Character next() throws EOFException, IOException { if(charBuffer.size() > 0) { return charBuffer.remove(); } else { return super.next(); } } public Character filterCharacter(Character chr) { if (fileNameFilter.containsKey(chr)) { String replacement = fileNameFilter.get(chr); for(int i = 1; i < replacement.length(); i++) { charBuffer.add(replacement.charAt(i)); } return replacement.charAt(0); } return chr; } }