package org.safehaus.penrose.studio.federation.linking;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.safehaus.penrose.ldap.SearchResult;
import org.safehaus.penrose.studio.federation.linking.editor.IdentityLinkingPage;
import org.safehaus.penrose.federation.FederationRepositoryConfig;
import org.safehaus.penrose.federation.IdentityLinkingResult;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
/**
* @author Endi Sukma Dewata
*/
public class ImportTask implements IRunnableWithProgress {
IdentityLinkingPage page;
FederationRepositoryConfig repository;
private List<IdentityLinkingResult> results;
public ImportTask(IdentityLinkingPage page, FederationRepositoryConfig repository) {
this.page = page;
this.repository = repository;
}
public void run(final IProgressMonitor monitor) throws InvocationTargetException {
try {
monitor.beginTask("Importing "+repository.getName()+"...", results.size());
while (!results.isEmpty()) {
if (monitor.isCanceled()) throw new InterruptedException();
IdentityLinkingResult data = results.remove(0);
SearchResult entry = data.getEntry();
monitor.subTask("Processing "+entry.getDn()+"...");
SearchResult importedEntry = page.linkingClient.importEntry(entry);
data.setSearched(false);
data.addLinkedEntry(importedEntry);
data.removeMatchedEntries();
page.loadLocalEntry(data);
monitor.worked(1);
}
} catch (InterruptedException e) {
// ignore
} catch (Exception e) {
throw new InvocationTargetException(e);
} finally {
monitor.done();
}
}
public List<IdentityLinkingResult> getResults() {
return results;
}
public void setResults(List<IdentityLinkingResult> results) {
this.results = results;
}
}