com.softlanding.rse.extensions.compare.CompareDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.softlanding.rse.extensions.compare.CompareDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2005-2009 SoftLanding Systems, Inc. and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     SoftLanding - initial API and implementation
 *******************************************************************************/
package com.softlanding.rse.extensions.compare;

import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PluginVersionIdentifier;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import com.ibm.etools.iseries.rse.ui.widgets.IBMiConnectionCombo;
import com.ibm.etools.iseries.rse.ui.widgets.QSYSMemberPrompt;
import com.ibm.etools.iseries.services.qsys.api.IQSYSMember;
import com.ibm.etools.iseries.subsystems.qsys.api.IBMiConnection;
import com.ibm.etools.iseries.subsystems.qsys.objects.IRemoteObjectContextProvider;
import com.softlanding.rse.extensions.ExtensionsPlugin;

public class CompareDialog extends Dialog {
    private IQSYSMember member;
    private IBMiConnectionCombo compareConnectionCombo;
    private QSYSMemberPrompt compareMemberPrompt;
    private Button editButton;
    private Button browseButton;
    private IBMiConnection compareConnection;
    private String compareLibrary;
    private String compareFile;
    private String compareMember;
    private boolean openForEdit;
    private Button okButton;
    private IDialogSettings settings;
    private IBMiConnection connection;

    public CompareDialog(Shell parentShell, IQSYSMember member) {
        super(parentShell);
        this.member = member;
        connection = IBMiConnection.getConnection(
                ((IRemoteObjectContextProvider) member).getRemoteObjectContext().getObjectSubsystem().getHost());
    }

