com.cisco.yangide.ui.wizards.YangProjectWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.cisco.yangide.ui.wizards.YangProjectWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  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
 *  
 *******************************************************************************/
package com.cisco.yangide.ui.wizards;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
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.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

/**
 * @author Konstantin Zaitsev
 * @date Jun 27, 2014
 */
class YangProjectWizardPage extends WizardPage {

    private Text rootDirTxt;
    private Combo yangVersion;
    private Button exampleFileChk;
    private Table generatorsTable;
    private TableViewer generatorsViewer;
    private Button removeBtn;
    private Button editBtn;
    private Button addBtn;

    protected YangProjectWizardPage() {
        super("yangProjectPage");
        setTitle("YANG Tools Configuration");
        setDescription("Specify YANG Code Generators Parameters");
    }

    @Override
    public void createControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NULL);
        container.setLayout(new GridLayout(1, false));

        Composite group1 = new Composite(container, SWT.NONE);
        group1.setLayout(new GridLayout(2, false));
        group1.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));

        new Label(group1, SWT.NONE).setText("YANG Tools Version:");
        yangVersion = new Combo(group1, SWT.BORDER | SWT.READ_ONLY);
        yangVersion.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        new Label(group1, SWT.NONE).setText("YANG Files Root Directory:");
        rootDirTxt = new Text(group1, SWT.BORDER);
        rootDirTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        rootDirTxt.setText(YangProjectWizard.SRC_MAIN_YANG);

        Composite group2 = new Composite(container, SWT.NONE);
        group2.setLayout(new GridLayout(2, false));
        group2.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));

        privateCreateGeneratorControls(group2);

        exampleFileChk = new Button(group2, SWT.CHECK);
        exampleFileChk.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
        exampleFileChk.setText("Create Example YANG File");
        exampleFileChk.setSelection(true);

        setControl(container);

        // add default values
        // TODO KOS: load version from repository
        yangVersion.add("0.6.2-SNAPSHOT");
        yangVersion.add("0.6.1");
        yangVersion.add("0.6.0");
        yangVersion.add("0.5.8");
        yangVersion.select(0);

        // default generator
        CodeGeneratorConfig config = new CodeGeneratorConfig();
        config.setGroupId("org.opendaylight.yangtools");
        config.setArtifactId("maven-sal-api-gen-plugin");
        config.setVersion(yangVersion.getText());
        config.setGenClassName("org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl");
        config.setGenOutputDirectory("target/generated-sources/sal");
        generatorsViewer.add(config);
    }

    /**
     * @param parent
     */
    private void privateCreateGeneratorControls(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 2, 1));
        label.setText("Source Code Generators:");

        generatorsViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
        generatorsTable = generatorsViewer.getTable();
        generatorsTable.setLinesVisible(true);
        generatorsTable.setHeaderVisible(true);
        generatorsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        generatorsTable.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                validate();
            }
        });
        createTableColum(generatorsTable, "Group ID", 120);
        createTableColum(generatorsTable, "Artifact ID", 120);
        createTableColum(generatorsTable, "Version", 100);
        createTableColum(generatorsTable, "Generator Class Name", 200);
        createTableColum(generatorsTable, "Output Directory", 200);

        generatorsViewer.setLabelProvider(new ITableLabelProvider() {

            @Override
            public void removeListener(ILabelProviderListener listener) {
            }

            @Override
            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            @Override
            public void dispose() {
            }

            @Override
            public void addListener(ILabelProviderListener listener) {
            }

            @Override
            public String getColumnText(Object element, int columnIndex) {
                if (element instanceof CodeGeneratorConfig) {
                    CodeGeneratorConfig conf = (CodeGeneratorConfig) element;
                    String txt = null;
                    switch (columnIndex) {
                    case 0:
                        txt = conf.getGroupId();
                        break;
                    case 1:
                        txt = conf.getArtifactId();
                        break;
                    case 2:
                        txt = conf.getVersion();
                        break;
                    case 3:
                        txt = conf.getGenClassName();
                        break;
                    case 4:
                        txt = conf.getGenOutputDirectory();
                        break;
                    }
                    return txt != null ? txt : "";
                }
                return "";
            }

            @Override
            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }
        });

        Composite group = new Composite(parent, SWT.NONE);
        group.setLayout(new GridLayout(1, false));
        group.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));

        addBtn = new Button(group, SWT.NONE);
        addBtn.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
        addBtn.setText("Add...");
        addBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                YangCodeGeneratorDialog dialog = new YangCodeGeneratorDialog(getShell());
                if (dialog.open() == Window.OK) {
                    generatorsViewer.add(dialog.getConfig());
                }
            }
        });

        editBtn = new Button(group, SWT.NONE);
        editBtn.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
        editBtn.setText("Edit...");
        editBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                CodeGeneratorConfig config = (CodeGeneratorConfig) generatorsViewer
                        .getElementAt(generatorsTable.getSelectionIndex());
                YangCodeGeneratorDialog dialog = new YangCodeGeneratorDialog(getShell(), config);
                if (dialog.open() == Window.OK) {
                    generatorsViewer.update(dialog.getConfig(), null);
                }
            }
        });

        removeBtn = new Button(group, SWT.NONE);
        removeBtn.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
        removeBtn.setText("Remove");
        removeBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (generatorsTable.getSelectionCount() > 1) {
                    generatorsTable.remove(generatorsTable.getSelectionIndices());
                    validate();
                }
            }
        });
        validate();
    }

    private TableColumn createTableColum(Table table, String name, int width) {
        TableColumn tableColumn = new TableColumn(table, SWT.NONE);
        tableColumn.setWidth(width);
        tableColumn.setText(name);
        return tableColumn;
    }

    private void validate() {
        editBtn.setEnabled(generatorsTable.getSelectionCount() == 1);
        removeBtn.setEnabled(generatorsTable.getItemCount() > 1);
    }

    public boolean createExampleFile() {
        return exampleFileChk.getSelection();
    }

    public String getRootDir() {
        return rootDirTxt.getText();
    }

    public String getYangVersion() {
        return yangVersion.getText();
    }

    public List<CodeGeneratorConfig> getCodeGenerators() {
        List<CodeGeneratorConfig> list = new ArrayList<CodeGeneratorConfig>();
        for (TableItem item : generatorsTable.getItems()) {
            list.add((CodeGeneratorConfig) item.getData());
        }
        return list;
    }
}