|
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.