org.eclipse.osee.ats.navigate.AtsRemoteEventTestItem.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.osee.ats.navigate.AtsRemoteEventTestItem.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2007 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.ats.navigate;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osee.ats.AtsOpenOption;
import org.eclipse.osee.ats.actions.wizard.NewActionJob;
import org.eclipse.osee.ats.api.ai.IAtsActionableItem;
import org.eclipse.osee.ats.api.data.AtsArtifactTypes;
import org.eclipse.osee.ats.api.data.AtsAttributeTypes;
import org.eclipse.osee.ats.api.team.ChangeType;
import org.eclipse.osee.ats.api.version.IAtsVersion;
import org.eclipse.osee.ats.api.workflow.transition.IAtsTransitionManager;
import org.eclipse.osee.ats.api.workflow.transition.TransitionOption;
import org.eclipse.osee.ats.api.workflow.transition.TransitionResults;
import org.eclipse.osee.ats.core.client.action.ActionManager;
import org.eclipse.osee.ats.core.client.team.TeamWorkFlowArtifact;
import org.eclipse.osee.ats.core.client.util.AtsChangeSet;
import org.eclipse.osee.ats.core.client.workflow.ChangeTypeUtil;
import org.eclipse.osee.ats.core.util.AtsUtilCore;
import org.eclipse.osee.ats.core.workflow.state.TeamState;
import org.eclipse.osee.ats.core.workflow.transition.TransitionFactory;
import org.eclipse.osee.ats.core.workflow.transition.TransitionHelper;
import org.eclipse.osee.ats.internal.Activator;
import org.eclipse.osee.ats.internal.AtsClientService;
import org.eclipse.osee.ats.util.AtsUtil;
import org.eclipse.osee.ats.world.WorldXNavigateItemAction;
import org.eclipse.osee.framework.core.data.IArtifactToken;
import org.eclipse.osee.framework.core.data.TokenFactory;
import org.eclipse.osee.framework.core.util.XResultData;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.type.OseeStateException;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption;
import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
import org.eclipse.osee.framework.ui.skynet.results.XResultDataUI;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
import org.eclipse.osee.framework.ui.swt.Displays;

/**
 * @author Donald G. Dunne
 */
public class AtsRemoteEventTestItem extends WorldXNavigateItemAction {

    XResultData resultData;
    IArtifactToken Version_2_5_6 = TokenFactory.createArtifactToken("A8Yqcqy9Ewu1LTNllrAA", "2.5.6",
            AtsArtifactTypes.Version);
    IArtifactToken Version_2_5_7 = TokenFactory.createArtifactToken("A8YqcqzY91Im4M9XsKQA", "2.5.7",
            AtsArtifactTypes.Version);
    IArtifactToken Version_2_5_8 = TokenFactory.createArtifactToken("A8YqcqzzHG5BUQ4PJqwA", "2.5.8",
            AtsArtifactTypes.Version);
    IArtifactToken atsActionableItem = TokenFactory.createArtifactToken("AAABER+4zV8A8O7WAtxxaA",
            "Action Tracking System", AtsArtifactTypes.ActionableItem);

    public AtsRemoteEventTestItem(XNavigateItem parent) {
        super(parent, "ATS Remote Event Test");
    }

    @Override
    public void run(TableLoadOption... tableLoadOptions) throws OseeCoreException {
        if (AtsUtil.isProductionDb()) {
            AWorkbench.popup("ERROR", "This should not to be run on production DB");
            return;
        }
        MessageDialog dialog = new MessageDialog(Displays.getActiveShell(), getName(), null,
                getName() + "\n\nSelect Source or Destination Client", MessageDialog.QUESTION, new String[] {
                        "Source Client", "Destination Client - Start", "Destination Client - End", "Cancel" },
                2);
        int result = dialog.open();
        resultData = new XResultData();
        if (result == 0) {
            runClientTest();
        } else if (result == 1) {
            EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action");
            if (diag.open() == 0) {
                runDestinationTestStart(diag.getEntry());
            }
        } else if (result == 2) {
            EntryDialog diag = new EntryDialog(getName(), "Enter tt number of Source Client created Action");
            if (diag.open() == 0) {
                runDestinationTestEnd(diag.getEntry());
            }
        }
    }

