blob: 81e4be6a4a2928e91055f06c22c04557c931374a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.designtime.internal.view;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jst.jsf.common.internal.resource.ImmutableLifecycleListener;
import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
/**
* <p>
* Defines the basic interface for all design time view handlers that parallel
* custom runtime view handlers (extenders of ViewHandler).
* </p>
*
* @author cbateman
*
*/
public interface IDTViewHandler
{
/**
* <p>
* Creates and returns the view root. This method <i>may</i> optionally
* intialize the view root with any data that need only be done once per
* instance. Generally, this will include providing the root access to
* itself or its IViewDefnAdapterFactory so that it can refresh itself.
* </p>
*
* @param facesContext
* @param viewId
* @return a designtime view root instance of viewId under the given faces
* context
* @throws ViewHandlerException
*/
DTUIViewRoot createView(DTFacesContext facesContext, String viewId)
throws ViewHandlerException;
/**
* Calculate the locale for the current view context. The return string must
* conform to the standard format proscribed by java.util.Locale.
*
* @param context
* @return the locale string for the view definition referred to by context
* @throws ViewHandlerException
*/
String calculateLocale(DTFacesContext context) throws ViewHandlerException;
/**
* Given that resource is the view definition source and requestPath is the
* current servlet uri for a request relative to the web content root, map
* it to the actual request uri that would be required at runtime to invoke
* the view definition in resource. DTFacesContext will contain an external
* context that may be used to derive servlet mapping configuration.
*
* @param context
* @param resource
* @param requestPath
* @return the IPath representing the newly mapped request path
* @throws ViewHandlerException
*/
IPath getActionURL(DTFacesContext context, IResource resource,
IPath requestPath) throws ViewHandlerException;
/**
* TODO: if we already have context, must we already know what the source
* is?
*
* The IResource need not exist.
*
* @param context
* @param viewId
* @return the resource containing the view definition for viewId.
* @throws ViewHandlerException
*/
IResource getActionDefinition(DTFacesContext context, String viewId)
throws ViewHandlerException;
/**
* Given that a request is made for uri from within the view named by
* relativeToViewId at runtime, return the path to the resource containing
* that view definition. The path need not point to a resource that
* currently exists.
*
* @param context
* @param relativeToViewId
* @param uri
* @return the path to the resource named by uri relative to the view named
* by relativeToViewId
* @throws ViewHandlerException
*/
IPath getRelativeActionPath(DTFacesContext context,
String relativeToViewId, String uri) throws ViewHandlerException;
/**
* Translate a workspace resource to the view id it will have at runtime.
*
* @param context
* @param res
* @return the view id for res or null if there is no meaningful value
*/
String getViewId(DTFacesContext context, IResource res);
/**
* @param context
* @return a view definition adapter
* @throws ViewHandlerException
*/
IViewDefnAdapterFactory getViewMetadataAdapterFactory(DTFacesContext context)
throws ViewHandlerException;
/**
* @param file
* @return true if the contents of the file is of a format that this view
* handler supports. Generally, this is decided by a combination of
* content type and, in the case of XML formats, schema.
*/
boolean supportsViewDefinition(final IFile file);
/**
* Releases the handler's in-memory image.
*/
void dispose();
/**
* Called by design time app manager to set a global resource listener
* for the view handler to use. View handlers should generally use this
* listener to reduce the overhead of extra resouce change listeners.
*
* @param listener
*/
void setLifecycleListener(final ImmutableLifecycleListener listener);
/**
* General exception class for problems that a custom view handler wants to
* propagate to the framework in a well-defined way.
*
*/
public static final class ViewHandlerException extends Exception
{
private final Cause _causeCode;
/**
* Enumerates the known failure causes
*
*/
public enum Cause
{
/**
* thrown from getELExpression when the context passed does not
* refer to a parsable EL expression in the view definition
*/
EL_NOT_FOUND,
/**
* thrown from getELExpression when an exception occurs during EL
* parsing. The ViewHandlerException should wrap the causing
* exception in this cause
*/
EL_EXCEPTION_CAUGHT_WHILE_PARSING,
/**
* an undefined exception cause indicating something not foreseen by
* the framework.
*/
UNDEFINED,
/**
* indicates that a bad or null version stamp was encountered. The
* wrapped exception may provide tracing information to the cause.
*/
BAD_VERSION_STAMP,
/**
* indicates that a bad or null staleness advisor was encountered.
* The wrapped exception may provide tracing information to the
* cause.
*/
BAD_STALENESS_ADVISOR,
/**
* a general failure by the view creation to create a new view root.
*/
UNABLE_TO_CREATE_VIEW
}
/**
*
*/
private static final long serialVersionUID = 2109525340402345111L;
/**
* Construct an exception with an undefined cause
*/
public ViewHandlerException()
{
this(Cause.UNDEFINED);
}
/**
* @param cause
*/
public ViewHandlerException(final Cause cause)
{
super();
_causeCode = cause;
}
/**
* @param message
* @param caught
* @param cause
*/
public ViewHandlerException(final String message,
final Throwable caught, final Cause cause)
{
super(message, caught);
_causeCode = cause;
}
/**
* @param message
* @param cause
*/
public ViewHandlerException(final String message, final Cause cause)
{
super(message);
_causeCode = cause;
}
/**
* @param caught
* @param cause
*/
public ViewHandlerException(final Throwable caught, final Cause cause)
{
super(caught);
_causeCode = cause;
}
/**
* @return the cause code
*/
public final Cause getCauseCode()
{
return _causeCode;
}
}
}