logger.debug("Got " + threatDescriptions.size() + " ThreatDescriptions from the blackboard.");
if (logger.isDebugEnabled()) logger.debug("Got " + threatDescriptions.size() + " ThreatDescriptions from the blackboard.");
    public void execute() {                if (!haveServices) {             getServices();            if (!haveServices) {                 //throw some nasty error...                Logger logger = Logging.getLogger(this.getClass().getName());                logger.error("Could not get needed services!!");                return;             }         }        //Update the threatDescriptions collection if new ones were added        if (threatDescriptionsSub.getAddedCollection().size() > 0) {            if (threatDescriptions != null && threatDescriptions.size() > 0) {                logger.warn("Read in threat descriptions on subsequent execute() invocations. They should have been all seen at once!");                //Should not happen. If it did, the assets already seen would not be compared against these threats until                //they changed in some way. Since the threat descriptions are published in a setupSubscription, this should not occur.            }            threatDescriptions = threatDescriptionsSub.getCollection();            logger.debug("Got " + threatDescriptions.size() + " ThreatDescriptions from the blackboard.");        }                //Get the asset manager plugin        Collection assetMgrs = assetManagerSub.getAddedCollection();        Iterator it = assetMgrs.iterator();         if (it.hasNext() && !ADDED_ASSET_LISTENER ) { // *** This should only execute once.            AssetManagerPlugin aMgr = (AssetManagerPlugin)it.next();            logger.info("Found AssetManagerPlugin");                        //Subscribe to the AssetMgrPlugin's change listener.             AssetChangeEvent currentAssets[] = aMgr.addChangeListener(myChangeListener);                        synchronized(changesToProcess) {                for (int i=0; i<currentAssets.length; i++) {                    changesToProcess.addElement(currentAssets[i]);                }            }            ADDED_ASSET_LISTENER = true;                    }                 evaluateThreatAssetMembership();                            }