Package com.salesforce.ide.ui.editors.internal

Source Code of com.salesforce.ide.ui.editors.internal.BaseComponentMultiPageEditorPart

/*******************************************************************************
* Copyright (c) 2014 Salesforce.com, 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:
*     Salesforce.com, inc. - initial API and implementation
******************************************************************************/
package com.salesforce.ide.ui.editors.internal;

import java.lang.reflect.InvocationTargetException;

import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.wst.sse.ui.StructuredTextEditor;

import com.salesforce.ide.core.internal.utils.Utils;
import com.salesforce.ide.core.model.Component;
import com.salesforce.ide.core.project.ForceProjectException;
import com.salesforce.ide.ui.editors.properysheets.MetadataFormPage;
import com.salesforce.ide.ui.editors.properysheets.PropertySheetsFactory;
import com.salesforce.ide.ui.internal.editor.BaseMultiPageEditorPart;

public abstract class BaseComponentMultiPageEditorPart extends BaseMultiPageEditorPart {

    private static final Logger logger = Logger.getLogger(BaseComponentMultiPageEditorPart.class);

    protected StructuredTextEditor metadataEditor = null;
    protected Component sourceComponent = null;
    protected Component metadataComponent = null;
    protected IEditorInput sourceEditorInput = null;
    protected IEditorInput metadataEditorInput = null;
    protected MetadataFormPage propertySheet = null;
    protected int sourcePageIndex = -1;
    protected int metadataPageIndex = -1;
    protected int propertyPageIndex = -1;

    // C O N S T R U C T O R S
    public BaseComponentMultiPageEditorPart() throws ForceProjectException {
        super();
        setTitleImage(getImage());
    }

    // M E T H O D S
    public StructuredTextEditor getMetadataEditor() {
        return metadataEditor;
    }

    public void setMetadataEditor(StructuredTextEditor metadataEditor) {
        this.metadataEditor = metadataEditor;
    }

    public Component getSourceComponent() {
        return sourceComponent;
    }

    public void setSourceComponent(Component sourceComponent) {
        this.sourceComponent = sourceComponent;
    }

    public Component getMetadataComponent() {
        return metadataComponent;
    }

    public void setMetadataComponent(Component metadataComponent) {
        this.metadataComponent = metadataComponent;
    }

    public IEditorInput getSourceEditorInput() {
        return sourceEditorInput;
    }

    public void setSourceEditorInput(IEditorInput sourceEditorInput) {
        this.sourceEditorInput = sourceEditorInput;
    }

    public IEditorInput getMetadataEditorInput() {
        return metadataEditorInput;
    }

    public void setMetadataEditorInput(IEditorInput metadataEditorInput) {
        this.metadataEditorInput = metadataEditorInput;
    }

    public int getSourcePageIndex() {
        return sourcePageIndex;
    }

    public int getMetadataPageIndex() {
        return metadataPageIndex;
    }

    public int getPropertyPageIndex() {
        return propertyPageIndex;
    }


