com.amalto.workbench.actions.XSDNewBrowseItemViewAction.java Source code

Java tutorial

Introduction

Here is the source code for com.amalto.workbench.actions.XSDNewBrowseItemViewAction.java

Source

// ============================================================================
//
// Copyright (C) 2006-2017 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.actions;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.part.MultiPageEditorSite;
import org.eclipse.xsd.XSDElementDeclaration;

import com.amalto.workbench.dialogs.AddBrowseItemsWizard;
import com.amalto.workbench.editors.DataModelMainPage;
import com.amalto.workbench.editors.xsdeditor.XSDEditor;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.EImage;
import com.amalto.workbench.image.ImageCache;
import com.amalto.workbench.utils.Util;

public class XSDNewBrowseItemViewAction extends AbstractXSDNewAction {

    private static Log log = LogFactory.getLog(XSDNewBrowseItemViewAction.class);

    protected DataModelMainPage page;

    private List<XSDElementDeclaration> declList = new ArrayList<XSDElementDeclaration>();

    public XSDNewBrowseItemViewAction(DataModelMainPage page) {
        super();

        this.page = page;
        setImageDescriptor(ImageCache.getImage(EImage.ADD_OBJ.getPath()));
        setText(Messages.XSDNewBrowseItemViewAction_Text);
        setToolTipText(Messages.XSDNewBrowseItemViewAction_Text);
    }

    protected boolean isDirty() {

        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        if (window != null) {
            IWorkbenchPage activePage = window.getActivePage();
            if (activePage != null) {
                return activePage.getActiveEditor().isDirty();
            }
        }
        return false;
    }

    protected void saveEditor() {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        if (window != null) {
            IWorkbenchPage activePage = window.getActivePage();
            if (activePage != null) {
                activePage.saveEditor(activePage.getActiveEditor(), false);
            }
        }
    }

    private String getDisplayName() {
        return ((XSDEditor) getEditorPart()).getdMainPage().getXObject().getDisplayName();
    }

    @Override
    public void doRun() {

        if (isDirty()) {
            boolean save = MessageDialog.openConfirm(getShell(), Messages.SaveResource,
                    Messages.bind(Messages.modifiedChanges, getDisplayName()));
            if (save) {
                saveEditor();
            } else {
                return;
            }
        }

        declList.clear();
        List elementDeclarations = getSelectedXSDElementDeclarations();
        for (Object obj : elementDeclarations) {
            if (obj instanceof XSDElementDeclaration) {
                XSDElementDeclaration declaration = (XSDElementDeclaration) obj;
                if (Util.getParent(obj) == obj) {
                    declList.add(declaration);
                }
            }
        }

        if (!declList.isEmpty()) {
            //
            AddBrowseItemsWizard wizard = getAddBrowseItemsWizard(declList);
            WizardDialog dialog = new WizardDialog(getShell(), wizard);
            dialog.open();
        }
    }

    protected List getSelectedXSDElementDeclarations() {
        IStructuredSelection selection = (IStructuredSelection) page.getTreeViewer().getSelection();
        return selection.toList();
    }

    protected Shell getShell() {
        return page.getSite().getShell();
    }

    private AddBrowseItemsWizard getAddBrowseItemsWizard(List<XSDElementDeclaration> declList) {
        Object object = getEditorPart().getAdapter(AddBrowseItemsWizard.class);
        if (object != null) {
            AddBrowseItemsWizard wizard = (AddBrowseItemsWizard) object;
            wizard.setDeclarations(declList);
            return wizard;
        } else {

            return new AddBrowseItemsWizard(((XSDEditor) getEditorPart()).getdMainPage(), declList);
        }
    }

    @Override
    public void runWithEvent(Event event) {
        super.runWithEvent(event);
    }

    protected MultiPageEditorPart getEditorPart() {
        return ((MultiPageEditorSite) page.getEditorSite()).getMultiPageEditor();
    }
}