diff options
Diffstat (limited to 'examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples')
3 files changed, 731 insertions, 731 deletions
diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java index 30fdfb540..032330665 100644 --- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java +++ b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java @@ -94,9 +94,9 @@ public abstract class AbstractMatching { } /* for testing */ - public Vector getMatches() { - return fMatches; - } + public Vector getMatches() { + return fMatches; + } protected class XMLComparator implements IRangeComparator { diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLCompareAddIdMapDialog.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLCompareAddIdMapDialog.java index 13957c590..a11a2f48f 100644 --- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLCompareAddIdMapDialog.java +++ b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLCompareAddIdMapDialog.java @@ -112,7 +112,7 @@ public class XMLCompareAddIdMapDialog extends StatusDialog { status.setError(XMLCompareMessages.XMLCompareAddIdMapDialog_error_invalidname); else if ( (!fEdit && (fIdMaps.containsKey(newText) || fIdMapsInternal.containsKey(newText)) ) || (fEdit && !newText.equals(fIdMap.getName()) && (fIdMaps.containsKey(newText) || fIdMapsInternal.containsKey(newText)) ) - ) + ) status.setError(XMLCompareMessages.XMLCompareAddIdMapDialog_error_idmapExists); newText= fIdMapExtText.getText().toLowerCase(); if (newText.length() > 0) { 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 index 5318bbd4b..f78e35de7 100644 --- 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 @@ -58,600 +58,600 @@ import org.eclipse.compare.structuremergeviewer.IStructureCreator; */ public class XMLStructureCreator implements IStructureCreator { - protected static final boolean DEBUG_MODE= false; - - public static final String DEFAULT_NAME= XMLCompareMessages.XMLStructureCreator_pluginname; - - public static final String USE_UNORDERED= XMLCompareMessages.XMLStructureCreator_unordered; - public static final String USE_ORDERED= XMLCompareMessages.XMLStructureCreator_ordered; - public static final String DEFAULT_IDMAP= USE_ORDERED; - - 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.XMLStructureCreator_idmap_unordered; - public static final char ID_SEPARATOR= '<'; - public static final char ID_TYPE_BODY= '<'; - - private XMLNode fcurrentParent; - private String fsignature; - private Document fdoc; - private boolean ignoreBodies= false; - private HashMap fIdMapsInternal; - private HashMap fIdMaps; - private HashMap fIdExtensionToName; - private HashMap fOrderedElementsInternal; - private HashMap fOrderedElements; - private HashMap idMap; - private ArrayList fOrdered; - private String fIdMapToUse; - private boolean fUseIdMap; - 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 - - @Override + protected static final boolean DEBUG_MODE= false; + + public static final String DEFAULT_NAME= XMLCompareMessages.XMLStructureCreator_pluginname; + + public static final String USE_UNORDERED= XMLCompareMessages.XMLStructureCreator_unordered; + public static final String USE_ORDERED= XMLCompareMessages.XMLStructureCreator_ordered; + public static final String DEFAULT_IDMAP= USE_ORDERED; + + 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.XMLStructureCreator_idmap_unordered; + public static final char ID_SEPARATOR= '<'; + public static final char ID_TYPE_BODY= '<'; + + private XMLNode fcurrentParent; + private String fsignature; + private Document fdoc; + private boolean ignoreBodies= false; + private HashMap fIdMapsInternal; + private HashMap fIdMaps; + private HashMap fIdExtensionToName; + private HashMap fOrderedElementsInternal; + private HashMap fOrderedElements; + private HashMap idMap; + private ArrayList fOrdered; + private String fIdMapToUse; + private boolean fUseIdMap; + 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 + + @Override public void setDocumentLocator(Locator locator0) { - this.locator= locator0; - } + this.locator= locator0; + } - // DocumentHandler methods - - /* Processing instruction. */ - @Override + // DocumentHandler methods + + /* Processing instruction. */ + @Override 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); - } - - /** Start document. */ - @Override + // 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); + } + + /** Start document. */ + @Override public void startDocument() { - prevlocator= new LocatorImpl(locator); - } + prevlocator= new LocatorImpl(locator); + } - /* Start element. */ - @Override + /* Start element. */ + @Override 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 + Character.valueOf(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, Integer.valueOf(1)); - } else { - currentParent.childElements.put(raw, Integer.valueOf(currentParent.childElements.get(raw).intValue() + 1)); - } - elementId= raw + Character.valueOf(ID_SEPARATOR) + "[" + currentParent.childElements.get(raw) + "]"; //$NON-NLS-2$ //$NON-NLS-1$ - elementName= MessageFormat.format("{0} [{1}]", raw, currentParent.childElements.get(raw).toString()); //$NON-NLS-1$ - } - int start= r.getOffset() + prevlocator.getColumnNumber() - 1; - if (start < 0) - start= 0; - currentElement= new XMLChildren(TYPE_ELEMENT, elementId, elementId, (fsignature + SIGN_ELEMENT), fdoc, start, 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); - } - - /* Characters. */ - @Override + 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 + Character.valueOf(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, Integer.valueOf(1)); + } else { + currentParent.childElements.put(raw, Integer.valueOf(currentParent.childElements.get(raw).intValue() + 1)); + } + elementId= raw + Character.valueOf(ID_SEPARATOR) + "[" + currentParent.childElements.get(raw) + "]"; //$NON-NLS-2$ //$NON-NLS-1$ + elementName= MessageFormat.format("{0} [{1}]", raw, currentParent.childElements.get(raw).toString()); //$NON-NLS-1$ + } + int start= r.getOffset() + prevlocator.getColumnNumber() - 1; + if (start < 0) + start= 0; + currentElement= new XMLChildren(TYPE_ELEMENT, elementId, elementId, (fsignature + SIGN_ELEMENT), fdoc, start, 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); + } + + /* Characters. */ + @Override 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})", XMLCompareMessages.XMLStructureCreator_body, Integer.toString(fcurrentParent.bodies))); //$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}]", 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); - } - - /* Ignorable whitespace. */ - @Override + 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})", XMLCompareMessages.XMLStructureCreator_body, Integer.toString(fcurrentParent.bodies))); //$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}]", 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); + } + + /* Ignorable whitespace. */ + @Override public void ignorableWhitespace(char ch[], int start, int length) { - // - //// characters(ch, start, length); - //// System.out.flush(); - // - prevlocator= new LocatorImpl(locator); - } - - /* End element. */ - @Override + // + //// characters(ch, start, length); + //// System.out.flush(); + // + prevlocator= new LocatorImpl(locator); + } + + /* End element. */ + @Override 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$ - } - - // - // ErrorHandler methods - // - - /* Warning. */ - @Override + 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$ + } + + // + // ErrorHandler methods + // + + /* Warning. */ + @Override public void warning(SAXParseException ex) { - System.err.println("[Warning] " + //$NON-NLS-1$ - getLocationString(ex) + ": " + //$NON-NLS-1$ - ex.getMessage()); - } + System.err.println("[Warning] " + //$NON-NLS-1$ + getLocationString(ex) + ": " + //$NON-NLS-1$ + ex.getMessage()); + } - /* Error. */ - @Override + /* Error. */ + @Override public void error(SAXParseException ex) { - System.err.println("[Error] " + //$NON-NLS-1$ - getLocationString(ex) + ": " + //$NON-NLS-1$ - ex.getMessage()); - } + System.err.println("[Error] " + //$NON-NLS-1$ + getLocationString(ex) + ": " + //$NON-NLS-1$ + ex.getMessage()); + } - /* Fatal error. */ - @Override + /* Fatal error. */ + @Override 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) { - StringBuilder str= new StringBuilder(); - - 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(); - - } - } - - 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; - } - - /* - * This title will be shown in the title bar of the structure compare pane. - */ - @Override + 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) { + StringBuilder str= new StringBuilder(); + + 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(); + + } + } + + 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; + } + + /* + * This title will be shown in the title bar of the structure compare pane. + */ + @Override 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. - */ - @Override + 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. + */ + @Override 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); - 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(new StringReader(contents)), 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) { - // nothing to do - } - - @Override + 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); + 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(new StringReader(contents)), 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) { + // nothing to do + } + + @Override public void save(IStructureComparator structure, Object input) { - if (input instanceof IEditableContent && structure instanceof XMLNode) { - IDocument document= ((XMLNode) structure).getDocument(); - IEditableContent bca= (IEditableContent) input; + if (input instanceof IEditableContent && structure instanceof XMLNode) { + IDocument document= ((XMLNode) structure).getDocument(); + IEditableContent bca= (IEditableContent) input; String contents= document.get(); String encoding= null; if (input instanceof IEncodedStreamContentAccessor) { @@ -664,162 +664,162 @@ public class XMLStructureCreator implements IStructureCreator { if (encoding == null) encoding= "UTF-8"; //$NON-NLS-1$ try { - bca.setContent(contents.getBytes(encoding)); + bca.setContent(contents.getBytes(encoding)); } catch (UnsupportedEncodingException e) { - bca.setContent(contents.getBytes()); + bca.setContent(contents.getBytes()); } } } - @Override + @Override 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; - } - - @Override + if (node instanceof XMLNode) { + String s= ((XMLNode) node).getValue(); + if (ignoreWhitespace) + s= s.trim(); + return s; + } + return null; + } + + @Override public IStructureComparator locate(Object path, Object source) { - return null; - } - - static String readString(IStreamContentAccessor sa) throws CoreException { - InputStream is= sa.getContents(); - String encoding= null; - if (sa instanceof IEncodedStreamContentAccessor) - encoding= ((IEncodedStreamContentAccessor) sa).getCharset(); - if (encoding == null) - encoding= "UTF-8"; //$NON-NLS-1$ - return readString(is, encoding); - } - - /* - * Returns null if an error occurred. - */ - private static String readString(InputStream is, String encoding) { - if (is == null) - return null; - BufferedReader reader= null; - try { - StringBuilder buffer= new StringBuilder(); - char[] part= new char[2048]; - int read= 0; - reader= new BufferedReader(new InputStreamReader(is, encoding)); - - while ((read= reader.read(part)) != -1) - buffer.append(part, 0, read); - - return buffer.toString(); - - } catch (IOException ex) { - // NeedWork - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ex) { - // silently ignored - } - } - } - return null; - } - - /* Returns a sorted list of attributes. - */ - 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; - - } - - 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); - StringBuilder retStr= new StringBuilder(); - 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; - } + return null; + } + + static String readString(IStreamContentAccessor sa) throws CoreException { + InputStream is= sa.getContents(); + String encoding= null; + if (sa instanceof IEncodedStreamContentAccessor) + encoding= ((IEncodedStreamContentAccessor) sa).getCharset(); + if (encoding == null) + encoding= "UTF-8"; //$NON-NLS-1$ + return readString(is, encoding); + } + + /* + * Returns null if an error occurred. + */ + private static String readString(InputStream is, String encoding) { + if (is == null) + return null; + BufferedReader reader= null; + try { + StringBuilder buffer= new StringBuilder(); + char[] part= new char[2048]; + int read= 0; + reader= new BufferedReader(new InputStreamReader(is, encoding)); + + while ((read= reader.read(part)) != -1) + buffer.append(part, 0, read); + + return buffer.toString(); + + } catch (IOException ex) { + // NeedWork + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { + // silently ignored + } + } + } + return null; + } + + /* Returns a sorted list of attributes. + */ + 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; + + } + + 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); + StringBuilder retStr= new StringBuilder(); + 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; + } } |