blob: 380180888ffc96e1ba0f68509f9e1b7567b8392a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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.wst.jsdt.web.core.internal.document;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.xml.core.internal.document.AttrImpl;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
/**
* The responsibility of this class is to monitor page directives and if a
* change in embedded type is is made, it will signal the structuredModel that
* it needs to reinitialize itself.
*/
class PageDirectiveWatcherImpl implements PageDirectiveWatcher {
private static Object adapterType = PageDirectiveWatcher.class;
IDOMElement targetElement;
/**
* Constructor for PageDirectiveWatcherImpl.
*/
public PageDirectiveWatcherImpl(IDOMElement target) {
super();
targetElement = target;
String contentTypeValue = target.getAttribute("contentType"); //$NON-NLS-1$
if (contentTypeValue != null) {
// using concrete class below, since "changed" is something of an
// internal method
PageDirectiveAdapterImpl pageDirectiveAdapter = (PageDirectiveAdapterImpl) ((IDOMDocument) targetElement
.getOwnerDocument())
.getAdapterFor(PageDirectiveAdapter.class);
pageDirectiveAdapter.changedContentType(
((IndexedRegion) targetElement).getStartOffset(),
contentTypeValue);
}
String languageValue = target.getAttribute("language"); //$NON-NLS-1$
if (languageValue != null) {
// using concrete class below, since "changed" is something of an
// internal method
PageDirectiveAdapterImpl pageDirectiveAdapter = (PageDirectiveAdapterImpl) ((IDOMDocument) targetElement
.getOwnerDocument())
.getAdapterFor(PageDirectiveAdapter.class);
pageDirectiveAdapter.changedLanguage(
((IndexedRegion) targetElement).getStartOffset(),
languageValue);
}
}
public boolean isAdapterForType(Object type) {
return (type == adapterType);
}
public void notifyChanged(INodeNotifier notifier, int eventType,
Object changedFeature, Object oldValue, Object newValue, int pos) {
// we should only be added to page directives, so if we see a page
// directive
// change, we need to check its attributes, and notify the
// PageDirectiveAdapter when
// certain ones chane, so it can make its "centralized" decisions.
if (notifier instanceof IDOMNode) {
switch (eventType) {
case INodeNotifier.CHANGE:
if (changedFeature instanceof AttrImpl) {
AttrImpl attribute = (AttrImpl) changedFeature;
String name = attribute.getName();
if (name.equals("contentType")) { //$NON-NLS-1$
// using concrete class below, since "changed" is
// something of an internal method
PageDirectiveAdapterImpl pageDirectiveAdapter = (PageDirectiveAdapterImpl) ((IDOMDocument) targetElement
.getOwnerDocument())
.getAdapterFor(PageDirectiveAdapter.class);
pageDirectiveAdapter.changedContentType(
((IndexedRegion) targetElement)
.getStartOffset(), (String) newValue);
}
if (name.equals("language")) { //$NON-NLS-1$
// using concrete class below, since "changed" is
// something of an internal method
PageDirectiveAdapterImpl pageDirectiveAdapter = (PageDirectiveAdapterImpl) ((IDOMDocument) targetElement
.getOwnerDocument())
.getAdapterFor(PageDirectiveAdapter.class);
pageDirectiveAdapter.changedLanguage(
((IndexedRegion) targetElement)
.getStartOffset(), (String) newValue);
}
}
break;
case INodeNotifier.REMOVE:
// System.out.println("removed"+new Date().toString());
break;
default:
break;
}
}
}
public String getContentType() {
String contentTypeValue = targetElement.getAttribute("contentType"); //$NON-NLS-1$
return contentTypeValue;
}
public String getLanguage() {
String languageValue = targetElement.getAttribute("language"); //$NON-NLS-1$
return languageValue;
}
public int getOffset() {
return targetElement.getStartOffset();
}
}