|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2002 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.vcs.advanced.globalcommands;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.openide.nodes.Node;
import org.openide.util.NbBundle;
import org.openide.util.WeakListener;
import org.netbeans.api.vcs.commands.Command;
import org.netbeans.api.vcs.commands.CommandTask;
import org.netbeans.spi.vcs.VcsCommandsProvider;
import org.netbeans.modules.vcscore.commands.CommandProcessListener;
import org.netbeans.modules.vcscore.commands.CommandProcessor;
import org.netbeans.modules.vcscore.commands.CommandTaskInfo;
import org.netbeans.modules.vcscore.commands.VcsCommandExecutor;
import org.netbeans.modules.vcscore.runtime.RuntimeCommand;
import org.netbeans.modules.vcscore.runtime.RuntimeCommandTask;
import org.netbeans.modules.vcscore.runtime.RuntimeCommandsProvider;
import org.netbeans.modules.vcscore.runtime.RuntimeFolderNode;
/**
* The provider of VCS commands for the representation on the Runtime Tab.
*
* @author Martin Entlicher
*/
public class GlobalRuntimeCommandsProvider extends RuntimeCommandsProvider {
private RuntimeCommandsListener rcl;
private int numOfCommandsToKeep = RuntimeFolderNode.DEFAULT_NUM_OF_FINISHED_CMDS_TO_COLLECT;
//private List runningCommands = new ArrayList();//Collections.synchronizedList(new ArrayList());
private List finishedCommands = new ArrayList();//Collections.synchronizedList(new ArrayList());
private List commands = new ArrayList();
private Map runtimeCommandsForExecutors = new HashMap();//new Hashtable();
private Map finishedExecutorsForCommands = new HashMap();
private CommandProcessor processor = CommandProcessor.getInstance();
private boolean registered = false;
public GlobalRuntimeCommandsProvider() {
rcl = new RuntimeCommandsListener();
processor.addCommandProcessListener(rcl);
//processor.removeFinishedCommandsUponRequest(true, fs);
GlobalCommandsProvider provider = GlobalCommandsProvider.getInstance();
provider.addPropertyChangeListener(WeakListener.propertyChange(rcl, provider));
numOfCommandsToKeep = provider.getNumberOfFinishedCmdsToCollect();
}
protected Node createNodeDelegate() {
RuntimeFolderNode globalRuntime = new RuntimeFolderNode(new RuntimeFolderChildren(this));
globalRuntime.setName("Global Commands");
globalRuntime.setDisplayName(NbBundle.getMessage(GlobalRuntimeCommandsProvider.class, "LBL_GlobalRuntime"));
globalRuntime.setNumOfFinishedCmdsToCollect(numOfCommandsToKeep);
/*
java.beans.BeanDescriptor bd = getFsBeanDescriptor(fs);
if (bd != null) {
String str = (String)bd.getValue(org.netbeans.modules.vcscore.VcsFileSystem.VCS_FILESYSTEM_ICON_BASE);
if (str != null) {
fsRuntime.setIconBase(str);
}
}
*/
globalRuntime.addPropertyChangeListener(WeakListener.propertyChange(rcl, globalRuntime));
//attachListeners(fsRuntime);
return globalRuntime;
}
/*
private static java.beans.BeanDescriptor getFsBeanDescriptor(VcsFileSystem fs) {
java.beans.BeanInfo info;
try {
info = org.openide.util.Utilities.getBeanInfo(fs.getClass());
} catch (java.beans.IntrospectionException intrExc) {
return null;
}
if (info != null) {
return info.getBeanDescriptor();
}
return null;
}
*/
public RuntimeCommand[] children() {
return (RuntimeCommand[]) commands.toArray(new RuntimeCommand[commands.size()]);
}
public boolean cutCommandsToMaxToKeep() {
boolean cutted = false;
//ArrayList finishedToRemove = new ArrayList();
synchronized (this) {
int current = commands.size();
while (current > numOfCommandsToKeep && finishedCommands.size() > 0) {
RuntimeCommand cmd = (RuntimeCommand) finishedCommands.remove(0);
commands.remove(cmd);
CommandTaskInfo vce = (CommandTaskInfo) finishedExecutorsForCommands.remove(cmd);
//finishedToRemove.add(vce);
current--;
cutted = true;
}
}
/*
for (Iterator it = finishedToRemove.iterator(); it.hasNext(); ) {
VcsCommandExecutor vce = (VcsCommandExecutor) it.next();
processor.removeFinishedCommand(vce);
}
*/
return cutted;
}
protected void notifyRemoved() {
processor.removeCommandProcessListener(rcl);
//processor.removeFinishedCommandsUponRequest(false, fs);
}
private class RuntimeCommandsListener extends Object implements CommandProcessListener, PropertyChangeListener {
/**
* Get the commands provider. The listener gets events only from commands,
* that are instances of ProvidedCommand and their provider equals to this
* provider.
*/
public VcsCommandsProvider getProvider() {
return GlobalCommandsProvider.getInstance();
}
/**
* Called when the command is just to be preprocessed.
*/
public void commandPreprocessing(Command command) {
/* Do not create runtime commands for command customization by default.
VcsRuntimeCommand cmd = new VcsRuntimeCommand(command);
cmd.setState(RuntimeCommand.STATE_WAITING);
synchronized (VcsRuntimeCommandsProvider.this) {
commands.add(cmd);
runtimeCommandsForExecutors.put(command, cmd);
cutCommandsToMaxToKeep();
}
firePropertyChange(PROP_CHILDREN, null, null);
*/
}
/**
* Called when the preprocessing of the command finished.
* @param cmd The command which was preprocessed.
* @param status The status of preprocessing. If false, the command is not executed.
*/
public void commandPreprocessed(Command command, boolean status) {
/*
if (status == false) {
VcsRuntimeCommand cmd = (VcsRuntimeCommand) runtimeCommandsForExecutors.get(command);
synchronized (VcsRuntimeCommandsProvider.this) {
commands.remove(cmd);
runtimeCommandsForExecutors.remove(command);
}
firePropertyChange(PROP_CHILDREN, null, null);
}
*/
}
/**
* This method is called when the command is just to be started.
*/
public void commandStarting(CommandTaskInfo info) {
if (!registered) {
register();
registered = true;
}
RuntimeCommand cmd = (RuntimeCommand) runtimeCommandsForExecutors.get(info);
if (cmd == null) {
CommandTask task = info.getTask();
if (!(task instanceof RuntimeCommandTask)) return ;
cmd = ((RuntimeCommandTask) task).getRuntimeCommand(info);
if (cmd == null) return ;
//cmd = new VcsRuntimeCommand(info);
synchronized (GlobalRuntimeCommandsProvider.this) {
commands.add(cmd);
runtimeCommandsForExecutors.put(info, cmd);
cutCommandsToMaxToKeep();
}
firePropertyChange(PROP_CHILDREN, null, null);
}
cmd.setState(RuntimeCommand.STATE_RUNNING);
}
/**
* This method is called when the command is done.
*/
public void commandDone(CommandTaskInfo info) {
RuntimeCommand cmd = (RuntimeCommand) runtimeCommandsForExecutors.get(info);
if (cmd != null) {
synchronized (GlobalRuntimeCommandsProvider.this) {
//commands.remove(cmd);
runtimeCommandsForExecutors.remove(info);
finishedExecutorsForCommands.put(cmd, info);
finishedCommands.add(cmd);
cutCommandsToMaxToKeep();
}
cmd.setState(RuntimeCommand.STATE_DONE);
firePropertyChange(PROP_CHILDREN, null, null);
}
}
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
Object source = propertyChangeEvent.getSource();
String propertyName = propertyChangeEvent.getPropertyName();
if (source == GlobalCommandsProvider.getInstance()) { // The change is comming from the global provider
if (RuntimeFolderNode.PROPERTY_NUM_OF_FINISHED_CMDS_TO_COLLECT.equals(propertyName)) {
int newNumOfCommandsToKeep = GlobalCommandsProvider.getInstance().getNumberOfFinishedCmdsToCollect();
//System.out.println("newNumOfCommandsToKeep = "+newNumOfCommandsToKeep+", numOfCommandsToKeep = "+numOfCommandsToKeep);
if (numOfCommandsToKeep == newNumOfCommandsToKeep) return ;
numOfCommandsToKeep = newNumOfCommandsToKeep;
RuntimeFolderNode node = (RuntimeFolderNode) getExistingNodeDelegate();
if (node != null) {
node.setNumOfFinishedCmdsToCollect(numOfCommandsToKeep);
}
if (cutCommandsToMaxToKeep()) firePropertyChange(PROP_CHILDREN, null, null);
}/* else if (VcsFileSystem.PROP_DISPLAY_NAME.equals(propertyName)) {
RuntimeFolderNode node = (RuntimeFolderNode) getExistingNodeDelegate();
if (node != null) {
node.setDisplayName(fs.getDisplayName());
}
}*/
} else if (source instanceof RuntimeFolderNode) { // The change is comming from the Node
RuntimeFolderNode node = (RuntimeFolderNode) source;
if (RuntimeFolderNode.PROPERTY_NUM_OF_FINISHED_CMDS_TO_COLLECT.equals(propertyName)) {
int newNumOfCommandsToKeep = node.getNumOfFinishedCmdsToCollect();
//System.out.println("newNumOfCommandsToKeep = "+newNumOfCommandsToKeep+", numOfCommandsToKeep = "+numOfCommandsToKeep);
if (numOfCommandsToKeep == newNumOfCommandsToKeep) return ;
numOfCommandsToKeep = newNumOfCommandsToKeep;
GlobalCommandsProvider.getInstance().setNumberOfFinishedCmdsToCollect(numOfCommandsToKeep);
if (cutCommandsToMaxToKeep()) firePropertyChange(PROP_CHILDREN, null, null);
}
}
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.