package eu.jucy.adlsearch;
import helpers.PreferenceChangedAdapter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.preferences.InstanceScope;
import eu.jucy.adlsearch.ui.ADLFieldEditor;
import uc.files.filelist.FileList;
import uc.files.filelist.FileListFile;
import uc.files.filelist.FileListFolder;
import uc.files.filelist.IFilelistProcessor;
public class ADLFileListProcessor implements IFilelistProcessor {
public static final String PLUGIN_ID = "eu.jucy.adlsearch";
public static final String adlID = "ADLEntrys";
private List<ADLSearchEntry> entrys = Collections.synchronizedList(new ArrayList<ADLSearchEntry>());
public ADLFileListProcessor() {
new PreferenceChangedAdapter(InstanceScope.INSTANCE .getNode(PLUGIN_ID),adlID) {
@Override
public void preferenceChanged(String preference,String oldValue,String newValue) {
update();
}
};
update();
}
private void update() {
entrys.clear();
List<ADLSearchEntry> allEntrys = ADLFieldEditor.loadFromString(InstanceScope.INSTANCE .getNode(PLUGIN_ID).get(adlID, null));
synchronized(entrys) {
for (ADLSearchEntry entry: allEntrys) {
if (entry.canBeUsed()) {
entrys.add(entry);
}
}
}
}
/**
* searches through the hole FileList and copies matching files
* into the folders..
*/
public void processFilelist(FileList fileList, boolean onDownload) {
synchronized(entrys) {
for (FileListFile file :fileList.getFileIterable()) {
for (ADLSearchEntry entry:entrys) {
if (entry.matches(file)) {
FileListFolder folder = fileList.getRoot().getChildPerName(entry.getTargetFolder());
if (folder == null) {
folder = new ADLFileListFolder(fileList.getRoot(),entry.getTargetFolder()){};
}
new ADLFileListFile((ADLFileListFolder)folder,file);
if (entry.isDownloadMatches() && onDownload) {
file.download();
}
}
}
}
for (ADLSearchEntry entry:entrys) {
entry.finishedSearch();
}
}
}
}