/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You 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.esri.gpt.server.assertion.components;
import com.esri.gpt.framework.util.Val;
import java.io.IOException;
/**
* Represents an assertion operation response.
*/
public class AsnResponse {
/** instance variables ====================================================== */
private String outputFormat;
private AsnProperty responseProperty;
private String responseString;
/** constructors ============================================================ */
/** Default constructor */
public AsnResponse() {}
/** properties ============================================================== */
/**
* Gets the HTTP response MIME type.
* @return the response MIME type
*/
public String getMimeType() {
String fmt = Val.chkStr(this.getOutputFormat());
if (fmt.equalsIgnoreCase("json") || fmt.equalsIgnoreCase("application/json")) {
return "application/json";
} else if (fmt.equalsIgnoreCase("pjson")) {
return "text/plain";
} else if (fmt.equalsIgnoreCase("text/plain")) {
return "text/plain";
} else {
return "application/xml";
}
}
/**
* Gets the output format.
* @return the output format (can be null)
*/
public String getOutputFormat() {
return this.outputFormat;
}
/**
* Sets the HTTP output format (MIME type).
* @param outputFormat the output format
*/
public void setOutputFormat(String outputFormat) {
this.outputFormat = outputFormat;
}
/**
* Gets the root property for the response.
* @return the root response property
*/
public AsnProperty getResponseProperty() {
return this.responseProperty;
}
/**
* Sets the root property for the response.
* @param responseProperty the root response property
*/
public void setResponseProperty(AsnProperty responseProperty) {
this.responseProperty = responseProperty;
}
/**
* Gets the response string.
* @return the response string (can be null)
*/
public String getResponseString() {
return this.responseString;
}
/**
* Sets the response string.
* @param response the response string
*/
public void setResponseString(String response) {
this.responseString = response;
}
/** methods ================================================================= */
/**
* Generates an exception based operation response.
* @param context the assertion operation context
* @param e the exception
* @throws IOException if an I/O exception occurs
*/
public void exceptionToResponse(AsnContext context, Exception e) throws IOException {
String message = Val.chkStr(e.getMessage());
if (message.length() == 0) message = e.toString();
this.generateFailedResponse(context,message);
}
/**
* Generates a failed operation response.
* @param context the assertion operation context
* @param message the message (RDF value, can be null)
* @throws IOException if an I/O exception occurs
*/
public void generateFailedResponse(AsnContext context, String message) throws IOException {
if (message != null) {
message = message.trim();
if (message.length() == 0) message = null;
}
String subject = AsnConstants.OPERATION_EXCEPTION;
String predicate = AsnConstants.OPERATION_STATUS_FAILED;
AsnProperty response = new AsnProperty(subject,predicate,message);
this.setResponseProperty(response);
this.propertyToResponseString();
}
/**
* Generates an OK operation response.
* @param context the assertion operation context
* @param message the message (RDF value, can be null)
* @throws IOException if an I/O exception occurs
*/
public void generateOkResponse(AsnContext context, String message) throws IOException {
message = Val.chkStr(message);
if (message.length() == 0) {
message = AsnConstants.OPERATION_STATUS_OK;
}
AsnOperation operation = context.getOperation();
String subject = operation.getSubject().getURN();
String predicate = operation.getPredicate().getURN()+":response";
AsnProperty response = new AsnProperty(subject,predicate,message);
this.setResponseProperty(response);
this.propertyToResponseString();
}
/**
* Generates an operation response.
* @param context the assertion operation context
* @param body a property representing the body of the response
* @throws IOException if an I/O exception occurs
*/
public void generateResponse(AsnContext context, AsnProperty body) throws IOException {
AsnOperation operation = context.getOperation();
String subject = operation.getSubject().getURN();
String predicate = operation.getPredicate().getURN()+":response";
AsnProperty response = new AsnProperty(subject,predicate,null);
this.setResponseProperty(response);
if (body != null) {
response.getChildren().add(body);
}
this.propertyToResponseString();
}
/**
* Generates an operation response.
* @param context the assertion operation context
* @param body a properties representing the body of the response
* @throws IOException if an I/O exception occurs
*/
public void generateResponse(AsnContext context, AsnProperties body) throws IOException {
AsnOperation operation = context.getOperation();
String subject = operation.getSubject().getURN();
String predicate = operation.getPredicate().getURN()+":response";
AsnProperty response = new AsnProperty(subject,predicate,null);
this.setResponseProperty(response);
if (body != null) {
response.setChildren(body);
}
this.propertyToResponseString();
}
/**
* Generates a response string from the active response property
* @throws IOException if an I/O exception occurs
*/
public void propertyToResponseString() throws IOException {
AsnProperty prop = this.getResponseProperty();
if (prop != null) {
String fmt = Val.chkStr(this.getOutputFormat());
boolean isJson = fmt.equalsIgnoreCase("json") ||
fmt.equalsIgnoreCase("pjson") ||
fmt.equalsIgnoreCase("application/json");
if (isJson) {
this.setResponseString(prop.asJson());
} else {
this.setResponseString(prop.asXml());
}
}
}
}