    public Control createDialogArea(Composite parent) {
        Composite rtnGroup = (Composite) super.createDialogArea(parent);
        parent.getShell().setText(ExtensionsPlugin.getResourceString("CompareAction.0")); //$NON-NLS-1$

        GridLayout rtnLayout = new GridLayout();
        rtnLayout.numColumns = 1;
        rtnGroup.setLayout(rtnLayout);
        rtnGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        Group referenceGroup = new Group(rtnGroup, SWT.NONE);
        referenceGroup.setText(ExtensionsPlugin.getResourceString("CompareDialog.1")); //$NON-NLS-1$
        GridLayout referenceLayout = new GridLayout();
        referenceLayout.numColumns = 2;
        referenceGroup.setLayout(referenceLayout);
        referenceGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        Label referenceConnectionLabel = new Label(referenceGroup, SWT.NONE);
        referenceConnectionLabel.setText(ExtensionsPlugin.getResourceString("CompareDialog.2")); //$NON-NLS-1$

        Text referenceConnectionText = new Text(referenceGroup, SWT.BORDER);
        referenceConnectionText.setEditable(false);
        GridData gd = new GridData();
        gd.widthHint = 200;
        referenceConnectionText.setLayoutData(gd);
        referenceConnectionText.setText(connection.getConnectionName());

        Label referenceLibraryLabel = new Label(referenceGroup, SWT.NONE);
        referenceLibraryLabel.setText(ExtensionsPlugin.getResourceString("CompareDialog.3")); //$NON-NLS-1$
        Text referenceLibraryText = new Text(referenceGroup, SWT.BORDER);
        referenceLibraryText.setEditable(false);
        gd = new GridData();
        gd.widthHint = 75;
        referenceLibraryText.setLayoutData(gd);
        referenceLibraryText.setText(member.getLibrary());

        Label referenceFileLabel = new Label(referenceGroup, SWT.NONE);
        referenceFileLabel.setText(ExtensionsPlugin.getResourceString("CompareDialog.4")); //$NON-NLS-1$
        Text referenceFileText = new Text(referenceGroup, SWT.BORDER);
        referenceFileText.setEditable(false);
        gd = new GridData();
        gd.widthHint = 75;
        referenceFileText.setLayoutData(gd);
        referenceFileText.setText(member.getFile());

        Label referenceMemberLabel = new Label(referenceGroup, SWT.NONE);
        referenceMemberLabel.setText(ExtensionsPlugin.getResourceString("CompareDialog.5")); //$NON-NLS-1$
        Text referenceMemberText = new Text(referenceGroup, SWT.BORDER);
        referenceMemberText.setEditable(false);
        gd = new GridData();
        gd.widthHint = 75;
        referenceMemberText.setLayoutData(gd);
        referenceMemberText.setText(member.getName());

        Group compareGroup = new Group(rtnGroup, SWT.NONE);
        compareGroup.setText(ExtensionsPlugin.getResourceString("CompareDialog.6")); //$NON-NLS-1$
        GridLayout compareLayout = new GridLayout();
        compareLayout.numColumns = 1;
        compareGroup.setLayout(compareLayout);
        compareGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        compareConnectionCombo = new IBMiConnectionCombo(compareGroup, connection, true);
        gd = new GridData();
        compareConnectionCombo.setLayoutData(gd);

        gd = new GridData();
        gd.widthHint = 200;
        compareConnectionCombo.getCombo().setLayoutData(gd);

        compareMemberPrompt = new QSYSMemberPrompt(compareGroup, SWT.NONE, false, true,
                QSYSMemberPrompt.FILETYPE_SRC);
        compareMemberPrompt.setFileName(member.getFile());
        compareMemberPrompt.setLibraryName(member.getLibrary());
        compareMemberPrompt.setMemberName(member.getName());
        compareMemberPrompt.setSystemConnection(connection.getHost());

        compareConnectionCombo.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                okButton.setEnabled(canFinish());
                compareConnection = compareConnectionCombo.getISeriesConnection();
                compareMemberPrompt.setSystemConnection(compareConnection.getHost());
            }
        });

        Composite editGroup = new Composite(rtnGroup, SWT.NONE);
        GridLayout editLayout = new GridLayout();
        editLayout.numColumns = 2;
        editGroup.setLayout(editLayout);
        editGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        editButton = new Button(editGroup, SWT.RADIO);
        editButton.setText(ExtensionsPlugin.getResourceString("CompareDialog.11")); //$NON-NLS-1$
        browseButton = new Button(editGroup, SWT.RADIO);
        browseButton.setText(ExtensionsPlugin.getResourceString("CompareDialog.12")); //$NON-NLS-1$

        String rseVersion = (String) Platform.getBundle("com.ibm.etools.iseries.rse.ui").getHeaders()
                .get(org.osgi.framework.Constants.BUNDLE_VERSION);
        PluginVersionIdentifier current = new PluginVersionIdentifier(rseVersion);
        PluginVersionIdentifier required = new PluginVersionIdentifier(6, 0, 1, "2");

        if (required.isGreaterThan(current)) {
            Composite warningGroup = new Composite(rtnGroup, SWT.NONE);
            GridLayout warningLayout = new GridLayout();
            warningLayout.numColumns = 2;
            warningGroup.setLayout(warningLayout);
            warningGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

            new Label(warningGroup, SWT.NONE).setImage(Display.getDefault().getSystemImage(SWT.ICON_WARNING));
            new Label(warningGroup, SWT.WRAP).setText(ExtensionsPlugin.getResourceString("CompareDialog.19")); //$NON-NLS-1$                                 
        }

        settings = ExtensionsPlugin.getDefault().getDialogSettings();
        String mode = settings.get("CompareDialog.mode"); //$NON-NLS-1$
        if (mode == null)
            editButton.setSelection(true);
        else {
            if (mode.equals("b")) //$NON-NLS-1$
                browseButton.setSelection(true);
            else
                editButton.setSelection(true);
        }

        ModifyListener modifyListener = new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                okButton.setEnabled(canFinish());
            }
        };

        compareMemberPrompt.getMemberCombo().addModifyListener(modifyListener);
        compareMemberPrompt.getFileCombo().addModifyListener(modifyListener);
        compareMemberPrompt.getLibraryCombo().addModifyListener(modifyListener);
        compareMemberPrompt.getLibraryCombo().setFocus();

        return rtnGroup;
    }

    protected void okPressed() {
        if (editButton.getSelection() && ExtensionsPlugin.getDefault().getPreferenceStore()
                .getBoolean(ExtensionsPlugin.PREFERENCE_COMPARE_MERGE_WARNING)) {
            WarningDialog dialog = new WarningDialog(getShell(),
                    ExtensionsPlugin.getResourceString("CompareDialog.15"), null, //$NON-NLS-1$
                    ExtensionsPlugin.getResourceString("CompareDialog.16"), MessageDialog.WARNING, //$NON-NLS-1$
                    new String[] { ExtensionsPlugin.getResourceString("CompareDialog.17"), //$NON-NLS-1$
                            ExtensionsPlugin.getResourceString("CompareDialog.18") }, //$NON-NLS-1$
                    0);
            if (dialog.open() == WarningDialog.CANCEL) {
                super.cancelPressed();
                return;
            }
        }
        if (editButton.getSelection())
            settings.put("CompareDialog.mode", "e"); //$NON-NLS-1$ //$NON-NLS-2$
        else
            settings.put("CompareDialog.mode", "b"); //$NON-NLS-1$ //$NON-NLS-2$
        openForEdit = editButton.getSelection();
        if (compareConnection == null) {
            compareConnection = compareConnectionCombo.getISeriesConnection();
        }
        compareLibrary = compareMemberPrompt.getLibraryName();
        compareFile = compareMemberPrompt.getFileName();
        compareMember = compareMemberPrompt.getMemberName();
        super.okPressed();
    }

    public Button createButton(Composite parent, int id, String label, boolean defaultButton) {
        Button button = super.createButton(parent, id, label, defaultButton);
        if (id == OK) {
            okButton = button;
            okButton.setEnabled(false);
        }
        return button;
    }

    private boolean canFinish() {
        if (compareMemberPrompt.getMemberName() == null || compareMemberPrompt.getMemberName().trim().length() == 0)
            return false;
        if (compareMemberPrompt.getMemberName().equalsIgnoreCase(member.getName())
                && compareMemberPrompt.getFileName().equalsIgnoreCase(member.getFile())
                && compareMemberPrompt.getLibraryName().equalsIgnoreCase(member.getLibrary())
                && compareConnectionCombo.getISeriesConnection().getHostName()
                        .equalsIgnoreCase(connection.getHostName()))
            return false;
        return true;
    }

    public IQSYSMember getReferenceMember() {
        return member;
    }

    public IBMiConnection getCompareConnection() {
        return compareConnection;
    }

    public String getCompareFile() {
        return compareFile;
    }

    public String getCompareLibrary() {
        return compareLibrary;
    }

    public String getCompareMember() {
        return compareMember;
    }

    public boolean isOpenForEdit() {
        return openForEdit;
    }
}