[136212] CSSNodeAdapter should implement IJFaceNodeAdapter
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/contentoutline/CSSNodeAdapter.java b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/contentoutline/CSSNodeAdapter.java
index 7668861..756aee6 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/contentoutline/CSSNodeAdapter.java
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/internal/contentoutline/CSSNodeAdapter.java
@@ -17,24 +17,34 @@
 import java.util.Vector;
 
 import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.views.properties.PropertySheetPage;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSDocument;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSMediaRule;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclaration;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleRule;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleSheet;
+import org.eclipse.wst.css.ui.internal.image.CSSImageHelper;
+import org.eclipse.wst.css.ui.internal.image.CSSImageType;
 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapter;
 import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapterFactory;
+import org.w3c.dom.css.CSSImportRule;
+import org.w3c.dom.css.CSSRule;
+import org.w3c.dom.stylesheets.MediaList;
 
 /**
  * Adapts the CSS DOM node to a JFace viewer.
  */
-class CSSNodeAdapter implements INodeAdapter, Runnable {
+class CSSNodeAdapter implements IJFaceNodeAdapter, INodeAdapter, Runnable {
 	class NotifyContext {
 		NotifyContext(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) {
 			this.notifier = notifier;
@@ -97,19 +107,21 @@
 			if (context.notifier instanceof ICSSStyleDeclaration) {
 				refresh_rule = true;
 				targets.add(context);
-				//			pos_rule = i;
+				// pos_rule = i;
 			}
-			//		((NotifyContext) notifyQueue.get(i)).fire();
+			// ((NotifyContext) notifyQueue.get(i)).fire();
 		}
 		if (refresh_all) {
 			((NotifyContext) notifyQueue.get(pos_all)).fire();
-		} else if (refresh_rule) {
+		}
+		else if (refresh_rule) {
 			Iterator i = targets.iterator();
 			while (i.hasNext()) {
 				((NotifyContext) i.next()).fire();
 			}
-			//	else if (refresh_rule) internalRefreshAll();
-		} else {
+			// else if (refresh_rule) internalRefreshAll();
+		}
+		else {
 			for (int i = 0; i < notifyQueue.size(); i++) {
 				((NotifyContext) notifyQueue.get(i)).fire();
 			}
@@ -127,7 +139,8 @@
 			Object listener = iterator.next();
 			if (listener instanceof StructuredViewer) {
 				notifyChangedForStructuredViewer((StructuredViewer) listener, notifier, eventType, changedFeature, oldValue, newValue, pos);
-			} else if (listener instanceof PropertySheetPage) {
+			}
+			else if (listener instanceof PropertySheetPage) {
 				notifyChangedForPropertySheetPage((PropertySheetPage) listener, notifier, eventType, changedFeature, oldValue, newValue, pos);
 			}
 		}
@@ -151,7 +164,8 @@
 				ICSSNode temp = (changedFeature != null) ? (ICSSNode) changedFeature : (ICSSNode) newValue;
 				if (temp instanceof ICSSStyleRule) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					for (;;) {
 						if (temp instanceof ICSSStyleRule) {
 							break;
@@ -163,18 +177,21 @@
 					}
 					if (temp == null || temp instanceof ICSSStyleSheet) {
 						viewer.refresh();
-					} else {
+					}
+					else {
 						viewer.refresh(temp);
 					}
 				}
-			} else {
+			}
+			else {
 				ICSSNode temp = (ICSSNode) notifier;
 				if (temp != null) {
 					temp = temp.getParentNode();
 				}
 				if (temp == null || temp instanceof ICSSStyleSheet) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					viewer.refresh(temp);
 				}
 			}
@@ -184,7 +201,8 @@
 				ICSSNode temp = (changedFeature != null) ? (ICSSNode) changedFeature : (ICSSNode) newValue;
 				if (temp instanceof ICSSStyleRule) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					for (;;) {
 						if (temp instanceof ICSSStyleRule) {
 							break;
@@ -197,30 +215,36 @@
 				}
 				if (temp == null || (temp instanceof ICSSStyleSheet)) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					viewer.refresh(temp);
 				}
-			} else {
+			}
+			else {
 				if (newValue != null && (newValue instanceof ICSSStyleDeclItem)) {
 					viewer.refresh(((ICSSNode) newValue).getParentNode());
-				} else {
+				}
+				else {
 					ICSSNode temp = (ICSSNode) notifier;
 					if (temp != null) {
 						temp = temp.getParentNode();
 					}
 					if (temp == null || (temp instanceof ICSSStyleSheet)) {
 						viewer.refresh();
-					} else {
+					}
+					else {
 						viewer.refresh(temp);
 					}
 				}
 			}
