/******************************************************************************* * Copyright (c) 2001, 2005 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 * Jens Lukowski/Innoopract - initial renaming/restructuring * *******************************************************************************/ package org.eclipse.wst.xml.core.internal; import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocumentListener; import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener; 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.provisional.events.AboutToBeChangedEvent; import org.eclipse.wst.sse.core.internal.provisional.events.IModelAboutToBeChangedListener; import org.eclipse.wst.sse.core.internal.provisional.events.IStructuredDocumentListener; import org.eclipse.wst.sse.core.internal.provisional.events.NewDocumentEvent; import org.eclipse.wst.sse.core.internal.provisional.events.NoChangeEvent; import org.eclipse.wst.sse.core.internal.provisional.events.RegionChangedEvent; import org.eclipse.wst.sse.core.internal.provisional.events.RegionsReplacedEvent; import org.eclipse.wst.sse.core.internal.provisional.events.StructuredDocumentRegionsReplacedEvent; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.core.internal.util.Debug; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; /** * Purely for use in debugging */ public class EveryNodeDebugAdapter implements IDebugAdapter { static class InternalDocumentListener implements IDocumentListener { /* * (non-Javadoc) * * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent) */ public void documentAboutToBeChanged(DocumentEvent event) { Debug.println("IdocumentAboutToBeChanged: " + event); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent) */ public void documentChanged(DocumentEvent event) { Debug.println("IdocumentChanged: " + event); //$NON-NLS-1$ } } static class InternalModelStateListener implements IModelStateListener { /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.IModelStateListener#modelAboutToBeChanged(org.eclipse.wst.sse.core.IStructuredModel) */ public void modelAboutToBeChanged(IStructuredModel model) { Debug.println("modelAboutToBeChanged: " + model); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.IModelStateListener#modelChanged(org.eclipse.wst.sse.core.IStructuredModel) */ public void modelChanged(IStructuredModel model) { Debug.println("modelChanged: " + model); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.IModelStateListener#modelDirtyStateChanged(org.eclipse.wst.sse.core.IStructuredModel, * boolean) */ public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) { Debug.println("modelDirtyStateChanged: " + model); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.IModelStateListener#modelResourceDeleted(org.eclipse.wst.sse.core.IStructuredModel) */ public void modelResourceDeleted(IStructuredModel model) { Debug.println("modelResourceDeleted: " + model); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.IModelStateListener#modelResourceMoved(org.eclipse.wst.sse.core.IStructuredModel, * org.eclipse.wst.sse.core.IStructuredModel) */ public void modelResourceMoved(IStructuredModel oldModel, IStructuredModel newModel) { Debug.println("modelResourceMoved: " + "oldModel: " + oldModel + "newModel: " + newModel); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } public void modelAboutToBeReinitialized(IStructuredModel structuredModel) { Debug.println("modelAboutToBeReinitialized: " + "structuredModel: " + structuredModel); //$NON-NLS-1$ //$NON-NLS-2$ } public void modelReinitialized(IStructuredModel structuredModel) { Debug.println("modelReinitialized: " + "structuredModel: " + structuredModel); //$NON-NLS-1$ //$NON-NLS-2$ } } static class InternalStructuredDocumentAboutToChange implements IModelAboutToBeChangedListener { /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IModelAboutToBeChangedListener#modelAboutToBeChanged(org.eclipse.wst.sse.core.events.AboutToBeChangedEvent) */ public void modelAboutToBeChanged(AboutToBeChangedEvent structuredDocumentEvent) { Debug.println("structuredDocumentAboutToBeChanged: " + structuredDocumentEvent); //$NON-NLS-1$ } } static class InternalStructuredDocumentListener implements IStructuredDocumentListener { /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IStructuredDocumentListener#newModel(org.eclipse.wst.sse.core.events.NewDocumentContentEvent) */ public void newModel(NewDocumentEvent structuredDocumentEvent) { Debug.println("structuredDocumentChanged - newModel: " + structuredDocumentEvent); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IStructuredDocumentListener#noChange(org.eclipse.wst.sse.core.events.NoChangeEvent) */ public void noChange(NoChangeEvent structuredDocumentEvent) { Debug.println("structuredDocumentChanged - noChange: " + structuredDocumentEvent); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IStructuredDocumentListener#nodesReplaced(org.eclipse.wst.sse.core.events.StructuredDocumentRegionsReplacedEvent) */ public void nodesReplaced(StructuredDocumentRegionsReplacedEvent structuredDocumentEvent) { Debug.println("structuredDocumentChanged - nodesReplaced: " + structuredDocumentEvent); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IStructuredDocumentListener#regionChanged(org.eclipse.wst.sse.core.events.RegionChangedEvent) */ public void regionChanged(RegionChangedEvent structuredDocumentEvent) { Debug.println("structuredDocumentChanged - regionChanged: " + structuredDocumentEvent); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.events.IStructuredDocumentListener#regionsReplaced(org.eclipse.wst.sse.core.events.RegionsReplacedEvent) */ public void regionsReplaced(RegionsReplacedEvent structuredDocumentEvent) { Debug.println("structuredDocumentChanged - regionsReplaced: " + structuredDocumentEvent); //$NON-NLS-1$ } } private static EveryNodeDebugAdapter singletonInstance; public static EveryNodeDebugAdapter getInstance() { if (singletonInstance == null) { singletonInstance = new EveryNodeDebugAdapter(); } return singletonInstance; } InternalDocumentListener fInternalDocumentListener; InternalModelStateListener fInternalModelStateListener; InternalStructuredDocumentAboutToChange fInternalStructuredDocumentAboutToChange; InternalStructuredDocumentListener fInternalStructuredDocumentListener; IStructuredModel fModel; /** * */ public EveryNodeDebugAdapter() { super(); fInternalDocumentListener = new InternalDocumentListener(); fInternalStructuredDocumentAboutToChange = new InternalStructuredDocumentAboutToChange(); fInternalStructuredDocumentListener = new InternalStructuredDocumentListener(); fInternalModelStateListener = new InternalModelStateListener(); } /** * @param target */ public EveryNodeDebugAdapter(INodeNotifier target) { this(); } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.INodeAdapter#isAdapterForType(java.lang.Object) */ public boolean isAdapterForType(Object type) { return (type == IDebugAdapter.class); } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.INodeAdapter#notifyChanged(org.eclipse.wst.sse.core.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) { if (notifier instanceof IDOMNode) { setModel(((IDOMNode) notifier).getModel()); } Debug.println("notifier: " + notifier + " " + INodeNotifier.EVENT_TYPE_STRINGS[eventType] + " changedFeature: " + changedFeature + " oldValue: " + oldValue + " newValue: " + newValue + " pos: " + pos); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ } /* * (non-Javadoc) * * @see org.eclipse.wst.sse.core.internal.IDebugAdapter#setDocument(org.eclipse.wst.sse.core.text.IStructuredDocument) */ private void setModel(IStructuredModel structuredModel) { if (fModel == structuredModel) return; if (fModel != null) { fModel.removeModelStateListener(fInternalModelStateListener); // IStructuredDocument structuredDocument = fModel.getStructuredDocument(); if (structuredDocument != null) { structuredDocument.removeDocumentListener(fInternalDocumentListener); structuredDocument.removeDocumentAboutToChangeListener(fInternalStructuredDocumentAboutToChange); structuredDocument.removeDocumentChangedListener(fInternalStructuredDocumentListener); } } fModel = structuredModel; if (fModel != null) { fModel.addModelStateListener(fInternalModelStateListener); // IStructuredDocument structuredDocument = fModel.getStructuredDocument(); if (structuredDocument != null) { structuredDocument.addDocumentListener(fInternalDocumentListener); structuredDocument.addDocumentAboutToChangeListener(fInternalStructuredDocumentAboutToChange); structuredDocument.addDocumentChangedListener(fInternalStructuredDocumentListener); } } } }