    @Override
    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
        super.init(site, input);
        site.getWorkbenchWindow().getPartService().addPartListener(partListener);
    }

    @Override
    public void setInput(IEditorInput input) {
        super.setInput(input);

        IFile file = getEditorInputFile();
        try {

            if (!getProjectService().getComponentFactory().isComponentMetadata(file)) {
                sourceEditorInput = input;
                sourceComponent = getProjectService().getComponentFactory().getComponentFromFile(file, true);
                metadataEditorInput = getCompositeEditorInput(file);
                if (logger.isDebugEnabled()) {
                    logger.debug("Set metadata editor input from source file '"
                            + (metadataEditorInput != null ? metadataEditorInput.getName() : "n/a") + "'");
                }
            } else {
                metadataComponent = getProjectService().getComponentFactory().getComponentFromFile(file, true);
                sourceEditorInput = getCompositeEditorInput(file);
                super.setInput(sourceEditorInput);
                metadataEditorInput = input;
                if (logger.isDebugEnabled()) {
                    logger.debug("Set source editor input from metadata file '" + file.getName() + "'");
                }
            }

            if (sourceComponent == null) {
                logger.warn("Unable to open " + getEditorName() + " for file '" + file.getName() + "'");
                Utils.openError("Unable to load " + getEditorName() + ".", "Unable to open " + getEditorName()
                        + " for file '" + file.getName() + "'");
                return;
            }

            if (logger.isDebugEnabled()) {
                logger.debug("Opening " + sourceComponent.getFullDisplayName() + " from file '" + file.getName() + "'");
            }

        } catch (Exception e) {
            logger.warn("Unable to open " + getEditorName() + " for file '" + file.getName() + "'", e);
            Utils.openError(new InvocationTargetException(e), true, "Unable to load " + getEditorName() + ".");
        }

        setPartName(input.getName());
    }

    protected IEditorInput getCompositeEditorInput(IFile file) {
        IEditorInput editorInput = null;
        try {
            Component component = getComponentFactory().getCompositeComponentFromFile(file, true);
            IFile compositeComponentFile = component.getFileResource();

            if (compositeComponentFile != null && compositeComponentFile.exists()) {
                editorInput = new FileEditorInput(compositeComponentFile);
            }

        } catch (Exception e) {
            logger.error("Unable load metadata file for file '" + file.getProjectRelativePath().toPortableString()
                    + "'", e);
            Utils.openError("Metadata Not Found", "Unable to open or associated metadata file for file '"
                    + file.getProjectRelativePath().toPortableString() + "':\n\n" + e.getMessage());

        }
        return editorInput;
    }

    @Override
    public void doSave(IProgressMonitor monitor) {
        WorkspaceModifyOperation saveOp = new WorkspaceModifyOperation() {
            @Override
            protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException,
                    InterruptedException {
                if (getSourcePageIndex() > -1) {
                    getEditor(getSourcePageIndex()).doSave(monitor);
                }

                if (getPropertyPageIndex() > -1) {
                    getEditor(getPropertyPageIndex()).doSave(monitor);
                }

                if (getMetadataPageIndex() > -1) {
                    getEditor(getMetadataPageIndex()).doSave(monitor);
                }
            }
        };

        try {
            saveOp.run(monitor);
        } catch (Exception e) {
            logger.error("Unable to open Apex Code Editor", e);
            Utils.openError(new InvocationTargetException(e), true, "Unable to open Apex Code Editor.");
        }
    }

    @Override
    public IEditorPart getActiveEditor() {
        return super.getActiveEditor();
    }

    protected void createPropertySheetPage() {
        propertySheet = PropertySheetsFactory.createPropertySheet(getSourceComponent(), this);
    }

    @Override
    protected void pageChange(int newPageIndex) {
        if (newPageIndex == propertyPageIndex) {
            if (propertySheet != null)
                propertySheet.syncFromMetadata();
        } else if (newPageIndex == metadataPageIndex) {
            if (propertySheet != null)
                propertySheet.syncToMetadata();
        }
        super.pageChange(newPageIndex);
        getEditorSite().getActionBars().getStatusLineManager().setErrorMessage(null);
    }

    @Override
    public void dispose() {
        this.getEditorSite().getWorkbenchWindow().getPartService().removePartListener(partListener);
        super.dispose();
    }

    IPartListener2 partListener = new IPartListener2() {
        @Override
        public void partActivated(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.removeCapabilites();
            }
        }

        @Override
        public void partBroughtToTop(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.removeCapabilites();
            }
        }

        @Override
        public void partClosed(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.addCapabilites();
            }
        }

        @Override
        public void partDeactivated(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.addCapabilites();
            }
        }

        @Override
        public void partHidden(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.addCapabilites();
            }
        }

        @Override
        public void partInputChanged(IWorkbenchPartReference partRef) {

        }

        @Override
        public void partOpened(IWorkbenchPartReference partRef) {
            IWorkbenchPart part = partRef.getPart(false);
            if (part == BaseComponentMultiPageEditorPart.this) {
                EditorUtils.removeCapabilites();
            }
        }

        @Override
        public void partVisible(IWorkbenchPartReference partRef) {

        }
    };
}
TOP

Related Classes of com.salesforce.ide.ui.editors.internal.BaseComponentMultiPageEditorPart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.