    private static Set<IAtsActionableItem> getActionableItemsByToken(Collection<IArtifactToken> aiArtifactTokens)
            throws OseeCoreException {
        Set<IAtsActionableItem> aias = new HashSet<IAtsActionableItem>();
        for (IArtifactToken token : aiArtifactTokens) {
            Artifact aiArt = ArtifactQuery.getArtifactFromId(token.getGuid(), AtsUtilCore.getAtsBranch());

            if (aiArt != null) {
                IAtsActionableItem item = AtsClientService.get().getConfigObject(aiArt);
                aias.add(item);
            }
        }
        return aias;
    }

    private void runClientTest() throws OseeCoreException {
        String title = getName() + " - Destination Client Test";
        resultData.log("Running " + title);
        NewActionJob job = null;
        job = new NewActionJob("tt", "description", ChangeType.Improvement, "1", null, false,
                getActionableItemsByToken(Arrays.asList(atsActionableItem)), null, null);
        job.setUser(true);
        job.setPriority(Job.LONG);
        job.schedule();
        try {
            job.join();
        } catch (InterruptedException ex) {
            OseeLog.log(Activator.class, Level.SEVERE, ex);
        }

        Artifact actionArt = job.getActionArt();
        resultData.log("Created Action " + actionArt);
        TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);

        // Make current user assignee for convenience to developer
        AtsChangeSet changes = new AtsChangeSet(getClass().getSimpleName() + " - set assignee");
        teamArt.getStateMgr().addAssignee(AtsClientService.get().getUserService().getCurrentUser());
        changes.add(teamArt);
        changes.execute();

        validateActionAtStart(actionArt);

