org.openmaji.implementation.tool.eclipse.ui.dialog.CreateWorksheetDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.openmaji.implementation.tool.eclipse.ui.dialog.CreateWorksheetDialog.java

Source

/*
 * @(#)CreateWorksheetDialog.java
 *
 * Copyright 2004 by EkoLiving Pty Ltd.  All Rights Reserved.
 *
 * This software is the proprietary information of EkoLiving Pty Ltd.
 * Use is subject to license terms.
 */
package org.openmaji.implementation.tool.eclipse.ui.dialog;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.openmaji.implementation.tool.eclipse.client.InterMajikClientProxyFactory;
import org.openmaji.implementation.tool.eclipse.client.MeemClientProxy;
import org.openmaji.meem.MeemPath;
import org.openmaji.meem.space.Space;
import org.openmaji.system.space.CategoryClient;
import org.openmaji.system.space.CategoryEntry;
import org.openmaji.system.space.hyperspace.StandardHyperSpaceCategory;

/**
 * @author mg
 */
public class CreateWorksheetDialog extends TitleAreaDialog {

    public static final String NEW_WORKSHEET_SUBSYSTEM = "New Worksheet Subsystem";

    public static final String DEFAULT_WORKSHEET_SUBSYSTEM = "Default Worksheet Subsystem";

    private Text txtWorksheetName;
    private String worksheetName;

    private Combo comboSubsystem;
    private String subsystemName;

    MeemClientProxy proxy;

    CategoryClient categoryClient;

    private IInputValidator validator;

    public CreateWorksheetDialog(Shell parentShell, IInputValidator validator) {
        super(parentShell);
        this.validator = validator;
    }

    /**
     * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    protected Control createDialogArea(Composite parent) {
        setTitle("Create Worksheet");
        setMessage(
                "Enter the name of the new worksheet and select the subsystem it should use to create new Meems");

        Composite parentComposite = (Composite) super.createDialogArea(parent);

        Composite composite = new Composite(parentComposite, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        composite.setFont(parentComposite.getFont());

        layout.numColumns = 2;
        int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
        //String defaultUserName = MajiPlugin.getDefault().getPreferenceStore().getString(MajiSystemPreferencePage.MAJI_USERNAME_PROPERTIES);

        Label label = new Label(composite, SWT.WRAP);
        label.setText("&Worksheet Name");

        GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL
                | GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER);
        //data.widthHint = widthHint;

        label.setLayoutData(data);
        label.setFont(parent.getFont());

        data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
        data.widthHint = widthHint;
        txtWorksheetName = new Text(composite, SWT.SINGLE | SWT.BORDER);
        txtWorksheetName.setFocus();
        txtWorksheetName.setLayoutData(data);
        txtWorksheetName.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                validateInput();
            }
        });

        label = new Label(composite, SWT.WRAP);
        label.setText("Subsystem");

        data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_END
                | GridData.VERTICAL_ALIGN_CENTER);

        label.setLayoutData(data);
        label.setFont(parent.getFont());

        comboSubsystem = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);

        populateCombo();

        data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
        data.widthHint = widthHint;

        // horizontal bar
        Label bar = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
        data = new GridData();
        data.horizontalSpan = 2;
        data.horizontalAlignment = GridData.FILL;
        bar.setLayoutData(data);
        return composite;
    }

    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
    }

    public class CategoryClientImpl implements CategoryClient {

        public void entriesAdded(CategoryEntry[] newEntries) {
            for (int i = 0; i < newEntries.length; i++) {
                comboSubsystem.add(newEntries[i].getName());
            }
        }

        public void entriesRemoved(CategoryEntry[] removedEntries) {
            // -mg- Auto-generated method stub
        }

        public void entryRenamed(CategoryEntry oldEntry, CategoryEntry newEntry) {
            // -mg- Auto-generated method stub
        }
    }

    private void populateCombo() {
        comboSubsystem.add(DEFAULT_WORKSHEET_SUBSYSTEM);
        comboSubsystem.add(NEW_WORKSHEET_SUBSYSTEM);

        comboSubsystem.select(0);

        proxy = InterMajikClientProxyFactory.getInstance().getMeem(
                MeemPath.spi.create(Space.HYPERSPACE, StandardHyperSpaceCategory.MAJI_SUBSYSTEM_INSTALLED));
        categoryClient = new CategoryClientImpl();
        proxy.getCategoryProxy().addClient(categoryClient);
    }

    public String getWorksheetName() {
        return worksheetName;
    }

    public String getWorksheetSubsystem() {
        return subsystemName;
    }

    protected void validateInput() {
        String errorMessage = null;
        if (validator != null) {
            errorMessage = validator.isValid(txtWorksheetName.getText());
        }
        setErrorMessage(errorMessage);
    }

    /**
     * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
     */
    protected void buttonPressed(int buttonId) {
        if (proxy != null) {
            proxy.getCategoryProxy().removeClient(categoryClient);
        }
        worksheetName = txtWorksheetName.getText();
        subsystemName = comboSubsystem.getText();
        super.buttonPressed(buttonId);
    }
}