[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);