/* @ITMillApache2LicenseForJavaFiles@ */ package com.vaadin.service; import java.io.File; import java.io.Serializable; import java.net.URL; import java.util.Collection; import com.vaadin.Application; import com.vaadin.terminal.ApplicationResource; import com.vaadin.terminal.gwt.server.AbstractCommunicationManager; /** * ApplicationContext provides information about the running * context of the application. Each context is shared by all applications that * are open for one user. In a web-environment this corresponds to a * HttpSession. * * @author IT Mill Ltd. * @version * @VERSION@ * @since 3.1 */ public interface ApplicationContext extends Serializable { /** * Returns application context base directory. * * Typically an application is deployed in a such way that is has an * application directory. For web applications this directory is the root * directory of the web applications. In some cases applications might not * have an application directory (for example web applications running * inside a war). * * @return The application base directory or null if the application has no * base directory. */ public File getBaseDirectory(); /** * Returns a collection of all the applications in this context. * * Each application context contains all active applications for one user. * * @return A collection containing all the applications in this context. */ public Collection getApplications(); /** * Adds a transaction listener to this context. The transaction listener is * called before and after each each request related to this session except * when serving static resources. * * The transaction listener must not be null. * * @see com.vaadin.service.ApplicationContext#addTransactionListener(com.vaadin.service.ApplicationContext.TransactionListener) */ public void addTransactionListener(TransactionListener listener); /** * Removes a transaction listener from this context. * * @param listener * the listener to be removed. * @see TransactionListener */ public void removeTransactionListener(TransactionListener listener); /** * Generate a URL that can be used as the relative location of e.g. an * {@link ApplicationResource}. * * This method should only be called from the processing of a UIDL request, * not from a background thread. The return value is null if used outside a * suitable request. * * @deprecated this method is intended for terminal implementation only and * is subject to change/removal from the interface (to * {@link AbstractCommunicationManager}) * * @param resource * @param urlKey * a key for the resource that can later be extracted from a URL * with {@link #getURLKey(URL, String)} */ @Deprecated public String generateApplicationResourceURL(ApplicationResource resource, String urlKey); /** * Tests if a URL is for an application resource (APP/...). * * @deprecated this method is intended for terminal implementation only and * is subject to change/removal from the interface (to * {@link AbstractCommunicationManager}) * * @param context * @param relativeUri * @return */ @Deprecated public boolean isApplicationResourceURL(URL context, String relativeUri); /** * Gets the identifier (key) from an application resource URL. This key is * the one that was given to * {@link #generateApplicationResourceURL(ApplicationResource, String)} when * creating the URL. * * @deprecated this method is intended for terminal implementation only and * is subject to change/removal from the interface (to * {@link AbstractCommunicationManager}) * * * @param context * @param relativeUri * @return */ @Deprecated public String getURLKey(URL context, String relativeUri); /** * Interface for listening to transaction events. Implement this interface * to listen to all transactions between the client and the application. * */ public interface TransactionListener extends Serializable { /** * Invoked at the beginning of every transaction. * * The transaction is linked to the context, not the application so if * you have multiple applications running in the same context you need * to check that the request is associated with the application you are * interested in. This can be done looking at the application parameter. * * @param application * the Application object. * @param transactionData * the Data identifying the transaction. */ public void transactionStart(Application application, Object transactionData); /** * Invoked at the end of every transaction. * * The transaction is linked to the context, not the application so if * you have multiple applications running in the same context you need * to check that the request is associated with the application you are * interested in. This can be done looking at the application parameter. * * @param applcation * the Application object. * @param transactionData * the Data identifying the transaction. */ public void transactionEnd(Application application, Object transactionData); } }