package org.korsakow.ide.ui.components.keywordpool; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Collection; import javax.swing.JComponent; import org.korsakow.domain.interf.IKeyword; import org.korsakow.ide.Application; import org.korsakow.ide.code.k5.K5Code; import org.korsakow.ide.code.k5.K5Symbol; import org.korsakow.ide.ui.ResourceEditor; import org.korsakow.ide.ui.components.code.CodeTableModel; import org.korsakow.ide.ui.resources.ResourceView; import org.korsakow.ide.ui.resources.SnuResourceView; public class KeywordPoolInOutListener implements ActionListener { KeywordPool pool; public KeywordPoolInOutListener(KeywordPool pool) { this.pool = pool; } public void actionPerformed(ActionEvent event) { Object id = ((JComponent)event.getSource()).getClientProperty("poolid"); if (event.getActionCommand() == KeywordHeader.IN_ACTION) inAction(id); else if (event.getActionCommand() == KeywordHeader.OUT_ACTION) outAction(id); else if (event.getActionCommand() == KeywordHeader.ITEM_ACTION) itemAction(id); } /** * Adds the keyword as an in keyword * @param id */ private void inAction(Object id) { IKeyword keyword = pool.getModel().getEntry(id).getKeyword(); Application app = Application.getInstance(); ResourceEditor editor = app.getMostRecentFocusedEditor(); if (editor == null) return; ResourceView resourceView = editor.getResourceView(); if (resourceView instanceof SnuResourceView) { SnuResourceView snuView = (SnuResourceView)resourceView; Collection<IKeyword> keywords = snuView.getKeywords(); if (keywords.contains(keyword)) keywords.remove(keyword); else keywords.add(keyword); snuView.setKeywords(keywords); editor.toFront(); } } /** * Adds the keyword as an out keyword * @param id */ private void outAction(Object id) { IKeyword keyword = pool.getModel().getEntry(id).getKeyword(); Application app = Application.getInstance(); ResourceEditor editor = app.getMostRecentFocusedEditor(); if (editor == null) return; ResourceView resourceView = editor.getResourceView(); if (resourceView instanceof SnuResourceView) { SnuResourceView snuView = (SnuResourceView)resourceView; if (snuView.getCodeTable().getRowCount() == 0) return; int selectedRow = snuView.getCodeTable().getSelectedRow(); if (selectedRow == -1) selectedRow = 0; if (selectedRow != -1) { CodeTableModel model = snuView.getCodeTable().getModel(); K5Code code = model.getCodeAt(selectedRow); String raw = code.getRawCode(); raw += K5Symbol.DEFAULT_STATEMENT_SEPARATOR_STRING + keyword.getValue(); code = new K5Code(raw); model.setCodeAt(code, selectedRow); editor.toFront(); } } } private void itemAction(Object id) { inAction(id); outAction(id); } }