Package org.nimbustools.ctxbroker.blackboard

Source Code of org.nimbustools.ctxbroker.blackboard.Node

/*
* Copyright 1999-2008 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/

package org.nimbustools.ctxbroker.blackboard;

import org.nimbustools.ctxbroker.Identity;
import org.nimbustools.ctxbroker.ContextBrokerException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;

public class Node {

    // -------------------------------------------------------------------------
    // STATIC VARIABLES
    // -------------------------------------------------------------------------

    private static final Log logger =
            LogFactory.getLog(Blackboard.class.getName());

    private static final String[] EMPTY = new String[0];

    // -------------------------------------------------------------------------
    // INSTANCE VARIABLES
    // -------------------------------------------------------------------------

    private boolean allIdentitiesRequired = false;

    private final Integer id;

    private final CtxResult ctxResult = new CtxResult();

    // String interface name --> Identity
    private final Hashtable<String, Identity> identities =
            new Hashtable<String, Identity>();

    // RequiredRole objects
    private final Set<RequiredRole> requiredRoles =
            new HashSet<RequiredRole>();

    // data names
    private final String[] requiredDatas;

   
    // -------------------------------------------------------------------------
    // CONSTRUCTOR
    // -------------------------------------------------------------------------

    Node(Integer idnum, String[] requiredDatas) {
        if (idnum == null) {
            throw new IllegalArgumentException("idnum may not be null");
        }
        this.id = idnum;
        if (requiredDatas == null || requiredDatas.length == 0) {
            this.requiredDatas = EMPTY;
        } else {
            this.requiredDatas = requiredDatas;
        }
     }


    // -------------------------------------------------------------------------
    // INFORMATION
    // -------------------------------------------------------------------------

    Integer getId() {
        return id;
    }

    Enumeration<Identity> getIdentities() {
        return this.identities.elements();
    }

    Identity getParticularIdentity(String iface) {
        return this.identities.get(iface);
    }

    boolean isAllIdentitiesRequired() {
        return this.allIdentitiesRequired;
    }

    void setAllIdentitiesRequired(boolean allIdentitiesRequired) {
        this.allIdentitiesRequired = allIdentitiesRequired;
    }

    Iterator<RequiredRole> getRequiredRoles() {
        return this.requiredRoles.iterator();
    }

    String[] getRequiredDataNames() {
        return this.requiredDatas;
    }

    CtxResult getCtxResult() {
        return this.ctxResult;
    }
   
    // -------------------------------------------------------------------------
    // ADDITIONS
    // -------------------------------------------------------------------------

    void addIdentity(Identity id) throws ContextBrokerException {
        this.addIdentity(id.getIface(), id);
    }

    synchronized void addIdentity(String iface, Identity id)
            throws ContextBrokerException {

        Identity perhaps = this.identities.get(iface);
        if (perhaps != null) {
            // Binding does not allow different NIC names in the real id's,
            // it must be the provides section's fault
            throw new ContextBrokerException("Duplicate interface found." +
                    "  Identity names in provides section can not be" +
                    " duplicated. [[interface already added: interface = " +
                    iface + ", given Identity = " + id + ", Identity " +
                    "already given for this interface: " + perhaps + "]]");
        }
        this.identities.put(iface, id);
    }


    // Reference added to node specific list as well as Blackboard's list.
    // Only ever called under Blackboard's DB lock during node creation,
    // so no need to be synchronized (HashSet is not synchronized itself).
    // Returns true if this was a new role.
    boolean addRequiredRole(RequiredRole role) {

        if (role == null) {
            throw new IllegalArgumentException("role cannot be null");
        }

        boolean newRole = this.requiredRoles.add(role);

        if (logger.isTraceEnabled()) {
            String msg = "it was ";
            if (!newRole) {
                msg += "not ";
            }
            msg += "a new role.";
            logger.trace("Added RequiredRole " + role + " to Node #" +
                         this.id + "'s required role set: " + msg);
        }

        return newRole;
    }
}
TOP

Related Classes of org.nimbustools.ctxbroker.blackboard.Node

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.