org.eclipse.birt.report.designer.data.ui.dataset.PromptParameterDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.birt.report.designer.data.ui.dataset.PromptParameterDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2009 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.data.ui.dataset;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.birt.report.designer.nls.Messages;
import org.eclipse.birt.report.designer.ui.IReportGraphicConstants;
import org.eclipse.birt.report.designer.ui.ReportPlatformUIImages;
import org.eclipse.birt.report.designer.ui.dialogs.BaseDialog;
import org.eclipse.birt.report.model.adapter.oda.IAmbiguousAttribute;
import org.eclipse.birt.report.model.adapter.oda.IAmbiguousOption;
import org.eclipse.birt.report.model.adapter.oda.IAmbiguousParameterNode;
import org.eclipse.birt.report.model.api.elements.structures.OdaDataSetParameter;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Tree;

public class PromptParameterDialog extends BaseDialog {
    private Object input;
    private Map<IAmbiguousParameterNode, Boolean> selectedStatusMap;

    public PromptParameterDialog(String title) {
        super(title);
        selectedStatusMap = new HashMap<IAmbiguousParameterNode, Boolean>();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
     * .Composite)
     */
    protected Control createDialogArea(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        composite.setLayout(layout);
        GridData data = new GridData(GridData.FILL_BOTH);
        data.heightHint = 400;
        composite.setLayoutData(data);

        // createResultSetGroup( composite );
        createParameterGroup(composite);
        setOkButtonText(Messages.getString("PromptParameterDialog.okButton.text"));
        return composite;
    }

    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.IGNORE_LABEL, false);

        // create OK and Cancel buttons by default
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
    }

    private void createParameterGroup(Composite composite) {
        final Group group2 = new Group(composite, SWT.NONE);
        group2.setLayout(new GridLayout());
        group2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 8));// GridData.FILL_BOTH));

        group2.setText(Messages.getString("PromptParameterDialog.parameterGroup.title"));

        Label label1 = new Label(group2, SWT.NONE);
        label1.setText(Messages.getString("PromptParameterDialog.parameterGroup.label"));

        TreeViewer viewer2 = new TreeViewer(group2, SWT.FULL_SELECTION);

        Tree tableTree2 = viewer2.getTree();
        GridData gd = new GridData(GridData.FILL_BOTH);
        tableTree2.setLayoutData(gd);
        tableTree2.setHeaderVisible(true);
        tableTree2.setLinesVisible(true);

        TreeViewerColumn tvc21 = new TreeViewerColumn(viewer2, SWT.NONE);
        tvc21.getColumn().setText(Messages.getString("PromptParameterDialog.parameterGroup.nameColumn")); //$NON-NLS-1$
        tvc21.getColumn().setWidth(200);
        tvc21.setLabelProvider(new NameLabelProvider(selectedStatusMap));
        tvc21.setEditingSupport(new ParameterEditingSupport(viewer2, selectedStatusMap));

        TreeViewerColumn tvc22 = new TreeViewerColumn(viewer2, SWT.NONE);
        tvc22.getColumn().setText(Messages.getString("PromptParameterDialog.parameterGroup.previousValue")); //$NON-NLS-1$
        tvc22.getColumn().setWidth(200);
        tvc22.setLabelProvider(new PreviousValueLabelProvider());

        TreeViewerColumn tvc23 = new TreeViewerColumn(viewer2, SWT.NONE);
        tvc23.getColumn().setText(Messages.getString("PromptParameterDialog.parameterGroup.revisedValue")); //$NON-NLS-1$
        tvc23.getColumn().setWidth(200);
        tvc23.setLabelProvider(new RevisedValueLabelProvider());

        viewer2.setContentProvider(new ParameterContentProvider());
        viewer2.setInput(((IAmbiguousOption) input).getAmbiguousParameters());
        viewer2.expandAll();
    }

    /*
     * @see org.eclipse.birt.report.designer.ui.dialogs.BaseDialog#getResult()
     */
    public Object getResult() {
        List<OdaDataSetParameter> selectedList = new ArrayList<OdaDataSetParameter>();
        List<IAmbiguousParameterNode> ambiguousParameters = ((IAmbiguousOption) input).getAmbiguousParameters();
        for (int i = 0; i < ambiguousParameters.size(); i++) {
            Object obj = selectedStatusMap.get(ambiguousParameters.get(i));
            if (obj != null && obj instanceof Boolean) {
                if (((Boolean) obj).booleanValue()) {
                    selectedList.add((OdaDataSetParameter) ((IAmbiguousParameterNode) ambiguousParameters.get(i))
                            .getOdaDataSetParameterHandle().getStructure());
                }
            }
        }
        return selectedList;
    }

    public void setInput(Object input) {
        this.input = input;
    }
}

class ResultSetContentProvider implements ITreeContentProvider {

    public Object[] getChildren(Object parentElement) {
        return null;
    }

    public Object getParent(Object element) {
        return null;
    }

    public boolean hasChildren(Object element) {
        return true;
    }

    public Object[] getElements(Object input) {
        return new Object[0];
    }

    public void dispose() {
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}

class ParameterContentProvider implements ITreeContentProvider {

