org.eclipse.epf.authoring.ui.forms.ContentPackageDescriptionPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epf.authoring.ui.forms.ContentPackageDescriptionPage.java

Source

//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.forms;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.authoring.ui.AuthoringUIText;
import org.eclipse.epf.library.edit.util.MethodElementPropUtil;
import org.eclipse.epf.library.edit.util.MethodElementUtil;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.ui.LibraryUIText;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.ContentPackage;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.Role;
import org.eclipse.epf.uma.Task;
import org.eclipse.epf.uma.WorkProduct;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
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.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;

/**
 * The description page for the Content Package editor.
 * 
 * @author Shilpa Toraskar
 * @author Kelvin Low
 * @since 1.0
 */
public class ContentPackageDescriptionPage extends DescriptionFormPage implements IRefreshable {

    private static final String FORM_PREFIX = LibraryUIText.TEXT_CONTENT_PACKAGE + ": "; //$NON-NLS-1$

    private CheckboxTableViewer ctrl_dependency;

    private ContentPackage contentPackage;
    protected Button supportingCheckbox;

    /**
     * Creates a new instance.
     */
    public ContentPackageDescriptionPage(FormEditor editor) {
        super(editor, AuthoringUIText.DESCRIPTION_PAGE_TITLE, AuthoringUIText.DESCRIPTION_PAGE_TITLE);
    }

    /**
     * @see org.eclipse.ui.forms.editor.FormPage#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
     */
    public void init(IEditorSite site, IEditorInput input) {
        super.init(site, input);
        contentPackage = (ContentPackage) methodElement;
        detailSectionOn = false;
        fullDescOn = false;
        keyConsiderationOn = false;
        variabilitySectionOn = false;
        versionSectionOn = false;
    }

    @Override
    protected void createEditorContent(FormToolkit toolkit) {
        super.createEditorContent(toolkit);
        createDependencySection(toolkit);
        // Set focus on the Name text control.
        Display display = form.getBody().getDisplay();
        if (!(display == null || display.isDisposed())) {
            display.asyncExec(new Runnable() {
                public void run() {
                    if (ctrl_name.isDisposed())
                        return;
                    if (isAutoGenName()) {
                        ctrl_presentation_name.setFocus();
                        ctrl_presentation_name.setSelection(0, ctrl_presentation_name.getText().length());
                    } else {
                        ctrl_name.setFocus();
                        ctrl_name.setSelection(0, ctrl_name.getText().length());
                    }
                }
            });
        }
    }

    private void createDependencySection(FormToolkit toolkit) {
        Section dependencySection = createSection(toolkit, sectionComposite,
                AuthoringUIText.DEPENDENCIES_SECTION_NAME, AuthoringUIText.DEPENDENCIES_SECTION_DESC);
        Composite dependencyComposite = createComposite(toolkit, dependencySection);

        Table ctrl_table = toolkit.createTable(dependencyComposite,
                SWT.V_SCROLL | SWT.CHECK | SWT.READ_ONLY | SWT.COLOR_BLUE);
        {
            GridData gridData = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL);
            gridData.heightHint = 100;
            ctrl_table.setLayoutData(gridData);
        }

        ctrl_dependency = new CheckboxTableViewer(ctrl_table);

        ILabelProvider labelProvider = new LabelProvider() {
            public String getText(Object element) {
                if (element instanceof ContentPackage) {
                    return TngUtil.getLabelWithPath((ContentPackage) element);
                } else {
                    return element.toString();
                }
            }
        };
        ctrl_dependency.setLabelProvider(labelProvider);
        ctrl_dependency.setContentProvider(new IStructuredContentProvider() {
            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            public Object[] getElements(Object inputElement) {
                if (inputElement instanceof ContentPackage) {
                    return getDependenciesPackages(contentPackage).toArray();
                } else {
                    return Collections.EMPTY_LIST.toArray();
                }
            }
        });
        ctrl_dependency.setSorter(new ViewerSorter());
        ctrl_dependency.setInput(contentPackage);

        ctrl_dependency.setAllChecked(true);
        ctrl_dependency.setAllGrayed(true);

