// ============================================================================ // // 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; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ScrolledForm; import com.amalto.workbench.i18n.Messages; import com.amalto.workbench.models.IXObjectModelListener; import com.amalto.workbench.models.TreeObject; public abstract class AFormPage extends FormPage { private boolean refreshing = false; private boolean comitting = false; public AFormPage(FormEditor editor, String id, String title) { super(editor, id, title); } /** * Should be overriden */ @Override protected void createFormContent(IManagedForm managedForm) { super.createFormContent(managedForm); managedForm.getForm().setText(this.getTitle()); createActions(); // add listener to execute System.gc when page is closed } protected void initReadOnly(ScrolledForm form) { Composite parent = form.getBody(); FormEditor editor = getEditor(); if (editor instanceof IServerObjectEditorState) { if (((IServerObjectEditorState) editor).isReadOnly()) { form.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED)); form.setText(form.getText() + Messages.AFormPage_ReadOnly); if (parent != null) { for (Control control : parent.getChildren()) { control.setEnabled(false); } } } } } /** * Called by The main Editor * */ public void refreshPage() { this.refreshing = true; if (!this.comitting) { refreshData(); } this.refreshing = false; } @Override public void doSave(IProgressMonitor monitor) { commit(); super.doSave(monitor); } /** * Refresh the form with the model content * */ protected abstract void refreshData(); /** * Commit the form content to the model * */ protected abstract void commit(); /** * Commit changes back to the model - must be called by the listeners * * @param onSave */ protected void commitChanges() { this.comitting = true; if (!this.refreshing) { TreeObject xobject = (TreeObject) this.getEditor().getEditorInput().getAdapter(XObjectEditor.class); commit(); if (xobject.getParent() != null) { // e.g. not standalone but part // of model xobject.fireEvent(IXObjectModelListener.UPDATE, xobject.getParent(), xobject); } } this.comitting = false; } /** * @return the model manipulated by this Page */ public TreeObject getXObject() { return (TreeObject) this.getEditor().getEditorInput().getAdapter(XObjectEditor.class); } /** * Called at time of the page creation * */ protected abstract void createActions(); public boolean beforeDoSave() { return true; } public boolean isLocalInput() { FormEditor editor = getEditor(); if (editor instanceof IServerObjectEditorState) { return ((IServerObjectEditorState) editor).isLocalInput(); } return false; } }