in packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-emf/src/main/java/org/eclipse/emf/ecore/xmi/resource/xml/XMLSave.java [283:463]
protected void init(XMLResource resource, Map<?, ?> options) {
useCache = Boolean.TRUE.equals(options.get(XMLResource.OPTION_CONFIGURATION_CACHE));
nameInfo = new NameInfo();
declareXSI = false;
keepDefaults = Boolean.TRUE.equals(options.get(XMLResource.OPTION_KEEP_DEFAULT_CONTENT));
useEncodedAttributeStyle = Boolean.TRUE.equals(options.get(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE));
declareSchemaLocationImplementation = Boolean.TRUE.equals(options.get(XMLResource.OPTION_SCHEMA_LOCATION_IMPLEMENTATION));
declareSchemaLocation = declareSchemaLocationImplementation || Boolean.TRUE.equals(options.get(XMLResource.OPTION_SCHEMA_LOCATION));
Object saveTypeInfoOption = options.get(XMLResource.OPTION_SAVE_TYPE_INFORMATION);
if (saveTypeInfoOption instanceof Boolean) {
saveTypeInfo = saveTypeInfoOption.equals(Boolean.TRUE);
if (saveTypeInfo) {
xmlTypeInfo =
new XMLTypeInfo() {
public boolean shouldSaveType(EClass objectType, EClassifier featureType, EStructuralFeature feature) {
return objectType != anyType;
}
public boolean shouldSaveType(EClass objectType, EClass featureType, EStructuralFeature feature) {
return true;
}
};
}
} else {
saveTypeInfo = saveTypeInfoOption != null;
if (saveTypeInfo) {
xmlTypeInfo = (XMLTypeInfo) saveTypeInfoOption;
}
}
anyType = (EClass) options.get(XMLResource.OPTION_ANY_TYPE);
anySimpleType = (EClass) options.get(XMLResource.OPTION_ANY_SIMPLE_TYPE);
if (anyType == null) {
anyType = XMLTypePackage.eINSTANCE.getAnyType();
anySimpleType = XMLTypePackage.eINSTANCE.getSimpleAnyType();
}
Object extendedMetaDataOption = options.get(XMLResource.OPTION_EXTENDED_META_DATA);
if (extendedMetaDataOption instanceof Boolean) {
if (extendedMetaDataOption.equals(Boolean.TRUE)) {
extendedMetaData =
resource == null || resource.getResourceSet() == null ?
ExtendedMetaData.INSTANCE :
new BasicExtendedMetaData(resource.getResourceSet().getPackageRegistry());
}
} else {
extendedMetaData = (ExtendedMetaData) options.get(XMLResource.OPTION_EXTENDED_META_DATA);
}
// set serialization options
if (!toDOM) {
declareXML = !Boolean.FALSE.equals(options.get(XMLResource.OPTION_DECLARE_XML));
if (options.get(XMLResource.OPTION_FLUSH_THRESHOLD) instanceof Integer) {
flushThreshold = (Integer) options.get(XMLResource.OPTION_FLUSH_THRESHOLD);
}
Integer lineWidth = (Integer) options.get(XMLResource.OPTION_LINE_WIDTH);
int effectiveLineWidth = lineWidth == null ? Integer.MAX_VALUE : lineWidth;
String publicId = null, systemId = null;
if (resource != null && Boolean.TRUE.equals(options.get(XMLResource.OPTION_SAVE_DOCTYPE))) {
publicId = resource.getPublicId();
systemId = resource.getSystemId();
}
if (useCache) {
/*doc = ConfigurationCache.INSTANCE.getPrinter();
doc.reset(publicId, systemId, effectiveLineWidth, temporaryFileName);
escape = Boolean.TRUE.equals(options.get(XMLResource.OPTION_SKIP_ESCAPE)) ? null : ConfigurationCache.INSTANCE.getEscape();*/
} else {
doc = new XMLString(effectiveLineWidth, publicId, systemId, temporaryFileName);
escape = Boolean.TRUE.equals(options.get(XMLResource.OPTION_SKIP_ESCAPE)) ? null : new Escape();
}
if (Boolean.FALSE.equals(options.get(XMLResource.OPTION_FORMATTED))) {
doc.setUnformatted(true);
}
escapeURI = Boolean.FALSE.equals(options.get(XMLResource.OPTION_SKIP_ESCAPE_URI)) ? escape : null;
if (options.containsKey(XMLResource.OPTION_ENCODING)) {
encoding = (String) options.get(XMLResource.OPTION_ENCODING);
} else if (resource != null) {
encoding = resource.getEncoding();
}
if (options.containsKey(XMLResource.OPTION_XML_VERSION)) {
xmlVersion = (String) options.get(XMLResource.OPTION_XML_VERSION);
} else if (resource != null) {
xmlVersion = resource.getXMLVersion();
}
if (escape != null) {
int maxSafeChar = MAX_UTF_MAPPABLE_CODEPOINT;
if (encoding != null) {
if (encoding.equalsIgnoreCase("ASCII") || encoding.equalsIgnoreCase("US-ASCII")) {
maxSafeChar = MAX_ASCII_MAPPABLE_CODEPOINT;
} else if (encoding.equalsIgnoreCase("ISO-8859-1")) {
maxSafeChar = MAX_LATIN1_MAPPABLE_CODEPOINT;
}
}
escape.setMappingLimit(maxSafeChar);
if (!"1.0".equals(xmlVersion)) {
escape.setAllowControlCharacters(true);
}
escape.setUseCDATA(Boolean.TRUE.equals(options.get(XMLResource.OPTION_ESCAPE_USING_CDATA)));
}
resourceEntityHandler = (ResourceEntityHandler) options.get(XMLResource.OPTION_RESOURCE_ENTITY_HANDLER);
if (resourceEntityHandler instanceof URIHandler && !options.containsKey(XMLResource.OPTION_URI_HANDLER)) {
Map<Object, Object> newOptions = new LinkedHashMap<Object, Object>(options);
newOptions.put(XMLResource.OPTION_URI_HANDLER, resourceEntityHandler);
options = newOptions;
}
} else {
// DOM serialization
if (handler instanceof XMLDOMHandler) {
handler.setExtendedMetaData(extendedMetaData);
}
}
processDanglingHREF = (String) options.get(XMLResource.OPTION_PROCESS_DANGLING_HREF);
helper.setProcessDanglingHREF(processDanglingHREF);
map = (XMLMap) options.get(XMLResource.OPTION_XML_MAP);
if (map != null) {
helper.setXMLMap(map);
if (map.getIDAttributeName() != null) {
idAttributeName = map.getIDAttributeName();
}
}
if (resource != null) {
eObjectToExtensionMap = resource.getEObjectToExtensionMap();
if (eObjectToExtensionMap.isEmpty()) {
eObjectToExtensionMap = null;
} else if (extendedMetaData == null) {
extendedMetaData =
resource.getResourceSet() == null ?
ExtendedMetaData.INSTANCE :
new BasicExtendedMetaData(resource.getResourceSet().getPackageRegistry());
}
}
if (extendedMetaData != null) {
helper.setExtendedMetaData(extendedMetaData);
if (resource != null && resource.getContents().size() >= 1) {
EObject root = resource.getContents().get(0);
EClass eClass = root.eClass();
EReference xmlnsPrefixMapFeature = extendedMetaData.getXMLNSPrefixMapFeature(eClass);
if (xmlnsPrefixMapFeature != null) {
@SuppressWarnings("unchecked")
EMap<String, String> xmlnsPrefixMap = (EMap<String, String>) root.eGet(xmlnsPrefixMapFeature);
helper.setPrefixToNamespaceMap(xmlnsPrefixMap);
}
}
}
elementHandler = (ElementHandler) options.get(XMLResource.OPTION_ELEMENT_HANDLER);
@SuppressWarnings("unchecked")
List<Object> lookup = (List<Object>) options.get(XMLResource.OPTION_USE_CACHED_LOOKUP_TABLE);
if (lookup != null) {
// caching turned on by the user
if (lookup.isEmpty()) {
featureTable = new Lookup(map, extendedMetaData, elementHandler);
lookup.add(featureTable);
} else {
featureTable = (Lookup) lookup.get(INDEX_LOOKUP);
}
} else {
//no caching
featureTable = new Lookup(map, extendedMetaData, elementHandler);
}
helper.setOptions(options);
}