protected void init()

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);
    }