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

Java tutorial

Introduction

Here is the source code for com.softlanding.rse.extensions.compare.MergeDialog.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.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 MergeDialog extends Dialog {
    private IQSYSMember member;
    private IBMiConnectionCombo maintenanceConnectionCombo;
    private QSYSMemberPrompt maintenanceMemberPrompt;
    private IBMiConnectionCombo rootConnectionCombo;
    private QSYSMemberPrompt rootMemberPrompt;
    private Button okButton;
    private IBMiConnection maintenanceConnection;
    private IBMiConnection rootConnection;
    private IBMiConnection memberConnection;
    private String maintenanceLibrary;
    private String maintenanceFile;
    private String maintenanceMember;
    private String rootLibrary;
    private String rootFile;
    private String rootMember;

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

    public Control createDialogArea(Composite parent) {
        Composite rtnGroup = (Composite) super.createDialogArea(parent);
        parent.getShell().setText(ExtensionsPlugin.getResourceString("MergeDialog.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 targetGroup = new Group(rtnGroup, SWT.NONE);
        targetGroup.setText(ExtensionsPlugin.getResourceString("MergeDialog.1")); //$NON-NLS-1$
        GridLayout targetLayout = new GridLayout();
        targetLayout.numColumns = 2;
        targetGroup.setLayout(targetLayout);
        targetGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        Label targetConnectionLabel = new Label(targetGroup, SWT.NONE);
        targetConnectionLabel.setText(ExtensionsPlugin.getResourceString("MergeDialog.2")); //$NON-NLS-1$

        Text targetConnectionText = new Text(targetGroup, SWT.BORDER);
        targetConnectionText.setEditable(false);
        GridData gd = new GridData();
        gd.widthHint = 200;
        targetConnectionText.setLayoutData(gd);
        targetConnectionText.setText(memberConnection.getConnectionName());

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

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

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

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

        maintenanceConnectionCombo = new IBMiConnectionCombo(maintenanceGroup, memberConnection, true);
        gd = new GridData();
        maintenanceConnectionCombo.setLayoutData(gd);

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

        maintenanceMemberPrompt = new QSYSMemberPrompt(maintenanceGroup, SWT.NONE, false, true,
                QSYSMemberPrompt.FILETYPE_SRC);
        maintenanceMemberPrompt.setFileName(member.getFile());
        maintenanceMemberPrompt.setLibraryName(member.getLibrary());
        maintenanceMemberPrompt.setMemberName(member.getName());
        maintenanceMemberPrompt.setSystemConnection(maintenanceConnectionCombo.getHost());

        maintenanceConnectionCombo.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                okButton.setEnabled(canFinish());
                maintenanceMemberPrompt.setSystemConnection(maintenanceConnectionCombo.getHost());
            }
        });

        Group rootGroup = new Group(rtnGroup, SWT.NONE);
        rootGroup.setText(ExtensionsPlugin.getResourceString("MergeDialog.11")); //$NON-NLS-1$
        GridLayout rootLayout = new GridLayout();
        rootLayout.numColumns = 1;
        rootGroup.setLayout(rootLayout);
        rootGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));

        rootConnectionCombo = new IBMiConnectionCombo(rootGroup, memberConnection, true);
        gd = new GridData();
        rootConnectionCombo.setLayoutData(gd);

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

        rootMemberPrompt = new QSYSMemberPrompt(rootGroup, SWT.NONE, false, true, QSYSMemberPrompt.FILETYPE_SRC);
        rootMemberPrompt.setFileName(member.getFile());
        rootMemberPrompt.setLibraryName(member.getLibrary());
        rootMemberPrompt.setMemberName(member.getName());
        rootMemberPrompt.setSystemConnection(rootConnectionCombo.getHost());

        maintenanceConnectionCombo.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                okButton.setEnabled(canFinish());
                maintenanceMemberPrompt.setSystemConnection(maintenanceConnectionCombo.getHost());
            }
        });

        rootConnectionCombo.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                okButton.setEnabled(canFinish());
                rootMemberPrompt.setSystemConnection(rootConnectionCombo.getHost());
            }
        });

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

        maintenanceMemberPrompt.getMemberCombo().addModifyListener(modifyListener);
        maintenanceMemberPrompt.getFileCombo().addModifyListener(modifyListener);
        maintenanceMemberPrompt.getLibraryCombo().addModifyListener(modifyListener);
        rootMemberPrompt.getMemberCombo().addModifyListener(modifyListener);
        rootMemberPrompt.getFileCombo().addModifyListener(modifyListener);
        rootMemberPrompt.getLibraryCombo().addModifyListener(modifyListener);
        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("MergeDialog.20")); //$NON-NLS-1$                                 
        }

        maintenanceMemberPrompt.getLibraryCombo().setFocus();

        return rtnGroup;
    }

    protected void okPressed() {
        if (ExtensionsPlugin.getDefault().getPreferenceStore()
                .getBoolean(ExtensionsPlugin.PREFERENCE_COMPARE_MERGE_WARNING)) {
            WarningDialog dialog = new WarningDialog(getShell(),
                    ExtensionsPlugin.getResourceString("MergeDialog.16"), null, //$NON-NLS-1$
                    ExtensionsPlugin.getResourceString("MergeDialog.17"), MessageDialog.WARNING, //$NON-NLS-1$
                    new String[] { ExtensionsPlugin.getResourceString("MergeDialog.18"), //$NON-NLS-1$
                            ExtensionsPlugin.getResourceString("MergeDialog.19") }, //$NON-NLS-1$
                    0);
            if (dialog.open() == WarningDialog.CANCEL) {
                super.cancelPressed();
                return;
            }
        }
        maintenanceConnection = IBMiConnection.getConnection(maintenanceConnectionCombo.getHost());
        rootConnection = IBMiConnection.getConnection(rootConnectionCombo.getHost());
        maintenanceLibrary = maintenanceMemberPrompt.getLibraryName();
        maintenanceFile = maintenanceMemberPrompt.getFileName();
        maintenanceMember = maintenanceMemberPrompt.getMemberName();
        rootLibrary = rootMemberPrompt.getLibraryName();
        rootFile = rootMemberPrompt.getFileName();
        rootMember = rootMemberPrompt.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 (maintenanceMemberPrompt.getMemberName() == null
                || maintenanceMemberPrompt.getMemberName().trim().length() == 0
                || maintenanceMemberPrompt.getFileName() == null
                || maintenanceMemberPrompt.getFileName().trim().length() == 0
                || maintenanceMemberPrompt.getLibraryName() == null
                || maintenanceMemberPrompt.getLibraryName().trim().length() == 0
                || rootMemberPrompt.getMemberName() == null || rootMemberPrompt.getMemberName().trim().length() == 0
                || rootMemberPrompt.getFileName() == null || rootMemberPrompt.getFileName().trim().length() == 0
                || rootMemberPrompt.getLibraryName() == null
                || rootMemberPrompt.getLibraryName().trim().length() == 0)
            return false;
        if (maintenanceMemberPrompt.getMemberName().equalsIgnoreCase(rootMemberPrompt.getMemberName())
                && maintenanceMemberPrompt.getFileName().equalsIgnoreCase(rootMemberPrompt.getFileName())
                && maintenanceMemberPrompt.getLibraryName().equalsIgnoreCase(rootMemberPrompt.getLibraryName())
                && maintenanceConnectionCombo.getHost().getHostName()
                        .equals(rootConnectionCombo.getHost().getHostName()))
            return false;
        if (maintenanceMemberPrompt.getLibraryName().equalsIgnoreCase(member.getLibrary())
                && maintenanceMemberPrompt.getFileName().equalsIgnoreCase(member.getFile())
                && maintenanceMemberPrompt.getMemberName().equalsIgnoreCase(member.getName())
                && maintenanceConnectionCombo.getHost().getHostName().equals(memberConnection.getHostName()))
            return false;
        if (rootMemberPrompt.getLibraryName().equalsIgnoreCase(member.getLibrary())
                && rootMemberPrompt.getFileName().equalsIgnoreCase(member.getFile())
                && rootMemberPrompt.getMemberName().equalsIgnoreCase(member.getName())
                && rootConnectionCombo.getHost().getHostName().equals(memberConnection.getHostName()))
            return false;
        return true;
    }

    public IBMiConnection getMaintenanceConnection() {
        return maintenanceConnection;
    }

    public String getMaintenanceFile() {
        return maintenanceFile;
    }

    public String getMaintenanceLibrary() {
        return maintenanceLibrary;
    }

    public String getMaintenanceMember() {
        return maintenanceMember;
    }

    public IBMiConnection getRootConnection() {
        return rootConnection;
    }

    public String getRootFile() {
        return rootFile;
    }

    public String getRootLibrary() {
        return rootLibrary;
    }

    public String getRootMember() {
        return rootMember;
    }

    public IQSYSMember getTargetMember() {
        return member;
    }
}