com.archimatetool.templates.wizard.SaveModelAsTemplateToCollectionWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.templates.wizard.SaveModelAsTemplateToCollectionWizardPage.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.templates.wizard;

import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
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.Label;
import org.eclipse.ui.PlatformUI;

import com.archimatetool.editor.ui.IArchimateImages;
import com.archimatetool.editor.utils.StringUtils;
import com.archimatetool.templates.model.ITemplateGroup;
import com.archimatetool.templates.model.TemplateGroup;
import com.archimatetool.templates.model.TemplateManager;

/**
 * Save Model As Template Wizard Page for adding to Templates Collection
 * 
 * @author Phillip Beauvoir
 */
public abstract class SaveModelAsTemplateToCollectionWizardPage extends WizardPage {

    protected Button fDoStoreInCollectionButton;
    protected TemplateGroupsTableViewer fCategoriesTableViewer;
    protected Button fNewGroupButton;

    protected TemplateManager fTemplateManager;
    protected ITemplateGroup fSelectedTemplateGroup;

    public SaveModelAsTemplateToCollectionWizardPage(String pageName, TemplateManager templateManager) {
        super(pageName);
        fTemplateManager = templateManager;
        init();
        setImageDescriptor(
                IArchimateImages.ImageFactory.getImageDescriptor(IArchimateImages.ECLIPSE_IMAGE_NEW_WIZARD));
    }

    protected abstract void init();

    @Override
    public void createControl(Composite parent) {
        GridData gd;
        Label label;

        Composite container = new Composite(parent, SWT.NULL);
        container.setLayout(new GridLayout());
        setControl(container);

        PlatformUI.getWorkbench().getHelpSystem().setHelp(container, getHelpID());

        fDoStoreInCollectionButton = new Button(container, SWT.CHECK);
        fDoStoreInCollectionButton.setText(Messages.SaveModelAsTemplateToCollectionWizardPage_0);
        fDoStoreInCollectionButton.setSelection(true);

        fDoStoreInCollectionButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                boolean enabled = fDoStoreInCollectionButton.getSelection();
                fCategoriesTableViewer.getControl().setEnabled(enabled);
                fNewGroupButton.setEnabled(enabled);
                // Select first group, or none
                if (enabled) {
                    Object o = fCategoriesTableViewer.getElementAt(0);
                    if (o != null) {
                        fCategoriesTableViewer.setSelection(new StructuredSelection(o));
                    }
                } else {
                    fCategoriesTableViewer.setSelection(new StructuredSelection());
                }
            }
        });

        label = new Label(container, SWT.NULL);
        label.setText(Messages.SaveModelAsTemplateToCollectionWizardPage_1);

        Composite fieldContainer = new Composite(container, SWT.NULL);
        fieldContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
        GridLayout layout = new GridLayout(2, false);
        layout.marginWidth = 0;
        fieldContainer.setLayout(layout);

        Composite tableComp = new Composite(fieldContainer, SWT.NULL);
        tableComp.setLayout(new TableColumnLayout());
        gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 120;
        tableComp.setLayoutData(gd);
        fCategoriesTableViewer = new TemplateGroupsTableViewer(tableComp, SWT.BORDER | SWT.MULTI);

        fCategoriesTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                fSelectedTemplateGroup = (ITemplateGroup) ((IStructuredSelection) event.getSelection())
                        .getFirstElement();
            }
        });

        fCategoriesTableViewer.setInput(fTemplateManager.getUserTemplateGroups());

        fNewGroupButton = new Button(fieldContainer, SWT.NULL);
        fNewGroupButton.setText(Messages.SaveModelAsTemplateToCollectionWizardPage_2);
        gd = new GridData(SWT.TOP, SWT.TOP, false, false);
        fNewGroupButton.setLayoutData(gd);

        fNewGroupButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IInputValidator validator = new IInputValidator() {
                    @Override
                    public String isValid(String newText) {
                        return "".equals(newText) ? "" //$NON-NLS-1$//$NON-NLS-2$
                                : hasGroup(newText) ? Messages.SaveModelAsTemplateToCollectionWizardPage_3 : null;
                    }

                    boolean hasGroup(String name) {
                        for (ITemplateGroup group : fTemplateManager.getUserTemplateGroups()) {
                            if (name.equals(group.getName())) {
                                return true;
                            }
                        }
                        return false;
                    }
                };

                InputDialog dialog = new InputDialog(getShell(),
                        Messages.SaveModelAsTemplateToCollectionWizardPage_4,
                        Messages.SaveModelAsTemplateToCollectionWizardPage_5, "", //$NON-NLS-1$
                        validator);

                if (dialog.open() == Window.OK) {
                    String name = dialog.getValue();
                    if (StringUtils.isSetAfterTrim(name)) {
                        ITemplateGroup group = new TemplateGroup(name);
                        fTemplateManager.getUserTemplateGroups().add(group);
                        fCategoriesTableViewer.refresh();
                        fCategoriesTableViewer.setSelection(new StructuredSelection(group), true);
                    }
                }
            }
        });

        setPageComplete(true);
    }

    public boolean doStoreInCollection() {
        return fDoStoreInCollectionButton.getSelection();
    }

    /**
     * @return The Group for the template or null if no group selected
     */
    public ITemplateGroup getTemplateGroup() {
        return fSelectedTemplateGroup;
    }

    protected abstract String getHelpID();
}