Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzymon Ptaszkiewicz2015-04-08 15:16:35 +0000
committerSzymon Ptaszkiewicz2015-04-08 15:16:35 +0000
commitd5ecf18441b571691f7d9b6f22e4019e29962742 (patch)
tree062a054858f3f3313ac3c4956e90d3c48a7413bd /bundles/org.eclipse.equinox.app/src
parentb18d30db803b95daa7ce45c1bba40a29bb94c338 (diff)
downloadrt.equinox.bundles-d5ecf18441b571691f7d9b6f22e4019e29962742.tar.gz
rt.equinox.bundles-d5ecf18441b571691f7d9b6f22e4019e29962742.tar.xz
rt.equinox.bundles-d5ecf18441b571691f7d9b6f22e4019e29962742.zip
Bug 464172 - Reduce the number of warnings for org.osgi.* classes by using the "Ignore optional compile problems" option
For the org.eclipse.equinox.app project. Change-Id: I14cd677ea631e81066dc77ab134016aada79ee80 Signed-off-by: Szymon Ptaszkiewicz <szymon.ptaszkiewicz@pl.ibm.com>
Diffstat (limited to 'bundles/org.eclipse.equinox.app/src')
-rw-r--r--bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java352
-rw-r--r--bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java554
-rw-r--r--bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java161
-rw-r--r--bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java227
-rw-r--r--bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java176
5 files changed, 0 insertions, 1470 deletions
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
deleted file mode 100644
index 8c7941578..000000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
- *
- * 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.osgi.service.application;
-
-import java.security.Permission;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-
-/**
- * This class implements permissions for manipulating applications and their
- * instances.
- * <P>
- * ApplicationAdminPermission can be targeted to applications that matches the
- * specified filter.
- * <P>
- * ApplicationAdminPermission may be granted for different actions:
- * {@code lifecycle}, {@code schedule} and {@code lock}. The
- * permission {@code schedule} implies the permission
- * {@code lifecycle}.
- *
- * @version $Id$
- */
-public class ApplicationAdminPermission extends Permission {
- private static final long serialVersionUID = 1L;
-
- /**
- * Allows the lifecycle management of the target applications.
- */
- public static final String LIFECYCLE_ACTION = "lifecycle";
-
- /**
- * Allows scheduling of the target applications. The permission to
- * schedule an application implies that the scheduler can also
- * manage the lifecycle of that application i.e. {@code schedule}
- * implies {@code lifecycle}
- */
- public static final String SCHEDULE_ACTION = "schedule";
-
- /**
- * Allows setting/unsetting the locking state of the target applications.
- */
- public static final String LOCK_ACTION = "lock";
-
- private ApplicationDescriptor applicationDescriptor;
-
- /**
- * Constructs an ApplicationAdminPermission. The {@code filter}
- * specifies the target application. The {@code filter} is an
- * LDAP-style filter, the recognized properties are {@code signer}
- * and {@code pid}. The pattern specified in the {@code signer}
- * is matched with the Distinguished Name chain used to sign the application.
- * Wildcards in a DN are not matched according to the filter string rules,
- * but according to the rules defined for a DN chain. The attribute
- * {@code pid} is matched with the PID of the application according to
- * the filter string rules.
- * <p>
- * If the {@code filter} is {@code null} then it matches
- * {@code "*"}. If
- * {@code actions} is {@code "*"} then it identifies all the
- * possible actions.
- *
- * @param filter
- * filter to identify application. The value {@code null}
- * is equivalent to {@code "*"} and it indicates "all application".
- * @param actions
- * comma-separated list of the desired actions granted on the
- * applications or "*" means all the actions. It must not be
- * {@code null}. The order of the actions in the list is
- * not significant.
- * @throws InvalidSyntaxException
- * is thrown if the specified {@code filter} is not syntactically
- * correct.
- *
- * @exception NullPointerException
- * is thrown if the actions parameter is {@code null}
- *
- * @see ApplicationDescriptor
- * @see org.osgi.framework.AdminPermission
- */
- public ApplicationAdminPermission(String filter, String actions) throws InvalidSyntaxException {
- super(filter == null ? "*" : filter);
-
- if( filter == null )
- filter = "*";
-
- if( actions == null )
- throw new NullPointerException( "Action string cannot be null!" );
-
- this.applicationDescriptor = null;
- this.filter = (filter == null ? "*" : filter);
- this.actions = actions;
-
- if( !filter.equals( "*" ) && !filter.equals( "<<SELF>>" ) )
- FrameworkUtil.createFilter( this.filter ); // check if the filter is valid
- init();
- }
-
- /**
- * This contructor should be used when creating {@code ApplicationAdminPermission}
- * instance for {@code checkPermission} call.
- * @param application the tareget of the operation, it must not be {@code null}
- * @param actions the required operation. it must not be {@code null}
- * @throws NullPointerException if any of the arguments is null.
- */
- public ApplicationAdminPermission(ApplicationDescriptor application, String actions) {
- super(application.getApplicationId());
-
- if( application == null || actions == null )
- throw new NullPointerException( "ApplicationDescriptor and action string cannot be null!" );
-
- this.filter = application.getApplicationId();
- this.applicationDescriptor = application;
- this.actions = actions;
-
- init();
- }
-
- /**
- * This method can be used in the {@link java.security.ProtectionDomain}
- * implementation in the {@code implies} method to insert the
- * application ID of the current application into the permission being
- * checked. This enables the evaluation of the
- * {@code &lt;&lt;SELF&gt;&gt;} pseudo targets.
- * @param applicationId the ID of the current application.
- * @return the permission updated with the ID of the current application
- */
- public ApplicationAdminPermission setCurrentApplicationId(String applicationId) {
- ApplicationAdminPermission newPerm = null;
-
- if( this.applicationDescriptor == null ) {
- try {
- newPerm = new ApplicationAdminPermission( this.filter, this.actions );
- }catch( InvalidSyntaxException e ) {
- throw new RuntimeException(e); /* this can never happen */
- }
- }
- else
- newPerm = new ApplicationAdminPermission( this.applicationDescriptor, this.actions );
-
- newPerm.applicationID = applicationId;
-
- return newPerm;
- }
-
- /**
- * Checks if the specified {@code permission} is implied by this permission.
- * The method returns true under the following conditions:
- * <UL>
- * <LI> This permission was created by specifying a filter (see {@link #ApplicationAdminPermission(String, String)})
- * <LI> The implied {@code otherPermission} was created for a particular {@link ApplicationDescriptor}
- * (see {@link #ApplicationAdminPermission(ApplicationDescriptor, String)})
- * <LI> The {@code filter} of this permission mathes the {@code ApplicationDescriptor} specified
- * in the {@code otherPermission}. If the filter in this permission is the
- * {@code &lt;&lt;SELF&gt;&gt;} pseudo target, then the currentApplicationId set in the
- * {@code otherPermission} is compared to the application Id of the target
- * {@code ApplicationDescriptor}.
- * <LI> The list of permitted actions in this permission contains all actions required in the
- * {@code otherPermission}
- * </UL>
- * Otherwise the method returns false.
- * @param otherPermission the implied permission
- * @return true if this permission implies the {@code otherPermission}, false otherwise.
- */
- public boolean implies(Permission otherPermission) {
- if( otherPermission == null )
- return false;
-
- if(!(otherPermission instanceof ApplicationAdminPermission))
- return false;
-
- ApplicationAdminPermission other = (ApplicationAdminPermission) otherPermission;
-
- if( !filter.equals("*") ) {
- if( other.applicationDescriptor == null )
- return false;
-
- if( filter.equals( "<<SELF>>") ) {
- if( other.applicationID == null )
- return false; /* it cannot be, this might be a bug */
-
- if( !other.applicationID.equals( other.applicationDescriptor.getApplicationId() ) )
- return false;
- }
- else {
- Hashtable props = new Hashtable();
- props.put( "pid", other.applicationDescriptor.getApplicationId() );
- props.put( "signer", new SignerWrapper( other.applicationDescriptor ) );
-
- Filter flt = getFilter();
- if( flt == null )
- return false;
-
- if( !flt.match( props ) )
- return false;
- }
- }
-
- if( !actionsVector.containsAll( other.actionsVector ) )
- return false;
-
- return true;
- }
-
- public boolean equals(Object with) {
- if( with == null || !(with instanceof ApplicationAdminPermission) )
- return false;
-
- ApplicationAdminPermission other = (ApplicationAdminPermission)with;
-
- // Compare actions:
- if( other.actionsVector.size() != actionsVector.size() )
- return false;
-
- for( int i=0; i != actionsVector.size(); i++ )
- if( !other.actionsVector.contains( actionsVector.get( i ) ) )
- return false;
-
-
- return equal(this.filter, other.filter ) && equal(this.applicationDescriptor, other.applicationDescriptor)
- && equal(this.applicationID, other.applicationID);
- }
-
- /**
- * Compares parameters for equality. If both object are null, they are considered
- * equal.
- * @param a object to compare
- * @param b other object to compare
- * @return true if both objects are equal or both are null
- */
- private static boolean equal(Object a, Object b) {
- // This equation is true if both references are null or both point
- // to the same object. In both cases they are considered as equal.
- if( a == b ) {
- return true;
- }
-
- return a.equals(b);
- }
-
- public int hashCode() {
- int hc = 0;
- for( int i=0; i != actionsVector.size(); i++ )
- hc ^= ((String)actionsVector.get( i )).hashCode();
- hc ^= (null == this.filter )? 0 : this.filter.hashCode();
- hc ^= (null == this.applicationDescriptor) ? 0 : this.applicationDescriptor.hashCode();
- hc ^= (null == this.applicationID) ? 0 : this.applicationID.hashCode();
- return hc;
- }
-
- /**
- * Returns the actions of this permission.
- * @return the actions specified when this permission was created
- */
- public String getActions() {
- return actions;
- }
-
- private String applicationID;
-
- private static final Vector ACTIONS = new Vector();
- private Vector actionsVector;
- private final String filter;
- private final String actions;
- private Filter appliedFilter = null;
-
- static {
- ACTIONS.add(LIFECYCLE_ACTION);
- ACTIONS.add(SCHEDULE_ACTION);
- ACTIONS.add(LOCK_ACTION);
- }
-
- private static Vector actionsVector(String actions) {
- Vector v = new Vector();
- StringTokenizer t = new StringTokenizer(actions.toUpperCase(), ",");
- while (t.hasMoreTokens()) {
- String action = t.nextToken().trim();
- v.add(action.toLowerCase());
- }
-
- if( v.contains( SCHEDULE_ACTION ) && !v.contains( LIFECYCLE_ACTION ) )
- v.add( LIFECYCLE_ACTION );
-
- return v;
- }
-
-
- private static class SignerWrapper extends Object {
- private String pattern;
- private ApplicationDescriptor appDesc;
-
- /**
- * @param pattern
- */
- public SignerWrapper(String pattern) {
- this.pattern = pattern;
- }
-
- SignerWrapper(ApplicationDescriptor appDesc) {
- this.appDesc = appDesc;
- }
-
- public boolean equals(Object o) {
- if (!(o instanceof SignerWrapper))
- return false;
- SignerWrapper other = (SignerWrapper) o;
- ApplicationDescriptor matchAppDesc = (ApplicationDescriptor) (appDesc != null ? appDesc : other.appDesc);
- String matchPattern = appDesc != null ? other.pattern : pattern;
- return matchAppDesc.matchDNChain(matchPattern);
- }
- }
-
- private void init() {
- actionsVector = actionsVector( actions );
-
- if ( actions.equals("*") )
- actionsVector = actionsVector( LIFECYCLE_ACTION + "," + SCHEDULE_ACTION + "," + LOCK_ACTION );
- else if (!ACTIONS.containsAll(actionsVector))
- throw new IllegalArgumentException("Illegal action!");
-
- applicationID = null;
- }
-
- private Filter getFilter() {
- if (appliedFilter == null) {
- try {
- appliedFilter = FrameworkUtil.createFilter(filter);
- } catch (InvalidSyntaxException e) {
- //we will return null
- }
- }
- return appliedFilter;
- }
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
deleted file mode 100644
index 601037a95..000000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
- *
- * 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.osgi.service.application;
-
-import java.lang.reflect.Array;
-import java.util.*;
-import java.util.Map.Entry;
-import org.eclipse.equinox.internal.app.AppPersistence;
-import org.osgi.framework.Constants;
-import org.osgi.framework.InvalidSyntaxException;
-
-/**
- * An OSGi service that represents an installed application and stores
- * information about it. The application descriptor can be used for instance
- * creation.
- *
- * @version $Revision: 1.13 $
- */
-
-public abstract class ApplicationDescriptor {
- /*
- * NOTE: An implementor may also choose to replace this class in
- * their distribution with a class that directly interfaces with the
- * org.osgi.service.application implementation. This replacement class MUST NOT alter the
- * public/protected signature of this class.
- */
-
- /**
- * The property key for the localized name of the application.
- */
- public static final String APPLICATION_NAME = "application.name";
-
- /**
- * The property key for the localized icon of the application.
- */
- public static final String APPLICATION_ICON = "application.icon";
-
- /**
- * The property key for the unique identifier (PID) of the application.
- */
- public static final String APPLICATION_PID = Constants.SERVICE_PID;
-
- /**
- * The property key for the version of the application.
- */
- public static final String APPLICATION_VERSION = "application.version";
-
- /**
- * The property key for the name of the application vendor.
- */
- public static final String APPLICATION_VENDOR = Constants.SERVICE_VENDOR;
-
- /**
- * The property key for the visibility property of the application.
- */
- public static final String APPLICATION_VISIBLE = "application.visible";
-
- /**
- * The property key for the launchable property of the application.
- */
- public static final String APPLICATION_LAUNCHABLE = "application.launchable";
-
- /**
- * The property key for the locked property of the application.
- */
- public static final String APPLICATION_LOCKED = "application.locked";
-
- /**
- * The property key for the localized description of the application.
- */
- public static final String APPLICATION_DESCRIPTION = "application.description";
-
- /**
- * The property key for the localized documentation of the application.
- */
- public static final String APPLICATION_DOCUMENTATION = "application.documentation";
-
- /**
- * The property key for the localized copyright notice of the application.
- */
- public static final String APPLICATION_COPYRIGHT = "application.copyright";
-
- /**
- * The property key for the localized license of the application.
- */
- public static final String APPLICATION_LICENSE = "application.license";
-
- /**
- * The property key for the application container of the application.
- */
- public static final String APPLICATION_CONTAINER = "application.container";
-
- /**
- * The property key for the location of the application.
- */
- public static final String APPLICATION_LOCATION = "application.location";
-
- private final String pid;
-
- private final boolean[] locked = {false};
-
- /**
- * Constructs the {@code ApplicationDescriptor}.
- *
- * @param applicationId
- * The identifier of the application. Its value is also available
- * as the {@code service.pid} service property of this
- * {@code ApplicationDescriptor} service. This parameter must not
- * be {@code null}.
- * @throws NullPointerException if the specified {@code applicationId} is null.
- */
- protected ApplicationDescriptor(String applicationId) {
- if (null == applicationId) {
- throw new NullPointerException("Application ID must not be null!");
- }
-
- this.pid = applicationId;
- locked[0] = isPersistentlyLocked();
- }
-
- /**
- * Returns the identifier of the represented application.
- *
- * @return the identifier of the represented application
- */
- public final String getApplicationId() {
- return pid;
- }
-
- /**
- * This method verifies whether the specified {@code pattern}
- * matches the Distinguished Names of any of the certificate chains
- * used to authenticate this application.
- * <P>
- * The {@code pattern} must adhere to the
- * syntax defined in {@link org.osgi.service.application.ApplicationAdminPermission}
- * for signer attributes.
- * <p>
- * This method is used by {@link ApplicationAdminPermission#implies(java.security.Permission)} method
- * to match target {@code ApplicationDescriptor} and filter.
- *
- * @param pattern a pattern for a chain of Distinguished Names. It must not be null.
- * @return {@code true} if the specified pattern matches at least
- * one of the certificate chains used to authenticate this application
- * @throws NullPointerException if the specified {@code pattern} is null.
- * @throws IllegalStateException if the application descriptor was
- * unregistered
- */
- public abstract boolean matchDNChain(String pattern);
-
- /**
- * Returns the properties of the application descriptor as key-value pairs.
- * The return value contains the locale aware and unaware properties as
- * well. The returned {@code Map} will include the service
- * properties of this {@code ApplicationDescriptor} as well.
- * <p>
- * This method will call the {@code getPropertiesSpecific} method
- * to enable the container implementation to insert application model and/or
- * container implementation specific properties.
- * <P>
- * The returned {@link java.util.Map} will contain the standard OSGi service
- * properties as well
- * (e.g. service.id, service.vendor etc.) and specialized application
- * descriptors may offer further service properties. The returned Map contains
- * a snapshot of the properties. It will not reflect further changes in the
- * property values nor will the update of the Map change the corresponding
- * service property.
- *
- * @param locale
- * the locale string, it may be null, the value null means the
- * default locale. If the provided locale is the empty String
- * ({@code ""})then raw (non-localized) values are returned.
- *
- * @return copy of the service properties of this application descriptor service,
- * according to the specified locale. If locale is null then the
- * default locale's properties will be returned. (Since service
- * properties are always exist it cannot return null.)
- *
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- public final Map getProperties(String locale) {
- Map props = getPropertiesSpecific(locale);
- Boolean containerLocked = (Boolean) props.remove(APPLICATION_LOCKED);
- synchronized (locked) {
- if (containerLocked != null && containerLocked.booleanValue() != locked[0]) {
- if (locked[0])
- lockSpecific();
- else
- unlockSpecific();
- }
- }
- /* replace the container's lock with the application model's lock, that's the correct */
- props.put(APPLICATION_LOCKED, new Boolean(locked[0]));
- return props;
- }
-
- /**
- * Container implementations can provide application model specific
- * and/or container implementation specific properties via this
- * method.
- *
- * Localizable properties must be returned localized if the provided
- * {@code locale} argument is not the empty String. The value
- * {@code null} indicates to use the default locale, for other
- * values the specified locale should be used.
- *
- * The returned {@link java.util.Map} must contain the standard OSGi service
- * properties as well
- * (e.g. service.id, service.vendor etc.) and specialized application
- * descriptors may offer further service properties.
- * The returned {@code Map}
- * contains a snapshot of the properties. It will not reflect further changes in the
- * property values nor will the update of the Map change the corresponding
- * service property.
-
- * @param locale the locale to be used for localizing the properties.
- * If {@code null} the default locale should be used. If it is
- * the empty String ({@code ""}) then raw (non-localized) values
- * should be returned.
- *
- * @return the application model specific and/or container implementation
- * specific properties of this application descriptor.
- *
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- protected abstract Map getPropertiesSpecific(String locale);
-
- /**
- * Launches a new instance of an application. The {@code args} parameter
- * specifies the startup parameters for the instance to be launched, it may
- * be null.
- * <p>
- * The following steps are made:
- * <UL>
- * <LI>Check for the appropriate permission.
- * <LI>Check the locking state of the application. If locked then throw an
- * {@link ApplicationException} with the reason code
- * {@link ApplicationException#APPLICATION_LOCKED}.
- * <LI>Calls the {@code launchSpecific()} method to create and start an
- * application instance.
- * <LI>Returns the {@code ApplicationHandle} returned by the
- * launchSpecific()
- * </UL>
- * The caller has to have ApplicationAdminPermission(applicationPID,
- * "launch") in order to be able to perform this operation.
- * <P>
- * The {@code Map} argument of the launch method contains startup arguments
- * for the application. The keys used in the Map must be non-null, non-empty
- * {@code String} objects. They can be standard or application specific.
- * OSGi defines the {@code org.osgi.triggeringevent} key to be used to pass
- * the triggering event to a scheduled application, however in the future it
- * is possible that other well-known keys will be defined. To avoid unwanted
- * clashes of keys, the following rules should be applied:
- * <ul>
- * <li>The keys starting with the dash (-) character are application
- * specific, no well-known meaning should be associated with them.</li>
- * <li>Well-known keys should follow the reverse domain name based naming.
- * In particular, the keys standardized in OSGi should start with
- * {@code org.osgi.}.</li>
- * </ul>
- * <P>
- * The method is synchronous, it return only when the application instance
- * was successfully started or the attempt to start it failed.
- * <P>
- * This method never returns {@code null}. If launching an application
- * fails, the appropriate exception is thrown.
- *
- * @param arguments Arguments for the newly launched application, may be
- * null
- *
- * @return the registered ApplicationHandle, which represents the newly
- * launched application instance. Never returns {@code null}.
- *
- * @throws SecurityException if the caller doesn't have "lifecycle"
- * ApplicationAdminPermission for the application.
- * @throws ApplicationException if starting the application failed
- * @throws IllegalStateException if the application descriptor is
- * unregistered
- * @throws IllegalArgumentException if the specified {@code Map} contains
- * invalid keys (null objects, empty {@code String} or a key that is
- * not {@code String})
- */
- public final ApplicationHandle launch(Map arguments) throws ApplicationException {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LIFECYCLE_ACTION));
- synchronized (locked) {
- if (locked[0])
- throw new ApplicationException(ApplicationException.APPLICATION_LOCKED, "Application is locked, can't launch!");
- }
- if (!isLaunchableSpecific())
- throw new ApplicationException(ApplicationException.APPLICATION_NOT_LAUNCHABLE, "Cannot launch the application!");
- checkArgs(arguments, false);
- try {
- return launchSpecific(arguments);
- } catch (IllegalStateException ise) {
- throw ise;
- } catch (SecurityException se) {
- throw se;
- } catch (ApplicationException ae) {
- throw ae;
- } catch (Exception t) {
- throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, t);
- }
- }
-
- /**
- * Called by launch() to create and start a new instance in an application
- * model specific way. It also creates and registeres the application handle
- * to represent the newly created and started instance and registeres it.
- * The method is synchronous, it return only when the application instance was
- * successfully started or the attempt to start it failed.
- * <P>
- * This method must not return {@code null}. If launching the application
- * failed, and exception must be thrown.
- *
- * @param arguments
- * the startup parameters of the new application instance, may be
- * null
- *
- * @return the registered application model
- * specific application handle for the newly created and started
- * instance.
- *
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- * @throws Exception
- * if any problem occurs.
- */
- protected abstract ApplicationHandle launchSpecific(Map arguments) throws Exception;
-
- /**
- * This method is called by launch() to verify that according to the
- * container, the application is launchable.
- *
- * @return true, if the application is launchable according to the
- * container, false otherwise.
- *
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- protected abstract boolean isLaunchableSpecific();
-
- /**
- * Schedules the application at a specified event. Schedule information
- * should not get lost even if the framework or the device restarts so it
- * should be stored in a persistent storage. The method registers a
- * {@link ScheduledApplication} service in Service Registry, representing
- * the created schedule.
- * <p>
- * The {@code Map} argument of the method contains startup arguments for the
- * application. The keys used in the Map must be non-null, non-empty
- * {@code String} objects. The argument values must be of primitive types,
- * wrapper classes of primitive types, {@code String} or arrays or
- * collections of these.
- * <p>
- * The created schedules have a unique identifier within the scope of this
- * {@code ApplicationDescriptor}. This identifier can be specified in the
- * {@code scheduleId} argument. If this argument is {@code null}, the
- * identifier is automatically generated.
- *
- * @param scheduleId the identifier of the created schedule. It can be
- * {@code null}, in this case the identifier is automatically
- * generated.
- * @param arguments the startup arguments for the scheduled application, may
- * be null
- * @param topic specifies the topic of the triggering event, it may contain
- * a trailing asterisk as wildcard, the empty string is treated as
- * "*", must not be null
- * @param eventFilter specifies and LDAP filter to filter on the properties
- * of the triggering event, may be null
- * @param recurring if the recurring parameter is false then the application
- * will be launched only once, when the event firstly occurs. If the
- * parameter is true then scheduling will take place for every event
- * occurrence; i.e. it is a recurring schedule
- *
- * @return the registered scheduled application service
- *
- * @throws NullPointerException if the topic is {@code null}
- * @throws InvalidSyntaxException if the specified {@code eventFilter} is
- * not syntactically correct
- * @throws ApplicationException if the schedule couldn't be created. The
- * possible error codes are
- * <ul>
- * <li>
- * {@link ApplicationException#APPLICATION_DUPLICATE_SCHEDULE_ID} if
- * the specified {@code scheduleId} is already used for this
- * {@code ApplicationDescriptor} <li>
- * {@link ApplicationException#APPLICATION_SCHEDULING_FAILED} if the
- * scheduling failed due to some internal reason (e.g. persistent
- * storage error). <li>
- * {@link ApplicationException#APPLICATION_INVALID_STARTUP_ARGUMENT}
- * if the specified startup argument doesn't satisfy the type or
- * value constraints of startup arguments.
- * </ul>
- * @throws SecurityException if the caller doesn't have "schedule"
- * ApplicationAdminPermission for the application.
- * @throws IllegalStateException if the application descriptor is
- * unregistered
- * @throws IllegalArgumentException if the specified {@code Map} contains
- * invalid keys (null objects, empty {@code String} or a key that is
- * not {@code String})
- */
- public final ScheduledApplication schedule(String scheduleId, Map arguments, String topic, String eventFilter, boolean recurring) throws InvalidSyntaxException, ApplicationException {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.SCHEDULE_ACTION));
- arguments = checkArgs(arguments, true);
- isLaunchableSpecific(); // checks if the ApplicationDescriptor was already unregistered
- return AppPersistence.addScheduledApp(this, scheduleId, arguments, topic, eventFilter, recurring);
- }
-
- /**
- * Sets the lock state of the application. If an application is locked then
- * launching a new instance is not possible. It does not affect the already
- * launched instances.
- *
- * @throws SecurityException
- * if the caller doesn't have "lock" ApplicationAdminPermission
- * for the application.
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- public final void lock() {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LOCK_ACTION));
- synchronized (locked) {
- if (locked[0])
- return;
- locked[0] = true;
- lockSpecific();
- saveLock(true);
- }
- }
-
- /**
- * This method is used to notify the container implementation that the
- * corresponding application has been locked and it should update the
- * {@code application.locked} service property accordingly.
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- protected abstract void lockSpecific();
-
- /**
- * Unsets the lock state of the application.
- *
- * @throws SecurityException
- * if the caller doesn't have "lock" ApplicationAdminPermission
- * for the application.
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- public final void unlock() {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LOCK_ACTION));
- synchronized (locked) {
- if (!locked[0])
- return;
- locked[0] = false;
- unlockSpecific();
- saveLock(false);
- }
- }
-
- /**
- * This method is used to notify the container implementation that the
- * corresponding application has been unlocked and it should update the
- * {@code application.locked} service property accordingly.
-
- * @throws IllegalStateException
- * if the application descriptor is unregistered
- */
- protected abstract void unlockSpecific();
-
- private void saveLock(boolean locked) {
- AppPersistence.saveLock(this, locked);
- }
-
- private boolean isPersistentlyLocked() {
- return AppPersistence.isLocked(this);
- }
-
- private static final Collection scalars = Arrays.asList(new Class[] {String.class, Integer.class, Long.class, Float.class, Double.class, Byte.class, Short.class, Character.class, Boolean.class});
- private static final Collection scalarsArrays = Arrays.asList(new Class[] {String[].class, Integer[].class, Long[].class, Float[].class, Double[].class, Byte[].class, Short[].class, Character[].class, Boolean[].class});
- private static final Collection primitiveArrays = Arrays.asList(new Class[] {long[].class, int[].class, short[].class, char[].class, byte[].class, double[].class, float[].class, boolean[].class});
-
- private static Map checkArgs(Map arguments, boolean validateValues) throws ApplicationException {
- if (arguments == null)
- return arguments;
- Map copy = validateValues ? new HashMap() : null;
- for (Iterator entries = arguments.entrySet().iterator(); entries.hasNext();) {
- Map.Entry entry = (Entry) entries.next();
- if (!(entry.getKey() instanceof String))
- throw new IllegalArgumentException("Invalid key type: " + entry.getKey() == null ? "<null>" : entry.getKey().getClass().getName());
- if ("".equals(entry.getKey())) //$NON-NLS-1$
- throw new IllegalArgumentException("Empty string is an invalid key");
- if (validateValues)
- validateValue(entry, copy);
- }
- return validateValues ? copy : arguments;
- }
-
- private static void validateValue(Map.Entry entry, Map copy) throws ApplicationException {
- Class clazz = entry.getValue().getClass();
-
- // Is it in the set of scalar types
- if (scalars.contains(clazz)) {
- copy.put(entry.getKey(), entry.getValue());
- return;
- }
-
- // Is it an array of primitives or scalars
- if (scalarsArrays.contains(clazz) || primitiveArrays.contains(clazz)) {
- int arrayLength = Array.getLength(entry.getValue());
- Object copyOfArray = Array.newInstance(entry.getValue().getClass().getComponentType(), arrayLength);
- System.arraycopy(entry.getValue(), 0, copyOfArray, 0, arrayLength);
- copy.put(entry.getKey(), copyOfArray);
- return;
- }
-
- // Is it a Collection of scalars
- if (entry.getValue() instanceof Collection) {
- Collection valueCollection = (Collection) entry.getValue();
- for (Iterator it = valueCollection.iterator(); it.hasNext();) {
- Class containedClazz = it.next().getClass();
- if (!scalars.contains(containedClazz)) {
- throw new ApplicationException(ApplicationException.APPLICATION_INVALID_STARTUP_ARGUMENT, "The value for key \"" + entry.getKey() + "\" is a collection that contains an invalid value of type \"" + containedClazz.getName() + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
- }
- copy.put(entry.getKey(), new ArrayList((Collection) entry.getValue()));
- return;
- }
- throw new ApplicationException(ApplicationException.APPLICATION_INVALID_STARTUP_ARGUMENT, "The value for key \"" + entry.getKey() + "\" is an invalid type \"" + clazz.getName() + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-} \ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
deleted file mode 100644
index be377d8ec..000000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2005, 2010). All Rights Reserved.
- *
- * 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.osgi.service.application;
-
-/**
- * This exception is used to indicate problems related to application lifecycle
- * management.
- *
- * {@code ApplicationException} object is created by the Application Admin
- * to denote an exception condition in the lifecycle of an application.
- * {@code ApplicationException}s should not be created by developers. <br/>
- * {@code ApplicationException}s are associated with an error code. This
- * code describes the type of problem reported in this exception. The possible
- * codes are:
- * <ul>
- * <li> {@link #APPLICATION_LOCKED} - The application couldn't be launched
- * because it is locked.</li>
- * <li> {@link #APPLICATION_NOT_LAUNCHABLE} - The application is not in
- * launchable state.</li>
- * <li> {@link #APPLICATION_INTERNAL_ERROR} - An exception was thrown by the
- * application or its container during launch.</li>
- * <li> {@link #APPLICATION_SCHEDULING_FAILED} - The scheduling of an application
- * failed.
- * <li> {@link #APPLICATION_DUPLICATE_SCHEDULE_ID} - The application scheduling
- * failed because the specified identifier is already in use.
- * <li> {@link #APPLICATION_EXITVALUE_NOT_AVAILABLE} - The exit value is not
- * available for an application instance because the instance has not
- * terminated.
- * <li> {@link #APPLICATION_INVALID_STARTUP_ARGUMENT} - One of the specified
- * startup arguments is invalid, for example its type is not permitted.
- * </ul>
- *
- * @version $Id$
- */
-public class ApplicationException extends Exception {
- private static final long serialVersionUID = -7173190453622508207L;
- private final int errorCode;
-
- /**
- * The application couldn't be launched because it is locked.
- */
- public static final int APPLICATION_LOCKED = 0x01;
-
- /**
- * The application is not in launchable state, it's
- * {@link ApplicationDescriptor#APPLICATION_LAUNCHABLE}
- * attribute is false.
- */
- public static final int APPLICATION_NOT_LAUNCHABLE = 0x02;
-
- /**
- * An exception was thrown by the application or the corresponding container
- * during launch. The exception is available from {@code getCause()}.
- */
- public static final int APPLICATION_INTERNAL_ERROR = 0x03;
-
- /**
- * The application schedule could not be created due to some internal error
- * (for example, the schedule information couldn't be saved due to some
- * storage error).
- */
- public static final int APPLICATION_SCHEDULING_FAILED = 0x04;
-
- /**
- * The application scheduling failed because the specified identifier
- * is already in use.
- */
- public static final int APPLICATION_DUPLICATE_SCHEDULE_ID = 0x05;
-
- /**
- * The exit value is not available for an application instance because the
- * instance has not terminated.
- *
- * @since 1.1
- */
- public static final int APPLICATION_EXITVALUE_NOT_AVAILABLE = 0x06;
-
- /**
- * One of the specified startup arguments is invalid, for example its
- * type is not permitted.
- *
- * @since 1.1
- */
- public static final int APPLICATION_INVALID_STARTUP_ARGUMENT = 0x07;
-
- /**
- * Creates an {@code ApplicationException} with the specified error code.
- * @param errorCode The code of the error
- */
- public ApplicationException(int errorCode) {
- super();
- this.errorCode = errorCode;
- }
-
- /**
- * Creates a {@code ApplicationException} that wraps another exception.
- *
- * @param errorCode The code of the error
- * @param cause The cause of this exception.
- */
- public ApplicationException(int errorCode, Throwable cause) {
- super(cause);
- this.errorCode = errorCode;
- }
-
- /**
- * Creates an {@code ApplicationException} with the specified error code.
- * @param errorCode The code of the error
- * @param message The associated message
- */
- public ApplicationException(int errorCode, String message) {
- super(message);
- this.errorCode = errorCode;
- }
-
- /**
- * Creates a {@code ApplicationException} that wraps another exception.
- *
- * @param errorCode The code of the error
- * @param message The associated message.
- * @param cause The cause of this exception.
- */
- public ApplicationException(int errorCode, String message, Throwable cause) {
- super(message, cause);
- this.errorCode = errorCode;
- }
-
- /**
- * Returns the cause of this exception or {@code null} if no cause was
- * set.
- *
- * @return The cause of this exception or {@code null} if no cause was
- * set.
- */
- public Throwable getCause() {
- return super.getCause();
- }
-
- /**
- * Returns the error code associated with this exception.
- *
- * @return The error code of this exception.
- */
- public int getErrorCode() {
- return errorCode;
- }
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
deleted file mode 100644
index 1ea1f698e..000000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
- *
- * 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.osgi.service.application;
-
-import org.osgi.framework.Constants;
-
-/**
- * ApplicationHandle is an OSGi service interface which represents an instance
- * of an application. It provides the functionality to query and manipulate the
- * lifecycle state of the represented application instance. It defines constants
- * for the lifecycle states.
- *
- * @version $Revision: 1.6 $
- */
-public abstract class ApplicationHandle {
- /*
- * NOTE: An implementor may also choose to replace this class in
- * their distribution with a class that directly interfaces with the
- * org.osgi.service.application implementation. This replacement class MUST NOT alter the
- * public/protected signature of this class.
- */
-
- /**
- * The property key for the unique identifier (PID) of the application
- * instance.
- */
- public static final String APPLICATION_PID = Constants.SERVICE_PID;
-
- /**
- * The property key for the pid of the corresponding application descriptor.
- */
- public final static String APPLICATION_DESCRIPTOR = "application.descriptor";
-
- /**
- * The property key for the state of this application instance.
- */
- public final static String APPLICATION_STATE = "application.state";
-
- /**
- * The property key for the supports exit value property of this application
- * instance.
- *
- * @since 1.1
- */
- public final static String APPLICATION_SUPPORTS_EXITVALUE = "application.supports.exitvalue";
-
- /**
- * The application instance is running. This is the initial state of a newly
- * created application instance.
- */
- public final static String RUNNING = "RUNNING";
-
- /**
- * The application instance is being stopped. This is the state of the
- * application instance during the execution of the {@code destroy()}
- * method.
- */
- public final static String STOPPING = "STOPPING";
-
- private final String instanceId;
-
- private final ApplicationDescriptor descriptor;
-
- /**
- * Application instance identifier is specified by the container when the
- * instance is created. The instance identifier must remain static for the
- * lifetime of the instance, it must remain the same even across framework
- * restarts for the same application instance. This value must be the same
- * as the {@code service.pid} service property of this application
- * handle.
- * <p>
- * The instance identifier should follow the following scheme:
- * &lt;<i>application descriptor PID</i>&gt;.&lt;<i>index</i>&gt;
- * where &lt;<i>application descriptor PID</i>&gt; is the PID of the
- * corresponding {@code ApplicationDescriptor} and &lt;<i>index</i>&gt;
- * is a unique integer index assigned by the application container.
- * Even after destroying the application index the same index value should not
- * be reused in a reasonably long timeframe.
- *
- * @param instanceId the instance identifier of the represented application
- * instance. It must not be null.
- *
- * @param descriptor the {@code ApplicationDescriptor} of the represented
- * application instance. It must not be null.
- *
- * @throws NullPointerException if any of the arguments is null.
- */
- protected ApplicationHandle(String instanceId, ApplicationDescriptor descriptor) {
- if ((null == instanceId) || (null == descriptor)) {
- throw new NullPointerException("Parameters must not be null!");
- }
-
- this.instanceId = instanceId;
- this.descriptor = descriptor;
- }
-
- /**
- * Retrieves the {@code ApplicationDescriptor} to which this
- * {@code ApplicationHandle} belongs.
- *
- * @return The corresponding {@code ApplicationDescriptor}
- */
- public final ApplicationDescriptor getApplicationDescriptor() {
- return descriptor;
- }
-
- /**
- * Get the state of the application instance.
- *
- * @return the state of the application.
- *
- * @throws IllegalStateException
- * if the application handle is unregistered
- */
- public abstract String getState();
-
- /**
- * Returns the exit value for the application instance. The timeout
- * specifies how the method behaves when the application has not yet
- * terminated. A negative, zero or positive value may be used.
- * <ul>
- * <li> negative - The method does not wait for termination. If the
- * application has not terminated then an {@code ApplicationException}
- * is thrown.</li>
- *
- * <li> zero - The method waits until the application terminates.</li>
- *
- * <li> positive - The method waits until the application terminates or the
- * timeout expires. If the timeout expires and the application has not
- * terminated then an {@code ApplicationException} is thrown.</li>
- * </ul>
- * <p>
- * The default implementation throws an
- * {@code UnsupportedOperationException}. The application model should
- * override this method if exit values are supported.
- * </p>
- *
- * @param timeout The maximum time in milliseconds to wait for the
- * application to timeout.
- * @return The exit value for the application instance. The value is
- * application specific.
- * @throws UnsupportedOperationException If the application model does not
- * support exit values.
- * @throws InterruptedException If the thread is interrupted while waiting
- * for the timeout.
- * @throws ApplicationException If the application has not terminated. The
- * error code will be
- * {@link ApplicationException#APPLICATION_EXITVALUE_NOT_AVAILABLE}.
- *
- * @since 1.1
- */
- public Object getExitValue(long timeout) throws ApplicationException, InterruptedException {
- throw new UnsupportedOperationException();
- }
-
- /**
- * Returns the unique identifier of this instance. This value is also
- * available as a service property of this application handle's service.pid.
- *
- * @return the unique identifier of the instance
- */
- public final String getInstanceId() {
- return instanceId;
- }
-
- /**
- * The application instance's lifecycle state can be influenced by this
- * method. It lets the application instance perform operations to stop
- * the application safely, e.g. saving its state to a permanent storage.
- * <p>
- * The method must check if the lifecycle transition is valid; a STOPPING
- * application cannot be stopped. If it is invalid then the method must
- * exit. Otherwise the lifecycle state of the application instance must be
- * set to STOPPING. Then the destroySpecific() method must be called to
- * perform any application model specific steps for safe stopping of the
- * represented application instance.
- * <p>
- * At the end the {@code ApplicationHandle} must be unregistered.
- * This method should free all the resources related to this
- * {@code ApplicationHandle}.
- * <p>
- * When this method is completed the application instance has already made
- * its operations for safe stopping, the ApplicationHandle has been
- * unregistered and its related resources has been freed. Further calls on
- * this application should not be made because they may have unexpected
- * results.
- *
- * @throws SecurityException
- * if the caller doesn't have "lifecycle"
- * {@code ApplicationAdminPermission} for the corresponding application.
- *
- * @throws IllegalStateException
- * if the application handle is unregistered
- */
- public final void destroy() {
- if (STOPPING.equals(getState()))
- return;
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(new ApplicationAdminPermission(getApplicationDescriptor(), ApplicationAdminPermission.LIFECYCLE_ACTION));
- destroySpecific();
- }
-
- /**
- * Called by the destroy() method to perform application model specific
- * steps to stop and destroy an application instance safely.
- *
- * @throws IllegalStateException
- * if the application handle is unregistered
- */
- protected abstract void destroySpecific();
-
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
deleted file mode 100644
index f3385ad4c..000000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2004, 2010). All Rights Reserved.
- *
- * 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.osgi.service.application;
-
-import java.util.Map;
-
-/**
- * It is allowed to schedule an application based on a specific event.
- * ScheduledApplication service keeps the schedule information. When the
- * specified event is fired a new instance must be launched. Note that launching
- * operation may fail because e.g. the application is locked.
- * <p>
- * Each {@code ScheduledApplication} instance has an identifier which is
- * unique within the scope of the application being scheduled.
- * <p>
- * {@code ScheduledApplication} instances are registered as services. The
- * {@link #APPLICATION_PID} service property contains the PID of the application
- * being scheduled, the {@link #SCHEDULE_ID} service property contains the
- * schedule identifier.
- *
- * @version $Id$
- */
-public interface ScheduledApplication {
-
- /**
- * The property key for the identifier of the application being scheduled.
- */
- public static final String APPLICATION_PID = ApplicationDescriptor.APPLICATION_PID;
-
- /**
- * The property key for the schedule identifier. The identifier is unique
- * within the scope of the application being scheduled.
- */
- public static final String SCHEDULE_ID = "schedule.id";
-
- /**
- * The key for the startup argument used to pass the event object that
- * triggered the schedule to launch the application instance.
- * The event is passed in a {@link java.security.GuardedObject}
- * protected by the corresponding
- * {@link org.osgi.service.event.TopicPermission}.
- */
- public static final String TRIGGERING_EVENT = "org.osgi.triggeringevent";
-
- /**
- * The topic name for the virtual timer topic. Time based schedules
- * should be created using this topic.
- */
- public static final String TIMER_TOPIC = "org/osgi/application/timer";
-
- /**
- * The name of the <i>year</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#YEAR}.
- */
- public static final String YEAR = "year";
-
- /**
- * The name of the <i>month</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#MONTH}.
- */
- public static final String MONTH = "month";
-
- /**
- * The name of the <i>day of month</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#DAY_OF_MONTH}.
- */
- public static final String DAY_OF_MONTH = "day_of_month";
-
- /**
- * The name of the <i>day of week</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#DAY_OF_WEEK}.
- */
- public static final String DAY_OF_WEEK = "day_of_week";
-
- /**
- * The name of the <i>hour of day</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#HOUR_OF_DAY}.
- */
- public static final String HOUR_OF_DAY = "hour_of_day";
-
- /**
- * The name of the <i>minute</i> attribute of a virtual timer event. The value is
- * defined by {@link java.util.Calendar#MINUTE}.
- */
- public static final String MINUTE = "minute";
-
-
- /**
- * Returns the identifier of this schedule. The identifier is unique within
- * the scope of the application that the schedule is related to.
- * @return the identifier of this schedule
- *
- */
- public String getScheduleId();
-
- /**
- * Queries the topic of the triggering event. The topic may contain a
- * trailing asterisk as wildcard.
- *
- * @return the topic of the triggering event
- *
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public String getTopic();
-
- /**
- * Queries the event filter for the triggering event.
- *
- * @return the event filter for triggering event
- *
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public String getEventFilter();
-
- /**
- * Queries if the schedule is recurring.
- *
- * @return true if the schedule is recurring, otherwise returns false
- *
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public boolean isRecurring();
-
- /**
- * Retrieves the ApplicationDescriptor which represents the application and
- * necessary for launching.
- *
- * @return the application descriptor that
- * represents the scheduled application
- *
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public ApplicationDescriptor getApplicationDescriptor();
-
- /**
- * Queries the startup arguments specified when the application was
- * scheduled. The method returns a copy of the arguments, it is not possible
- * to modify the arguments after scheduling.
- *
- * @return the startup arguments of the scheduled application. It may be
- * null if null argument was specified.
- *
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public Map getArguments();
-
- /**
- * Cancels this schedule of the application.
- *
- * @throws SecurityException
- * if the caller doesn't have "schedule"
- * ApplicationAdminPermission for the scheduled application.
- * @throws IllegalStateException
- * if the scheduled application service is unregistered
- */
- public void remove();
-}

Back to the top