com.apicloud.navigator.dialogs.AddFeatureDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.apicloud.navigator.dialogs.AddFeatureDialog.java

Source

/**
 * APICloud Studio
 * Copyright (c) 2014-2015 by APICloud, Inc. All Rights Reserved.
 * Licensed under the terms of the GNU Public License (GPL) v3.
 * Please see the license.html included with this distribution for details.
 * Any modifications to this file must keep this entire header intact.
 */

package com.apicloud.navigator.dialogs;

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

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

import com.apicloud.authentication.AuthenticActivator;
import com.apicloud.commons.model.Config;
import com.apicloud.commons.model.Feature;
import com.apicloud.commons.model.Param;
import com.apicloud.navigator.ui.editors.ConfigEditor;

public class AddFeatureDialog extends Dialog {
    private Text text_urlScheme;
    private Text text_apiKey;
    private Label lblParamkey;
    private Label lblParamvalue;
    private TabFolder tabFolder;
    private Feature selectFeature;
    private Config config;
    private Feature feature;
    private TreeViewer treeViewer;
    private ConfigEditor editor;
    private List<Feature> features;
    private Shell parentShell;

    /**
     * Create the dialog.
     * @param parentShell
     */
    public AddFeatureDialog(Shell parentShell, ConfigEditor editor, TreeViewer treeViewer, Config config) {
        super(parentShell);
        this.config = config;
        this.treeViewer = treeViewer;
        this.editor = editor;
        this.parentShell = parentShell;
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText(Messages.CreateFeatureDialog_CREARE_FEATURE);

        Rectangle parentBounds = parentShell.getBounds();
        Rectangle shellBounds = newShell.getBounds();
        newShell.setLocation(parentBounds.x + (parentBounds.width - shellBounds.width) / 2,
                parentBounds.y + (parentBounds.height - shellBounds.height) / 2);
    }

