From: <kp...@us...> - 2011-11-08 19:49:28
|
Revision: 20261 http://jedit.svn.sourceforge.net/jedit/?rev=20261&view=rev Author: kpouer Date: 2011-11-08 19:49:20 +0000 (Tue, 08 Nov 2011) Log Message: ----------- initial commit of SmartOpen plugin Added Paths: ----------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/actions.xml plugins/SmartOpen/trunk/build.xml plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/ plugins/SmartOpen/trunk/src/com/ plugins/SmartOpen/trunk/src/com/kpouer/ plugins/SmartOpen/trunk/src/com/kpouer/jedit/ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java Added: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props (rev 0) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,36 @@ +# SmartOpen jEdit Plugin +# Author: Matthieu Casanova + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.0.0 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 04.04.01.00 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.docs=docs/SmartOpen.html + + + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.option-pane=smartopen +options.smartopen.label=Ancestor +options.smartopen.code=new com.kpouer.jedit.smartopen.SmartOpenOptionPane(); + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.menu=smart-open-dialog \ + smart-open-reindex + +smart-open-reindex.label=re-index +smart-open-dialog.label=Smart Open + +options.smartopen.ExcludeDirectories=CVS .svn .git +options.smartopen.IncludeGlobs=* +options.smartopen.IncludeGlobs.label=Include only files matching: +options.smartopen.ExcludeGlobs=*.*~ *.bak *.bmp *.ico *.gif *.gif *.png *.jpg *.class *.exe *.obj *.jar *.zip *.7z *.rar *.tar *.gz *.tgz *.wav *.mp3 *.ogg +options.smartopen.ExcludeGlobs.label=... except files matching: + + +options.smartopen.paths.label=Choose paths to monitor: + +options.smartopen.projectindex=false +options.smartopen.projectindex.label=Index current project \ No newline at end of file Added: plugins/SmartOpen/trunk/actions.xml =================================================================== --- plugins/SmartOpen/trunk/actions.xml (rev 0) +++ plugins/SmartOpen/trunk/actions.xml 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<!DOCTYPE ACTIONS SYSTEM "actions.dtd"> +<ACTIONS> + <ACTION NAME="smart-open-dialog" NO_REPEAT="TRUE"> + <CODE> + com.kpouer.jedit.smartopen.FileItemFinder itemFinder = new com.kpouer.jedit.smartopen.FileItemFinder(); + common.gui.itemfinder.ItemFinderWindow.showWindow(view, itemFinder); + </CODE> + </ACTION> + <ACTION NAME="smart-open-reindex" NO_REPEAT="TRUE"> + <CODE> + com.kpouer.jedit.smartopen.SmartOpenPlugin.indexFiles(); + </CODE> + </ACTION> +</ACTIONS> + Added: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml (rev 0) +++ plugins/SmartOpen/trunk/build.xml 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,20 @@ +<project name="SmartOpen" default="build" basedir="."> + <property name="docs-proc.target" value="none"/> + + <!-- Read optional properties from various places --> + <!-- Latter ones override previous properties. --> + <property file="../build.properties"/> + <property file="build.properties"/> + + <property name="dist.target" value="dist.complete"/> + <property name="compiler.source" value="1.6"/> + <property name="compiler.target" value="1.6"/> + <property name="debug" value="on"/> + <property name="jedit.plugins.dir" value="${install.dir}"/> + + <import file="${build.support}/plugin-build.xml"/> + + <path id="project.class.path"> + <pathelement location="${install.dir}/CommonControls.jar" /> + </path> +</project> \ No newline at end of file Added: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml (rev 0) +++ plugins/SmartOpen/trunk/ivy.xml 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,8 @@ +<ivy-module version="2.0"> + <info organisation="jedit-plugins" module="Ancestor"/> + <dependencies> + <dependency org="org.apache.lucene" name="lucene-core" rev="3.4.0"/> + <!--<dependency org="jedit-plugins" name="CommonControls" rev="1.4"/>--> + <dependency org="jedit-plugins" name="ProjectViewer" rev="3.2.0"/> + </dependencies> +</ivy-module> \ No newline at end of file Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,198 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Pattern; + +import com.kpouer.jedit.smartopen.indexer.FileProvider; +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.Fieldable; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.Term; +import org.apache.lucene.queryParser.QueryParser; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.TopDocs; +import org.apache.lucene.search.WildcardQuery; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; +import org.apache.lucene.store.RAMDirectory; +import org.apache.lucene.util.Version; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.io.VFSFile; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.util.IOUtilities; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.ProgressObserver; + +/** + * @author Matthieu Casanova + */ +public class FileIndex +{ + private static final Pattern CAMELCASE = Pattern.compile("(?<!^)(?=[A-Z])"); + private Directory directory; + private final Object LOCK = new Object(); + private final String[] indexes = { "index1", "index2" }; + private int indexPos; + + public FileIndex() + { + EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); + File pluginHome = plugin.getPluginHome(); + String indexName = getIndexName(); + File index = new File(pluginHome, indexName); + index.mkdirs(); + try + { + directory = FSDirectory.open(index); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + directory = new RAMDirectory(); + } + } + + private String getIndexName() + { + indexPos = (indexPos + 1) % 2; + String indexName = indexes[indexPos]; + return indexName; + } + + public List<String> getFiles(String s) + { + if (s == null || s.isEmpty()) + return Collections.emptyList(); + try + { + if (!IndexReader.indexExists(directory)) + return Collections.emptyList(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + return Collections.emptyList(); + } + IndexSearcher searcher = null; + List<String> l = new ArrayList<String>(); + try + { + QueryParser parser = + new QueryParser(Version.LUCENE_34, "name", new StandardAnalyzer(Version.LUCENE_34)); + parser.setAllowLeadingWildcard(true); + String[] split = CAMELCASE.split(s); + StringBuilder builder = new StringBuilder(s.length() + split.length + 2); + for (int i = 0; i < split.length; i++) + { + builder.append(split[i]).append('*'); + } + builder.append('*'); + Query queryCaps = new WildcardQuery(new Term("name_caps", builder.toString())); + s = s.toLowerCase(); + Query queryNoCaps = new WildcardQuery(new Term("name", '*' + s + '*')); + + BooleanQuery query = new BooleanQuery(); + queryCaps.setBoost(10); + query.add(queryCaps, BooleanClause.Occur.SHOULD); + query.add(queryNoCaps, BooleanClause.Occur.SHOULD); + + searcher = new IndexSearcher(directory); + + TopDocs search = searcher.search(query, 100); + ScoreDoc[] scoreDocs = search.scoreDocs; + for (ScoreDoc scoreDoc : scoreDocs) + { + Document doc = searcher.doc(scoreDoc.doc); + Fieldable path = doc.getFieldable("path"); + l.add(path.stringValue()); + } + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + finally + { + IOUtilities.closeQuietly(searcher); + } + return l; + } + + public void addFiles(FileProvider fileProvider, ProgressObserver observer) + { + synchronized (LOCK) + { + IndexWriter writer = null; + try + { + EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); + File pluginHome = plugin.getPluginHome(); + File index = new File(pluginHome, getIndexName()); + Directory tempDirectory = FSDirectory.open(index); + observer.setMaximum(fileProvider.size()); + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_34); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34, analyzer); + conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE); + writer = new IndexWriter(tempDirectory, conf); + for (int i = 0; i < fileProvider.size(); i++) + { + observer.setValue(i); + VFSFile next = fileProvider.next(); + observer.setStatus(next.getPath()); + Document document = new Document(); + document.add( + new Field("path", next.getPath(), Field.Store.YES, Field.Index.NO)); + + document.add(new Field("name", next.getName(), Field.Store.NO, + Field.Index.ANALYZED)); + document.add(new Field("name_caps", next.getName(), Field.Store.NO, + Field.Index.NOT_ANALYZED)); + writer.addDocument(document); + } + directory = tempDirectory; + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + finally + { + IOUtilities.closeQuietly(writer); + } + } + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,100 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.AbstractListModel; +import javax.swing.ListCellRenderer; +import javax.swing.ListModel; + +import common.gui.itemfinder.AbstractItemFinder; +import common.gui.itemfinder.PathCellRenderer; +import org.gjt.sp.jedit.jEdit; + +/** + * @author Matthieu Casanova + */ +public class FileItemFinder extends AbstractItemFinder<String> +{ + private final MyListModel model; + private final ListCellRenderer listCellRenderer; + + public FileItemFinder() + { + model = new MyListModel(); + listCellRenderer = new PathCellRenderer(); + } + + @Override + public ListModel getModel() + { + return model; + } + + @Override + public void updateList(String s) + { + List<String> files = SmartOpenPlugin.itemFinder.getFiles(s); + model.setData(files); + } + + @Override + public void selectionMade(String item) + { + jEdit.openFile(jEdit.getActiveView().getEditPane(), item); + } + + @Override + public ListCellRenderer getListCellRenderer() + { + return listCellRenderer; + } + + private static class MyListModel extends AbstractListModel + { + private List<String> data; + + private MyListModel() + { + data = new ArrayList<String>(); + } + + public void setData(List<String> data) + { + this.data = data; + fireContentsChanged(this, 0, data.size()); + } + + @Override + public int getSize() + { + return data.size(); + } + + @Override + public Object getElementAt(int index) + { + return data.get(index); + } + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,106 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 jEdit contributors + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +import java.awt.GridBagConstraints; +import java.util.regex.Pattern; +import javax.swing.JCheckBox; +import javax.swing.JTextField; +import javax.swing.border.EmptyBorder; + +import common.gui.VFSPathFileList; +import org.gjt.sp.jedit.AbstractOptionPane; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.util.StandardUtilities; + +/** + * @author Matthieu Casanova + */ +public class SmartOpenOptionPane extends AbstractOptionPane +{ + private JCheckBox indexProject; + private JTextField includeFilesTF; + private JTextField excludeFilesTF; + private static Pattern include; + private static Pattern exclude; + + private VFSPathFileList paths; + + public SmartOpenOptionPane() + { + super("Ancestor"); + } + + @Override + protected void _init() + { + setBorder(new EmptyBorder(5, 5, 5, 5)); + paths = new VFSPathFileList("options.ancestor.paths"); + addComponent(paths, GridBagConstraints.BOTH); + includeFilesTF = new JTextField(jEdit.getProperty("options.smartopen.IncludeGlobs")); + addComponent(jEdit.getProperty("options.smartopen.IncludeGlobs.label"), includeFilesTF); + excludeFilesTF = new JTextField(jEdit.getProperty("options.smartopen.ExcludeGlobs")); + addComponent(jEdit.getProperty("options.smartopen.ExcludeGlobs.label"), excludeFilesTF); + + indexProject = new JCheckBox(jEdit.getProperty("options.smartopen.projectindex.label")); + indexProject.setSelected(jEdit.getBooleanProperty("options.smartopen.projectindex")); + addComponent(indexProject); + } + + @Override + protected void _save() + { + jEdit.setProperty("options.smartopen.IncludeGlobs", includeFilesTF.getText()); + jEdit.setProperty("options.smartopen.ExcludeGlobs", excludeFilesTF.getText()); + jEdit.setBooleanProperty("options.smartopen.projectindex", indexProject.isSelected()); + paths.save(); + updateFilter(); + } + + private static Pattern globToPattern(String filter) + { + String[] parts = filter.split(" "); + StringBuilder sb = new StringBuilder(); + for (String part : parts) + { + if (sb.length() > 0) + sb.append('|'); + String regexp = StandardUtilities.globToRE(part); + sb.append(regexp); + } + return Pattern.compile(sb.toString()); + } + + public static boolean accept(CharSequence path) + { + if (include == null || exclude == null) + updateFilter(); + return include.matcher(path).matches() && + !exclude.matcher(path).matches(); + } + + private static void updateFilter() + { + include = globToPattern(jEdit.getProperty("options.smartopen.IncludeGlobs")); + exclude = globToPattern(jEdit.getProperty("options.smartopen.ExcludeGlobs")); + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,237 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +import java.awt.Component; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.Timer; + +import com.kpouer.jedit.smartopen.indexer.IndexFilesTask; +import com.kpouer.jedit.smartopen.indexer.IndexProjectTask; +import org.gjt.sp.jedit.EditBus; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.PropertiesChanged; +import org.gjt.sp.jedit.msg.ViewUpdate; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.StandardUtilities; +import org.gjt.sp.util.Task; +import org.gjt.sp.util.ThreadUtilities; +import projectviewer.ProjectViewer; +import projectviewer.event.ViewerUpdate; +import projectviewer.vpt.VPTNode; +import projectviewer.vpt.VPTProject; + +/** + * @author Matthieu Casanova + */ +public class SmartOpenPlugin extends EditPlugin +{ + private final Map<View, SmartOpenToolbar> viewAncestorToolBar = new HashMap<View, SmartOpenToolbar>(); + private final Map<View, JComponent> topToolbars = new HashMap<View, JComponent>(); + + public static FileIndex itemFinder; + private Timer timer; + + private static VPTProject currenProject; + + //{{{ start() method + @Override + public void start() + { + itemFinder = new FileIndex(); + indexFiles(); + + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + addToolbar(views[i]); + } + EditBus.addToBus(this); + timer = new Timer(60000, new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + indexFiles(); + } + }); + timer.start(); + } //}}} + + //{{{ addAncestorToolBar() method + private void addToolbar(View view) + { + if (viewAncestorToolBar.containsKey(view)) + return; + SmartOpenToolbar smartToolbar = new SmartOpenToolbar(view); + JComponent toolBar = getViewToolbar(view); + toolBar.add(smartToolbar); + topToolbars.put(view, toolBar); + viewAncestorToolBar.put(view, smartToolbar); + } //}}} + + private JComponent getViewToolbar(View view) + { + try + { + Field topToolBarsField = view.getClass().getDeclaredField("topToolBars"); + topToolBarsField.setAccessible(true); + JPanel topToolBars = (JPanel) topToolBarsField.get(view); + Component[] components = topToolBars.getComponents(); + + if (components.length > 1) + { + for (int i = 1; i < components.length; i++) + { + Component component = components[i]; + if (component instanceof JComponent) + { + JComponent toolBar = (JComponent) component; + if (toolBar.getClientProperty("Ancestor-SmartOpen") == Boolean.TRUE) + return toolBar; + + } + } + } + } + catch (NoSuchFieldException e) + { + Log.log(Log.ERROR, this, e); + } + catch (IllegalAccessException e) + { + Log.log(Log.ERROR, this, e); + } + JPanel customToolbar = new JPanel(new FlowLayout(FlowLayout.LEADING)); + customToolbar.putClientProperty("Ancestor-SmartOpen", Boolean.TRUE); + view.addToolBar(customToolbar); + return customToolbar; + } + + //{{{ removeAncestorToolBar() method + private void removeAncestorToolBar(View view) + { + SmartOpenToolbar toolBar = viewAncestorToolBar.get(view); + JComponent top = topToolbars.get(view); + top.remove(toolBar); + if (top.getComponentCount() == 0) + { + view.removeToolBar(top); + topToolbars.remove(view); + } + else + { + top.validate(); + top.repaint(); + } + viewAncestorToolBar.remove(view); + } //}}} + + public static void indexFiles() + { + if (jEdit.getBooleanProperty("options.smartopen.projectindex")) + { + VPTProject activeProject = ProjectViewer.getActiveProject(jEdit.getActiveView()); + if (StandardUtilities.objectsEqual(currenProject, activeProject)) + { + return; + } + currenProject = activeProject; + if (currenProject != null) + { + IndexProjectTask task = new IndexProjectTask(currenProject); + ThreadUtilities.runInBackground(task); + } + else + { + Task task = new IndexFilesTask(); + ThreadUtilities.runInBackground(task); + } + } + else + { + currenProject = null; + Task task = new IndexFilesTask(); + ThreadUtilities.runInBackground(task); + } + } + + //{{{ stop() method + @Override + public void stop() + { + timer.stop(); + currenProject = null; + EditBus.removeFromBus(this); + itemFinder = null; + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + removeAncestorToolBar(views[i]); + } + } //}}} + + //{{{ handleViewUpdate() method + @EditBus.EBHandler + public void handleViewUpdate(ViewUpdate viewUpdate) + { + if (viewUpdate.getWhat() == ViewUpdate.CREATED) + { + View view = viewUpdate.getView(); + addToolbar(view); + } + else if (viewUpdate.getWhat() == ViewUpdate.CLOSED) + { + viewAncestorToolBar.remove(viewUpdate.getView()); + } + } //}}} + + @EditBus.EBHandler + public void propertiesChanged(PropertiesChanged propertiesChanged) + { + indexFiles(); + } + + @EditBus.EBHandler + public void projectUpdate(ViewerUpdate vu) + { + if (jEdit.getBooleanProperty("options.smartopen.projectindex")) + { + if (vu.getType() == ViewerUpdate.Type.PROJECT_LOADED) + { + VPTNode node = vu.getNode(); + VPTProject project = VPTNode.findProjectFor(node); + if (!StandardUtilities.objectsEqual(project, currenProject)) + indexFiles(); + } + } + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,49 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +import java.awt.Dimension; +import javax.swing.JLabel; +import javax.swing.JToolBar; + +import common.gui.itemfinder.ItemFinder; +import common.gui.itemfinder.ItemFinderPanel; +import org.gjt.sp.jedit.View; + +/** + * @author Matthieu Casanova + */ +public class SmartOpenToolbar extends JToolBar +{ + public SmartOpenToolbar(View view) + { + ItemFinder<String> itemFinder = new FileItemFinder(); + ItemFinderPanel<String> itemFinderPanel = new ItemFinderPanel<String>(view, itemFinder); + Dimension maximumSize = itemFinderPanel.getMaximumSize(); + itemFinderPanel.setMaximumSize(new Dimension(500, maximumSize.height)); + Dimension minimumSize = itemFinderPanel.getMinimumSize(); + itemFinderPanel.setMinimumSize(new Dimension(500, minimumSize.height)); + + add(new JLabel("Search for a file :")); + add(itemFinderPanel); + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,52 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +import org.gjt.sp.jedit.io.VFSFile; + +/** + * @author Matthieu Casanova + */ +public class FileArrayProvider implements FileProvider +{ + private final VFSFile[] fileArray; + private int index; + + public FileArrayProvider(VFSFile[] files) + { + fileArray = files; + } + + @Override + public VFSFile next() + { + if (index >= fileArray.length) + return null; + return fileArray[index++]; + } + + @Override + public int size() + { + return fileArray.length; + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,34 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +import org.gjt.sp.jedit.io.VFSFile; + +/** + * @author Matthieu Casanova + */ +public interface FileProvider +{ + VFSFile next(); + + int size(); +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,155 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +import com.kpouer.jedit.smartopen.SmartOpenOptionPane; +import com.kpouer.jedit.smartopen.SmartOpenPlugin; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.io.VFS; +import org.gjt.sp.jedit.io.VFSFile; +import org.gjt.sp.jedit.io.VFSFileFilter; +import org.gjt.sp.jedit.io.VFSManager; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.Task; + +/** + * @author Matthieu Casanova + */ +public class IndexFilesTask extends Task +{ + @Override + public void _run() + { + long start = System.currentTimeMillis(); + setStatus("Listing files"); + String property = jEdit.getProperty("options.ancestor.paths", ""); + if (!property.isEmpty()) + { + StringTokenizer tokenizer = new StringTokenizer(property, File.pathSeparator); + Set<VFSFile> files = new HashSet<VFSFile>(); + while (tokenizer.hasMoreTokens()) + { + String s = tokenizer.nextToken(); + files.addAll(listFiles(s)); + } + VFSFile[] f = new VFSFile[files.size()]; + files.toArray(f); + SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(f), this); + } + else + { + SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(new VFSFile[0]), this); + } + long end = System.currentTimeMillis(); + Log.log(Log.MESSAGE, this, "Indexation took ms:" + (end - start)); + } + + private Collection<VFSFile> listFiles(String path) + { + VFS vfs = VFSManager.getVFSForPath(path); + Object vfsSession = null; + View activeView = jEdit.getActiveView(); + Collection<VFSFile> files = new HashSet<VFSFile>(); + try + { + vfsSession = vfs.createVFSSession(path, activeView); + long listStart = System.currentTimeMillis(); + String[] strings = + vfs._listDirectory(vfsSession, path, new MyVFSFilter(), true, activeView, false, false); + long listEnd = System.currentTimeMillis(); + Log.log(Log.MESSAGE, this, "Listing files took ms:" + (listEnd - listStart)); + setStatus("preparing data"); + setMaximum(strings.length); + for (int i = 0; i < strings.length; i++) + { + setValue(i); + String string = strings[i]; + VFSFile vfsFile = vfs._getFile(vfsSession, string, activeView); + if (vfsFile != null) + files.add(vfsFile); + } + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + finally + { + try + { + vfs._endVFSSession(vfsSession, activeView); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + } + return files; + } + + private static class MyVFSFilter implements VFSFileFilter + { + private final String[] excludedDirectories; + + private MyVFSFilter() + { + String property = jEdit.getProperty("options.smartopen.ExcludeDirectories", "CVS .svn .git"); + excludedDirectories = property.split(" "); + Arrays.sort(excludedDirectories); + } + + @Override + public boolean accept(VFSFile file) + { + String name = file.getName(); + if (file.getType() == VFSFile.DIRECTORY || file.getType() == VFSFile.FILESYSTEM) + { + return Arrays.binarySearch(excludedDirectories, name) < 0; + } + else + { + return accept(name); + } + } + + @Override + public boolean accept(String url) + { + return SmartOpenOptionPane.accept(url); + } + + @Override + public String getDescription() + { + return null; + } + } +} \ No newline at end of file Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,46 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +import com.kpouer.jedit.smartopen.SmartOpenPlugin; +import org.gjt.sp.util.Task; +import projectviewer.vpt.VPTProject; + +/** + * @author Matthieu Casanova + */ +public class IndexProjectTask extends Task +{ + private final VPTProject project; + + public IndexProjectTask(VPTProject project) + { + this.project = project; + } + + @Override + public void _run() + { + FileProvider projectFileList = new ProjectFileList(project); + SmartOpenPlugin.itemFinder.addFiles(projectFileList, this); + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java 2011-11-08 19:49:20 UTC (rev 20261) @@ -0,0 +1,80 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.gjt.sp.jedit.io.VFSFile; +import projectviewer.vpt.VPTFile; +import projectviewer.vpt.VPTNode; +import projectviewer.vpt.VPTProject; + +/** + * @author Matthieu Casanova + */ +public class ProjectFileList implements FileProvider +{ + private final VPTProject project; + private List<VFSFile> files; + private int index; + + ProjectFileList(VPTProject project) + { + this.project = project; + } + + @Override + public VFSFile next() + { + if (files == null) + constructFileList(); + if (index >= files.size()) + return null; + return files.get(index++); + } + + private void constructFileList() + { + Collection<VPTNode> nodes = project.getOpenableNodes(); + files = new ArrayList<VFSFile>(nodes.size()); + for (VPTNode n : nodes) + { + if (n.isFile()) + { + VPTFile vptFile = (VPTFile) n; + VFSFile file = vptFile.getFile(); + if (file != null) + files.add(file); + } + } + } + + @Override + public int size() + { + if (files == null) + constructFileList(); + return files.size(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-11-12 09:58:50
|
Revision: 20302 http://jedit.svn.sourceforge.net/jedit/?rev=20302&view=rev Author: kpouer Date: 2011-11-12 09:58:44 +0000 (Sat, 12 Nov 2011) Log Message: ----------- added smart-open and smartopen actions, and an option to show smartopen toolbar Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/actions.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 07:21:25 UTC (rev 20301) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 09:58:44 UTC (rev 20302) @@ -20,11 +20,14 @@ options.smartopen.label=SmartOpen options.smartopen.code=new com.kpouer.jedit.smartopen.SmartOpenOptionPane(); -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.menu=smart-open-dialog \ +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.menu=smart-open \ + smart-open-dialog \ + - \ smart-open-reindex smart-open-reindex.label=re-index -smart-open-dialog.label=Smart Open +smart-open.label=Smart Open +smart-open-dialog.label=Smart Open Dialog options.smartopen.ExcludeDirectories=CVS .svn .git options.smartopen.IncludeGlobs=* @@ -36,4 +39,6 @@ options.smartopen.paths.label=Choose paths to monitor: options.smartopen.projectindex=false -options.smartopen.projectindex.label=Index current project \ No newline at end of file +options.smartopen.projectindex.label=Index current project +options.smartopen.toolbar=false +options.smartopen.toolbar.label=Show smartopen in a toolbar \ No newline at end of file Modified: plugins/SmartOpen/trunk/actions.xml =================================================================== --- plugins/SmartOpen/trunk/actions.xml 2011-11-12 07:21:25 UTC (rev 20301) +++ plugins/SmartOpen/trunk/actions.xml 2011-11-12 09:58:44 UTC (rev 20302) @@ -1,10 +1,14 @@ <?xml version="1.0"?> <!DOCTYPE ACTIONS SYSTEM "actions.dtd"> <ACTIONS> + <ACTION NAME="smart-open" NO_REPEAT="TRUE"> + <CODE> + com.kpouer.jedit.smartopen.SmartOpenPlugin.smartOpen(view); + </CODE> + </ACTION> <ACTION NAME="smart-open-dialog" NO_REPEAT="TRUE"> <CODE> - com.kpouer.jedit.smartopen.FileItemFinder itemFinder = new com.kpouer.jedit.smartopen.FileItemFinder(); - common.gui.itemfinder.ItemFinderWindow.showWindow(view, itemFinder); + com.kpouer.jedit.smartopen.SmartOpenPlugin.smartOpenDialog(view); </CODE> </ACTION> <ACTION NAME="smart-open-reindex" NO_REPEAT="TRUE"> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-12 07:21:25 UTC (rev 20301) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-12 09:58:44 UTC (rev 20302) @@ -38,6 +38,7 @@ public class SmartOpenOptionPane extends AbstractOptionPane { private JCheckBox indexProject; + private JCheckBox toolbar; private JTextField includeFilesTF; private JTextField excludeFilesTF; private static Pattern include; @@ -54,6 +55,10 @@ protected void _init() { setBorder(new EmptyBorder(5, 5, 5, 5)); + toolbar = new JCheckBox(jEdit.getProperty("options.smartopen.toolbar.label")); + toolbar.setSelected(jEdit.getBooleanProperty("options.smartopen.toolbar")); + addComponent(toolbar); + addSeparator(); paths = new VFSPathFileList("options.ancestor.paths"); addComponent(paths, GridBagConstraints.BOTH); includeFilesTF = new JTextField(jEdit.getProperty("options.smartopen.IncludeGlobs")); @@ -71,7 +76,17 @@ { jEdit.setProperty("options.smartopen.IncludeGlobs", includeFilesTF.getText()); jEdit.setProperty("options.smartopen.ExcludeGlobs", excludeFilesTF.getText()); - jEdit.setBooleanProperty("options.smartopen.projectindex", indexProject.isSelected()); + boolean indexProjectSelected = indexProject.isSelected(); + if (indexProjectSelected) + jEdit.setBooleanProperty("options.smartopen.projectindex", true); + else + jEdit.resetProperty("options.smartopen.projectindex"); + + boolean tb = toolbar.isSelected(); + if (tb) + jEdit.setBooleanProperty("options.smartopen.toolbar", true); + else + jEdit.resetProperty("options.smartopen.toolbar"); paths.save(); updateFilter(); } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-11-12 07:21:25 UTC (rev 20301) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-11-12 09:58:44 UTC (rev 20302) @@ -21,7 +21,9 @@ package com.kpouer.jedit.smartopen; +//{{{ Imports import java.awt.Component; +import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -34,6 +36,9 @@ import com.kpouer.jedit.smartopen.indexer.IndexFilesTask; import com.kpouer.jedit.smartopen.indexer.IndexProjectTask; +import common.gui.itemfinder.ItemFinder; +import common.gui.itemfinder.ItemFinderPanel; +import common.gui.itemfinder.ItemFinderWindow; import org.gjt.sp.jedit.EditBus; import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.View; @@ -48,13 +53,14 @@ import projectviewer.event.ViewerUpdate; import projectviewer.vpt.VPTNode; import projectviewer.vpt.VPTProject; +//}}} /** * @author Matthieu Casanova */ public class SmartOpenPlugin extends EditPlugin { - private final Map<View, SmartOpenToolbar> viewAncestorToolBar = new HashMap<View, SmartOpenToolbar>(); + private final Map<View, SmartOpenToolbar> viewToolbar = new HashMap<View, SmartOpenToolbar>(); private final Map<View, JComponent> topToolbars = new HashMap<View, JComponent>(); public static FileIndex itemFinder; @@ -62,18 +68,16 @@ private static VPTProject currenProject; + private boolean toolbar; + //{{{ start() method @Override public void start() { itemFinder = new FileIndex(); - indexFiles(); + propertiesChanged(null); - View[] views = jEdit.getViews(); - for (int i = 0; i < views.length; i++) - { - addToolbar(views[i]); - } + EditBus.addToBus(this); timer = new Timer(60000, new ActionListener() { @@ -89,15 +93,17 @@ //{{{ addAncestorToolBar() method private void addToolbar(View view) { - if (viewAncestorToolBar.containsKey(view)) + if (viewToolbar.containsKey(view)) return; SmartOpenToolbar smartToolbar = new SmartOpenToolbar(view); JComponent toolBar = getViewToolbar(view); toolBar.add(smartToolbar); + toolBar.revalidate(); topToolbars.put(view, toolBar); - viewAncestorToolBar.put(view, smartToolbar); + viewToolbar.put(view, smartToolbar); } //}}} + //{{{ getViewToolbar() method private JComponent getViewToolbar(View view) { try @@ -134,12 +140,12 @@ customToolbar.putClientProperty("Ancestor-SmartOpen", Boolean.TRUE); view.addToolBar(customToolbar); return customToolbar; - } + } //}}} - //{{{ removeAncestorToolBar() method - private void removeAncestorToolBar(View view) + //{{{ removeToolbar() method + private void removeToolbar(View view) { - SmartOpenToolbar toolBar = viewAncestorToolBar.get(view); + SmartOpenToolbar toolBar = viewToolbar.get(view); JComponent top = topToolbars.get(view); top.remove(toolBar); if (top.getComponentCount() == 0) @@ -149,12 +155,14 @@ } else { - top.validate(); - top.repaint(); + top.revalidate(); +// top.validate(); +// top.repaint(); } - viewAncestorToolBar.remove(view); + viewToolbar.remove(view); } //}}} + //{{{ indexFiles() method public static void indexFiles() { if (jEdit.getBooleanProperty("options.smartopen.projectindex")) @@ -182,7 +190,7 @@ Task task = new IndexFilesTask(); ThreadUtilities.runInBackground(task); } - } + } //}}} //{{{ stop() method @Override @@ -192,34 +200,44 @@ currenProject = null; EditBus.removeFromBus(this); itemFinder = null; - View[] views = jEdit.getViews(); - for (int i = 0; i < views.length; i++) - { - removeAncestorToolBar(views[i]); - } + removeToolbars(); } //}}} //{{{ handleViewUpdate() method @EditBus.EBHandler public void handleViewUpdate(ViewUpdate viewUpdate) { - if (viewUpdate.getWhat() == ViewUpdate.CREATED) + if (toolbar) { - View view = viewUpdate.getView(); - addToolbar(view); + if (viewUpdate.getWhat() == ViewUpdate.CREATED) + { + View view = viewUpdate.getView(); + addToolbar(view); + } + else if (viewUpdate.getWhat() == ViewUpdate.CLOSED) + { + viewToolbar.remove(viewUpdate.getView()); + } } - else if (viewUpdate.getWhat() == ViewUpdate.CLOSED) - { - viewAncestorToolBar.remove(viewUpdate.getView()); - } } //}}} + //{{{ propertiesChanged() method @EditBus.EBHandler public void propertiesChanged(PropertiesChanged propertiesChanged) { + if (toolbar != jEdit.getBooleanProperty("options.smartopen.toolbar")) + { + toolbar = !toolbar; + if (toolbar) + addToolbars(); + else + removeToolbars(); + + } indexFiles(); - } + } //}}} + //{{{ projectUpdate() method @EditBus.EBHandler public void projectUpdate(ViewerUpdate vu) { @@ -233,5 +251,47 @@ indexFiles(); } } + } //}}} + + //{{{ smartOpen() method + public static void smartOpen(View view) + { + SmartOpenPlugin instance = (SmartOpenPlugin) jEdit.getPlugin(SmartOpenPlugin.class.getName()); + SmartOpenToolbar smartOpenToolbar = instance.viewToolbar.get(view); + if (smartOpenToolbar != null) + { + ItemFinderPanel<String> itemFinderPanel = smartOpenToolbar.getItemFinderPanel(); + EventQueue.invokeLater(itemFinderPanel.requestFocusWorker); + } + else + { + smartOpenDialog(view); + } + } //}}} + + //{{{ smartOpenDialog() method + public static void smartOpenDialog(View view) + { + ItemFinder<String> itemFinder = new FileItemFinder(); + ItemFinderWindow.showWindow(view, itemFinder); + } //}}} + + private void addToolbars() + { + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + addToolbar(views[i]); + } } + + private void removeToolbars() + { + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + removeToolbar(views[i]); + } + } + } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2011-11-12 07:21:25 UTC (rev 20301) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2011-11-12 09:58:44 UTC (rev 20302) @@ -34,10 +34,13 @@ */ public class SmartOpenToolbar extends JToolBar { + + private final ItemFinderPanel<String> itemFinderPanel; + public SmartOpenToolbar(View view) { ItemFinder<String> itemFinder = new FileItemFinder(); - ItemFinderPanel<String> itemFinderPanel = new ItemFinderPanel<String>(view, itemFinder); + itemFinderPanel = new ItemFinderPanel<String>(view, itemFinder); Dimension maximumSize = itemFinderPanel.getMaximumSize(); itemFinderPanel.setMaximumSize(new Dimension(500, maximumSize.height)); Dimension minimumSize = itemFinderPanel.getMinimumSize(); @@ -46,4 +49,9 @@ add(new JLabel("Search for a file :")); add(itemFinderPanel); } + + public ItemFinderPanel<String> getItemFinderPanel() + { + return itemFinderPanel; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-11-12 11:17:58
|
Revision: 20306 http://jedit.svn.sourceforge.net/jedit/?rev=20306&view=rev Author: kpouer Date: 2011-11-12 11:17:51 +0000 (Sat, 12 Nov 2011) Log Message: ----------- added in memory index Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 10:47:28 UTC (rev 20305) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 11:17:51 UTC (rev 20306) @@ -38,7 +38,9 @@ options.smartopen.paths.label=Choose paths to monitor: -options.smartopen.projectindex=false +options.smartopen.projectindex=true options.smartopen.projectindex.label=Index current project options.smartopen.toolbar=false -options.smartopen.toolbar.label=Show smartopen in a toolbar \ No newline at end of file +options.smartopen.toolbar.label=Show smartopen in a toolbar +options.smartopen.memoryindex=false +options.smartopen.memoryindex.label=Use in-memory index. (very low memory footprint) \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-11-12 10:47:28 UTC (rev 20305) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-11-12 11:17:51 UTC (rev 20306) @@ -76,7 +76,12 @@ index.mkdirs(); try { - directory = FSDirectory.open(index); + if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) + { + directory = new RAMDirectory(); + } + else + directory = FSDirectory.open(index); } catch (IOException e) { @@ -162,7 +167,14 @@ IndexWriterConfig.OpenMode openMode; if (reset) { - tempDirectory = FSDirectory.open(index); + if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) + { + tempDirectory = new RAMDirectory(); + } + else + { + tempDirectory = FSDirectory.open(index); + } openMode = IndexWriterConfig.OpenMode.CREATE; } else Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-12 10:47:28 UTC (rev 20305) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-12 11:17:51 UTC (rev 20306) @@ -37,6 +37,7 @@ */ public class SmartOpenOptionPane extends AbstractOptionPane { + private JCheckBox inMemoryIndex; private JCheckBox indexProject; private JCheckBox toolbar; private JTextField includeFilesTF; @@ -69,6 +70,10 @@ indexProject = new JCheckBox(jEdit.getProperty("options.smartopen.projectindex.label")); indexProject.setSelected(jEdit.getBooleanProperty("options.smartopen.projectindex")); addComponent(indexProject); + + inMemoryIndex = new JCheckBox(jEdit.getProperty("options.smartopen.memoryindex.label")); + inMemoryIndex.setSelected(jEdit.getBooleanProperty("options.smartopen.memoryindex")); + addComponent(inMemoryIndex); } @Override @@ -87,6 +92,11 @@ jEdit.setBooleanProperty("options.smartopen.toolbar", true); else jEdit.resetProperty("options.smartopen.toolbar"); + boolean memory = inMemoryIndex.isSelected(); + if (memory) + jEdit.setBooleanProperty("options.smartopen.memoryindex", true); + else + jEdit.resetProperty("options.smartopen.memoryindex"); paths.save(); updateFilter(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-11-12 17:15:20
|
Revision: 20311 http://jedit.svn.sourceforge.net/jedit/?rev=20311&view=rev Author: kpouer Date: 2011-11-12 17:15:14 +0000 (Sat, 12 Nov 2011) Log Message: ----------- added a label Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 17:14:25 UTC (rev 20310) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-11-12 17:15:14 UTC (rev 20311) @@ -43,4 +43,6 @@ options.smartopen.toolbar=false options.smartopen.toolbar.label=Show smartopen in a toolbar options.smartopen.memoryindex=false -options.smartopen.memoryindex.label=Use in-memory index. (very low memory footprint) \ No newline at end of file +options.smartopen.memoryindex.label=Use in-memory index. (very low memory footprint) + +search-file.label=Search for a file : \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2011-11-12 17:14:25 UTC (rev 20310) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2011-11-12 17:15:14 UTC (rev 20311) @@ -46,6 +46,12 @@ } @Override + public String getLabel() + { + return jEdit.getProperty("search-file.label"); + } + + @Override public ListModel getModel() { return model; Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2011-11-12 17:14:25 UTC (rev 20310) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2011-11-12 17:15:14 UTC (rev 20311) @@ -22,7 +22,6 @@ package com.kpouer.jedit.smartopen; import java.awt.Dimension; -import javax.swing.JLabel; import javax.swing.JToolBar; import common.gui.itemfinder.ItemFinder; @@ -34,7 +33,6 @@ */ public class SmartOpenToolbar extends JToolBar { - private final ItemFinderPanel<String> itemFinderPanel; public SmartOpenToolbar(View view) @@ -45,8 +43,6 @@ itemFinderPanel.setMaximumSize(new Dimension(500, maximumSize.height)); Dimension minimumSize = itemFinderPanel.getMinimumSize(); itemFinderPanel.setMinimumSize(new Dimension(500, minimumSize.height)); - - add(new JLabel("Search for a file :")); add(itemFinderPanel); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-11-19 09:06:02
|
Revision: 20372 http://jedit.svn.sourceforge.net/jedit/?rev=20372&view=rev Author: kpouer Date: 2011-11-19 09:05:56 +0000 (Sat, 19 Nov 2011) Log Message: ----------- memory index is now default Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2011-11-18 11:37:06 UTC (rev 20371) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-11-19 09:05:56 UTC (rev 20372) @@ -42,7 +42,7 @@ options.smartopen.projectindex.label=Index current project options.smartopen.toolbar=false options.smartopen.toolbar.label=Show smartopen in a toolbar -options.smartopen.memoryindex=false +options.smartopen.memoryindex=true options.smartopen.memoryindex.label=Use in-memory index. (very low memory footprint) search-file.label=Search for a file : \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-11-18 11:37:06 UTC (rev 20371) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-11-19 09:05:56 UTC (rev 20372) @@ -69,25 +69,7 @@ public FileIndex() { - EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); - File pluginHome = plugin.getPluginHome(); - String indexName = getIndexName(); - File index = new File(pluginHome, indexName); - index.mkdirs(); - try - { - if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) - { - directory = new RAMDirectory(); - } - else - directory = FSDirectory.open(index); - } - catch (IOException e) - { - Log.log(Log.ERROR, this, e); - directory = new RAMDirectory(); - } + directory = getDirectory(); } private String getIndexName() @@ -160,21 +142,11 @@ IndexWriter writer = null; try { - EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); - File pluginHome = plugin.getPluginHome(); - File index = new File(pluginHome, getIndexName()); Directory tempDirectory; IndexWriterConfig.OpenMode openMode; if (reset) { - if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) - { - tempDirectory = new RAMDirectory(); - } - else - { - tempDirectory = FSDirectory.open(index); - } + tempDirectory = getDirectory(); openMode = IndexWriterConfig.OpenMode.CREATE; } else @@ -215,6 +187,32 @@ } } + private Directory getDirectory() + { + Directory tempDirectory; + if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) + { + tempDirectory = new RAMDirectory(); + } + else + { + try + { + EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); + File pluginHome = plugin.getPluginHome(); + File index = new File(pluginHome, getIndexName()); + index.mkdirs(); + tempDirectory = FSDirectory.open(index); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + tempDirectory = new RAMDirectory(); + } + } + return tempDirectory; + } + public void removeFiles(FileProvider fileProvider, ProgressObserver observer) { synchronized (LOCK) Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-18 11:37:06 UTC (rev 20371) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2011-11-19 09:05:56 UTC (rev 20372) @@ -81,22 +81,9 @@ { jEdit.setProperty("options.smartopen.IncludeGlobs", includeFilesTF.getText()); jEdit.setProperty("options.smartopen.ExcludeGlobs", excludeFilesTF.getText()); - boolean indexProjectSelected = indexProject.isSelected(); - if (indexProjectSelected) - jEdit.setBooleanProperty("options.smartopen.projectindex", true); - else - jEdit.resetProperty("options.smartopen.projectindex"); - - boolean tb = toolbar.isSelected(); - if (tb) - jEdit.setBooleanProperty("options.smartopen.toolbar", true); - else - jEdit.resetProperty("options.smartopen.toolbar"); - boolean memory = inMemoryIndex.isSelected(); - if (memory) - jEdit.setBooleanProperty("options.smartopen.memoryindex", true); - else - jEdit.resetProperty("options.smartopen.memoryindex"); + jEdit.setBooleanProperty("options.smartopen.projectindex", indexProject.isSelected()); + jEdit.setBooleanProperty("options.smartopen.toolbar", toolbar.isSelected()); + jEdit.setBooleanProperty("options.smartopen.memoryindex", inMemoryIndex.isSelected()); paths.save(); updateFilter(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-12-01 10:48:45
|
Revision: 20478 http://jedit.svn.sourceforge.net/jedit/?rev=20478&view=rev Author: kpouer Date: 2011-12-01 10:48:36 +0000 (Thu, 01 Dec 2011) Log Message: ----------- fixed ivy Modified Paths: -------------- plugins/SmartOpen/trunk/build.xml plugins/SmartOpen/trunk/ivy.xml Modified: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml 2011-12-01 04:44:25 UTC (rev 20477) +++ plugins/SmartOpen/trunk/build.xml 2011-12-01 10:48:36 UTC (rev 20478) @@ -13,8 +13,4 @@ <property name="jedit.plugins.dir" value="${install.dir}"/> <import file="${build.support}/plugin-build.xml"/> - - <path id="project.class.path"> - <pathelement location="${install.dir}/CommonControls.jar" /> - </path> </project> \ No newline at end of file Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2011-12-01 04:44:25 UTC (rev 20477) +++ plugins/SmartOpen/trunk/ivy.xml 2011-12-01 10:48:36 UTC (rev 20478) @@ -2,7 +2,7 @@ <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> <dependency org="org.apache.lucene" name="lucene-core" rev="3.4.0"/> - <!--<dependency org="jedit-plugins" name="CommonControls" rev="1.4"/>--> + <dependency org="jedit-plugins" name="CommonControls" rev="1.4"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.2.0"/> </dependencies> </ivy-module> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-12-04 21:00:35
|
Revision: 20523 http://jedit.svn.sourceforge.net/jedit/?rev=20523&view=rev Author: kpouer Date: 2011-12-04 21:00:28 +0000 (Sun, 04 Dec 2011) Log Message: ----------- added a documentation Modified Paths: -------------- plugins/SmartOpen/trunk/build.xml Added Paths: ----------- plugins/SmartOpen/trunk/docs/ plugins/SmartOpen/trunk/docs/SmartOpen.html Modified: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml 2011-12-04 20:46:15 UTC (rev 20522) +++ plugins/SmartOpen/trunk/build.xml 2011-12-04 21:00:28 UTC (rev 20523) @@ -13,4 +13,8 @@ <property name="jedit.plugins.dir" value="${install.dir}"/> <import file="${build.support}/plugin-build.xml"/> + + <selector id="packageFiles"> + <filename name="docs/*.html" /> + </selector> </project> \ No newline at end of file Added: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html (rev 0) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-04 21:00:28 UTC (rev 20523) @@ -0,0 +1,58 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<html> +<head> + <meta http-equiv="Content-Type" + content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Matthieu Casanova"> + <title>SmartOpen Plugin</title> +</head> + +<body> +<table border="0" cellspacing="0" width="100%" bgcolor="#ccccff"> + <tr> + <td valign="top" style="font-weight:bold;font-size:x-large">SmartOpen</td> + <td align="right" valign="top" style="font-size:small"> + <span style="font-weight:bold">Version 1.0.0 (Dec 04, 2011)</span><br> + Matthieu Casanova <cho...@gm...> + </td> + </tr> +</table> +<h2>Introduction</h2> + +<p>SmartOpen plugin is made to help you opening your files quickly. Like others (FastOpen, OpenIt plugins), you will +be able to type a portion of the name of your file and you'll get a list of matching names</p> + +<h2>Usage</h2> +<h3>Setup</h3> +<p> +To use <b>SmartOpen</b> you have to choose which directories will be indexed in the options. Or use <b>ProjectViewer</b> + and SmartOpen will automatically index files of the current project. + +</p> + +<h3>Usage</h3> +<p> + SmartOpen can be used in the Toolbar, or as a floating window. You can search for any file that is indexed, and + also use CamelCase :<br/> +For example to search for a file named <b>A</b>bstract<b>O</b>ption<b>P</b>ane.java the camelcase are AOP. You can search +your file with any combination using those capitals chars :</p> + <ul> + <li><b>AOP</b></li> + <li><b>AOP</b>ane</li> + <li><b>A</b>bs<b>OP</b>ane</li> + <li><b>A</b>bs<b>O</b>pt<b>P</b>ane</li> + </ul> +<p>and any other combination</p> +<h2>History</h2> +<ul> + <li>1.0.0</li> + <ul> + <li>Initial release</li> + </ul> +</ul> + +<h2>Feedback</h2> + +<p>Please report bugs to the bug jEdit's plugin tracker on sourceforge.net</p> +</body> +</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-12-16 14:14:21
|
Revision: 20643 http://jedit.svn.sourceforge.net/jedit/?rev=20643&view=rev Author: kpouer Date: 2011-12-16 14:14:10 +0000 (Fri, 16 Dec 2011) Log Message: ----------- Fixed removed files from projects Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2011-12-15 09:37:41 UTC (rev 20642) +++ plugins/SmartOpen/trunk/SmartOpen.props 2011-12-16 14:14:10 UTC (rev 20643) @@ -4,7 +4,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.0.0 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.0.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 04.04.01.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4 Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-15 09:37:41 UTC (rev 20642) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-16 14:14:10 UTC (rev 20643) @@ -12,7 +12,7 @@ <tr> <td valign="top" style="font-weight:bold;font-size:x-large">SmartOpen</td> <td align="right" valign="top" style="font-size:small"> - <span style="font-weight:bold">Version 1.0.0 (Dec 04, 2011)</span><br> + <span style="font-weight:bold">Version 1.0.1 (Dec 16, 2011)</span><br> Matthieu Casanova <cho...@gm...> </td> </tr> @@ -45,6 +45,10 @@ <p>and any other combination</p> <h2>History</h2> <ul> + <li>1.0.1</li> + <ul> + <li>Fixed removed files from projects</li> + </ul> <li>1.0.0</li> <ul> <li>Initial release</li> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-12-15 09:37:41 UTC (rev 20642) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2011-12-16 14:14:10 UTC (rev 20643) @@ -173,7 +173,7 @@ observer.setStatus(path); Document document = new Document(); document.add( - new Field("path", path, Field.Store.YES, Field.Index.NO)); + new Field("path", path, Field.Store.YES, Field.Index.NOT_ANALYZED)); String fileName = MiscUtilities.getFileName(path); document.add(new Field("name", fileName, Field.Store.NO, @@ -217,6 +217,7 @@ observer.setStatus(path); writer.deleteDocuments(new Term("path", path)); } + writer.commit(); } catch (IOException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-12-16 18:59:35
|
Revision: 20651 http://jedit.svn.sourceforge.net/jedit/?rev=20651&view=rev Author: kpouer Date: 2011-12-16 18:59:24 +0000 (Fri, 16 Dec 2011) Log Message: ----------- Handling of different projects in different views (#3453169) Modified Paths: -------------- plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-16 18:45:00 UTC (rev 20650) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-16 18:59:24 UTC (rev 20651) @@ -48,6 +48,7 @@ <li>1.0.1</li> <ul> <li>Fixed removed files from projects</li> + <li>Handling of different projects in different views (#3453169)</li> </ul> <li>1.0.0</li> <ul> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-12-16 18:45:00 UTC (rev 20650) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-12-16 18:59:24 UTC (rev 20651) @@ -225,6 +225,12 @@ @EditBus.EBHandler public void handleViewUpdate(ViewUpdate viewUpdate) { + if (viewUpdate.getWhat() == ViewUpdate.ACTIVATED) + { + VPTProject project = ProjectViewer.getActiveProject(viewUpdate.getView()); + if (!StandardUtilities.objectsEqual(project, currenProject)) + indexProject(project); + } if (toolbar) { if (viewUpdate.getWhat() == ViewUpdate.CREATED) @@ -270,7 +276,7 @@ } } //}}} - //{{{ viewerUpdate() method + //{{{ projectModified() method @EditBus.EBHandler public void projectModified(ProjectUpdate pu) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2011-12-17 08:35:24
|
Revision: 20659 http://jedit.svn.sourceforge.net/jedit/?rev=20659&view=rev Author: kpouer Date: 2011-12-17 08:35:18 +0000 (Sat, 17 Dec 2011) Log Message: ----------- Use the word at caret to initialize the search dialog (feature #3461196) Modified Paths: -------------- plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-17 08:32:26 UTC (rev 20658) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2011-12-17 08:35:18 UTC (rev 20659) @@ -49,6 +49,7 @@ <ul> <li>Fixed removed files from projects</li> <li>Handling of different projects in different views (#3453169)</li> + <li>Use the word at caret to initialize the search dialog (feature #3461196)</li> </ul> <li>1.0.0</li> <ul> Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2011-12-17 08:32:26 UTC (rev 20658) +++ plugins/SmartOpen/trunk/ivy.xml 2011-12-17 08:35:18 UTC (rev 20659) @@ -2,7 +2,7 @@ <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> <dependency org="org.apache.lucene" name="lucene-core" rev="3.4.0"/> - <dependency org="jedit-plugins" name="CommonControls" rev="1.4"/> + <dependency org="jedit-plugins" name="CommonControls" rev="1.4.1"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.2.0"/> </dependencies> </ivy-module> \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-12-17 08:32:26 UTC (rev 20658) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2011-12-17 08:35:18 UTC (rev 20659) @@ -31,6 +31,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.Timer; @@ -47,6 +49,7 @@ import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.msg.PropertiesChanged; import org.gjt.sp.jedit.msg.ViewUpdate; +import org.gjt.sp.jedit.textarea.JEditTextArea; import org.gjt.sp.util.Log; import org.gjt.sp.util.StandardUtilities; import org.gjt.sp.util.Task; @@ -300,6 +303,8 @@ if (smartOpenToolbar != null) { ItemFinderPanel<String> itemFinderPanel = smartOpenToolbar.getItemFinderPanel(); + String wordAtCaret = getWordAtCaret(view); + itemFinderPanel.setText(wordAtCaret); EventQueue.invokeLater(itemFinderPanel.requestFocusWorker); } else @@ -312,7 +317,8 @@ public static void smartOpenDialog(View view) { ItemFinder<String> itemFinder = new FileItemFinder(); - ItemFinderWindow.showWindow(view, itemFinder); + String wordAtCaret = getWordAtCaret(view); + ItemFinderWindow.showWindow(view, itemFinder, wordAtCaret); } //}}} //{{{ addToolbars() method @@ -334,4 +340,30 @@ removeToolbar(views[i]); } } //}}} + + public static String getWordAtCaret(View view) + { + JEditTextArea ta = view.getTextArea(); + String selected = ta.getSelectedText(); + if ((selected != null) && (! "".equals(selected))) + return selected; + int line = ta.getCaretLine(); + String text = ta.getLineText(line); + Pattern pat = Pattern.compile("\\w+"); + Matcher m = pat.matcher(text); + int end = -1; + int start = -1; + int offset = ta.getCaretPosition() - ta.getLineStartOffset(line); + while (end <= offset) + { + if (! m.find()) + return null; + end = m.end(); + start = m.start(); + selected = m.group(); + } + if ((start > offset) || (selected.length() == 0)) + return null; + return selected; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2012-01-24 09:36:26
|
Revision: 20937 http://jedit.svn.sourceforge.net/jedit/?rev=20937&view=rev Author: kpouer Date: 2012-01-24 09:36:16 +0000 (Tue, 24 Jan 2012) Log Message: ----------- updated dependencies Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/ivy.xml Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2012-01-24 04:58:32 UTC (rev 20936) +++ plugins/SmartOpen/trunk/SmartOpen.props 2012-01-24 09:36:16 UTC (rev 20937) @@ -6,9 +6,9 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.0.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 04.04.01.00 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 04.04.02.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.2 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 2.8 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2012-01-24 04:58:32 UTC (rev 20936) +++ plugins/SmartOpen/trunk/ivy.xml 2012-01-24 09:36:16 UTC (rev 20937) @@ -1,8 +1,8 @@ <ivy-module version="2.0"> <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> - <dependency org="org.apache.lucene" name="lucene-core" rev="3.4.0"/> + <dependency org="org.apache.lucene" name="lucene-core" rev="3.5.0"/> <dependency org="jedit-plugins" name="CommonControls" rev="1.4.1"/> - <dependency org="jedit-plugins" name="ProjectViewer" rev="3.2.0"/> + <dependency org="jedit-plugins" name="ProjectViewer" rev="3.4.0"/> </dependencies> </ivy-module> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2012-04-01 17:52:19
|
Revision: 21541 http://jedit.svn.sourceforge.net/jedit/?rev=21541&view=rev Author: ezust Date: 2012-04-01 17:52:12 +0000 (Sun, 01 Apr 2012) Log Message: ----------- Added a FileOpenerService for ErrorList. (#3481157 - Alan Ezust) Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Added Paths: ----------- plugins/SmartOpen/trunk/services.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2012-04-01 16:40:23 UTC (rev 21540) +++ plugins/SmartOpen/trunk/SmartOpen.props 2012-04-01 17:52:12 UTC (rev 21541) @@ -4,10 +4,10 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.0.1 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 04.04.02.00 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 2.8 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2012-04-01 16:40:23 UTC (rev 21540) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2012-04-01 17:52:12 UTC (rev 21541) @@ -12,7 +12,7 @@ <tr> <td valign="top" style="font-weight:bold;font-size:x-large">SmartOpen</td> <td align="right" valign="top" style="font-size:small"> - <span style="font-weight:bold">Version 1.0.1 (Dec 16, 2011)</span><br> + <span style="font-weight:bold">Version 1.1 ($Date$) </span><br> Matthieu Casanova <cho...@gm...> </td> </tr> @@ -45,6 +45,11 @@ <p>and any other combination</p> <h2>History</h2> <ul> + <li>1.1</li> + <ul> + <li> Added a FileOpenerService for ErrorList. (#3481157 - Alan Ezust) </li> + </ul> + <li>1.0.1</li> <ul> <li>Fixed removed files from projects</li> Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2012-04-01 16:40:23 UTC (rev 21540) +++ plugins/SmartOpen/trunk/ivy.xml 2012-04-01 17:52:12 UTC (rev 21541) @@ -2,7 +2,7 @@ <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> <dependency org="org.apache.lucene" name="lucene-core" rev="3.5.0"/> - <dependency org="jedit-plugins" name="CommonControls" rev="1.4.1"/> + <dependency org="jedit-plugins" name="CommonControls" rev="1.4.1"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.4.0"/> </dependencies> </ivy-module> \ No newline at end of file Added: plugins/SmartOpen/trunk/services.xml =================================================================== --- plugins/SmartOpen/trunk/services.xml (rev 0) +++ plugins/SmartOpen/trunk/services.xml 2012-04-01 17:52:12 UTC (rev 21541) @@ -0,0 +1,9 @@ +<?xml version="1.0"?> + +<!DOCTYPE SERVICES SYSTEM "services.dtd"> + +<SERVICES> + <SERVICE CLASS="org.jedit.core.FileOpenerService" NAME="SmartOpen"> + new com.kpouer.jedit.smartopen.FileOpener(); + </SERVICE> +</SERVICES> Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java 2012-04-01 17:52:12 UTC (rev 21541) @@ -0,0 +1,13 @@ +package com.kpouer.jedit.smartopen; + +import org.gjt.sp.jedit.View; +/** + @author Alan Ezust + */ + +public class FileOpener extends org.jedit.core.FileOpenerService { + public void openFile(String fileName, View view) { + SmartOpenPlugin.smartOpenDialog(view, fileName); + } +} + Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2012-04-01 16:40:23 UTC (rev 21540) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2012-04-01 17:52:12 UTC (rev 21541) @@ -315,7 +315,13 @@ } } //}}} - //{{{ smartOpenDialog() method + //{{{ smartOpenDialog() methods + public static void smartOpenDialog(View view, String fileName) + { + ItemFinder<String> itemFinder = new FileItemFinder(); + ItemFinderWindow.showWindow(view, itemFinder, fileName); + } + public static void smartOpenDialog(View view) { ItemFinder<String> itemFinder = new FileItemFinder(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jar...@us...> - 2012-04-01 21:01:42
|
Revision: 21542 http://jedit.svn.sourceforge.net/jedit/?rev=21542&view=rev Author: jarekczek Date: 2012-04-01 21:01:36 +0000 (Sun, 01 Apr 2012) Log Message: ----------- src.dir and pv version correction: 3.4 -> 3.4.0 Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/build.xml Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2012-04-01 17:52:12 UTC (rev 21541) +++ plugins/SmartOpen/trunk/SmartOpen.props 2012-04-01 21:01:36 UTC (rev 21542) @@ -8,7 +8,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4.1 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 2.8 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true Modified: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml 2012-04-01 17:52:12 UTC (rev 21541) +++ plugins/SmartOpen/trunk/build.xml 2012-04-01 21:01:36 UTC (rev 21542) @@ -11,6 +11,7 @@ <property name="compiler.target" value="1.6"/> <property name="debug" value="on"/> <property name="jedit.plugins.dir" value="${install.dir}"/> + <property name="src.dir" location="src" /> <import file="${build.support}/plugin-build.xml"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2012-11-04 06:43:52
|
Revision: 22434 http://jedit.svn.sourceforge.net/jedit/?rev=22434&view=rev Author: ezust Date: 2012-11-04 06:43:45 +0000 (Sun, 04 Nov 2012) Log Message: ----------- Bumping version depends. Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/description.html Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2012-11-04 06:41:15 UTC (rev 22433) +++ plugins/SmartOpen/trunk/SmartOpen.props 2012-11-04 06:43:45 UTC (rev 22434) @@ -7,8 +7,8 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.4.1 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.0 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.5 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.4 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 2.8 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true Modified: plugins/SmartOpen/trunk/description.html =================================================================== --- plugins/SmartOpen/trunk/description.html 2012-11-04 06:41:15 UTC (rev 22433) +++ plugins/SmartOpen/trunk/description.html 2012-11-04 06:43:45 UTC (rev 22434) @@ -1,3 +1,4 @@ +<html><body><p> <b>SmartOpen</b> is another plugin that will help you to quickly open your files.<br/> It can index files from the folders you want, or from ProjectViewer<br/> It supports search from any part of your filename, or camelcase search.<br> @@ -2,2 +3,3 @@ For example if you want a file named AbstractOptionPane.java you can search with - <b>AOP</b> or <b>AOP</b>ane or <b>A</b>bs<b>Opr</b><b>P</b> and all combinations you want \ No newline at end of file + <b>AOP</b> or <b>AOP</b>ane or <b>A</b>bs<b>O</b>pr<b>P</b> and all combinations you want + </p></body></html> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-01-28 10:53:48
|
Revision: 22732 http://jedit.svn.sourceforge.net/jedit/?rev=22732&view=rev Author: kpouer Date: 2013-01-28 10:53:36 +0000 (Mon, 28 Jan 2013) Log Message: ----------- switch to lucene 4.1 Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/lang_fr.properties plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-01-28 10:53:36 UTC (rev 22732) @@ -4,12 +4,12 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.1 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.2 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.5 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.4 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 2.8 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.docs=docs/SmartOpen.html @@ -42,7 +42,5 @@ options.smartopen.projectindex.label=Index current project options.smartopen.toolbar=false options.smartopen.toolbar.label=Show smartopen in a toolbar -options.smartopen.memoryindex=true -options.smartopen.memoryindex.label=Use in-memory index. (very low memory footprint) search-file.label=Search for a file : \ No newline at end of file Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/ivy.xml 2013-01-28 10:53:36 UTC (rev 22732) @@ -1,8 +1,10 @@ <ivy-module version="2.0"> <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> - <dependency org="org.apache.lucene" name="lucene-core" rev="3.5.0"/> - <dependency org="jedit-plugins" name="CommonControls" rev="1.5"/> + <dependency org="org.apache.lucene" name="lucene-core" rev="4.1.0"/> + <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.1.0"/> + <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.1.0"/> + <dependency org="jedit-plugins" name="CommonControls" rev="1.5"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.4.4"/> </dependencies> </ivy-module> \ No newline at end of file Modified: plugins/SmartOpen/trunk/lang_fr.properties =================================================================== --- plugins/SmartOpen/trunk/lang_fr.properties 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/lang_fr.properties 2013-01-28 10:53:36 UTC (rev 22732) @@ -6,17 +6,16 @@ options.smartopen.label=SmartOpen -smart-open-reindex.label=réindexer +smart-open-reindex.label=r\u00E9indexer smart-open.label=Smart Open -smart-open-dialog.label=Boîte de dialogue SmartOpen +smart-open-dialog.label=Bo\u00EEte de dialogue SmartOpen -options.smartopen.IncludeGlobs.label=N'inclure que les fichiers correspodant à : -options.smartopen.ExcludeGlobs.label=... à l'exception des fichiers correspondant à : +options.smartopen.IncludeGlobs.label=N'inclure que les fichiers correspodant \u00E0 : +options.smartopen.ExcludeGlobs.label=... \u00E0 l'exception des fichiers correspondant \u00E0 : -options.smartopen.paths.label=Choisir les chemins à explorer : +options.smartopen.paths.label=Choisir les chemins \u00E0 explorer : options.smartopen.projectindex.label=Indexer le projet courant options.smartopen.toolbar.label=Afficher SmartOpen dans une barre d'outils -options.smartopen.memoryindex.label=Utiliser l'indexation en mémoire (faible consommation de mémoire) search-file.label=Rechercher le fichier : \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-01-28 10:53:36 UTC (rev 22732) @@ -22,7 +22,6 @@ package com.kpouer.jedit.smartopen; //{{{ Imports -import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -34,10 +33,13 @@ import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; -import org.apache.lucene.document.Fieldable; +import org.apache.lucene.document.StringField; +import org.apache.lucene.document.TextField; +import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexableField; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; @@ -47,12 +49,9 @@ import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; -import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.MiscUtilities; -import org.gjt.sp.jedit.jEdit; import org.gjt.sp.util.IOUtilities; import org.gjt.sp.util.Log; import org.gjt.sp.util.ProgressObserver; @@ -66,39 +65,20 @@ private static final Pattern CAMELCASE = Pattern.compile("(?<!^)(?=[A-Z])"); private Directory directory; private final Object LOCK = new Object(); - private final String[] indexes = { "index1", "index2" }; - private int indexPos; //{{{ FileIndex constructor public FileIndex() { - directory = getDirectory(); + directory = new RAMDirectory(); } //}}} - //{{{ getIndexName() method - private String getIndexName() - { - indexPos = (indexPos + 1) % 2; - String indexName = indexes[indexPos]; - return indexName; - } //}}} - //{{{ getFiles() method public List<String> getFiles(String s) { if (s == null || s.isEmpty()) return Collections.emptyList(); - try - { - if (!IndexReader.indexExists(directory)) - return Collections.emptyList(); - } - catch (IOException e) - { - Log.log(Log.ERROR, this, e); - return Collections.emptyList(); - } - IndexSearcher searcher = null; + + IndexReader indexReader = null; List<String> l = new ArrayList<String>(); try { @@ -118,14 +98,14 @@ query.add(queryCaps, BooleanClause.Occur.SHOULD); query.add(queryNoCaps, BooleanClause.Occur.SHOULD); - searcher = new IndexSearcher(directory); - + indexReader = DirectoryReader.open(directory); + IndexSearcher searcher = new IndexSearcher(indexReader); TopDocs search = searcher.search(query, 100); ScoreDoc[] scoreDocs = search.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); - Fieldable path = doc.getFieldable("path"); + IndexableField path = doc.getField("path"); l.add(path.stringValue()); } } @@ -135,7 +115,7 @@ } finally { - IOUtilities.closeQuietly(searcher); + IOUtilities.closeQuietly(indexReader); } return l; } //}}} @@ -159,7 +139,8 @@ IndexWriterConfig.OpenMode openMode; if (reset) { - tempDirectory = getDirectory(); + + tempDirectory = new RAMDirectory(); openMode = IndexWriterConfig.OpenMode.CREATE; } else @@ -168,8 +149,8 @@ openMode = IndexWriterConfig.OpenMode.CREATE_OR_APPEND; } observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_34); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34, analyzer); + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_40, analyzer); conf.setOpenMode(openMode); writer = new IndexWriter(tempDirectory, conf); for (int i = 0; i < fileProvider.size(); i++) @@ -178,16 +159,24 @@ observer.setValue(i); observer.setStatus(path); Document document = new Document(); - document.add( - new Field("path", path, Field.Store.YES, Field.Index.NOT_ANALYZED)); + document.add(new StringField("path", path, Field.Store.YES)); String fileName = MiscUtilities.getFileName(path); - document.add(new Field("name", fileName, Field.Store.NO, - Field.Index.ANALYZED)); - document.add(new Field("name_caps", fileName, Field.Store.NO, - Field.Index.NOT_ANALYZED)); + document.add(new TextField("name", fileName, Field.Store.NO)); + document.add(new StringField("name_caps", fileName, Field.Store.NO)); writer.addDocument(document); } + if (reset) + { + try + { + directory.close(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + } directory = tempDirectory; } catch (IOException e) @@ -213,8 +202,8 @@ try { observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_34); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34, analyzer); + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_40, analyzer); conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); writer = new IndexWriter(directory, conf); for (int i = 0; i < fileProvider.size(); i++) @@ -238,56 +227,4 @@ long end = System.currentTimeMillis(); Log.log(Log.MESSAGE, this, "Removed " + fileProvider.size()+" files in "+(end - start) + "ms"); } //}}} - - //{{{ getDirectory() method - private Directory getDirectory() - { - Directory tempDirectory; - if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) - { - tempDirectory = new RAMDirectory(); - } - else - { - try - { - EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); - File pluginHome = plugin.getPluginHome(); - File index = new File(pluginHome, getIndexName()); - index.mkdirs(); - tempDirectory = FSDirectory.open(index); - } - catch (IOException e) - { - Log.log(Log.ERROR, this, e); - tempDirectory = new RAMDirectory(); - } - } - return tempDirectory; - } //}}} - - //{{{ optimize() method - public void optimize() - { - synchronized (LOCK) - { - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_34); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34, analyzer); - conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); - IndexWriter writer = null; - try - { - writer = new IndexWriter(directory, conf); - writer.optimize(); - } - catch (IOException e) - { - Log.log(Log.ERROR, this, e); - } - finally - { - IOUtilities.closeQuietly(writer); - } - } - } //}}} } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2013-01-28 10:53:36 UTC (rev 22732) @@ -39,7 +39,6 @@ */ public class SmartOpenOptionPane extends AbstractOptionPane { - private JCheckBox inMemoryIndex; private JCheckBox indexProject; private JCheckBox toolbar; private JTextField includeFilesTF; @@ -74,10 +73,6 @@ indexProject = new JCheckBox(jEdit.getProperty("options.smartopen.projectindex.label")); indexProject.setSelected(jEdit.getBooleanProperty("options.smartopen.projectindex")); addComponent(indexProject); - - inMemoryIndex = new JCheckBox(jEdit.getProperty("options.smartopen.memoryindex.label")); - inMemoryIndex.setSelected(jEdit.getBooleanProperty("options.smartopen.memoryindex")); - addComponent(inMemoryIndex); } //}}} //{{{ _save() method @@ -88,7 +83,6 @@ jEdit.setProperty("options.smartopen.ExcludeGlobs", excludeFilesTF.getText()); jEdit.setBooleanProperty("options.smartopen.projectindex", indexProject.isSelected()); jEdit.setBooleanProperty("options.smartopen.toolbar", toolbar.isSelected()); - jEdit.setBooleanProperty("options.smartopen.memoryindex", inMemoryIndex.isSelected()); paths.save(); updateFilter(); } //}}} Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2013-01-28 10:53:00 UTC (rev 22731) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2013-01-28 10:53:36 UTC (rev 22732) @@ -60,7 +60,5 @@ new VPTFileProvider(addedFiles.toArray(new VPTFile[addedFiles.size()])); SmartOpenPlugin.itemFinder.addFiles(addedFileProvider, this, false); } - if (addedFiles != null || removedFiles != null) - SmartOpenPlugin.itemFinder.optimize(); } //}}} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-04-16 14:35:00
|
Revision: 22932 http://jedit.svn.sourceforge.net/jedit/?rev=22932&view=rev Author: kpouer Date: 2013-04-16 14:34:53 +0000 (Tue, 16 Apr 2013) Log Message: ----------- use the dot as separator before camelcase Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-04-16 05:22:07 UTC (rev 22931) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-04-16 14:34:53 UTC (rev 22932) @@ -4,7 +4,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.2 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.3 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.5 Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-04-16 05:22:07 UTC (rev 22931) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-04-16 14:34:53 UTC (rev 22932) @@ -62,6 +62,7 @@ */ public class FileIndex { + private static final Pattern DOTSPLIT = Pattern.compile("\\."); private static final Pattern CAMELCASE = Pattern.compile("(?<!^)(?=[A-Z])"); private Directory directory; private final Object LOCK = new Object(); @@ -82,13 +83,16 @@ List<String> l = new ArrayList<String>(); try { - String[] split = CAMELCASE.split(s); - StringBuilder builder = new StringBuilder(s.length() + split.length + 2); - for (int i = 0; i < split.length; i++) + String[] dotSplit = DOTSPLIT.split(s); + StringBuilder builder = new StringBuilder(500); + for (String token : dotSplit) { - builder.append(split[i]).append('*'); + String[] split = CAMELCASE.split(token); + for (int i = 0; i < split.length; i++) + { + builder.append(split[i]).append('*'); + } } - builder.append('*'); Query queryCaps = new WildcardQuery(new Term("name_caps", builder.toString())); s = s.toLowerCase(); Query queryNoCaps = new WildcardQuery(new Term("name", '*' + s + '*')); @@ -120,6 +124,15 @@ return l; } //}}} + private void appendCamelCaseSearch(String token, StringBuilder builder) + { + String[] split = CAMELCASE.split(token); + for (int i = 0; i < split.length; i++) + { + builder.append(split[i]).append('*'); + } + } + //{{{ addFiles() method /** * Index files. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-04-19 14:24:20
|
Revision: 22939 http://jedit.svn.sourceforge.net/jedit/?rev=22939&view=rev Author: kpouer Date: 2013-04-19 14:24:13 +0000 (Fri, 19 Apr 2013) Log Message: ----------- use of lucene 4.2.1, applied (with a few updates) the frequency patch #3602213 Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-04-19 14:24:13 UTC (rev 22939) @@ -4,7 +4,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=1.3 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.5 Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/ivy.xml 2013-04-19 14:24:13 UTC (rev 22939) @@ -1,10 +1,11 @@ <ivy-module version="2.0"> <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> - <dependency org="org.apache.lucene" name="lucene-core" rev="4.1.0"/> - <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.1.0"/> - <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.1.0"/> + <dependency org="org.apache.lucene" name="lucene-core" rev="4.2.1"/> + <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.2.1"/> + <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.2.1"/> <dependency org="jedit-plugins" name="CommonControls" rev="1.5"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.4.4"/> + <dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0"/> </dependencies> </ivy-module> \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-04-19 14:24:13 UTC (rev 22939) @@ -22,20 +22,26 @@ package com.kpouer.jedit.smartopen; //{{{ Imports +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import com.kpouer.jedit.smartopen.indexer.FileProvider; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.apache.lucene.document.LongField; +import org.apache.lucene.document.StoredField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexNotFoundException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; @@ -46,15 +52,22 @@ import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.Sort; +import org.apache.lucene.search.SortField; +import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; +import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.MiscUtilities; +import org.gjt.sp.jedit.jEdit; import org.gjt.sp.util.IOUtilities; import org.gjt.sp.util.Log; import org.gjt.sp.util.ProgressObserver; +import projectviewer.vpt.VPTProject; //}}} /** @@ -66,13 +79,29 @@ private static final Pattern CAMELCASE = Pattern.compile("(?<!^)(?=[A-Z])"); private Directory directory; private final Object LOCK = new Object(); + @Nullable + private final VPTProject project; //{{{ FileIndex constructor - public FileIndex() + public FileIndex(@Nullable VPTProject project) { - directory = new RAMDirectory(); + this.project = project; + directory = getDirectory(); } //}}} + @Nullable + public VPTProject getProject() + { + return project; + } + + //{{{ getIndexName() method + private String getIndexName() + { + String indexName = (project == null) ? "fileIndex" : project.getName() + "-index"; + return indexName; + } //}}} + //{{{ getFiles() method public List<String> getFiles(String s) { @@ -80,6 +109,8 @@ return Collections.emptyList(); IndexReader indexReader = null; + SortField sortField = new SortField("frequency", SortField.Type.LONG,true); + Sort sort = new Sort(sortField); List<String> l = new ArrayList<String>(); try { @@ -104,7 +135,7 @@ indexReader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(indexReader); - TopDocs search = searcher.search(query, 100); + TopDocs search = searcher.search(query, 100, sort); ScoreDoc[] scoreDocs = search.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { @@ -124,6 +155,36 @@ return l; } //}}} + //{{{ getDocument() method + @Nullable + private Document getDocument(String path) throws IOException + { + IndexReader indexReader = null; + try + { + indexReader = DirectoryReader.open(directory); + IndexSearcher searcher = new IndexSearcher(indexReader); + BooleanQuery query = new BooleanQuery(); + Term term = new Term("path",path); + query.add(new TermQuery(term),BooleanClause.Occur.MUST); + TopDocs search = searcher.search(query,1); + if (search.scoreDocs.length == 1) + { + Document doc = searcher.doc(search.scoreDocs[0].doc); + return doc; + } + } + catch(IndexNotFoundException infe) + { + //ok + } + finally + { + IOUtilities.closeQuietly(indexReader); + } + return null; + } //}}} + //{{{ addFiles() method /** * Index files. @@ -143,8 +204,7 @@ IndexWriterConfig.OpenMode openMode; if (reset) { - - tempDirectory = new RAMDirectory(); + tempDirectory = getDirectory(); openMode = IndexWriterConfig.OpenMode.CREATE; } else @@ -153,38 +213,30 @@ openMode = IndexWriterConfig.OpenMode.CREATE_OR_APPEND; } observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_40, analyzer); + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_42, analyzer); conf.setOpenMode(openMode); writer = new IndexWriter(tempDirectory, conf); - Document document = new Document(); - StringField pathField = new StringField("path", "", Field.Store.YES); - document.add(pathField); - TextField nameField = new TextField("name", "", Field.Store.NO); - document.add(nameField); - StringField name_caps = new StringField("name_caps", "", Field.Store.NO); - document.add(name_caps); + for (int i = 0; i < fileProvider.size(); i++) { String path = fileProvider.next(); + Term pathTerm = new Term("path",path); observer.setValue(i); observer.setStatus(path); - pathField.setStringValue(path); - String fileName = MiscUtilities.getFileName(path); - nameField.setStringValue(fileName); - name_caps.setStringValue(fileName); - writer.addDocument(document); + Document document = getDocument(path); + long frequency = 1L; + if (document != null) + { + Field frequencyField = (Field) document.getField("frequency"); + frequency = frequencyField.numericValue().longValue() + 1; + writer.deleteDocuments(pathTerm); + } + writer.addDocument(createDocument(path, frequency)); } if (reset) { - try - { - directory.close(); - } - catch (IOException e) - { - Log.log(Log.ERROR, this, e); - } + IOUtilities.closeQuietly(directory); } directory = tempDirectory; } @@ -211,8 +263,8 @@ try { observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_40, analyzer); + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_41); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_41, analyzer); conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); writer = new IndexWriter(directory, conf); for (int i = 0; i < fileProvider.size(); i++) @@ -236,4 +288,77 @@ long end = System.currentTimeMillis(); Log.log(Log.MESSAGE, this, "Removed " + fileProvider.size()+" files in "+(end - start) + "ms"); } //}}} + + //{{{ updateFrequency() method + public void updateFrequency(String path) + { + synchronized (LOCK) + { + BooleanQuery query = new BooleanQuery(); + Term term = new Term("path",path); + query.add(new TermQuery(term),BooleanClause.Occur.MUST); + IndexWriter writer = null; + try + { + Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); + IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_42, analyzer); + conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); + writer = new IndexWriter(directory, conf); + Document document = getDocument(path); + if (document == null) + return; + IndexableField frequencyField = document.getField("frequency"); + long frequency = frequencyField.numericValue().longValue(); + writer.deleteDocuments(term); + writer.addDocument(createDocument(path, frequency+1)); + } + catch (Exception e) + { + Log.log(Log.ERROR, this, e); + } + finally + { + IOUtilities.closeQuietly(writer); + } + } + } //}}} + + // createDocument() method + private static Document createDocument(String path, long frequency) + { + Document document = new Document(); + String fileName = MiscUtilities.getFileName(path); + document.add(new StringField("path", path, Field.Store.YES)); + document.add(new TextField("name", fileName, Field.Store.NO)); + document.add(new StringField("name_caps", fileName, Field.Store.NO)); + document.add(new LongField("frequency", frequency, Field.Store.YES)); + return document; + } //}}} + + //{{{ getDirectory() method + private Directory getDirectory() + { + Directory tempDirectory; + if (jEdit.getBooleanProperty("options.smartopen.memoryindex")) + { + tempDirectory = new RAMDirectory(); + } + else + { + try + { + EditPlugin plugin = jEdit.getPlugin(SmartOpenPlugin.class.getName()); + File pluginHome = plugin.getPluginHome(); + File index = new File(pluginHome, getIndexName()); + index.mkdirs(); + tempDirectory = FSDirectory.open(index); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + tempDirectory = new RAMDirectory(); + } + } + return tempDirectory; + } //}}} } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-04-19 14:24:13 UTC (rev 22939) @@ -40,12 +40,14 @@ { private final MyListModel model; private final ListCellRenderer listCellRenderer; + private final FileIndex itemFinder; //{{{ FileItemFinder constructor - public FileItemFinder() + public FileItemFinder(FileIndex itemFinder) { model = new MyListModel(); listCellRenderer = new PathCellRenderer(); + this.itemFinder = itemFinder; } //}}} //{{{ getLabel() method @@ -66,7 +68,7 @@ @Override public void updateList(String s) { - List<String> files = SmartOpenPlugin.itemFinder.getFiles(s); + List<String> files = itemFinder.getFiles(s); model.setData(files); } //}}} Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-04-19 14:24:13 UTC (rev 22939) @@ -47,6 +47,7 @@ import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.BufferChanging; import org.gjt.sp.jedit.msg.PropertiesChanged; import org.gjt.sp.jedit.msg.ViewUpdate; import org.gjt.sp.jedit.textarea.JEditTextArea; @@ -73,17 +74,16 @@ public static FileIndex itemFinder; private Timer timer; - private static VPTProject currenProject; - private boolean toolbar; //{{{ start() method @Override public void start() { - itemFinder = new FileIndex(); propertiesChanged(null); - + itemFinder = new FileIndex(null); + Task task = new IndexFilesTask(); + ThreadUtilities.runInBackground(task); EditBus.addToBus(this); timer = new Timer(60000, new ActionListener() { @@ -101,7 +101,7 @@ { if (viewToolbar.containsKey(view)) return; - SmartOpenToolbar smartToolbar = new SmartOpenToolbar(view); + SmartOpenToolbar smartToolbar = new SmartOpenToolbar(view,itemFinder); JComponent toolBar = getViewToolbar(view); toolBar.add(smartToolbar); toolBar.revalidate(); @@ -189,7 +189,7 @@ } else { - currenProject = null; + itemFinder = new FileIndex(null); Task task = new IndexFilesTask(); ThreadUtilities.runInBackground(task); } @@ -198,15 +198,19 @@ //{{{ indexProject() method private static void indexProject(VPTProject activeProject) { - if (StandardUtilities.objectsEqual(currenProject, activeProject)) + if (StandardUtilities.objectsEqual(itemFinder.getProject(), activeProject)) { return; } - currenProject = activeProject; - if (currenProject != null) + + if (activeProject != null) { - IndexProjectTask task = new IndexProjectTask(currenProject); - ThreadUtilities.runInBackground(task); + itemFinder = new FileIndex(activeProject); + //reindex only for in-memory storage + //if(jEdit.getBooleanProperty("options.smartopen.memoryindex")){ + IndexProjectTask task = new IndexProjectTask(itemFinder); + ThreadUtilities.runInBackground(task); + //} } else { @@ -220,7 +224,6 @@ public void stop() { timer.stop(); - currenProject = null; EditBus.removeFromBus(this); itemFinder = null; removeToolbars(); @@ -233,7 +236,7 @@ if (viewUpdate.getWhat() == ViewUpdate.ACTIVATED) { VPTProject project = ProjectViewer.getActiveProject(viewUpdate.getView()); - if (!StandardUtilities.objectsEqual(project, currenProject)) + if (!StandardUtilities.objectsEqual(project, itemFinder.getProject())) indexProject(project); } if (toolbar) @@ -265,6 +268,21 @@ indexFiles(); } //}}} + //{{{ bufferChanging() method + @EditBus.EBHandler + public void bufferChanging(BufferChanging bc) + { + final String path = bc.getBuffer().getPath(); + ThreadUtilities.runInBackground(new Task() + { + @Override + public void _run() + { + itemFinder.updateFrequency(path); + } + }); + } //}}} + //{{{ viewerUpdate() method @EditBus.EBHandler public void viewerUpdate(ViewerUpdate vu) @@ -275,7 +293,7 @@ { VPTNode node = vu.getNode(); VPTProject project = VPTNode.findProjectFor(node); - if (!StandardUtilities.objectsEqual(project, currenProject)) + if (!StandardUtilities.objectsEqual(project, itemFinder.getProject())) indexProject(project); } } @@ -285,7 +303,7 @@ @EditBus.EBHandler public void projectModified(ProjectUpdate pu) { - if (pu.getProject() == currenProject) + if (pu.getProject() == itemFinder.getProject()) { if (pu.getType() == ProjectUpdate.Type.FILES_CHANGED) { @@ -318,15 +336,15 @@ //{{{ smartOpenDialog() methods public static void smartOpenDialog(View view, String fileName) { - ItemFinder<String> itemFinder = new FileItemFinder(); - ItemFinderWindow.showWindow(view, itemFinder, fileName); + ItemFinder<String> filetItemFinder = new FileItemFinder(itemFinder); + ItemFinderWindow.showWindow(view, filetItemFinder, fileName); } public static void smartOpenDialog(View view) { - ItemFinder<String> itemFinder = new FileItemFinder(); + ItemFinder<String> filetItemFinder = new FileItemFinder(itemFinder); String wordAtCaret = getWordAtCaret(view); - ItemFinderWindow.showWindow(view, itemFinder, wordAtCaret); + ItemFinderWindow.showWindow(view, filetItemFinder, wordAtCaret); } //}}} //{{{ addToolbars() method Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2013-04-19 14:24:13 UTC (rev 22939) @@ -38,9 +38,9 @@ private final ItemFinderPanel<String> itemFinderPanel; //{{{ SmartOpenToolbar constructor - public SmartOpenToolbar(View view) + public SmartOpenToolbar(View view, FileIndex itemIndex) { - ItemFinder<String> itemFinder = new FileItemFinder(); + ItemFinder<String> itemFinder = new FileItemFinder(itemIndex); itemFinderPanel = new ItemFinderPanel<String>(view, itemFinder); Dimension maximumSize = itemFinderPanel.getMaximumSize(); itemFinderPanel.setMaximumSize(new Dimension(500, maximumSize.height)); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2013-04-19 14:22:45 UTC (rev 22938) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2013-04-19 14:24:13 UTC (rev 22939) @@ -22,6 +22,7 @@ package com.kpouer.jedit.smartopen.indexer; //{{{ Imports +import com.kpouer.jedit.smartopen.FileIndex; import com.kpouer.jedit.smartopen.SmartOpenPlugin; import org.gjt.sp.util.Task; import projectviewer.vpt.VPTProject; @@ -32,19 +33,19 @@ */ public class IndexProjectTask extends Task { - private final VPTProject project; + private final FileIndex itemFinder; //{{{ IndexProjectTask constructor - public IndexProjectTask(VPTProject project) + public IndexProjectTask(FileIndex itemFinder) { - this.project = project; + this.itemFinder = itemFinder; } //}}} //{{{ _run() method @Override public void _run() { - FileProvider projectFileList = new ProjectFileList(project); - SmartOpenPlugin.itemFinder.addFiles(projectFileList, this, true); + FileProvider projectFileList = new ProjectFileList(itemFinder.getProject()); + itemFinder.addFiles(projectFileList, this, true); } //}}} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-06-12 13:46:36
|
Revision: 23053 http://jedit.svn.sourceforge.net/jedit/?rev=23053&view=rev Author: kpouer Date: 2013-06-12 13:46:14 +0000 (Wed, 12 Jun 2013) Log Message: ----------- Ability to give line number and offset in search : "somefile:line,column" The column is optional Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-06-12 13:43:50 UTC (rev 23052) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-06-12 13:46:14 UTC (rev 23053) @@ -7,7 +7,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.5 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.4 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2013-06-12 13:43:50 UTC (rev 23052) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2013-06-12 13:46:14 UTC (rev 23053) @@ -48,6 +48,7 @@ <li>2.0</li> <ul> <li>Use of frequency to sort search results (patch #3602213 - Ivan Baidakou)</li> + <li>Ability to give line number and offset in search : "somefile:line,column" The column is optional</li> </ul> <li>1.1</li> <ul> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-06-12 13:43:50 UTC (rev 23052) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-06-12 13:46:14 UTC (rev 23053) @@ -30,7 +30,12 @@ import common.gui.itemfinder.AbstractItemFinder; import common.gui.itemfinder.PathCellRenderer; +import org.gjt.sp.jedit.EBComponent; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EditBus; import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.BufferUpdate; +import org.gjt.sp.jedit.textarea.JEditTextArea; //}}} /** @@ -42,6 +47,8 @@ private final ListCellRenderer listCellRenderer; private final FileIndex itemFinder; + private String position; + //{{{ FileItemFinder constructor public FileItemFinder(FileIndex itemFinder) { @@ -66,17 +73,68 @@ //{{{ updateList() method @Override - public void updateList(String s) + public void updateList(String search) { - List<String> files = itemFinder.getFiles(s); + int index = search.indexOf(':'); + position = null; + if (index != -1) + { + if (index < search.length()) + { + position = search.substring(index + 1); + } + search = search.substring(0, index); + } + List<String> files = itemFinder.getFiles(search); model.setData(files); } //}}} //{{{ selectionMade() method @Override - public void selectionMade(String item) + public void selectionMade(final String path) { - jEdit.openFile(jEdit.getActiveView().getEditPane(), item); + if (position != null) + { + final String[] split = position.split(","); + try + { + final int _seletedLine = Integer.parseInt(split[0]) - 1; + EditBus.addToBus(new EBComponent() + { + @Override + public void handleMessage(EBMessage message) + { + if (message instanceof BufferUpdate) + { + BufferUpdate bufferUpdate = (BufferUpdate) message; + if (bufferUpdate.getWhat() == BufferUpdate.LOADED && + bufferUpdate.getBuffer().getPath().equals(path)) + { + EditBus.removeFromBus(this); + JEditTextArea textArea = jEdit.getActiveView().getEditPane().getTextArea(); + int caret = textArea.getLineStartOffset(_seletedLine); + if (caret == -1) + return; + + if (split.length > 0) + { + int offset = Integer.parseInt(split[1]); + if (offset < textArea.getLineLength(_seletedLine)) + { + caret += offset; + } + } + textArea.setCaretPosition(caret); + } + } + } + }); + } + catch (NumberFormatException e) + { + } + } + jEdit.openFile(jEdit.getActiveView().getEditPane(), path); } //}}} //{{{ getListCellRenderer() method Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-06-12 13:43:50 UTC (rev 23052) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-06-12 13:46:14 UTC (rev 23053) @@ -208,7 +208,7 @@ itemFinder = new FileIndex(activeProject); //reindex only for in-memory storage //if(jEdit.getBooleanProperty("options.smartopen.memoryindex")){ - IndexProjectTask task = new IndexProjectTask(itemFinder); + IndexProjectTask task = new IndexProjectTask(itemFinder); ThreadUtilities.runInBackground(task); //} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-08-13 09:15:37
|
Revision: 23115 http://jedit.svn.sourceforge.net/jedit/?rev=23115&view=rev Author: kpouer Date: 2013-08-13 09:15:28 +0000 (Tue, 13 Aug 2013) Log Message: ----------- switch to java 7, reuse of fields Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/build.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-08-13 07:55:10 UTC (rev 23114) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-08-13 09:15:28 UTC (rev 23115) @@ -5,8 +5,8 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.0 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.6 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.00.01.00 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.7 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.6 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.4 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 Modified: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml 2013-08-13 07:55:10 UTC (rev 23114) +++ plugins/SmartOpen/trunk/build.xml 2013-08-13 09:15:28 UTC (rev 23115) @@ -7,8 +7,8 @@ <property file="build.properties"/> <property name="dist.target" value="dist.complete"/> - <property name="compiler.source" value="1.6"/> - <property name="compiler.target" value="1.6"/> + <property name="compiler.source" value="1.7"/> + <property name="compiler.target" value="1.7"/> <property name="debug" value="on"/> <property name="jedit.plugins.dir" value="${install.dir}"/> <property name="src.dir" location="src" /> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-08-13 07:55:10 UTC (rev 23114) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-08-13 09:15:28 UTC (rev 23115) @@ -32,7 +32,6 @@ import javax.annotation.Nullable; import com.kpouer.jedit.smartopen.indexer.FileProvider; -import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -59,6 +58,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; +import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.Version; import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.MiscUtilities; @@ -82,12 +82,16 @@ private final VPTProject project; private IndexReader reader; + private final DocumentFactory documentFactory; + private final IndexWriterConfig indexWriterConfig; //{{{ FileIndex constructor public FileIndex(@Nullable VPTProject project) { this.project = project; directory = getDirectory(); + indexWriterConfig = new IndexWriterConfig(Version.LUCENE_42, new StandardAnalyzer(Version.LUCENE_42)); + documentFactory = new DocumentFactory(); } //}}} private void setDirectory(Directory directory) @@ -121,7 +125,7 @@ //{{{ getIndexName() method private String getIndexName() { - String indexName = (project == null) ? "fileIndex" : project.getName() + "-index"; + String indexName = project == null ? "fileIndex" : project.getName() + "-index"; return indexName; } //}}} @@ -133,7 +137,7 @@ SortField sortField = new SortField("frequency", SortField.Type.LONG,true); Sort sort = new Sort(sortField); - List<String> l = new ArrayList<String>(); + List<String> l = new ArrayList<>(); try { String[] dotSplit = DOTSPLIT.split(s); @@ -151,7 +155,7 @@ Query queryNoCaps = new WildcardQuery(new Term("name", '*' + s + '*')); BooleanQuery query = new BooleanQuery(); - queryCaps.setBoost(10); + queryCaps.setBoost(10.0F); query.add(queryCaps, BooleanClause.Occur.SHOULD); query.add(queryNoCaps, BooleanClause.Occur.SHOULD); @@ -174,29 +178,10 @@ } //}}} //{{{ getFrequency() method - private long getFrequency(String path) throws IOException + private long getFrequency(CharSequence path) throws IOException { - long frequency = 0L; - try - { - initReader(); - IndexSearcher searcher = new IndexSearcher(reader); - BooleanQuery query = new BooleanQuery(); - Term term = new Term("path",path); - query.add(new TermQuery(term),BooleanClause.Occur.MUST); - TopDocs search = searcher.search(query,1); - if (search.scoreDocs.length == 1) - { - Document doc = searcher.doc(search.scoreDocs[0].doc); - IndexableField frequencyField = doc.getField("frequency"); - frequency = frequencyField.numericValue().longValue(); - } - } - catch(IndexNotFoundException infe) - { - //ok - } - return frequency; + initReader(); + return new FrequencySearch(reader).getFrequency(path); } //}}} //{{{ addFiles() method @@ -209,29 +194,30 @@ public void addFiles(FileProvider fileProvider, ProgressObserver observer, boolean reset) { long start = System.currentTimeMillis(); + IndexWriter writer = null; + Directory tempDirectory; + IndexWriterConfig.OpenMode openMode; + if (reset) + { + tempDirectory = getDirectory(); + openMode = IndexWriterConfig.OpenMode.CREATE; + } + else + { + tempDirectory = directory; + openMode = IndexWriterConfig.OpenMode.CREATE_OR_APPEND; + } + observer.setMaximum(fileProvider.size()); + synchronized (LOCK) { - IndexWriter writer = null; + indexWriterConfig.setOpenMode(openMode); try { - Directory tempDirectory; - IndexWriterConfig.OpenMode openMode; - if (reset) - { - tempDirectory = getDirectory(); - openMode = IndexWriterConfig.OpenMode.CREATE; - } - else - { - tempDirectory = directory; - openMode = IndexWriterConfig.OpenMode.CREATE_OR_APPEND; - } - observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_42, analyzer); - conf.setOpenMode(openMode); - writer = new IndexWriter(tempDirectory, conf); + writer = new IndexWriter(tempDirectory, indexWriterConfig); + initReader(); + FrequencySearch frequencySearch = new FrequencySearch(reader); for (int i = 0; i < fileProvider.size(); i++) { String path = fileProvider.next(); @@ -239,8 +225,8 @@ if (i % 10 == 0) observer.setStatus(path); - long frequency = getFrequency(path); - writer.addDocument(createDocument(path, frequency + 1)); + long frequency = frequencySearch.getFrequency(path); + writer.addDocument(documentFactory.createDocument(path, frequency + 1L)); } if (reset) { @@ -265,16 +251,15 @@ public void removeFiles(FileProvider fileProvider, ProgressObserver observer) { long start = System.currentTimeMillis(); + IndexWriter writer = null; + observer.setMaximum(fileProvider.size()); + synchronized (LOCK) { - IndexWriter writer = null; + indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); try { - observer.setMaximum(fileProvider.size()); - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_41); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_41, analyzer); - conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); - writer = new IndexWriter(directory, conf); + writer = new IndexWriter(directory, indexWriterConfig); for (int i = 0; i < fileProvider.size(); i++) { String path = fileProvider.next(); @@ -300,23 +285,21 @@ //{{{ updateFrequency() method public void updateFrequency(String path) { + BooleanQuery query = new BooleanQuery(); + Term term = new Term("path",path); + query.add(new TermQuery(term),BooleanClause.Occur.MUST); + IndexWriter writer = null; synchronized (LOCK) { - BooleanQuery query = new BooleanQuery(); - Term term = new Term("path",path); - query.add(new TermQuery(term),BooleanClause.Occur.MUST); - IndexWriter writer = null; + indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); try { - Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42); - IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_42, analyzer); - conf.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); - writer = new IndexWriter(directory, conf); + writer = new IndexWriter(directory, indexWriterConfig); long frequency = getFrequency(path); if (frequency == 0) return; writer.deleteDocuments(term); - writer.addDocument(createDocument(path, frequency + 1)); + writer.addDocument(documentFactory.createDocument(path, frequency + 1)); } catch (Exception e) { @@ -329,18 +312,6 @@ } } //}}} - // createDocument() method - private static Document createDocument(String path, long frequency) - { - Document document = new Document(); - String fileName = MiscUtilities.getFileName(path); - document.add(new StringField("path", path, Field.Store.YES)); - document.add(new TextField("name", fileName, Field.Store.NO)); - document.add(new StringField("name_caps", fileName, Field.Store.NO)); - document.add(new LongField("frequency", frequency, Field.Store.YES)); - return document; - } //}}} - //{{{ getDirectory() method private Directory getDirectory() { @@ -367,4 +338,75 @@ } return tempDirectory; } //}}} + + private static class FrequencySearch + { + private final BytesRef bytes; + private final IndexSearcher searcher; + private final BooleanQuery query; + private final Term term; + + private FrequencySearch(IndexReader reader) + { + searcher = new IndexSearcher(reader); + bytes = new BytesRef(0); + term = new Term("path", bytes); + query = new BooleanQuery(); + query.add(new TermQuery(term), BooleanClause.Occur.MUST); + } + + public long getFrequency(CharSequence path) throws IOException + { + long frequency = 0L; + try + { + TopDocs search = searcher.search(query,1); + bytes.copyChars(path); + if (search.scoreDocs.length == 1) + { + Document doc = searcher.doc(search.scoreDocs[0].doc); + IndexableField frequencyField = doc.getField("frequency"); + frequency = frequencyField.numericValue().longValue(); + } + } + catch(IndexNotFoundException infe) + { + //ok + } + return frequency; + } + } + + private static class DocumentFactory + { + private final LongField frequency; + private final StringField name_caps; + private final TextField name; + private final StringField path; + private final Document document; + + private DocumentFactory() + { + document = new Document(); + path = new StringField("path", "", Field.Store.YES); + document.add(path); + name = new TextField("name", "", Field.Store.NO); + document.add(name); + name_caps = new StringField("name_caps", "", Field.Store.NO); + document.add(name_caps); + frequency = new LongField("frequency", 0L, Field.Store.YES); + document.add(frequency); + } + + // createDocument() method + public Document createDocument(String path, long frequency) + { + String fileName = MiscUtilities.getFileName(path); + this.path.setStringValue(path); + name.setStringValue(fileName); + name_caps.setStringValue(fileName); + this.frequency.setLongValue(frequency); + return document; + } //}}} + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-08-14 11:00:59
|
Revision: 23123 http://jedit.svn.sourceforge.net/jedit/?rev=23123&view=rev Author: kpouer Date: 2013-08-14 11:00:49 +0000 (Wed, 14 Aug 2013) Log Message: ----------- some fixes and ability to reset frequency Modified Paths: -------------- plugins/SmartOpen/trunk/actions.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java Modified: plugins/SmartOpen/trunk/actions.xml =================================================================== --- plugins/SmartOpen/trunk/actions.xml 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/actions.xml 2013-08-14 11:00:49 UTC (rev 23123) @@ -16,5 +16,10 @@ com.kpouer.jedit.smartopen.SmartOpenPlugin.indexFiles(); </CODE> </ACTION> + <ACTION NAME="smart-open-reset-frequency" NO_REPEAT="TRUE"> + <CODE> + com.kpouer.jedit.smartopen.SmartOpenPlugin.resetFrequency(); + </CODE> + </ACTION> </ACTIONS> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -22,11 +22,15 @@ package com.kpouer.jedit.smartopen; //{{{ Imports +import java.io.Closeable; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.regex.Pattern; import javax.annotation.Nullable; @@ -44,6 +48,7 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexableField; +import org.apache.lucene.index.MultiFields; import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; @@ -58,7 +63,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; -import org.apache.lucene.util.BytesRef; +import org.apache.lucene.util.Bits; import org.apache.lucene.util.Version; import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.MiscUtilities; @@ -72,16 +77,17 @@ /** * @author Matthieu Casanova */ -public class FileIndex +public class FileIndex implements Closeable { private static final Pattern DOTSPLIT = Pattern.compile("\\."); private static final Pattern CAMELCASE = Pattern.compile("(?<!^)(?=[A-Z])"); - private Directory directory; + private final Directory directory; private final Object LOCK = new Object(); @Nullable private final VPTProject project; - private IndexReader reader; + private DirectoryReader reader; + private final DocumentFactory documentFactory; private final IndexWriterConfig indexWriterConfig; @@ -91,29 +97,32 @@ this.project = project; directory = getDirectory(); indexWriterConfig = new IndexWriterConfig(Version.LUCENE_42, new StandardAnalyzer(Version.LUCENE_42)); + indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); documentFactory = new DocumentFactory(); } //}}} - private void setDirectory(Directory directory) + private void initReader() throws IOException { synchronized (LOCK) { - if (reader != null) + if (reader == null) + reader = DirectoryReader.open(directory); + else { - IOUtilities.closeQuietly(reader); - reader = null; + DirectoryReader newReader = DirectoryReader.openIfChanged(reader); + if (newReader != null) + { + reader.close(); + reader = newReader; + } } - this.directory = directory; } } - private void initReader() throws IOException + @Override + public void close() { - synchronized (LOCK) - { - if (reader == null) - reader = DirectoryReader.open(directory); - } + IOUtilities.closeQuietly (reader); } @Nullable @@ -170,15 +179,17 @@ query.add(nameQuery, BooleanClause.Occur.MUST); query.add(new TermQuery(new Term("extension", extension.toLowerCase())), BooleanClause.Occur.MUST); } - initReader(); + if (reader == null) + initReader(); IndexSearcher searcher = new IndexSearcher(reader); TopDocs search = searcher.search(query, 100, sort); ScoreDoc[] scoreDocs = search.scoreDocs; + Set<String> fields = Collections.singleton("path"); for (ScoreDoc scoreDoc : scoreDocs) { - Document doc = searcher.doc(scoreDoc.doc); - IndexableField path = doc.getField("path"); - l.add(path.stringValue()); + Document doc = searcher.doc(scoreDoc.doc, fields); + String path = doc.get("path"); + l.add(path); } } catch (IOException e) @@ -189,46 +200,52 @@ } //}}} //{{{ getFrequency() method - private long getFrequency(CharSequence path) throws IOException + private long getFrequency(String path) throws IOException { - initReader(); + if (reader == null) + { + try + { + initReader(); + } + catch (IOException e) + { + return 0; + } + } return new FrequencySearch(reader).getFrequency(path); } //}}} //{{{ addFiles() method + public void addFiles(FileProvider fileProvider, ProgressObserver observer) + { + addFiles(fileProvider, observer, false); + } /** * Index files. * @param fileProvider the file provider to index * @param observer the progress observer - * @param reset true if you want to reset the previous index */ - public void addFiles(FileProvider fileProvider, ProgressObserver observer, boolean reset) + public void addFiles(FileProvider fileProvider, ProgressObserver observer, boolean append) { long start = System.currentTimeMillis(); - IndexWriter writer = null; - Directory tempDirectory; - IndexWriterConfig.OpenMode openMode; - if (reset) - { - tempDirectory = getDirectory(); - openMode = IndexWriterConfig.OpenMode.CREATE; - } - else - { - tempDirectory = directory; - openMode = IndexWriterConfig.OpenMode.CREATE_OR_APPEND; - } observer.setMaximum(fileProvider.size()); Pattern exclude = SmartOpenOptionPane.globToPattern(jEdit.getProperty("options.smartopen.ExcludeGlobs")); synchronized (LOCK) { - indexWriterConfig.setOpenMode(openMode); + IndexWriter writer = null; try { - writer = new IndexWriter(tempDirectory, indexWriterConfig); + writer = new IndexWriter(directory, indexWriterConfig); - initReader(); - FrequencySearch frequencySearch = new FrequencySearch(reader); + Collection<String> knownFiles; + if (append) + { + knownFiles = Collections.emptyList(); + } + else + knownFiles = getExistingFiles(); + for (int i = 0; i < fileProvider.size(); i++) { String path = fileProvider.next(); @@ -239,15 +256,22 @@ if (!exclude.matcher(path).matches()) { - long frequency = frequencySearch.getFrequency(path); - writer.addDocument(documentFactory.createDocument(path, frequency)); + if (knownFiles.contains(path)) + { + knownFiles.remove(path); + } + else + { + writer.addDocument(documentFactory.createDocument(path, 1)); + } } + + // iterate over documents that are still here but are not part of the project anymore } - if (reset) + for (String remainingFile : knownFiles) { - IOUtilities.closeQuietly(directory); + writer.deleteDocuments(new Term("path", remainingFile)); } - setDirectory(tempDirectory); } catch (IOException e) { @@ -258,10 +282,46 @@ IOUtilities.closeQuietly(writer); } } + try + { + initReader(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } long end = System.currentTimeMillis(); Log.log(Log.MESSAGE, this, "Added " + fileProvider.size()+" files in "+(end - start) + "ms"); } //}}} + private Collection<String> getExistingFiles() throws IOException + { + Collection<String> knownFiles = new HashSet<>(10000); + try + { + initReader(); + } + catch (IOException e) + { + // ignore + } + if (reader != null) + { + Set<String> fields = Collections.singleton("path"); + Bits liveDocs = MultiFields.getLiveDocs(reader); + for (int i = 0; i < reader.maxDoc(); i++) + { + if (liveDocs == null || liveDocs.get(i)) + { + Document doc = reader.document(i, fields); + String path = doc.get("path"); + knownFiles.add(path); + } + } + } + return knownFiles; + } + //{{{ removeFiles() method public void removeFiles(FileProvider fileProvider, ProgressObserver observer) { @@ -271,7 +331,6 @@ synchronized (LOCK) { - indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); try { writer = new IndexWriter(directory, indexWriterConfig); @@ -282,7 +341,6 @@ observer.setStatus(path); writer.deleteDocuments(new Term("path", path)); } - writer.commit(); } catch (IOException e) { @@ -293,6 +351,14 @@ IOUtilities.closeQuietly(writer); } } + try + { + initReader(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } long end = System.currentTimeMillis(); Log.log(Log.MESSAGE, this, "Removed " + fileProvider.size()+" files in "+(end - start) + "ms"); } //}}} @@ -300,13 +366,10 @@ //{{{ updateFrequency() method public void updateFrequency(String path) { - BooleanQuery query = new BooleanQuery(); Term term = new Term("path",path); - query.add(new TermQuery(term),BooleanClause.Occur.MUST); - IndexWriter writer = null; synchronized (LOCK) { - indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); + IndexWriter writer = null; try { writer = new IndexWriter(directory, indexWriterConfig); @@ -324,6 +387,14 @@ { IOUtilities.closeQuietly(writer); } + try + { + initReader(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } } } //}}} @@ -354,32 +425,72 @@ return tempDirectory; } //}}} + public void resetFrequency() + { + long start = System.currentTimeMillis(); + try + { + Collection<String> existingFiles = getExistingFiles(); + + synchronized (LOCK) + { + IndexWriter writer = null; + try + { + writer = new IndexWriter(directory, indexWriterConfig); + for (String path : existingFiles) + { + Term term = new Term("path", path); + writer.deleteDocuments(term); + writer.addDocument(documentFactory.createDocument(path, 1)); + } + } + catch (Exception e) + { + Log.log(Log.ERROR, this, e); + } + finally + { + IOUtilities.closeQuietly(writer); + } + try + { + initReader(); + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + } + } + catch (IOException e) + { + Log.log(Log.ERROR, this, e); + } + long end = System.currentTimeMillis(); + Log.log(Log.MESSAGE, this, "Frequency cache resetted in "+(end - start) + "ms"); + } + private static class FrequencySearch { - private final BytesRef bytes; private final IndexSearcher searcher; - private final BooleanQuery query; - private final Term term; + private final Set<String> frequencyField; private FrequencySearch(IndexReader reader) { searcher = new IndexSearcher(reader); - bytes = new BytesRef(0); - term = new Term("path", bytes); - query = new BooleanQuery(); - query.add(new TermQuery(term), BooleanClause.Occur.MUST); + frequencyField = Collections.singleton("frequency"); } - public long getFrequency(CharSequence path) throws IOException + public long getFrequency(String path) throws IOException { long frequency = 0L; try { - bytes.copyChars(path); - TopDocs search = searcher.search(query,1); + TopDocs search = searcher.search(new TermQuery(new Term("path", path)),1); if (search.scoreDocs.length == 1) { - Document doc = searcher.doc(search.scoreDocs[0].doc); + Document doc = searcher.doc(search.scoreDocs[0].doc, frequencyField); IndexableField frequencyField = doc.getField("frequency"); frequency = frequencyField.numericValue().longValue(); } @@ -412,7 +523,7 @@ document.add(name_caps); fileExtension = new StringField("extension", "", Field.Store.NO); document.add(fileExtension); - frequency = new LongField("frequency", 0L, Field.Store.YES); + frequency = new LongField("frequency", 1L, Field.Store.YES); document.add(frequency); } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -71,7 +71,7 @@ //{{{ getModel() method @Override - public ListModel getModel() + public ListModel<String> getModel() { return model; } //}}} @@ -170,20 +170,20 @@ //{{{ getListCellRenderer() method @Override - public ListCellRenderer getListCellRenderer() + public ListCellRenderer<String> getListCellRenderer() { return listCellRenderer; } //}}} //{{{ MyListModel class - private static class MyListModel extends AbstractListModel + private static class MyListModel extends AbstractListModel<String> { private List<String> data; //{{{ MyListModel constructor private MyListModel() { - data = new ArrayList<String>(); + data = new ArrayList<>(); } //}}} //{{{ setData() method @@ -202,7 +202,7 @@ //{{{ getElementAt() method @Override - public Object getElementAt(int index) + public String getElementAt(int index) { return data.get(index); } //}}} Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -72,8 +72,8 @@ public class SmartOpenPlugin extends EditPlugin { private static JTextField extensionTextField; - private final Map<View, SmartOpenToolbar> viewToolbar = new HashMap<View, SmartOpenToolbar>(); - private final Map<View, JComponent> topToolbars = new HashMap<View, JComponent>(); + private final Map<View, SmartOpenToolbar> viewToolbar = new HashMap<>(); + private final Map<View, JComponent> topToolbars = new HashMap<>(); public static FileIndex itemFinder; private Timer timer; @@ -86,8 +86,6 @@ { propertiesChanged(null); itemFinder = new FileIndex(null); - Task task = new IndexFilesTask(); - ThreadUtilities.runInBackground(task); EditBus.addToBus(this); timer = new Timer(60000, new ActionListener() { @@ -171,6 +169,13 @@ viewToolbar.remove(view); } //}}} + public static void resetFrequency() + { + if (itemFinder == null) + return; + itemFinder.resetFrequency(); + } + //{{{ indexFiles() methods public static void indexFiles() { @@ -193,6 +198,8 @@ } else { + if (itemFinder != null) + itemFinder.close(); itemFinder = new FileIndex(null); Task task = new IndexFilesTask(); ThreadUtilities.runInBackground(task); @@ -209,11 +216,13 @@ if (activeProject != null) { + if (itemFinder != null) + itemFinder.close(); itemFinder = new FileIndex(activeProject); //reindex only for in-memory storage //if(jEdit.getBooleanProperty("options.smartopen.memoryindex")){ IndexProjectTask task = new IndexProjectTask(itemFinder); - ThreadUtilities.runInBackground(task); + ThreadUtilities.runInBackground(task); //} } else @@ -227,6 +236,7 @@ @Override public void stop() { + extensionTextField = null; timer.stop(); EditBus.removeFromBus(this); itemFinder = null; Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -23,6 +23,7 @@ //{{{ Imports import java.awt.Dimension; +import javax.swing.JTextField; import javax.swing.JToolBar; import common.gui.itemfinder.ItemFinder; @@ -36,11 +37,13 @@ public class SmartOpenToolbar extends JToolBar { private final ItemFinderPanel<String> itemFinderPanel; + private final JTextField extensionTextField; //{{{ SmartOpenToolbar constructor public SmartOpenToolbar(View view, FileIndex itemIndex) { - ItemFinder<String> itemFinder = new FileItemFinder(itemIndex); + extensionTextField = new JTextField(6); + ItemFinder<String> itemFinder = new FileItemFinder(itemIndex, extensionTextField); itemFinderPanel = new ItemFinderPanel<String>(view, itemFinder); Dimension maximumSize = itemFinderPanel.getMaximumSize(); itemFinderPanel.setMaximumSize(new Dimension(500, maximumSize.height)); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -65,11 +65,11 @@ } String[] f = new String[files.size()]; files.toArray(f); - SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(f), this, true); + SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(f), this); } else { - SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(new String[0]), this, true); + SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(new String[0]), this); } long end = System.currentTimeMillis(); Log.log(Log.MESSAGE, this, "Indexation took ms:" + (end - start)); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -23,9 +23,7 @@ //{{{ Imports import com.kpouer.jedit.smartopen.FileIndex; -import com.kpouer.jedit.smartopen.SmartOpenPlugin; import org.gjt.sp.util.Task; -import projectviewer.vpt.VPTProject; //}}} /** @@ -46,6 +44,6 @@ public void _run() { FileProvider projectFileList = new ProjectFileList(itemFinder.getProject()); - itemFinder.addFiles(projectFileList, this, true); + itemFinder.addFiles(projectFileList, this); } //}}} } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2013-08-14 08:20:30 UTC (rev 23122) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2013-08-14 11:00:49 UTC (rev 23123) @@ -58,7 +58,7 @@ { FileProvider addedFileProvider = new VPTFileProvider(addedFiles.toArray(new VPTFile[addedFiles.size()])); - SmartOpenPlugin.itemFinder.addFiles(addedFileProvider, this, false); + SmartOpenPlugin.itemFinder.addFiles(addedFileProvider, this, true); } } //}}} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2013-10-17 08:26:00
|
Revision: 23246 http://jedit.svn.sourceforge.net/jedit/?rev=23246&view=rev Author: kpouer Date: 2013-10-17 08:25:54 +0000 (Thu, 17 Oct 2013) Log Message: ----------- use of new api of commoncontrols 1.7.2 Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2013-10-17 08:24:36 UTC (rev 23245) +++ plugins/SmartOpen/trunk/SmartOpen.props 2013-10-17 08:25:54 UTC (rev 23246) @@ -7,8 +7,8 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.7 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.6 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.4.4 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.7.2 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.5.2 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2013-10-17 08:24:36 UTC (rev 23245) +++ plugins/SmartOpen/trunk/ivy.xml 2013-10-17 08:25:54 UTC (rev 23246) @@ -4,8 +4,8 @@ <dependency org="org.apache.lucene" name="lucene-core" rev="4.2.1"/> <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.2.1"/> <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.2.1"/> - <dependency org="jedit-plugins" name="CommonControls" rev="1.5"/> - <dependency org="jedit-plugins" name="ProjectViewer" rev="3.4.4"/> + <dependency org="jedit-plugins" name="CommonControls" rev="1.7.2"/> + <dependency org="jedit-plugins" name="ProjectViewer" rev="3.5.2"/> <dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0"/> </dependencies> </ivy-module> \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-10-17 08:24:36 UTC (rev 23245) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2013-10-17 08:25:54 UTC (rev 23246) @@ -364,8 +364,8 @@ extensionPanel.add(new JLabel("extension:")); extensionPanel.add(extensionTextField); - Component label = itemFinderPanel.getComponent(0); - final Component searchField = itemFinderPanel.getComponent(1); + Component label = itemFinderPanel.getLabel(); + final Component searchField = itemFinderPanel.getSearchField(); topPanel.add(label); topPanel.add(extensionPanel, BorderLayout.EAST); itemFinderPanel.removeAll(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2014-02-28 09:38:42
|
Revision: 23423 http://sourceforge.net/p/jedit/svn/23423 Author: kpouer Date: 2014-02-28 09:38:38 +0000 (Fri, 28 Feb 2014) Log Message: ----------- SmartOpen was not working when the file was already opened (#3615259) Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2014-02-21 08:46:33 UTC (rev 23422) +++ plugins/SmartOpen/trunk/SmartOpen.props 2014-02-28 09:38:38 UTC (rev 23423) @@ -4,7 +4,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.0 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.1 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.7 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.7.2 Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2014-02-21 08:46:33 UTC (rev 23422) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2014-02-28 09:38:38 UTC (rev 23423) @@ -12,7 +12,7 @@ <tr> <td valign="top" style="font-weight:bold;font-size:x-large">SmartOpen</td> <td align="right" valign="top" style="font-size:small"> - <span style="font-weight:bold">Version 2.0 ($Date$) </span><br> + <span style="font-weight:bold">Version 2.1 ($Date$) </span><br> Matthieu Casanova <cho...@gm...> </td> </tr> @@ -45,6 +45,10 @@ <p>and any other combination</p> <h2>History</h2> <ul> + <li>2.1</li> + <ul> + <li>SmartOpen 2.0 doesn't jump to already open buffers (#3615259 - Matthieu Casanova)</li> + </ul> <li>2.0</li> <ul> <li>Use of frequency to sort search results (patch #3602213 - Ivan Baidakou)</li> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2014-02-21 08:46:33 UTC (rev 23422) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2014-02-28 09:38:38 UTC (rev 23423) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2012 Matthieu Casanova + * Copyright © 2011-2014 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -62,11 +62,12 @@ this.extensionTextField = extensionTextField; } //}}} + //{{{ setFileIndex() method public void setFileIndex(FileIndex itemFinder) { this.itemFinder.close(); this.itemFinder = itemFinder; - } + } //}}} //{{{ getLabel() method @Override @@ -145,8 +146,11 @@ } if (buffer == null) jEdit.openFile(jEdit.getActiveView().getEditPane(), path); + else + jEdit.getActiveView().getEditPane().setBuffer(buffer); } //}}} + //{{{ moveCaret() method private static void moveCaret(int _seletedLine, String[] split) { JEditTextArea textArea = jEdit.getActiveView().getEditPane().getTextArea(); @@ -172,7 +176,7 @@ } } textArea.setCaretPosition(caret); - } + } //}}} //{{{ getListCellRenderer() method @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2015-06-11 06:11:58
|
Revision: 23935 http://sourceforge.net/p/jedit/svn/23935 Author: kpouer Date: 2015-06-11 06:11:55 +0000 (Thu, 11 Jun 2015) Log Message: ----------- Fix an exception when starting the plugin if the toolbar is activated various fix switch to java 8 Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/build.xml plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/VPTFileProvider.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/SmartOpen.props 2015-06-11 06:11:55 UTC (rev 23935) @@ -5,7 +5,7 @@ plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.1 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.7 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.8 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.7.2 plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.5.2 Modified: plugins/SmartOpen/trunk/build.xml =================================================================== --- plugins/SmartOpen/trunk/build.xml 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/build.xml 2015-06-11 06:11:55 UTC (rev 23935) @@ -7,8 +7,8 @@ <property file="build.properties"/> <property name="dist.target" value="dist.complete"/> - <property name="compiler.source" value="1.7"/> - <property name="compiler.target" value="1.7"/> + <property name="compiler.source" value="1.8"/> + <property name="compiler.target" value="1.8"/> <property name="debug" value="on"/> <property name="jedit.plugins.dir" value="${install.dir}"/> <property name="src.dir" location="src" /> Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2015-06-11 06:11:55 UTC (rev 23935) @@ -12,7 +12,7 @@ <tr> <td valign="top" style="font-weight:bold;font-size:x-large">SmartOpen</td> <td align="right" valign="top" style="font-size:small"> - <span style="font-weight:bold">Version 2.1 ($Date$) </span><br> + <span style="font-weight:bold">Version 2.2 ($Date$) </span><br> Matthieu Casanova <cho...@gm...> </td> </tr> @@ -45,6 +45,11 @@ <p>and any other combination</p> <h2>History</h2> <ul> + <li>2.2</li> + <ul> + <li>The plugin now require Java 8</li> + <li>Fix an exception when starting the plugin if the toolbar is activated</li> + </ul> <li>2.1</li> <ul> <li>SmartOpen 2.0 doesn't jump to already open buffers (#1756 - Matthieu Casanova)</li> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2013 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -211,7 +211,7 @@ } catch (IOException e) { - return 0; + return 0L; } } return new FrequencySearch(reader).getFrequency(path); @@ -234,11 +234,8 @@ Pattern exclude = SmartOpenOptionPane.globToPattern(jEdit.getProperty("options.smartopen.ExcludeGlobs")); synchronized (LOCK) { - IndexWriter writer = null; - try + try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) { - writer = new IndexWriter(directory, indexWriterConfig); - Collection<String> knownFiles; if (append) { @@ -278,10 +275,6 @@ { Log.log(Log.ERROR, this, e); } - finally - { - IOUtilities.closeQuietly(writer); - } } try { @@ -327,14 +320,12 @@ public void removeFiles(FileProvider fileProvider, ProgressObserver observer) { long start = System.currentTimeMillis(); - IndexWriter writer = null; observer.setMaximum(fileProvider.size()); synchronized (LOCK) { - try + try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) { - writer = new IndexWriter(directory, indexWriterConfig); for (int i = 0; i < fileProvider.size(); i++) { String path = fileProvider.next(); @@ -347,10 +338,6 @@ { Log.log(Log.ERROR, this, e); } - finally - { - IOUtilities.closeQuietly(writer); - } } try { @@ -370,24 +357,18 @@ Term term = new Term("path",path); synchronized (LOCK) { - IndexWriter writer = null; - try + try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) { - writer = new IndexWriter(directory, indexWriterConfig); long frequency = getFrequency(path); - if (frequency == 0) + if (frequency == 0L) return; writer.deleteDocuments(term); - writer.addDocument(documentFactory.createDocument(path, frequency + 1)); + writer.addDocument(documentFactory.createDocument(path, frequency + 1L)); } catch (Exception e) { Log.log(Log.ERROR, this, e); } - finally - { - IOUtilities.closeQuietly(writer); - } try { initReader(); @@ -435,25 +416,19 @@ synchronized (LOCK) { - IndexWriter writer = null; - try + try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) { - writer = new IndexWriter(directory, indexWriterConfig); for (String path : existingFiles) { Term term = new Term("path", path); writer.deleteDocuments(term); - writer.addDocument(documentFactory.createDocument(path, 1)); + writer.addDocument(documentFactory.createDocument(path, 1L)); } } catch (Exception e) { Log.log(Log.ERROR, this, e); } - finally - { - IOUtilities.closeQuietly(writer); - } try { initReader(); @@ -472,8 +447,6 @@ Log.log(Log.MESSAGE, this, "Frequency cache resetted in "+(end - start) + "ms"); } - - private static class FrequencySearch { private final IndexSearcher searcher; Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileItemFinder.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -3,7 +3,7 @@ * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2014 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -51,7 +51,7 @@ private String position; - private JTextField extensionTextField; + private final JTextField extensionTextField; //{{{ FileItemFinder constructor public FileItemFinder(FileIndex itemFinder, JTextField extensionTextField) @@ -103,15 +103,15 @@ //{{{ selectionMade() method @Override - public void selectionMade(final String path) + public void selectionMade(String path) { Buffer buffer = jEdit.getBuffer(path); if (position != null) { - final String[] split = position.split(","); + String[] split = position.split(","); try { - final int _seletedLine = Integer.parseInt(split[0]) - 1; + int _seletedLine = Integer.parseInt(split[0]) - 1; if (buffer == null) { // not loaded Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileOpener.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,6 +1,6 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright © 2012 Alan Ezust @@ -22,12 +22,14 @@ package com.kpouer.jedit.smartopen; import org.gjt.sp.jedit.View; +import org.jedit.core.FileOpenerService; /** @author Alan Ezust */ -public class FileOpener extends org.jedit.core.FileOpenerService +public class FileOpener extends FileOpenerService { + @Override public void openFile(String fileName, View view) { SmartOpenPlugin.smartOpenDialog(view, fileName); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenOptionPane.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,6 +1,6 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright © 2011-2012 Matthieu Casanova Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2013 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -85,20 +85,13 @@ @Override public void start() { + itemFinder = new FileIndex(null); propertiesChanged(null); - itemFinder = new FileIndex(null); if (smartToolbar != null) smartToolbar.setFileIndex(itemFinder); EditBus.addToBus(this); - timer = new Timer(60000, new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - indexFiles(false); - } - }); + timer = new Timer(60000, e -> indexFiles(false)); timer.start(); } //}}} @@ -139,14 +132,10 @@ } } } - catch (NoSuchFieldException e) + catch (NoSuchFieldException | IllegalAccessException e) { Log.log(Log.ERROR, this, e); } - catch (IllegalAccessException e) - { - Log.log(Log.ERROR, this, e); - } JPanel customToolbar = new JPanel(new FlowLayout(FlowLayout.LEADING)); customToolbar.putClientProperty("Ancestor-SmartOpen", Boolean.TRUE); view.addToolBar(customToolbar); @@ -351,13 +340,13 @@ } //}}} //{{{ smartOpenDialog() methods - public static void smartOpenDialog(View view, final String fileName) + public static void smartOpenDialog(View view, String fileName) { if (extensionTextField == null) extensionTextField = new JTextField(6); ItemFinder<String> filetItemFinder = new FileItemFinder(itemFinder, extensionTextField); - final ItemFinderWindow<String> itemFinderWindow = new ItemFinderWindow<>(filetItemFinder); + ItemFinderWindow<String> itemFinderWindow = new ItemFinderWindow<>(filetItemFinder); ItemFinderPanel<?> itemFinderPanel = (ItemFinderPanel<?>) itemFinderWindow.getContentPane(); JPanel topPanel = new JPanel(new BorderLayout()); JPanel extensionPanel = new JPanel(); @@ -365,7 +354,7 @@ extensionPanel.add(extensionTextField); Component label = itemFinderPanel.getLabel(); - final Component searchField = itemFinderPanel.getSearchField(); + Component searchField = itemFinderPanel.getSearchField(); topPanel.add(label); topPanel.add(extensionPanel, BorderLayout.EAST); itemFinderPanel.removeAll(); @@ -375,14 +364,10 @@ itemFinderWindow.pack(); itemFinderWindow.setLocationRelativeTo(view); itemFinderWindow.setVisible(true); - EventQueue.invokeLater(new Runnable() + EventQueue.invokeLater(() -> { - @Override - public void run() - { - itemFinderWindow.getItemFinderPanel().setText(fileName); - searchField.requestFocus(); - } + itemFinderWindow.getItemFinderPanel().setText(fileName); + searchField.requestFocus(); }); } Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenToolbar.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2013 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -27,7 +27,6 @@ import javax.swing.JTextField; import javax.swing.JToolBar; -import common.gui.itemfinder.ItemFinder; import common.gui.itemfinder.ItemFinderPanel; import org.gjt.sp.jedit.View; //}}} @@ -38,13 +37,12 @@ public class SmartOpenToolbar extends JToolBar { private final ItemFinderPanel<String> itemFinderPanel; - private final JTextField extensionTextField; private final FileItemFinder itemFinder; //{{{ SmartOpenToolbar constructor public SmartOpenToolbar(View view, FileIndex itemIndex) { - extensionTextField = new JTextField(6); + JTextField extensionTextField = new JTextField(6); itemFinder = new FileItemFinder(itemIndex, extensionTextField); itemFinderPanel = new ItemFinderPanel<>(view, itemFinder); Dimension maximumSize = itemFinderPanel.getMaximumSize(); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileArrayProvider.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,6 +1,6 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright © 2011 Matthieu Casanova Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/FileProvider.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,8 +21,6 @@ package com.kpouer.jedit.smartopen.indexer; -import org.gjt.sp.jedit.io.VFSFile; - /** * @author Matthieu Casanova */ Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexFilesTask.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2012 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -27,7 +27,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashSet; -import java.util.Set; import java.util.StringTokenizer; import com.kpouer.jedit.smartopen.SmartOpenOptionPane; @@ -57,7 +56,7 @@ if (!property.isEmpty()) { StringTokenizer tokenizer = new StringTokenizer(property, File.pathSeparator); - Set<String> files = new HashSet<String>(); + Collection<String> files = new HashSet<String>(); while (tokenizer.hasMoreTokens()) { String s = tokenizer.nextToken(); Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectTask.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,6 +1,6 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright © 2011-2012 Matthieu Casanova Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexProjectUpdateTask.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2012 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -50,14 +50,12 @@ { if (removedFiles != null) { - FileProvider removedFileProvider = - new VPTFileProvider(removedFiles.toArray(new VPTFile[removedFiles.size()])); + FileProvider removedFileProvider = new VPTFileProvider(removedFiles); SmartOpenPlugin.itemFinder.removeFiles(removedFileProvider, this); } if (addedFiles != null) { - FileProvider addedFileProvider = - new VPTFileProvider(addedFiles.toArray(new VPTFile[addedFiles.size()])); + FileProvider addedFileProvider = new VPTFileProvider(addedFiles); SmartOpenPlugin.itemFinder.addFiles(addedFileProvider, this, true); } } //}}} Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/ProjectFileList.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2012 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -63,7 +63,7 @@ { long start = System.currentTimeMillis(); Collection<VPTNode> nodes = project.getOpenableNodes(); - files = new ArrayList<String>(nodes.size()); + files = new ArrayList<>(nodes.size()); for (VPTNode n : nodes) { if (n.isFile()) Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/VPTFileProvider.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/VPTFileProvider.java 2015-06-06 07:08:46 UTC (rev 23934) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/VPTFileProvider.java 2015-06-11 06:11:55 UTC (rev 23935) @@ -1,9 +1,9 @@ /* * jEdit - Programmer's Text Editor - * :tabSize=8:indentSize=8:noTabs=false: + * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011 Matthieu Casanova + * Copyright © 2011-2015 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,6 +21,8 @@ package com.kpouer.jedit.smartopen.indexer; +import java.util.Collection; + import projectviewer.vpt.VPTFile; /** @@ -31,9 +33,9 @@ private final VPTFile[] fileArray; private int index; - public VPTFileProvider(VPTFile[] files) + public VPTFileProvider(Collection<VPTFile> files) { - fileArray = files; + fileArray = files.toArray(new VPTFile[files.size()]); } @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2016-02-16 10:36:47
|
Revision: 24335 http://sourceforge.net/p/jedit/svn/24335 Author: kpouer Date: 2016-02-16 10:36:44 +0000 (Tue, 16 Feb 2016) Log Message: ----------- partial fix for bug #1846 still problems with sorting frequency Modified Paths: -------------- plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2016-02-15 12:50:34 UTC (rev 24334) +++ plugins/SmartOpen/trunk/ivy.xml 2016-02-16 10:36:44 UTC (rev 24335) @@ -1,9 +1,9 @@ <ivy-module version="2.0"> <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> - <dependency org="org.apache.lucene" name="lucene-core" rev="4.2.1"/> - <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="4.2.1"/> - <dependency org="org.apache.lucene" name="lucene-queryparser" rev="4.2.1"/> + <dependency org="org.apache.lucene" name="lucene-core" rev="5.2.0"/> + <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="5.2.0"/> + <dependency org="org.apache.lucene" name="lucene-queryparser" rev="5.2.0"/> <dependency org="jedit-plugins" name="CommonControls" rev="1.7.2"/> <dependency org="jedit-plugins" name="ProjectViewer" rev="3.5.2"/> <dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0"/> Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2016-02-15 12:50:34 UTC (rev 24334) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2016-02-16 10:36:44 UTC (rev 24335) @@ -3,7 +3,7 @@ * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2015 Matthieu Casanova + * Copyright © 2011-2016 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -37,34 +37,13 @@ import com.kpouer.jedit.smartopen.indexer.FileProvider; import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; -import org.apache.lucene.document.LongField; -import org.apache.lucene.document.StringField; -import org.apache.lucene.document.TextField; -import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexNotFoundException; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.index.IndexableField; -import org.apache.lucene.index.MultiFields; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanClause; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.IndexSearcher; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.ScoreDoc; -import org.apache.lucene.search.Sort; -import org.apache.lucene.search.SortField; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TopDocs; -import org.apache.lucene.search.WildcardQuery; +import org.apache.lucene.document.*; +import org.apache.lucene.index.*; +import org.apache.lucene.search.*; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Bits; -import org.apache.lucene.util.Version; import org.gjt.sp.jedit.EditPlugin; import org.gjt.sp.jedit.MiscUtilities; import org.gjt.sp.jedit.jEdit; @@ -89,18 +68,22 @@ private DirectoryReader reader; private final DocumentFactory documentFactory; - private final IndexWriterConfig indexWriterConfig; //{{{ FileIndex constructor public FileIndex(@Nullable VPTProject project) { this.project = project; directory = getDirectory(); - indexWriterConfig = new IndexWriterConfig(Version.LUCENE_42, new StandardAnalyzer(Version.LUCENE_42)); - indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); documentFactory = new DocumentFactory(); } //}}} + private IndexWriterConfig getIndexWriterConfig() + { + IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new StandardAnalyzer()); + indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); + return indexWriterConfig; + } + private void initReader() throws IOException { synchronized (LOCK) @@ -145,8 +128,6 @@ if (s == null || s.isEmpty()) return Collections.emptyList(); - SortField sortField = new SortField("frequency", SortField.Type.LONG,true); - Sort sort = new Sort(sortField); List<String> l = new ArrayList<>(); try { @@ -183,7 +164,11 @@ if (reader == null) initReader(); IndexSearcher searcher = new IndexSearcher(reader); - TopDocs search = searcher.search(query, 100, sort); + + SortField sortField = new SortedNumericSortField("frequency", SortField.Type.LONG, true); + Sort sort = new Sort(sortField); + + TopDocs search = searcher.search(query, 100, sort); ScoreDoc[] scoreDocs = search.scoreDocs; Set<String> fields = Collections.singleton("path"); for (ScoreDoc scoreDoc : scoreDocs) @@ -234,7 +219,7 @@ Pattern exclude = SmartOpenOptionPane.globToPattern(jEdit.getProperty("options.smartopen.ExcludeGlobs")); synchronized (LOCK) { - try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) + try(IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { Collection<String> knownFiles; if (append) @@ -324,7 +309,7 @@ synchronized (LOCK) { - try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) + try(IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { for (int i = 0; i < fileProvider.size(); i++) { @@ -357,7 +342,7 @@ Term term = new Term("path",path); synchronized (LOCK) { - try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) + try(IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { long frequency = getFrequency(path); if (frequency == 0L) @@ -396,7 +381,7 @@ File pluginHome = plugin.getPluginHome(); File index = new File(pluginHome, getIndexName()); index.mkdirs(); - tempDirectory = FSDirectory.open(index); + tempDirectory = FSDirectory.open(index.toPath()); } catch (IOException e) { @@ -416,7 +401,7 @@ synchronized (LOCK) { - try(IndexWriter writer = new IndexWriter(directory, indexWriterConfig)) + try(IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { for (String path : existingFiles) { @@ -481,7 +466,7 @@ private static class DocumentFactory { - private final LongField frequency; + private final NumericDocValuesField frequency; private final StringField name_caps; private final TextField name; private final StringField path; @@ -490,17 +475,17 @@ private DocumentFactory() { - document = new Document(); path = new StringField("path", "", Field.Store.YES); - document.add(path); - name = new TextField("name", "", Field.Store.NO); - document.add(name); - name_caps = new StringField("name_caps", "", Field.Store.NO); - document.add(name_caps); - fileExtension = new StringField("extension", "", Field.Store.NO); - document.add(fileExtension); - frequency = new LongField("frequency", 1L, Field.Store.YES); - document.add(frequency); + name = new TextField("name", "", Field.Store.NO); + name_caps = new StringField("name_caps", "", Field.Store.NO); + fileExtension = new StringField("extension", "", Field.Store.NO); + frequency = new NumericDocValuesField("frequency", 1L); + document = new Document(); + document.add(path); + document.add(name); + document.add(name_caps); + document.add(fileExtension); + document.add(frequency); } // createDocument() method Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2016-02-15 12:50:34 UTC (rev 24334) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2016-02-16 10:36:44 UTC (rev 24335) @@ -3,7 +3,7 @@ * :tabSize=4:indentSize=4:noTabs=false: * :folding=explicit:collapseFolds=1: * - * Copyright © 2011-2015 Matthieu Casanova + * Copyright © 2011-2016 Matthieu Casanova * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -26,8 +26,6 @@ import java.awt.Component; import java.awt.EventQueue; import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.lang.reflect.Field; import java.util.Collection; import java.util.HashMap; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kp...@us...> - 2018-01-07 15:40:18
|
Revision: 24812 http://sourceforge.net/p/jedit/svn/24812 Author: kpouer Date: 2018-01-07 15:40:15 +0000 (Sun, 07 Jan 2018) Log Message: ----------- Index recent files Modified Paths: -------------- plugins/SmartOpen/trunk/SmartOpen.props plugins/SmartOpen/trunk/docs/SmartOpen.html plugins/SmartOpen/trunk/ivy.xml plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java Added Paths: ----------- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexRecentFilesTask.java Modified: plugins/SmartOpen/trunk/SmartOpen.props =================================================================== --- plugins/SmartOpen/trunk/SmartOpen.props 2018-01-06 15:00:27 UTC (rev 24811) +++ plugins/SmartOpen/trunk/SmartOpen.props 2018-01-07 15:40:15 UTC (rev 24812) @@ -1,46 +1,46 @@ -# SmartOpen jEdit Plugin -# Author: Matthieu Casanova - -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.2 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.8 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.7.2 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.5.2 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.docs=docs/SmartOpen.html - - - -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.option-pane=smartopen -options.smartopen.label=SmartOpen -options.smartopen.code=new com.kpouer.jedit.smartopen.SmartOpenOptionPane(); - -plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.menu=smart-open \ - smart-open-dialog \ - - \ - smart-open-reindex - -smart-open-reindex.label=re-index -smart-open.label=Smart Open -smart-open-dialog.label=Smart Open Dialog - -options.smartopen.ExcludeDirectories=CVS .svn .git -options.smartopen.IncludeGlobs=* -options.smartopen.IncludeGlobs.label=Include only files matching: -options.smartopen.ExcludeGlobs=*.*~ *.bak *.bmp *.ico *.gif *.gif *.png *.jpg *.class *.exe *.obj *.jar *.zip *.7z *.rar *.tar *.gz *.tgz *.wav *.mp3 *.ogg -options.smartopen.ExcludeGlobs.label=... except files matching: - - -options.smartopen.paths.label=Choose paths to monitor: - -options.smartopen.projectindex=true -options.smartopen.projectindex.label=Index current project -options.smartopen.toolbar=false -options.smartopen.toolbar.label=Show smartopen in a toolbar - +# SmartOpen jEdit Plugin +# Author: Matthieu Casanova + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.activate=startup +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.name=SmartOpen +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.author=Matthieu Casanova +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.version=2.2 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.0=jdk 1.8 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.1=jedit 05.01.99.00 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.2=plugin CommonControlsPlugin 1.7.4 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.3=plugin projectviewer.ProjectPlugin 3.5.3 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.depend.4=plugin gatchan.jedit.lucene.LucenePlugin 4.0 +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.description=SmartOpen will help you open your files quickly +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.usePluginHome=true +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.docs=docs/SmartOpen.html + + + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.option-pane=smartopen +options.smartopen.label=SmartOpen +options.smartopen.code=new com.kpouer.jedit.smartopen.SmartOpenOptionPane(); + +plugin.com.kpouer.jedit.smartopen.SmartOpenPlugin.menu=smart-open \ + smart-open-dialog \ + - \ + smart-open-reindex + +smart-open-reindex.label=re-index +smart-open.label=Smart Open +smart-open-dialog.label=Smart Open Dialog + +options.smartopen.ExcludeDirectories=CVS .svn .git +options.smartopen.IncludeGlobs=* +options.smartopen.IncludeGlobs.label=Include only files matching: +options.smartopen.ExcludeGlobs=*.*~ *.bak *.bmp *.ico *.gif *.gif *.png *.jpg *.class *.exe *.obj *.jar *.zip *.7z *.rar *.tar *.gz *.tgz *.wav *.mp3 *.ogg +options.smartopen.ExcludeGlobs.label=... except files matching: + + +options.smartopen.paths.label=Choose paths to monitor: + +options.smartopen.projectindex=true +options.smartopen.projectindex.label=Index current project +options.smartopen.toolbar=false +options.smartopen.toolbar.label=Show smartopen in a toolbar + search-file.label=Search for a file : \ No newline at end of file Modified: plugins/SmartOpen/trunk/docs/SmartOpen.html =================================================================== --- plugins/SmartOpen/trunk/docs/SmartOpen.html 2018-01-06 15:00:27 UTC (rev 24811) +++ plugins/SmartOpen/trunk/docs/SmartOpen.html 2018-01-07 15:40:15 UTC (rev 24812) @@ -47,6 +47,7 @@ <ul> <li>2.2</li> <ul> + <li>Recent files are now indexed</li> <li>The plugin now require Java 8</li> <li>Fix an exception when starting the plugin if the toolbar is activated</li> </ul> Modified: plugins/SmartOpen/trunk/ivy.xml =================================================================== --- plugins/SmartOpen/trunk/ivy.xml 2018-01-06 15:00:27 UTC (rev 24811) +++ plugins/SmartOpen/trunk/ivy.xml 2018-01-07 15:40:15 UTC (rev 24812) @@ -2,10 +2,10 @@ <info organisation="jedit-plugins" module="Ancestor"/> <dependencies> <dependency org="org.apache.lucene" name="lucene-core" rev="5.2.0"/> - <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="5.2.0"/> - <dependency org="org.apache.lucene" name="lucene-queryparser" rev="5.2.0"/> - <dependency org="jedit-plugins" name="CommonControls" rev="1.7.2"/> - <dependency org="jedit-plugins" name="ProjectViewer" rev="3.5.2"/> - <dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0"/> + <dependency org="org.apache.lucene" name="lucene-analyzers-common" rev="5.2.0"/> + <dependency org="org.apache.lucene" name="lucene-queryparser" rev="5.2.0"/> + <dependency org="jedit-plugins" name="CommonControls" rev="1.7.4"/> + <dependency org="jedit-plugins" name="ProjectViewer" rev="3.5.3"/> + <dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0"/> </dependencies> </ivy-module> \ No newline at end of file Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2018-01-06 15:00:27 UTC (rev 24811) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/FileIndex.java 2018-01-07 15:40:15 UTC (rev 24812) @@ -31,6 +31,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.LongAdder; +import java.util.function.Consumer; import java.util.function.Function; import java.util.regex.Pattern; @@ -217,7 +219,7 @@ */ public void addFiles(FileProvider fileProvider, boolean append) { - long added = 0; + LongAdder added = new LongAdder(); long start = System.currentTimeMillis(); Pattern exclude = SmartOpenOptionPane.globToPattern(jEdit.getProperty("options.smartopen.ExcludeGlobs")); synchronized (LOCK) @@ -224,35 +226,20 @@ { try(IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { - Collection<String> knownFiles; - knownFiles = append ? Collections.emptyList() : Collections.synchronizedCollection(getExistingFiles()); + Collection<String> knownFiles = append ? Collections.emptyList() : Collections.synchronizedCollection(getExistingFiles()); + fileProvider.stream().parallel() + .filter(path -> !exclude.matcher(path).matches()) + .forEach(path -> { + if (knownFiles.contains(path)) + knownFiles.remove(path); + else + addDocument(writer, path); + added.increment(); + }); - added = fileProvider.stream().parallel() - .filter(path -> !exclude.matcher(path).matches()) - .map(new Function<String, Void>() - { - @Override - public Void apply(String path) - { - if (knownFiles.contains(path)) - knownFiles.remove(path); - else - addDocument(writer, path); - return null; - } - }).count(); - // iterate over documents that are still here but are not part of the project anymore - knownFiles.stream().parallel() - .map(new Function<String, Void>() - { - @Override - public Void apply(String remainingFile) - { - deleteDocument(writer, remainingFile); - return null; - } - }).count(); + knownFiles.parallelStream() + .forEach(remainingFile -> deleteDocument(writer, remainingFile)); } catch (IOException e) { @@ -268,7 +255,7 @@ Log.log(Log.ERROR, this, e); } long end = System.currentTimeMillis(); - Log.log(Log.MESSAGE, this, "Added " + added + " files in "+(end - start) + "ms"); + Log.log(Log.MESSAGE, this, "Added " + added.longValue() + " files in "+(end - start) + "ms"); } //}}} //{{{ addDocument() method @@ -351,16 +338,11 @@ try (IndexWriter writer = new IndexWriter(directory, getIndexWriterConfig())) { removed = fileProvider.stream().parallel() - .map(new Function<String, Void>() - { - @Override - public Void apply(String path) - { - observer.setStatus(path); - deleteDocument(writer, path); - return null; - } - }).count(); + .map((Function<String, Void>) path -> { + observer.setStatus(path); + deleteDocument(writer, path); + return null; + }).count(); } catch (IOException e) { Modified: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2018-01-06 15:00:27 UTC (rev 24811) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/SmartOpenPlugin.java 2018-01-07 15:40:15 UTC (rev 24812) @@ -1,444 +1,464 @@ -/* - * jEdit - Programmer's Text Editor - * :tabSize=4:indentSize=4:noTabs=false: - * :folding=explicit:collapseFolds=1: - * - * Copyright © 2011-2016 Matthieu Casanova - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -package com.kpouer.jedit.smartopen; - -//{{{ Imports -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.EventQueue; -import java.awt.FlowLayout; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.Timer; - -import com.kpouer.jedit.smartopen.indexer.IndexFilesTask; -import com.kpouer.jedit.smartopen.indexer.IndexProjectTask; -import com.kpouer.jedit.smartopen.indexer.IndexProjectUpdateTask; -import common.gui.itemfinder.ItemFinder; -import common.gui.itemfinder.ItemFinderPanel; -import common.gui.itemfinder.ItemFinderWindow; -import org.gjt.sp.jedit.EditBus; -import org.gjt.sp.jedit.EditPlugin; -import org.gjt.sp.jedit.View; -import org.gjt.sp.jedit.jEdit; -import org.gjt.sp.jedit.msg.BufferChanging; -import org.gjt.sp.jedit.msg.PropertiesChanged; -import org.gjt.sp.jedit.msg.ViewUpdate; -import org.gjt.sp.jedit.textarea.JEditTextArea; -import org.gjt.sp.util.Log; -import org.gjt.sp.util.Task; -import org.gjt.sp.util.ThreadUtilities; -import projectviewer.ProjectViewer; -import projectviewer.event.ProjectUpdate; -import projectviewer.event.ViewerUpdate; -import projectviewer.vpt.VPTFile; -import projectviewer.vpt.VPTNode; -import projectviewer.vpt.VPTProject; -//}}} - -/** - * @author Matthieu Casanova - */ -public class SmartOpenPlugin extends EditPlugin -{ - private static JTextField extensionTextField; - private final Map<View, SmartOpenToolbar> viewToolbar = new HashMap<>(); - private final Map<View, JComponent> topToolbars = new HashMap<>(); - - public static FileIndex itemFinder; - private Timer timer; - - private boolean toolbar; - private static SmartOpenToolbar smartToolbar; - - //{{{ start() method - @Override - public void start() - { - itemFinder = new FileIndex(null); - propertiesChanged(null); - if (smartToolbar != null) - smartToolbar.setFileIndex(itemFinder); - - EditBus.addToBus(this); - timer = new Timer(60000, e -> indexFiles(false)); - timer.start(); - } //}}} - - //{{{ addAncestorToolBar() method - private void addToolbar(View view) - { - if (viewToolbar.containsKey(view)) - return; - smartToolbar = new SmartOpenToolbar(view,itemFinder); - JComponent toolBar = getViewToolbar(view); - toolBar.add(smartToolbar); - toolBar.revalidate(); - topToolbars.put(view, toolBar); - viewToolbar.put(view, smartToolbar); - } //}}} - - //{{{ getViewToolbar() method - private JComponent getViewToolbar(View view) - { - try - { - Field topToolBarsField = view.getClass().getDeclaredField("topToolBars"); - topToolBarsField.setAccessible(true); - JPanel topToolBars = (JPanel) topToolBarsField.get(view); - Component[] components = topToolBars.getComponents(); - - if (components.length > 1) - { - for (int i = 1; i < components.length; i++) - { - Component component = components[i]; - if (component instanceof JComponent) - { - JComponent toolBar = (JComponent) component; - if (toolBar.getClientProperty("Ancestor-SmartOpen") == Boolean.TRUE) - return toolBar; - } - } - } - } - catch (NoSuchFieldException | IllegalAccessException e) - { - Log.log(Log.ERROR, this, e); - } - JPanel customToolbar = new JPanel(new FlowLayout(FlowLayout.LEADING)); - customToolbar.putClientProperty("Ancestor-SmartOpen", Boolean.TRUE); - view.addToolBar(customToolbar); - return customToolbar; - } //}}} - - //{{{ removeToolbar() method - private void removeToolbar(View view) - { - SmartOpenToolbar toolBar = viewToolbar.get(view); - if (toolBar == null) - return; - JComponent top = topToolbars.get(view); - top.remove(toolBar); - if (top.getComponentCount() == 0) - { - view.removeToolBar(top); - topToolbars.remove(view); - } - else - { - top.revalidate(); - } - viewToolbar.remove(view); - } //}}} - - public static void resetFrequency() - { - if (itemFinder == null) - return; - itemFinder.resetFrequency(); - } - - //{{{ indexFiles() methods - public static void indexFiles() - { - indexFiles(false); - } - - /** - * Index files. - * @param force true if you want to force project reindexation - */ - private static void indexFiles(boolean force) - { - if (jEdit.getBooleanProperty("options.smartopen.projectindex")) - { - if (force) - { - VPTProject activeProject = ProjectViewer.getActiveProject(jEdit.getActiveView()); - indexProject(activeProject); - } - } - else - { - if (itemFinder != null) - itemFinder.close(); - itemFinder = new FileIndex(null); - if (smartToolbar != null) - smartToolbar.setFileIndex(itemFinder); - Task task = new IndexFilesTask(); - ThreadUtilities.runInBackground(task); - } - } //}}} - - //{{{ indexProject() method - private static void indexProject(VPTProject activeProject) - { - if (Objects.equals(itemFinder.getProject(), activeProject)) - { - return; - } - - if (activeProject != null) - { - if (itemFinder != null) - itemFinder.close(); - itemFinder = new FileIndex(activeProject); - if (smartToolbar != null) - smartToolbar.setFileIndex(itemFinder); - - //reindex only for in-memory storage - //if(jEdit.getBooleanProperty("options.smartopen.memoryindex")){ - IndexProjectTask task = new IndexProjectTask(itemFinder); - ThreadUtilities.runInBackground(task); - //} - } - else - { - Task task = new IndexFilesTask(); - ThreadUtilities.runInBackground(task); - } - } //}}} - - //{{{ stop() method - @Override - public void stop() - { - extensionTextField = null; - timer.stop(); - EditBus.removeFromBus(this); - itemFinder = null; - removeToolbars(); - smartToolbar = null; - } //}}} - - //{{{ handleViewUpdate() method - @EditBus.EBHandler - public void handleViewUpdate(ViewUpdate viewUpdate) - { - if (viewUpdate.getWhat() == ViewUpdate.ACTIVATED) - { - VPTProject project = ProjectViewer.getActiveProject(viewUpdate.getView()); - if (!Objects.equals(project, itemFinder.getProject())) - indexProject(project); - } - if (toolbar) - { - if (viewUpdate.getWhat() == ViewUpdate.CREATED) - { - View view = viewUpdate.getView(); - addToolbar(view); - } - else if (viewUpdate.getWhat() == ViewUpdate.CLOSED) - { - viewToolbar.remove(viewUpdate.getView()); - } - } - } //}}} - - //{{{ propertiesChanged() method - @EditBus.EBHandler - public void propertiesChanged(PropertiesChanged propertiesChanged) - { - if (toolbar != jEdit.getBooleanProperty("options.smartopen.toolbar")) - { - toolbar = !toolbar; - if (toolbar) - addToolbars(); - else - removeToolbars(); - } - indexFiles(); - } //}}} - - //{{{ bufferChanging() method - @EditBus.EBHandler - public void bufferChanging(BufferChanging bc) - { - String path = bc.getBuffer().getPath(); - ThreadUtilities.runInBackground(new UpdateFrequencyTask(path)); - } //}}} - - //{{{ viewerUpdate() method - @EditBus.EBHandler - public void viewerUpdate(ViewerUpdate vu) - { - if (jEdit.getBooleanProperty("options.smartopen.projectindex")) - { - if (vu.getType() == ViewerUpdate.Type.PROJECT_LOADED) - { - VPTNode node = vu.getNode(); - VPTProject project = VPTNode.findProjectFor(node); - if (!Objects.equals(project, itemFinder.getProject())) - indexProject(project); - } - } - } //}}} - - //{{{ projectModified() method - @EditBus.EBHandler - public void projectModified(ProjectUpdate pu) - { - if (pu.getProject() == itemFinder.getProject()) - { - if (pu.getType() == ProjectUpdate.Type.FILES_CHANGED) - { - Collection<VPTFile> addedFiles = pu.getAddedFiles(); - Collection<VPTFile> removedFiles = pu.getRemovedFiles(); - IndexProjectUpdateTask task = new IndexProjectUpdateTask(addedFiles, removedFiles); - ThreadUtilities.runInBackground(task); - } - } - } //}}} - - //{{{ smartOpen() method - public static void smartOpen(View view) - { - SmartOpenPlugin instance = (SmartOpenPlugin) jEdit.getPlugin(SmartOpenPlugin.class.getName()); - SmartOpenToolbar smartOpenToolbar = instance.viewToolbar.get(view); - if (smartOpenToolbar != null) - { - ItemFinderPanel<String> itemFinderPanel = smartOpenToolbar.getItemFinderPanel(); - String wordAtCaret = getWordAtCaret(view); - itemFinderPanel.setText(wordAtCaret); - EventQueue.invokeLater(itemFinderPanel.requestFocusWorker); - } - else - { - smartOpenDialog(view); - } - } //}}} - - //{{{ smartOpenDialog() methods - public static void smartOpenDialog(View view, String fileName) - { - if (extensionTextField == null) - extensionTextField = new JTextField(6); - ItemFinder<String> filetItemFinder = new FileItemFinder(itemFinder, extensionTextField); - - ItemFinderWindow<String> itemFinderWindow = new ItemFinderWindow<>(filetItemFinder); - ItemFinderPanel<?> itemFinderPanel = (ItemFinderPanel<?>) itemFinderWindow.getContentPane(); - JPanel topPanel = new JPanel(new BorderLayout()); - JPanel extensionPanel = new JPanel(); - extensionPanel.add(new JLabel("extension:")); - extensionPanel.add(extensionTextField); - - Component label = itemFinderPanel.getLabel(); - Component searchField = itemFinderPanel.getSearchField(); - topPanel.add(label); - topPanel.add(extensionPanel, BorderLayout.EAST); - itemFinderPanel.removeAll(); - itemFinderPanel.add(topPanel, BorderLayout.NORTH); - - itemFinderPanel.add(searchField, BorderLayout.CENTER); - itemFinderWindow.pack(); - itemFinderWindow.setLocationRelativeTo(view); - itemFinderWindow.setVisible(true); - EventQueue.invokeLater(() -> - { - itemFinderWindow.getItemFinderPanel().setText(fileName); - searchField.requestFocus(); - }); - } - - public static void smartOpenDialog(View view) - { - String wordAtCaret = getWordAtCaret(view); - smartOpenDialog(view, wordAtCaret); - } //}}} - - //{{{ addToolbars() method - private void addToolbars() - { - View[] views = jEdit.getViews(); - for (int i = 0; i < views.length; i++) - { - addToolbar(views[i]); - } - } //}}} - - //{{{ removeToolbars() method - private void removeToolbars() - { - View[] views = jEdit.getViews(); - for (int i = 0; i < views.length; i++) - { - removeToolbar(views[i]); - } - } //}}} - - //{{{ getWordAtCaret() method - public static String getWordAtCaret(View view) - { - JEditTextArea ta = view.getTextArea(); - String selected = ta.getSelectedText(); - if (selected != null && !selected.isEmpty()) - { - if (selected.contains("\n")) - return null; - return selected; - } - int line = ta.getCaretLine(); - String text = ta.getLineText(line); - Pattern pat = Pattern.compile("\\w+"); - Matcher m = pat.matcher(text); - int end = -1; - int start = -1; - int offset = ta.getCaretPosition() - ta.getLineStartOffset(line); - while (end <= offset) - { - if (! m.find()) - return null; - end = m.end(); - start = m.start(); - selected = m.group(); - } - if (start > offset || selected == null || selected.isEmpty()) - return null; - return selected; - } //}}} - - private static class UpdateFrequencyTask extends Task - { - private final String path; - - private UpdateFrequencyTask(String path) - { - this.path = path; - } - - @Override - public void _run() - { - itemFinder.updateFrequency(path); - } - } -} +/* + * jEdit - Programmer's Text Editor + * :tabSize=4:indentSize=4:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2011-2017 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen; + +//{{{ Imports +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.EventQueue; +import java.awt.FlowLayout; +import java.lang.reflect.Field; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.Timer; + +import com.kpouer.jedit.smartopen.indexer.IndexFilesTask; +import com.kpouer.jedit.smartopen.indexer.IndexProjectTask; +import com.kpouer.jedit.smartopen.indexer.IndexProjectUpdateTask; +import com.kpouer.jedit.smartopen.indexer.IndexRecentFilesTask; +import common.gui.itemfinder.ItemFinder; +import common.gui.itemfinder.ItemFinderPanel; +import common.gui.itemfinder.ItemFinderWindow; +import org.gjt.sp.jedit.EditBus; +import org.gjt.sp.jedit.EditPlugin; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.BufferChanging; +import org.gjt.sp.jedit.msg.DynamicMenuChanged; +import org.gjt.sp.jedit.msg.PropertiesChanged; +import org.gjt.sp.jedit.msg.ViewUpdate; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.util.Log; +import org.gjt.sp.util.Task; +import org.gjt.sp.util.ThreadUtilities; +import projectviewer.ProjectViewer; +import projectviewer.event.ProjectUpdate; +import projectviewer.event.ViewerUpdate; +import projectviewer.vpt.VPTFile; +import projectviewer.vpt.VPTNode; +import projectviewer.vpt.VPTProject; +//}}} + +/** + * @author Matthieu Casanova + */ +public class SmartOpenPlugin extends EditPlugin +{ + private static JTextField extensionTextField; + private final Map<View, SmartOpenToolbar> viewToolbar = new HashMap<>(); + private final Map<View, JComponent> topToolbars = new HashMap<>(); + + public static FileIndex itemFinder; + private Timer timer; + + private boolean toolbar; + private static SmartOpenToolbar smartToolbar; + + //{{{ start() method + @Override + public void start() + { + itemFinder = new FileIndex(null); + propertiesChanged(null); + if (smartToolbar != null) + smartToolbar.setFileIndex(itemFinder); + + EditBus.addToBus(this); + timer = new Timer(60000, e -> indexFiles(false)); + timer.start(); + } //}}} + + //{{{ addAncestorToolBar() method + private void addToolbar(View view) + { + if (viewToolbar.containsKey(view)) + return; + smartToolbar = new SmartOpenToolbar(view,itemFinder); + JComponent toolBar = getViewToolbar(view); + toolBar.add(smartToolbar); + toolBar.revalidate(); + topToolbars.put(view, toolBar); + viewToolbar.put(view, smartToolbar); + } //}}} + + //{{{ getViewToolbar() method + private JComponent getViewToolbar(View view) + { + try + { + Field topToolBarsField = view.getClass().getDeclaredField("topToolBars"); + topToolBarsField.setAccessible(true); + JPanel topToolBars = (JPanel) topToolBarsField.get(view); + Component[] components = topToolBars.getComponents(); + + if (components.length > 1) + { + for (int i = 1; i < components.length; i++) + { + Component component = components[i]; + if (component instanceof JComponent) + { + JComponent toolBar = (JComponent) component; + if (toolBar.getClientProperty("Ancestor-SmartOpen") == Boolean.TRUE) + return toolBar; + } + } + } + } + catch (NoSuchFieldException | IllegalAccessException e) + { + Log.log(Log.ERROR, this, e); + } + JPanel customToolbar = new JPanel(new FlowLayout(FlowLayout.LEADING)); + customToolbar.putClientProperty("Ancestor-SmartOpen", Boolean.TRUE); + view.addToolBar(customToolbar); + return customToolbar; + } //}}} + + //{{{ removeToolbar() method + private void removeToolbar(View view) + { + SmartOpenToolbar toolBar = viewToolbar.get(view); + if (toolBar == null) + return; + JComponent top = topToolbars.get(view); + top.remove(toolBar); + if (top.getComponentCount() == 0) + { + view.removeToolBar(top); + topToolbars.remove(view); + } + else + { + top.revalidate(); + } + viewToolbar.remove(view); + } //}}} + + public static void resetFrequency() + { + if (itemFinder == null) + return; + itemFinder.resetFrequency(); + } + + //{{{ indexFiles() methods + public static void indexFiles() + { + indexFiles(false); + } + + /** + * Index files. + * @param force true if you want to force project reindexation + */ + private static void indexFiles(boolean force) + { + if (jEdit.getBooleanProperty("options.smartopen.projectindex")) + { + if (force) + { + VPTProject activeProject = ProjectViewer.getActiveProject(jEdit.getActiveView()); + indexProject(activeProject); + } + } + else + { + resetIndex(null); + Task task = new IndexFilesTask(); + ThreadUtilities.runInBackground(task); + } + indexRecent(); + } //}}} + + //{{{ indexRecent() method + private static void indexRecent() + { + Task indexRecent = new IndexRecentFilesTask(); + ThreadUtilities.runInBackground(indexRecent); + } //}}} + + //{{{ indexProject() method + private static void indexProject(VPTProject activeProject) + { + if (Objects.equals(itemFinder.getProject(), activeProject)) + { + return; + } + + if (activeProject != null) + { + resetIndex(activeProject); + + //reindex only for in-memory storage + //if(jEdit.getBooleanProperty("options.smartopen.memoryindex")){ + IndexProjectTask task = new IndexProjectTask(itemFinder); + ThreadUtilities.runInBackground(task); + //} + } + else + { + Task task = new IndexFilesTask(); + ThreadUtilities.runInBackground(task); + } + } //}}} + + //{{{ resetIndex() method + private static void resetIndex(VPTProject activeProject) { + itemFinder.close(); + itemFinder = new FileIndex(activeProject); + if (smartToolbar != null) + smartToolbar.setFileIndex(itemFinder); + } //}}} + + //{{{ stop() method + @Override + public void stop() + { + extensionTextField = null; + timer.stop(); + EditBus.removeFromBus(this); + itemFinder = null; + removeToolbars(); + smartToolbar = null; + } //}}} + + //{{{ handleViewUpdate() method + @EditBus.EBHandler + public void handleViewUpdate(ViewUpdate viewUpdate) + { + if (viewUpdate.getWhat() == ViewUpdate.ACTIVATED) + { + VPTProject project = ProjectViewer.getActiveProject(viewUpdate.getView()); + if (!Objects.equals(project, itemFinder.getProject())) + indexProject(project); + } + if (toolbar) + { + if (viewUpdate.getWhat() == ViewUpdate.CREATED) + { + View view = viewUpdate.getView(); + addToolbar(view); + } + else if (viewUpdate.getWhat() == ViewUpdate.CLOSED) + { + viewToolbar.remove(viewUpdate.getView()); + } + } + } //}}} + + //{{{ propertiesChanged() method + @EditBus.EBHandler + public void propertiesChanged(PropertiesChanged propertiesChanged) + { + if (toolbar != jEdit.getBooleanProperty("options.smartopen.toolbar")) + { + toolbar = !toolbar; + if (toolbar) + addToolbars(); + else + removeToolbars(); + } + indexFiles(); + } //}}} + + //{{{ dynamicMenuChanged() method + @EditBus.EBHandler + public void dynamicMenuChanged(DynamicMenuChanged dynamicMenuChanged) + { + if ("recent-files".equals(dynamicMenuChanged.getMenuName())) + { + indexFiles(); + } + } //}}} + + //{{{ bufferChanging() method + @EditBus.EBHandler + public void bufferChanging(BufferChanging bc) + { + String path = bc.getBuffer().getPath(); + ThreadUtilities.runInBackground(new UpdateFrequencyTask(path)); + } //}}} + + //{{{ viewerUpdate() method + @EditBus.EBHandler + public void viewerUpdate(ViewerUpdate vu) + { + if (jEdit.getBooleanProperty("options.smartopen.projectindex")) + { + if (vu.getType() == ViewerUpdate.Type.PROJECT_LOADED) + { + VPTNode node = vu.getNode(); + VPTProject project = VPTNode.findProjectFor(node); + if (!Objects.equals(project, itemFinder.getProject())) + indexProject(project); + } + } + } //}}} + + //{{{ projectModified() method + @EditBus.EBHandler + public void projectModified(ProjectUpdate pu) + { + if (pu.getProject() == itemFinder.getProject()) + { + if (pu.getType() == ProjectUpdate.Type.FILES_CHANGED) + { + Collection<VPTFile> addedFiles = pu.getAddedFiles(); + Collection<VPTFile> removedFiles = pu.getRemovedFiles(); + IndexProjectUpdateTask task = new IndexProjectUpdateTask(addedFiles, removedFiles); + ThreadUtilities.runInBackground(task); + } + } + } //}}} + + //{{{ smartOpen() method + public static void smartOpen(View view) + { + SmartOpenPlugin instance = (SmartOpenPlugin) jEdit.getPlugin(SmartOpenPlugin.class.getName()); + SmartOpenToolbar smartOpenToolbar = instance.viewToolbar.get(view); + if (smartOpenToolbar != null) + { + ItemFinderPanel<String> itemFinderPanel = smartOpenToolbar.getItemFinderPanel(); + String wordAtCaret = getWordAtCaret(view); + itemFinderPanel.setText(wordAtCaret); + EventQueue.invokeLater(itemFinderPanel.requestFocusWorker); + } + else + { + smartOpenDialog(view); + } + } //}}} + + //{{{ smartOpenDialog() methods + public static void smartOpenDialog(View view, String fileName) + { + if (extensionTextField == null) + extensionTextField = new JTextField(6); + ItemFinder<String> filetItemFinder = new FileItemFinder(itemFinder, extensionTextField); + + ItemFinderWindow<String> itemFinderWindow = new ItemFinderWindow<>(filetItemFinder); + ItemFinderPanel<?> itemFinderPanel = (ItemFinderPanel<?>) itemFinderWindow.getContentPane(); + JPanel topPanel = new JPanel(new BorderLayout()); + JPanel extensionPanel = new JPanel(); + extensionPanel.add(new JLabel("extension:")); + extensionPanel.add(extensionTextField); + + Component label = itemFinderPanel.getLabel(); + Component searchField = itemFinderPanel.getSearchField(); + topPanel.add(label); + topPanel.add(extensionPanel, BorderLayout.EAST); + itemFinderPanel.removeAll(); + itemFinderPanel.add(topPanel, BorderLayout.NORTH); + + itemFinderPanel.add(searchField, BorderLayout.CENTER); + itemFinderWindow.pack(); + itemFinderWindow.setLocationRelativeTo(view); + itemFinderWindow.setVisible(true); + EventQueue.invokeLater(() -> + { + itemFinderWindow.getItemFinderPanel().setText(fileName); + searchField.requestFocus(); + }); + } + + public static void smartOpenDialog(View view) + { + String wordAtCaret = getWordAtCaret(view); + smartOpenDialog(view, wordAtCaret); + } //}}} + + //{{{ addToolbars() method + private void addToolbars() + { + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + addToolbar(views[i]); + } + } //}}} + + //{{{ removeToolbars() method + private void removeToolbars() + { + View[] views = jEdit.getViews(); + for (int i = 0; i < views.length; i++) + { + removeToolbar(views[i]); + } + } //}}} + + //{{{ getWordAtCaret() method + public static String getWordAtCaret(View view) + { + JEditTextArea ta = view.getTextArea(); + String selected = ta.getSelectedText(); + if (selected != null && !selected.isEmpty()) + { + if (selected.contains("\n")) + return null; + return selected; + } + int line = ta.getCaretLine(); + String text = ta.getLineText(line); + Pattern pat = Pattern.compile("\\w+"); + Matcher m = pat.matcher(text); + int end = -1; + int start = -1; + int offset = ta.getCaretPosition() - ta.getLineStartOffset(line); + while (end <= offset) + { + if (! m.find()) + return null; + end = m.end(); + start = m.start(); + selected = m.group(); + } + if (start > offset || selected == null || selected.isEmpty()) + return null; + return selected; + } //}}} + + private static class UpdateFrequencyTask extends Task + { + private final String path; + + private UpdateFrequencyTask(String path) + { + this.path = path; + } + + @Override + public void _run() + { + itemFinder.updateFrequency(path); + } + } +} Added: plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexRecentFilesTask.java =================================================================== --- plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexRecentFilesTask.java (rev 0) +++ plugins/SmartOpen/trunk/src/com/kpouer/jedit/smartopen/indexer/IndexRecentFilesTask.java 2018-01-07 15:40:15 UTC (rev 24812) @@ -0,0 +1,45 @@ +/* + * jEdit - Programmer's Text Editor + * :tabSize=8:indentSize=8:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright © 2017 Matthieu Casanova + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.kpouer.jedit.smartopen.indexer; + +//{{{ Imports +import com.kpouer.jedit.smartopen.SmartOpenPlugin; +import org.gjt.sp.jedit.BufferHistory; +import org.gjt.sp.util.Task; +//}}} + +/** + * @author Matthieu Casanova + */ +public class IndexRecentFilesTask extends Task +{ + //{{{ _run() method + @Override + public void _run() + { + setStatus("Listing files"); + String[] recentFiles = BufferHistory.getHistory().stream() + .map(entry -> entry.path) + .toArray(String[]::new); + SmartOpenPlugin.itemFinder.addFiles(new FileArrayProvider(recentFiles)); + } //}}} +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |