/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.status; /** * The CloudConnectionStatusService is responsible for updating the user on the connection status of the framework. * Default implementation will link the status to a LED or to the log file.<br> * The service stores an internal list of {@link CloudConnectionStatusComponent} which represents all the elements * that are responsible of notifying the connection status.<br> * <br> * * Each {@link CloudConnectionStatusComponent} is assigned with a priority and a status ( * {@link CloudConnectionStatusEnum}). * The Service shows the status of the highest priority CloudConnectionStatusComponent registered in the list.<br> * <br> * In order to use the service, a class must implement the {@link CloudConnectionStatusComponent} interface and register * itself * in the Service component registry using the {@code register(CloudConnectionStatusComponent c)} method.<br> * <br> * Unregistering the class from the Service registry will trigger a status switch to the previous priority found in the * Service * component registry.<br> * <br> * A call to {@code updateStatus(...)} will trigger an internal status change for the relevant component, and the * Service will * trigger a status change for the highest priority component only if needed.<br> * <br> * <h2>Default implementation</h2> * The default implementation is a Factory Component. A new istance of a {@link CloudConnectionStatusService} will be * instantiated * for each communication stack. * The default CloudConnectionStatusService will have its <b>kura.service.pid</b> equals to * <b>org.eclipse.kura.status.CloudConnectionStatusService</b><br> * Subsequent Communication Stacks will instantiate a relevant CloudConnectionStatusService with the appropriate * postfix.<br> * e.g. The CloudConnectionStatusService for a Communication Stack generated by a * org.eclipse.kura.cloud.CloudService-foo will have its * kura.service.pid equals to org.eclipse.kura.status.CloudConnectionStatusService-foo<br> * <br> * Configuration for a specific CloudConnectionStatusService can be found in the kura.properties file.<br> * The configuration is defined by a key value pair, where key is a URL-like string defining the service, and value is * the entity responsible * to show the Cloud Connection Status. * It can be either a LED, the system log or none. * Configuration for specific istances of the CloudConnectionStatusService is achieved by correctly formatting the * URL-like key.<br> * The default configuration is stored under the key <b>ccs.status.notification.url</b><br> * Configuration for specific communication stacks include the stack postfix in the URL-like key.<br> * <br> * e.g. The key-value pair to link the CloudConnectionStatusService generated for the "foo" stack (see above) to LED * number 25 would be:<br> * <b>ccs.status.notification.url.foo=ccs:led:25</b><br> * Same configuration, but linking the status to the system log, would be:<br> * <b>ccs.status.notification.url.foo=ccs:log</b> */ public interface CloudConnectionStatusService { /** * Maximum priority for the notification. There should be only one StatusDisplayComponent at the same time * using this priority. */ public static final int PRIORITY_MAX = Integer.MAX_VALUE; /** * Priorities are evaluated in ascending order. * The Service will use the status of the registered component with highest priority */ public static final int PRIORITY_CRITICAL = 400; public static final int PRIORITY_HIGH = 300; public static final int PRIORITY_MEDIUM = 200; public static final int PRIORITY_LOW = 100; /** * Minimum priority for the notification. There should be at least and only one StatusDisplayComponent at the same * time * using this priority. */ public static final int PRIORITY_MIN = Integer.MIN_VALUE; /** * Registers a {@link CloudConnectionStatusComponent} in the component registry of the Service * * @param component * CloudConnectionStatusComponent to be registered in the registry */ public void register(CloudConnectionStatusComponent component); /** * Unregisters a {@link CloudConnectionStatusComponent} from the component registry of the Service * * @param component * CloudConnectionStatusComponent to be unregistered from the registry */ public void unregister(CloudConnectionStatusComponent component); /** * Updates the status of a {@link CloudConnectionStatusComponent} in the registry. * Implementation should also set the internal status of the CloudConnectionStatus component so to persist it. * * @param component * {@link CloudConnectionStatusComponent} for which the status has to be changed * @param status * {@link CloudConnectionStatusEnum} representing the new status of the component * @return false if an error occurs, true otherwise */ public boolean updateStatus(CloudConnectionStatusComponent component, CloudConnectionStatusEnum status); }