// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package com.amalto.workbench.editors.xslteditor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IEditorInput; import org.eclipse.wst.xsl.ui.internal.editor.XSLEditor; import com.amalto.workbench.i18n.Messages; public class XSLTEditor extends XSLEditor { public static final String ID = "com.amalto.workbench.editors.xslteditor.XSLTEditor"; //$NON-NLS-1$ public static Log log = LogFactory.getLog(XSLTEditor.class); private PageRefresher refresher; public XSLTEditor() { } @Override protected void doSetInput(IEditorInput input) throws CoreException { super.doSetInput(input); XSLTFileEditorInput editorInput = (XSLTFileEditorInput) input; this.refresher = editorInput.refresher; } @Override public void createPartControl(Composite parent) { Composite mainPart = new Composite(parent, SWT.NONE); mainPart.setLayout(new GridLayout()); createToolBar(mainPart); Composite editPart = new Composite(mainPart, SWT.NONE); editPart.setLayout(new FillLayout()); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); editPart.setLayoutData(gd); super.createPartControl(editPart); getSourceViewer().getTextWidget().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (refresher != null) { refresher.makeDirty(); } } }); } private void createToolBar(Composite parent) { Composite toolBarComp = new Composite(parent, SWT.BORDER_DOT); GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); gd.heightHint = 25; toolBarComp.setLayoutData(gd); final GridLayout glToolBarBackground = new GridLayout(); glToolBarBackground.verticalSpacing = 0; glToolBarBackground.marginWidth = 0; glToolBarBackground.marginHeight = 0; glToolBarBackground.horizontalSpacing = 0; toolBarComp.setLayout(glToolBarBackground); gd = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1); Button importToolItem = new Button(toolBarComp, SWT.PUSH); importToolItem.setLayoutData(gd); String btnSaveBackText = Messages.XSLTEditor_saveback; importToolItem.setText(btnSaveBackText); importToolItem.setToolTipText(btnSaveBackText); importToolItem.setEnabled(true); importToolItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { doSave(new NullProgressMonitor()); Display.getCurrent().asyncExec(new Runnable() { public void run() { if (refresher != null) { refresher.refreshPageUIEnabled(); } close(false); } }); } }); } @Override public void editorContextMenuAboutToShow(IMenuManager menu) { if (menu instanceof MenuManager) { MenuManager menuManager = (MenuManager) menu; Menu menu3 = menuManager.getMenu(); menu3.setVisible(false); } } @Override public void doSave(IProgressMonitor progressMonitor) { super.doSave(progressMonitor); if (refresher != null) { String text = getSourceViewer().getTextWidget().getText(); refresher.refreshPageContent(text); } } @Override public void dispose() { if (refresher != null) { refresher.refreshPageUIEnabled(); } removeTmpFile(); super.dispose(); } private void removeTmpFile() { IEditorInput editorInput = getEditorInput(); if (editorInput instanceof XSLTFileEditorInput) { XSLTFileEditorInput fileEditorInput = (XSLTFileEditorInput) editorInput; if (fileEditorInput.isTempFile) { try { IFile file = fileEditorInput.getFile(); file.delete(true, new NullProgressMonitor()); } catch (CoreException e) { log.error(e.getMessage(), e); } } } } }