/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.das2.jythoncompletion; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.text.Document; import javax.swing.text.JTextComponent; import org.das2.jythoncompletion.support.AsyncCompletionQuery; import org.das2.jythoncompletion.support.AsyncCompletionTask; import org.das2.jythoncompletion.support.CompletionProvider; import org.das2.jythoncompletion.support.CompletionResultSet; import org.das2.jythoncompletion.support.CompletionTask; import org.python.core.PyException; /** * * @author jbf */ public class JythonCompletionProvider implements CompletionProvider { CompletionSettings settings; private JythonCompletionProvider() { settings= new CompletionSettings(); settings.loadPreferences(); } private static JythonCompletionProvider instance; public static synchronized JythonCompletionProvider getInstance() { if ( instance==null ) instance= new JythonCompletionProvider(); return instance; } public CompletionSettings settings() { return settings; } public CompletionTask createTask( int arg0, JTextComponent arg1 ) { final CompletionTask syncTask= new JythonCompletionTask( arg1 ); return new AsyncCompletionTask( new AsyncCompletionQuery() { @Override protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) { try { syncTask.query(resultSet); } catch ( PyException ex ) { ex.printStackTrace(); if ( resultSet.isFinished() ) { setMessage("warning: "+ex.toString()); } else { resultSet.addItem( new MessageCompletionItem(ex.getMessage()) ); } } } }); } public int getAutoQueryTypes( JTextComponent arg0, String arg1 ) { return 0; } protected String message = null; public static final String PROP_MESSAGE = "message"; public String getMessage() { return message; } public void setMessage(String message) { String oldMessage = this.message; this.message = message; propertyChangeSupport.firePropertyChange(PROP_MESSAGE, oldMessage, message); } private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(listener); } public synchronized void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(propertyName, listener); } public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(propertyName, listener); } }