-		} else if (eventType == INodeNotifier.REMOVE) {
+		}
+		else if (eventType == INodeNotifier.REMOVE) {
 			if (notifier instanceof ICSSStyleSheet) {
 				ICSSNode temp = (changedFeature != null) ? (ICSSNode) changedFeature : (ICSSNode) newValue;
 				if (temp instanceof ICSSStyleRule) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					for (;;) {
 						if (temp instanceof ICSSStyleRule) {
 							break;
@@ -232,28 +256,31 @@
 					}
 					if (temp == null || (temp instanceof ICSSStyleSheet)) {
 						viewer.refresh();
-					} else {
+					}
+					else {
 						viewer.refresh(temp);
 					}
 				}
-			} else {
-				//							viewer.refresh(notifier);
+			}
+			else {
+				// viewer.refresh(notifier);
 				ICSSNode temp = (ICSSNode) notifier;
 				if (temp != null) {
 					temp = temp.getParentNode();
 				}
 				if (temp == null || (temp instanceof ICSSStyleSheet)) {
 					viewer.refresh();
-				} else {
+				}
+				else {
 					viewer.refresh(temp);
 				}
 			}
 		}
-		//				}
+		// }
 	}
 
 	/**
-	 *  
+	 * 
 	 */
 	public void internalRefreshAll() {
 		Collection listeners = ((JFaceNodeAdapterFactoryCSS) adapterFactory).getListeners();
@@ -265,7 +292,8 @@
 				if (viewer.getControl() != null && !viewer.getControl().isDisposed()) {
 					viewer.refresh();
 				}
-			} else if (listener instanceof PropertySheetPage) {
+			}
+			else if (listener instanceof PropertySheetPage) {
 				PropertySheetPage page = (PropertySheetPage) listener;
 				if (page.getControl() != null && !page.getControl().isDisposed()) {
 					page.refresh();
@@ -315,4 +343,251 @@
 		lastUpdater = new StyleViewUpdater();
 		getDisplay().asyncExec(lastUpdater);
 	}
+
+	/**
+	 * Returns an enumeration containing all child nodes of the given element,
+	 * which represents a node in a tree. The difference to
+	 * <code>IStructuredContentProvider.getElements(Object)</code> is as
+	 * follows: <code>getElements</code> is called to obtain the tree
+	 * viewer's root elements. Method <code>getChildren</code> is used to
+	 * obtain the children of a given node in the tree, which can can be a
+	 * root node, too.
+	 */
+	public Object[] getChildren(Object object) {
+		if (object instanceof ICSSNode) {
+			ICSSNode node = (ICSSNode) object;
+
+			short nodeType = node.getNodeType();
+			if (nodeType == ICSSNode.STYLERULE_NODE || nodeType == ICSSNode.PAGERULE_NODE || nodeType == ICSSNode.FONTFACERULE_NODE) {
+				for (node = node.getFirstChild(); node != null && !(node instanceof ICSSStyleDeclaration); node.getNextSibling()) {
+					// nop
+				}
+			}
+			List children = new ArrayList();
+			ICSSNode child = (node != null) ? node.getFirstChild() : null;
+			while (child != null) {
+				if (!(child instanceof ICSSPrimitiveValue) && !(child instanceof MediaList)) {
+					children.add(child);
+				}
+				/*
+				 * Required to correctly connect the refreshing behavior to
+				 * the tree
+				 */
+				if (child instanceof INodeNotifier) {
+					((INodeNotifier) child).getAdapterFor(IJFaceNodeAdapter.class);
+				}
+				child = child.getNextSibling();
+			}
+			return children.toArray();
+		}
+		return new Object[0];
+	}
+
+	/**
+	 * Returns an enumeration with the elements belonging to the passed
+	 * element. These elements can be presented as rows in a table, items in a
+	 * list etc.
+	 */
+	public Object[] getElements(Object object) {
+		// The root is usually an instance of an XMLStructuredModel in
+		// which case we want to extract the document.
+
+		if (object instanceof ICSSModel) {
+			ArrayList v = new ArrayList();
+			// internalGetElements(object, v);
+			addElements(object, v);
+			Object[] elements = v.toArray();
+
+			for (int i = 0; i < elements.length; i++) {
+				/*
+				 * Required to correctly connect the refreshing behavior to
+				 * the tree
+				 */
+				if (elements[i] instanceof INodeNotifier) {
+					((INodeNotifier) elements[i]).getAdapterFor(IJFaceNodeAdapter.class);
+				}
+			}
+
+			return elements;
+		}
+		return new Object[0];
+
+	}
+
+	/**
+	 * Returns the image for the label of the given element, for use in the
+	 * given viewer.
+	 * 
+	 * @param viewer
+	 *            The viewer that displays the element.
+	 * @param element
+	 *            The element for which to provide the label image. Element
+	 *            can be <code>null</code> indicating no input object is set
+	 *            to the viewer.
+	 */
+	public Image getLabelImage(Object element) {
+		if (element instanceof ICSSNode) {
+			CSSImageHelper helper = CSSImageHelper.getInstance();
+			return helper.getImage(CSSImageType.getImageType((ICSSNode) element));
+			// Image image = getCSSNodeImage(element);
+			// return image;
+			// return getAdapter(element).getLabelImage((ICSSNode) element);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the text for the label of the given element, for use in the
+	 * given viewer.
+	 * 
+	 * @param viewer
+	 *            The viewer that displays the element.
+	 * @param element
+	 *            The element for which to provide the label text. Element can
+	 *            be <code>null</code> indicating no input object is set to
+	 *            the viewer.
+	 */
+	public String getLabelText(Object element) {
+		// This was returning null, on occasion ... probably should not be,
+		// but
+		// took the quick and easy way out for now. (dmw 3/8/01)
+
+		String result = "";//$NON-NLS-1$
+		String mediaText;
+		if (element instanceof ICSSNode) {
+			switch (((ICSSNode) element).getNodeType()) {
+				case ICSSNode.STYLERULE_NODE :
+					result = ((ICSSStyleRule) element).getSelectors().getString();
+					break;
+				case ICSSNode.FONTFACERULE_NODE :
+					result = "@font-face";//$NON-NLS-1$
+					break;
+				case ICSSNode.IMPORTRULE_NODE :
+					result = ((CSSImportRule) element).getHref();
+					mediaText = getMediaText((CSSImportRule) element);
+					if (mediaText != null && 0 < mediaText.length()) {
+						result += " (" + mediaText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+					}
+					break;
+				case ICSSNode.PAGERULE_NODE :
+					result = "@page";//$NON-NLS-1$
+					break;
+				case ICSSNode.STYLEDECLARATION_NODE :
+					result = "properties";//$NON-NLS-1$
+					break;
+				case ICSSNode.STYLEDECLITEM_NODE :
+					result = ((ICSSStyleDeclItem) element).getPropertyName();
+					break;
+				case ICSSNode.PRIMITIVEVALUE_NODE :
+					result = ((ICSSPrimitiveValue) element).getStringValue();
+					break;
+				case ICSSNode.MEDIARULE_NODE :
+					result = "@media";//$NON-NLS-1$
+					mediaText = getMediaText((ICSSMediaRule) element);
+					if (mediaText != null && 0 < mediaText.length()) {
+						result += " (" + mediaText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+					}
+					break;
+				case ICSSNode.CHARSETRULE_NODE :
+					result = "@charset";//$NON-NLS-1$
+					break;
+				case ICSSNode.MEDIALIST_NODE :
+					result = ((MediaList) element).getMediaText();
+					break;
+				default :
+					break;
+			}
+		}
+
+		// if (element instanceof ICSSNode) {
+		// ICSSNode node = ((ICSSNode)element);
+		// result = getAdapter(element).getLabelText((ICSSNode) element);
+		// }
+		return result;
+	}
+
+	/**
+	 * Returns the parent for the given element. This method can return
+	 * <code>null</code> indicating that the parent can't be computed. In
+	 * this case the tree viewer can't expand a given node correctly if
+	 * requested.
+	 */
+	public Object getParent(Object object) {
+		if (object instanceof ICSSNode) {
+			ICSSNode node = ((ICSSNode) object).getParentNode();
+			if (node != null && node.getNodeType() == ICSSNode.STYLEDECLARATION_NODE) {
+				/*
+				 * Required to also correctly connect style declaration to the
+				 * refreshing behavior in the tree
+				 */
+				if (node instanceof INodeNotifier) {
+					((INodeNotifier) node).getAdapterFor(IJFaceNodeAdapter.class);
+				}
+				node = node.getParentNode();
+			}
+			return node;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns <code>true</code> if the given element has children.
+	 * Otherwise <code>false</code> is returned.
+	 */
+	public boolean hasChildren(Object object) {
+		// return getAdapter(object).hasChildren((ICSSNode) object);
+		if (object instanceof ICSSNode) {
+			/*
+			 * Required to correctly connect the refreshing behavior to the
+			 * tree
+			 */
+			if (object instanceof INodeNotifier) {
+				((INodeNotifier) object).getAdapterFor(IJFaceNodeAdapter.class);
+			}
+
+			if (object instanceof ICSSStyleDeclItem)
+				return false;
+			else
+				return ((ICSSNode) object).hasChildNodes();
+		}
+		return false;
+	}
+
+	private void addElements(Object element, ArrayList v) {
+
+		ICSSNode node;
+
+		if (element instanceof ICSSModel) {
+			ICSSModel model = (ICSSModel) element;
+			ICSSDocument doc = model.getDocument();
+			node = doc.getFirstChild();
+		}
+		else if (element instanceof ICSSNode) {
+			node = ((ICSSNode) element).getFirstChild();
+		}
+		else
+			return;
+
+		while (node != null) {
+			if (node instanceof CSSRule) {
+				v.add(node);
+			}
+
+			node = node.getNextSibling();
+		}
+
+	}
+
+	private String getMediaText(CSSRule rule) {
+		String result = ""; //$NON-NLS-1$
+		ICSSNode child = (rule != null) ? ((ICSSNode) rule).getFirstChild() : null;
+		while (child != null) {
+			if (child.getNodeType() == ICSSNode.MEDIALIST_NODE) {
+				result = ((MediaList) child).getMediaText();
+				break;
+			}
+			child = child.getNextSibling();
+		}
+		return result;
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeContentProviderCSS.java b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeContentProviderCSS.java
index 4912dc9..d058928 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeContentProviderCSS.java
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeContentProviderCSS.java
@@ -11,22 +11,18 @@
 package org.eclipse.wst.css.ui.views.contentoutline;
 
 import java.util.ArrayList;
-import java.util.List;
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSDocument;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
 import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclaration;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapter;
 import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapterFactory;
 import org.w3c.dom.css.CSSRule;
-import org.w3c.dom.stylesheets.MediaList;
 
 /**
  * A Content provider for a JFace viewer used to display CSS nodes. This
@@ -39,6 +35,7 @@
 	}
 
 	/**
+	 * @deprecated
 	 */
 	protected void addElements(Object element, ArrayList v) {
 
@@ -82,32 +79,10 @@
 	 * root node, too.
 	 */
 	public Object[] getChildren(Object object) {
-		if (object instanceof ICSSNode) {
-			ICSSNode node = (ICSSNode) object;
+		IJFaceNodeAdapter adapter = getAdapter(object);
+		if (adapter != null)
+			return adapter.getChildren(object);
 
-			short nodeType = node.getNodeType();
-			if (nodeType == ICSSNode.STYLERULE_NODE || nodeType == ICSSNode.PAGERULE_NODE || nodeType == ICSSNode.FONTFACERULE_NODE) {
-				for (node = node.getFirstChild(); node != null && !(node instanceof ICSSStyleDeclaration); node.getNextSibling()) {
-					// nop
-				}
-			}
-			List children = new ArrayList();
-			ICSSNode child = (node != null) ? node.getFirstChild() : null;
-			while (child != null) {
-				if (!(child instanceof ICSSPrimitiveValue) && !(child instanceof MediaList)) {
-					children.add(child);
-				}
-				/*
-				 * Required to correctly connect the refreshing behavior to
-				 * the tree
-				 */
-				if (child instanceof INodeNotifier) {
-					((INodeNotifier) child).getAdapterFor(IJFaceNodeAdapter.class);
-				}
-				child = child.getNextSibling();
-			}
-			return children.toArray();
-		}
 		return new Object[0];
 	}
 
@@ -117,29 +92,11 @@
 	 * list etc.
 	 */
 	public Object[] getElements(Object object) {
-		// The root is usually an instance of an XMLStructuredModel in
-		// which case we want to extract the document.
+		IJFaceNodeAdapter adapter = getAdapter(object);
+		if (adapter != null)
+			return adapter.getElements(object);
 
-		if (object instanceof ICSSModel) {
-			ArrayList v = new ArrayList();
-			// internalGetElements(object, v);
-			addElements(object, v);
-			Object[] elements = v.toArray();
-
-			for (int i = 0; i < elements.length; i++) {
-				/*
-				 * Required to correctly connect the refreshing behavior to
-				 * the tree
-				 */
-				if (elements[i] instanceof INodeNotifier) {
-					((INodeNotifier) elements[i]).getAdapterFor(IJFaceNodeAdapter.class);
-				}
-			}
-
-			return elements;
-		}
 		return new Object[0];
-
 	}
 
 	/**
@@ -149,20 +106,10 @@
 	 * requested.
 	 */
 	public Object getParent(Object object) {
-		if (object instanceof ICSSNode) {
-			ICSSNode node = ((ICSSNode) object).getParentNode();
-			if (node != null && node.getNodeType() == ICSSNode.STYLEDECLARATION_NODE) {
-				/*
-				 * Required to also correctly connect style declaration to the
-				 * refreshing behavior in the tree
-				 */
-				if (node instanceof INodeNotifier) {
-					((INodeNotifier) node).getAdapterFor(IJFaceNodeAdapter.class);
-				}
-				node = node.getParentNode();
-			}
-			return node;
-		}
+		IJFaceNodeAdapter adapter = getAdapter(object);
+		if (adapter != null)
+			return adapter.getParent(object);
+
 		return null;
 	}
 
@@ -171,21 +118,10 @@
 	 * Otherwise <code>false</code> is returned.
 	 */
 	public boolean hasChildren(Object object) {
-		// return getAdapter(object).hasChildren((ICSSNode) object);
-		if (object instanceof ICSSNode) {
-			/*
-			 * Required to correctly connect the refreshing behavior to the
-			 * tree
-			 */
-			if (object instanceof INodeNotifier) {
-				((INodeNotifier) object).getAdapterFor(IJFaceNodeAdapter.class);
-			}
+		IJFaceNodeAdapter adapter = getAdapter(object);
+		if (adapter != null)
+			return adapter.hasChildren(object);
 
-			if (object instanceof ICSSStyleDeclItem)
-				return false;
-			else
-				return ((ICSSNode) object).hasChildNodes();
-		}
 		return false;
 	}
 
@@ -207,39 +143,34 @@
 			if (factory != null) {
 				factory.addListener(viewer);
 			}
-			if (newInput instanceof ICSSModel) {
-				((INodeNotifier) ((ICSSModel) newInput).getDocument()).getAdapterFor(IJFaceNodeAdapter.class);
-			}
 		}
 	}
 
 	/**
-	 */
-	/*
-	 * protected void internalGetElements(Object element, ArrayList v) {
-	 * 
-	 * ICSSNode node;
-	 * 
-	 * if (element instanceof ICSSModel) { ICSSModel model =
-	 * (ICSSModel)element; ICSSDocument doc = model.getDocument();
-	 * adapterFactory.adapt((INodeNotifier)doc); node = doc.getFirstChild(); }
-	 * else if (element instanceof ICSSNode) { node =
-	 * ((ICSSNode)element).getFirstChild(); } else { return; }
-	 * 
-	 * while (node != null) { switch (node.getNodeType()) { case
-	 * ICSSNode.STYLEDECLARATION_NODE: adapterFactory.adapt((INodeNotifier)
-	 * node); break; case ICSSNode.STYLERULE_NODE: case
-	 * ICSSNode.FONTFACERULE_NODE: case ICSSNode.PAGERULE_NODE: case
-	 * ICSSNode.IMPORTRULE_NODE: case ICSSNode.MEDIARULE_NODE: v.add(node);
-	 * adapterFactory.adapt((INodeNotifier) node); break; default:
-	 * adapterFactory.adapt((INodeNotifier) node); break; }
-	 * 
-	 * node = node.getNextSibling(); } }
-	 */
-	/**
 	 * Checks whether the given element is deleted or not.
+	 * 
+	 * @deprecated
 	 */
 	public boolean isDeleted(Object element) {
 		return false;
 	}
+
+	/**
+	 * Returns the JFace adapter for the specified object.
+	 * 
+	 * @param adaptable
+	 *            java.lang.Object The object to get the adapter for
+	 */
+	private IJFaceNodeAdapter getAdapter(Object adaptable) {
+		IJFaceNodeAdapter adapter = null;
+		if (adaptable instanceof ICSSModel) {
+			adaptable = ((ICSSModel) adaptable).getDocument();
+		}
+		if (adaptable instanceof INodeNotifier) {
+			INodeAdapter nodeAdapter = ((INodeNotifier) adaptable).getAdapterFor(IJFaceNodeAdapter.class);
+			if (nodeAdapter instanceof IJFaceNodeAdapter)
+				adapter = (IJFaceNodeAdapter) nodeAdapter;
+		}
+		return adapter;
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeLabelProviderCSS.java b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeLabelProviderCSS.java
index 44e5519..e36138f 100644
--- a/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeLabelProviderCSS.java
+++ b/bundles/org.eclipse.wst.css.ui/src/org/eclipse/wst/css/ui/views/contentoutline/JFaceNodeLabelProviderCSS.java
@@ -12,16 +12,10 @@
 
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSMediaRule;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem;
-import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleRule;
-import org.eclipse.wst.css.ui.internal.image.CSSImageHelper;
-import org.eclipse.wst.css.ui.internal.image.CSSImageType;
-import org.w3c.dom.css.CSSImportRule;
-import org.w3c.dom.css.CSSRule;
-import org.w3c.dom.stylesheets.MediaList;
+import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
+import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
+import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapter;
 
 class JFaceNodeLabelProviderCSS extends LabelProvider {
 
@@ -33,6 +27,25 @@
 	}
 
 	/**
+	 * Returns the JFace adapter for the specified object.
+	 * 
+	 * @param adaptable
+	 *            java.lang.Object The object to get the adapter for
+	 */
+	private IJFaceNodeAdapter getAdapter(Object adaptable) {
+		IJFaceNodeAdapter adapter = null;
+		if (adaptable instanceof ICSSModel) {
+			adaptable = ((ICSSModel) adaptable).getDocument();
+		}
+		if (adaptable instanceof INodeNotifier) {
+			INodeAdapter nodeAdapter = ((INodeNotifier) adaptable).getAdapterFor(IJFaceNodeAdapter.class);
+			if (nodeAdapter instanceof IJFaceNodeAdapter)
+				adapter = (IJFaceNodeAdapter) nodeAdapter;
+		}
+		return adapter;
+	}
+
+	/**
 	 * Returns the image for the label of the given element, for use in the
 	 * given viewer.
 	 * 
@@ -44,16 +57,11 @@
 	 *            to the viewer.
 	 */
 	public Image getImage(Object element) {
-
-
-		if (element instanceof ICSSNode) {
-			CSSImageHelper helper = CSSImageHelper.getInstance();
-			return helper.getImage(CSSImageType.getImageType((ICSSNode) element));
-			// Image image = getCSSNodeImage(element);
-			// return image;
-			// return getAdapter(element).getLabelImage((ICSSNode) element);
-		}
-		return null;
+		Image image = null;
+		IJFaceNodeAdapter adapter = getAdapter(element);
+		if (adapter != null)
+			image = adapter.getLabelImage(element);
+		return image;
 	}
 
 	/**
@@ -68,80 +76,19 @@
 	 *            the viewer.
 	 */
 	public String getText(Object element) {
-		// This was returning null, on occasion ... probably should not be,
-		// but
-		// took the quick and easy way out for now. (dmw 3/8/01)
-
-		String result = "";//$NON-NLS-1$
-		String mediaText;
-		if (element instanceof ICSSNode) {
-			switch (((ICSSNode) element).getNodeType()) {
-				case ICSSNode.STYLERULE_NODE :
-					result = ((ICSSStyleRule) element).getSelectors().getString();
-					break;
-				case ICSSNode.FONTFACERULE_NODE :
-					result = "@font-face";//$NON-NLS-1$
-					break;
-				case ICSSNode.IMPORTRULE_NODE :
-					result = ((CSSImportRule) element).getHref();
-					mediaText = getMediaText((CSSImportRule) element);
-					if (mediaText != null && 0 < mediaText.length()) {
-						result += " (" + mediaText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-					}
-					break;
-				case ICSSNode.PAGERULE_NODE :
-					result = "@page";//$NON-NLS-1$
-					break;
-				case ICSSNode.STYLEDECLARATION_NODE :
-					result = "properties";//$NON-NLS-1$
-					break;
-				case ICSSNode.STYLEDECLITEM_NODE :
-					result = ((ICSSStyleDeclItem) element).getPropertyName();
-					break;
-				case ICSSNode.PRIMITIVEVALUE_NODE :
-					result = ((ICSSPrimitiveValue) element).getStringValue();
-					break;
-				case ICSSNode.MEDIARULE_NODE :
-					result = "@media";//$NON-NLS-1$
-					mediaText = getMediaText((ICSSMediaRule) element);
-					if (mediaText != null && 0 < mediaText.length()) {
-						result += " (" + mediaText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-					}
-					break;
-				case ICSSNode.CHARSETRULE_NODE :
-					result = "@charset";//$NON-NLS-1$
-					break;
-				case ICSSNode.MEDIALIST_NODE :
-					result = ((MediaList) element).getMediaText();
-					break;
-				default :
-					break;
-			}
+		String text = null;
+		IJFaceNodeAdapter adapter = getAdapter(element);
+		if (adapter != null) {
+			text = adapter.getLabelText(element);
 		}
-
-		// if (element instanceof ICSSNode) {
-		// ICSSNode node = ((ICSSNode)element);
-		// result = getAdapter(element).getLabelText((ICSSNode) element);
-		// }
-		return result;
-	}
-
-	private String getMediaText(CSSRule rule) {
-		String result = ""; //$NON-NLS-1$
-		ICSSNode child = (rule != null) ? ((ICSSNode) rule).getFirstChild() : null;
-		while (child != null) {
-			if (child.getNodeType() == ICSSNode.MEDIALIST_NODE) {
-				result = ((MediaList) child).getMediaText();
-				break;
-			}
-			child = child.getNextSibling();
-		}
-		return result;
+		return text;
 	}
 
 	/**
 	 * Checks whether this label provider is affected by the given domain
 	 * event.
+	 * 
+	 * @deprecated
 	 */
 	public boolean isAffected(Object dummy) {// DomainEvent event) {
 		// return event.isModifier(DomainEvent.NON_STRUCTURE_CHANGE);