diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/ModelLoader.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/ModelLoader.java | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/ModelLoader.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/ModelLoader.java deleted file mode 100644 index 417b949b3..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/ModelLoader.java +++ /dev/null @@ -1,215 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2007 Oracle Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Oracle Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsf.facesconfig.ui; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jst.jsf.facesconfig.ui.util.WebrootUtil; -import org.eclipse.jst.jsf.facesconfig.util.FacesConfigArtifactEdit; -import org.eclipse.ui.PlatformUI; - -/** - * Centralizes logic to load the faces config model off of the UI thread for - * the FacesConfig Editor. - * - * Also encapsulates the lifecycle for the instance of the faces artifact - * created for its editor. All creation, access and destruction of the artifact - * should be centralized through this class - * - * @author cbateman - * - */ -class ModelLoader -{ - private FacesConfigArtifactEdit _edit; - private Job _loadModelJob; - private CountDownLatch _modelLoaded = new CountDownLatch(1); - - /** - * @return the artifact edit or null if not loaded. Should only be called - * after load() is called and has executed its callback - */ - public synchronized FacesConfigArtifactEdit getEdit() { - return _edit; - } - - private synchronized void setEdit(FacesConfigArtifactEdit edit) - { - _edit = edit; - } - - void waitForLoad(long timeoutMs) throws InterruptedException - { - _modelLoaded.await(timeoutMs, TimeUnit.MILLISECONDS); - } - - /** - * Dispose of the model and any unfinished loading operations - * - * Must be run on the UI thread. - */ - public synchronized void dispose() - { - assertOnDisplayThread(); - - // if the load model job has not completed, cancel it - if (_loadModelJob != null - && _loadModelJob.getResult() == null) - { - _loadModelJob.cancel(); - } - - if (_edit != null) - { - _edit.dispose(); - //System.out.println("FacesConfigEditor.dispose(): isDisposed == "+_edit.isDisposed()); - } - } - - /** - * Load the model file located by path in project. Must be called from the UI thread. - * - * Method does not block. - * - * @param project - * @param path - * @param isWebProject - * @param signalComplete to be asyncExec'd on the UI thread when the model is loaded - */ - public void load(final IProject project, final IPath path, final boolean isWebProject, final ModelLoaderComplete signalComplete) - { - assertOnDisplayThread(); - _loadModelJob = new ModelLoaderJob(project, path, isWebProject, signalComplete); - _loadModelJob.schedule(); - } - - private class ModelLoaderJob extends Job - { - private final IProject _project; - private final IPath _path; - private final ModelLoaderComplete _runnable; - private final boolean _isWebProject; - - ModelLoaderJob(final IProject project, final IPath path, final boolean isWebProject, final ModelLoaderComplete signalComplete) - { - super(EditorMessages.ModelLoader_LoadingModelJobName); - _project = project; - _path = path; - _runnable = signalComplete; - _isWebProject = isWebProject; - } - - @Override - protected IStatus run(IProgressMonitor monitor) - { - FacesConfigArtifactEdit artifactEdit = loadModel(_project, _path); - - // synchrnoize on the ModelLoader. Ensure that any call to dispose() - // that occurs before we set the edit is done atomically. - synchronized(ModelLoader.this) - { - // only bother with this if the task hasn't been signalled for cancel - if (!monitor.isCanceled()) - { - setEdit(artifactEdit); - - _runnable.setFacesConfigArtifactEdit(artifactEdit); - - // finish as quickly possible; we are holding the ModelLoader - // lock so we must ensure that we don't block. - // NEVER USE syncExec here. - PlatformUI.getWorkbench().getDisplay().asyncExec(_runnable); - } - // if we were cancelled, then dispose of the artifact edit - else - { - if (artifactEdit != null) - { - artifactEdit.dispose(); - } - } - } - - // signal that we are done loading - _modelLoaded.countDown(); - return Status.OK_STATUS; - } - - /** - * Loads the configuration model from the given path. - * - */ - private FacesConfigArtifactEdit loadModel(IProject project, IPath modelPath) - { - if (_isWebProject) - { - IFolder webContentFolder = WebrootUtil.getWebContentFolder(project); - Assert - .isTrue(webContentFolder != null - && webContentFolder.exists()); - - IPath relativePath = modelPath; - if (webContentFolder.getFullPath().isPrefixOf(modelPath)) { - relativePath = modelPath.removeFirstSegments(webContentFolder - .getFullPath().segmentCount()); - } - - - return FacesConfigArtifactEdit - .getFacesConfigArtifactEditForWrite(project, relativePath - .toString()); - } - - return null; - } - } - - abstract static class ModelLoaderComplete implements Runnable - { - private FacesConfigArtifactEdit _edit; - - private void setFacesConfigArtifactEdit(FacesConfigArtifactEdit edit) - { - _edit = edit; - } - - public final void run() - { - assertOnDisplayThread(); - doRun(_edit); - } - - /** - * Called by the runnable. Implementer should _not_ cache the edit variable - * edit may be null - * - * @param edit - */ - protected abstract void doRun(FacesConfigArtifactEdit edit); - } - - private static void assertOnDisplayThread() - { - if (Thread.currentThread() != PlatformUI.getWorkbench().getDisplay().getThread()) - { - throw new IllegalStateException("ModelLoaderComplete must be called on the UI thread"); //$NON-NLS-1$ - } - } -} |