blob: 310421a06da2ca173150bc2ab34d3e97f3bf4f38 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015, 2018 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.xtext.base.ui.model;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
import org.eclipse.ocl.pivot.internal.utilities.OCLInternal;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.ui.IEditorInput;
import org.eclipse.xtext.resource.XtextResource;
/**
* BaseDocumentProvider provides an OCL instance whose lifetime correlates
* with the editor and which is accessible from the Xtext SynchronizedResourceSet.
*/
@SuppressWarnings("deprecation")
public class BaseDocumentProvider extends DeferredDocumentProvider
{
private @Nullable OCLInternal ocl;
protected @NonNull OCLInternal createOCL() {
return OCLInternal.newInstance();
}
@Override
protected void disconnected() {
OCL ocl2 = ocl;
if (ocl2 != null) {
ocl = null;
ocl2.dispose();
}
super.disconnected();
}
protected @NonNull EnvironmentFactoryInternal getEnvironmentFactory() {
return getOCL().getEnvironmentFactory();
}
protected @NonNull OCLInternal getOCL() {
OCLInternal ocl2 = ocl;
if (ocl2 == null) {
ocl = ocl2 = createOCL();
}
return ocl2;
}
@Override
protected void loadResource(XtextResource resource, String document, String encoding) throws CoreException {
if (resource != null) {
ResourceSet resourceSet = resource.getResourceSet();
if (resourceSet != null) {
getEnvironmentFactory().adapt(resourceSet);
}
}
super.loadResource(resource, document, encoding);
}
@Override
protected boolean setDocumentContent(IDocument document, IEditorInput editorInput, String encoding) throws CoreException {
if (editorInput != null) {
IResource resource = ClassUtil.getAdapter(editorInput, IResource.class);
if (resource != null) {
IProject project = resource.getProject();
EnvironmentFactoryInternal environmentFactory = getEnvironmentFactory();
environmentFactory.setProject(project);
}
}
return super.setDocumentContent(document, editorInput, encoding);
}
}