|
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.cvsclient;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//import java.beans.PropertyChangeSupport;
//import java.lang.ref.Reference;
//import java.lang.ref.WeakReference;
//import org.openide.filesystems.FileSystem;
import org.openide.nodes.Node;
import org.openide.nodes.Index;
import org.openide.util.WeakListener;
/*
import org.netbeans.modules.vcscore.VcsFileSystem;
import org.netbeans.modules.vcscore.commands.CommandListener;
import org.netbeans.modules.vcscore.commands.CommandsPool;
import org.netbeans.modules.vcscore.commands.VcsCommandExecutor;
*/
import org.netbeans.modules.vcscore.runtime.*;
/**
* The provider of JavaCvs commands for the representation on the Runtime Tab.
*
* @author Martin Entlicher
*/
public class JavaCvsRuntimeCommandsProvider extends RuntimeCommandsProvider {
private NbJavaCvsFileSystem fs;
private RuntimeCommandsListener rcl = new RuntimeCommandsListener();
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 CommandsPool cpool = CommandsPool.getInstance();
public JavaCvsRuntimeCommandsProvider(NbJavaCvsFileSystem fs) {
this.fs = fs;
//cpool.addCommandListener(rcl);
if (fs == null) {
numOfCommandsToKeep = RuntimeFolderNode.DEFAULT_NUM_OF_FINISHED_CMDS_TO_COLLECT;
register();
} else {
fs.addPropertyChangeListener(WeakListener.propertyChange(rcl, fs));
numOfCommandsToKeep = fs.getNumberOfFinishedCmdsToCollect();
}
}
protected Node createNodeDelegate() {
RuntimeFolderNode fsRuntime = new RuntimeFolderNode(new RuntimeFolderChildren(this));
if (fs == null) {
String indName = org.openide.util.NbBundle.getBundle(JavaCvsRuntimeCommandsProvider.class).getString("FsCommandFactory.IndependantRuntimeFolder");
fsRuntime.setName(indName);
fsRuntime.setDisplayName(indName);
fsRuntime.setIconBase("org/netbeans/modules/cvsclient/JavaCvsFileSystemIcon"); //NOI18N
} else {
fsRuntime.setName(fs.getSystemName());
fsRuntime.setDisplayName(fs.getDisplayName());
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);
}
}
}
fsRuntime.setNumOfFinishedCmdsToCollect(numOfCommandsToKeep);
fsRuntime.addPropertyChangeListener(WeakListener.propertyChange(rcl, fsRuntime));
//attachListeners(fsRuntime);
return fsRuntime;
}
private static java.beans.BeanDescriptor getFsBeanDescriptor(NbJavaCvsFileSystem 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() {
//ArrayList children = new ArrayList(commands);
return (RuntimeCommand[]) commands.toArray(new RuntimeCommand[commands.size()]);
}
public synchronized boolean cutCommandsToMaxToKeep() {
boolean cutted = false;
int current = commands.size();// + finishedCommands.size();
while (current > numOfCommandsToKeep && finishedCommands.size() > 0) {
commands.remove(finishedCommands.remove(0));
current--;
cutted = true;
}
return cutted;
}
public void updateCommand(RuntimeCommand cmd) {
if (!commands.contains(cmd)) {
commands.add(cmd);
}
if (cmd.getState() == RuntimeCommand.STATE_DONE || cmd.getState() == RuntimeCommand.STATE_CANCELLED) {
if (!finishedCommands.contains(cmd)) finishedCommands.add(cmd);
}
cutCommandsToMaxToKeep();
firePropertyChange(PROP_CHILDREN, null, null);
}
private class RuntimeCommandsListener extends Object implements PropertyChangeListener {
/**
* Called when the command is just to be preprocessed.
*
public void commandPreprocessing(VcsCommandExecutor vce) {
VcsFileSystem fs = cpool.getFileSystemForExecutor(vce);
if (VcsRuntimeCommandsProvider.this.fs == fs ||
VcsRuntimeCommandsProvider.this.equals(RuntimeCommandsProvider.findProvider(fs))) {
VcsRuntimeCommand cmd = new VcsRuntimeCommand(vce);
cmd.setState(RuntimeCommand.STATE_WAITING);
synchronized (VcsRuntimeCommandsProvider.this) {
commands.add(cmd);
runtimeCommandsForExecutors.put(vce, cmd);
cutCommandsToMaxToKeep();
}
firePropertyChange(PROP_CHILDREN, null, null);
}
}
/**
* This method is called when the command is just to be started.
*
public void commandStarted(VcsCommandExecutor vce) {
VcsFileSystem fs = cpool.getFileSystemForExecutor(vce);
if (VcsRuntimeCommandsProvider.this.fs == fs ||
VcsRuntimeCommandsProvider.this.equals(RuntimeCommandsProvider.findProvider(fs))) {
VcsRuntimeCommand cmd = (VcsRuntimeCommand) runtimeCommandsForExecutors.get(vce);
if (cmd == null) {
cmd = new VcsRuntimeCommand(vce);
synchronized (VcsRuntimeCommandsProvider.this) {
commands.add(cmd);
runtimeCommandsForExecutors.put(vce, cmd);
cutCommandsToMaxToKeep();
}
firePropertyChange(PROP_CHILDREN, null, null);
}
cmd.setState(RuntimeCommand.STATE_RUNNING);
}
}
/**
* This method is called when the command is done.
*
public void commandDone(VcsCommandExecutor vce) {
VcsFileSystem fs = cpool.getFileSystemForExecutor(vce);
if (VcsRuntimeCommandsProvider.this.fs == fs ||
VcsRuntimeCommandsProvider.this.equals(RuntimeCommandsProvider.findProvider(fs))) {
RuntimeCommand cmd = (RuntimeCommand) runtimeCommandsForExecutors.get(vce);
if (cmd != null) {
synchronized (VcsRuntimeCommandsProvider.this) {
//commands.remove(cmd);
runtimeCommandsForExecutors.remove(vce);
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 == fs) { // The change is comming from the FileSystem
if (RuntimeFolderNode.PROPERTY_NUM_OF_FINISHED_CMDS_TO_COLLECT.equals(propertyName)) {
int newNumOfCommandsToKeep = fs.getNumberOfFinishedCmdsToCollect();
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 (NbJavaCvsFileSystem.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();
if (numOfCommandsToKeep == newNumOfCommandsToKeep) return ;
numOfCommandsToKeep = newNumOfCommandsToKeep;
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.