--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Christopher Lenz and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Christopher Lenz - initial API and implementation
+ *
+ * $Id: CssDocumentProvider.java,v 1.1 2004-09-02 18:11:49 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.css.ui.internal;
+
+import net.sourceforge.phpeclipse.css.core.internal.model.StyleSheet;
+import net.sourceforge.phpeclipse.css.core.model.IStyleSheet;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.ui.editors.text.TextFileDocumentProvider;
+
+/**
+ * Document provider for CSS files.
+ *
+ * TODO This class currently doubles as a model manager which will need to be
+ * moved into core at some point, and would make this class pretty much
+ * useless
+ */
+public class CssDocumentProvider extends TextFileDocumentProvider {
+
+ // Inner Classes -----------------------------------------------------------
+
+ private class StyleSheetInfo extends FileInfo {
+ private IStyleSheet styleSheet;
+ }
+
+ // TestFileDocumentProvider Implementation ---------------------------------
+
+ /*
+ * @see TextFileDocumentProvider#createEmptyFileInfo()
+ */
+ protected FileInfo createEmptyFileInfo() {
+ return new StyleSheetInfo();
+ }
+
+ /*
+ * @see TextFileDocumentProvider#createFileInfo(Object)
+ */
+ protected FileInfo createFileInfo(Object element) throws CoreException {
+ FileInfo fileInfo = super.createFileInfo(element);
+ if (!(fileInfo instanceof StyleSheetInfo)) {
+ return null;
+ }
+
+ IDocument document = fileInfo.fTextFileBuffer.getDocument();
+ IStyleSheet styleSheet = createStyleSheet(document);
+ if (styleSheet instanceof IDocumentListener) {
+ document.addDocumentListener((IDocumentListener) styleSheet);
+ }
+ StyleSheetInfo styleSheetInfo = (StyleSheetInfo) fileInfo;
+ styleSheetInfo.styleSheet = styleSheet;
+
+ return styleSheetInfo;
+ }
+
+ /*
+ * @see TextFileDocumentProvider#disposeFileInfo(Object, TextFileDocumentProvider.FileInfo)
+ */
+ protected void disposeFileInfo(Object element, FileInfo info) {
+ if (info instanceof StyleSheetInfo) {
+ IDocument document = getDocument(element);
+ // TODO Check whether this is really necessary, as the document is
+ // always null here
+ if (document != null) {
+ IStyleSheet styleSheet = ((StyleSheetInfo) info).styleSheet;
+ if (styleSheet instanceof IDocumentListener) {
+ document.removeDocumentListener((IDocumentListener)
+ styleSheet);
+ }
+ }
+ }
+ super.disposeFileInfo(element, info);
+ }
+
+ // Public Methods ----------------------------------------------------------
+
+ /**
+ * Creates the parsed style sheet object corresponding to the specified
+ * document.
+ *
+ * @param document the document to parse
+ * @return the parsed style sheet
+ */
+ public IStyleSheet createStyleSheet(IDocument document) {
+ return new StyleSheet(document);
+ }
+
+ /**
+ * Returns the style sheet associated with the specified element.
+ *
+ * @param element the element
+ * @return the style sheet associated with the element
+ */
+ public IStyleSheet getStyleSheet(Object element) {
+ FileInfo info = getFileInfo(element);
+ if (info instanceof StyleSheetInfo) {
+ StyleSheetInfo styleSheetInfo = (StyleSheetInfo) info;
+ return styleSheetInfo.styleSheet;
+ }
+ return null;
+ }
+
+}