        // Wait for destination client to start
        if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(),
                "Launch \"Destination Client - Start\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "")
                        + "\" and press Ok")) {
            return;
        }

        int sleepTime = 250;
        makeChanges1(teamArt);
        sleep(sleepTime);
        makeChanges2(teamArt);
        sleep(sleepTime);
        makeChanges3(teamArt);
        sleep(sleepTime);
        makeChanges4(teamArt);
        sleep(sleepTime);
        makeChanges5(teamArt);
        sleep(sleepTime);
        makeChanges6(teamArt);
        sleep(sleepTime);
        makeChanges7(teamArt);
        sleep(sleepTime);

        validateActionAtEnd(actionArt);

        // Wait for destination client to end
        if (!MessageDialog.openConfirm(Displays.getActiveShell(), getName(),
                "Launch \"Destination Client - End\" test, enter \"" + actionArt.getName().replaceFirst("tt ", "")
                        + "\" and press Ok")) {
            return;
        }

        XResultDataUI.report(resultData, title);
    }

    public static void sleep(long milliseconds) {
        try {
            System.out.println("Sleeping " + milliseconds);
            Thread.sleep(milliseconds);
            System.out.println("Awake");
        } catch (Exception ex) {
            OseeLog.log(Activator.class, Level.SEVERE, ex);
        }
    }

    private void makeChanges7(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        AtsChangeSet changes = new AtsChangeSet("Remote Event Test");
        TransitionHelper helper = new TransitionHelper("Remote Event Test", Arrays.asList(teamArt),
                TeamState.Analyze.getName(),
                Collections.singleton(AtsClientService.get().getUserService().getCurrentUser()), null, changes,
                AtsClientService.get().getServices(), TransitionOption.None);
        IAtsTransitionManager transitionMgr = TransitionFactory.getTransitionManager(helper);
        TransitionResults results = transitionMgr.handleAllAndPersist();
        if (!results.isEmpty()) {
            throw new OseeStateException(results.toString());
        }
    }

    private void makeChanges6(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and transition
        AtsClientService.get().getVersionService().setTargetedVersionAndStore(teamArt, getVersion257());
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "false");
        teamArt.persist("Remote Event Test");
    }

    private void makeChanges5(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and persist
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "true");
        teamArt.persist(getClass().getSimpleName());
    }

    private void makeChanges4(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and persist
        teamArt.deleteAttributes(AtsAttributeTypes.ValidationRequired);
        teamArt.deleteAttributes(AtsAttributeTypes.Resolution);
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 4");
        ChangeTypeUtil.setChangeType(teamArt, ChangeType.Support);
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, "3");
        AtsClientService.get().getVersionService().setTargetedVersionAndStore(teamArt, getVersion258());
        teamArt.persist("Remote Event Test");
    }

    private void makeChanges3(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and persist
        AtsClientService.get().getVersionService().setTargetedVersionAndStore(teamArt, getVersion257());
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "false");
        teamArt.persist(getClass().getSimpleName());
    }

    private void makeChanges2(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and persist
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 3");
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.ProposedResolution, "this is resolution");
        teamArt.persist(getClass().getSimpleName());
    }

    private void makeChanges1(TeamWorkFlowArtifact teamArt) throws OseeCoreException {
        // Make changes and persist
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.Description, "description 2");
        ChangeTypeUtil.setChangeType(teamArt, ChangeType.Problem);
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.PriorityType, "2");
        teamArt.setSoleAttributeFromString(AtsAttributeTypes.ValidationRequired, "true");
        AtsClientService.get().getVersionService().setTargetedVersionAndStore(teamArt, getVersion256());
        teamArt.persist("Remote Event Test");
    }

    private IAtsVersion getVersion256() throws OseeCoreException {
        return AtsClientService.get().getVersionService().getById(Version_2_5_6);
    }

    private IAtsVersion getVersion257() throws OseeCoreException {
        return AtsClientService.get().getVersionService().getById(Version_2_5_7);
    }

    private IAtsVersion getVersion258() throws OseeCoreException {
        return AtsClientService.get().getVersionService().getById(Version_2_5_8);
    }

    private void validateActionAtStart(Artifact actionArt) throws OseeCoreException {
        resultData.log("\nValidating Start...");
        // Ensure event service is connected
        if (!OseeEventManager.isEventManagerConnected()) {
            resultData.logError("Remote Event Service is not connected");
            return;
        }
        resultData.log("Remote Event Service connected");

        // Validate values
        TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);
        testEquals("Description", "description",
                teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
        testEquals("Change Type", ChangeType.Improvement, ChangeTypeUtil.getChangeType(teamArt));
        testEquals("Priority", "1", teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
    }

    private void validateActionAtEnd(Artifact actionArt) throws OseeCoreException {
        resultData.log("\nValidating End...");
        // Ensure event service is connected
        if (!OseeEventManager.isEventManagerConnected()) {
            resultData.logError("Remote Event Service is not connected");
            return;
        }
        resultData.log("Remote Event Service connected");

        // Validate values
        TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);
        testEquals("Description", "description 4",
                teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
        testEquals("Change Type", ChangeType.Support, ChangeTypeUtil.getChangeType(teamArt));
        testEquals("Priority", "3", teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
        testEquals("Validation Required", "false",
                String.valueOf(teamArt.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, null)));

        IAtsVersion verArt = AtsClientService.get().getVersionService().getTargetedVersion(teamArt);
        String expectedTargetedVersion;
        if (verArt != null) {
            expectedTargetedVersion = verArt.toString();
        } else {
            expectedTargetedVersion = "not set";
        }
        testEquals("Targeted Version", expectedTargetedVersion, "2.5.7");
        testEquals("State", TeamState.Analyze.getName(), teamArt.getStateMgr().getCurrentStateName());
    }

    private void testEquals(String name, Object expected, Object actual) {
        if (!expected.equals(actual)) {
            resultData.logError(String.format("Error: [%s] - expected [%s] actual[%s]", name, expected, actual));
        } else {
            resultData.log(String.format("Valid: [%s] - expected [%s] actual[%s]", name, expected, actual));
        }
    }

    private void runDestinationTestStart(String ttNum) throws OseeCoreException {
        String title = getName() + " - Destination Client Test - Start";
        String actionTitle = "tt " + ttNum;
        resultData.log("Running " + title);

        Artifact actionArt = ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle,
                AtsUtilCore.getAtsBranch());

        if (actionArt == null) {
            resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle));
        } else {
            resultData.log("Loaded Action " + actionArt);
            AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect);
        }
        validateActionAtStart(actionArt);
        XResultDataUI.report(resultData, title);
    }

    private void runDestinationTestEnd(String ttNum) throws OseeCoreException {
        String title = getName() + " - Destination Client Test - End";
        String actionTitle = "tt " + ttNum;
        resultData.log("Running " + title);

        Artifact actionArt = ArtifactQuery.getArtifactFromTypeAndName(AtsArtifactTypes.Action, actionTitle,
                AtsUtilCore.getAtsBranch());

        if (actionArt == null) {
            resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle));
        } else {
            resultData.log("Loaded Action " + actionArt);
            AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect);
        }
        validateActionAtEnd(actionArt);
        XResultDataUI.report(resultData, title);
    }

}