blob: ec5a5fdf942263b890cfa790bfad79a0dd3e6916 [file] [log] [blame]
/*
* $Header: /cvshome/build/org.osgi.service.deploymentadmin/src/org/osgi/service/deploymentadmin/spi/ResourceProcessor.java,v 1.6 2006/07/11 13:19:02 hargrave Exp $
*
* Copyright (c) OSGi Alliance (2005, 2006). 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.deploymentadmin.spi;
import java.io.InputStream;
/**
* ResourceProcessor interface is implemented by processors handling resource files
* in deployment packages. Resource Processors expose their services as standard OSGi services.
* Bundles exporting the service may arrive in the deployment package (customizers) or may be
* preregistered (they are installed prevoiusly). Resource processors has to define the
* <code>service.pid</code> standard OSGi service property which should be a unique string.<p>
*
* The order of the method calls on a particular Resource Processor in case of install/update
* session is the following:<p>
*
* <ol>
* <li>{@link #begin(DeploymentSession)}</li>
* <li>{@link #process(String, InputStream)} calls till there are resources to process
* or {@link #rollback()} and the further steps are ignored</li>
* <li>{@link #dropped(String)} calls till there are resources to drop
* <li>{@link #prepare()}</li>
* <li>{@link #commit()} or {@link #rollback()}</li>
* </ol>
*
* The order of the method calls on a particular Resource Processor in case of uninstall
* session is the following:<p>
*
* <ol>
* <li>{@link #begin(DeploymentSession)}</li>
* <li>{@link #dropAllResources()} or {@link #rollback()} and the further steps are ignored</li>
* <li>{@link #prepare()}</li>
* <li>{@link #commit()} or {@link #rollback()}</li>
* </ol>
*/
public interface ResourceProcessor {
/**
* Called when the Deployment Admin starts a new operation on the given deployment package,
* and the resource processor is associated a resource within the package. Only one
* deployment package can be processed at a time.
*
* @param session object that represents the current session to the resource processor
* @see DeploymentSession
*/
void begin(DeploymentSession session);
/**
* Called when a resource is encountered in the deployment package for which this resource
* processor has been selected to handle the processing of that resource.
*
* @param name The name of the resource relative to the deployment package root directory.
* @param stream The stream for the resource.
* @throws ResourceProcessorException if the resource cannot be processed. Only
* {@link ResourceProcessorException#CODE_RESOURCE_SHARING_VIOLATION} and
* {@link ResourceProcessorException#CODE_OTHER_ERROR} error codes are allowed.
*/
void process(String name, InputStream stream) throws ResourceProcessorException;
/**
* Called when a resource, associated with a particular resource processor, had belonged to
* an earlier version of a deployment package but is not present in the current version of
* the deployment package. This provides an opportunity for the processor to cleanup any
* memory and persistent data being maintained for the particular resource.
* This method will only be called during "update" deployment sessions.
*
* @param resource the name of the resource to drop (it is the same as the value of the
* "Name" attribute in the deployment package's manifest)
* @throws ResourceProcessorException if the resource is not allowed to be dropped. Only the
* {@link ResourceProcessorException#CODE_OTHER_ERROR} error code is allowed
*/
void dropped(String resource) throws ResourceProcessorException;
/**
* This method is called during an "uninstall" deployment session.
* This method will be called on all resource processors that are associated with resources
* in the deployment package being uninstalled. This provides an opportunity for the processor
* to cleanup any memory and persistent data being maintained for the deployment package.
*
* @throws ResourceProcessorException if all resources could not be dropped. Only the
* {@link ResourceProcessorException#CODE_OTHER_ERROR} is allowed.
*/
void dropAllResources() throws ResourceProcessorException;
/**
* This method is called on the Resource Processor immediately before calling the
* <code>commit</code> method. The Resource Processor has to check whether it is able
* to commit the operations since the last <code>begin</code> method call. If it determines
* that it is not able to commit the changes, it has to raise a
* <code>ResourceProcessorException</code> with the {@link ResourceProcessorException#CODE_PREPARE}
* error code.
*
* @throws ResourceProcessorException if the resource processor is able to determine it is
* not able to commit. Only the {@link ResourceProcessorException#CODE_PREPARE} error
* code is allowed.
*/
void prepare() throws ResourceProcessorException;
/**
* Called when the processing of the current deployment package is finished.
* This method is called if the processing of the current deployment package was successful,
* and the changes must be made permanent.
*/
void commit();
/**
* Called when the processing of the current deployment package is finished.
* This method is called if the processing of the current deployment package was unsuccessful,
* and the changes made during the processing of the deployment package should be removed.
*/
void rollback();
/**
* Processing of a resource passed to the resource processor may take long.
* The <code>cancel()</code> method notifies the resource processor that it should
* interrupt the processing of the current resource. This method is called by the
* <code>DeploymentAdmin</code> implementation after the
* <code>DeploymentAdmin.cancel()</code> method is called.
*/
void cancel();
}