package org.nbgit.ui.status;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingUtilities;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectInformation;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.ui.OpenProjects;
import org.netbeans.modules.versioning.spi.VCSContext;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
import org.openide.util.actions.SystemAction;
/**
* Open the Versioning status view for all projects.
*
* @author Maros Sandor
*/
public class ShowAllChangesAction extends SystemAction {
public ShowAllChangesAction() {
}
public String getName() {
return NbBundle.getMessage(ShowAllChangesAction.class, "CTL_MenuItem_ShowAllChanges_Label"); // NOI18N
}
public HelpCtx getHelpCtx() {
return new HelpCtx(getClass());
}
public void actionPerformed(ActionEvent e) {
RequestProcessor.getDefault().post(new Runnable() {
public void run() {
async();
}
});
}
private void async() {
try {
setEnabled(false);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GitVersioningTopComponent stc = GitVersioningTopComponent.findInstance();
stc.setContext(null);
stc.open();
}
});
Project[] projects = OpenProjects.getDefault().getOpenProjects();
List<Node> allNodes = new ArrayList<Node>();
for (int i = 0; i < projects.length; i++) {
AbstractNode node = new AbstractNode(new Children.Array(), projects[i].getLookup());
allNodes.add(node);
}
final VCSContext ctx = VCSContext.forNodes(allNodes.toArray(new Node[allNodes.size()]));
final String title;
if (projects.length == 1) {
Project project = projects[0];
ProjectInformation pinfo = ProjectUtils.getInformation(project);
title = pinfo.getDisplayName();
} else {
title = NbBundle.getMessage(ShowAllChangesAction.class, "CTL_ShowAllChanges_WindowTitle", Integer.toString(projects.length)); // NOI18N
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final GitVersioningTopComponent stc = GitVersioningTopComponent.findInstance();
stc.setContentTitle(title);
stc.setContext(ctx);
stc.open();
stc.requestActive();
if (shouldPostRefresh()) {
stc.performRefreshAction();
}
}
});
} finally {
setEnabled(true);
}
}
protected boolean shouldPostRefresh() {
return true;
}
}