Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbateman2010-04-05 22:01:10 +0000
committercbateman2010-04-05 22:01:10 +0000
commit9c1f6987c43b0834125d610173686a5383091a65 (patch)
tree402d45c0ea83ad93c4f2ec8fa6f671cff6b50459
parent3e0e379b6796766f5ccceceaf5f8c02c299478c8 (diff)
downloadwebtools.jsf-9c1f6987c43b0834125d610173686a5383091a65.tar.gz
webtools.jsf-9c1f6987c43b0834125d610173686a5383091a65.tar.xz
webtools.jsf-9c1f6987c43b0834125d610173686a5383091a65.zip
Add substantial test coverage to the existing Facelet library location mechanism. Also makes major additions to the mock workspace context framework.
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF3
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/componentcore/AbstractVirtualComponentQuery.java51
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocator.java2
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocatorProvider.java72
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/ILocatorProvider.java25
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java54
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java27
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/ObjectManager.java36
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java27
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceSingletonObjectManager.java111
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/DefaultJSFAppConfigLocater.java3
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigUtils.java11
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/WebContentRelativeJSFAppConfigLocater.java3
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java2
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java2
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java5
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDRegistryManager.java1
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/.settings/org.eclipse.jdt.core.prefs4
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/facelet-taglib.xsd509
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/javaee_5.xsd2099
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/FaceletCorePlugin.java21
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/NamespaceCMAdapter.java12
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/strategy/MDExternalMetadataStrategy.java11
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletRegistryManager.java13
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletTagRegistry.java6
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/AbstractProjectTaglibDescriptorFactory.java16
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ContextParamSpecifiedFaceletTaglibLocator.java88
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagIndex.java101
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagRecord.java14
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IFaceletTagRecord.java12
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IProjectTaglibDescriptorFactory.java22
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JarFileFaceletTaglibLocator.java245
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ProjectTaglibDescriptor.java91
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/TagRecordFactory.java98
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/WebappConfiguration.java242
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/XMLBasedTagRecord.java4
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/validation/TaglibValidator.java10
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/ProjectTracker.java3
38 files changed, 1004 insertions, 3052 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
index d1bae9bef..48d19dbd9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
@@ -11,7 +11,8 @@ Export-Package: org.eclipse.jst.jsf.common;x-internal:=true,
org.eclipse.jst.jsf.common.facet.libraryprovider;x-internal:=true,
org.eclipse.jst.jsf.common.facet.libraryprovider.jsf;x-internal:=true,
org.eclipse.jst.jsf.common.internal;x-friends:="org.eclipse.jst.jsf.core",
- org.eclipse.jst.jsf.common.internal.locator;x-internal:=true,
+ org.eclipse.jst.jsf.common.internal.componentcore,
+ org.eclipse.jst.jsf.common.internal.locator;x-friends:="org.eclipse.jst.jsf.facelet.core,org.eclipse.jst.jsf.facelet.core.tests",
org.eclipse.jst.jsf.common.internal.managedobject;x-internal:=true,
org.eclipse.jst.jsf.common.internal.pde;x-internal:=true,
org.eclipse.jst.jsf.common.internal.policy;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/componentcore/AbstractVirtualComponentQuery.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/componentcore/AbstractVirtualComponentQuery.java
new file mode 100644
index 000000000..ae797b30f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/componentcore/AbstractVirtualComponentQuery.java
@@ -0,0 +1,51 @@
+package org.eclipse.jst.jsf.common.internal.componentcore;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+
+/**
+ * Wraps parts of the component core in a way that always PDE-free injection
+ * during test.
+ *
+ * @author cbateman
+ *
+ */
+public abstract class AbstractVirtualComponentQuery
+{
+ /**
+ * TODO: reconcile with duplicate. This was taken from JSFAppConfigUtils.
+ *
+ * Gets an IVirtualFolder instance which represents the root context's web
+ * content folder.
+ *
+ * @param project
+ * IProject instance for which to get the folder.
+ * @return IVirtualFolder instance which represents the root context's web
+ * content folder.
+ */
+ public abstract IVirtualFolder getWebContentFolder(IProject project);
+
+ /**
+ * The default implementation that makes static calls to ComponentCore.
+ * @author cbateman
+ *
+ */
+ public static class DefaultVirtualComponentQuery extends
+ AbstractVirtualComponentQuery
+ {
+ @Override
+ public IVirtualFolder getWebContentFolder(IProject project)
+ {
+ IVirtualFolder folder = null;
+ IVirtualComponent component = ComponentCore
+ .createComponent(project);
+ if (component != null)
+ {
+ folder = component.getRootFolder();
+ }
+ return folder;
+ }
+ }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocator.java
index 240657a97..4c654e2bf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocator.java
@@ -93,7 +93,7 @@ public abstract class AbstractLocator<LOCATORTYPE, CONTEXTTYPE, IDTYPE>
{
return doLocate(context);
}
- throw new IllegalArgumentException("Locator not started"); //$NON-NLS-1$
+ throw new IllegalStateException("Locator not started"); //$NON-NLS-1$
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocatorProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocatorProvider.java
new file mode 100644
index 000000000..edd77dc23
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/AbstractLocatorProvider.java
@@ -0,0 +1,72 @@
+package org.eclipse.jst.jsf.common.internal.locator;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The super-class of all ILocatorProvider's.
+ *
+ * @author cbateman
+ * @param <LOCATORTYPE>
+ *
+ */
+public abstract class AbstractLocatorProvider<LOCATORTYPE> implements ILocatorProvider<LOCATORTYPE>
+{
+ private boolean _isInit = false;
+
+ public void initialize()
+ {
+ doInitialize();
+ _isInit = true;
+ }
+
+ /**
+ * Overrride to do the init. You can override initialize if you want to
+ */
+ protected abstract void doInitialize();
+
+ public List<? extends LOCATORTYPE> getLocators()
+ {
+ if (!_isInit)
+ {
+ throw new IllegalStateException(
+ "initialize must be called before getLocators"); //$NON-NLS-1$
+ }
+ return doGetLocators();
+ }
+
+ /**
+ * @return the locators.
+ */
+ protected abstract List<? extends LOCATORTYPE> doGetLocators();
+
+ /**
+ * A default implementation of the provider that simply sits on a list
+ * of a locators.
+ *
+ * @param <LOCATORTYPE>
+ */
+ public static class DefaultLocatorProvider<LOCATORTYPE> extends AbstractLocatorProvider<LOCATORTYPE>
+ {
+ private final List<LOCATORTYPE> _locators;
+
+ /**
+ * @param locators
+ */
+ public DefaultLocatorProvider(List<LOCATORTYPE> locators)
+ {
+ _locators = locators;
+ }
+ @Override
+ protected void doInitialize()
+ {
+ // nothing to do.
+ }
+
+ @Override
+ protected List<? extends LOCATORTYPE> doGetLocators()
+ {
+ return Collections.unmodifiableList(_locators);
+ }
+ }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/ILocatorProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/ILocatorProvider.java
new file mode 100644
index 000000000..57472ad8e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/locator/ILocatorProvider.java
@@ -0,0 +1,25 @@
+package org.eclipse.jst.jsf.common.internal.locator;
+
+import java.util.List;
+
+/**
+ * An object that provides zero or more locators to a client.
+ *
+ * @author cbateman
+ * @param <LOCATORTYPE>
+ *
+ */
+public interface ILocatorProvider<LOCATORTYPE>
+{
+ /**
+ * Must be called before getLocators is called. Implementations MUST
+ * support multiple calls to initialize on the same instance but need not
+ * do anything on any of them.
+ */
+ void initialize();
+
+ /**
+ * @return the list of locators.
+ */
+ List<? extends LOCATORTYPE> getLocators();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java
index faa337a4b..a8ac64359 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java
@@ -10,24 +10,64 @@
*******************************************************************************/
package org.eclipse.jst.jsf.common.internal.managedobject;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+
/**
* Sub-class for managed objects.
+ *
+ */
+/**
+ * @author cbateman
*
*/
-public abstract class AbstractManagedObject implements IManagedObject
+public abstract class AbstractManagedObject implements IManagedObject
{
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#dispose()
+ /**
+ * Flag for checking disposal.
+ */
+ protected final AtomicBoolean _isDisposed = new AtomicBoolean(false);
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#dispose
+ * ()
*/
public abstract void dispose();
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#checkpoint()
+ public boolean isDisposed()
+ {
+ return _isDisposed.get();
+ }
+
+ /**
+ * Checks if this object is disposed and throws IllegalStateException if it
+ * is.
+ */
+ protected final void assertNotDisposed()
+ {
+ if (isDisposed())
+ {
+ throw new IllegalStateException(this.toString() + " is disposed"); //$NON-NLS-1$
+ }
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#checkpoint
+ * ()
*/
public abstract void checkpoint();
- /* (non-Javadoc)
- * @see org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#destroy()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#destroy
+ * ()
*/
public abstract void destroy();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java
index b4e7e7542..2c43679c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java
@@ -14,30 +14,35 @@ package org.eclipse.jst.jsf.common.internal.managedobject;
* Represents an object that wishes to be managed by the framework.
*
* Clients should not implement: sub-class AbstractManagedObject instead.
- *
+ *
*/
-public interface IManagedObject
+public interface IManagedObject
{
/**
- * Called by the object client to indicate is finished with the object.
- * The object should save any data it may want between sessions, perhaps
- * by calling its checkpoint, before cleaning held resources and clearing
+ * Called by the object client to indicate is finished with the object. The
+ * object should save any data it may want between sessions, perhaps by
+ * calling its checkpoint, before cleaning held resources and clearing
* memory references.
*/
void dispose();
-
+
+ /**
+ * @return true if dispose has been successfully called on the object.
+ */
+ boolean isDisposed();
+
/**
* Called to indicate that the object should remove all its data from both
- * memory and persistent storage. This differentiates it from dispose in
+ * memory and persistent storage. This differentiates it from dispose in
* that it signals that this object and its associated state will never
* again be loaded for associated objects.
*/
void destroy();
-
+
/**
- * Indicates that an object should flush cached data and make durable
- * any data it might want between sessions. It does not indicate a
- * disposal of the object.
+ * Indicates that an object should flush cached data and make durable any
+ * data it might want between sessions. It does not indicate a disposal of
+ * the object.
*/
void checkpoint();
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/ObjectManager.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/ObjectManager.java
index f98fe9dda..569517099 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/ObjectManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/ObjectManager.java
@@ -10,30 +10,44 @@
*******************************************************************************/
package org.eclipse.jst.jsf.common.internal.managedobject;
+
/**
* An abstraction for a manager that manages managed objects based on a KEYTYPE
*
* @author cbateman
- *
+ *
* @param <T>
- * @param <KEYTYPE>
+ * @param <KEYTYPE>
*/
-public abstract class ObjectManager<T extends IManagedObject, KEYTYPE>
+public abstract class ObjectManager<T extends IManagedObject, KEYTYPE> extends
+ AbstractManagedObject
{
+
/**
- * A valid instance of T for the key. The instance of T may be unique on
- * a per-key basis or may not.
- *
+ * A valid instance of T for the key. The instance of T may be unique on a
+ * per-key basis or may not.
+ *
* @param key
* @return an instance of the managed object associated with key
- * @throws ManagedObjectException if an error occurs during construction
+ * @throws ManagedObjectException
+ * if an error occurs during construction
*/
public abstract T getInstance(KEYTYPE key) throws ManagedObjectException;
+ @Override
+ public abstract void destroy();
+
+ @Override
+ public abstract void checkpoint();
+
+ @Override
+ public abstract void dispose();
+
/**
* Indicates a problem that occurred during a managed object operation
+ *
* @author cbateman
- *
+ *
*/
public static class ManagedObjectException extends Exception
{
@@ -54,7 +68,7 @@ public abstract class ObjectManager<T extends IManagedObject, KEYTYPE>
* @param message
* @param cause
*/
- public ManagedObjectException(String message, Throwable cause)
+ public ManagedObjectException(final String message, final Throwable cause)
{
super(message, cause);
}
@@ -62,7 +76,7 @@ public abstract class ObjectManager<T extends IManagedObject, KEYTYPE>
/**
* @param message
*/
- public ManagedObjectException(String message)
+ public ManagedObjectException(final String message)
{
super(message);
}
@@ -70,7 +84,7 @@ public abstract class ObjectManager<T extends IManagedObject, KEYTYPE>
/**
* @param cause
*/
- public ManagedObjectException(Throwable cause)
+ public ManagedObjectException(final Throwable cause)
{
super(cause);
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
index 7655cf2a4..78265c40a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
@@ -19,7 +19,7 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.jst.jsf.common.internal.ITestTracker;
import org.eclipse.jst.jsf.common.internal.ITestTracker.Event;
import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener.EventResult;
@@ -43,6 +43,7 @@ public class LifecycleListener extends ImmutableLifecycleListener implements
private AtomicBoolean _isDisposed = new AtomicBoolean(
false);
private ITestTracker _testTracker; // ==
+ private final IWorkspace _workspace;
// null;
// initialized
// by
@@ -54,33 +55,37 @@ public class LifecycleListener extends ImmutableLifecycleListener implements
* be installed by this constructor. The object created using this
* constructor will not fire any events until addResource is called at least
* once to add a target resource
+ * @param workspace the workspace to listen to for changes.
*/
- public LifecycleListener()
+ public LifecycleListener(final IWorkspace workspace)
{
_resources = new CopyOnWriteArrayList<IResource>();
_listeners = new CopyOnWriteArrayList<IResourceLifecycleListener>();
+ _workspace = workspace;
}
/**
* Create a new lifecycle listener for the res
*
* @param res
+ * @param workspace the workspace to listen to for changes.
*/
- public LifecycleListener(final IResource res)
+ public LifecycleListener(final IResource res, final IWorkspace workspace)
{
- this();
+ this(workspace);
_resources.add(res);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+ workspace.addResourceChangeListener(this);
}
/**
* @param resources
+ * @param workspace the workspace to listen to for changes.
*/
- public LifecycleListener(final List<IResource> resources)
+ public LifecycleListener(final List<IResource> resources, final IWorkspace workspace)
{
- this();
+ this(workspace);
_resources.addAll(resources);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+ workspace.addResourceChangeListener(this);
}
/**
@@ -160,7 +165,7 @@ public class LifecycleListener extends ImmutableLifecycleListener implements
// and is now greater, make sure the listener is added
if (preSize == 0 && _resources.size() > 0)
{
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+ _workspace.addResourceChangeListener(this);
}
}
}
@@ -186,7 +191,7 @@ public class LifecycleListener extends ImmutableLifecycleListener implements
// remove the workspace listener
if (_resources.size() == 0)
{
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(
+ _workspace.removeResourceChangeListener(
this);
}
}
@@ -205,7 +210,7 @@ public class LifecycleListener extends ImmutableLifecycleListener implements
{
// remove first to minimize the chance that the listener will
// be triggered during the remainder of dispose
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(
+ _workspace.removeResourceChangeListener(
this);
_resources.clear();
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceSingletonObjectManager.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceSingletonObjectManager.java
index 903acc128..2dde95871 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceSingletonObjectManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceSingletonObjectManager.java
@@ -11,12 +11,13 @@
package org.eclipse.jst.jsf.common.internal.resource;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject;
import org.eclipse.jst.jsf.common.internal.managedobject.ObjectManager;
import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
@@ -38,20 +39,42 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
{
// lazily initialized
private LifecycleListener _lifecycleListener;
- private final Map<RESOURCE, ManagedResourceObject> _perResourceObjects;
+ final Map<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>> _perResourceObjects;
+ private final IWorkspace _workspace;
/**
* Default constructor
+ * @param workspace
*/
- protected ResourceSingletonObjectManager()
+ protected ResourceSingletonObjectManager(final IWorkspace workspace)
{
- _perResourceObjects = new HashMap<RESOURCE, ManagedResourceObject>();
+ _workspace = workspace;
+ _perResourceObjects = new HashMap<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>>();
+ }
+
+ /**
+ * @return the workspace
+ */
+ protected final IWorkspace getWorkspace()
+ {
+ return _workspace;
+ }
+
+
+ /**
+ * @return an unmodifiable view on the map of currently managed objects keyed
+ * by the resource they are mapped to.
+ */
+ protected final Map<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>> getPerResourceObjects()
+ {
+ return Collections.unmodifiableMap(_perResourceObjects);
}
@Override
public final MANAGEDOBJECT getInstance(final RESOURCE key)
throws ManagedObjectException
{
+ assertNotDisposed();
synchronized(this)
{
runBeforeGetInstance(key);
@@ -70,7 +93,7 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
}
runAfterGetInstance(key);
- return managedResObject.getManagedObject();
+ return (MANAGEDOBJECT) managedResObject.getManagedObject();
}
}
@@ -105,6 +128,7 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
*/
public synchronized boolean isInstance(RESOURCE resource)
{
+ assertNotDisposed();
return _perResourceObjects.containsKey(resource);
}
@@ -115,8 +139,8 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
*/
public synchronized Collection<RESOURCE> getManagedResources()
{
- final Set resources = new HashSet(_perResourceObjects.keySet());
- return resources;
+ assertNotDisposed();
+ return new HashSet(_perResourceObjects.keySet());
}
/**
* Should be called by concrete classes to indicate they have created a new
@@ -131,11 +155,12 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
{
final LifecycleListener listener = lazilyGetLifecycleListener();
listener.addResource(resource);
- final MyLifecycleEventListener eventListener = new MyLifecycleEventListener(
- managedObject, resource);
+ final MyLifecycleEventListener<RESOURCE, MANAGEDOBJECT> eventListener =
+ new MyLifecycleEventListener<RESOURCE, MANAGEDOBJECT>(
+ this, managedObject, resource);
listener.addListener(eventListener);
- final ManagedResourceObject managedResourceObject = new ManagedResourceObject(
+ final ManagedResourceObject<MANAGEDOBJECT> managedResourceObject = new ManagedResourceObject<MANAGEDOBJECT>(
managedObject, eventListener);
_perResourceObjects.put(resource, managedResourceObject);
return managedResourceObject;
@@ -147,8 +172,10 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
* manageResource is called).
*
* @param resource
+ * @return the managed object that has just be disassociated from the resource.
+ * The object is not disposed, destroyed or checkpointed before being returned.
*/
- protected final synchronized void unmanageResource(final RESOURCE resource)
+ protected final synchronized MANAGEDOBJECT unmanageResource(final RESOURCE resource)
{
final ManagedResourceObject managedResourceObject =
_perResourceObjects.remove(resource);
@@ -160,6 +187,7 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
}
listener.removeResource(resource);
+ return (MANAGEDOBJECT) managedResourceObject.getManagedObject();
}
/**
@@ -170,6 +198,7 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
protected final void addLifecycleEventListener(
final IResourceLifecycleListener listener)
{
+ assertNotDisposed();
final LifecycleListener lifecycleListener = lazilyGetLifecycleListener();
lifecycleListener.addListener(listener);
}
@@ -190,12 +219,12 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
{
if (_lifecycleListener == null)
{
- _lifecycleListener = new LifecycleListener();
+ _lifecycleListener = new LifecycleListener(_workspace);
}
return _lifecycleListener;
}
- private class ManagedResourceObject
+ /*package*/ static class ManagedResourceObject<MANAGEDOBJECT extends IManagedObject>
{
private final MANAGEDOBJECT _managedObject;
private final MyLifecycleEventListener _eventListener;
@@ -218,17 +247,20 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
}
}
- private class MyLifecycleEventListener implements
+ private static class MyLifecycleEventListener<RESOURCE extends IResource, MANAGEDOBJECT extends IManagedObject> implements
IResourceLifecycleListener
{
private final RESOURCE _resource;
private final MANAGEDOBJECT _managedObject;
+ private final ResourceSingletonObjectManager<MANAGEDOBJECT, RESOURCE> _target;
- private MyLifecycleEventListener(final MANAGEDOBJECT managedObject,
+ private MyLifecycleEventListener(final ResourceSingletonObjectManager<MANAGEDOBJECT, RESOURCE> target,
+ final MANAGEDOBJECT managedObject,
final RESOURCE resource)
{
_resource = resource;
_managedObject = managedObject;
+ _target = target;
}
public EventResult acceptEvent(final ResourceLifecycleEvent event)
@@ -259,10 +291,57 @@ public abstract class ResourceSingletonObjectManager<MANAGEDOBJECT extends IMana
// unmanage gets called if it blows up.
finally
{
- unmanageResource(_resource);
+ _target.unmanageResource(_resource);
}
}
return result;
}
}
+
+
+ /**
+ * Unmanages all resources and calls checkpoint and dispose on all managed
+ * objects. After this call, other methods my throw exception is called.
+ *
+ * Sub-class may override, but should always call dispose after disposing
+ * their own specialized state.
+ */
+ @Override
+ public void dispose()
+ {
+ if (_isDisposed.compareAndSet(false, true))
+ {
+ // TODO: implement a better lock strategy on resource manager
+ synchronized (this)
+ {
+ Map<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>> copy = new HashMap<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>>(
+ getPerResourceObjects());
+
+ for (Map.Entry<RESOURCE, ManagedResourceObject<MANAGEDOBJECT>> entry : copy.entrySet())
+ {
+ RESOURCE res = entry.getKey();
+ MANAGEDOBJECT unmanagedResource = unmanageResource(res);
+ unmanagedResource.checkpoint();
+ unmanagedResource.dispose();
+ }
+ _perResourceObjects.clear();
+ if (_lifecycleListener != null)
+ {
+ _lifecycleListener.dispose();
+ }
+ }
+ }
+ }
+
+ @Override
+ public void destroy()
+ {
+ // do nothing by default
+ }
+
+ @Override
+ public void checkpoint()
+ {
+ // do nothing by default
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/DefaultJSFAppConfigLocater.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/DefaultJSFAppConfigLocater.java
index 4cc953df5..415894c19 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/DefaultJSFAppConfigLocater.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/DefaultJSFAppConfigLocater.java
@@ -23,6 +23,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery.DefaultVirtualComponentQuery;
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
@@ -134,7 +135,7 @@ public class DefaultJSFAppConfigLocater extends WebContentRelativeJSFAppConfigLo
if (defConfigPath == null) {
IProject project = manager.getProject();
if (project != null) {
- IVirtualFolder webContentFolder = JSFAppConfigUtils.getWebContentFolder(project);
+ IVirtualFolder webContentFolder = new DefaultVirtualComponentQuery().getWebContentFolder(project);
if (webContentFolder != null) {
IVirtualResource defConfigFile = webContentFolder.findMember(DEF_APPCONFIGRESOURCE_FILENAME);
if (defConfigFile != null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigUtils.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigUtils.java
index c74b44e08..38dd45a08 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigUtils.java
@@ -41,12 +41,11 @@ import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
import org.eclipse.jst.j2ee.webapplication.ContextParam;
import org.eclipse.jst.j2ee.webapplication.WebApp;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery.DefaultVirtualComponentQuery;
import org.eclipse.jst.jsf.core.IJSFCoreConstants;
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
import org.eclipse.jst.jsf.core.internal.Messages;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
@@ -170,14 +169,10 @@ public class JSFAppConfigUtils {
* @param project IProject instance for which to get the folder.
* @return IVirtualFolder instance which represents the root context's
* web content folder.
+ * @deprecated Call DefaultVirtualComponentQuery.getWebContentFolder instead
*/
public static IVirtualFolder getWebContentFolder(IProject project) {
- IVirtualFolder folder = null;
- IVirtualComponent component = ComponentCore.createComponent(project);
- if (component != null) {
- folder = component.getRootFolder();
- }
- return folder;
+ return new DefaultVirtualComponentQuery().getWebContentFolder(project);
}
/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/WebContentRelativeJSFAppConfigLocater.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/WebContentRelativeJSFAppConfigLocater.java
index 4359d216c..3f53e57a1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/WebContentRelativeJSFAppConfigLocater.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/WebContentRelativeJSFAppConfigLocater.java
@@ -17,6 +17,7 @@ import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery.DefaultVirtualComponentQuery;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
@@ -40,7 +41,7 @@ public abstract class WebContentRelativeJSFAppConfigLocater extends AbstractJSFA
*/
public void locateProviders() {
IProject project = manager.getProject();
- IVirtualFolder webContentFolder = JSFAppConfigUtils.getWebContentFolder(project);
+ IVirtualFolder webContentFolder = new DefaultVirtualComponentQuery().getWebContentFolder(project);
if (webContentFolder != null) {
List filenames = getFilenames();
Iterator itFilenames = filenames.iterator();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
index 003fdf983..5b10e9c30 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
@@ -232,7 +232,7 @@ public final class DesignTimeApplicationManager
_project = project;
_locator = new MyExternalContextFactoryLocator();
_isDisposed = new AtomicBoolean();
- _lifecycleListener = new LifecycleListener(_project);
+ _lifecycleListener = new LifecycleListener(_project, ResourcesPlugin.getWorkspace());
_lifecycleListener.addListener(new IResourceLifecycleListener()
{
public EventResult acceptEvent(final ResourceLifecycleEvent event)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
index b669ad19d..33b69146e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
@@ -141,7 +141,7 @@ public class JSPModelProcessor
{
if (LIFECYCLE_LISTENER == null)
{
- LIFECYCLE_LISTENER = new LifecycleListener(file);
+ LIFECYCLE_LISTENER = new LifecycleListener(file, ResourcesPlugin.getWorkspace());
}
else
{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
index 4a70ce062..c819690d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
@@ -24,6 +24,7 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jdt.core.JavaModelException;
@@ -146,7 +147,7 @@ class ResourceBundleMapSource extends AbstractMap implements IMapSourceInfo
if (bundleFileCache == null)
{
bundleFileCache = new HashMap<String, BundleFileCacheInfo>();
- final LifecycleListener listener = new LifecycleListener(project);
+ final LifecycleListener listener = new LifecycleListener(project, ResourcesPlugin.getWorkspace());
listener.addListener(new IResourceLifecycleListener()
{
public EventResult acceptEvent(final ResourceLifecycleEvent event)
@@ -208,7 +209,7 @@ class ResourceBundleMapSource extends AbstractMap implements IMapSourceInfo
{
bundleRes = (IFile) storage.getAdapter(IFile.class);
// if file is removed, clear the bundle from the store.
- final LifecycleListener listener = new LifecycleListener(bundleRes);
+ final LifecycleListener listener = new LifecycleListener(bundleRes, ResourcesPlugin.getWorkspace());
listener.addListener(new IResourceLifecycleListener()
{
public EventResult acceptEvent(final ResourceLifecycleEvent event)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDRegistryManager.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDRegistryManager.java
index e247b3725..d5f29ca60 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDRegistryManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDRegistryManager.java
@@ -61,6 +61,7 @@ public final class TLDRegistryManager extends
private TLDRegistryManager()
{
+ super(ResourcesPlugin.getWorkspace());
final ISaveParticipant participant = new MyWorkspaceSaveParticipant();
try
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/.settings/org.eclipse.jdt.core.prefs
index ddb8182d7..c5df725d2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Fri Mar 12 08:05:32 PST 2010
+#Thu Apr 01 09:26:55 PDT 2010
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -13,7 +13,7 @@ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.autoboxing=warning
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=error
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/facelet-taglib.xsd b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/facelet-taglib.xsd
deleted file mode 100644
index 0184ab54c..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/facelet-taglib.xsd
+++ /dev/null
@@ -1,509 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-<xsd:schema
- targetNamespace="http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0"
- elementFormDefault="qualified"
- attributeFormDefault="unqualified"
- version="2.0" xmlns:javaee="http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace">
- <xsd:include schemaLocation="javaee_5.xsd"/>
-
- <xsd:annotation>
- <xsd:documentation>
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the
- GNU General Public License Version 2 only ("GPL") or the Common
- Development and Distribution License("CDDL") (collectively, the
- "License"). You may not use this file except in compliance with
- the License. You can obtain a copy of the License at
- https://glassfish.dev.java.net/public/CDDL+GPL.html or
- glassfish/bootstrap/legal/LICENSE.txt. See the License for the
- specific language governing permissions and limitations under the
- License.
-
- When distributing the software, include this License Header
- Notice in each file and include the License file at
- glassfish/bootstrap/legal/LICENSE.txt. Sun designates this
- particular file as subject to the "Classpath" exception as
- provided by Sun in the GPL Version 2 section of the License file
- that accompanied this code. If applicable, add the following
- below the License Header, with the fields enclosed by brackets []
- replaced by your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the
- CDDL or only the GPL Version 2, indicate your decision by adding
- "[Contributor] elects to include this software in this
- distribution under the [CDDL or GPL Version 2] license." If you
- don't indicate a single choice of license, a recipient has the
- option to distribute your version of this file under either the
- CDDL, the GPL Version 2 or to extend the choice of license to its
- licensees as provided above. However, if you add GPL Version 2
- code and therefore, elected the GPL Version 2 license, then the
- option applies only if the new code is made subject to such
- option by the copyright holder.
-
- </xsd:documentation>
- </xsd:annotation>
-
-<xsd:annotation>
- <xsd:documentation>
-
- <![CDATA[
-
- The XML Schema for the Tag Libraries in the JavaServer Faces
- Standard Facelets View Declaration Language (Facelets VDL)
- (Version 2.0).
-
- JSF 2.0 Facelet Tag Libraries that wish to conform to this
- schema must declare it in the following manner.
-
- <facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd"
- version="2.0">
-
- ...
-
- </facelet-taglib>
-
- The instance documents may indicate the published
- version of the schema using xsi:schemaLocation attribute
- for javaee namespace with the following location:
-
- http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd
-
- ]]>
-
- </xsd:documentation>
- </xsd:annotation>
-
-
-
- <xsd:element name="facelet-taglib" type="javaee:facelet-taglibType">
- <xsd:unique name="facelet-taglib-tagname-uniqueness">
- <xsd:annotation>
- <xsd:documentation>
-
- tag-names must be unique within a document.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:selector xpath="javaee:tag"/>
- <xsd:field xpath="javaee:tag-name"/>
- </xsd:unique>
- <xsd:unique name="faces-config-behavior-ID-uniqueness">
- <xsd:annotation>
- <xsd:documentation>
-
- Behavior IDs must be unique within a document.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:selector xpath="javaee:behavior"/>
- <xsd:field xpath="javaee:behavior-id"/>
- </xsd:unique>
- <xsd:unique name="faces-config-converter-ID-uniqueness">
- <xsd:annotation>
- <xsd:documentation>
-
- Converter IDs must be unique within a document.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:selector xpath="javaee:converter"/>
- <xsd:field xpath="javaee:converter-id"/>
- </xsd:unique>
- <xsd:unique name="faces-config-validator-ID-uniqueness">
- <xsd:annotation>
- <xsd:documentation>
-
- Validator IDs must be unique within a document.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:selector xpath="javaee:validator"/>
- <xsd:field xpath="javaee:validator-id"/>
- </xsd:unique>
- </xsd:element>
- <xsd:complexType name="facelet-taglibType">
- <xsd:annotation>
- <xsd:documentation>
- The top level XML element in a facelet tag library XML file.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:choice>
- <xsd:element name="library-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:sequence>
- <xsd:element name="namespace" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="composite-library-name"
- type="javaee:fully-qualified-classType"/>
- <xsd:choice minOccurs="0" maxOccurs="unbounded">
- <xsd:element name="tag"
- type="javaee:facelet-taglib-tagType"/>
- <xsd:element name="function"
- type="javaee:facelet-taglib-functionType"/>
-
- </xsd:choice>
- </xsd:sequence>
- </xsd:choice>
- <xsd:element name="taglib-extension"
- type="javaee:facelet-taglib-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- <xsd:attribute name="version"
- type="javaee:facelet-taglib-versionType"
- use="required"/>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for facelet-taglib. It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
- <xsd:complexType name="facelet-taglib-tagType">
- <xsd:annotation>
- <xsd:documentation>
- If the tag library XML file contains individual tag
- declarations rather than pointing to a library-class or a
- declaring a composite-library name, the individual tags are
- enclosed in tag elements.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="tag-name"
- type="javaee:facelet-taglib-canonical-nameType"/>
- <xsd:choice>
- <xsd:element name="handler-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="behavior"
- type="javaee:facelet-taglib-tag-behaviorType"/>
- <xsd:element name="component"
- type="javaee:facelet-taglib-tag-componentType"/>
- <xsd:element name="converter"
- type="javaee:facelet-taglib-tag-converterType"/>
- <xsd:element name="validator"
- type="javaee:facelet-taglib-tag-validatorType"/>
- <xsd:element name="source" type="javaee:string"/>
- </xsd:choice>
- <xsd:element name="attribute"
- type="javaee:facelet-taglib-tag-attributeType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="tag-extension"
- type="javaee:facelet-taglib-tag-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
-
- <!-- **************************************************** -->
-
- <xsd:complexType name="facelet-taglib-tag-attributeType">
- <xsd:annotation>
- <xsd:documentation>
-
- The attribute element defines an attribute for the nesting
- tag. The attribute element may have several subelements
- defining:
-
- description a description of the attribute
-
- name the name of the attribute
-
- required whether the attribute is required or
- optional
-
- type the type of the attribute
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="name"
- type="javaee:xsdNMTOKENType"/>
- <xsd:element name="required"
- type="javaee:generic-booleanType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- Defines if the nesting attribute is required or
- optional.
-
- If not present then the default is "false", i.e
- the attribute is optional.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:choice>
- <xsd:element name="type"
- type="javaee:fully-qualified-classType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- Defines the Java type of the attributes
- value. If this element is omitted, the
- expected type is assumed to be
- "java.lang.Object".
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="method-signature"
- type="javaee:string"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- Defines the method signature for a MethodExpression-
- enabled attribute.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:choice>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-
- <xsd:complexType name="facelet-taglib-tag-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for tag It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
- <xsd:complexType name="facelet-taglib-functionType">
- <xsd:annotation>
- <xsd:documentation>
- If the tag library XML file contains individual function
- declarations rather than pointing to a library-class or a
- declaring a composite-library name, the individual functions are
- enclosed in function elements.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="function-name" type="javaee:string"/>
- <xsd:element name="function-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="function-signature" type="javaee:string"/>
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-behaviorType">
- <xsd:annotation>
- <xsd:documentation>
- Within a tag element, the behavior element encapsulates
- information specific to a JSF Behavior.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element minOccurs="1" maxOccurs="1"
- name="behavior-id" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="handler-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="behavior-extension"
- type="javaee:facelet-taglib-tag-behavior-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-behavior-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for behavior. It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-componentType">
- <xsd:annotation>
- <xsd:documentation>
- Within a tag element, the component element encapsulates
- information specific to a JSF UIComponent.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="component-type" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="renderer-type" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="handler-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="component-extension"
- type="javaee:facelet-taglib-tag-component-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
-
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-component-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for component It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
- <xsd:complexType name="facelet-taglib-tag-converterType">
- <xsd:annotation>
- <xsd:documentation>
- Within a tag element, the converter element encapsulates
- information specific to a JSF Converter.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element minOccurs="1" maxOccurs="1"
- name="converter-id" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="handler-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="converter-extension"
- type="javaee:facelet-taglib-tag-converter-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-converter-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for converter It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
- <xsd:complexType name="facelet-taglib-tag-validatorType">
- <xsd:annotation>
- <xsd:documentation>
- Within a tag element, the validator element encapsulates
- information specific to a JSF Validator.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element minOccurs="1" maxOccurs="1"
- name="validator-id" type="javaee:string"/>
- <xsd:element minOccurs="0" maxOccurs="1"
- name="handler-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="validator-extension"
- type="javaee:facelet-taglib-tag-validator-extensionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
- <xsd:complexType name="facelet-taglib-tag-validator-extensionType">
- <xsd:annotation>
- <xsd:documentation>
- Extension element for validator It may contain
- implementation specific content.
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:any namespace="##any"
- processContents="lax"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
- <!-- **************************************************** -->
- <xsd:simpleType name="facelet-taglib-versionType">
- <xsd:annotation>
- <xsd:documentation>
- This type contains the recognized versions of
- facelet-taglib supported.
- </xsd:documentation>
- </xsd:annotation>
- <xsd:restriction base="xsd:token">
- <xsd:enumeration value="2.0"/>
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:complexType name="facelet-taglib-canonical-nameType">
-
- <xsd:annotation>
- <xsd:documentation>
-
- Defines the canonical name of a tag or attribute being
- defined.
-
- The name must conform to the lexical rules for an NCName
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:simpleContent>
- <xsd:extension base="xsd:NCName">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-</xsd:schema>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/javaee_5.xsd b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/javaee_5.xsd
deleted file mode 100644
index 52b390a4d..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/model/javaee_5.xsd
+++ /dev/null
@@ -1,2099 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsd:schema
- targetNamespace="http://java.sun.com/xml/ns/javaee"
- xmlns:javaee="http://java.sun.com/xml/ns/javaee"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- elementFormDefault="qualified"
- attributeFormDefault="unqualified"
- version="5">
- <xsd:annotation>
- <xsd:documentation>
- @(#)javaee_5.xsds 1.65 06/02/17
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:annotation>
- <xsd:documentation>
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
- Copyright 2003-2009 Sun Microsystems, Inc. All rights reserved.
-
- The contents of this file are subject to the terms of either the
- GNU General Public License Version 2 only ("GPL") or the Common
- Development and Distribution License("CDDL") (collectively, the
- "License"). You may not use this file except in compliance with
- the License. You can obtain a copy of the License at
- https://glassfish.dev.java.net/public/CDDL+GPL.html or
- glassfish/bootstrap/legal/LICENSE.txt. See the License for the
- specific language governing permissions and limitations under the
- License.
-
- When distributing the software, include this License Header
- Notice in each file and include the License file at
- glassfish/bootstrap/legal/LICENSE.txt. Sun designates this
- particular file as subject to the "Classpath" exception as
- provided by Sun in the GPL Version 2 section of the License file
- that accompanied this code. If applicable, add the following
- below the License Header, with the fields enclosed by brackets []
- replaced by your own identifying information:
- "Portions Copyrighted [year] [name of copyright owner]"
-
- Contributor(s):
-
- If you wish your version of this file to be governed by only the
- CDDL or only the GPL Version 2, indicate your decision by adding
- "[Contributor] elects to include this software in this
- distribution under the [CDDL or GPL Version 2] license." If you
- don't indicate a single choice of license, a recipient has the
- option to distribute your version of this file under either the
- CDDL, the GPL Version 2 or to extend the choice of license to its
- licensees as provided above. However, if you add GPL Version 2
- code and therefore, elected the GPL Version 2 license, then the
- option applies only if the new code is made subject to such
- option by the copyright holder.
-
- </xsd:documentation>
- </xsd:annotation>
-<xsd:annotation>
-<xsd:documentation>
-
-The following definitions that appear in the common
-shareable schema(s) of J2EE deployment descriptors should be
-interpreted with respect to the context they are included:
-
-Deployment Component may indicate one of the following:
- j2ee application;
- application client;
- web application;
- enterprise bean;
- resource adapter;
-
-Deployment File may indicate one of the following:
- ear file;
- war file;
- jar file;
- rar file;
-
-</xsd:documentation>
-</xsd:annotation>
-
- <xsd:import namespace="http://www.w3.org/XML/1998/namespace"
- schemaLocation="http://www.w3.org/2001/xml.xsd"/>
-
-
-
-<!-- **************************************************** -->
-
- <xsd:group name="descriptionGroup">
- <xsd:annotation>
- <xsd:documentation>
-
- This group keeps the usage of the contained description related
- elements consistent across Java EE deployment descriptors.
-
- All elements may occur multiple times with different languages,
- to support localization of the content.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="display-name"
- type="javaee:display-nameType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="icon"
- type="javaee:iconType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:group>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="descriptionType">
- <xsd:annotation>
- <xsd:documentation>
-
- The description type is used by a description element to
- provide text describing the parent element. The elements
- that use this type should include any information that the
- Deployment Component's Deployment File file producer wants
- to provide to the consumer of the Deployment Component's
- Deployment File (i.e., to the Deployer). Typically, the
- tools used by such a Deployment File consumer will display
- the description when processing the parent element that
- contains the description.
-
- The lang attribute defines the language that the
- description is provided in. The default value is "en" (English).
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="javaee:xsdStringType">
- <xsd:attribute ref="xml:lang"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:simpleType name="dewey-versionType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type defines a dewey decimal that is used
- to describe versions of documents.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:restriction base="xsd:token">
- <xsd:pattern value="\.?[0-9]+(\.[0-9]+)*"/>
- </xsd:restriction>
- </xsd:simpleType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="display-nameType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The display-name type contains a short name that is intended
- to be displayed by tools. It is used by display-name
- elements. The display name need not be unique.
-
- Example:
-
- ...
- <display-name xml:lang="en">
- Employee Self Service
- </display-name>
-
- The value of the xml:lang attribute is "en" (English) by default.
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="javaee:string">
- <xsd:attribute ref="xml:lang"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="ejb-linkType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The ejb-linkType is used by ejb-link
- elements in the ejb-ref or ejb-local-ref elements to specify
- that an EJB reference is linked to enterprise bean.
-
- The value of the ejb-link element must be the ejb-name of an
- enterprise bean in the same ejb-jar file or in another ejb-jar
- file in the same Java EE application unit.
-
- Alternatively, the name in the ejb-link element may be
- composed of a path name specifying the ejb-jar containing the
- referenced enterprise bean with the ejb-name of the target
- bean appended and separated from the path name by "#". The
- path name is relative to the Deployment File containing
- Deployment Component that is referencing the enterprise
- bean. This allows multiple enterprise beans with the same
- ejb-name to be uniquely identified.
-
- Examples:
-
- <ejb-link>EmployeeRecord</ejb-link>
-
- <ejb-link>../products/product.jar#ProductEJB</ejb-link>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="ejb-local-refType">
- <xsd:annotation>
- <xsd:documentation>
-
- The ejb-local-refType is used by ejb-local-ref elements for
- the declaration of a reference to an enterprise bean's local
- home or to the local business interface of a 3.0 bean.
- The declaration consists of:
-
- - an optional description
- - the EJB reference name used in the code of the Deployment
- Component that's referencing the enterprise bean.
- - the optional expected type of the referenced enterprise bean
- - the optional expected local interface of the referenced
- enterprise bean or the local business interface of the
- referenced enterprise bean.
- - the optional expected local home interface of the referenced
- enterprise bean. Not applicable if this ejb-local-ref refers
- to the local business interface of a 3.0 bean.
- - optional ejb-link information, used to specify the
- referenced enterprise bean
- - optional elements to define injection of the named enterprise
- bean into a component field or property.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="ejb-ref-name"
- type="javaee:ejb-ref-nameType"/>
- <xsd:element name="ejb-ref-type"
- type="javaee:ejb-ref-typeType"
- minOccurs="0"/>
- <xsd:element name="local-home"
- type="javaee:local-homeType"
- minOccurs="0"/>
- <xsd:element name="local"
- type="javaee:localType"
- minOccurs="0"/>
- <xsd:element name="ejb-link"
- type="javaee:ejb-linkType"
- minOccurs="0"/>
- <xsd:group ref="javaee:resourceGroup"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="ejb-ref-nameType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The ejb-ref-name element contains the name of an EJB
- reference. The EJB reference is an entry in the
- Deployment Component's environment and is relative to the
- java:comp/env context. The name must be unique within the
- Deployment Component.
-
- It is recommended that name is prefixed with "ejb/".
-
- Example:
-
- <ejb-ref-name>ejb/Payroll</ejb-ref-name>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:jndi-nameType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="ejb-ref-typeType">
- <xsd:annotation>
- <xsd:documentation>
-
- The ejb-ref-typeType contains the expected type of the
- referenced enterprise bean.
-
- The ejb-ref-type designates a value
- that must be one of the following:
-
- Entity
- Session
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="Entity"/>
- <xsd:enumeration value="Session"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="ejb-refType">
- <xsd:annotation>
- <xsd:documentation>
-
- The ejb-refType is used by ejb-ref elements for the
- declaration of a reference to an enterprise bean's home or
- to the remote business interface of a 3.0 bean.
- The declaration consists of:
-
- - an optional description
- - the EJB reference name used in the code of
- the Deployment Component that's referencing the enterprise
- bean.
- - the optional expected type of the referenced enterprise bean
- - the optional remote interface of the referenced enterprise bean
- or the remote business interface of the referenced enterprise
- bean
- - the optional expected home interface of the referenced
- enterprise bean. Not applicable if this ejb-ref
- refers to the remote business interface of a 3.0 bean.
- - optional ejb-link information, used to specify the
- referenced enterprise bean
- - optional elements to define injection of the named enterprise
- bean into a component field or property
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="ejb-ref-name"
- type="javaee:ejb-ref-nameType"/>
- <xsd:element name="ejb-ref-type"
- type="javaee:ejb-ref-typeType"
- minOccurs="0"/>
- <xsd:element name="home"
- type="javaee:homeType"
- minOccurs="0"/>
- <xsd:element name="remote"
- type="javaee:remoteType"
- minOccurs="0"/>
- <xsd:element name="ejb-link"
- type="javaee:ejb-linkType"
- minOccurs="0"/>
- <xsd:group ref="javaee:resourceGroup"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="emptyType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type is used to designate an empty
- element when used.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="env-entry-type-valuesType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- This type contains the fully-qualified Java type of the
- environment entry value that is expected by the
- application's code.
-
- The following are the legal values of env-entry-type-valuesType:
-
- java.lang.Boolean
- java.lang.Byte
- java.lang.Character
- java.lang.String
- java.lang.Short
- java.lang.Integer
- java.lang.Long
- java.lang.Float
- java.lang.Double
-
- Example:
-
- <env-entry-type>java.lang.Boolean</env-entry-type>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="java.lang.Boolean"/>
- <xsd:enumeration value="java.lang.Byte"/>
- <xsd:enumeration value="java.lang.Character"/>
- <xsd:enumeration value="java.lang.String"/>
- <xsd:enumeration value="java.lang.Short"/>
- <xsd:enumeration value="java.lang.Integer"/>
- <xsd:enumeration value="java.lang.Long"/>
- <xsd:enumeration value="java.lang.Float"/>
- <xsd:enumeration value="java.lang.Double"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="env-entryType">
- <xsd:annotation>
- <xsd:documentation>
-
- The env-entryType is used to declare an application's
- environment entry. The declaration consists of an optional
- description, the name of the environment entry, a type
- (optional if the value is injected, otherwise required), and
- an optional value.
-
- It also includes optional elements to define injection of
- the named resource into fields or JavaBeans properties.
-
- If a value is not specified and injection is requested,
- no injection will occur and no entry of the specified name
- will be created. This allows an initial value to be
- specified in the source code without being incorrectly
- changed when no override has been specified.
-
- If a value is not specified and no injection is requested,
- a value must be supplied during deployment.
-
- This type is used by env-entry elements.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="env-entry-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The env-entry-name element contains the name of a
- Deployment Component's environment entry. The name
- is a JNDI name relative to the java:comp/env
- context. The name must be unique within a
- Deployment Component. The uniqueness
- constraints must be defined within the declared
- context.
-
- Example:
-
- <env-entry-name>minAmount</env-entry-name>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="env-entry-type"
- type="javaee:env-entry-type-valuesType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The env-entry-type element contains the Java language
- type of the environment entry. If an injection target
- is specified for the environment entry, the type may
- be omitted, or must match the type of the injection
- target. If no injection target is specified, the type
- is required.
-
- Example:
-
- <env-entry-type>java.lang.Integer</env-entry-type>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="env-entry-value"
- type="javaee:xsdStringType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The env-entry-value designates the value of a
- Deployment Component's environment entry. The value
- must be a String that is valid for the
- constructor of the specified type that takes a
- single String parameter, or for java.lang.Character,
- a single character.
-
- Example:
-
- <env-entry-value>100.00</env-entry-value>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="fully-qualified-classType">
- <xsd:annotation>
- <xsd:documentation>
-
- The elements that use this type designate the name of a
- Java class or interface. The name is in the form of a
- "binary name", as defined in the JLS. This is the form
- of name used in Class.forName(). Tools that need the
- canonical name (the name used in source code) will need
- to convert this binary name to the canonical name.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="generic-booleanType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type defines four different values which can designate
- boolean values. This includes values yes and no which are
- not designated by xsd:boolean
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="true"/>
- <xsd:enumeration value="false"/>
- <xsd:enumeration value="yes"/>
- <xsd:enumeration value="no"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="homeType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The homeType defines the fully-qualified name of
- an enterprise bean's home interface.
-
- Example:
-
- <home>com.aardvark.payroll.PayrollHome</home>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:fully-qualified-classType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="iconType">
- <xsd:annotation>
- <xsd:documentation>
-
- The icon type contains small-icon and large-icon elements
- that specify the file names for small and large GIF, JPEG,
- or PNG icon images used to represent the parent element in a
- GUI tool.
-
- The xml:lang attribute defines the language that the
- icon file names are provided in. Its value is "en" (English)
- by default.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="small-icon" type="javaee:pathType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The small-icon element contains the name of a file
- containing a small (16 x 16) icon image. The file
- name is a relative path within the Deployment
- Component's Deployment File.
-
- The image may be in the GIF, JPEG, or PNG format.
- The icon can be used by tools.
-
- Example:
-
- <small-icon>employee-service-icon16x16.jpg</small-icon>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="large-icon" type="javaee:pathType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The large-icon element contains the name of a file
- containing a large
- (32 x 32) icon image. The file name is a relative
- path within the Deployment Component's Deployment
- File.
-
- The image may be in the GIF, JPEG, or PNG format.
- The icon can be used by tools.
-
- Example:
-
- <large-icon>employee-service-icon32x32.jpg</large-icon>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- </xsd:sequence>
-
- <xsd:attribute ref="xml:lang"/>
- <xsd:attribute name="id" type="xsd:ID"/>
-
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="injection-targetType">
- <xsd:annotation>
- <xsd:documentation>
-
- An injection target specifies a class and a name within
- that class into which a resource should be injected.
-
- The injection target class specifies the fully qualified
- class name that is the target of the injection. The
- Java EE specifications describe which classes can be an
- injection target.
-
- The injection target name specifies the target within
- the specified class. The target is first looked for as a
- JavaBeans property name. If not found, the target is
- looked for as a field name.
-
- The specified resource will be injected into the target
- during initialization of the class by either calling the
- set method for the target property or by setting a value
- into the named field.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="injection-target-class"
- type="javaee:fully-qualified-classType"/>
- <xsd:element name="injection-target-name"
- type="javaee:java-identifierType"/>
- </xsd:sequence>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="java-identifierType">
- <xsd:annotation>
- <xsd:documentation>
-
- The java-identifierType defines a Java identifier.
- The users of this type should further verify that
- the content does not contain Java reserved keywords.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:pattern value="($|_|\p{L})(\p{L}|\p{Nd}|_|$)*"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="java-typeType">
- <xsd:annotation>
- <xsd:documentation>
-
- This is a generic type that designates a Java primitive
- type or a fully qualified name of a Java interface/type,
- or an array of such types.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:pattern value="[^\p{Z}]*"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The jndi-nameType type designates a JNDI name in the
- Deployment Component's environment and is relative to the
- java:comp/env context. A JNDI name must be unique within the
- Deployment Component.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:group name="jndiEnvironmentRefsGroup">
- <xsd:annotation>
- <xsd:documentation>
-
- This group keeps the usage of the contained JNDI environment
- reference elements consistent across Java EE deployment descriptors.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="env-entry"
- type="javaee:env-entryType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="ejb-ref"
- type="javaee:ejb-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="ejb-local-ref"
- type="javaee:ejb-local-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="resource-ref"
- type="javaee:resource-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="resource-env-ref"
- type="javaee:resource-env-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="message-destination-ref"
- type="javaee:message-destination-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="persistence-context-ref"
- type="javaee:persistence-context-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="persistence-unit-ref"
- type="javaee:persistence-unit-refType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="post-construct"
- type="javaee:lifecycle-callbackType"
- minOccurs="0" maxOccurs="unbounded"/>
- <xsd:element name="pre-destroy"
- type="javaee:lifecycle-callbackType"
- minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:group>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="lifecycle-callbackType">
- <xsd:annotation>
- <xsd:documentation>
-
- The lifecycle-callback type specifies a method on a
- class to be called when a lifecycle event occurs.
- Note that each class may have only one lifecycle callback
- method for any given event and that the method may not
- be overloaded.
-
- If the lifefycle-callback-class element is missing then
- the class defining the callback is assumed to be the
- component class in scope at the place in the descriptor
- in which the callback definition appears.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="lifecycle-callback-class"
- type="javaee:fully-qualified-classType"
- minOccurs="0"/>
- <xsd:element name="lifecycle-callback-method"
- type="javaee:java-identifierType"/>
- </xsd:sequence>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="listenerType">
- <xsd:annotation>
- <xsd:documentation>
-
- The listenerType indicates the deployment properties for a web
- application listener bean.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="listener-class"
- type="javaee:fully-qualified-classType">
- <xsd:annotation>
- <xsd:documentation>
-
- The listener-class element declares a class in the
- application must be registered as a web
- application listener bean. The value is the fully
- qualified classname of the listener class.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="local-homeType">
- <xsd:annotation>
- <xsd:documentation>
-
- The local-homeType defines the fully-qualified
- name of an enterprise bean's local home interface.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:fully-qualified-classType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="localType">
- <xsd:annotation>
- <xsd:documentation>
-
- The localType defines the fully-qualified name of an
- enterprise bean's local interface.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:fully-qualified-classType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="message-destination-linkType">
- <xsd:annotation>
- <xsd:documentation>
-
- The message-destination-linkType is used to link a message
- destination reference or message-driven bean to a message
- destination.
-
- The Assembler sets the value to reflect the flow of messages
- between producers and consumers in the application.
-
- The value must be the message-destination-name of a message
- destination in the same Deployment File or in another
- Deployment File in the same Java EE application unit.
-
- Alternatively, the value may be composed of a path name
- specifying a Deployment File containing the referenced
- message destination with the message-destination-name of the
- destination appended and separated from the path name by
- "#". The path name is relative to the Deployment File
- containing Deployment Component that is referencing the
- message destination. This allows multiple message
- destinations with the same name to be uniquely identified.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="message-destination-refType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The message-destination-ref element contains a declaration
- of Deployment Component's reference to a message destination
- associated with a resource in Deployment Component's
- environment. It consists of:
-
- - an optional description
- - the message destination reference name
- - an optional message destination type
- - an optional specification as to whether
- the destination is used for
- consuming or producing messages, or both.
- if not specified, "both" is assumed.
- - an optional link to the message destination
- - optional injection targets
-
- The message destination type must be supplied unless an
- injection target is specified, in which case the type
- of the target is used. If both are specified, the type
- must be assignment compatible with the type of the injection
- target.
-
- Examples:
-
- <message-destination-ref>
- <message-destination-ref-name>jms/StockQueue
- </message-destination-ref-name>
- <message-destination-type>javax.jms.Queue
- </message-destination-type>
- <message-destination-usage>Consumes
- </message-destination-usage>
- <message-destination-link>CorporateStocks
- </message-destination-link>
- </message-destination-ref>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="message-destination-ref-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The message-destination-ref-name element specifies
- the name of a message destination reference; its
- value is the environment entry name used in
- Deployment Component code. The name is a JNDI name
- relative to the java:comp/env context and must be
- unique within an ejb-jar (for enterprise beans) or a
- Deployment File (for others).
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="message-destination-type"
- type="javaee:message-destination-typeType"
- minOccurs="0"/>
- <xsd:element name="message-destination-usage"
- type="javaee:message-destination-usageType"
- minOccurs="0"/>
- <xsd:element name="message-destination-link"
- type="javaee:message-destination-linkType"
- minOccurs="0"/>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
-
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="message-destination-typeType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The message-destination-typeType specifies the type of
- the destination. The type is specified by the Java interface
- expected to be implemented by the destination.
-
- Example:
-
- <message-destination-type>javax.jms.Queue
- </message-destination-type>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:fully-qualified-classType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="message-destination-usageType">
- <xsd:annotation>
- <xsd:documentation>
-
- The message-destination-usageType specifies the use of the
- message destination indicated by the reference. The value
- indicates whether messages are consumed from the message
- destination, produced for the destination, or both. The
- Assembler makes use of this information in linking producers
- of a destination with its consumers.
-
- The value of the message-destination-usage element must be
- one of the following:
- Consumes
- Produces
- ConsumesProduces
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="Consumes"/>
- <xsd:enumeration value="Produces"/>
- <xsd:enumeration value="ConsumesProduces"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="message-destinationType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The message-destinationType specifies a message
- destination. The logical destination described by this
- element is mapped to a physical destination by the Deployer.
-
- The message destination element contains:
-
- - an optional description
- - an optional display-name
- - an optional icon
- - a message destination name which must be unique
- among message destination names within the same
- Deployment File.
- - an optional mapped name
-
- Example:
-
- <message-destination>
- <message-destination-name>CorporateStocks
- </message-destination-name>
- </message-destination>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:group ref="javaee:descriptionGroup"/>
- <xsd:element name="message-destination-name"
- type="javaee:string">
- <xsd:annotation>
- <xsd:documentation>
-
- The message-destination-name element specifies a
- name for a message destination. This name must be
- unique among the names of message destinations
- within the Deployment File.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="mapped-name"
- type="javaee:xsdStringType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- A product specific name that this message destination
- should be mapped to. Each message-destination-ref
- element that references this message destination will
- define a name in the namespace of the referencing
- component. (It's a name in the JNDI java:comp/env
- namespace.) Many application servers provide a way to
- map these local names to names of resources known to the
- application server. This mapped name is often a global
- JNDI name, but may be a name of any form. Each of the
- local names should be mapped to this same global name.
-
- Application servers are not required to support any
- particular form or type of mapped name, nor the ability
- to use mapped names. The mapped name is
- product-dependent and often installation-dependent. No
- use of a mapped name is portable.
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="param-valueType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type is a general type that can be used to declare
- parameter/value lists.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="param-name"
- type="javaee:string">
- <xsd:annotation>
- <xsd:documentation>
-
- The param-name element contains the name of a
- parameter.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="param-value"
- type="javaee:xsdStringType">
- <xsd:annotation>
- <xsd:documentation>
-
- The param-value element contains the value of a
- parameter.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="pathType">
- <xsd:annotation>
- <xsd:documentation>
-
- The elements that use this type designate either a relative
- path or an absolute path starting with a "/".
-
- In elements that specify a pathname to a file within the
- same Deployment File, relative filenames (i.e., those not
- starting with "/") are considered relative to the root of
- the Deployment File's namespace. Absolute filenames (i.e.,
- those starting with "/") also specify names in the root of
- the Deployment File's namespace. In general, relative names
- are preferred. The exception is .war files where absolute
- names are preferred for consistency with the Servlet API.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="persistence-context-refType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The persistence-context-ref element contains a declaration
- of Deployment Component's reference to a persistence context
- associated within a Deployment Component's
- environment. It consists of:
-
- - an optional description
- - the persistence context reference name
- - an optional persistence unit name. If not specified,
- the default persistence unit is assumed.
- - an optional specification as to whether
- the persistence context type is Transaction or
- Extended. If not specified, Transaction is assumed.
- - an optional list of persistence properties
- - optional injection targets
-
- Examples:
-
- <persistence-context-ref>
- <persistence-context-ref-name>myPersistenceContext
- </persistence-context-ref-name>
- </persistence-context-ref>
-
- <persistence-context-ref>
- <persistence-context-ref-name>myPersistenceContext
- </persistence-context-ref-name>
- <persistence-unit-name>PersistenceUnit1
- </persistence-unit-name>
- <persistence-context-type>Extended</persistence-context-type>
- </persistence-context-ref>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="persistence-context-ref-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The persistence-context-ref-name element specifies
- the name of a persistence context reference; its
- value is the environment entry name used in
- Deployment Component code. The name is a JNDI name
- relative to the java:comp/env context.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="persistence-unit-name"
- type="javaee:string"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- The Application Assembler(or BeanProvider) may use the
- following syntax to avoid the need to rename persistence
- units to have unique names within a Java EE application.
-
- The Application Assembler specifies the pathname of the
- root of the persistence.xml file for the referenced
- persistence unit and appends the name of the persistence
- unit separated from the pathname by #. The pathname is
- relative to the referencing application component jar file.
- In this manner, multiple persistence units with the same
- persistence unit name may be uniquely identified when the
- Application Assembler cannot change persistence unit names.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="persistence-context-type"
- type="javaee:persistence-context-typeType"
- minOccurs="0"/>
-
- <xsd:element name="persistence-property"
- type="javaee:propertyType"
- minOccurs="0"
- maxOccurs="unbounded">
- <xsd:annotation>
- <xsd:documentation>
-
- Used to specify properties for the container or persistence
- provider. Vendor-specific properties may be included in
- the set of properties. Properties that are not recognized
- by a vendor must be ignored. Entries that make use of the
- namespace javax.persistence and its subnamespaces must not
- be used for vendor-specific properties. The namespace
- javax.persistence is reserved for use by the specification.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
-
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="persistence-context-typeType">
- <xsd:annotation>
- <xsd:documentation>
-
- The persistence-context-typeType specifies the transactional
- nature of a persistence context reference.
-
- The value of the persistence-context-type element must be
- one of the following:
- Transaction
- Extended
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="Transaction"/>
- <xsd:enumeration value="Extended"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="persistence-unit-refType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The persistence-unit-ref element contains a declaration
- of Deployment Component's reference to a persistence unit
- associated within a Deployment Component's
- environment. It consists of:
-
- - an optional description
- - the persistence unit reference name
- - an optional persistence unit name. If not specified,
- the default persistence unit is assumed.
- - optional injection targets
-
- Examples:
-
- <persistence-unit-ref>
- <persistence-unit-ref-name>myPersistenceUnit
- </persistence-unit-ref-name>
- </persistence-unit-ref>
-
- <persistence-unit-ref>
- <persistence-unit-ref-name>myPersistenceUnit
- </persistence-unit-ref-name>
- <persistence-unit-name>PersistenceUnit1
- </persistence-unit-name>
- </persistence-unit-ref>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="persistence-unit-ref-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The persistence-unit-ref-name element specifies
- the name of a persistence unit reference; its
- value is the environment entry name used in
- Deployment Component code. The name is a JNDI name
- relative to the java:comp/env context.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- <xsd:element name="persistence-unit-name"
- type="javaee:string"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- The Application Assembler(or BeanProvider) may use the
- following syntax to avoid the need to rename persistence
- units to have unique names within a Java EE application.
-
- The Application Assembler specifies the pathname of the
- root of the persistence.xml file for the referenced
- persistence unit and appends the name of the persistence
- unit separated from the pathname by #. The pathname is
- relative to the referencing application component jar file.
- In this manner, multiple persistence units with the same
- persistence unit name may be uniquely identified when the
- Application Assembler cannot change persistence unit names.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
-
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="propertyType">
- <xsd:annotation>
- <xsd:documentation>
-
- Specifies a name/value pair.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="name"
- type="javaee:xsdStringType">
- </xsd:element>
- <xsd:element name="value"
- type="javaee:xsdStringType">
- </xsd:element>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="remoteType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The remote element contains the fully-qualified name
- of the enterprise bean's remote interface.
-
- Example:
-
- <remote>com.wombat.empl.EmployeeService</remote>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:fully-qualified-classType"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="res-authType">
- <xsd:annotation>
- <xsd:documentation>
-
- The res-authType specifies whether the Deployment Component
- code signs on programmatically to the resource manager, or
- whether the Container will sign on to the resource manager
- on behalf of the Deployment Component. In the latter case,
- the Container uses information that is supplied by the
- Deployer.
-
- The value must be one of the two following:
-
- Application
- Container
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="Application"/>
- <xsd:enumeration value="Container"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="res-sharing-scopeType">
- <xsd:annotation>
- <xsd:documentation>
-
- The res-sharing-scope type specifies whether connections
- obtained through the given resource manager connection
- factory reference can be shared. The value, if specified,
- must be one of the two following:
-
- Shareable
- Unshareable
-
- The default value is Shareable.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string">
- <xsd:enumeration value="Shareable"/>
- <xsd:enumeration value="Unshareable"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="resource-env-refType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The resource-env-refType is used to define
- resource-env-type elements. It contains a declaration of a
- Deployment Component's reference to an administered object
- associated with a resource in the Deployment Component's
- environment. It consists of an optional description, the
- resource environment reference name, and an optional
- indication of the resource environment reference type
- expected by the Deployment Component code.
-
- It also includes optional elements to define injection of
- the named resource into fields or JavaBeans properties.
-
- The resource environment type must be supplied unless an
- injection target is specified, in which case the type
- of the target is used. If both are specified, the type
- must be assignment compatible with the type of the injection
- target.
-
- Example:
-
- <resource-env-ref>
- <resource-env-ref-name>jms/StockQueue
- </resource-env-ref-name>
- <resource-env-ref-type>javax.jms.Queue
- </resource-env-ref-type>
- </resource-env-ref>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="resource-env-ref-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The resource-env-ref-name element specifies the name
- of a resource environment reference; its value is
- the environment entry name used in
- the Deployment Component code. The name is a JNDI
- name relative to the java:comp/env context and must
- be unique within a Deployment Component.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="resource-env-ref-type"
- type="javaee:fully-qualified-classType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- The resource-env-ref-type element specifies the type
- of a resource environment reference. It is the
- fully qualified name of a Java language class or
- interface.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="resource-refType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The resource-refType contains a declaration of a
- Deployment Component's reference to an external resource. It
- consists of an optional description, the resource manager
- connection factory reference name, an optional indication of
- the resource manager connection factory type expected by the
- Deployment Component code, an optional type of authentication
- (Application or Container), and an optional specification of
- the shareability of connections obtained from the resource
- (Shareable or Unshareable).
-
- It also includes optional elements to define injection of
- the named resource into fields or JavaBeans properties.
-
- The connection factory type must be supplied unless an
- injection target is specified, in which case the type
- of the target is used. If both are specified, the type
- must be assignment compatible with the type of the injection
- target.
-
- Example:
-
- <resource-ref>
- <res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- <res-sharing-scope>Shareable</res-sharing-scope>
- </resource-ref>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="res-ref-name"
- type="javaee:jndi-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The res-ref-name element specifies the name of a
- resource manager connection factory reference.
- The name is a JNDI name relative to the
- java:comp/env context.
- The name must be unique within a Deployment File.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="res-type"
- type="javaee:fully-qualified-classType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- The res-type element specifies the type of the data
- source. The type is specified by the fully qualified
- Java language class or interface
- expected to be implemented by the data source.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="res-auth"
- type="javaee:res-authType"
- minOccurs="0"/>
-
- <xsd:element name="res-sharing-scope"
- type="javaee:res-sharing-scopeType"
- minOccurs="0"/>
-
- <xsd:group ref="javaee:resourceGroup"/>
-
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:group name="resourceGroup">
- <xsd:annotation>
- <xsd:documentation>
-
- This group collects elements that are common to all the
- JNDI resource elements.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:sequence>
- <xsd:element name="mapped-name"
- type="javaee:xsdStringType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- A product specific name that this resource should be
- mapped to. The name of this resource, as defined by the
- resource's name element or defaulted, is a name that is
- local to the application component using the resource.
- (It's a name in the JNDI java:comp/env namespace.) Many
- application servers provide a way to map these local
- names to names of resources known to the application
- server. This mapped name is often a global JNDI name,
- but may be a name of any form.
-
- Application servers are not required to support any
- particular form or type of mapped name, nor the ability
- to use mapped names. The mapped name is
- product-dependent and often installation-dependent. No
- use of a mapped name is portable.
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="injection-target"
- type="javaee:injection-targetType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:group>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="role-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The role-nameType designates the name of a security role.
-
- The name must conform to the lexical rules for a token.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:simpleContent>
- <xsd:restriction base="javaee:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="run-asType">
- <xsd:annotation>
- <xsd:documentation>
-
- The run-asType specifies the run-as identity to be
- used for the execution of a component. It contains an
- optional description, and the name of a security role.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="role-name"
- type="javaee:role-nameType"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="security-role-refType">
- <xsd:annotation>
- <xsd:documentation>
-
- The security-role-refType contains the declaration of a
- security role reference in a component's or a
- Deployment Component's code. The declaration consists of an
- optional description, the security role name used in the
- code, and an optional link to a security role. If the
- security role is not specified, the Deployer must choose an
- appropriate security role.
-
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="role-name"
- type="javaee:role-nameType">
- <xsd:annotation>
- <xsd:documentation>
-
- The value of the role-name element must be the String used
- as the parameter to the
- EJBContext.isCallerInRole(String roleName) method or the
- HttpServletRequest.isUserInRole(String role) method.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
-
- <xsd:element name="role-link"
- type="javaee:role-nameType"
- minOccurs="0">
- <xsd:annotation>
- <xsd:documentation>
-
- The role-link element is a reference to a defined
- security role. The role-link element must contain
- the name of one of the security roles defined in the
- security-role elements.
-
- </xsd:documentation>
- </xsd:annotation>
- </xsd:element>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="security-roleType">
- <xsd:annotation>
- <xsd:documentation>
- <![CDATA[
-
- The security-roleType contains the definition of a security
- role. The definition consists of an optional description of
- the security role, and the security role name.
-
- Example:
-
- <security-role>
- <description>
- This role includes all employees who are authorized
- to access the employee service application.
- </description>
- <role-name>employee</role-name>
- </security-role>
-
- ]]>
- </xsd:documentation>
- </xsd:annotation>
-
- <xsd:sequence>
- <xsd:element name="description"
- type="javaee:descriptionType"
- minOccurs="0"
- maxOccurs="unbounded"/>
- <xsd:element name="role-name"
- type="javaee:role-nameType"/>
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="string">
- <xsd:annotation>
- <xsd:documentation>
-
- This is a special string datatype that is defined by Java EE as
- a base type for defining collapsed strings. When schemas
- require trailing/leading space elimination as well as
- collapsing the existing whitespace, this base type may be
- used.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:token">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="true-falseType">
- <xsd:annotation>
- <xsd:documentation>
-
- This simple type designates a boolean with only two
- permissible values
-
- - true
- - false
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:restriction base="javaee:xsdBooleanType">
- <xsd:pattern value="(true|false)"/>
- </xsd:restriction>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="url-patternType">
- <xsd:annotation>
- <xsd:documentation>
-
- The url-patternType contains the url pattern of the mapping.
- It must follow the rules specified in Section 11.2 of the
- Servlet API Specification. This pattern is assumed to be in
- URL-decoded form and must not contain CR(#xD) or LF(#xA).
- If it contains those characters, the container must inform
- the developer with a descriptive error message.
- The container must preserve all characters including whitespaces.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:string"/>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdAnyURIType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:anyURI.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:anyURI">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdBooleanType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:boolean.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:boolean">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdIntegerType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:integer.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:integer">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdNMTOKENType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:NMTOKEN.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:NMTOKEN">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdNonNegativeIntegerType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:nonNegativeInteger.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:nonNegativeInteger">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdPositiveIntegerType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:positiveInteger.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:positiveInteger">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdQNameType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:QName.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:QName">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-<!-- **************************************************** -->
-
- <xsd:complexType name="xsdStringType">
- <xsd:annotation>
- <xsd:documentation>
-
- This type adds an "id" attribute to xsd:string.
-
- </xsd:documentation>
- </xsd:annotation>
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="id" type="xsd:ID"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
-</xsd:schema>
-
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/FaceletCorePlugin.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/FaceletCorePlugin.java
index 35487a771..278fdd1d8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/FaceletCorePlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/FaceletCorePlugin.java
@@ -4,6 +4,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.ResourceLocator;
+import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
@@ -74,6 +75,7 @@ public class FaceletCorePlugin extends EMFPlugin
*/
public static class Implementation extends EclipsePlugin
{
+ private BundleContext context = null;
/**
* Creates an instance.
* <!-- begin-user-doc -->
@@ -88,6 +90,21 @@ public class FaceletCorePlugin extends EMFPlugin
//
plugin = this;
}
+
+ @Override
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ super.start(bundleContext);
+ this.context = bundleContext;
+ }
+
+ /**
+ * @return the bundle context.
+ */
+ public BundleContext getBundleContext()
+ {
+ return this.context;
+ }
}
@@ -98,6 +115,10 @@ public class FaceletCorePlugin extends EMFPlugin
*/
public static Implementation getDefault()
{
+ if (plugin == null)
+ {
+ return new Implementation();
+ }
return plugin;
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/NamespaceCMAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/NamespaceCMAdapter.java
index 7dd30ba81..0732f1954 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/NamespaceCMAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/NamespaceCMAdapter.java
@@ -4,6 +4,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.core.resources.IProject;
import org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject;
@@ -19,6 +20,7 @@ import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
private final Namespace _ns;
private final Map<String, ElementCMAdapter> _elements;
private final FaceletDocumentFactory _factory;
+ private final AtomicBoolean _isDisposed = new AtomicBoolean(false);
public NamespaceCMAdapter(final Namespace ns, final IProject project)
{
@@ -204,7 +206,10 @@ import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
}
public void dispose()
{
- _elements.clear();
+ if (_isDisposed.compareAndSet(false, true))
+ {
+ _elements.clear();
+ }
}
public void checkpoint()
@@ -219,4 +224,9 @@ import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
}
+ public boolean isDisposed()
+ {
+ return _isDisposed.get();
+ }
+
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/strategy/MDExternalMetadataStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/strategy/MDExternalMetadataStrategy.java
index 126098fe4..b7b2b21db 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/strategy/MDExternalMetadataStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/cm/strategy/MDExternalMetadataStrategy.java
@@ -16,6 +16,7 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.jface.util.SafeRunnable;
@@ -394,6 +395,11 @@ public class MDExternalMetadataStrategy extends
ResourceSingletonObjectManager<MDExternalMetadataStrategy, IProject>
{
+ protected MySingletonManager()
+ {
+ super(ResourcesPlugin.getWorkspace());
+ }
+
@Override
protected MDExternalMetadataStrategy createNewInstance(
final IProject resource)
@@ -402,4 +408,9 @@ public class MDExternalMetadataStrategy extends
}
}
+
+ public boolean isDisposed()
+ {
+ return _isDisposed.get();
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletRegistryManager.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletRegistryManager.java
index 239cb6f88..aff143bf0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletRegistryManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletRegistryManager.java
@@ -1,6 +1,7 @@
package org.eclipse.jst.jsf.facelet.core.internal.registry;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
import org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager;
import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry;
import org.eclipse.jst.jsf.designtime.internal.view.model.TagRegistryFactory;
@@ -21,7 +22,7 @@ public final class FaceletRegistryManager extends
/**
* @return the singleton instance
*/
- private static FaceletRegistryManager getGlobalManager()
+ private static FaceletRegistryManager getGlobalManager(final IWorkspace workspace)
{
if (FaceletCoreTraceOptions.TRACE_REGISTRYMANAGER)
{
@@ -33,16 +34,16 @@ public final class FaceletRegistryManager extends
{
if (INSTANCE == null)
{
- INSTANCE = new FaceletRegistryManager();
+ INSTANCE = new FaceletRegistryManager(workspace);
}
return INSTANCE;
}
}
- private FaceletRegistryManager()
+ private FaceletRegistryManager(final IWorkspace workspace)
{
- // do nothing
+ super(workspace);
}
@Override
@@ -90,7 +91,7 @@ public final class FaceletRegistryManager extends
{
try
{
- return getGlobalManager().getInstance(project);
+ return getGlobalManager(project.getWorkspace()).getInstance(project);
}
catch (ManagedObjectException e)
{
@@ -101,7 +102,7 @@ public final class FaceletRegistryManager extends
@Override
public boolean isInstance(IProject project)
{
- return getGlobalManager().isInstance(project);
+ return getGlobalManager(project.getWorkspace()).isInstance(project);
}
public String getDisplayName()
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletTagRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletTagRegistry.java
index 1d0d8ce3b..d3e786cb3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletTagRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/FaceletTagRegistry.java
@@ -130,7 +130,7 @@ public final class FaceletTagRegistry extends AbstractTagRegistry implements
+ _project));
}
- final FaceletTagIndex index = FaceletTagIndex.getInstance();
+ final FaceletTagIndex index = FaceletTagIndex.getInstance(_project.getWorkspace());
IProjectTaglibDescriptor tagDesc;
try
@@ -237,7 +237,7 @@ public final class FaceletTagRegistry extends AbstractTagRegistry implements
if (flushCaches)
{
- FaceletTagIndex.getInstance().flush(_project);
+ FaceletTagIndex.getInstance(_project.getWorkspace()).flush(_project);
}
// if we aren't flushing caches, then check point the
// current namespace data, so it isn't lost when we clear
@@ -351,7 +351,7 @@ public final class FaceletTagRegistry extends AbstractTagRegistry implements
{
if (_listener != null)
{
- FaceletTagIndex index = FaceletTagIndex.getInstance();
+ FaceletTagIndex index = FaceletTagIndex.getInstance(_project.getWorkspace());
try
{
IProjectTaglibDescriptor instance = index.getInstance(_project);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/AbstractProjectTaglibDescriptorFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/AbstractProjectTaglibDescriptorFactory.java
new file mode 100644
index 000000000..47866c0d0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/AbstractProjectTaglibDescriptorFactory.java
@@ -0,0 +1,16 @@
+package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * The base class for all impls of IProjectTaglibDescriptorFactory.
+ *
+ * @author cbateman
+ *
+ */
+public abstract class AbstractProjectTaglibDescriptorFactory implements IProjectTaglibDescriptorFactory
+{
+
+ public abstract IProjectTaglibDescriptor create(IProject project,
+ TagRecordFactory factory);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ContextParamSpecifiedFaceletTaglibLocator.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ContextParamSpecifiedFaceletTaglibLocator.java
index d1f7956e6..42fc69e0e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ContextParamSpecifiedFaceletTaglibLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ContextParamSpecifiedFaceletTaglibLocator.java
@@ -12,7 +12,6 @@ package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,7 +22,13 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jst.j2ee.model.IModelProvider;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery;
import org.eclipse.jst.jsf.common.internal.managedobject.AbstractManagedObject;
import org.eclipse.jst.jsf.common.internal.managedobject.ObjectManager.ManagedObjectException;
import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener;
@@ -44,7 +49,7 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
*
* TODO:merge back with common code in JSFAppConfig framework
*/
-/* package */class ContextParamSpecifiedFaceletTaglibLocator extends
+public class ContextParamSpecifiedFaceletTaglibLocator extends
AbstractFaceletTaglibLocator
{
private static final String ID = ContextParamSpecifiedFaceletTaglibLocator.class.getCanonicalName();
@@ -54,15 +59,22 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
private final TagRecordFactory _factory;
private final TaglibFileManager _fileManager;
+ /**
+ * @param project
+ * @param factory
+ * @param webAppProvider
+ * @param vcQuery
+ */
public ContextParamSpecifiedFaceletTaglibLocator(final IProject project,
- final TagRecordFactory factory)
+ final TagRecordFactory factory, final IModelProvider webAppProvider,
+ final AbstractVirtualComponentQuery vcQuery)
{
super(ID, DISPLAYNAME);
_project = project;
_records = new HashMap<String, IFaceletTagRecord>();
_factory = factory;
_fileManager = new TaglibFileManager(project,
- new LibraryChangeHandler());
+ new LibraryChangeHandler(), webAppProvider, vcQuery);
}
/*
@@ -88,16 +100,12 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
public void stop()
{
_fileManager.dispose();
+ super.stop();
}
@Override
- protected Map<String, ? extends IFaceletTagRecord> doLocate(IProject context)
- {
- return findInWebRoot();
- }
-
- private Map<String, ? extends IFaceletTagRecord> findInWebRoot()
+ protected Map<String, ? extends IFaceletTagRecord> doLocate(final IProject context)
{
final List<IFile> files = _fileManager.getFiles();
@@ -140,7 +148,7 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
is = file.getContents();
final TagModelLoader loader = new TagModelLoader(file.getFullPath().toFile().getCanonicalPath());
loader.loadFromInputStream(is);
- FaceletTaglib taglib = loader.getTaglib();
+ final FaceletTaglib taglib = loader.getTaglib();
if (taglib != null)
{
return _factory.createRecords(taglib);
@@ -177,10 +185,12 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
private final IResourceChangeListener _newFileListener;
public TaglibFileManager(final IProject project,
- final LibraryChangeHandler handler)
+ final LibraryChangeHandler handler, final IModelProvider webAppProvider,
+ final AbstractVirtualComponentQuery vcQuery)
{
+ super(project.getWorkspace());
_handler = handler;
- _webAppConfiguration = new WebappConfiguration(project);
+ _webAppConfiguration = new WebappConfiguration(project, webAppProvider, vcQuery);
// TODO: fold into LifecycleListener
_newFileListener = new IResourceChangeListener()
{
@@ -192,24 +202,35 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
&& event.getDelta().findMember(
project.getFullPath()) != null)
{
- for (final IFile file : _webAppConfiguration.getFiles())
+ new WorkspaceJob("Context param update") //$NON-NLS-1$
{
- final IResourceDelta delta = event.getDelta()
- .findMember(file.getFullPath());
-
- if (delta != null)
+
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor)
+ throws CoreException
{
- if (delta.getKind() == IResourceDelta.ADDED)
+ for (final IFile file : _webAppConfiguration.getFiles())
{
- _handler.added(file);
+ final IResourceDelta delta = event.getDelta()
+ .findMember(file.getFullPath());
+
+ if (delta != null)
+ {
+ if (delta.getKind() == IResourceDelta.ADDED)
+ {
+
+ _handler.added(file);
+ }
+ }
}
+ return Status.OK_STATUS;
}
- }
+ }.schedule();
}
}
};
- ResourcesPlugin.getWorkspace().addResourceChangeListener(
+ getWorkspace().addResourceChangeListener(
_newFileListener);
}
@@ -224,7 +245,7 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
_webAppConfiguration.addListener(new WebappListener()
{
@Override
- public void webappChanged(WebappChangeEvent event)
+ public void webappChanged(final WebappChangeEvent event)
{
for (final IFile file : event.getRemoved())
{
@@ -234,7 +255,7 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
tracker = getInstance(file);
_handler.removed(tracker._uri, file);
}
- catch (ManagedObjectException e)
+ catch (final ManagedObjectException e)
{
FaceletCorePlugin.log("While removing for webapp change", e); //$NON-NLS-1$
}
@@ -264,19 +285,16 @@ import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.F
super.removeLifecycleEventListener(listener);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager#dispose()
+ */
+ @Override
public void dispose()
{
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(
- _newFileListener);
-
- final Collection<IFile> managedResources = getManagedResources();
-
- for (final IFile file : managedResources)
- {
- unmanageResource(file);
- }
-
_webAppConfiguration.dispose();
+ getWorkspace().removeResourceChangeListener(
+ _newFileListener);
+ super.dispose();
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagIndex.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagIndex.java
index fb1b457aa..3a26292ac 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagIndex.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagIndex.java
@@ -7,40 +7,127 @@
*
* Contributors:
* Cameron Bateman - initial API and implementation
- *******************************************************************************/
+ *******************************************************************************/
package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery.DefaultVirtualComponentQuery;
+import org.eclipse.jst.jsf.common.internal.locator.AbstractLocatorProvider;
import org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager;
/**
* @author cbateman
+ *
+ */
+/**
+ * @author cbateman
*
*/
-public class FaceletTagIndex extends ResourceSingletonObjectManager<IProjectTaglibDescriptor, IProject>
+public class FaceletTagIndex extends
+ResourceSingletonObjectManager<IProjectTaglibDescriptor, IProject>
{
- private final static FaceletTagIndex INSTANCE = new FaceletTagIndex();
+ private IProjectTaglibDescriptorFactory _factory;
/**
+ * @param ws
+ * @param factory
+ */
+ public FaceletTagIndex(final IWorkspace ws, final IProjectTaglibDescriptorFactory factory)
+ {
+ super(ws);
+ _factory = factory;
+ }
+
+ private static FaceletTagIndex INSTANCE;
+
+ /**
+ * @param ws
* @return the singleton instance
*/
- public static FaceletTagIndex getInstance()
+ public static synchronized FaceletTagIndex getInstance(final IWorkspace ws)
{
+ if (INSTANCE == null)
+ {
+ INSTANCE = new FaceletTagIndex(ws, new DefaultProjectTaglibDescriptorFactory());
+
+ }
return INSTANCE;
}
@Override
- protected IProjectTaglibDescriptor createNewInstance(IProject project)
+ protected IProjectTaglibDescriptor createNewInstance(final IProject project)
{
- return new ProjectTaglibDescriptor(project);
+ final TagRecordFactory factory = new TagRecordFactory(project);
+
+ return _factory.create(project, factory);
}
-
+
/**
* Force a project to refresh its tag index info
+ *
* @param project
*/
public void flush(final IProject project)
{
unmanageResource(project);
}
+
+ /**
+ * The default factory for creating per-project tag descriptors.
+ * @author cbateman
+ *
+ */
+ public static class DefaultProjectTaglibDescriptorFactory extends AbstractProjectTaglibDescriptorFactory
+ {
+ @Override
+ public IProjectTaglibDescriptor create(IProject project,
+ TagRecordFactory factory)
+ {
+ final List<AbstractFaceletTaglibLocator> locators = new ArrayList<AbstractFaceletTaglibLocator>();
+ locators.add(new JarFileFaceletTaglibLocator(factory));
+ locators.add(new ContextParamSpecifiedFaceletTaglibLocator(project,
+ factory, ModelProviderManager.getModelProvider(project),
+ new DefaultVirtualComponentQuery()));
+ LocatorProvider provider = new LocatorProvider(locators);
+ return new ProjectTaglibDescriptor(project, factory, provider);
+ }
+ }
+
+ /**
+ * The locator provider used by the tag index.
+ *
+ * @author cbateman
+ *
+ */
+ public static class LocatorProvider extends
+ AbstractLocatorProvider<AbstractFaceletTaglibLocator>
+ {
+ private final List<AbstractFaceletTaglibLocator> _locators;
+
+ /**
+ * @param locators
+ */
+ public LocatorProvider(final List<AbstractFaceletTaglibLocator> locators)
+ {
+ _locators = locators;
+ }
+
+ @Override
+ protected void doInitialize()
+ {
+ // nothing to do
+ }
+
+ @Override
+ protected List<? extends AbstractFaceletTaglibLocator> doGetLocators()
+ {
+ return Collections.unmodifiableList(_locators);
+ }
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagRecord.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagRecord.java
index cfa997144..f289e7b38 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagRecord.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/FaceletTagRecord.java
@@ -15,10 +15,19 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.FaceletTaglibTag;
-abstract class FaceletTagRecord implements IFaceletTagRecord
+/**
+ * Super of all facelet tag records.
+ *
+ * @author cbateman
+ *
+ */
+public abstract class FaceletTagRecord implements IFaceletTagRecord
{
private final CopyOnWriteArrayList<ITagRecordChangeListener> _listeners;
+ /**
+ *
+ */
public FaceletTagRecord()
{
_listeners = new CopyOnWriteArrayList<ITagRecordChangeListener>();
@@ -34,6 +43,9 @@ abstract class FaceletTagRecord implements IFaceletTagRecord
_listeners.remove(listener);
}
+ /**
+ * @param event
+ */
protected void fireEvent(final TagRecordChangeEvent event)
{
for (final ITagRecordChangeListener listener : _listeners)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IFaceletTagRecord.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IFaceletTagRecord.java
index 040adaf7b..8ea718090 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IFaceletTagRecord.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IFaceletTagRecord.java
@@ -61,14 +61,17 @@ public interface IFaceletTagRecord extends Serializable
/**
* Indicates that a tag record has changed
*/
- static class TagRecordChangeEvent extends EventObject
+ public static class TagRecordChangeEvent extends EventObject
{
/**
*
*/
private static final long serialVersionUID = 5655356157624922019L;
- TagRecordChangeEvent(IFaceletTagRecord source)
+ /**
+ * @param source
+ */
+ public TagRecordChangeEvent(IFaceletTagRecord source)
{
super(source);
}
@@ -78,8 +81,11 @@ public interface IFaceletTagRecord extends Serializable
* A listener for tag record change events.
*
*/
- interface ITagRecordChangeListener
+ public interface ITagRecordChangeListener
{
+ /**
+ * @param event
+ */
public void changed(final TagRecordChangeEvent event);
}
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IProjectTaglibDescriptorFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IProjectTaglibDescriptorFactory.java
new file mode 100644
index 000000000..039d9268e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/IProjectTaglibDescriptorFactory.java
@@ -0,0 +1,22 @@
+package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * Implemented by factories that create new IProjectTaglibDescriptor objects.
+ *
+ * @author cbateman
+ *
+ */
+public interface IProjectTaglibDescriptorFactory
+{
+ /**
+ * @param project
+ * @param factory
+ * @param jarProvider
+ * @param webAppProvider
+ * @param vcQuery
+ * @return a new taglib descriptor.
+ */
+ IProjectTaglibDescriptor create(final IProject project, final TagRecordFactory factory);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JarFileFaceletTaglibLocator.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JarFileFaceletTaglibLocator.java
index 2e9d5db08..78c50f8bf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JarFileFaceletTaglibLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/JarFileFaceletTaglibLocator.java
@@ -13,6 +13,7 @@ package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
@@ -57,14 +58,25 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
private static final String ID = JarFileFaceletTaglibLocator.class
.getCanonicalName();
private final TagRecordFactory _factory;
- private Map<String, IFaceletTagRecord> _records;
+ private final Map<String, IFaceletTagRecord> _records;
private final SimpleStrategyComposite<JarEntry, JarEntry, JarEntry, String, TaglibFinder<JarEntry, JarEntry>> _finder;
+ private final IJarProvider _provider;
/**
* @param factory
*/
public JarFileFaceletTaglibLocator(final TagRecordFactory factory)
{
+ this(factory, new DefaultJarProvider());
+ }
+
+ /**
+ * @param factory
+ * @param jarProvider
+ */
+ public JarFileFaceletTaglibLocator(final TagRecordFactory factory,
+ IJarProvider jarProvider)
+ {
super(ID, DISPLAYNAME);
_factory = factory;
_records = new HashMap<String, IFaceletTagRecord>();
@@ -75,74 +87,20 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
_finder = new SimpleStrategyComposite<JarEntry, JarEntry, JarEntry, String, TaglibFinder<JarEntry, JarEntry>>(
finders);
-
+ _provider = jarProvider;
}
@Override
public Map<String, ? extends IFaceletTagRecord> doLocate(
final IProject project)
{
- try
- {
- return findInJars(project);
- } catch (JavaModelException e)
- {
- FaceletCorePlugin
- .log(
- "Couldn't locate jar file taglibs: " + project.getProject(), e); //$NON-NLS-1$
- }
- return Collections.EMPTY_MAP;
- }
-
- private Map<String, ? extends IFaceletTagRecord> findInJars(
- final IProject project) throws JavaModelException
- {
- final IJavaProject javaProject = JavaCore.create(project);
-
- final IClasspathEntry[] entries = javaProject
- .getResolvedClasspath(true);
-
final List<FaceletTaglib> tagLibsFound = new ArrayList<FaceletTaglib>();
- for (final IClasspathEntry entry : entries)
- {
- switch (entry.getEntryKind())
- {
- // this entry describes a source root in its project
- case IClasspathEntry.CPE_SOURCE:
+ final Collection<JarFile> jars = _provider.getJars(project);
- break;
- // - this entry describes a folder or JAR containing
- // binaries
- case IClasspathEntry.CPE_LIBRARY:
- {
- tagLibsFound.addAll(processJar(entry));
- }
- break;
- // - this entry describes another project
- case IClasspathEntry.CPE_PROJECT:
- // {
- // final IPath pathToProject = entry.getPath();
- // IWorkspace wkspace = ResourcesPlugin.getWorkspace();
- // IResource res =
- // wkspace.getRoot().findMember(pathToProject);
- // if (res instanceof IProject)
- // {
- // tagLibsFound.addAll();
- // }
- // }
- break;
- // - this entry describes a project or library indirectly
- // via a
- // classpath variable in the first segment of the path *
- case IClasspathEntry.CPE_VARIABLE:
- break;
- // - this entry describes set of entries referenced
- // indirectly
- // via a classpath container
- case IClasspathEntry.CPE_CONTAINER:
- break;
- }
+ for (final JarFile jarFile : jars)
+ {
+ tagLibsFound.addAll(processJar(jarFile));
}
for (final FaceletTaglib tag : tagLibsFound)
@@ -157,50 +115,17 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
return _records;
}
- /**
- * TODO: Merge into JSFAppConfigUtils.
- *
- * @param entry
- * @return
- */
- private static JarFile getJarFileFromCPE(final IClasspathEntry entry)
- throws IOException
- {
- if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY)
- {
- IPath libraryPath = entry.getPath();
- if (libraryPath.getFileExtension() != null
- && libraryPath.getFileExtension().length() > 0)
- {
- final IWorkspaceRoot workspaceRoot = ResourcesPlugin
- .getWorkspace().getRoot();
- if (libraryPath.getDevice() == null
- && workspaceRoot.getProject(libraryPath.segment(0))
- .exists())
- {
- libraryPath = workspaceRoot.getFile(libraryPath)
- .getLocation();
- }
- final String libraryPathString = libraryPath.toString();
- return new JarFile(libraryPathString);
- }
- }
- return null;
- }
/**
* @param entry
* @param defaultDtdStream
*/
- private List<FaceletTaglib> processJar(final IClasspathEntry entry)
+ private List<FaceletTaglib> processJar(final JarFile jarFile)
{
- JarFile jarFile = null;
final List<FaceletTaglib> tagLibsFound = new ArrayList<FaceletTaglib>();
try
{
- jarFile = getJarFileFromCPE(entry);
-
if (jarFile != null)
{
final Enumeration<JarEntry> jarEntries = jarFile.entries();
@@ -221,7 +146,8 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
try
{
is = jarFile.getInputStream(jarEntry);
- TagModelLoader loader = new TagModelLoader(jarEntry.getName());
+ TagModelLoader loader = new TagModelLoader(
+ jarEntry.getName());
loader.loadFromInputStream(is);
FaceletTaglib tagLib = loader.getTaglib();
@@ -235,8 +161,7 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
.log(
"Error initializing facelet registry entry", //$NON-NLS-1$
e);
- }
- finally
+ } finally
{
if (is != null)
{
@@ -247,10 +172,6 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
}
}
}
- } catch (final IOException e)
- {
- FaceletCorePlugin.log(
- "Error opening classpath jar file: " + entry, e); //$NON-NLS-1$
} finally
{
if (jarFile != null)
@@ -266,4 +187,126 @@ public class JarFileFaceletTaglibLocator extends AbstractFaceletTaglibLocator
}
return tagLibsFound;
}
+
+ /**
+ * Provider of jars for use by the locator. Exists to abstract the locator
+ * from JDT for test purposes.
+ *
+ */
+ public interface IJarProvider
+ {
+ /**
+ * @param project
+ * @return a list of valid jar files.
+ */
+ Collection<JarFile> getJars(final IProject project);
+ }
+
+ private static class DefaultJarProvider implements IJarProvider
+ {
+ public Collection<JarFile> getJars(final IProject project)
+ {
+ final IJavaProject javaProject = JavaCore.create(project);
+
+ IClasspathEntry[] entries = null;
+ try
+ {
+ entries = javaProject.getResolvedClasspath(true);
+ } catch (JavaModelException e1)
+ {
+ FaceletCorePlugin.log("Getting resolved classpath entries", e1); //$NON-NLS-1$
+ }
+
+ if (entries == null || entries.length == 0)
+ {
+ return Collections.EMPTY_LIST;
+ }
+ final List<JarFile> jars = new ArrayList<JarFile>();
+ for (final IClasspathEntry entry : entries)
+ {
+
+ switch (entry.getEntryKind())
+ {
+ // this entry describes a source root in its project
+ case IClasspathEntry.CPE_SOURCE:
+
+ break;
+ // - this entry describes a folder or JAR containing
+ // binaries
+ case IClasspathEntry.CPE_LIBRARY:
+ {
+ JarFile jarFileFromCPE;
+ try
+ {
+ jarFileFromCPE = getJarFileFromCPE(entry);
+ if (jarFileFromCPE != null)
+ {
+ jars.add(jarFileFromCPE);
+ }
+ } catch (IOException e)
+ {
+ FaceletCorePlugin.log("Getting jar from CPE", e); //$NON-NLS-1$
+ }
+ }
+ break;
+ // - this entry describes another project
+ case IClasspathEntry.CPE_PROJECT:
+ // {
+ // final IPath pathToProject = entry.getPath();
+ // IWorkspace wkspace = ResourcesPlugin.getWorkspace();
+ // IResource res =
+ // wkspace.getRoot().findMember(pathToProject);
+ // if (res instanceof IProject)
+ // {
+ // tagLibsFound.addAll();
+ // }
+ // }
+ break;
+ // - this entry describes a project or library indirectly
+ // via a
+ // classpath variable in the first segment of the path *
+ case IClasspathEntry.CPE_VARIABLE:
+ break;
+ // - this entry describes set of entries referenced
+ // indirectly
+ // via a classpath container
+ case IClasspathEntry.CPE_CONTAINER:
+ break;
+ }
+ }
+ return jars;
+ }
+
+ /**
+ * TODO: Merge into JSFAppConfigUtils.
+ *
+ * @param entry
+ * @return
+ */
+ private static JarFile getJarFileFromCPE(final IClasspathEntry entry)
+ throws IOException
+ {
+ if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY)
+ {
+ IPath libraryPath = entry.getPath();
+ if (libraryPath.getFileExtension() != null
+ && libraryPath.getFileExtension().length() > 0)
+ {
+ final IWorkspaceRoot workspaceRoot = ResourcesPlugin
+ .getWorkspace().getRoot();
+ if (libraryPath.getDevice() == null
+ && workspaceRoot.getProject(libraryPath.segment(0))
+ .exists())
+ {
+ libraryPath = workspaceRoot.getFile(libraryPath)
+ .getLocation();
+ }
+ final String libraryPathString = libraryPath.toString();
+ return new JarFile(libraryPathString);
+ }
+ }
+ return null;
+ }
+
+ }
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ProjectTaglibDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ProjectTaglibDescriptor.java
index 3f87846f3..0673acf4e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ProjectTaglibDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/ProjectTaglibDescriptor.java
@@ -10,82 +10,60 @@
*******************************************************************************/
package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.jem.internal.proxy.core.IConfigurationContributor;
-import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry;
-import org.eclipse.jem.internal.proxy.ide.IDERegistration;
-import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.common.internal.locator.ILocatorProvider;
import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin;
-import org.eclipse.jst.jsf.facelet.core.internal.registry.ELProxyContributor;
-import org.eclipse.jst.jsf.facelet.core.internal.registry.ServletBeanProxyContributor;
-class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
+/**
+ * Taglib descriptor for a project.
+ *
+ * @author cbateman
+ *
+ */
+public class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
{
- private ProxyFactoryRegistry _registry;
private final AtomicInteger _isInitialized = new AtomicInteger(
0);
private final IProject _project;
- private final List<AbstractFaceletTaglibLocator> _locators;
+ private final ILocatorProvider<AbstractFaceletTaglibLocator> _locatorProvider;
private final MyChangeListener _libChangeListener;
private final Map<String, IFaceletTagRecord> _tagRecords;
-
- public ProjectTaglibDescriptor(final IProject project)
+ private final TagRecordFactory _factory;
+ private final AtomicBoolean _isDisposed = new AtomicBoolean(false);
+
+ /**
+ * @param project
+ * @param factory
+ * @param locatorProvider
+ */
+ public ProjectTaglibDescriptor(final IProject project, final TagRecordFactory factory,
+ final ILocatorProvider<AbstractFaceletTaglibLocator> locatorProvider)
{
_project = project;
- _locators = new ArrayList<AbstractFaceletTaglibLocator>();
_tagRecords = new HashMap<String, IFaceletTagRecord>();
-
- try
- {
- _registry = createProxyRegistry(_project);
- }
- catch (final CoreException e)
- {
- FaceletCorePlugin.log("While creatinng proxy", e); //$NON-NLS-1$
- }
-
- final TagRecordFactory factory = new TagRecordFactory(project,
- _registry);
- _locators.add(new JarFileFaceletTaglibLocator(factory));
- _locators.add(new ContextParamSpecifiedFaceletTaglibLocator(_project,
- factory));
-
+ _locatorProvider = locatorProvider;
+ _locatorProvider.initialize();
+ _factory = factory;
_libChangeListener = new MyChangeListener();
}
- private static ProxyFactoryRegistry createProxyRegistry(
- final IProject project) throws CoreException
- {
- final IConfigurationContributor[] contributor = new IConfigurationContributor[]
- { new ServletBeanProxyContributor(JSFVersion.V1_1),
- new ELProxyContributor(project) };
-
- return IDERegistration.startAnImplementation(contributor, false,
- project, project.getName(), FaceletCorePlugin.PLUGIN_ID,
- new NullProgressMonitor());
- }
-
private void initialize()
{
if (_isInitialized.addAndGet(1) == 1)
{
synchronized (this)
{
-
- for (final AbstractFaceletTaglibLocator locator : _locators)
+ for (final AbstractFaceletTaglibLocator locator : _locatorProvider.getLocators())
{
SafeRunner.run(new ISafeRunnable()
{
@@ -95,7 +73,6 @@ class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
.log(
"While locating facelet libraries on project: " + _project.getName(), new Exception(exception)); //$NON-NLS-1$
}
-
public void run() throws Exception
{
locator.addListener(_libChangeListener);
@@ -130,7 +107,7 @@ class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
public void addListener(final Listener listener)
{
- for (final AbstractFaceletTaglibLocator locator : _locators)
+ for (final AbstractFaceletTaglibLocator locator : _locatorProvider.getLocators())
{
locator.addListener(listener);
}
@@ -138,7 +115,7 @@ class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
public void removeListener(final Listener listener)
{
- for (final AbstractFaceletTaglibLocator locator : _locators)
+ for (final AbstractFaceletTaglibLocator locator : _locatorProvider.getLocators())
{
locator.removeListener(listener);
}
@@ -146,27 +123,31 @@ class ProjectTaglibDescriptor implements IProjectTaglibDescriptor
public void checkpoint()
{
- // TODO Auto-generated method stub
+ // do nothing
}
public void destroy()
{
- // TODO Auto-generated method stub
+ // do nothing
}
public void dispose()
{
- if (_registry != null)
+ if (_isDisposed.compareAndSet(false, true))
{
- _registry.terminateRegistry(false);
-
- for (final AbstractFaceletTaglibLocator locator : _locators)
+ for (final AbstractFaceletTaglibLocator locator : _locatorProvider.getLocators())
{
locator.stop();
}
+ _factory.dispose();
}
}
+ public boolean isDisposed()
+ {
+ return _isDisposed.get();
+ }
+
private class MyChangeListener extends Listener
{
@Override
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/TagRecordFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/TagRecordFactory.java
index 9dba15b63..c93bf93b2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/TagRecordFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/TagRecordFactory.java
@@ -12,61 +12,121 @@ package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jem.internal.proxy.core.ICallbackRegistry;
+import org.eclipse.jem.internal.proxy.core.IConfigurationContributor;
import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry;
+import org.eclipse.jem.internal.proxy.ide.IDERegistration;
+import org.eclipse.jst.jsf.core.JSFVersion;
import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin;
+import org.eclipse.jst.jsf.facelet.core.internal.registry.ELProxyContributor;
+import org.eclipse.jst.jsf.facelet.core.internal.registry.ServletBeanProxyContributor;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib.FaceletTaglib;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib_1_0.FaceletLibraryClassTagLib;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.faceletTaglib_1_0.FaceletXMLDefnTaglib;
-/*package*/class TagRecordFactory
+/**
+ * Creates new tag records for a project.
+ *
+ */
+public class TagRecordFactory
{
- private final ProxyFactoryRegistry _registry;
- private final IProject _project;
+ private final ProxyFactoryRegistry _registry;
+ private final IProject _project;
- public TagRecordFactory(final IProject project,
- final ProxyFactoryRegistry registry)
+ /**
+ * @param project
+ */
+ public TagRecordFactory(final IProject project)
{
- _registry = registry;
_project = project;
+ ProxyFactoryRegistry registry = NULL_REGISTRY;
+ try
+ {
+ registry = createProxyRegistry(_project);
+ } catch (final Exception e)
+ {
+ FaceletCorePlugin.log("While creatinng proxy", e); //$NON-NLS-1$
+ }
+ _registry = registry;
}
+ /**
+ * @param taglibDefn
+ * @return the new tag record
+ */
public IFaceletTagRecord createRecords(final FaceletTaglib taglibDefn)
{
- IFaceletTagRecord retValue = null;
+ IFaceletTagRecord retValue = null;
if (taglibDefn instanceof FaceletLibraryClassTagLib)
{
if (_registry != NULL_REGISTRY)
{
final LibraryClassBasedTagRecord record = new LibraryClassBasedTagRecord(
- _registry, (FaceletLibraryClassTagLib) taglibDefn, _project);
+ _registry, (FaceletLibraryClassTagLib) taglibDefn,
+ _project);
try
{
record.initURI();
retValue = record;
- }
- catch (CoreException e)
+ } catch (CoreException e)
{
- FaceletCorePlugin.log("While creating record: "+record, e); //$NON-NLS-1$
+ FaceletCorePlugin
+ .log("While creating record: " + record, e); //$NON-NLS-1$
}
}
- }
- else if (taglibDefn instanceof FaceletXMLDefnTaglib)
+ } else if (taglibDefn instanceof FaceletXMLDefnTaglib)
{
throw new UnsupportedOperationException();
-// final XMLBasedTagRecord record = new XMLBasedTagRecord(
-// (FaceletXMLDefnTaglib) taglibDefn);
-// retValue = record;
- }
- else
+ // final XMLBasedTagRecord record = new XMLBasedTagRecord(
+ // (FaceletXMLDefnTaglib) taglibDefn);
+ // retValue = record;
+ } else
{
final XMLBasedTagRecord record = new XMLBasedTagRecord(taglibDefn);
- retValue = record;
+ retValue = record;
}
return retValue;
}
+ /**
+ * Dispose the registry.
+ */
+ public void dispose()
+ {
+ if (_registry != null && _registry != NULL_REGISTRY)
+ {
+ SafeRunner.run(new ISafeRunnable()
+ {
+
+ public void run() throws Exception
+ {
+ _registry.terminateRegistry(false);
+ }
+
+ public void handleException(Throwable e)
+ {
+ FaceletCorePlugin.log("While creatinng proxy", e); //$NON-NLS-1$
+ }
+ });
+ }
+ }
+
+ private static ProxyFactoryRegistry createProxyRegistry(
+ final IProject project) throws CoreException
+ {
+ final IConfigurationContributor[] contributor = new IConfigurationContributor[]
+ { new ServletBeanProxyContributor(JSFVersion.V1_1),
+ new ELProxyContributor(project) };
+
+ return IDERegistration.startAnImplementation(contributor, false,
+ project, project.getName(), FaceletCorePlugin.PLUGIN_ID,
+ new NullProgressMonitor());
+ }
+
private final static NullProxyFactoryRegistry NULL_REGISTRY = new NullProxyFactoryRegistry();
private static class NullProxyFactoryRegistry extends ProxyFactoryRegistry
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/WebappConfiguration.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/WebappConfiguration.java
index e65ba9a4d..bb397a98f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/WebappConfiguration.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/WebappConfiguration.java
@@ -19,7 +19,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
@@ -28,12 +27,9 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.jst.j2ee.common.ParamValue;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.model.IModelProvider;
-import org.eclipse.jst.j2ee.model.ModelProviderManager;
-import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
import org.eclipse.jst.j2ee.webapplication.ContextParam;
import org.eclipse.jst.j2ee.webapplication.WebApp;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
-import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery;
import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.WebappConfiguration.WebappListener.WebappChangeEvent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
@@ -48,22 +44,36 @@ import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
public class WebappConfiguration
{
// TODO: move these to jsf core.
- private static final String FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME = "facelets.LIBRARIES"; //$NON-NLS-1$
- private static final String JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME = "javax.faces.FACELETS_LIBRARIES"; //$NON-NLS-1$
- private final IProject _project;
+ /**
+ * The param key for Facelet 1.x libraries declared in web.xml
+ */
+ public static final String FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME = "facelets.LIBRARIES"; //$NON-NLS-1$
+ /**
+ * The param key for Facelet 2.0 libraries declared in web.xml
+ */
+ public static final String JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME = "javax.faces.FACELETS_LIBRARIES"; //$NON-NLS-1$
+ private final IProject _project;
/**
* Cached instance of ContextParamAdapter.
*/
private final ContextParamAdapter _contextParamAdapter;
- private List<IFile> _cachedFiles;
+ private List<IFile> _cachedFiles;
+ private IModelProvider _modelProvider;
+ private AbstractVirtualComponentQuery _vcQuery;
/**
* @param project
+ * @param modelProvider
+ * @param vcQuery
*/
- /*package*/ WebappConfiguration(final IProject project)
+ public WebappConfiguration(final IProject project,
+ final IModelProvider modelProvider,
+ final AbstractVirtualComponentQuery vcQuery)
{
_project = project;
_contextParamAdapter = new ContextParamAdapter();
+ _modelProvider = modelProvider;
+ _vcQuery = vcQuery;
}
/**
@@ -73,7 +83,7 @@ public class WebappConfiguration
{
_contextParamAdapter.addListener(listener);
}
-
+
/**
* @param listener
*/
@@ -83,19 +93,19 @@ public class WebappConfiguration
}
/**
- * @return the list of IFile's
+ * @return the list of IFile's
*/
public List<IFile> getFiles()
{
- final IVirtualFolder folder = JSFAppConfigUtils
- .getWebContentFolder(_project);
+ final IVirtualFolder folder = _vcQuery.getWebContentFolder(_project);
if (folder == null)
{
return Collections.emptyList();
}
- final List<String> filenames = getConfigFilesFromContextParam(_project);
+ final List<String> filenames = getConfigFilesFromContextParam(_project,
+ _modelProvider);
final List<IFile> files = new ArrayList<IFile>();
for (final String filename : filenames)
@@ -112,9 +122,7 @@ public class WebappConfiguration
private Object getModelObject()
{
- final IModelProvider provider = ModelProviderManager
- .getModelProvider(_project);
- return provider.getModelObject();
+ return _modelProvider.getModelObject();
}
/**
@@ -128,13 +136,11 @@ public class WebappConfiguration
if (webAppObj instanceof WebApp)
{
startLocatingJ2EEConfigs((WebApp) webAppObj);
- }
- else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
+ } else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
{
startLocatingJEEConfigs((org.eclipse.jst.javaee.web.WebApp) webAppObj);
}
- }
- else
+ } else
{
FaceletCorePlugin
.log(
@@ -155,20 +161,17 @@ public class WebappConfiguration
if (webAppObj instanceof WebApp)
{
stopLocatingJ2EEConfigs((WebApp) webAppObj);
- }
- else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
+ } else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
{
stopLocatingJEEConfigs((org.eclipse.jst.javaee.web.WebApp) webAppObj);
}
- }
- else
+ } else
{
FaceletCorePlugin
.log(
"Failed stopping locator for project: " + _project.getName() //$NON-NLS-1$
, new Exception());
}
- //_contextParamAdapter.dispose();
}
}
@@ -269,26 +272,24 @@ public class WebappConfiguration
* @param project
* IProject instance for which to get the context parameter's
* value.
+ * @param provider
* @return List of application configuration file names as listed in the JSF
* CONFIG_FILES context parameter ("javax.faces.CONFIG_FILES"); list
* may be empty.
*/
public static List<String> getConfigFilesFromContextParam(
- final IProject project)
+ final IProject project, IModelProvider provider)
{
List<String> filesList = Collections.EMPTY_LIST;
- if (JSFAppConfigUtils.isValidJSFProject(project))
+ // if (JSFAppConfigUtils.isValidJSFProject(project))
{
- final IModelProvider provider = ModelProviderManager
- .getModelProvider(project);
final Object webAppObj = provider.getModelObject();
if (webAppObj != null)
{
if (webAppObj instanceof WebApp)
{
- filesList = getConfigFilesForJ2EEApp(project);
- }
- else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
+ filesList = getConfigFilesForJ2EEApp((WebApp) webAppObj);
+ } else if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp)
{
filesList = getConfigFilesForJEEApp((org.eclipse.jst.javaee.web.WebApp) webAppObj);
}
@@ -309,8 +310,8 @@ public class WebappConfiguration
final org.eclipse.jst.javaee.core.ParamValue paramValue = (org.eclipse.jst.javaee.core.ParamValue) itContextParams
.next();
if (paramValue.getParamName().equals(
- FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)||
- paramValue.getParamName().equals(
+ FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)
+ || paramValue.getParamName().equals(
JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
{
filesString = paramValue.getParamValue();
@@ -320,89 +321,63 @@ public class WebappConfiguration
return parseFilesString(filesString);
}
- private static List<String> getConfigFilesForJ2EEApp(final IProject project)
+ private static List<String> getConfigFilesForJ2EEApp(final WebApp webApp)
{
- List filesList = new ArrayList();
- final WebArtifactEdit webArtifactEdit = WebArtifactEdit
- .getWebArtifactEditForRead(project);
- if (webArtifactEdit != null)
+ List<String> filesList = new ArrayList<String>();
+
+ if (webApp != null)
{
- try
+ String filesString = null;
+ // need to branch here due to model version differences
+ // (BugZilla #119442)
+ if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID)
{
- WebApp webApp = null;
- try
- {
- webApp = webArtifactEdit.getWebApp();
- }
- catch (final ClassCastException cce)
- {
- // occasionally thrown from WTP code in RC3 and possibly
- // later
- JSFCorePlugin.log(IStatus.ERROR, cce.getLocalizedMessage(),
- cce);
- return filesList;
- }
- if (webApp != null)
+ final EList contexts = webApp.getContexts();
+ final Iterator itContexts = contexts.iterator();
+ while (itContexts.hasNext())
{
- String filesString = null;
- // need to branch here due to model version differences
- // (BugZilla #119442)
- if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID)
+ final ContextParam contextParam = (ContextParam) itContexts
+ .next();
+ if (contextParam.getParamName().equals(
+ FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)
+ || contextParam.getParamName().equals(
+ JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
+ // if (contextParam.getParamName().equals(
+ // FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
{
- final EList contexts = webApp.getContexts();
- final Iterator itContexts = contexts.iterator();
- while (itContexts.hasNext())
- {
- final ContextParam contextParam = (ContextParam) itContexts
- .next();
- if (contextParam.getParamName().equals(
- FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)||
- contextParam.getParamName().equals(
- JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
- // if (contextParam.getParamName().equals(
- // FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
- {
- filesString = contextParam.getParamValue();
- break;
- }
- }
+ filesString = contextParam.getParamValue();
+ break;
}
- else
+ }
+ } else
+ {
+ final EList contextParams = webApp.getContextParams();
+ final Iterator itContextParams = contextParams.iterator();
+ while (itContextParams.hasNext())
+ {
+ final ParamValue paramValue = (ParamValue) itContextParams
+ .next();
+ if (paramValue.getName().equals(
+ FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)
+ || paramValue.getName().equals(
+ JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
+ // if (paramValue.getName().equals(
+ // FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
{
- final EList contextParams = webApp.getContextParams();
- final Iterator itContextParams = contextParams
- .iterator();
- while (itContextParams.hasNext())
- {
- final ParamValue paramValue = (ParamValue) itContextParams
- .next();
- if (paramValue.getName().equals(
- FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME)||
- paramValue.getName().equals(
- JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
- // if (paramValue.getName().equals(
- // FACELET_LIBRARIES_CONTEXT_PARAM_NAME))
- {
- filesString = paramValue.getValue();
- break;
- }
- }
+ filesString = paramValue.getValue();
+ break;
}
- filesList = parseFilesString(filesString);
}
}
- finally
- {
- webArtifactEdit.dispose();
- }
+ filesList = parseFilesString(filesString);
}
return filesList;
}
- private static List parseFilesString(final String filesString)
+ private static List<String> parseFilesString(final String filesString)
{
- final List filesList = new ArrayList();
+ final List<String> filesList = new ArrayList<String>();
if (filesString != null && filesString.trim().length() > 0)
{
final StringTokenizer stFilesString = new StringTokenizer(
@@ -463,29 +438,27 @@ public class WebappConfiguration
final int eventType = notification.getEventType();
switch (eventType)
{
- case Notification.ADD:
- final Object objNewValue = notification.getNewValue();
- if (objNewValue instanceof ContextParam
- || objNewValue instanceof org.eclipse.jst.javaee.core.ParamValue)
- {
- contextParamAdded((EObject) objNewValue);
- }
- else if (objNewValue instanceof ParamValue)
- {
- paramValueAdded((EObject) objNewValue);
- }
+ case Notification.ADD:
+ final Object objNewValue = notification.getNewValue();
+ if (objNewValue instanceof ContextParam
+ || objNewValue instanceof org.eclipse.jst.javaee.core.ParamValue)
+ {
+ contextParamAdded((EObject) objNewValue);
+ } else if (objNewValue instanceof ParamValue)
+ {
+ paramValueAdded((EObject) objNewValue);
+ }
break;
- case Notification.REMOVE:
- final Object objOldValue = notification.getOldValue();
- if (objOldValue instanceof ContextParam
- || objOldValue instanceof org.eclipse.jst.javaee.core.ParamValue)
- {
- contextParamRemoved((EObject) objOldValue);
- }
- else if (objOldValue instanceof ParamValue)
- {
- paramValueRemoved((EObject) objOldValue);
- }
+ case Notification.REMOVE:
+ final Object objOldValue = notification.getOldValue();
+ if (objOldValue instanceof ContextParam
+ || objOldValue instanceof org.eclipse.jst.javaee.core.ParamValue)
+ {
+ contextParamRemoved((EObject) objOldValue);
+ } else if (objOldValue instanceof ParamValue)
+ {
+ paramValueRemoved((EObject) objOldValue);
+ }
break;
}
}
@@ -525,7 +498,8 @@ public class WebappConfiguration
private void checkAndFireFileChanges()
{
- final List<IFile> oldFiles = _cachedFiles;
+ final List<IFile> oldFiles = _cachedFiles == null ? Collections.EMPTY_LIST
+ : _cachedFiles;
final List<IFile> newFiles = getFiles();
final List<IFile> filesAdded = new ArrayList<IFile>();
@@ -616,15 +590,15 @@ public class WebappConfiguration
if (contextParam instanceof ContextParam)
{
name = ((ContextParam) contextParam).getParamName();
- }
- else if (contextParam instanceof org.eclipse.jst.javaee.core.ParamValue)
+ } else if (contextParam instanceof org.eclipse.jst.javaee.core.ParamValue)
{
name = ((org.eclipse.jst.javaee.core.ParamValue) contextParam)
.getParamName();
}
- if (FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME.equals(name)||
- JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME.equals(name))
+ if (FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME.equals(name)
+ || JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME
+ .equals(name))
{
isConfigFiles = true;
}
@@ -650,15 +624,15 @@ public class WebappConfiguration
if (paramVal instanceof ParamValue)
{
name = ((ParamValue) paramVal).getName();
- }
- else if (paramVal instanceof org.eclipse.jst.javaee.core.ParamValue)
+ } else if (paramVal instanceof org.eclipse.jst.javaee.core.ParamValue)
{
name = ((org.eclipse.jst.javaee.core.ParamValue) paramVal)
.getParamName();
}
- if (FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME.equals(name)||
- JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME.equals(name))
+ if (FACELET_10_LIBRARIES_CONTEXT_PARAM_NAME.equals(name)
+ || JSF20_FACELET_LIBRARIES_CONTEXT_PARAM_NAME
+ .equals(name))
{
isConfigFiles = true;
}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/XMLBasedTagRecord.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/XMLBasedTagRecord.java
index 79d79401c..1c911170b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/XMLBasedTagRecord.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/registry/taglib/XMLBasedTagRecord.java
@@ -69,6 +69,10 @@ public class XMLBasedTagRecord extends FaceletTagRecord
if (tagDefn == null && _tagIndexByName.size() < _taglibDefn.getTag().size())
{
tagDefn = findTag(name);
+ if (tagDefn != null)
+ {
+ _tagIndexByName.put(name, tagDefn);
+ }
}
return tagDefn;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/validation/TaglibValidator.java b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/validation/TaglibValidator.java
index 9f5a8d770..7e35aa641 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/validation/TaglibValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facelet.core/src/org/eclipse/jst/jsf/facelet/core/internal/validation/TaglibValidator.java
@@ -16,6 +16,7 @@ import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
@@ -24,7 +25,8 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.jsf.common.internal.componentcore.AbstractVirtualComponentQuery.DefaultVirtualComponentQuery;
import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.TagModelParser;
import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.WebappConfiguration;
@@ -102,8 +104,8 @@ public class TaglibValidator implements IValidatorJob
private boolean shouldValidate(IFile currentFile)
{
- final IVirtualFolder folder = JSFAppConfigUtils
- .getWebContentFolder(currentFile.getProject());
+ final IProject project = currentFile.getProject();
+ final IVirtualFolder folder = new DefaultVirtualComponentQuery().getWebContentFolder(project);
final IPath filePath = currentFile.getProjectRelativePath();
final IPath webFolderPath = folder.getUnderlyingFolder().getProjectRelativePath();
boolean isInValidPath = ViewUtil.isFaceletVDLFile(currentFile)
@@ -111,7 +113,7 @@ public class TaglibValidator implements IValidatorJob
if (isInValidPath)
{
- for (final String configuredPath : WebappConfiguration.getConfigFilesFromContextParam(currentFile.getProject()))
+ for (final String configuredPath : WebappConfiguration.getConfigFilesFromContextParam(project, ModelProviderManager.getModelProvider(project)))
{
final IPath path = webFolderPath.append(configuredPath);
if (path.equals(filePath))
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/ProjectTracker.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/ProjectTracker.java
index ea2f5b816..870fc8da7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/ProjectTracker.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/ProjectTracker.java
@@ -17,6 +17,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener;
import org.eclipse.jst.jsf.common.internal.resource.LifecycleListener;
import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent;
@@ -43,7 +44,7 @@ class ProjectTracker
public ProjectTracker(final IWorkspaceRoot root, final ProjectAdvisor projectAdvisor)
{
_root = root;
- _lifecycleListener = new LifecycleListener();
+ _lifecycleListener = new LifecycleListener(ResourcesPlugin.getWorkspace());
_resourceChangeListener = new ResourceChangeListener();
_myListeners = new CopyOnWriteArrayList<ProjectTrackingListener>();
if (projectAdvisor != null)

Back to the top