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

javax.tv.service.selection.ServiceContext Maven / Gradle / Ivy

The newest version!
/*
 * @(#)ServiceContext.java	1.49 00/10/09
 *
 * Copyright 1998-2000 by Sun Microsystems, Inc.,
 * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
 * All rights reserved.
 * 
 * This software is the confidential and proprietary information
 * of Sun Microsystems, Inc. ("Confidential Information").  You
 * shall not disclose such Confidential Information and shall use
 * it only in accordance with the terms of the license agreement
 * you entered into with Sun.
 */

package javax.tv.service.selection;

import javax.tv.locator.*;
import javax.tv.service.Service;


/**
 * A ServiceContext represents an environment in which
 * services are presented in a broadcast receiver.  Applications may
 * use ServiceContext objects to select new services to
 * be presented.  Content associated with a selected service is
 * presented by one or more ServiceContentHandler objects
 * managed by the ServiceContext.

* * A ServiceContext can exist in four states - * presenting, not presenting, presentation * pending and destroyed. The initial state is * not presenting.

* * The select() method can be called from any state * except destroyed. Assuming no exception is thrown, the * service context then enters the presentation pending * state. No event is generated on this state transition. If a call to * select() completes successfully, either a * NormalContentEvent or an * AlternativeContentEvent is generated and the * ServiceContext moves into the presenting * state.

* * If the selection operation fails, a * SelectionFailedEvent is generated. If the * select() method is called during the presentation * pending state, a SelectionFailedEvent with reason * code INTERRUPTED is generated, and the * ServiceContext will proceed in the presentation * pending state for the most recent select() call. * Otherwise, if the state before the failed select operation was * not presenting, the ServiceContext will * return to that state and a PresentationTerminatedEvent * be generated. If the state before the failed select operation was * presenting, it will attempt to return to that previous * state, which can result in a NormalContentEvent or * AlternativeContentEvent if this is possible, or a * PresentationTerminatedEvent if it is not possible.

* * The not presenting state is entered due to service * presentation being stopped which is reported by a * PresentationTerminatedEvent. The stopping of service * presentation can be initiated by an application calling the * stop() method or because some change in the environment * makes continued presentation impossible.

* * The destroyed state is entered by calling the * destroy() method, and is signaled by a * ServiceContextDestroyedEvent. Once this state is * entered, the ServiceContext can no longer be used for * any purpose. A destroyed ServiceContext will be * eligible for garbage collection once all references to it by any * applications have been removed.

* * Note that the ability to select a service for presentation does not * imply exclusive rights to the resources required for that * presentation. Subsequent attempts to select the same service may * fail.

* * Applications may also use this interface to register for events * associated with ServiceContext state changes.

* * @see javax.tv.service.Service * @see ServiceContentHandler * * @see NormalContentEvent * @see AlternativeContentEvent * @see SelectionFailedEvent * @see PresentationTerminatedEvent * @see ServiceContextDestroyedEvent * @see ServiceContextListener */ public interface ServiceContext { /** * Selects a service to be presented in this * ServiceContext. If the ServiceContext * is already presenting content, the new selection replaces the * content being presented. If the ServiceContext is * not presenting, successful conclusion of this method results in * the ServiceContext entering the presenting * state.

* * This method is asynchronous and successful completion of the * selection is notified by either a NormalContentEvent * or a AlternativeContentEvent. If an exception is * thrown when this method is called, the state of the service * context does not change. In such a case, any service being * presented before this method was called will continue to be * presented.

* * If the selection process fails after this method returns, a * SelectionFailedEvent will be generated. In this * case, the system will attempt to return to presenting the * original service (if any). If this is not possible (due, for * example, to issues such as tuning or CA) the * ServiceContext will enter the not * presenting state and a * PresentationTerminatedEvent will be generated.

* * If the ServiceContext is currently presenting a * service and components of the current service are also to be * presented in the newly selected service, these components will * continue to be presented and will not be restarted. If the * calling application is not a part of the newly selected service * and the application lifecycle policy on the receiver dictates * that the calling application be terminated, termination of the * application will be affected through the application lifecycle * API.

* * If the provided Service is transport-independent, * this method will resolve the Service to a * transport-dependent Service before performing the * selection. The actual Service selected will be * reported through the getService() method.

* * Successful completion of a select operation using this method * provides ServiceContentHandler instances for all * components that are signaled as "auto-start" in the selected * service. Upon entering the presenting state, these * ServiceContentHandler instances will have begun * presenting their respective content; * ServiceMediaHandler instances will be in the * started state. * * @param selection The Service the service to be * selected. * * @throws SecurityException If the caller owns this * ServiceContext but does not have * SelectPermission(selection.getLocator(), "own"), or if * the caller * does not own this ServiceContext and does not have * SelectPermission(selection.getLocator(), "*"). * * @throws IllegalStateException If the ServiceContext * has been destroyed. * * @see NormalContentEvent * @see AlternativeContentEvent * @see SelectionFailedEvent * @see PresentationTerminatedEvent * @see javax.tv.service.Service * @see ServiceContext#getService * @see ServiceContentHandler * @see ServiceContext#destroy **/ public void select(Service selection) throws SecurityException; /** * Selects content by specifying the parts of a service to be presented. If * the ServiceContext is already presenting content, the new * selection replaces the content being presented. If the * ServiceContext is not presenting, successful conclusion of * this method results in the ServiceContext entering the * presenting state. *

* * This method is asynchronous and successful completion of the selection is * notified by either a NormalContentEvent or a * AlternativeContentEvent. If failure of the selection can * be determined when this method is called, an exception will be generated * and the state of the ServiceContext will not change. In * this case, any service being presented before this method was called will * continue to be presented. *

* * If failure of the selection is determined after this method returns, a * SelectionFailedEvent will be generated. In this case, the * implementation of the method will try to return to presenting the * original service (if any). If this is not possible (due, for example, to * issues such as tuning or CA) the ServiceContext will enter * the not presenting state and a * PresentationTerminatedEvent will be generated. *

* * If the ServiceContext is currently presenting a service * and components of the current service are also to be presented in the * newly selected content, these components will continue to be presented * and will not be restarted. If the calling application is not a part of * the newly selected content and the application lifecycle policy on the * receiver dictates that the calling application be terminated, termination * of the application will be affected through the application lifecycle * API. *

* * Successful completion of a selection operation using this method provides * ServiceContentHandlers for those components indicated in the components * parameter which were successfully presented. Upon entering the * presenting state, these ServiceContentHandler * instances will have begun presenting their respective content; * ServiceMediaHandler instances will be in the * started state. This method will not provide * ServiceContentHandler instances for service components for * which a locator is not specified. * * If the content corresponding to any of the locators specified can be * successfully presented then the selection operation shall be considered * to have succeeded even if attempts to present content corresponding to * other locators failed. If different locators failed for different reasons * then the reason code is implementation dependent. * * @param components * An array of Locator instances representing the * parts of this service to be selected. Each array element must * be a locator to either a ServiceComponent or * content within a service component (such as an Xlet). * * @throws InvalidLocatorException * If a Locator provided does not reference a * selectable service component or selectable content within a * service component. * * For locators which reference a service component which is not selectable * and where there is no ServiceContentHandler defined, the exception shall * be thrown if the error condition can be detected without causing the * method to block. For example, implementations shall not block waiting for * network access or tuning where this is required to discover whether a * specific locator references a selectable service component and there is a * ServiceContentHandler. Where such an error condition is discovered after * the return from this method, a SelectionFailedEvent with reason code * MISSING_HANDLER shall be generated. * * @throws InvalidServiceComponentException * If a specified service component must be presented in * conjunction with another service component not contained in * components, if the specified components are * not all members of the same service, or if the specified set * of components cannot be presented as a coherent whole. * * @throws SecurityException * If, for any valid i, the caller owns this * ServiceContext but does not have * SelectPermission(components[i], "own"), or if * the caller does not own this ServiceContext * and does not have * SelectPermission(components[i], "*"). * * @throws IllegalStateException * If the ServiceContext has been destroyed. * * @see NormalContentEvent * @see AlternativeContentEvent * @see SelectionFailedEvent * @see PresentationTerminatedEvent * @see ServiceContentHandler * @see javax.tv.service.navigation.ServiceComponent */ public void select(Locator[] components) throws InvalidLocatorException, InvalidServiceComponentException, SecurityException; /** * Causes the ServiceContext to stop presenting content * and enter the not presenting state. Resources used * in the presentation will be released, associated * ServiceContentHandlers will cease presentation * (ServiceMediaHandlers will no longer be in the * started state), and a * PresentationTerminatedEvent will be posted.

* * This operation completes asynchronously. No action is performed * if the ServiceContext is already in the not * presenting state. * * @throws SecurityException If the caller owns this * ServiceContext but does not have * ServiceContextPermission("stop", "own"), or if the caller * does not own this ServiceContext and does not have * SelectPermission("stop", "*"). * * @throws IllegalStateException If the ServiceContext * has been destroyed. */ public void stop() throws SecurityException; /** * Causes the ServiceContext to release all resources * and enter the destroyed state. This method indicates * that the the ServiceContext must cease further * activity, and that it will no longer be used. After completion * of this method, ServiceMediaHandler instances * associated with this ServiceContext will have become * unrealized or will have been closed. * * If the ServiceContext is currently in the * presenting or presentation pending state, this * method will first stop the ServiceContext, causing a * PresentationTerminatedEvent to be posted. After the * ServiceContext has moved to the destroyed * state, a ServiceContextDestroyedEvent will be * posted.

* * This operation completes asynchronously. No action is performed * if the ServiceContext is already in the * destroyed state. * * @throws SecurityException If the caller does not have permission * to call stop() on this ServiceContext, * or if the caller owns this ServiceContext but does * not have ServiceContextPermission("destroy", "own"), * or if the caller does not own this ServiceContext * and does not have SelectPermission("destroy", "*"). * * @see #stop */ public void destroy() throws SecurityException; /** * Reports the current collection of ServiceContentHandlers. A zero-length * array is returned if the ServiceContext is in in the * not presenting or presentation pending states. * * When a service with no components is selected, the ServiceContext shall * generate a NormalContentEvent and enter the PRESENTING state. * * NOTE 1: A zero length array may also be returned if the currently * selected service has no components at all. For example, a service which * is only on-air for part of day and presently has no video, audio or * applications. * NOTE 2: Applications cannot assume anything about the order * of the ServiceContentHandlers returned by this method. * * @throws SecurityException * If the caller owns this ServiceContext but * does not have * ServiceContextPermission("getServiceContentHandlers", * "own"), * or if the caller does not own this * ServiceContext and does not have * SelectPermission("getServiceContentHandlers", "*"). * * @return The current ServiceContentHandler instances. * * @throws IllegalStateException * If the ServiceContext has been destroyed. */ public ServiceContentHandler[] getServiceContentHandlers() throws SecurityException; /** * Reports the Service being presented in this * ServiceContext. If the ServiceContext * is currently presenting a service, the Service * returned will be a network-dependent representation of the * Service indicated in the last successful * select() method call. If the * ServiceContext is not in the presenting * state then null is returned. * * @return The service currently being presented. * * @throws IllegalStateException If the ServiceContext * has been destroyed. */ public Service getService(); /** * * Subscribes a listener to receive events related to this * ServiceContext. If the specified listener is currently * subscribed, no action is performed. * * @param listener The ServiceContextListener to subscribe. * * @throws IllegalStateException If the ServiceContext has been * destroyed. * * @see ServiceContextEvent */ public void addListener(ServiceContextListener listener); /** * Unsubscribes a listener from receiving events related to this * ServiceContext. If the specified listener is not currently * subscribed, no action is performed. * * @param listener The ServiceContextListener to unsubscribe. * * @throws IllegalStateException If the ServiceContext has been * destroyed. */ public void removeListener(ServiceContextListener listener); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy