# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /data/work/src/netbeans-cdev # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiHandler.java --- bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiHandler.java Base (BASE) +++ bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiHandler.java Locally Modified (Based On LOCAL) @@ -133,12 +133,16 @@ } List getQueryHandles(ProjectHandle project, Query... queries) { + return getQueryHandles(project.getKenaiProject().getName(), queries); + } + + List getQueryHandles(String projectId, Query... queries) { List ret = new ArrayList(); synchronized (queryHandles) { - Map m = queryHandles.get(project.getId()); + Map m = queryHandles.get(projectId); if (m == null) { m = new HashMap(); - queryHandles.put(project.getId(), m); + queryHandles.put(projectId, m); } else { List l = new ArrayList(); for (Query q : queries) { Index: bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiProjectImpl.java --- bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiProjectImpl.java Base (BASE) +++ bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/KenaiProjectImpl.java Locally Modified (Based On LOCAL) @@ -44,13 +44,16 @@ import java.lang.ref.WeakReference; import java.net.URL; +import java.util.List; import java.util.logging.Level; import org.netbeans.modules.bugtracking.kenai.spi.KenaiSupport.BugtrackingType; +import org.netbeans.modules.bugtracking.spi.Query; import org.netbeans.modules.kenai.api.KenaiException; import org.netbeans.modules.kenai.api.KenaiFeature; import org.netbeans.modules.kenai.api.KenaiProject; import org.netbeans.modules.kenai.api.KenaiService; import org.netbeans.modules.kenai.api.KenaiService.Type; +import org.netbeans.modules.kenai.ui.spi.QueryHandle; /** * @@ -157,4 +160,15 @@ } } + @Override + public void fireQueryActivated(Query query) { + KenaiHandler handler = Support.getInstance().getKenaiHandler(project.getKenai()); + if(handler == null) { + return; } + List queries = handler.getQueryHandles(project.getName(), query); + assert queries.size() == 1; + ((QueryHandleImpl) queries.get(0)).fireQueryActivated(); + } + +} Index: bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryAccessorImpl.java --- bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryAccessorImpl.java Base (BASE) +++ bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryAccessorImpl.java Locally Modified (Based On LOCAL) @@ -69,8 +69,6 @@ @org.openide.util.lookup.ServiceProvider(service=org.netbeans.modules.kenai.ui.spi.QueryAccessor.class) public class QueryAccessorImpl extends QueryAccessor { - private KenaiHandlers handlers = new KenaiHandlers(); - public QueryAccessorImpl() { } @@ -91,7 +89,7 @@ return null; } - KenaiHandler handler = handlers.get(projectHandle); + KenaiHandler handler = Support.getInstance().getKenaiHandler(projectHandle, this); handler.registerRepository(repo, projectHandle); Query allIssuesQuery = support.getAllIssuesQuery(repo); if(allIssuesQuery == null) { @@ -111,7 +109,7 @@ return getQueriesForNoRepo(projectHandle); } - KenaiHandler handler = handlers.get(projectHandle); + KenaiHandler handler = Support.getInstance().getKenaiHandler(projectHandle, this); // listen on repository events - e.g. a changed query list handler.registerRepository(repo, projectHandle); List queryHandles = handler.getQueryHandles(repo, projectHandle); @@ -146,7 +144,7 @@ } return null; } - return handlers.get(projectHandle).getFindIssuesAction(repo); + return Support.getInstance().getKenaiHandler(projectHandle, this).getFindIssuesAction(repo); } @Override @@ -160,7 +158,7 @@ } return null; } - return handlers.get(projectHandle).getCreateIssueAction(repo); + return Support.getInstance().getKenaiHandler(projectHandle, this).getCreateIssueAction(repo); } @Override @@ -209,21 +207,4 @@ } } - private class KenaiHandlers { - private Map instances = new HashMap(); - KenaiHandler get(ProjectHandle ph) { - return get(ph.getKenaiProject().getKenai()); } - KenaiHandler get(Kenai kenai) { - assert kenai != null; - String url = kenai.getUrl().toString(); - KenaiHandler ret = instances.get(url); - if(ret == null) { - ret = new KenaiHandler(QueryAccessorImpl.this, kenai); - instances.put(url, ret); - } - return ret; - } - } - -} Index: bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryHandleImpl.java --- bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryHandleImpl.java Base (BASE) +++ bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/QueryHandleImpl.java Locally Modified (Based On LOCAL) @@ -186,4 +186,8 @@ return true; } + void fireQueryActivated() { + changeSupport.firePropertyChange(QueryHandle.PROP_QUERY_ACTIVATED, null, null); } + +} Index: bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/Support.java --- bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/Support.java Base (BASE) +++ bugtracking.kenai/src/org/netbeans/modules/bugtracking/kenai/Support.java Locally Modified (Based On LOCAL) @@ -44,7 +44,10 @@ import java.lang.ref.WeakReference; import java.util.HashMap; +import java.util.Map; import java.util.logging.Logger; +import org.netbeans.modules.kenai.api.Kenai; +import org.netbeans.modules.kenai.ui.spi.ProjectHandle; import org.openide.util.RequestProcessor; /** @@ -56,6 +59,7 @@ private RequestProcessor rp; private static Support instance; + private Map handlers = new HashMap(); final HashMap> projectsCache = new HashMap>(); @@ -79,5 +83,21 @@ void post(Runnable r) { getRequestProcessor().post(r); } + KenaiHandler getKenaiHandler(ProjectHandle ph, QueryAccessorImpl accessor) { + return getKenaiHandler(ph.getKenaiProject().getKenai(), accessor); + } + KenaiHandler getKenaiHandler(Kenai kenai) { + return getKenaiHandler(kenai, null); + } + KenaiHandler getKenaiHandler(Kenai kenai, QueryAccessorImpl accessor) { + assert kenai != null; + String url = kenai.getUrl().toString(); + KenaiHandler ret = handlers.get(url); + if(ret == null && accessor != null) { + ret = new KenaiHandler(accessor, kenai); + handlers.put(url, ret); + } + return ret; + } } Index: bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiAccessor.java --- bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiAccessor.java Base (BASE) +++ bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiAccessor.java Locally Modified (Based On LOCAL) @@ -42,14 +42,23 @@ package org.netbeans.modules.bugtracking.kenai.spi; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.net.PasswordAuthentication; import java.util.Collection; +import java.util.logging.Level; import javax.swing.JLabel; +import org.netbeans.modules.bugtracking.BugtrackingManager; +import org.netbeans.modules.bugtracking.spi.Query; +import org.netbeans.modules.bugtracking.spi.Repository; import org.netbeans.modules.bugtracking.spi.RepositoryUser; +import org.netbeans.modules.bugtracking.ui.query.QueryTopComponent; import org.openide.nodes.Node; +import org.openide.windows.TopComponent; +import org.openide.windows.TopComponent.Registry; +import org.openide.windows.WindowManager; /** * Implementation provides access to kenai API @@ -60,6 +69,10 @@ public static final String PROP_LOGIN = "kenai.login.changed"; // NOI18N + public KenaiAccessor() { + WindowManager.getDefault().getRegistry().addPropertyChangeListener(new ActivatedTCListener()); + } + /** * Returns all projects from the kenai dashboard * @return @@ -173,4 +186,34 @@ */ public abstract void removePropertyChangeListener(PropertyChangeListener listener, String kenaiHostUrl); + private class ActivatedTCListener implements PropertyChangeListener { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Registry registry = WindowManager.getDefault().getRegistry(); + if (registry.PROP_ACTIVATED.equals(evt.getPropertyName())) { + TopComponent tc = registry.getActivated(); + BugtrackingManager.LOG.log(Level.FINER, "activated TC : {0}", tc); // NOI18N + if(tc instanceof QueryTopComponent) { + QueryTopComponent qtc = (QueryTopComponent) tc; + Query query = qtc.getQuery(); + if(query == null) { + return; } + Repository repository = query.getRepository(); + if(repository == null) { + return; + } + KenaiSupport support = repository.getLookup().lookup(KenaiSupport.class); + if(query != support.getAllIssuesQuery(repository)) { + return; + } + KenaiProject kenaiProject = repository.getLookup().lookup(KenaiProject.class); + if(kenaiProject == null) { + return; + } + kenaiProject.fireQueryActivated(query); + } + } + } + } +} Index: bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiProject.java --- bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiProject.java Base (BASE) +++ bugtracking/src/org/netbeans/modules/bugtracking/kenai/spi/KenaiProject.java Locally Modified (Based On LOCAL) @@ -44,6 +44,7 @@ import java.net.URL; import org.netbeans.modules.bugtracking.kenai.spi.KenaiSupport.BugtrackingType; +import org.netbeans.modules.bugtracking.spi.Query; /** * Wrapper for a KenaiProject instance returned by kenai @@ -82,5 +83,6 @@ */ public abstract String getDisplayName(); + public abstract void fireQueryActivated(Query query); } Index: bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java --- bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java Base (BASE) +++ bugtracking/src/org/netbeans/modules/bugtracking/ui/query/QueryTopComponent.java Locally Modified (Based On LOCAL) @@ -232,7 +232,7 @@ return openQueries; } - private Query getQuery() { + public Query getQuery() { return query; } Index: kenai.ui/src/org/netbeans/modules/kenai/ui/spi/QueryHandle.java --- kenai.ui/src/org/netbeans/modules/kenai/ui/spi/QueryHandle.java Base (BASE) +++ kenai.ui/src/org/netbeans/modules/kenai/ui/spi/QueryHandle.java Locally Modified (Based On LOCAL) @@ -21,6 +21,12 @@ public static final String PROP_QUERY_RESULT = "queryResult"; // NOI18N /** + * The name of property which is fired when the All Issues + * query Top Component for this project was activated. + */ + public static final String PROP_QUERY_ACTIVATED = "queryActivated"; // NOI18N + + /** * * @return Display name (the text before parenthesis in ui spec) */