blob: 40e01b5abb157acdd2f9d17ab3a5ec963c673d00 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.jsp.core.internal.pagevar;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.IVariableInfo;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IDocumentPageVariableAdapter;
import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IPageVariableAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.w3c.dom.Element;
/**
* @author mengbo
* @version 1.5
*/
public class PageVariableAdapter implements IPageVariableAdapter {
static final PageVariableAdapter _instance = new PageVariableAdapter();
/**
* @return the singleton instance
*/
public static PageVariableAdapter getInstance() {
return _instance;
}
/**
* no external instatiation
*/
private PageVariableAdapter() {
super();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.sse.core.internal.provisional.INodeAdapter#isAdapterForType(java.lang.Object)
*/
public boolean isAdapterForType(Object type) {
return IPageVariableAdapter.class.equals(type);
}
private IDocumentPageVariableAdapter getDocumentAdapter(
INodeNotifier notifier) {
if (notifier instanceof IDOMNode) {
IDOMModel model = ((IDOMNode) notifier).getModel();
if (model != null) {
IDOMDocument document = model.getDocument();
if (document != null) {
return (IDocumentPageVariableAdapter) document
.getAdapterFor(IDocumentPageVariableAdapter.class);
}
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.sse.core.internal.provisional.INodeAdapter#notifyChanged(org.eclipse.wst.sse.core.internal.provisional.INodeNotifier,
* int, java.lang.Object, java.lang.Object, java.lang.Object, int)
*/
public void notifyChanged(INodeNotifier notifier, int eventType,
Object changedFeature, Object oldValue, Object newValue, int pos) {
IDocumentPageVariableAdapter docadapter = getDocumentAdapter(notifier);
switch (eventType) {
case INodeNotifier.STRUCTURE_CHANGED:
docadapter.refresh();
break;
case INodeNotifier.CONTENT_CHANGED:
case INodeNotifier.CHANGE:
// only this node changed, only refresh if this node is page
// variable node
if (notifier instanceof Element
&& supportVariableInfo((Element) notifier)) {
docadapter.refresh();
}
break;
default:
// skip. Ignore other kinds of change.
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IPageVariableAdapter#supportMultipleVariable(org.w3c.dom.Element)
*/
public boolean supportMultipleVariable(Element element) {
return false;
}
/**
* @param element
* @return
*/
private boolean supportVariableInfo(Element element) {
return PageVariableAdatperRegistry.getInstance().getTagVarDescriptor(
element) != null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IPageVariableAdapter#getVariableInfo(org.w3c.dom.Element)
*/
public IVariableInfo getVariableInfo(Element element) {
TagVarDescriptor desc = PageVariableAdatperRegistry.getInstance()
.getTagVarDescriptor(element);
if (desc == null) {
return null;
}
String name;
if (desc.isVarNameIsAttr()) {
name = element.getAttribute(desc.getVarName());
if (name == null || name.length() == 0) {
return null; // missing name.
}
} else {
name = desc.getVarName();
}
String type;
if (desc.isVarTypeStringIsAttr()) {
type = element.getAttribute(desc.getVarTypeString());
if (type == null || type.length() == 0) {
return null; // missing type
}
} else {
type = desc.getVarTypeString();
}
return new VariableInfo(name, desc.getVarTypeMode(), type);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.IPageVariableAdapter#getVariableInfos(org.w3c.dom.Element)
*/
public List getVariableInfos(Element element) {
IVariableInfo info = getVariableInfo(element);
if (info == null) {
return Collections.EMPTY_LIST;
}
List ret = new ArrayList(1);
ret.add(info);
return ret;
}
}