org.eclipse.birt.report.designer.ui.cubebuilder.page.LinkGroupsPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.birt.report.designer.ui.cubebuilder.page.LinkGroupsPage.java

Source

/*******************************************************************************
 * Copyright (c) 2005 Actuate Corporation.
 * 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:
 *  Actuate Corporation  - initial API and implementation
 *******************************************************************************/

package org.eclipse.birt.report.designer.ui.cubebuilder.page;

import org.eclipse.birt.report.designer.core.model.SessionHandleAdapter;
import org.eclipse.birt.report.designer.internal.ui.util.IHelpContextIds;
import org.eclipse.birt.report.designer.internal.ui.views.dialogs.provider.FilterHandleProvider;
import org.eclipse.birt.report.designer.ui.cubebuilder.dialog.FilterListDialog;
import org.eclipse.birt.report.designer.ui.cubebuilder.joins.GraphicalEditPartsFactory;
import org.eclipse.birt.report.designer.ui.cubebuilder.joins.GraphicalViewerKeyHandler;
import org.eclipse.birt.report.designer.ui.cubebuilder.joins.editparts.DatasetNodeEditPart;
import org.eclipse.birt.report.designer.ui.cubebuilder.joins.editparts.HierarchyNodeEditPart;
import org.eclipse.birt.report.designer.ui.cubebuilder.nls.Messages;
import org.eclipse.birt.report.designer.ui.util.UIUtil;
import org.eclipse.birt.report.designer.ui.views.ElementAdapterManager;
import org.eclipse.birt.report.model.api.CommandStack;
import org.eclipse.birt.report.model.api.ReportElementHandle;
import org.eclipse.birt.report.model.api.olap.CubeHandle;
import org.eclipse.birt.report.model.api.olap.TabularCubeHandle;
import org.eclipse.birt.report.model.api.olap.TabularHierarchyHandle;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.gef.EditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
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.Control;

public class LinkGroupsPage extends AbstractCubePropertyPage {

    private CubeHandle input;
    private CubeBuilder builder;

    public LinkGroupsPage(CubeBuilder builder, CubeHandle model) {
        input = model;
        this.builder = builder;
    }

    public Control createContents(Composite parent) {
        Composite contents = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.verticalSpacing = 0;
        layout.marginWidth = 10;
        layout.marginTop = 10;
        layout.numColumns = 2;
        contents.setLayout(layout);
        GridData data = new GridData(GridData.FILL_BOTH);
        contents.setLayoutData(data);

        createCubeArea(contents);

        filterButton = new Button(contents, SWT.PUSH);
        filterButton.setText(Messages.getString("DatasetPage.Button.Filter")); //$NON-NLS-1$
        GridData gd = new GridData();
        gd.widthHint = Math.max(60, filterButton.computeSize(SWT.DEFAULT, SWT.DEFAULT).x);
        gd.grabExcessVerticalSpace = true;
        gd.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
        filterButton.setLayoutData(gd);
        filterButton.setEnabled(false);
        filterButton.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                EditPart editPart = (EditPart) viewer.getSelectedEditParts().get(0);
                CommandStack stack = SessionHandleAdapter.getInstance().getCommandStack();
                stack.startTrans(""); //$NON-NLS-1$

                FilterHandleProvider provider = (FilterHandleProvider) ElementAdapterManager.getAdapter(builder,
                        FilterHandleProvider.class);
                if (provider == null)
                    provider = new FilterHandleProvider();

                FilterListDialog dialog = new FilterListDialog(provider);
                if (editPart instanceof DatasetNodeEditPart)
                    dialog.setInput((ReportElementHandle) (editPart.getParent().getModel()));
                else if (editPart instanceof HierarchyNodeEditPart)
                    dialog.setInput((ReportElementHandle) (editPart.getModel()));
                if (dialog.open() == Window.OK) {
                    stack.commit();
                } else
                    stack.rollback();
            }

        });
        return contents;
    }

    private Composite createCubeArea(Composite parent) {
        Composite viewerContent = new Composite(parent, SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.widthHint = 500;
        gd.heightHint = 300;
        viewerContent.setLayoutData(gd);
        viewerContent.setLayout(new FillLayout());
        viewer = new ScrollingGraphicalViewer();
        EditDomain editDomain = new EditDomain();
        ScalableFreeformRootEditPart root = new ScalableFreeformRootEditPart();
        viewer.setRootEditPart(root);
        viewer.setEditDomain(editDomain);
        viewer.createControl(viewerContent);
        viewer.getControl().setBackground(ColorConstants.listBackground);
        factory = new GraphicalEditPartsFactory();
        viewer.setEditPartFactory(factory);
        viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(SelectionChangedEvent event) {
                if (event.getSelection() != null) {
                    StructuredSelection selection = (StructuredSelection) event.getSelection();
                    if (selection.getFirstElement() instanceof HierarchyNodeEditPart
                            || selection.getFirstElement() instanceof DatasetNodeEditPart) {
                        Object obj = selection.getFirstElement();
                        if (obj instanceof HierarchyNodeEditPart) {
                            TabularHierarchyHandle hierarchy = (TabularHierarchyHandle) ((HierarchyNodeEditPart) obj)
                                    .getModel();
                            if (hierarchy.getPrimaryKeys() != null && hierarchy.getPrimaryKeys().size() > 0) {
                                filterButton.setEnabled(false);
                            } else
                                filterButton.setEnabled(true);
                        } else
                            filterButton.setEnabled(true);
                    } else
                        filterButton.setEnabled(false);
                } else
                    filterButton.setEnabled(false);
            }
        });
        load();
        return viewerContent;
    }

    private ScrollingGraphicalViewer viewer;
    private GraphicalEditPartsFactory factory;
    private Button filterButton;

    public void pageActivated() {
        UIUtil.bindHelp(builder.getShell(), IHelpContextIds.CUBE_BUILDER_LINK_GROUPS_PAGE);
        getContainer().setMessage(Messages.getString("LinkGroupsPage.Container.Title.Message"), //$NON-NLS-1$
                IMessageProvider.NONE);
        builder.setTitleTitle(Messages.getString("LinkGroupsPage.Title.Title")); //$NON-NLS-1$
        builder.setErrorMessage(null);
        builder.setTitleMessage(Messages.getString("LinkGroupsPage.Title.Message")); //$NON-NLS-1$
        load();
    }

    private void load() {
        if (input != null && ((TabularCubeHandle) input).getDataSet() != null) {
            viewer.setContents(input);
        }
    }

}