        toolkit.paintBordersFor(dependencyComposite);
    }

    /**
     * Add listeners
     * 
     */
    protected void addListeners() {
        super.addListeners();

        form.addListener(SWT.Activate, new Listener() {
            public void handleEvent(Event e) {
                // refreshViewers();
                ctrl_dependency.refresh();
                ctrl_dependency.setAllChecked(true);
                ctrl_dependency.setAllGrayed(true);
            }
        });

        ctrl_dependency.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                Object obj = event.getSource();
                ((CheckboxTableViewer) obj).setAllChecked(true);
            }
        });

    }

    /**
     * Get dependency packages for the given content package
     * @return
     *       List of dependency packages
     */
    public Collection<ContentPackage> getDependenciesPackages(ContentPackage contentPackage) {

        List elements = new ArrayList();
        for (Iterator iter = contentPackage.getContentElements().iterator(); iter.hasNext();) {
            ContentElement contentElement = (ContentElement) iter.next();
            if (contentElement.getVariabilityBasedOnElement() != null) {
                elements.add((ContentElement) contentElement.getVariabilityBasedOnElement());
            }
            elements.addAll(MethodElementUtil.getSelectedGuidances(contentElement));

            if (contentElement instanceof Role) {
                /*            if (AssociationHelper
                                  .getModifiedWorkProducts((Role) contentElement) != null) {
                               elements.addAll(AssociationHelper
                 .getModifiedWorkProducts((Role) contentElement));
                            }
                            if (AssociationHelper.getPrimaryTasks((Role) contentElement) != null) {
                               elements.addAll(AssociationHelper
                 .getPrimaryTasks((Role) contentElement));
                            }
                            if (AssociationHelper.getSecondaryTasks((Role) contentElement) != null) {
                               elements.addAll(AssociationHelper
                 .getSecondaryTasks((Role) contentElement));
                            }*/
            }
            if (contentElement instanceof Task) {
                if (((Task) contentElement).getPerformedBy() != null) {
                    elements.addAll(((Task) contentElement).getPerformedBy());
                }
                if (((Task) contentElement).getAdditionallyPerformedBy() != null) {
                    elements.addAll(((Task) contentElement).getAdditionallyPerformedBy());
                }
                if (((Task) contentElement).getMandatoryInput() != null) {
                    elements.addAll(((Task) contentElement).getMandatoryInput());
                }
                if (((Task) contentElement).getOptionalInput() != null) {
                    elements.addAll(((Task) contentElement).getOptionalInput());
                }
                if (((Task) contentElement).getOutput() != null) {
                    elements.addAll(((Task) contentElement).getOutput());
                }
            }
            if (contentElement instanceof WorkProduct) {
                /*            if (AssociationHelper
                                  .getModifiedBy((WorkProduct) contentElement) != null) {
                               elements.addAll(AssociationHelper
                 .getModifiedBy((WorkProduct) contentElement));
                            }
                            if (AssociationHelper
                                  .getMandatoryInputToTasks((WorkProduct) contentElement) != null) {
                               elements
                 .addAll(AssociationHelper
                       .getMandatoryInputToTasks((WorkProduct) contentElement));
                            }
                            if (AssociationHelper
                                  .getOutputtingTasks((WorkProduct) contentElement) != null) {
                               elements.addAll(AssociationHelper
                 .getOutputtingTasks((WorkProduct) contentElement));
                            }
                            List list = AssociationHelper.getResponsibleRoles((WorkProduct) contentElement);
                            if (list != null) {
                               elements.addAll(list);
                            }*/
            }

        }

        List<ContentPackage> cpList = new ArrayList<ContentPackage>();
        for (int i = 0; i < elements.size(); i++) {
            Object object = ((ContentElement) elements.get(i)).eContainer();
            if (object instanceof ContentPackage) {
                if (!contentPackage.equals(object)) {
                    if (!cpList.contains((ContentPackage) object)) {
                        cpList.add((ContentPackage) object);
                    }
                }
            }
        }
        return cpList;
    }

    @Override
    protected Object getContentElement() {
        return contentPackage;
    }

    @Override
    public void loadSectionDescription() {
        this.generalSectionDescription = MessageFormat.format(AuthoringUIText.GENERAL_INFO_SECTION_DESC,
                new String[] { LibraryUIText.getUITextLower(contentPackage) });
    }

    @Override
    protected void refresh(boolean editable) {
        super.refresh(editable);
        if (supportingCheckbox != null) {
            supportingCheckbox.setEnabled(editable);
            EObject parent = contentPackage.eContainer();
            if (parent instanceof MethodPlugin && ((MethodPlugin) parent).isSupporting()) {
                supportingCheckbox.setEnabled(false);
            } else if (parent instanceof ContentPackage
                    && MethodElementPropUtil.getMethodElementPropUtil().isSupporting((ContentPackage) parent)) {
                supportingCheckbox.setEnabled(false);
            }
        }
    }

    public void updateSupportingCheckbox() {
        if (supportingCheckbox == null) {
            return;
        }
        MethodElementPropUtil propUtil = MethodElementPropUtil.getMethodElementPropUtil();
        boolean isSupporitng0 = propUtil.ancestorIsSupporting(contentPackage);
        boolean isSuporting = isSupporitng0 || propUtil.isSupporting(contentPackage);
        if (supportingCheckbox.getSelection() != isSuporting) {
            supportingCheckbox.setSelection(isSuporting);
        }
        if (isSupporitng0) {
            supportingCheckbox.setEnabled(false);
        }
    }

    @Override
    protected void createGeneralSectionContent() {
        super.createGeneralSectionContent();

        supportingCheckbox = toolkit.createButton(generalComposite,
                AuthoringUIResources.contentPackageDescriptionPage_supportingPackageLabel, SWT.CHECK);
    }

    @Override
    protected void addGeneralSectionListeners() {
        super.addGeneralSectionListeners();

        supportingCheckbox.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                IStatus status = TngUtil.checkEdit(contentPackage, getSite().getShell());
                if (status.isOK()) {
                    MethodElementPropUtil propUtil = MethodElementPropUtil.getMethodElementPropUtil(actionMgr);
                    propUtil.setSupporting(contentPackage, supportingCheckbox.getSelection());
                    propUtil.updatePackageSupportingBits(contentPackage.getChildPackages(),
                            supportingCheckbox.getSelection());
                } else {
                    AuthoringUIPlugin.getDefault().getMsgDialog().displayError(
                            AuthoringUIResources.editDialog_title, AuthoringUIResources.editDialog_msgCannotEdit,
                            status);
                    // restore old value
                    //
                    supportingCheckbox.setSelection(!supportingCheckbox.getSelection());
                    return;
                }
            }

        });
    }

    @Override
    protected void loadGeneralSectionData() {
        super.loadGeneralSectionData();
        boolean isSuporting = MethodElementPropUtil.getMethodElementPropUtil().isSupporting(contentPackage);
        supportingCheckbox.setSelection(isSuporting);
    }

}