/*
* 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.server.service.result;
import com.thoughtworks.go.i18n.Localizable;
import com.thoughtworks.go.i18n.LocalizedMessage;
import com.thoughtworks.go.i18n.Localizer;
import com.thoughtworks.go.serverhealth.HealthStateType;
import org.apache.http.HttpStatus;
/**
* @understands localized operation result for http
* We suck at this
*/
public class HttpLocalizedOperationResult implements LocalizedOperationResult {
private Localizable message;
private HealthStateType healthStateType;
private int httpCode = 200;
public static LocalizedOperationResult badRequest(String messageKey){
LocalizedOperationResult result = successfulResult();
result.badRequest(LocalizedMessage.string(messageKey));
return result;
}
public static LocalizedOperationResult successfulResult(){
return new HttpLocalizedOperationResult();
}
public void setMessage(Localizable message) {
this.message = message;
}
@Override
public boolean hasMessage() {
return message != null;
}
public void notImplemented(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_NOT_IMPLEMENTED;
}
@Override
public void unprocessableEntity(Localizable message) {
this.message = message;
this.httpCode = HttpStatus.SC_UNPROCESSABLE_ENTITY;
}
public void unauthorized(Localizable message, HealthStateType healthStateType) {
this.message = message;
this.healthStateType = healthStateType;
httpCode = HttpStatus.SC_UNAUTHORIZED;
}
@Override
public void stale(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_PRECONDITION_FAILED;
}
public void notFound(Localizable message, HealthStateType healthStateType) {
this.message = message;
this.healthStateType = healthStateType;
httpCode = HttpStatus.SC_NOT_FOUND;
}
public void conflict(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_CONFLICT;
}
public void internalServerError(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_INTERNAL_SERVER_ERROR;
}
public void badRequest(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_BAD_REQUEST;
}
public void accepted(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_ACCEPTED;
}
public void notAcceptable(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_NOT_ACCEPTABLE;
}
public boolean isSuccessful() {
return 200 <= httpCode && httpCode < 300; // I hate java
}
public void connectionError(Localizable message) {
this.message = message;
httpCode = HttpStatus.SC_BAD_REQUEST;
}
public int httpCode() {
return httpCode;
}
public String message(Localizer localizer) {
if (message == null) return null;
return message.localize(localizer);
}
/**
* Used only in tests
*/
public Localizable localizable() {
return message;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HttpLocalizedOperationResult that = (HttpLocalizedOperationResult) o;
if (httpCode != that.httpCode) return false;
if (healthStateType != null ? !healthStateType.equals(that.healthStateType) : that.healthStateType != null)
return false;
if (message != null ? !message.equals(that.message) : that.message != null) return false;
return true;
}
@Override
public int hashCode() {
int result = message != null ? message.hashCode() : 0;
result = 31 * result + (healthStateType != null ? healthStateType.hashCode() : 0);
result = 31 * result + httpCode;
return result;
}
@Override
public String toString() {
return "HttpLocalizedOperationResult{" +
"message=" + message +
", healthStateType=" + healthStateType +
", httpCode=" + httpCode +
'}';
}
}