/******************************************************************************* * Copyright (c) 2009 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 * Zend Technologies *******************************************************************************/ package org.eclipse.php.internal.core.documentModel.dom; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.Platform; import org.eclipse.dltk.core.IModelElement; import org.eclipse.php.internal.core.documentModel.DOMModelForPHP; import org.eclipse.php.internal.core.documentModel.parser.PHPRegionContext; import org.eclipse.wst.html.core.internal.document.ElementStyleImpl; import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; import org.eclipse.wst.sse.core.internal.validate.ValidationAdapter; import org.eclipse.wst.xml.core.internal.document.ElementImpl; import org.eclipse.wst.xml.core.internal.validate.ValidationComponent; import org.w3c.dom.Document; import org.w3c.dom.Node; /** * Represents elements in the dom model {@link DOMModelForPHP} * * @author Roy, 2007 */ public class ElementImplForPHP extends ElementStyleImpl implements IAdaptable, IImplForPHP { private static final String WORKBENCH_ADAPTER = "org.eclipse.ui.model.IWorkbenchAdapter"; //$NON-NLS-1$ private IModelElement modelElement; public ElementImplForPHP() { super(); } public Object getAdapter(Class adapter) { if (adapter != null && adapter.getName().equals(WORKBENCH_ADAPTER)) { return null; } return Platform.getAdapterManager().getAdapter(this, adapter); } public ElementImplForPHP(ElementStyleImpl that) { super(that); } protected boolean isNestedClosed(String regionType) { return regionType == PHPRegionContext.PHP_CLOSE; } public Node cloneNode(boolean deep) { ElementImpl cloned = new ElementImplForPHP(this); if (deep) cloneChildNodes(cloned, deep); return cloned; } /** * @see ElementStyleImpl#setOwnerDocument(Document) make this method package * visible */ protected void setOwnerDocument(Document ownerDocument) { super.setOwnerDocument(ownerDocument); } /** * @see setTagName(String) make this method package visible */ protected void setTagName(String tagName) { super.setTagName(tagName); } public boolean isGlobalTag() { return isPHPTag() ? false : super.isGlobalTag(); } /** * @return true if it is a php element */ public boolean isPHPTag() { return PHPDOMModelParser.PHP_TAG_NAME.equals(getNodeName()); } public INodeAdapter getExistingAdapter(Object type) { // no validation or validation propagation for PHP tags if (isPHPTag() && type instanceof Class && ValidationAdapter.class.isAssignableFrom((Class) type)) { return nullValidator; } return super.getExistingAdapter(type); } private final static ValidationComponent nullValidator = new NullValidator(); public String getPrefix() { final String prefix = super.getPrefix(); if (prefix == null && isPHPTag()) { return ""; //$NON-NLS-1$ } return prefix; } public IModelElement getModelElement() { return modelElement; } public void setModelElement(IModelElement modelElement) { this.modelElement = modelElement; } @Override public boolean isStartTagClosed() { return isPHPTag() ? true : super.isStartTagClosed(); } }