    /**
     * Create contents of the dialog.
     * @param parent
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);
        container.setLayout(new GridLayout(1, false));
        tabFolder = new TabFolder(container, SWT.NONE);
        tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        TabItem ui_LayoutItem = new TabItem(tabFolder, SWT.NONE);
        ui_LayoutItem.setText(Messages.AddFeatureDialog_UI);
        TableViewer UIViewer = createTable(tabFolder, ui_LayoutItem);
        UIViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_THREE));

        TabItem navigationMenuItem = new TabItem(tabFolder, SWT.NONE);
        navigationMenuItem.setText(Messages.AddFeatureDialog_VIDEO);
        TableViewer videoViewer = createTable(tabFolder, navigationMenuItem);
        videoViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_FOUR));

        TabItem extendedItem = new TabItem(tabFolder, SWT.NONE);
        extendedItem.setText(Messages.AddFeatureDialog_3RD);
        TableViewer _3rdItemViewer = createTable(tabFolder, extendedItem);
        _3rdItemViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_FIVE));

        TabItem open_sdk_Item = new TabItem(tabFolder, SWT.NONE);
        open_sdk_Item.setText(Messages.AddFeatureDialog_CUSTOM);
        TableViewer customViewer = createTable(tabFolder, open_sdk_Item);
        customViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_EIGHT));

        TabItem deviceAccessItem = new TabItem(tabFolder, SWT.NONE);
        deviceAccessItem.setText(Messages.AddFeatureDialog_INTERACTION);
        TableViewer InteractionViewer = createTable(tabFolder, deviceAccessItem);
        InteractionViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_TWO));

        TabItem cloud_ServerItem = new TabItem(tabFolder, SWT.NONE);
        cloud_ServerItem.setText(Messages.AddFeatureDialog_CLOUDSERVER);
        TableViewer cloud_ServerViewer = createTable(tabFolder, cloud_ServerItem);
        cloud_ServerViewer.setInput(getFeatureByType(Messages.AddFeatureDialog_NINE));

        Composite composite = new Composite(container, SWT.NONE);
        composite.setLayout(new GridLayout(4, false));
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));

        lblParamkey = new Label(composite, SWT.NONE);
        lblParamkey.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lblParamkey.setText("       urlScheme");
        lblParamkey.setVisible(false);

        text_urlScheme = new Text(composite, SWT.BORDER);
        text_urlScheme.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        text_urlScheme.setVisible(false);

        lblParamvalue = new Label(composite, SWT.NONE);
        lblParamvalue.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lblParamvalue.setText("     apiKey");
        lblParamvalue.setVisible(false);

        text_apiKey = new Text(composite, SWT.BORDER);
        text_apiKey.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        text_apiKey.setVisible(false);
        return container;
    }

    private TableViewer createTable(TabFolder tabFolder, TabItem systemItem) {
        TableViewer tableViewer = new TableViewer(tabFolder, SWT.BORDER | SWT.FULL_SELECTION);
        final Table table = tableViewer.getTable();
        table.addListener(SWT.MeasureItem, new Listener() {
            @Override
            public void handleEvent(Event event) {
                event.height = 30;

            }
        });
        table.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent e) {

                TableItem[] ti = table.getSelection();
                Feature f = (Feature) ti[0].getData();
                selectFeature = f;
                lblParamkey.setText("       urlScheme");
                lblParamvalue.setText("     apiKey");
                if (f.getName().equals("weiXin") || f.getName().equals("sinaWeiBo") || f.getName().equals("qq")) {
                    lblParamkey.setVisible(true);
                    text_urlScheme.setVisible(true);
                    lblParamvalue.setVisible(true);
                    text_apiKey.setVisible(true);
                } else if (f.getName().equals("baiduLocation")) {
                    lblParamkey.setVisible(false);
                    text_urlScheme.setVisible(false);
                    lblParamvalue.setVisible(true);
                    text_apiKey.setVisible(true);
                } else if (f.getName().equals("aliPay")) {
                    lblParamkey.setVisible(true);
                    text_urlScheme.setVisible(true);
                    lblParamvalue.setVisible(false);
                    text_apiKey.setVisible(false);
                } else if (f.getName().equals("baiduMap")) {
                    lblParamkey.setText("androidAPIKey");
                    lblParamvalue.setText("iosAPIKey");
                    lblParamkey.setVisible(true);
                    text_urlScheme.setVisible(true);
                    lblParamvalue.setVisible(true);
                    text_apiKey.setVisible(true);
                } else {
                    lblParamkey.setVisible(false);
                    text_urlScheme.setVisible(false);
                    lblParamvalue.setVisible(false);
                    text_apiKey.setVisible(false);
                }

            }

            @Override
            public void widgetDefaultSelected(SelectionEvent e) {

            }
        });
        systemItem.setControl(tableViewer.getTable());
        TableViewerColumn tableViewerColumn_name = new TableViewerColumn(tableViewer, SWT.NONE);
        TableColumn tableColumn_name = tableViewerColumn_name.getColumn();
        tableColumn_name.setWidth(150);
        tableViewerColumn_name.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((Feature) element).getName();
            }

        });

        TableViewerColumn tableViewerColumn_desc = new TableViewerColumn(tableViewer, SWT.NONE);
        TableColumn tableColumn_desc = tableViewerColumn_desc.getColumn();
        tableColumn_desc.setWidth(310);
        tableViewerColumn_desc.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ((Feature) element).getDesc();
            }

        });
        TableViewerColumn tableViewerColumn_ios = new TableViewerColumn(tableViewer, SWT.NONE);
        TableColumn tableColumn_ios = tableViewerColumn_ios.getColumn();
        tableColumn_ios.setWidth(20);
        tableViewerColumn_ios.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return null;
            }

            @Override
            public Image getImage(Object element) {
                return ((Feature) element).isIos() ? AuthenticActivator.getImage("icons/ios.png")
                        : super.getImage(element);
            }
        });

        TableViewerColumn tableViewerColumn_android = new TableViewerColumn(tableViewer, SWT.NONE);
        TableColumn tableColumn_android = tableViewerColumn_android.getColumn();
        tableColumn_android.setWidth(20);
        tableViewerColumn_android.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                return null;
            }

            @Override
            public Image getImage(Object element) {
                return ((Feature) element).isAndroid() ? AuthenticActivator.getImage("icons/android.png")
                        : super.getImage(element);
            }
        });

        tableViewer.setContentProvider(new ArrayContentProvider());
        return tableViewer;
    }

    /**
     * Create contents of the button bar.
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
        createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            if (selectFeature == null) {
                MessageDialog.openInformation(getShell(), Messages.AddFeatureDialog_INFORMATION,
                        Messages.AddFeatureDialog_MESSAGE);
                return;
            }
            for (Feature feature : config.getFeatures()) {
                if (feature.getName().equals(selectFeature.getName())) {
                    MessageDialog.openInformation(getShell(), Messages.AddFeatureDialog_INFORMATION,
                            Messages.CreateFeatureDialog_FEATURE_NAME_DUP);
                    return;
                }
            }
            if (text_urlScheme.isVisible() && text_urlScheme.getText().isEmpty()) {
                MessageDialog.openInformation(getShell(), Messages.AddFeatureDialog_INFORMATION,
                        lblParamkey.getText().trim() + Messages.AddFeatureDialog_MESSAGE_NULL);
                return;
            }
            if (text_apiKey.isVisible() && text_apiKey.getText().isEmpty()) {
                MessageDialog.openInformation(getShell(), Messages.AddFeatureDialog_INFORMATION,
                        lblParamvalue.getText().trim() + Messages.AddFeatureDialog_MESSAGE_NULL);
                return;
            }
            feature = new Feature();
            feature.setName(selectFeature.getName());
            if (text_urlScheme.isVisible()) {
                Param p = new Param();
                p.setName("urlScheme");
                if (feature.getName().equals("baiduMap")) {
                    p.setName("android_api_key");
                }

                p.setValue(text_urlScheme.getText());
                feature.getParams().add(p);
            }
            if (text_apiKey.isVisible()) {
                Param p = new Param();
                p.setName("apiKey");
                if (feature.getName().equals("baiduMap")) {
                    p.setName("ios_api_key");
                }
                p.setValue(text_apiKey.getText());
                feature.getParams().add(p);
            }

            config.addFeature(feature);
            TreeNode node = new TreeNode(feature);
            treeViewer.setInput(config.createTreeNode());
            treeViewer.collapseAll();
            StructuredSelection selection = new StructuredSelection(node);
            treeViewer.setSelection(selection, true);
            treeViewer.refresh();
            editor.setDirty(true);
            editor.change();
        }
        super.buttonPressed(buttonId);
    }

    /**
     * Return the initial size of the dialog.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(563, 453);
    }

    private List<Feature> getFeatureByType(String type) {
        List<Feature> features = new ArrayList<Feature>();
        for (Feature feature : getAllFeature()) {
            if (type.equals(feature.getType())) {
                features.add(feature);
            }
        }
        return features;
    }

    private List<Feature> getAllFeature() {
        if (features == null) {
            features = Feature.loadXml(AuthenticActivator.getFeatureFile());
        }
        return features;
    }
}