All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.coos.messaging.Plugin Maven / Gradle / Ivy

/**
 * COOS - Connected Objects Operating System (www.connectedobjects.org).
 *
 * Copyright (C) 2009 Telenor ASA and Tellu AS. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 *
 * You may also contact one of the following for additional information:
 * Telenor ASA, Snaroyveien 30, N-1331 Fornebu, Norway (www.telenor.no)
 * Tellu AS, Hagalokkveien 13, N-1383 Asker, Norway (www.tellu.no)
 */
package org.coos.messaging;

import java.util.Vector;

import org.coos.messaging.jmx.ManagedObject;
import org.coos.messaging.jmx.ManagementFactory;

/**
 * The Plugin, A holder class for all information associated with a plugin.
 * 
 * @author Knut Eilif Husa, Tellu AS 
 */
public class Plugin {

	public static final int DEFAULT_STARTLEVEL = 10;

	private Endpoint endpoint;
	private Vector channels = new Vector();
	private int startLevel = DEFAULT_STARTLEVEL;
	
	/*
	 * The object used for Monitoring and Management of the COOS instance (i.e. using JMX)
	 */
	private ManagedObject managedObject = null;

	public String getName() {
		return endpoint.getName();
	}

	public Endpoint getEndpoint() {
		return endpoint;
	}

	public void setEndpoint(Endpoint endpoint) {
		this.endpoint = endpoint;
		endpoint.setPlugin(this);
	}

	public String getEndpointState() {
		if (endpoint != null) {
			return endpoint.getEndpointState();
		}
		return null;
	}

	public int getStartLevel() {
		return startLevel;
	}

	public void setStartLevel(int startLevel) {
		this.startLevel = startLevel;
	}

	public void addChannel(Channel channel) {
		channels.addElement(channel);
	}

	public Vector getChannels() {
		return channels;
	}

	public void removeChannel(Channel channel) {
		channels.removeElement(channel);
	}

	public void connect() throws ConnectingException {
		for (int i = 0; i < channels.size(); i++) {
			Channel channel = (Channel) channels.elementAt(i);
			channel.connect(endpoint);
		}
        /*
         * Register plugin for management.
         */
		managedObject = ManagementFactory.getPlatformManagementService().registerPlugin(this);
	}

	public void connect(Channel channel) throws ConnectingException {
		channel.connect(endpoint);
	}

	public void disconnect(Channel channel) {
		channel.disconnect();
	}

	public void disconnect() {
		for (int i = 0; i < channels.size(); i++) {
			Channel channel = (Channel) channels.elementAt(i);
			channel.disconnect();
		}
		
		/*
		 * Unregister plugin from management.
		 */
		if (managedObject != null) {
			ManagementFactory.getPlatformManagementService().unregister(managedObject);
		}
	}

	public boolean isConnected() {
		boolean connected = true;
		for (int i = 0; i < channels.size(); i++) {
			Channel channel = (Channel) channels.elementAt(i);
			connected = connected && channel.isConnected();
		}

		return connected;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy