org.eclipse.datatools.sqltools.schemaobjecteditor.ui.action.EditSchemaObjectAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.datatools.sqltools.schemaobjecteditor.ui.action.EditSchemaObjectAction.java

Source

/***********************************************************************************************************************
 * Copyright (c) 2009 Sybase, Inc. All rights reserved. This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors: Sybase, Inc. - initial API and implementation
 **********************************************************************************************************************/
package org.eclipse.datatools.sqltools.schemaobjecteditor.ui.action;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentServiceImpl;
import org.eclipse.datatools.modelbase.sql.schema.Database;
import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
import org.eclipse.datatools.sqltools.core.DatabaseIdentifier;
import org.eclipse.datatools.sqltools.internal.SQLDevToolsUtil;
import org.eclipse.datatools.sqltools.schemaobjecteditor.model.ISchemaObjectEditModel;
import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.core.SchemaObjectEditor;
import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.internal.SOEUIPlugin;
import org.eclipse.datatools.sqltools.schemaobjecteditor.ui.util.SchemaObjectEditorUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorPart;

/**
 * The action to open a schema object editor, given db definition, db object type and a model object. The consumer can
 * either use this action or re-write a new one if they have extra requirement.
 * 
 * @author Idull
 */
public class EditSchemaObjectAction extends Action implements IEditSchemaObjectAction {
    class OpenSchemaEditorJob extends Job {
        public OpenSchemaEditorJob(String name) {
            super(name);
        }

        protected IStatus run(IProgressMonitor monitor) {
            if (monitor == null) {
                monitor = manager.createProgressGroup();
            }
            monitor.beginTask(Messages.EditSchemaObjectAction_open_schema_editor, monitor.UNKNOWN);
            EditSchemaObjectAction.this.run(monitor);
            return Status.OK_STATUS;
        }
    }

    private ISchemaObjectEditModel _modelObj;

    private String _vendorName;

    private String _version;

    private String _objectTypeId;

    private String _editorId;

    private DatabaseIdentifier _databaseIdentifier;

    private IEditorPart _part;

    /**
     * Database name,version,object id, database identifier can be calculated from this object.
     */
    protected SQLObject _sqlObject;

    private String _defaultPageId;

    /**
     * Passes a SQL object, will calculate other necessary information via this object
     * 
     * @param obj
     * @param modelObj
     */
    public EditSchemaObjectAction(SQLObject obj, ISchemaObjectEditModel modelObj) {
        _sqlObject = obj;
        _modelObj = modelObj;
    }

    public EditSchemaObjectAction(String vendorName, String version, String objectTypeId,
            ISchemaObjectEditModel modelObj, DatabaseIdentifier databaseIdentifier) {
        super();
        this._vendorName = vendorName;
        this._version = version;
        this._objectTypeId = objectTypeId;
        this._modelObj = modelObj;
        this._databaseIdentifier = databaseIdentifier;
    }

    public EditSchemaObjectAction(String vendorName, String version, String objectTypeId, String text, int style,
            ISchemaObjectEditModel modelObj, DatabaseIdentifier databaseIdentifier) {
        super(text, style);
        this._vendorName = vendorName;
        this._version = version;
        this._objectTypeId = objectTypeId;
        this._modelObj = modelObj;
        this._databaseIdentifier = databaseIdentifier;
    }

    public EditSchemaObjectAction(String vendorName, String version, String objectTypeId, String text,
            ISchemaObjectEditModel modelObj) {
        super(text);
        this._vendorName = vendorName;
        this._version = version;
        this._objectTypeId = objectTypeId;
        this._modelObj = modelObj;
    }

    public EditSchemaObjectAction(String vendorName, String version, String objectTypeId, String text,
            ImageDescriptor image, ISchemaObjectEditModel modelObj) {
        super(text, image);
        this._vendorName = vendorName;
        this._version = version;
        this._objectTypeId = objectTypeId;
        this._modelObj = modelObj;
    }

    public EditSchemaObjectAction() {
        super();
    }

    public EditSchemaObjectAction(String text, ImageDescriptor image) {
        super(text, image);
    }

    public EditSchemaObjectAction(String text, int style) {
        super(text, style);
    }

    public EditSchemaObjectAction(String text) {
        super(text);
    }

    public void run() {
        OpenSchemaEditorJob job = new OpenSchemaEditorJob(Messages.EditSchemaObjectAction_opening);
        job.setUser(true);
        job.schedule();
    }

    public void run(IProgressMonitor monitor) {
        SOEUIPlugin.getActiveWorkbenchShell().getDisplay().syncExec(new Runnable() {
            public void run() {
                checkAndOpenEditor();
                setActivePage();
            }
        });
    }

    public void checkAndOpenEditor() {
        if (_modelObj == null) {
            String[] buttons = new String[] { IDialogConstants.OK_LABEL };
            MessageDialog d = new MessageDialog(SOEUIPlugin.getActiveWorkbenchShell(),
                    Messages.EditSchemaObjectAction_error, null, Messages.EditSchemaObjectAction_model_null,
                    MessageDialog.ERROR, buttons, 0);
            d.open();
            return;
        }

        // open the editor using editor id
        if (_editorId != null && _editorId.trim().length() != 0) {
            _part = SchemaObjectEditorUtils.openEditor(_editorId, _modelObj, _databaseIdentifier);
        }

        if (_vendorName == null || _version == null || _objectTypeId == null || _databaseIdentifier == null) {
            boolean calculated = false;
            if (_sqlObject != null) {
                Object root = ContainmentServiceImpl.INSTANCE.getRootElement(_sqlObject);
                if (root != null && root instanceof Database) {
                    calculated = true;
                    Database db = (Database) root;
                    if (_vendorName == null) {
                        _vendorName = db.getVendor();
                    }
                    if (_version == null) {
                        _version = db.getVersion();
                    }
                    if (_databaseIdentifier == null) {
                        SQLDevToolsUtil.getDatabaseIdentifier(_sqlObject);
                    }
                    if (_objectTypeId == null) {
                        _objectTypeId = _sqlObject.eClass().getEPackage().getName() + "."
                                + _sqlObject.eClass().getName();
                    }
                }
            } else if (!calculated) {
                String[] buttons = new String[] { IDialogConstants.OK_LABEL };
                MessageDialog d = new MessageDialog(SOEUIPlugin.getActiveWorkbenchShell(),
                        Messages.EditSchemaObjectAction_error, null, Messages.EditSchemaObjectAction_no_vendor_name,
                        MessageDialog.ERROR, buttons, 0);
                d.open();
                return;
            }
        }

        _part = SchemaObjectEditorUtils.openEditor(_vendorName, _version, _objectTypeId, _modelObj,
                _databaseIdentifier);
    }

    public String getEditorId() {
        return _editorId;
    }

    public void setEditorId(String id) {
        _editorId = id;
    }

    public Object getModelObj() {
        return _modelObj;
    }

    public void setModelObj(ISchemaObjectEditModel obj) {
        _modelObj = obj;
    }

    public String getObjectTypeId() {
        return _objectTypeId;
    }

    public void setObjectTypeId(String typeId) {
        _objectTypeId = typeId;
    }

    public String getVendorName() {
        return _vendorName;
    }

    public void setVendorName(String name) {
        _vendorName = name;
    }

    public String getVersion() {
        return _version;
    }

    public void setVersion(String _version) {
        this._version = _version;
    }

    public IEditorPart getPart() {
        return _part;
    }

    public DatabaseIdentifier getDatabaseIdentifier() {
        return _databaseIdentifier;
    }

    public void setDatabaseIdentifier(DatabaseIdentifier identifier) {
        _databaseIdentifier = identifier;
    }

    public SQLObject getSQLObject() {
        return _sqlObject;
    }

    public void setSQLObject(SQLObject object) {
        _sqlObject = object;
    }

    public void setDefaultPageId(String defaultPageId) {
        _defaultPageId = defaultPageId;
    }

    /**
     * Set active page
     */
    protected void setActivePage() {
        if (_defaultPageId != null && _part instanceof SchemaObjectEditor) {
            ((SchemaObjectEditor) _part).setActivePage(_defaultPageId);
        }
    }

}