Search in sources :

Example 1 with ArtifactResourceListener

use of com.centurylink.mdw.plugin.workspace.ArtifactResourceListener in project mdw-designer by CenturyLinkCloud.

the class ArtifactEditor method openTempFile.

public void openTempFile(IProgressMonitor monitor) {
    tempFileEditor = null;
    try {
        IFolder folder = getTempFolder();
        if (!folder.exists())
            PluginUtil.createFoldersAsNeeded(getElement().getProject().getSourceProject(), folder, monitor);
        final IFile file = getTempFile(folder);
        final IWorkbenchPage activePage = MdwPlugin.getActivePage();
        if (file.exists()) {
            IEditorInput editorInput = new FileEditorInput(file);
            tempFileEditor = activePage.findEditor(editorInput);
            if (tempFileEditor == null) {
                // we'll refresh from attribute value
                new TempFileRemover(folder, file).remove(monitor);
            } else {
                // activate existing editor
                tempFileEditor = IDE.openEditor(activePage, file, true);
            }
        }
        if (tempFileEditor == null) {
            // either the file didn't exist or it was not currently open,
            // set from value
            byte[] value = valueProvider.getArtifactContent();
            if (value == null)
                value = "".getBytes();
            InputStream source = new ByteArrayInputStream(value);
            file.create(source, true, monitor);
            if (getElement().isReadOnly()) {
                ResourceAttributes resourceAttrs = file.getResourceAttributes();
                resourceAttrs.setReadOnly(true);
                file.setResourceAttributes(resourceAttrs);
            }
            final Display display = Display.getCurrent();
            if (display != null) {
                display.syncExec(new Runnable() {

                    public void run() {
                        try {
                            if (!valueProvider.beforeTempFileOpened())
                                return;
                            tempFileEditor = IDE.openEditor(activePage, file, true);
                            if (tempFileEditor != null) {
                                // listen for artifact made dirty and
                                // propagate to process canvas
                                tempFileEditor.addPropertyListener(new IPropertyListener() {

                                    public void propertyChanged(Object source, int propId) {
                                        if (source instanceof EditorPart && propId == IWorkbenchPartConstants.PROP_DIRTY) {
                                            if (((EditorPart) source).isDirty())
                                                // process
                                                fireValueChanged(null, true);
                                        // editor
                                        // should
                                        // show
                                        // dirty
                                        }
                                    }
                                });
                                // listen for artifact resource changes
                                ArtifactResourceListener resourceListener = new ArtifactResourceListener(getElement(), valueProvider, file);
                                getProject().addArtifactResourceListener(resourceListener);
                                // listen for workbench closed to prevent
                                // re-opening editor when the workbench is
                                // next opened
                                PlatformUI.getWorkbench().addWorkbenchListener(new ArtifactEditorWorkbenchListener(tempFileEditor));
                            }
                            valueProvider.afterTempFileOpened(tempFileEditor);
                        } catch (PartInitException ex) {
                            PluginMessages.log(ex);
                        }
                    }
                });
            }
            // register to listen to process editor events
            WorkflowProcess processVersion = null;
            if (getElement() instanceof Activity)
                processVersion = ((Activity) getElement()).getProcess();
            else if (getElement() instanceof WorkflowProcess)
                processVersion = (WorkflowProcess) getElement();
            if (processVersion != null) {
                IEditorPart processEditor = activePage.findEditor(processVersion);
                if (processEditor != null && tempFileEditor != null)
                    ((ProcessEditor) processEditor).addActiveScriptEditor(tempFileEditor);
            }
        }
    } catch (Exception ex) {
        PluginMessages.uiError(ex, "Open Temp File", getElement().getProject());
    }
}
Also used : IFile(org.eclipse.core.resources.IFile) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Activity(com.centurylink.mdw.plugin.designer.model.Activity) IEditorPart(org.eclipse.ui.IEditorPart) EditorPart(org.eclipse.ui.part.EditorPart) ArtifactResourceListener(com.centurylink.mdw.plugin.workspace.ArtifactResourceListener) IEditorPart(org.eclipse.ui.IEditorPart) ResourceAttributes(org.eclipse.core.resources.ResourceAttributes) IPropertyListener(org.eclipse.ui.IPropertyListener) CoreException(org.eclipse.core.runtime.CoreException) PartInitException(org.eclipse.ui.PartInitException) TempFileRemover(com.centurylink.mdw.plugin.workspace.TempFileRemover) ByteArrayInputStream(java.io.ByteArrayInputStream) FileEditorInput(org.eclipse.ui.part.FileEditorInput) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) PartInitException(org.eclipse.ui.PartInitException) WorkflowProcess(com.centurylink.mdw.plugin.designer.model.WorkflowProcess) IEditorInput(org.eclipse.ui.IEditorInput) IFolder(org.eclipse.core.resources.IFolder) Display(org.eclipse.swt.widgets.Display)

Aggregations

Activity (com.centurylink.mdw.plugin.designer.model.Activity)1 WorkflowProcess (com.centurylink.mdw.plugin.designer.model.WorkflowProcess)1 ArtifactResourceListener (com.centurylink.mdw.plugin.workspace.ArtifactResourceListener)1 TempFileRemover (com.centurylink.mdw.plugin.workspace.TempFileRemover)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 InputStream (java.io.InputStream)1 IFile (org.eclipse.core.resources.IFile)1 IFolder (org.eclipse.core.resources.IFolder)1 ResourceAttributes (org.eclipse.core.resources.ResourceAttributes)1 CoreException (org.eclipse.core.runtime.CoreException)1 Display (org.eclipse.swt.widgets.Display)1 IEditorInput (org.eclipse.ui.IEditorInput)1 IEditorPart (org.eclipse.ui.IEditorPart)1 IPropertyListener (org.eclipse.ui.IPropertyListener)1 IWorkbenchPage (org.eclipse.ui.IWorkbenchPage)1 PartInitException (org.eclipse.ui.PartInitException)1 EditorPart (org.eclipse.ui.part.EditorPart)1 FileEditorInput (org.eclipse.ui.part.FileEditorInput)1