Compatibility fragment commit
[phpeclipse.git] / net.sourceforge.phpeclipse.32.compatibility / src / net / sourceforge / phpeclipse / xml / core / internal / model / XMLDocument.java
diff --git a/net.sourceforge.phpeclipse.32.compatibility/src/net/sourceforge/phpeclipse/xml/core/internal/model/XMLDocument.java b/net.sourceforge.phpeclipse.32.compatibility/src/net/sourceforge/phpeclipse/xml/core/internal/model/XMLDocument.java
new file mode 100644 (file)
index 0000000..c0b5680
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 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
+ * 
+ * $Id: XMLDocument.java,v 1.2 2006-10-21 23:13:43 pombredanne Exp $
+ */
+
+package net.sourceforge.phpeclipse.xml.core.internal.model;
+
+import net.sourceforge.phpeclipse.core.model.SourceReference;
+import net.sourceforge.phpeclipse.xml.core.internal.parser.XMLParser;
+import net.sourceforge.phpeclipse.xml.core.model.IXMLDocument;
+import net.sourceforge.phpeclipse.xml.core.model.IXMLElement;
+import net.sourceforge.phpeclipse.xml.core.parser.IProblemCollector;
+import net.sourceforge.phpeclipse.xml.core.parser.IXMLParser;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+
+/**
+ * 
+ */
+public class XMLDocument extends SourceReference implements IXMLDocument,
+               IDocumentListener {
+       // Instance Variables ------------------------------------------------------
+
+       private IXMLElement root;
+
+       private String systemId;
+
+       private Object dirtyLock = new Object();
+
+       private boolean dirty = true;
+
+       // Constructors ------------------------------------------------------------
+
+       public XMLDocument(IDocument document, String systemId) {
+               super(document, 0, document.getLength());
+               this.systemId = systemId;
+       }
+
+       // IXMLDocument Implementation ---------------------------------------------
+
+       /*
+        * @see IXMLDocument#getRoot()
+        */
+       public IXMLElement getRoot() {
+               return root;
+       }
+
+       /*
+        * @see net.sourceforge.phpeclipse.xml.core.model.IXMLDocument#getSystemId()
+        */
+       public String getSystemId() {
+               return systemId;
+       }
+
+       /*
+        * @see IStyleSheet#reconcile(IProblemCollector)
+        */
+       public void reconcile(IProblemCollector problemCollector, IFile file) {
+               synchronized (dirtyLock) {
+                       if (!dirty) {
+                               return;
+                       }
+                       dirty = false;
+               }
+
+               synchronized (this) {
+                       boolean doParse = false;
+                       root = null;
+                       if (file != null) {
+                               String filename = file.getLocation().toString();
+                               int len = filename.length();
+                               if (len >= 4) {
+                                       if ((filename.charAt(len - 1) != 'l' && filename
+                                                       .charAt(len - 1) != 'L')
+                                                       || (filename.charAt(len - 2) != 'p' && filename
+                                                                       .charAt(len - 2) != 'P')
+                                                       || (filename.charAt(len - 3) != 't' && filename
+                                                                       .charAt(len - 3) != 'T')
+                                                       || (filename.charAt(len - 4) != '.')) {
+                                               if ((filename.charAt(len - 1) != 'm' && filename
+                                                               .charAt(len - 1) != 'M')
+                                                               || (filename.charAt(len - 2) != 't' && filename
+                                                                               .charAt(len - 2) != 'T')
+                                                               || (filename.charAt(len - 3) != 'h' && filename
+                                                                               .charAt(len - 3) != 'H')
+                                                               || (filename.charAt(len - 4) != '.')) {
+                                                       if (len >= 5) {
+                                                               if ((filename.charAt(len - 1) != 'l' && filename
+                                                                               .charAt(len - 1) != 'L')
+                                                                               || (filename.charAt(len - 2) != 'm' && filename
+                                                                                               .charAt(len - 2) != 'M')
+                                                                               || (filename.charAt(len - 3) != 't' && filename
+                                                                                               .charAt(len - 3) != 'T')
+                                                                               || (filename.charAt(len - 4) != 'h' && filename
+                                                                                               .charAt(len - 4) != 'H')
+                                                                               || (filename.charAt(len - 5) != '.')) {
+                                                                       doParse = true;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       doParse = true;
+                               }
+                       }
+                       if (doParse) {
+                               IXMLParser parser = new XMLParser();
+                               parser.setProblemCollector(problemCollector);
+                               parser.setSource(getDocument());
+                               parser.setSystemId(systemId);
+                               IXMLDocument model = parser.parse();
+                               if (model != null) {
+                                       root = model.getRoot();
+                               }
+                       }
+               }
+       }
+
+       // IDocumentListener Implementation ----------------------------------------
+
+       /*
+        * @see IDocumentListener#documentAboutToBeChanged(DocumentEvent)
+        */
+       public void documentAboutToBeChanged(DocumentEvent event) {
+               // do nothing
+       }
+
+       /*
+        * @see IDocumentListener#documentChanged(DocumentEvent)
+        */
+       public void documentChanged(DocumentEvent event) {
+               synchronized (dirtyLock) {
+                       dirty = true;
+               }
+       }
+
+       // Public Methods ----------------------------------------------------------
+
+       /**
+        * Sets the root element.
+        * 
+        * @param root
+        *            the root element to set
+        */
+       public void setRoot(IXMLElement root) {
+               this.root = root;
+       }
+
+}
\ No newline at end of file