in impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java [744:863]
void saveChangeSummary(EObject o, EStructuralFeature f, Object changeSummary) {
boolean notMixed;
if (doc instanceof XmlString)
notMixed = !((XmlString) doc).mixed();
else if (extendedMetaData == null)
notMixed = true;
else
switch (extendedMetaData.getContentKind(o.eClass())) {
case ExtendedMetaData.MIXED_CONTENT:
case ExtendedMetaData.SIMPLE_CONTENT:
notMixed = false;
break;
default:
notMixed = true;
}
if (notMixed) {
StringBuffer margin = new StringBuffer(this.margin);
for (EObject container = o.eContainer(), grandContainer; (grandContainer = container.eContainer()) != null; container = grandContainer)
margin.append(indent);
changeSummaryOptions.put(SDOHelper.XMLOptions.XML_SAVE_MARGIN, margin.toString());
}
try {
if (xmlStreamWriter == null) {
xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(new Writer() {
public void close() {
}
public void flush() {
}
protected final void add(char[] cbuf, int index, int off) {
doc.addText(new String(cbuf, index, off - index));
}
public void write(char[] cbuf, int off, int len) {
if (len != 0)
for (;;) {
while (cbuf[off] == MARK) {
doc.addLine();
if (--len == 0)
return;
++off;
}
for (int index = off;/* true */;) {
++off;
if (--len == 0)
add(cbuf, index, off);
else {
if (cbuf[off] != MARK)
continue;
add(cbuf, index, off);
doc.addLine();
if (--len != 0)
break;
}
return;
}
++off;
}
}
});
xmlStreamWriter.setNamespaceContext(((SDOXMLHelperImpl) helper).new NameSpaceContext() {
public String getNamespaceURI(String prefix) {
return declareXSI && ExtendedMetaData.XSI_PREFIX.equals(prefix) ? ExtendedMetaData.XSI_URI : super
.getNamespaceURI(prefix);
}
public String getPrefix(String namespaceURI) {
return declareXSI && ExtendedMetaData.XSI_URI.equals(namespaceURI) ? ExtendedMetaData.XSI_PREFIX : super
.getPrefix(namespaceURI);
}
public Iterator getPrefixes(String namespaceURI) {
final Iterator iterator = super.getPrefixes(namespaceURI);
return ExtendedMetaData.XSI_URI.equals(namespaceURI) ? new Iterator() {
boolean first = true;
public boolean hasNext() {
if (first)
if (declareXSI) // never from true to false
return true;
else
first = false;
return iterator.hasNext();
}
public Object next() {
if (first) {
first = false;
if (declareXSI)
return ExtendedMetaData.XSI_PREFIX;
}
return iterator.next();
}
public void remove() {
if (first)
declareXSI = false;
else
iterator.remove();
}
} : iterator;
}
});
for (Iterator iterator = helper.getPrefixToNamespaceMap().iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
xmlStreamWriter.setPrefix((String) entry.getKey(), (String) entry.getValue());
}
if (declareXSI)
xmlStreamWriter.setPrefix(ExtendedMetaData.XSI_PREFIX, ExtendedMetaData.XSI_URI);
if (changeSummarySerializer == null)
changeSummarySerializer = new ChangeSummaryStreamSerializer();
}
changeSummarySerializer.saveChangeSummary((ChangeSummary) changeSummary, qName(f), xmlStreamWriter, changeSummaryOptions);
if (notMixed)
doc.addLine();
} catch (XMLStreamException e) {
xmlResource.getErrors().add(new XMIException(e));
}
}