Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureCreator.java')
-rw-r--r--examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureCreator.java741
1 files changed, 0 insertions, 741 deletions
diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureCreator.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureCreator.java
deleted file mode 100644
index 57e548d64..000000000
--- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureCreator.java
+++ /dev/null
@@ -1,741 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.examples.xml;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.eclipse.compare.IEditableContent;
-import org.eclipse.compare.IStreamContentAccessor;
-import org.eclipse.compare.structuremergeviewer.Differencer;
-import org.eclipse.compare.structuremergeviewer.IDiffContainer;
-import org.eclipse.compare.structuremergeviewer.IStructureComparator;
-import org.eclipse.compare.structuremergeviewer.IStructureCreator;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.Position;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.LocatorImpl;
-
-/**
- * This structure analyzer builds a parse tree of an XML document found in
- * a <code>IByteContentAccessor</code> input by calling getStructure(Object)
- */
-public class XMLStructureCreator implements IStructureCreator {
-
- protected static final boolean DEBUG_MODE = false;
-
- private XMLNode fcurrentParent;
- private String fsignature;
- private Document fdoc;
- private boolean ignoreBodies = false;
- //private String fName;
-
- public static final String DEFAULT_NAME = XMLCompareMessages.getString("XMLStructureCreator.pluginname"); //$NON-NLS-1$
-
- private HashMap fIdMapsInternal;
- private HashMap fIdMaps;
- private HashMap fIdExtensionToName;
- private HashMap fOrderedElementsInternal;
- private HashMap fOrderedElements;
- private HashMap idMap;
- private ArrayList fOrdered;
-
- public static final String USE_UNORDERED = XMLCompareMessages.getString("XMLStructureCreator.unordered"); //$NON-NLS-1$
- public static final String USE_ORDERED = XMLCompareMessages.getString("XMLStructureCreator.ordered"); //$NON-NLS-1$
- public static final String DEFAULT_IDMAP= USE_ORDERED;
- private String fIdMapToUse;
- private boolean fUseIdMap;
-
- public static final String TYPE_ELEMENT = "element"; //$NON-NLS-1$
- public static final String TYPE_TEXT = "text"; //$NON-NLS-1$
- public static final String TYPE_ATTRIBUTE = "attribute"; //$NON-NLS-1$
-
- //for signatures
- public static final String ROOT_ID = "root"; //$NON-NLS-1$
- public static final char SIGN_SEPARATOR = '>';//'.'
- public static final char SIGN_ENCLOSING = '$';
- public static final String SIGN_ELEMENT = SIGN_ENCLOSING + TYPE_ELEMENT + SIGN_ENCLOSING;
- public static final String SIGN_TEXT = SIGN_ENCLOSING + TYPE_TEXT + SIGN_ENCLOSING;
- public static final String SIGN_ATTRIBUTE = SIGN_ENCLOSING + TYPE_ATTRIBUTE + SIGN_ENCLOSING;
-
- public static final String IDMAP_UNORDERED = XMLCompareMessages.getString("XMLStructureCreator.idmap_unordered"); //$NON-NLS-1$
-
- public static final char ID_SEPARATOR = '<';
- public static final char ID_TYPE_BODY = '<';
-
- //private static final String parserName = "org.apache.xerces.parsers.SAXParser"; //$NON-NLS-1$
- private static final String parserName = "org.apache.crimson.parser.XMLReaderImpl"; //$NON-NLS-1$
-
- private static boolean setValidation = false; //defaults
- private static boolean setNameSpaces = true;
- private static boolean setSchemaSupport = true;
- private static boolean setSchemaFullSupport = false;
-
- private String fFileExt;
- private boolean fFirstCall = true;
-
- private boolean fRemoveWhiteSpace;
-
- protected class XMLHandler extends DefaultHandler {
-
- protected Locator prevlocator; //previous locator
- protected Locator locator; //current locator
-
- public void setDocumentLocator (Locator locator0) {
- this.locator = locator0;
- }
-
- //
- // DocumentHandler methods
- //
- /** Processing instruction. */
- public void processingInstruction(String target, String data) {
-
-// System.out.println("target: " + target);
-// System.out.println("data: " + data);
-// System.out.print("<?");
-// System.out.print(target);
-// if (data != null && data.length() > 0) {
-// System.out.print(' ');
-// System.out.print(data);
-// }
-// System.out.print("?>");
-// System.out.flush();
- prevlocator = new LocatorImpl(locator);
- } // processingInstruction(String,String)
-
- /** Start document. */
- public void startDocument() {
-
- prevlocator = new LocatorImpl(locator);
-
- } // startDocument()
-
- /** Start element. */
- public void startElement(String uri, String local, String raw,
- Attributes attrs) {
- XMLNode currentElement;
-
- /* add root node for this element */
-
- if (XMLStructureCreator.DEBUG_MODE) {
- if (locator != null && prevlocator != null) {
- System.out.println("prevlocator: line " + prevlocator.getLineNumber() + " column " + prevlocator.getColumnNumber() + " id " + prevlocator.getPublicId()); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- System.out.println("locator: line " + locator.getLineNumber() + " column " + locator.getColumnNumber() + " id " + locator.getPublicId()); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- }
- }
-
- try {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Node where children field accessed: " + fcurrentParent.getId()); //$NON-NLS-1$
- XMLChildren currentParent = (XMLChildren) fcurrentParent;
- currentParent.children++;
- String elementId;
- String elementName;
- IRegion r= fdoc.getLineInformation(prevlocator.getLineNumber()-1);
-
- String parentSig= fsignature;
- fsignature = fsignature + raw + SIGN_SEPARATOR;
-
- if ( isUseIdMap() && idMap.containsKey(fsignature) ) {
- String attrName = (String)idMap.get(fsignature);
- elementId = raw + new Character(ID_SEPARATOR) + attrs.getValue(attrName);
- elementName = raw + " [" + attrName + "=" + attrs.getValue(attrName) + "]"; //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- } else {
- if ( !currentParent.childElements.containsKey(raw) ) {
- currentParent.childElements.put(raw,new Integer(1));
- } else {
- currentParent.childElements.put(raw,new Integer(((Integer)currentParent.childElements.get(raw)).intValue()+1));
- }
- elementId = raw+new Character(ID_SEPARATOR)+"["+currentParent.childElements.get(raw)+"]"; //$NON-NLS-2$ //$NON-NLS-1$
- elementName = MessageFormat.format("{0} [{1}]",new String[] {raw,currentParent.childElements.get(raw).toString()}); //$NON-NLS-2$ //$NON-NLS-1$
- }
- currentElement = new XMLChildren(TYPE_ELEMENT,elementId,elementId,(fsignature+SIGN_ELEMENT),fdoc,r.getOffset()+prevlocator.getColumnNumber()-1,0);
- currentElement.setName(elementName);
- if ( isUseIdMap() && idMap.containsKey(fsignature))
- currentElement.setUsesIDMAP(true);
- if (fOrdered != null && fOrdered.contains(parentSig))
- currentElement.setIsOrderedChild(true);
-
- fcurrentParent.addChild(currentElement);
- currentElement.setParent(fcurrentParent);
- fcurrentParent = currentElement;
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("\nAdded Element " + raw + " with offset " + r.getOffset()); //$NON-NLS-2$ //$NON-NLS-1$
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("fcurrentParent1: " + fcurrentParent.getId()); //$NON-NLS-1$
-
- if (attrs != null) {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("attrs != null, fcurrentParent is " + fcurrentParent.getId()); //$NON-NLS-1$
- //attrs = sortAttributes(attrs);
- int len = attrs.getLength();
- int element_lines_length_size;
- int[] element_lines_length;
- int column_offset;
- String element_string;
- if (fcurrentParent.getParent().getId().equals(ROOT_ID)) {
- element_lines_length_size = locator.getLineNumber()-prevlocator.getLineNumber();
- element_lines_length = new int[element_lines_length_size];
- column_offset = 0;
- element_string = ""; //$NON-NLS-1$
- for (int i_ell=0; i_ell<element_lines_length.length; i_ell++) {
- IRegion attr_r = fdoc.getLineInformation(i_ell+prevlocator.getLineNumber());
- element_lines_length[i_ell] = fdoc.get(attr_r.getOffset(), attr_r.getLength()).length()+1;
- element_string = element_string + fdoc.get(attr_r.getOffset(), attr_r.getLength()) + " "; //$NON-NLS-1$
- }
- } else {
- element_lines_length_size = locator.getLineNumber()-prevlocator.getLineNumber()+1;
- //if (element_lines_length_size < 1) element_lines_length_size = 1;
- element_lines_length = new int[element_lines_length_size];
- IRegion first_line = fdoc.getLineInformation(prevlocator.getLineNumber()-1);
- column_offset = prevlocator.getColumnNumber()-1;
- int first_line_relevant_offset = first_line.getOffset()+column_offset;
- int first_line_relevant_length = first_line.getLength()-column_offset;
- element_string = fdoc.get(first_line_relevant_offset, first_line_relevant_length) + " "; //$NON-NLS-1$
- element_lines_length[0] = element_string.length();
- for (int i_ell=1; i_ell<element_lines_length.length; i_ell++) {
- IRegion attr_r = fdoc.getLineInformation(i_ell+prevlocator.getLineNumber()-1);
- element_lines_length[i_ell] = fdoc.get(attr_r.getOffset(), attr_r.getLength()).length()+1;
- element_string = element_string + fdoc.get(attr_r.getOffset(), attr_r.getLength()) + " "; //$NON-NLS-1$
- }
- }
-
- for (int i_attr = 0; i_attr < len; i_attr++) {
- String attr_name = attrs.getQName(i_attr);
- String attr_value = attrs.getValue(i_attr);
-
- /* find range of attribute in doc; manually parses the line */
- boolean found = false;
- int first_quotes = -1;
- int second_quotes = -1;
- int id_index = -1;
- while (!found) {
- first_quotes = element_string.indexOf("\"",second_quotes+1); //$NON-NLS-1$
- second_quotes = element_string.indexOf("\"",first_quotes+1); //$NON-NLS-1$
- String value;
- try {
- value = element_string.substring(first_quotes+1,second_quotes);
- } catch (Exception e) {
- value = ""; //$NON-NLS-1$
- }
- if (value.equals("")) //$NON-NLS-1$
- found = true;
- else if (value.equals(attr_value)) {
- id_index = element_string.lastIndexOf(attr_name,first_quotes-1);
- boolean wrong = false;
- boolean found_equal = false;
- for (int i_char=id_index+attr_name.length(); i_char<first_quotes && !wrong; i_char++) {
- if (element_string.charAt(i_char) == '=')
- if (!found_equal)
- found_equal = true;
- else
- wrong = true;
- else if (!Character.isWhitespace(element_string.charAt(i_char)))
- wrong = true;
- }
- if (!wrong) found = true;
- }
- }
- //id_index has one char missing for every line (the final cr)
- int line_of_index = 0;
- for (line_of_index = 0; id_index > element_lines_length[line_of_index]-1; line_of_index++)
- id_index -= (element_lines_length[line_of_index]);
- if (line_of_index == 0) id_index += column_offset;
- if (fcurrentParent.getParent().getId().equals(ROOT_ID))
- line_of_index += prevlocator.getLineNumber();
- else
- line_of_index += prevlocator.getLineNumber()-1;
- //index at line line_of_index, line offset id_index
- int line_of_end_of_value = 0;
- int end_of_value_index = second_quotes;
- for (line_of_end_of_value = 0; end_of_value_index > element_lines_length[line_of_end_of_value]-1; line_of_end_of_value++)
- end_of_value_index -= (element_lines_length[line_of_end_of_value]);
- if (line_of_end_of_value == 0) end_of_value_index += column_offset;
- if (fcurrentParent.getParent().getId().equals(ROOT_ID))
- line_of_end_of_value += prevlocator.getLineNumber();
- else
- line_of_end_of_value += prevlocator.getLineNumber()-1;
- //end of value at line line_of_end_of_value, line offset end_of_value_index
-
- int attr_start_doc_offset = fdoc.getLineInformation(line_of_index).getOffset()+id_index;
- //int attr_length_doc_offset = fdoc.getLineInformation(line_of_value).getOffset()+value_index+attr_value.length()+1+(line_of_end_of_value-line_of_index) - attr_start_doc_offset;
- int attr_length_doc_offset = fdoc.getLineInformation(line_of_end_of_value).getOffset()+end_of_value_index +1 - attr_start_doc_offset;
- currentElement = new XMLNode(TYPE_ATTRIBUTE,attr_name,attr_value,(fsignature+attr_name+SIGN_SEPARATOR+SIGN_ATTRIBUTE),fdoc,attr_start_doc_offset,attr_length_doc_offset);
- currentElement.setName(attr_name);
- fcurrentParent.addChild(currentElement);
- currentElement.setParent(fcurrentParent);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("added attribute " + currentElement.getId() + " with value >" + currentElement.getValue() + "<" + " to element " + fcurrentParent.getId() + " which has parent " + fcurrentParent.getParent().getId()); //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- }
- }
- } catch (BadLocationException ex) {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("BadLocationException in startElement(...) " + ex); //$NON-NLS-1$
- currentElement = new XMLChildren(TYPE_ELEMENT,raw+"_("+((XMLChildren)fcurrentParent).children+")",raw+"_("+((XMLChildren)fcurrentParent).children+")",(fsignature+SIGN_ELEMENT),fdoc,0,0); //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- }
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("At the end of startElement(...), fcurrentParent is " + fcurrentParent.getId()); //$NON-NLS-1$
- prevlocator = new LocatorImpl(locator);
- } // startElement(String,String,String,Attributes)
-
- /** Characters. */
- public void characters(char ch[], int start, int length) {
- if (!ignoreBodies) {
-// String chars = (new String(ch, start, length)).trim();
- String chars= new String(ch, start, length);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("characters: >" + chars + "<"); //$NON-NLS-2$ //$NON-NLS-1$
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Body Location: line " + locator.getLineNumber() + " column " + locator.getColumnNumber()); //$NON-NLS-2$ //$NON-NLS-1$
-
- //if text contains only white space, it will be ignored.
- if (!trimWhiteSpace(chars).equals("")) { //$NON-NLS-1$
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Adding body"); //$NON-NLS-1$
- try {
- IRegion r= fdoc.getLineInformation(locator.getLineNumber()-1);
- //location returns the END of the characters
- //offset of BEGINNING of characters:
- int offset = r.getOffset()+locator.getColumnNumber()-1-length;
- fcurrentParent.bodies++;
- String body_value = new String(ch, start, length);
- if (fRemoveWhiteSpace) {
- body_value= removeWhiteSpace(body_value);
- }
- XMLNode bodynode = new XMLNode(TYPE_TEXT,"body_("+fcurrentParent.bodies+")",body_value,(fsignature+SIGN_TEXT),fdoc,offset,length); //$NON-NLS-2$ //$NON-NLS-1$
- bodynode.setName(MessageFormat.format("{0} ({1})",new String[] {XMLCompareMessages.getString("XMLStructureCreator.body"),Integer.toString(fcurrentParent.bodies)})); //$NON-NLS-2$ //$NON-NLS-1$
- fcurrentParent.addChild(bodynode);
- bodynode.setParent(fcurrentParent);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Created body " + fcurrentParent.bodies //$NON-NLS-1$
- + " with offset " + offset + " and length " + length //$NON-NLS-2$ //$NON-NLS-1$
- + " with parent " + bodynode.getParent().getId()); //$NON-NLS-1$
- //bodies as id attributes
- String popsig = fcurrentParent.getParent().getSignature(); //signature of parent of parent
- popsig = popsig.substring(0,popsig.lastIndexOf(SIGN_ELEMENT));
- if (isUseIdMap() && fcurrentParent.bodies == 1 && idMap.containsKey(popsig)) {
- String pid= fcurrentParent.getId();//id of parent
- String pelementname= pid.substring(0,pid.indexOf("<"));//name of parent element //$NON-NLS-1$
- if ( ((String)idMap.get(popsig)).equals(ID_TYPE_BODY+pelementname) ) {
- XMLNode pop= fcurrentParent.getParent();
- String popid= pop.getId();
- String popelementname= popid.substring(0,popid.indexOf("<")); //$NON-NLS-1$
- pop.setId(popelementname + "<" + body_value); //$NON-NLS-1$
- pop.setOrigId(popelementname + "<" + body_value); //$NON-NLS-1$
- pop.setName(MessageFormat.format("{0} [{1}={2}]",new String[] {popelementname, pelementname, body_value})); //$NON-NLS-1$
- pop.setUsesIDMAP(true);
- }
- }
- } catch (BadLocationException ex) {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("BadLocationException in characters(...) " + ex); //$NON-NLS-1$
- fcurrentParent.addChild(new XMLNode(TYPE_TEXT,"body_("+fcurrentParent.bodies+")",new String(ch, start, length),(fsignature+SIGN_TEXT),fdoc,0,0)); //$NON-NLS-2$ //$NON-NLS-1$
- }
- }
- }
- prevlocator = new LocatorImpl(locator);
- } // characters(char[],int,int);
-
- /** Ignorable whitespace. */
- public void ignorableWhitespace(char ch[], int start, int length) {
-//
-//// characters(ch, start, length);
-//// System.out.flush();
-//
- prevlocator = new LocatorImpl(locator);
- } // ignorableWhitespace(char[],int,int);
-
- /** End element. */
- public void endElement(String uri, String local, String raw) {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("\nExiting element " + fcurrentParent.getId()); //$NON-NLS-1$
-
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("prevlocator: line " + prevlocator.getLineNumber() + " column " + prevlocator.getColumnNumber() + " id " + prevlocator.getPublicId()); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("locator: line " + locator.getLineNumber() + " column " + locator.getColumnNumber() + " id " + locator.getPublicId()); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-
-
- if (fcurrentParent.getParent() != null) {
- try {
- IRegion r2= fdoc.getLineInformation(locator.getLineNumber()-1);
- Position pos = fcurrentParent.getRange();
-
- int elem_length = r2.getOffset()+locator.getColumnNumber()-1 - pos.getOffset();//length of element from start tag to end tag
- fcurrentParent.setLength(elem_length);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("pos.getOffset: " + pos.getOffset() + " elem_length: " + elem_length); //$NON-NLS-2$ //$NON-NLS-1$
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("fdoc.get(pos.getOffset()+elem_length-5,4): >" + fdoc.get(pos.getOffset()+elem_length-5,4) + "<"); //$NON-NLS-2$ //$NON-NLS-1$
- //if (fdoc.get(pos.getOffset()+elem_length-2,1) != ">") elem_length-=1;
- try {
- fcurrentParent.setValue(fdoc.get(pos.getOffset(),elem_length));
- } catch (BadLocationException ex) {
- try {
- fcurrentParent.setValue(fdoc.get(pos.getOffset(),elem_length-1));
- } catch (BadLocationException ex2) {
- if (XMLStructureCreator.DEBUG_MODE) {
- System.out.println("BadLocationException in endElement(...) while attempting fcurrentParent.setValue(...): " + ex); //$NON-NLS-1$
- System.out.println("Attempt to correct BadLocationException failed: " + ex2); //$NON-NLS-1$
- }
- }
- }
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Value of " + fcurrentParent.getId() + " is >" + fcurrentParent.getValue() + "<"); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-
- //going from ending element to parent element
- fcurrentParent = fcurrentParent.getParent();
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("fcurrentParent = fcurrentParent.getParent();"); //$NON-NLS-1$
- } catch (BadLocationException ex) {
- if (XMLStructureCreator.DEBUG_MODE) {
- System.out.println("BadLocationException in endElement(...): " + ex); //$NON-NLS-1$
- System.out.println("fcurrentParent.getId(): " + fcurrentParent.getId()); //$NON-NLS-1$
- }
- }
- } else {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Error: Cannot reach Parent of Parent"); //$NON-NLS-1$
- }
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("fcurrentParent is now " + fcurrentParent.getId()); //$NON-NLS-1$
-
- prevlocator = new LocatorImpl(locator);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Signature before cutting: " + fsignature); //$NON-NLS-1$
- int ssi = fsignature.lastIndexOf(SIGN_SEPARATOR);//fsignature separator index
- ssi = fsignature.lastIndexOf(SIGN_SEPARATOR,ssi-1);//second-last ".", e.g. in root.a.b. to obtain root.a.
- fsignature = fsignature.substring(0,ssi+1);
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Signature after cutting: " + fsignature); //$NON-NLS-1$
- } // endElement(String)
-
- //
- // ErrorHandler methods
- //
-
- /** Warning. */
- public void warning(SAXParseException ex) {
- System.err.println("[Warning] "+ //$NON-NLS-1$
- getLocationString(ex)+": "+ //$NON-NLS-1$
- ex.getMessage());
- }
-
- /** Error. */
- public void error(SAXParseException ex) {
- System.err.println("[Error] "+ //$NON-NLS-1$
- getLocationString(ex)+": "+ //$NON-NLS-1$
- ex.getMessage());
- }
-
- /** Fatal error. */
- public void fatalError(SAXParseException ex) throws SAXException {
- System.err.println("[Fatal Error] "+ //$NON-NLS-1$
- getLocationString(ex)+": "+ //$NON-NLS-1$
- ex.getMessage());
- //System.out.println(ex);
- //throw ex;
- }
-
- /** Returns a string of the location. */
- private String getLocationString(SAXParseException ex) {
- StringBuffer str = new StringBuffer();
-
- String systemId = ex.getSystemId();
- if (systemId != null) {
- int index = systemId.lastIndexOf('/');
- if (index != -1)
- systemId = systemId.substring(index + 1);
- str.append(systemId);
- }
- str.append(':');
- str.append(ex.getLineNumber());
- str.append(':');
- str.append(ex.getColumnNumber());
-
- return str.toString();
-
- } // getLocationString(SAXParseException):String
-
- }
-
- public XMLStructureCreator() {
- //set default idmap
- fIdMapToUse= DEFAULT_IDMAP;
- fUseIdMap= false;
- XMLPlugin plugin= XMLPlugin.getDefault();
- //if statement required for tests
- if (plugin != null) {
- fIdMaps = plugin.getIdMaps();
- fIdMapsInternal = plugin.getIdMapsInternal();
- fIdExtensionToName = plugin.getIdExtensionToName();
- fOrderedElements= plugin.getOrderedElements();
- fOrderedElementsInternal= plugin.getOrderedElementsInternal();
- }
- fRemoveWhiteSpace= false;
- }
-
-// public void setNameScheme(String idmap_name) {
-// fName = MessageFormat.format("{0} ({1})", new String[] {DEFAULT_NAME,idmap_name}); //$NON-NLS-1$
-// }
-//
- /**
- * This title will be shown in the title bar of the structure compare pane.
- */
- public String getName() {
- return DEFAULT_NAME;
- }
-
- /**
- * Set File extension of the parsed file. This extension will be used to choose an Id Map scheme.
- */
- public void setFileExtension(String ext) {
- fFileExt= ext;
- }
-
- /**
- * Initialize the Id Mappings for the Id Mapping Scheme and the Ordered Elements
- * This method must be called before getStructure(Object) is called on the two/three inputs of the compare
- */
- public void initIdMaps() {
- if (fFirstCall && fFileExt != null) {
- fFirstCall = false;
- String fileExtLower= fFileExt.toLowerCase();
- if (fIdExtensionToName.containsKey(fileExtLower))
- setIdMap((String)fIdExtensionToName.get(fileExtLower));
- }
-
- setUseIdMap();
- fOrdered= null;
- if (!isUseIdMap())
- idMap = null;
- else if (fIdMaps.containsKey(fIdMapToUse)) {
- idMap = (HashMap) fIdMaps.get(fIdMapToUse);
- } else if (fIdMapsInternal.containsKey(fIdMapToUse)) {
- idMap = (HashMap) fIdMapsInternal.get(fIdMapToUse);
- }
-
- if (fOrderedElements != null)
- fOrdered= (ArrayList) fOrderedElements.get(fIdMapToUse);
- if (fOrdered == null && fOrderedElementsInternal != null)
- fOrdered= (ArrayList) fOrderedElementsInternal.get(fIdMapToUse);
- }
-
- /**
- * Returns the XML parse tree of the input.
- */
- public IStructureComparator getStructure(Object input) {
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("Starting parse"); //$NON-NLS-1$
-
- if (!(input instanceof IStreamContentAccessor))
- return null;
-
- IStreamContentAccessor sca= (IStreamContentAccessor) input;
-
- try {
-
- //Input parsed with parser.parse(new InputSource(sca.getContents));
- String contents= readString(sca.getContents());
- if (contents == null)
- contents= ""; //$NON-NLS-1$
-
- fdoc= new Document(contents);
- fsignature = ROOT_ID + SIGN_SEPARATOR;
- XMLChildren root= new XMLChildren(TYPE_ELEMENT,ROOT_ID, "",(fsignature+SIGN_ELEMENT), fdoc, 0, fdoc.getLength()); //$NON-NLS-1$
- fcurrentParent = root;
-
- XMLHandler handler = new XMLHandler();
-
- try {
-// /* original xerces code
-// SAXParser parser = (SAXParser)Class.forName(parserName).newInstance();
-// */
-// XMLReader parser = XMLReaderFactory.createXMLReader(parserName);
-//
-// parser.setFeature( "http://xml.org/sax/features/validation", setValidation); //$NON-NLS-1$
-// parser.setFeature( "http://xml.org/sax/features/namespaces", setNameSpaces ); //$NON-NLS-1$
-// /*
-// parser.setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false); //$NON-NLS-1$
-// parser.setFeature( "http://apache.org/xml/features/validation/schema", setSchemaSupport ); //$NON-NLS-1$
-// parser.setFeature( "http://apache.org/xml/features/validation/schema-full-checking", setSchemaFullSupport); //$NON-NLS-1$
-// */
-// parser.setContentHandler(handler);
-// parser.setErrorHandler(handler);
-//
-// parser.parse(new InputSource(sca.getContents()));
-
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setNamespaceAware(true);
- SAXParser parser = factory.newSAXParser();
- parser.parse(new InputSource(sca.getContents()), handler);
-
- if (XMLStructureCreator.DEBUG_MODE) System.out.println("End of parse"); //$NON-NLS-1$
- } catch (SAXParseException e) {
- XMLPlugin.log(e);
- return null;
- } catch (Exception e) {
-// MessageDialog.openError(XMLPlugin.getActiveWorkbenchShell(),"Error in XML parser","An error occured in the XML parser.\nNo structured compare can be shown");
- XMLPlugin.log(e);
- return null;
- }
-
- return root;
- } catch (CoreException ex) {
- XMLPlugin.log(ex);
- }
- return null;
- }
-
- public boolean canSave() {
- return true;
- }
-
- public boolean canRewriteTree() {
- return false;
- }
-
- public void rewriteTree(Differencer differencer, IDiffContainer root) {
- }
-
- public void save(IStructureComparator structure, Object input) {
- if (input instanceof IEditableContent && structure instanceof XMLNode) {
- IDocument doc= ((XMLNode)structure).getDocument();
- IEditableContent bca= (IEditableContent) input;
- String c= doc.get();
- bca.setContent(c.getBytes());
- }
- }
-
- public String getContents(Object node, boolean ignoreWhitespace) {
- if (node instanceof XMLNode) {
- String s= ((XMLNode)node).getValue();
- if (ignoreWhitespace)
- s= s.trim();
- return s;
- }
- return null;
- }
-
- public IStructureComparator locate(Object path, Object source) {
- return null;
- }
-
- /**
- * Returns null if an error occurred.
- */
- static String readString(InputStream is) {
- if (is == null)
- return null;
- BufferedReader reader= null;
- try {
- StringBuffer buffer= new StringBuffer();
- char[] part= new char[2048];
- int read= 0;
- reader= new BufferedReader(new InputStreamReader(is));
-
- while ((read= reader.read(part)) != -1)
- buffer.append(part, 0, read);
-
- return buffer.toString();
-
- } catch (IOException ex) {
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException ex) {
- }
- }
- }
- return null;
- }
-
- /** Returns a sorted list of attributes. */
- /* Taken from SAX2Writer sample of xerces */
- protected Attributes sortAttributes(Attributes attrs) {
-
- AttributesImpl attributes = new AttributesImpl();
- int len = (attrs != null) ? attrs.getLength() : 0;
- for (int i = 0; i < len; i++) {
- String name = attrs.getQName(i);
- int count = attributes.getLength();
- int j = 0;
- while (j < count) {
- if (name.compareTo(attributes.getQName(j)) < 0) {
- break;
- }
- j++;
- }
- attributes.insertAttributeAt(j, name, attrs.getType(i),
- attrs.getValue(i));
- }
-
- return attributes;
-
- } // sortAttributes(AttributeList):AttributeList
-
- public void setIdMap(String idmap_name) {
- fIdMapToUse= idmap_name;
- }
-
- /** Returns the name of the IdMap Scheme that will be used to set ids.
- */
- public String getIdMap() {
- return fIdMapToUse;
- }
-
- public void setUseIdMap() {
- if (fIdMaps != null && fIdMapsInternal != null)
- fUseIdMap= fIdMaps.containsKey(fIdMapToUse) || fIdMapsInternal.containsKey(fIdMapToUse);
- }
-
- public boolean isUseIdMap() {
- return fUseIdMap;
- }
-
- public void updateIdMaps() {
- fIdMaps = XMLPlugin.getDefault().getIdMaps();
- fOrderedElements= XMLPlugin.getDefault().getOrderedElements();
- }
-
- protected boolean isWhiteSpace(char c) {
- return c == '\t' || c == '\n' || c == '\r' || c == ' ';
- }
-
- protected String removeWhiteSpace(String str) {
- str= trimWhiteSpace(str);
- StringBuffer retStr= new StringBuffer();
- int start= 0, end= 0;
- outer_while:
- while (true) {
- while ( end < str.length() && !isWhiteSpace(str.charAt(end)) ) { end++; }
- if (end > str.length()) break outer_while;
- if ( start != 0) retStr.append(' ');
- retStr.append(str.substring(start, end));
- end++;
- while ( end < str.length() && isWhiteSpace(str.charAt(end)) ) { end++; }
- start= end;
- }
- return retStr.toString();
- }
-
- protected String trimWhiteSpace(String str) {
- int start=0, end= str.length()-1;
- while (start < str.length() && isWhiteSpace(str.charAt(start))) { start++; }
- if ( start == str.length() )
- return ""; //$NON-NLS-1$
- while (end >= 0 && isWhiteSpace(str.charAt(end))) { end--; }
- return str.substring(start, end+1);
- }
-
- public void setRemoveWhiteSpace(boolean removeWhiteSpace) {
- fRemoveWhiteSpace= removeWhiteSpace;
- }
-
- public boolean getRemoveWhiteSpace() {
- return fRemoveWhiteSpace;
- }
-}

Back to the top