/******************************************************************************* * Copyright (c) 2004, 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 *******************************************************************************/ package org.eclipse.jst.jsp.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; if (target.hasAttribute("contentType")) { //$NON-NLS-1$ String contentTypeValue = target.getAttribute("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(), contentTypeValue); } if (target.hasAttribute("language")) { //$NON-NLS-1$ String languageValue = target.getAttribute("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(), languageValue); } if (target.hasAttribute("isELIgnored")) { //$NON-NLS-1$ String elIgnored = target.getAttribute("isELIgnored"); //$NON-NLS-1$ PageDirectiveAdapterImpl pageDirectiveAdapter = (PageDirectiveAdapterImpl) ((IDOMDocument) targetElement.getOwnerDocument()).getAdapterFor(PageDirectiveAdapter.class); pageDirectiveAdapter.setElIgnored(elIgnored); } } 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$ //$NON-NLS-2$ // 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(); } }