/*************************GO-LICENSE-START*********************************
* Copyright 2014 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.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.presentation.pipelinehistory;
import com.thoughtworks.go.domain.StageIdentifier;
import com.thoughtworks.go.domain.StageResult;
import com.thoughtworks.go.domain.StageState;
import com.thoughtworks.go.server.presentation.models.StageConfigurationModel;
import java.util.Date;
import static com.thoughtworks.go.util.GoConstants.APPROVAL_SUCCESS;
public class StageInstanceModel implements StageConfigurationModel {
private String name;
private long id;
private JobHistory jobHistory;
private boolean canRun;
private boolean scheduled = true; // true if this stage history really happened
private String approvalType;
private String approvedBy;
private String counter;
private boolean operatePermission;
private StageInstanceModel previousStage;
private StageResult result;
private StageIdentifier identifier;
private Integer rerunOfCounter;
public boolean hasOperatePermission() {
return operatePermission;
}
public void setOperatePermission(boolean operatePermission) {
this.operatePermission = operatePermission;
}
public boolean isSelected() {
return selected;
}
private boolean selected;
// for test
public StageInstanceModel(String name, String counter, JobHistory jobHistory) {
this.name = name;
this.jobHistory = jobHistory;
this.counter = counter;
}
// for test
public StageInstanceModel(String name, String counter, JobHistory jobHistory, StageIdentifier identifier) {
this(name, counter, jobHistory);
this.identifier = identifier;
}
public StageInstanceModel(String name, String counter, StageResult result, StageIdentifier identifier) {
this(name, counter, new JobHistory(), identifier);
this.result = result;
}
// for ibatis
public StageInstanceModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public JobHistory getBuildHistory() {
return jobHistory;
}
public void setBuildHistory(JobHistory jobHistory) {
this.jobHistory = jobHistory;
}
public StageState getState() {
return StageState.findByBuilds(jobHistory);
}
public String getApprovedBy() {
return approvedBy;
}
public void setApprovedBy(String approvedBy) {
this.approvedBy = approvedBy;
}
public String getApprovalDescription() {
if (approvedBy == null) {
return "Awaiting Approval";
}
return "Approved by " + approvedBy;
}
public String getApprovalType() {
return approvalType;
}
public String getApprovalTypeDescription() {
if (isAutoApproved()) {
return "auto";
}
else {
return "manual";
}
}
public boolean needsApproval() {
return approvedBy == null && getState().completed();
}
public boolean isAutoApproved() {
return APPROVAL_SUCCESS.equals(approvalType);
}
public Date getScheduledDate() {
return jobHistory.getScheduledDate();
}
public boolean getCanRun() {
return this.canRun;
}
public boolean getCanReRun() {
return canRun;
}
public boolean getCanCancel() {
return operatePermission && getState().isActive();
}
public void setCanRun(boolean canRun) {
this.canRun = canRun;
}
public boolean isScheduled() {
return scheduled;
}
public void setScheduled(boolean value) {
this.scheduled = value;
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
StageInstanceModel that = (StageInstanceModel) o;
if (!name.equals(that.name)) {
return false;
}
return true;
}
public int hashCode() {
return name.hashCode();
}
public void setApprovalType(String approvalType) {
this.approvalType = approvalType;
}
public String getCounter() {
return counter;
}
public void setCounter(String counter) {
this.counter = counter;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public boolean getCanApprove() {
return (getCanRun() && !isScheduled());
}
public boolean hasUnsuccessfullyCompleted() {
for (JobHistoryItem jobHistoryItem : jobHistory) {
if(jobHistoryItem.hasUnsuccessfullyCompleted()) return true;
}
return false;
}
public boolean hasPassed() {
for (JobHistoryItem jobHistoryItem : jobHistory) {
if(!jobHistoryItem.hasPassed()) return false;
}
return true;
}
public boolean isRunning() {
for (JobHistoryItem jobHistoryItem : jobHistory) {
if(jobHistoryItem.isRunning()) return true;
}
return false;
}
public boolean hasPreviousStage() {
return this.previousStage != null;
}
public void setPreviousStage(StageInstanceModel previousStage) {
this.previousStage = previousStage;
}
public StageInstanceModel getPreviousStage() {
return previousStage;
}
public StageResult getResult() {
return result;
}
public StageIdentifier getIdentifier() {
return identifier;
}
public String getPipelineName() {
return identifier.getPipelineName();
}
public Integer getPipelineCounter() {
return identifier.getPipelineCounter();
}
public String locator() {
return identifier.getStageLocator();
}
public boolean isRerunJobs() {
return rerunOfCounter != null;
}
public Integer getRerunOfCounter() {
return rerunOfCounter;
}
public void setRerunOfCounter(Integer rerunOfCounter) {
this.rerunOfCounter = rerunOfCounter;
}
}