/** * */ package org.hyperdata.scute.source.popup; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; import java.util.Map; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.MenuElement; import javax.swing.MenuSelectionManager; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import org.hyperdata.scute.rdf.RdfUtils; import org.hyperdata.scute.source.EditorPane; import org.hyperdata.scute.system.Log; /** * @author danny * */ public class SourcePopupMenu extends JPopupMenu implements ActionListener { private static Map<String, String> prefixMap = RdfUtils.getAllPrefixes(); private static Map<String, String> snippetsMap; private EditorPane editorPane; public SourcePopupMenu(EditorPane editorPane) { super(); this.editorPane = editorPane; init(); } private void init() { Snippets snippets = new Snippets(this, editorPane.getSyntax()); snippetsMap = snippets.getMap(); Iterator<String> snippetIterator = snippetsMap.keySet().iterator(); while (snippetIterator.hasNext()) { String key = snippetIterator.next(); JMenuItem menuItem = new JMenuItem(key); menuItem.addActionListener(this); snippets.add(menuItem); } JMenu prefixes = new JMenu("Prefix"); Iterator<String> iterator = prefixMap.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); JMenuItem menuItem = new JMenuItem(key); menuItem.addActionListener(this); prefixes.add(menuItem); } if (!editorPane.getSyntax().equals("RDF/XML")) { // don't think it's the // best approach for // XML add(prefixes); } if (editorPane.getSyntax().equals("RDF/XML")) { // can't think of any useful snippets for Turtle add(snippets); } } /* * (non-Javadoc) * * @see * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent event) { MenuElement[] path = MenuSelectionManager.defaultManager() .getSelectedPath(); JMenuItem source = (JMenuItem) event.getSource(); String name = source.getText(); if(snippetsMap.containsKey(name)){ // not ideal, potential for conflicts insertText(snippetsMap.get(name) + "\n"); return; } if (editorPane.getSyntax().equals("SPARQL")) { insertText("PREFIX " + name + ":\t\t" + "<" + prefixMap.get(name) + ">\n"); return; } if (editorPane.getSyntax().equals("Turtle")) { insertText("@PREFIX " + name + ":\t\t" + "<" + prefixMap.get(name) + "> .\n"); return; } // RDF/XML version not nice - and not sure it's useful } private void insertText(String insert) { Document doc = editorPane.getDocument(); try { doc.insertString(0, insert, null); } catch (BadLocationException exception) { Log.exception(exception); } } }