/**
*
*/
package org.korsakow.ide.ui.components.linkpool;
import java.util.Collection;
import java.util.Collections;
import org.dsrg.soenea.domain.MapperException;
import org.korsakow.domain.interf.IProject;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.mapper.input.SnuInputMapper;
import org.korsakow.ide.Application;
import org.korsakow.ide.controller.ApplicationAdapter;
import org.korsakow.ide.resources.ResourceType;
public class LinkPoolUpdateListener extends ApplicationAdapter implements Runnable
{
private final LinkPool pool;
public LinkPoolUpdateListener(LinkPool pool)
{
this.pool = pool;
}
public void run()
{
doUpdate();
}
private void update()
{
Application.getInstance().enqueueCommonTask(this);
}
private void doUpdate()
{
Application app = Application.getInstance();
Collection<ISnu> snus;
try {
snus = SnuInputMapper.findAll();
} catch (MapperException e) {
Application.getInstance().showUnhandledErrorDialog(e);
snus = Collections.EMPTY_LIST;
}
LinkPoolModel model = new LinkPoolModel();
model.beginBatchUpdate();
for (ISnu snu : snus)
{
model.add(new SnuHeaderEntry( snu.getId(), snu.getName() ));
}
model.endBatchUpdate();
pool.setModel(model);
}
@Override
public void onKeywordsChanged() {
update();
}
@Override
public void onProjectLoaded(IProject project) {
update();
}
@Override
public void onResourceAdded(IResource resource) {
if (ResourceType.forId(resource.getType()) == ResourceType.SNU)
update();
}
@Override
public void onResourceDeleted(IResource resource) {
if (ResourceType.forId(resource.getType()) == ResourceType.SNU)
update();
}
@Override
public void onResourceModified(IResource resource) {
if (ResourceType.forId(resource.getType()) == ResourceType.SNU)
update();
}
@Override
public void onResourcesCleared() {
update();
}
}