blob: ed902009fe5a03b571388bd66a8a4af26de40d08 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 IBM 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsp.core.internal.modelquery;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver;
import org.eclipse.wst.sse.core.internal.provisional.AbstractAdapterFactory;
import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.util.Debug;
import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
import org.eclipse.wst.xml.core.internal.contentmodel.util.CMDocumentCache;
import org.eclipse.wst.xml.core.internal.modelquery.XMLCatalogIdResolver;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapter;
public class ModelQueryAdapterFactoryForJSP extends AbstractAdapterFactory implements IModelStateListener {
protected JSPModelQueryAdapterImpl modelQueryAdapterImpl;
protected IStructuredModel stateNotifier = null;
public ModelQueryAdapterFactoryForJSP() {
this(ModelQueryAdapter.class, true);
}
/**
* ModelQueryAdapterFactoryForJSP constructor comment.
*
* @param adapterKey
* java.lang.Object
* @param registerAdapters
* boolean
*/
public ModelQueryAdapterFactoryForJSP(Object key, boolean registerAdapters) {
super(key, registerAdapters);
}
public INodeAdapterFactory copy() {
return new ModelQueryAdapterFactoryForJSP(getAdapterKey(), isShouldRegisterAdapter());
}
/**
* createAdapter method comment.
*/
protected INodeAdapter createAdapter(INodeNotifier target) {
if (Debug.displayInfo)
System.out.println("-----------------------ModelQueryAdapterFactoryForJSP.createAdapter" + target); //$NON-NLS-1$
if (modelQueryAdapterImpl == null) {
if (target instanceof IDOMNode) {
IDOMNode xmlNode = (IDOMNode) target;
IStructuredModel model = stateNotifier = xmlNode.getModel();
if (model.getBaseLocation() != null) {
stateNotifier.addModelStateListener(this);
}
org.eclipse.wst.sse.core.internal.util.URIResolver resolver = model.getResolver();
if (Debug.displayInfo)
System.out.println("----------------ModelQueryAdapterFactoryForJSP... baseLocation : " + resolver.getFileBaseLocation()); //$NON-NLS-1$
/**
* XMLCatalogIdResolver currently requires a filesystem
* location string. Customarily this will be what is in the
* deprecated SSE URIResolver and required by the Common URI
* Resolver.
*/
URIResolver idResolver = null;
if (resolver != null) {
idResolver = new XMLCatalogIdResolver(resolver.getFileBaseLocation(), resolver);
}
ModelQuery modelQuery = createModelQuery(model, idResolver);
modelQuery.setEditMode(ModelQuery.EDIT_MODE_UNCONSTRAINED);
modelQueryAdapterImpl = new JSPModelQueryAdapterImpl(new CMDocumentCache(), modelQuery, idResolver);
}
}
return modelQueryAdapterImpl;
}
ModelQuery createModelQuery(IStructuredModel model, URIResolver resolver) {
return new JSPModelQueryImpl(model, resolver);
}
/**
* @see IModelStateListener#modelAboutToBeChanged(IStructuredModel)
*/
public void modelAboutToBeChanged(IStructuredModel model) {
}
/**
* @see IModelStateListener#modelChanged(IStructuredModel)
*/
public void modelChanged(IStructuredModel model) {
}
/**
* @see IModelStateListener#modelDirtyStateChanged(IStructuredModel,
* boolean)
*/
public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) {
}
/**
* @see IModelStateListener#modelResourceDeleted(IStructuredModel)
*/
public void modelResourceDeleted(IStructuredModel model) {
}
/**
* @see IModelStateListener#modelResourceMoved(IStructuredModel,
* IStructuredModel)
*/
public void modelResourceMoved(IStructuredModel oldModel, IStructuredModel newModel) {
// if oldModel != newModel, bad things might happen with the adapter
stateNotifier.removeModelStateListener(this);
stateNotifier = newModel;
updateResolver(stateNotifier);
stateNotifier.addModelStateListener(this);
}
public void release() {
super.release();
if (stateNotifier != null) {
stateNotifier.removeModelStateListener(this);
}
stateNotifier = null;
if (modelQueryAdapterImpl != null) {
modelQueryAdapterImpl.release();
}
}
protected void updateResolver(IStructuredModel model) {
String baseLocation = model.getBaseLocation();
IFile baseFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(model.getBaseLocation()));
if (baseFile != null) {
if (baseFile.getLocation() != null) {
baseLocation = baseFile.getLocation().toString();
}
if (baseLocation == null && baseFile.getLocationURI() != null) {
baseLocation = baseFile.getLocationURI().toString();
}
if (baseLocation == null) {
baseLocation = baseFile.getFullPath().toString();
}
}
else {
baseLocation = model.getBaseLocation();
}
modelQueryAdapterImpl.setIdResolver(new XMLCatalogIdResolver(baseLocation, model.getResolver()));
}
public void modelAboutToBeReinitialized(IStructuredModel structuredModel) {
// TODO Auto-generated method stub
}
public void modelReinitialized(IStructuredModel structuredModel) {
updateResolver(structuredModel);
}
}