    public Object[] getChildren(Object parentElement) {
        if (parentElement instanceof List) {
            return ((List) parentElement).toArray();
        }

        if (parentElement instanceof IAmbiguousParameterNode) {
            return ((IAmbiguousParameterNode) parentElement).getAmbiguousAttributes().toArray();
        }
        return null;
    }

    public Object getParent(Object element) {
        return null;
    }

    public boolean hasChildren(Object element) {
        if (element instanceof List) {
            return true;
        }
        if (element instanceof IAmbiguousParameterNode) {
            return true;
        }
        if (element instanceof IAmbiguousAttribute) {
            return false;
        }
        return true;
    }

    public Object[] getElements(Object input) {
        if (input instanceof List) {
            return ((List) input).toArray();
        }
        return new Object[0];
    }

    public void dispose() {
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}

class NameLabelProvider extends ColumnLabelProvider implements IStyledLabelProvider {
    Map selectedStatusMap;

    public NameLabelProvider(Map isSelectedMap) {
        this.selectedStatusMap = isSelectedMap;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
     */
    public Image getImage(Object element) {
        String symbolicName = IReportGraphicConstants.ICON_CHECKED;

        if (element instanceof IAmbiguousParameterNode) {
            if (selectedStatusMap.containsKey(element)) {
                Object obj = selectedStatusMap.get(element);
                if (obj != null && obj instanceof Boolean) {
                    if (((Boolean) obj).booleanValue())
                        symbolicName = IReportGraphicConstants.ICON_CHECKED;
                    else
                        symbolicName = IReportGraphicConstants.ICON_UNCHECKED;
                }
            } else {
                selectedStatusMap.put(element, Boolean.TRUE);
                symbolicName = IReportGraphicConstants.ICON_CHECKED;
            }
            return ReportPlatformUIImages.getImage(symbolicName);
        }
        return super.getImage(element);
    }

    public String getText(Object element) {
        String text = getStyledText(element).toString();
        return text;
    }

    public StyledString getStyledText(Object element) {
        String value = null;
        if (element instanceof IAmbiguousParameterNode) {
            value = ((IAmbiguousParameterNode) element).getOdaDataSetParameterHandle().getName();
        } else if (element instanceof IAmbiguousAttribute) {
            value = ((IAmbiguousAttribute) element).getAttributeName();
        }
        if (value == null)
            value = ""; //$NON-NLS-1$ 
        StyledString styledString = new StyledString();
        styledString.append(value);
        return styledString;
    }
}

class PreviousValueLabelProvider extends ColumnLabelProvider implements IStyledLabelProvider {

    public String getText(Object element) {
        String text = getStyledText(element).toString();
        return text;
    }

    public StyledString getStyledText(Object element) {
        String value = null;
        if (element instanceof IAmbiguousAttribute) {
            if (((IAmbiguousAttribute) element).getPreviousValue() == null)
                value = "null";//$NON-NLS-1$ 
            else
                value = ((IAmbiguousAttribute) element).getPreviousValue().toString();
        }
        if (value == null)
            value = ""; //$NON-NLS-1$ 
        StyledString styledString = new StyledString();
        styledString.append(value);
        return styledString;
    }

}

class RevisedValueLabelProvider extends ColumnLabelProvider implements IStyledLabelProvider {

    public String getText(Object element) {
        String text = getStyledText(element).toString();
        return text;
    }

    public StyledString getStyledText(Object element) {
        String value = null;
        if (element instanceof IAmbiguousAttribute) {
            if (((IAmbiguousAttribute) element).getRevisedValue() == null)
                value = "null";//$NON-NLS-1$ 
            else
                value = ((IAmbiguousAttribute) element).getRevisedValue().toString();
        }
        if (value == null)
            value = ""; //$NON-NLS-1$ 
        StyledString styledString = new StyledString();
        styledString.append(value);
        return styledString;
    }

}

class ParameterEditingSupport extends EditingSupport {
    private CellEditor editor;
    private Map selectedStatusMap;
    private ColumnViewer viewer;

    public ParameterEditingSupport(ColumnViewer viewer, Map isSelectedMap) {
        super(viewer);
        this.viewer = viewer;
        editor = new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
        this.selectedStatusMap = isSelectedMap;
    }

    protected boolean canEdit(Object arg0) {
        return true;
    }

    @Override
    protected CellEditor getCellEditor(Object arg0) {
        return editor;
    }

    @Override
    protected Object getValue(Object arg0) {
        if (arg0 instanceof IAmbiguousParameterNode) {
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

    @Override
    protected void setValue(Object arg0, Object arg1) {
        if (arg0 instanceof IAmbiguousParameterNode) {
            Object obj = selectedStatusMap.get(arg0);
            if (obj != null && obj instanceof Boolean) {
                if (!((Boolean) obj).booleanValue())
                    selectedStatusMap.put(arg0, Boolean.TRUE);
                else
                    selectedStatusMap.put(arg0, Boolean.FALSE);
            } else {
                selectedStatusMap.put(arg0, Boolean.FALSE);
            }
        }
        viewer.refresh();
    }
}