/* * Copyright 2016 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.thoughtworks.go.domain; import java.util.List; public enum StageState { Building(StageResult.Unknown), Failing(StageResult.Failed), Passed(StageResult.Passed), Failed(StageResult.Failed), Unknown(StageResult.Unknown), Cancelled(StageResult.Cancelled); private StageResult stageResult; StageState(StageResult stageResult) { this.stageResult = stageResult; } public boolean completed() { return this == Passed || this == Failed || this == Cancelled; } public boolean completedNormally() { return this == Passed || this == Failed; } public boolean isActive() { return !completed() && this != Unknown; } public static StageState findByBuilds(List<? extends BuildStateAware> builds) { boolean anyBuilding = false; boolean anyFailed = false; boolean anyCancelled = false; boolean anyUnknown = false; if (builds.isEmpty()) { return Unknown; } for (BuildStateAware build : builds) { if (build.getState().isBuilding() || build.getState().isAssignedOrScheduled()) { anyBuilding = true; } if (build.getResult() == JobResult.Cancelled) { anyCancelled = true; } if (build.getResult() == JobResult.Failed) { anyFailed = true; } if (build.getResult() == JobResult.Unknown) { anyUnknown = true; } } if (anyBuilding && anyFailed) { return Failing; } if (anyBuilding) { return Building; } if (anyCancelled) { return Cancelled; } if (anyFailed) { return Failed; } if (anyUnknown) { return Unknown; } return Passed; } public StageResult stageResult() { return stageResult; } public String cctrayStatus() { switch (this) { case Failed: case Failing: case Cancelled: return "Failure"; default: return "Success"; } } public String cctrayActivity() { switch (this) { case Building: case Failing: return "Building"; default: return "Sleeping"; } } public String status() { return completed()? "Completed" : toString(); } }