org.jboss.tools.smooks.configuration.editors.SmooksConfigurationReaderPage.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.smooks.configuration.editors.SmooksConfigurationReaderPage.java

Source

/*******************************************************************************
 * Copyright (c) 2008 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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
 *
 * Contributors:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.smooks.configuration.editors;

import java.util.Iterator;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
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.TableColumn;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.jboss.tools.smooks.configuration.editors.input.InputParameter;
import org.jboss.tools.smooks.configuration.editors.input.InputType;
import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
import org.jboss.tools.smooks.model.smooks.AbstractReader;
import org.jboss.tools.smooks.model.smooks.SmooksResourceListType;

/**
 * @author Dart
 * 
 */
public class SmooksConfigurationReaderPage extends SmooksConfigurationFormPage {

    private CheckboxTableViewer inputDataViewer;

    boolean lockCheck = false;

    public SmooksConfigurationReaderPage(FormEditor editor, String id, String title) {
        super(editor, id, title);
    }

    public SmooksConfigurationReaderPage(String id, String title) {
        super(id, title);
    }

    @Override
    protected ViewerFilter[] createViewerFilters() {
        return new ViewerFilter[] { new OnlyReaderViewerFilter() };
    }

    @Override
    protected SmooksMasterDetailBlock createSmooksMasterDetailsBlock() {
        SmooksMasterDetailBlock detailBlock = new SmooksMasterDetailBlock(getEditor(),
                (AdapterFactoryEditingDomain) ((SmooksMultiFormEditor) getEditor()).getEditingDomain()) {
            @Override
            protected Object getEmptyDefaultSelection(EObject smooksTreeViewerInput) {
                List<EObject> contents = smooksTreeViewerInput.eContents();
                for (Iterator<?> iterator = contents.iterator(); iterator.hasNext();) {
                    EObject eObject = (EObject) iterator.next();
                    if (smooksTreeViewerInput instanceof SmooksResourceListType
                            && eObject instanceof AbstractReader) {
                        return eObject;
                    }
                }
                return super.getEmptyDefaultSelection(smooksTreeViewerInput);
            }
        };
        return detailBlock;
    }

    @Override
    protected String getNewSmooksElementDescription() {
        return Messages.SmooksConfigurationReaderPage_NewReaderDes;
    }

    @Override
    protected String getNewSmooksElementTitle() {
        return Messages.SmooksConfigurationReaderPage_NewReaderTitle;
    }

    @Override
    protected String getMainSectionDescription() {
        return Messages.SmooksConfigurationReaderPage_EditReaderDes;
    }

    @Override
    protected String getMainSectionTitle() {
        return Messages.SmooksConfigurationReaderPage_ReaderSectionTitle;
    }

    @Override
    protected void setPageTitle(ScrolledForm form) {
        form.setText(Messages.SmooksConfigurationReaderPage_PageTitle);
    }

    protected void createFormContent(IManagedForm managedForm) {
        super.createFormContent(managedForm);
        // create extention UI for add/remove extention data
        createExtentionArea(managedForm);
    }

