Package de.innovationgate.eclipse.editors.design.pages

Source Code of de.innovationgate.eclipse.editors.design.pages.DirectAccessibleModulesPage

/*******************************************************************************
* Copyright (c) 2009, 2010 Innovation Gate GmbH.
* 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
*
* Contributors:
*     Innovation Gate GmbH - initial API and implementation
******************************************************************************/

package de.innovationgate.eclipse.editors.design.pages;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.java.dev.genesis.ui.swt.SWTBinder;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.ColumnLayout;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;

import de.innovationgate.eclipse.editors.Plugin;
import de.innovationgate.eclipse.editors.ResourceIDs;
import de.innovationgate.eclipse.editors.models.DirectAccessibleTMLModulModel;
import de.innovationgate.eclipse.utils.WorkbenchUtils;
import de.innovationgate.eclipse.utils.ui.EditableTableControl;
import de.innovationgate.eclipse.utils.ui.GenesisBoundFormPage;
import de.innovationgate.eclipse.utils.ui.model.WGADesignConfigurationModelWrapper;
import de.innovationgate.eclipse.utils.wga.WGADesignStructureHelper;
import de.innovationgate.wga.model.Model;

public class DirectAccessibleModulesPage extends GenesisBoundFormPage implements IResourceChangeListener {

    public static final String ID = "de.innovationgate.eclipse.wgadesigner.pages.DirectAccessibleModulesDirectPage";

    public static final String PAGE_TITLE = "Direct accessible TML-Modules";

    private FormEditor _editor;

    private WGADesignConfigurationModelWrapper _model;

    private Table _tblModules;

    private TableColumn _roleNameColumn;

    private TableColumn _assignDefaultManagerColumn;

    private TableViewer _tblViewerModules;

    private EditableTableControl _tableControl;

    private DirectAccessibleTMLModulModel _directAccessibleFilesModel;

    public DirectAccessibleModulesPage(FormEditor editor) {
        super(editor, ID, PAGE_TITLE);
        _editor = editor;
        ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
    }

    @Override
    public void dispose() {
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
        super.dispose();
    }

    public Model getModel() {
        return _model;
    }

    public void setModel(Model model) {
        if (!(model instanceof WGADesignConfigurationModelWrapper)) {
            throw new IllegalArgumentException("Unsupported model type '" + model.getClass().getName() + "'.");
        }
        _model = (WGADesignConfigurationModelWrapper) model;
    }

    protected void createFormContent(IManagedForm managedForm) {
        ScrolledForm form = managedForm.getForm();
        FormToolkit toolkit = managedForm.getToolkit();
        toolkit.decorateFormHeading(form.getForm());
        form.setText(PAGE_TITLE);

        ColumnLayout layout = new ColumnLayout();
        layout.maxNumColumns = 2;
        form.getBody().setLayout(layout);

        Section section = toolkit.createSection(form.getBody(), Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
        section.setText("Modules");

        Composite sectionClient = toolkit.createComposite(section);
        section.setClient(sectionClient);
        GridLayout sectionLayout = new GridLayout();
        GridData fillHSpan = new GridData(GridData.FILL_HORIZONTAL);
        fillHSpan.horizontalSpan = 4;

        GridData prefSize = new GridData();
        prefSize.widthHint = 500;

        sectionLayout.numColumns = 1;
        sectionClient.setLayout(sectionLayout);

        ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
        ToolBar toolbar = toolBarManager.createControl(section);

        Action action1 = new Action("refresh", Plugin.getDefault().getImageRegistry().getDescriptor(Plugin.IMAGE_REFRESH)) {
            public void run() {
                try {
                    refresh();
                }
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        };
        toolBarManager.add(action1);

        toolBarManager.update(true);
        section.setTextClient(toolbar);

        _directAccessibleFilesModel = new DirectAccessibleTMLModulModel(getDirectAccessibleFiles());

        _tableControl = new EditableTableControl<IFile>(sectionClient, SWT.NONE) {

            @Override
            protected void createButtonArea(Composite area) {
            }

        };
        _tableControl.init(new String[] { "TML File", "Path" }, _directAccessibleFilesModel);
        GridData data = new GridData(GridData.FILL_BOTH);
        data.heightHint = 300;

        _tableControl.setLayoutData(data);

        _tableControl.getTable().addMouseListener(new MouseListener() {

            public void mouseDoubleClick(MouseEvent e) {
                handleOpenInEditor();
            }

            public void mouseDown(MouseEvent e) {              
            }

            public void mouseUp(MouseEvent e) {                             
            }
        });

        bind(form, SWTBinder.BINDING_STRATEGY_AS_YOU_TYPE);

    }

    private void handleOpenInEditor() {
        if (_tableControl.getTable().getSelectionCount() > 0) {
            IFile selectedFile = _directAccessibleFilesModel.getBeans().get(_tableControl.getTable().getSelectionIndex());
            try {
                WorkbenchUtils.openEditor(Plugin.getDefault().getWorkbench(), selectedFile, ResourceIDs.EDITOR_TML);
            }
            catch (PartInitException e) {
                WorkbenchUtils.showErrorDialog(Plugin.getDefault(), getSite().getShell(), "Unable to open TML Editor", e);
            }

        }

    }

    private List<IFile> getDirectAccessibleFiles() {
        final List<IFile> directAccessibleFiles = new ArrayList<IFile>();
        try {
            _model.getDesignContainer().accept(new IResourceVisitor() {

                public boolean visit(IResource resource) throws CoreException {

                    if (resource instanceof IFile) {
                        IFile file = (IFile) resource;
                        if (WGADesignStructureHelper.isDirectAccess(file)) {
                            directAccessibleFiles.add(file);
                        }
                    }

                    return true;
                }
            });

        }
        catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return directAccessibleFiles;
    }

    @Override
    public void refresh() throws IOException {
        Display.getDefault().asyncExec(new Runnable() {
            public void run() {
                if(_directAccessibleFilesModel != null){
                    _directAccessibleFilesModel.refresh(getDirectAccessibleFiles());
                }
            }
        });

    }

    public void resourceChanged(IResourceChangeEvent event) {

        final IPath dsgPath = _model.getDesignContainer().getFullPath();
        try {
            myDeltaVisitor visitor = new myDeltaVisitor();
            event.getDelta().accept(visitor);
            if (visitor.isRefreshNeeded()) {
                refresh();
            }
        }
        catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private class myDeltaVisitor implements IResourceDeltaVisitor {
        final IPath dsgPath = _model.getDesignContainer().getFullPath();

        private boolean _isRefreshNeeded = false;

        public boolean visit(IResourceDelta delta) throws CoreException {
            if (delta.getFullPath().equals(dsgPath)) {
                _isRefreshNeeded = true;
                return false;
            }
            else {
                return true;
            }
        }

        public boolean isRefreshNeeded() {
            return _isRefreshNeeded;
        }
    }

}
TOP

Related Classes of de.innovationgate.eclipse.editors.design.pages.DirectAccessibleModulesPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.