org.eclipse.osee.coverage.action.ConfigureCoverageMethodsAction.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.osee.coverage.action.ConfigureCoverageMethodsAction.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Boeing.
 * 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:
 *     Boeing - initial API and implementation
 *******************************************************************************/
package org.eclipse.osee.coverage.action;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osee.coverage.internal.Activator;
import org.eclipse.osee.coverage.model.CoverageOption;
import org.eclipse.osee.coverage.model.CoverageOptionManager;
import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
import org.eclipse.osee.coverage.store.CoverageOptionManagerStore;
import org.eclipse.osee.coverage.store.CoverageOptionManagerStore.StoreLocation;
import org.eclipse.osee.coverage.store.OseeCoveragePackageStore;
import org.eclipse.osee.coverage.util.CoverageUtil;
import org.eclipse.osee.coverage.util.dialog.CoveragePackageArtifactListDialog;
import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
import org.eclipse.osee.framework.core.util.Result;
import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.skynet.FrameworkImage;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
import org.eclipse.osee.framework.ui.swt.Displays;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.osee.framework.ui.swt.KeyedImage;

/**
 * @author Donald G. Dunne
 */
public class ConfigureCoverageMethodsAction extends Action {

    public static KeyedImage OSEE_IMAGE = FrameworkImage.GEAR;

    public ConfigureCoverageMethodsAction() {
        super("Configure Coverage Methods");
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return ImageManager.getImageDescriptor(OSEE_IMAGE);
    }

    public static Set<Artifact> bulkLoadCoveragePackage(Artifact artifact) throws OseeCoreException {
        return RelationManager.getRelatedArtifacts(Collections.singleton(artifact), 8,
                CoreRelationTypes.Default_Hierarchical__Child);
    }

    @Override
    public void run() {
        try {
            if (!CoverageUtil.getBranchFromUser(false)) {
                return;
            }
            CoveragePackageArtifactListDialog dialog = new CoveragePackageArtifactListDialog(
                    "Open Coverage Package", "Select Coverage Package");
            dialog.setInput(OseeCoveragePackageStore.getCoveragePackageArtifacts(CoverageUtil.getBranch()));
            if (dialog.open() == 0) {
                Artifact coveragePackageArtifact = (Artifact) dialog.getResult()[0];
                bulkLoadCoveragePackage(coveragePackageArtifact);
                OseeCoveragePackageStore packageStore = new OseeCoveragePackageStore(coveragePackageArtifact);
                CoverageOptionManagerStore optionsStore = new CoverageOptionManagerStore(packageStore);
                Result isSaveable = optionsStore.isSaveable();
                if (isSaveable.isFalse()) {
                    AWorkbench.popup(isSaveable);
                    return;
                }
                String coverageOptions = null;
                StoreLocation storeLocation = optionsStore.getStoreLocation();
                if (storeLocation == StoreLocation.None) {
                    MessageDialog localGlobalDialog = new MessageDialog(Displays.getActiveShell(), "Question", null,
                            "No Custom Coverage Methods Configured, Configure Now?", MessageDialog.WARNING,
                            new String[] { "Save local to Coverage Pacakge", "Save globally for Branch", "Cancel" },
                            0);

                    int result = localGlobalDialog.open();
                    if (result == 0) {
                        storeLocation = StoreLocation.Local;
                    } else if (result == 1) {
                        storeLocation = StoreLocation.Global;
                    } else {
                        return;
                    }
                    coverageOptions = CoverageOptionManagerDefault.instance().toXml();
                } else {
                    coverageOptions = optionsStore.getCoverageOptions();
                }

                // Recheck save after option has been chosen
                optionsStore = new CoverageOptionManagerStore(packageStore);
                isSaveable = optionsStore.isSaveable();
                if (isSaveable.isFalse()) {
                    AWorkbench.popup(isSaveable);
                    return;
                }

                boolean successOrCancel = false;
                // Keep allowing user to enter options until valid
                while (!successOrCancel) {
                    EntryDialog entryDiag = new EntryDialog(getText(), "Edit Configure Options");
                    entryDiag.setFillVertically(true);
                    entryDiag.setEntry(coverageOptions);
                    if (entryDiag.open() == 0) {
                        coverageOptions = entryDiag.getEntry();
                        try {
                            CoverageOptionManager manager = new CoverageOptionManager(coverageOptions);
                            if (manager.get().isEmpty()) {
                                throw new OseeArgumentException("No options specified");
                            }
                            if (manager.get(CoverageOptionManager.Not_Covered.getName()) == null) {
                                throw new OseeArgumentException("Can't remove Not_Covered item");
                            }
                            Set<String> names = new HashSet<String>();
                            for (CoverageOption option : manager.get()) {
                                if (names.contains(option.getName())) {
                                    throw new OseeArgumentException("Multiple options with same name [%s]",
                                            option.getName());
                                } else {
                                    names.add(option.getName());
                                }
                            }
                            optionsStore.store(coverageOptions, storeLocation);
                            successOrCancel = true;
                        } catch (Exception ex) {
                            OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP,
                                    "Invalid coverage options\n\n" + ex.getLocalizedMessage(), ex);
                        }
                    } else {
                        successOrCancel = true;
                    }
                }
            }
        } catch (OseeCoreException ex) {
            OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex);
        }
    }
}