    protected void createExtentionArea(IManagedForm managedForm) {
        FormToolkit toolkit = managedForm.getToolkit();
        final ScrolledForm form = managedForm.getForm();
        Section section = toolkit.createSection(form.getBody(),
                Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        section.setLayoutData(gd);
        section.setText(Messages.SmooksConfigurationReaderPage_InputSectionTitle);
        FillLayout flayout = new FillLayout();
        section.setLayout(flayout);

        Composite mainComposite = toolkit.createComposite(section, SWT.NONE);
        GridLayout gl = new GridLayout();
        gl.numColumns = 2;
        mainComposite.setLayout(gl);
        section.setClient(mainComposite);

        Composite tableComposite = toolkit.createComposite(mainComposite, SWT.NONE);
        FillLayout fillLayout = new FillLayout();
        fillLayout.marginHeight = 1;
        fillLayout.marginWidth = 1;
        gd = new GridData(GridData.FILL_BOTH);
        tableComposite.setLayoutData(gd);
        tableComposite.setBackground(GraphicsConstants.BORDER_CORLOR);
        tableComposite.setLayout(fillLayout);

        inputDataViewer = CheckboxTableViewer.newCheckList(tableComposite, SWT.MULTI | SWT.FULL_SELECTION);
        inputDataViewer.setCheckStateProvider(new ICheckStateProvider() {

            public boolean isGrayed(Object element) {
                return false;
            }

            public boolean isChecked(Object element) {
                if (element instanceof InputType) {
                    return ((InputType) element).isActived();
                    // List<ParamType> params = ((InputType)
                    // element).getParam();
                    // for (Iterator<?> iterator = params.iterator();
                    // iterator.hasNext();) {
                    // ParamType paramType = (ParamType) iterator.next();
                    // if
                    // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName()))
                    // {
                    // String value = paramType.getValue();
                    // if (value == null)
                    // return false;
                    // value = value.trim();
                    // return "true".equalsIgnoreCase(value);
                    // }
                    // }
                }
                return false;
            }
        });
        inputDataViewer.addCheckStateListener(new ICheckStateListener() {

            public void checkStateChanged(CheckStateChangedEvent event) {
                if (lockCheck)
                    return;
                boolean checked = event.getChecked();
                InputType inputType = (InputType) event.getElement();
                List<InputParameter> params = inputType.getParameters();

                if (checked) {
                    boolean newOne = true;
                    inputType.setActived(checked);
                    // for (Iterator<?> iterator = params.iterator();
                    // iterator.hasNext();) {
                    // InputParameter paramType = (InputParameter)
                    // iterator.next();
                    // if
                    // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName()))
                    // {
                    // paramType.setValue(String.valueOf(checked));
                    // newOne = false;
                    // break;
                    // }
                    // }
                    // if (newOne) {
                    // ParamType p = GraphFactory.eINSTANCE.createParamType();
                    // p.setName(SmooksModelUtils.PARAM_NAME_ACTIVED);
                    // p.setValue(String.valueOf(checked));
                    // inputType.getParam().add(p);
                    // }

                    Object[] checkedObjects = inputDataViewer.getCheckedElements();
                    for (int i = 0; i < checkedObjects.length; i++) {
                        InputType type = (InputType) checkedObjects[i];
                        type.setActived(!checked);
                        // if (type == event.getElement())
                        // continue;
                        // List<ParamType> params1 = type.getParam();
                        // for (Iterator<?> iterator = params1.iterator();
                        // iterator.hasNext();) {
                        // ParamType paramType = (ParamType) iterator.next();
                        // if
                        // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName()))
                        // {
                        // paramType.setValue(String.valueOf(!checked));
                        // break;
                        // }
                        // }
                        lockCheck = true;
                        inputDataViewer.setChecked(type, false);
                        lockCheck = false;
                    }

                } else {
                    inputType.setActived(checked);
                    // for (Iterator<?> iterator = params.iterator();
                    // iterator.hasNext();) {
                    // ParamType paramType = (ParamType) iterator.next();
                    // if
                    // (SmooksModelUtils.PARAM_NAME_ACTIVED.equals(paramType.getName()))
                    // {
                    // paramType.setValue(String.valueOf(checked));
                    // break;
                    // }
                    // }
                }

                // EObject ext = inputType;
                // while (ext != null && !(ext instanceof
                // SmooksGraphicsExtType)) {
                // ext = ext.eContainer();
                // }
                //
                // if (ext != null && ext instanceof SmooksGraphicsExtType) {
                // List<ISmooksGraphChangeListener> listeners =
                // ((SmooksGraphicsExtType) ext).getChangeListeners();
                // for (Iterator<?> iterator = listeners.iterator();
                // iterator.hasNext();) {
                // ISmooksGraphChangeListener smooksGraphChangeListener =
                // (ISmooksGraphChangeListener) iterator
                // .next();
                // smooksGraphChangeListener.inputTypeChanged((SmooksGraphicsExtType)
                // ext);
                // }
                // }

            }
        });
        TableColumn header = new TableColumn(inputDataViewer.getTable(), SWT.NONE);
        header.setText(Messages.SmooksConfigurationReaderPage_InputTableTypeColumnText);
        header.setWidth(100);
        TableColumn pathColumn = new TableColumn(inputDataViewer.getTable(), SWT.NONE);
        pathColumn.setText(Messages.SmooksConfigurationReaderPage_InputTablePathColumnLabel);
        pathColumn.setWidth(300);

        TableColumn extColumn = new TableColumn(inputDataViewer.getTable(), SWT.NONE);
        extColumn.setText(Messages.SmooksConfigurationReaderPage_InputTableExtensionLabel);
        extColumn.setWidth(400);

        inputDataViewer.setContentProvider(new ExtentionInputContentProvider());
        inputDataViewer.setLabelProvider(new ExtentionInputLabelProvider());
        inputDataViewer.getTable().setHeaderVisible(true);
        inputDataViewer.getTable().setLinesVisible(true);

        ISmooksModelProvider smooksModelProvider = (ISmooksModelProvider) getAdapter(ISmooksModelProvider.class);
        if (smooksModelProvider != null) {
            inputDataViewer
                    .setInput(SmooksUIUtils.getSmooks11ResourceListType(smooksModelProvider.getSmooksModel()));
        }
        Composite buttonComposite = toolkit.createComposite(mainComposite, SWT.NONE);
        gd = new GridData(GridData.FILL_VERTICAL);
        buttonComposite.setLayoutData(gd);
        GridLayout l = new GridLayout();
        buttonComposite.setLayout(l);

        Button addButton = toolkit.createButton(buttonComposite,
                Messages.SmooksConfigurationReaderPage_AddInputButtonLabel, SWT.FLAT);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        addButton.setLayoutData(gd);
        addButton.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                showInputDataWizard();
            }

        });

        Button removeButton = toolkit.createButton(buttonComposite,
                Messages.SmooksConfigurationReaderPage_DeleteInputButtonLabel, SWT.FLAT);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        removeButton.setLayoutData(gd);
        removeButton.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection) inputDataViewer.getSelection();
                if (selection != null) {
                    ISmooksModelProvider modelProvider = (ISmooksModelProvider) getAdapter(
                            ISmooksModelProvider.class);
                    if (modelProvider == null) {
                        return;
                    }
                    Object[] objs = selection.toArray();
                    for (int i = 0; i < objs.length; i++) {
                        Object obj = objs[i];
                        if (obj instanceof InputType) {
                            InputType input = (InputType) obj;
                            SmooksUIUtils.removeInputType(input, modelProvider);
                        }
                    }

                    // List<ISmooksGraphChangeListener> listeners =
                    // extType.getChangeListeners();
                    // for (Iterator<?> iterator = listeners.iterator();
                    // iterator.hasNext();) {
                    // ISmooksGraphChangeListener smooksGraphChangeListener =
                    // (ISmooksGraphChangeListener) iterator
                    // .next();
                    // smooksGraphChangeListener.inputTypeChanged(extType);
                    // }
                }
            }
        });
    }

    // public void inputTypeChanged(SmooksGraphicsExtType extType) {
    // if (inputDataViewer != null)
    // inputDataViewer.refresh();
    // }

}