/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.stunner.bpmn.backend.legacy.resource; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.util.Bpmn2ResourceImpl; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.common.util.WrappedException; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.xmi.XMLLoad; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.XMLSave; import org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl; public class JBPMBpmn2ResourceImpl extends Bpmn2ResourceImpl { public HashMap xmlNameToFeatureMap = new HashMap(); public JBPMBpmn2ResourceImpl(URI uri) { super(uri); this.getDefaultLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, true); this.getDefaultLoadOptions().put(XMLResource.OPTION_DISABLE_NOTIFY, true); this.getDefaultLoadOptions().put(XMLResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, xmlNameToFeatureMap); // Switch off DTD external entity processing Map parserFeatures = new HashMap(); parserFeatures.put("http://xml.org/sax/features/external-general-entities", false); parserFeatures.put("http://xml.org/sax/features/external-parameter-entities", false); this.getDefaultLoadOptions().put(XMLResource.OPTION_PARSER_FEATURES, parserFeatures); this.getDefaultSaveOptions().put(XMLResource.OPTION_ENCODING, "UTF-8"); this.getDefaultSaveOptions().put(XMLResource.OPTION_PROCESS_DANGLING_HREF, XMLResource.OPTION_PROCESS_DANGLING_HREF_DISCARD); } @Override protected XMLSave createXMLSave() { prepareSave(); return new JBPMXMLSaveImpl(createXMLHelper()) { @Override protected boolean shouldSaveFeature(EObject o, EStructuralFeature f) { if (Bpmn2Package.eINSTANCE.getDocumentation_Text().equals(f)) { return false; } if (Bpmn2Package.eINSTANCE.getFormalExpression_Body().equals(f)) { return false; } return super.shouldSaveFeature(o, f); } }; } @Override protected XMLLoad createXMLLoad() { // DroolsPackageImpl.init(); // BpsimPackageImpl.init(); return new XMLLoadImpl(createXMLHelper()) { @Override public void load(XMLResource resource, InputStream inputStream, Map<?, ?> options) throws IOException { try { super.load(resource, inputStream, options); } catch (Exception e) { DiagnosticWrappedException error = new DiagnosticWrappedException(e); resource.getErrors().add(error); } } }; } class DiagnosticWrappedException extends WrappedException implements Diagnostic { private static final long serialVersionUID = 1L; private String location; private int column; private int line; public DiagnosticWrappedException(Exception exception) { super(exception); } public void setLocation(String location) { this.location = location; } public String getLocation() { return location; } public void setColumn(int column) { this.column = column; ; } public int getColumn() { return column; } public void setLine(int line) { this.line = line; } public int getLine() { return line; } } }