/** * */ package org.korsakow.ide.ui.components.keywordpool; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.Collection; import org.dsrg.soenea.domain.MapperException; import org.dsrg.soenea.domain.command.CommandException; import org.korsakow.domain.CommandExecutor; import org.korsakow.domain.command.CountSnuByInKeywordCommand; import org.korsakow.domain.command.CountSnuByOutKeywordCommand; import org.korsakow.domain.command.Request; import org.korsakow.domain.interf.IKeyword; import org.korsakow.domain.interf.IProject; import org.korsakow.domain.interf.IResource; import org.korsakow.domain.interf.ISnu; import org.korsakow.domain.mapper.input.KeywordInputMapper; import org.korsakow.ide.Application; import org.korsakow.ide.controller.ApplicationAdapter; import org.korsakow.ide.resources.ResourceType; import org.korsakow.ide.ui.ResourceEditor; import org.korsakow.services.tdg.SnuTDG; public class KeywordPoolUpdateListener extends ApplicationAdapter implements Runnable { private final KeywordPool pool; public KeywordPoolUpdateListener(KeywordPool pool) { this.pool = pool; } public void run() { doUpdate(); } private void update() { Application.getInstance().enqueueCommonTask(this); } private void doUpdate() { Collection<IKeyword> keywords; try { keywords = KeywordInputMapper.findByObjectTypeRecursive( SnuTDG.NODE_NAME ); } catch (MapperException e) { keywords = new ArrayList<IKeyword>(); Application.getInstance().showUnhandledErrorDialog( e ); } final KeywordPoolModel model = new KeywordPoolModel(); model.beginBatchUpdate(); try { for (IKeyword keyword : keywords) { int inCount = CommandExecutor.executeCommand(CountSnuByInKeywordCommand.class, Request.single("keyword", keyword.getValue())).getInt("count"); int outCount = CommandExecutor.executeCommand(CountSnuByOutKeywordCommand.class, Request.single("keyword", keyword.getValue())).getInt("count"); model.add(keyword, inCount, outCount); } } catch (CommandException e) { Application.getInstance().showUnhandledErrorDialog(e); } model.endBatchUpdate(); pool.setModel(model); } @Override public void onKeywordsChanged() { update(); } @Override public void onProjectLoaded(IProject project) { } @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(); } public void updateHeader() { // we walk back through the editors from most recent to least // and find the most recent and still open snu editor Application app = Application.getInstance(); Collection<ResourceEditor> editors = app.getOpenEditors(); boolean didSetText = false; for (ResourceEditor editor : editors) { IResource resource = null; try { resource = app.getResourceForEditor(editor); } catch (MapperException e) { Application.getInstance().showUnhandledErrorDialog(e); } if (resource != null) { if (resource instanceof ISnu) { didSetText = true; pool.setHeaderText(resource.getName()); } } } if (!didSetText) pool.setHeaderText(""); } @Override public void onWindowActivated(WindowEvent event) { updateHeader(); } @Override public void onWindowClosed(WindowEvent event) { updateHeader(); } }