/******************************************************************** * Copyright (c) 2010 eBay Inc., and others. All Rights Reserved. * 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 *******************************************************************/ package org.ebayopensource.turmeric.policy.adminui.client.model; import java.util.Map; import java.util.TreeMap; import org.ebayopensource.turmeric.policy.adminui.client.PolicyAdminUIUtil; import org.ebayopensource.turmeric.policy.adminui.client.shared.AppUser; import com.google.gwt.core.client.JsArray; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.Response; /** * AbstractPolicyAdminUIService. */ public class AbstractPolicyAdminUIService implements PolicyAdminUIService { /** The Constant SECURITY_NAMESPACE. */ public static final String SECURITY_NAMESPACE = "http://www.ebayopensource.org/turmeric/security/v1/services"; /** The Constant OASIS_NAMESPACE. */ public static final String OASIS_NAMESPACE = "urn:oasis:names:tc:xacml:2.0:policy:schema:os"; /** The Constant COMMON_NAMESPACE. */ public static final String COMMON_NAMESPACE = "http://www.ebayopensource.org/turmeric/common/v1/types"; /** * The Enum RequestFormat. */ public static enum RequestFormat {JSON, NV}; /** The namespaces. */ protected final Map<String,String> namespaces = new TreeMap<String, String>(); /** The service name header value. */ protected String serviceNameHeaderValue=SERVICE_NAME_HEADER+"="; /** * Gets the partial url. * * @param operation * the operation * @param namespaces * the namespaces * @param format * the format * @return the partial url */ public String getPartialUrl(String operation, Map<String,String> namespaces, RequestFormat format) { String url = ""; url += serviceNameHeaderValue; url += "&"+OPERATION_NAME_HEADER+"="+operation; url += "&"+USECASE_HEADER_VALUE; switch (format) { case JSON: url += "&"+JSON_DATA_FORMAT_HEADER_VALUE; break; case NV: url += "&"+NV_DATA_FORMAT_HEADER_VALUE; break; } url += "&"+JSON_RESPONSE_FORMAT_HEADER_VALUE; if (namespaces != null && RequestFormat.NV == format) { for (String s:namespaces.keySet()) { url += "&nvns:"+s+"="+namespaces.get(s); } } return url; } /** * Sets the security headers. * * @param requestBuilder * the new security headers */ public void setSecurityHeaders (RequestBuilder requestBuilder) { if (requestBuilder == null) return; AppUser user = AppUser.getUser(); if (user != null) { requestBuilder.setHeader("X-TURMERIC-SECURITY-USERID", user.getUsername()); requestBuilder.setHeader("X-TURMERIC-SECURITY-PASSWORD", user.getPassword()); } } /** * Gets the error as throwable. * * @param responseName * the response name * @param response * the response * @return the error as throwable */ public Throwable getErrorAsThrowable (String responseName, Response response) { if (response == null) return null; //try parsing the json as an errorMessage ErrorResponse errorResponse = ErrorResponse.fromJSON(response.getText()); JsArray<RemoteError> errors = errorResponse.getErrors(); if (errors == null || errors.length()==0) errors = errorResponse.getServiceErrors(responseName); if (errors == null) return new Throwable(PolicyAdminUIUtil.constants.error()+" "+response.getStatusCode()); String s = ""; for (int i=0;i<errors.length();i++) { RemoteError re = errors.get(i); s += re.getCategory()+":"+re.getSeverity()+":"+re.getMessage()+" "; } if (!"".equals(s)) return new Throwable(s); return new Throwable(PolicyAdminUIUtil.messages.badRequestData()); } /** * Gets the error as throwable. * * @param response * the response * @return the error as throwable */ public Throwable getErrorAsThrowable (Response response) { if (response == null) return null; //try parsing the json as an errorMessage ErrorResponse errorResponse = ErrorResponse.fromJSON(response.getText()); JsArray<RemoteError> errors = errorResponse.getErrors(); if (errors == null) { return new Throwable(PolicyAdminUIUtil.constants.error()+" "+response.getStatusCode()); } String s = ""; for (int i=0;i<errors.length();i++) { RemoteError re = errors.get(i); s += re.getCategory()+":"+re.getSeverity()+":"+re.getMessage()+" "; } if (!"".equals(s)) return new Throwable(s); return new Throwable(PolicyAdminUIUtil.messages.badRequestData()); } }