/********************************************************************
* 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.policy;
import java.util.Date;
import java.util.List;
import org.ebayopensource.turmeric.policy.adminui.client.PolicyAdminUIUtil;
import org.ebayopensource.turmeric.policy.adminui.client.model.AbstractPolicyAdminUIService;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery.SubjectTypeKey;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* PolicyQueryServiceImpl.
*/
public class PolicyQueryServiceImpl extends AbstractPolicyAdminUIService implements
PolicyQueryService {
private static final String BASE_POLICY_URL = GWT.getModuleBaseURL()
+ "policy";
/**
* Instantiates a new policy query service impl.
*/
public PolicyQueryServiceImpl() {
namespaces.put("ns1", SECURITY_NAMESPACE);
namespaces.put("ns2", OASIS_NAMESPACE);
serviceNameHeaderValue += "PolicyService";
}
/**
* Creates the subject groups.
*
* @param groups
* the groups
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#createSubjectGroups(java.util.List,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void createSubjectGroups(final List<SubjectGroup> groups,
final AsyncCallback<CreateSubjectGroupsResponse> callback) {
if (groups == null)
return;
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("createSubjectGroups", namespaces,
RequestFormat.NV);
if (groups != null) {
int i = 0;
for (SubjectGroup g : groups) {
url += (g.getName() == null ? "" : "&ns1:subjectGroups(" + i
+ ").@SubjectGroupName=" + g.getName().trim());
url += (g.getType() == null ? "" : "&ns1:subjectGroups(" + i
+ ").@SubjectType=" + g.getType().toString());
url += (g.getDescription() == null ? "" : "&ns1:subjectGroups("
+ i + ").@Description=" + g.getDescription());
url += (g.getGroupCalculator() == null ? "" : "&ns1:subjectGroups(" + i
+ ").@SubjectGroupCalculator="+ g.getGroupCalculator());
// Subjects must have name && type?
if (g.getSubjects() != null) {
int j = 0;
for (String s : g.getSubjects()) {
url += "&ns1:subjectGroups(" + i + ").ns1:Subject(" + j
+ ").@SubjectName=" + s;
url += "&ns1:subjectGroups(" + i + ").ns1:Subject(" + j
+ ").@SubjectType=" + g.getType().toString();
j++;
}
}
i++;
}
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(
PolicyAdminUIUtil.constants.error() + " "
+ response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
CreateSubjectGroupsResponseJS.NAME,
response));
} else {
// convert response.getText() to JSON
CreateSubjectGroupsResponse createResponse = CreateSubjectGroupsResponseJS
.fromJSON(response.getText());
if (createResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
CreateSubjectGroupsResponseJS.NAME,
response));
else
callback.onSuccess(createResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
}
/**
* Delete policy.
*
* @param key
* the key
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deletePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.DeletePolicyRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void deletePolicy(final PolicyKey key,
final AsyncCallback<DeletePolicyResponse> callback) {
if (key == null) {
callback.onFailure(null);
} else {
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("deletePolicy", namespaces,
RequestFormat.NV);
url += (key.getId() == null ? "" : "&ns1:policyKey.ns1:policyId="
+ key.getId().toString());
url += (key.getName() == null ? ""
: "&ns1:policyKey.ns1:policyName=" + key.getName().trim());
url += (key.getType() == null ? ""
: "&ns1:policyKey.ns1:policyType="
+ key.getType().toString().toUpperCase());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(
PolicyAdminUIUtil.constants.error() + " "
+ response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null
&& response.getHeader(ERROR_HEADER).length() > 0) {
callback.onFailure(getErrorAsThrowable(
DeletePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
DeletePolicyResponse deleteResponse = DeletePolicyResponseJS
.fromJSON(response.getText());
if (deleteResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
DeletePolicyResponseJS.NAME, response));
else
callback.onSuccess(deleteResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
}
/**
* Delete resources.
*
* @param keys
* the keys
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deleteResource(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.DeleteResourceRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void deleteResources(List<ResourceKey> keys,
AsyncCallback<DeleteResourceResponse> callback) {
}
/**
* Delete subject groups.
*
* @param keys
* the keys
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#deleteSubjectGroup(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.DeleteSubjectGroupRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void deleteSubjectGroups(final List<SubjectGroupKey> keys,
final AsyncCallback<DeleteSubjectGroupResponse> callback) {
if (keys == null) {
return;
}
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("deleteSubjectGroups", namespaces,
RequestFormat.NV);
int i = 0;
for (SubjectGroupKey key : keys) {
url += (key.getId() == null ? "" : "&ns1:subjectGroupKey(" + i
+ ").ns1:subjectGroupId=" + key.getId().toString());
url += (key.getName() == null ? "" : "&ns1:subjectGroupKey(" + i
+ ").ns1:subjectGroupName=" + key.getName().trim());
url += (key.getType() == null ? "" : "&ns1:subjectGroupKey(" + i
+ ").ns1:subjectType=" + key.getType().toString());
i++;
}
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
DeleteSubjectGroupResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
DeleteSubjectGroupResponse delResponse = DeleteSubjectGroupResponseJS
.fromJSON(response.getText());
if (delResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
DeleteSubjectGroupResponseJS.NAME, response));
else
callback.onSuccess(delResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Disable policy.
*
* @param key
* the key
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#disablePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.DisablePolicyRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void disablePolicy(final PolicyKey key,
final AsyncCallback<DisablePolicyResponse> callback) {
if (key == null) {
callback.onFailure(null);
} else {
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("disablePolicy", namespaces,
RequestFormat.NV);
url += (key.getId() == null ? "" : "&ns1:policyKey.ns1:policyId="
+ key.getId().toString());
url += (key.getName() == null ? ""
: "&ns1:policyKey.ns1:policyName=" + key.getName().trim());
url += (key.getType() == null ? ""
: "&ns1:policyKey.ns1:policyType="
+ key.getType().toString().toUpperCase());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(
PolicyAdminUIUtil.constants.error() + " "
+ response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null
&& response.getHeader(ERROR_HEADER).length() > 0) {
callback.onFailure(getErrorAsThrowable(
DisablePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
DisablePolicyResponse enableResponse = DisablePolicyResponseJS
.fromJSON(response.getText());
if (enableResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
DisablePolicyResponseJS.NAME, response));
else
callback.onSuccess(enableResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
}
/**
* Enable policy.
*
* @param key
* the key
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#enablePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.EnablePolicyRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void enablePolicy(final PolicyKey key,
final AsyncCallback<EnablePolicyResponse> callback) {
if (key == null) {
callback.onFailure(null);
} else {
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("enablePolicy", namespaces,
RequestFormat.NV);
url += (key.getId() == null ? "" : "&ns1:policyKey.ns1:policyId="
+ key.getId().toString());
url += (key.getName() == null ? ""
: "&ns1:policyKey.ns1:policyName=" + key.getName().trim());
url += (key.getType() == null ? ""
: "&ns1:policyKey.ns1:policyType="
+ key.getType().toString().toUpperCase());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(
PolicyAdminUIUtil.constants.error() + " "
+ response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null
&& response.getHeader(ERROR_HEADER).length() > 0) {
callback.onFailure(getErrorAsThrowable(
EnablePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
EnablePolicyResponse enableResponse = EnablePolicyResponseJS
.fromJSON(response.getText());
if (enableResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
EnablePolicyResponseJS.NAME, response));
else
callback.onSuccess(enableResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
}
/**
* Gets the resources.
*
* @param keys
* the keys
* @param callback
* the callback
* @return the resources
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getResources(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.GetResourcesRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void getResources(final List<ResourceKey> keys,
final AsyncCallback<GetResourcesResponse> callback) {
if (keys == null)
return;
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("getResources", namespaces, RequestFormat.NV);
int i = 0;
for (ResourceKey key : keys) {
url += (key.getId() == null ? "" : "&ns1:resourceKey(" + i
+ ").ns1:resourceId=" + key.getId().toString());
url += (key.getName() == null || key.getName().trim().isEmpty() ? ""
: "&ns1:resourceKey(" + i + ").ns1:resourceName="
+ key.getName().trim());
url += (key.getType() == null || key.getType().trim().isEmpty() ? ""
: "&ns1:resourceKey(" + i + ").ns1:resourceType="
+ key.getType().toString().toUpperCase());
i++;
}
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
GetResourcesResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
GetResourcesResponse resourcesResponse = GetResourcesResponseJS
.fromJSON(response.getText());
if (resourcesResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
GetResourcesResponseJS.NAME, response));
else
callback.onSuccess(resourcesResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Find policies.
*
* @param sinceLastModifiedTime
* the since last modified time
* @param keys
* the keys
* @param resKeys
* the res keys
* @param opKeys
* the op keys
* @param subjectKeys
* the subject keys
* @param subjectGroupKeys
* the subject group keys
* @param outputSelector
* the output selector
* @param condition
* the condition
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getPoliciesByKey(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void findPolicies(Long sinceLastModifiedTime, List<PolicyKey> keys,
List<ResourceKey> resKeys, List<OperationKey> opKeys,
List<SubjectKey> subjectKeys,
List<SubjectGroupKey> subjectGroupKeys,
PolicyOutputSelector outputSelector, QueryCondition condition,
final AsyncCallback<GetPoliciesResponse> callback) {
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("findPolicies", namespaces, RequestFormat.NV);
// sinceLastModifiedTime is measured as the milliseconds since the
// epoch(GMT)
// "YYYY-MM-DDThh:mm:ssZ" eg 2002-05-30T09:30:10Z
if (sinceLastModifiedTime != null) {
String time = PolicyAdminUIUtil.xsDateTimeFormat.format(new Date(
sinceLastModifiedTime.longValue()));
url += "&ns1:lastUpdatedDate=" + URL.encodeQueryString(time);
}
// find by a particular policy type
// if(keys.size()==1){
url = createPolicyKeyRequest(keys, url);
// }else{
// //find with all policy types
// url = createPolicyKeyForAllRequest(keys, subjectGroupKeys, url);
// }
url = createResourceKeyRequest(resKeys, url);
url = createOperationKeyRequest(opKeys, url);
url = createSubjectKeyRequest(subjectKeys, url);
url = createSubjectGroupKeyRequest(subjectGroupKeys, url);
// is there an outputselector?
if (outputSelector != null) {
url += "&ns1:outputSelector=" + outputSelector.toString();
}
// is there a query condition?
if (condition != null) {
url += (condition.getResolution() == null ? ""
: "&ns1:queryCondition.ns1:resolution="
+ condition.getResolution().toString());
if (condition.getQueries() != null) {
int i = 0;
for (QueryCondition.Query q : condition.getQueries()) {
url += "&ns1:queryCondition.ns1:query(" + i
+ ").ns1:QueryType=" + q.getType().toString();
url += "&ns1:queryCondition.ns1:query(" + i
+ ").ns1:QueryValue=" + q.getValue().toString();
}
}
}
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
GetPoliciesResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
GetPoliciesResponse findResponse = GetPoliciesResponseJS
.fromJSON(response.getText());
if (findResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
GetPoliciesResponseJS.NAME, response));
} else
callback.onSuccess(findResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Gets the entity history.
*
* @param startDate
* the start date
* @param endDate
* the end date
* @param polKeys
* the pol keys
* @param resKeys
* the res keys
* @param opKeys
* the op keys
* @param subjectKeys
* the subject keys
* @param subjectGroupKeys
* the subject group keys
* @param callback
* the callback
* @return the entity history
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getEntityHistory(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.GetEntityHistoryRequest,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void getEntityHistory(Long startDate, Long endDate,
List<PolicyKey> polKeys, List<ResourceKey> resKeys,
List<OperationKey> opKeys, List<SubjectKey> subjectKeys,
List<SubjectGroupKey> subjectGroupKeys,
final AsyncCallback<GetEntityHistoryResponse> callback) {
if (startDate == null || endDate == null || startDate > endDate)
return;
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("getEntityHistory", namespaces,
RequestFormat.NV);
// startDate is measured as the milliseconds since the epoch(GMT)
// "YYYY-MM-DDThh:mm:ssZ" eg 2002-05-30T09:30:10Z
String start = PolicyAdminUIUtil.xsDateTimeFormat.format(
new Date(startDate.longValue())).trim();
url += "&ns1:startDate=" + URL.encodeQueryString(start);
String end = PolicyAdminUIUtil.xsDateTimeFormat.format(
new Date(endDate.longValue())).trim();
url += "&ns1:endDate=" + URL.encodeQueryString(end);
url = createPolicyKeyRequest(polKeys, url);
url = createResourceKeyRequest(resKeys, url);
url = createOperationKeyRequest(opKeys, url);
url = createSubjectKeyRequest(subjectKeys, url);
url = createSubjectGroupKeyRequest(subjectGroupKeys, url);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
GetEntityHistoryResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
GetEntityHistoryResponse createResponse = GetEntityHistoryResponseJS
.fromJSON(response.getText());
if (createResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
GetEntityHistoryResponseJS.NAME, response));
} else
callback.onSuccess(createResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Creates internal subjects based on external ones.
*
* @param subjects
* the subjects
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.
* PolicyQueryService
* #createSubjects(List<org.ebayopensource.turmeric.policy.adminui
* .client.model.policy.Subjects>,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void createSubjects(final List<Subject> subjects,
final AsyncCallback<CreateSubjectsResponse> callback) {
if (subjects == null) {
return;
}
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("createSubjects", namespaces, RequestFormat.NV);
url += SubjectsConverter.toNV(subjects);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
CreateSubjectsResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
CreateSubjectsResponse createResponse = CreateSubjectsResponseJS
.fromJSON(response.getText());
if (createResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
CreateSubjectsResponseJS.NAME, response));
else
callback.onSuccess(createResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Creates the policy.
*
* @param policy
* the policy
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#createPolicy(org.org.ebayopensource.turmeric.monitoring.client.model.policy.GenericPolicy,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void createPolicy(final GenericPolicy policy,
final AsyncCallback<CreatePolicyResponse> callback) {
if (policy == null) {
return;
}
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("createPolicy", namespaces, RequestFormat.NV);
url += GenericPolicyConverter.toNV(policy);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
CreatePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
CreatePolicyResponse createResponse = CreatePolicyResponseJS
.fromJSON(response.getText());
if (createResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
CreatePolicyResponseJS.NAME, response));
} else
callback.onSuccess(createResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Find subject groups.
*
* @param query
* the query
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findSubjectGroups(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupQuery,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void findSubjectGroups(final SubjectGroupQuery query,
final AsyncCallback<FindSubjectGroupsResponse> callback) {
if (query == null)
return;
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("findSubjectGroups", namespaces,
RequestFormat.NV);
if (query.getGroupKeys() != null) {
int i = 0;
for (SubjectGroupKey key : query.getGroupKeys()) {
url += (key.getType() == null
|| "".equals(key.getType().trim()) ? ""
: "&ns1:subjectGroupQuery.ns1:subjectGroupKey(" + i
+ ").ns1:subjectType=" + key.getType());
url += ((key.getName() == null || key.getName().trim()
.isEmpty()) ? ""
: "&ns1:subjectGroupQuery.ns1:subjectGroupKey(" + i
+ ").ns1:subjectGroupName="
+ key.getName().trim());
url += (key.getId() == null ? ""
: "&ns1:subjectGroupQuery.ns1:subjectGroupKey(" + i
+ ").ns1:subjectGroupId="
+ key.getId().toString());
i++;
}
}
url += (query.getQuery() == null ? ""
: "&ns1:subjectGroupQuery.ns1:queryString=" + query.getQuery());
url += "&ns1:subjectGroupQuery.ns1:includeSubjects="
+ query.isIncludeSubjects();
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
FindSubjectGroupsResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
FindSubjectGroupsResponse findResponse = FindSubjectGroupsResponseJS
.fromJSON(response.getText());
if (findResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
FindSubjectGroupsResponseJS.NAME, response));
} else
callback.onSuccess(findResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Find subjects.
*
* @param query
* the query
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findSubjects(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void findSubjects(final SubjectQuery query,
final AsyncCallback<FindSubjectsResponse> callback) {
if (query == null)
return;
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("findSubjects", namespaces, RequestFormat.NV);
if (query.getTypeKeys() != null) {
int i = 0;
for (SubjectTypeKey key : query.getTypeKeys()) {
url += (key.getTypeId() == null ? ""
: "&ns1:subjectQuery.ns1:subjectTypeKey(" + i
+ ").ns1:subjectTypeId="
+ key.getTypeId().toString());
url += (key.getTypeName() == null ? ""
: "&ns1:subjectQuery.ns1:subjectTypeKey(" + i
+ ").ns1:subjectType=" + key.getTypeName());
i++;
}
}
if (query.getSubjectKeys() != null) {
int i = 0;
for (SubjectKey key : query.getSubjectKeys()) {
url += (key.getType() == null ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectType=" + key.getType());
url += (key.getName() == null || key.getName().trim().isEmpty() ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectName=" + key.getName().trim());
url += (key.getId() == null ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectId=" + key.getId().toString());
i++;
}
}
url += (query.getQuery() == null ? ""
: "&ns1:subjectQuery.ns1:queryString=" + query.getQuery());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
FindSubjectsResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
FindSubjectsResponse findResponse = FindSubjectsResponseJS
.fromJSON(response.getText());
if (findResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
FindSubjectsResponseJS.NAME, response));
} else
callback.onSuccess(findResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Find external subjects.
*
* @param query
* the query
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#findExternalSubjects(org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectQuery,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
public void findExternalSubjects(SubjectQuery query,
final AsyncCallback<FindExternalSubjectsResponse> callback) {
if (query == null)
return;
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("findExternalSubjects", namespaces,
RequestFormat.NV);
if (query.getTypeKeys() != null) {
int i = 0;
for (SubjectTypeKey key : query.getTypeKeys()) {
url += (key.getTypeId() == null ? ""
: "&ns1:subjectQuery.ns1:subjectTypeKey(" + i
+ ").ns1:subjectTypeId="
+ key.getTypeId().toString());
url += (key.getTypeName() == null ? ""
: "&ns1:subjectQuery.ns1:subjectTypeKey(" + i
+ ").ns1:subjectType=" + key.getTypeName());
i++;
}
}
if (query.getSubjectKeys() != null) {
int i = 0;
for (SubjectKey key : query.getSubjectKeys()) {
url += (key.getType() == null ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectType=" + key.getType());
url += (key.getName() == null || key.getName().trim().isEmpty() ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectName=" + key.getName().trim());
url += (key.getId() == null ? ""
: "&ns1:subjectQuery.ns1:subjectKey(" + i
+ ").ns1:subjectId=" + key.getId().toString());
i++;
}
}
url += (query.getQuery() == null ? ""
: "&ns1:subjectQuery.ns1:queryString=" + query.getQuery());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
FindExternalSubjectsResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
FindExternalSubjectsResponse findResponse = FindExternalSubjectsResponseJS
.fromJSON(response.getText());
if (findResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
FindExternalSubjectsResponseJS.NAME,
response));
} else
callback.onSuccess(findResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Gets the meta data.
*
* @param condition
* the condition
* @param callback
* the callback
* @return the meta data
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#getMetaData(org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void getMetaData(QueryCondition condition,
final AsyncCallback<GetMetaDataResponse> callback) {
if (condition == null)
return;
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("getMetaData", namespaces, RequestFormat.NV);
url += (condition.getResolution() == null ? ""
: "&ns1:queryCondition.ns1:resolution="
+ condition.getResolution().toString());
if (condition.getQueries() != null) {
int i = 0;
for (QueryCondition.Query q : condition.getQueries()) {
url += "&ns1:queryCondition.ns1:query(" + i
+ ").ns1:QueryType=" + q.getType().toString();
url += "&ns1:queryCondition.ns1:query(" + i
+ ").ns1:QueryValue=" + q.getValue().toString();
}
}
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
CreatePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
GetMetaDataResponse metaDataResponse = GetMetaDataResponseJS
.fromJSON(response.getText());
if (metaDataResponse.isErrored()) {
callback.onFailure(getErrorAsThrowable(
GetMetaDataResponseJS.NAME, response));
} else
callback.onSuccess(metaDataResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
/**
* Update subject groups.
*
* @param groups
* the groups
* @param mode
* the mode
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#updateSubjectGroups(java.util.List,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void updateSubjectGroups(List<SubjectGroup> groups, UpdateMode mode,
final AsyncCallback<UpdateSubjectGroupsResponse> callback) {
if (groups == null)
return;
String url = BASE_POLICY_URL
+ "?"
+ getPartialUrl("updateSubjectGroups", namespaces,
RequestFormat.NV);
if (groups != null) {
int i = 0;
for (SubjectGroup g : groups) {
url += (g.getName() == null ? "" : "&ns1:subjectGroups(" + i
+ ").@SubjectGroupName=" + g.getName().trim());
url += (g.getType() == null ? "" : "&ns1:subjectGroups(" + i
+ ").@SubjectType=" + g.getType().toString());
url += (g.getDescription() == null ? "" : "&ns1:subjectGroups("
+ i + ").@Description=" + g.getDescription());
url += ("&ns1:subjectGroups(" + i + ").@SubjectGroupCalculator="+ (g.getGroupCalculator()!=null?g.getGroupCalculator():""));
// Subjects must have name && type?
if (g.getSubjects() != null && g.getSubjects().size() > 0) {
int j = 0;
for (String s : g.getSubjects()) {
url += "&ns1:subjectGroups(" + i + ").ns1:Subject(" + j
+ ").@SubjectName=" + s;
url += "&ns1:subjectGroups(" + i + ").ns1:Subject(" + j
+ ").@SubjectType=" + g.getType().toString();
j++;
}
}
// SubjectMatch for the id. Optional: 0 or 1 element
if (g.getSubjectMatchTypes() != null && g.getSubjectMatchTypes().size() > 0) {
int j = 0;
for(SubjectMatchType sm : g.getSubjectMatchTypes()){
url += "&ns1:subjectGroups(" + i + ").ns2:SubjectMatch(" + j +").@MatchId="
+ sm.getMatchId();
url += "&ns1:subjectGroups(" + i + ").ns2:SubjectMatch(" + j +").ns2:AttributeValue="
+ sm.getAttributeValue();
url += "&ns1:subjectGroups("+ i+ ").ns2:SubjectMatch(" + j +").ns2:SubjectAttributeDesignator.@AttributeId="
+ sm.getSubjectAttributeDesignator();
j++;
}
}
i++;
}
// update mode
url += (mode == null ? "" : "&ns1:updateMode=" + mode.toString());
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(
PolicyAdminUIUtil.constants.error() + " "
+ response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
CreateSubjectGroupsResponseJS.NAME,
response));
} else {
// convert response.getText() to JSON
UpdateSubjectGroupsResponse updateResponse = UpdateSubjectGroupsResponseJS
.fromJSON(response.getText());
if (updateResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
UpdateSubjectGroupsResponseJS.NAME,
response));
else
callback.onSuccess(updateResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
}
/**
* Update policy.
*
* @param mode
* the mode
* @param policy
* the policy
* @param callback
* the callback
* @see org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService#updatePolicy(org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.UpdateMode,
* org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicy,
* com.google.gwt.user.client.rpc.AsyncCallback)
*/
@Override
public void updatePolicy(UpdateMode mode, GenericPolicy policy,
final AsyncCallback<UpdatePolicyResponse> callback) {
if (policy == null)
return;
String url = BASE_POLICY_URL + "?"
+ getPartialUrl("updatePolicy", namespaces, RequestFormat.JSON);
String json = ""+
"{" +
" \"jsonns.ns1\":\""+SECURITY_NAMESPACE+"\"," +
" \"jsonns.ns2\":\""+OASIS_NAMESPACE+"\"," +
" \"ns1.updatePolicyRequest\":{" +
" \"ns1.updateMode\": \"" + mode.toString()+"\"," ;
json += GenericPolicyConverter.toJSON(policy);
json += " }" ;
json += "}";
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,
URL.encode(url));
setSecurityHeaders(builder);
try {
builder.sendRequest(json, new RequestCallback() {
public void onError(Request request, Throwable err) {
callback.onFailure(err);
}
public void onResponseReceived(Request request,
Response response) {
if (response.getStatusCode() != Response.SC_OK) {
callback.onFailure(new Throwable(PolicyAdminUIUtil.constants
.error() + " " + response.getStatusCode()));
} else if (response.getHeader(ERROR_HEADER) != null && response.getHeader(ERROR_HEADER).length()>0) {
callback.onFailure(getErrorAsThrowable(
UpdatePolicyResponseJS.NAME, response));
} else {
// convert response.getText() to JSON
UpdatePolicyResponse updateResponse = UpdatePolicyResponseJS
.fromJSON(response.getText());
if (updateResponse.isErrored())
callback.onFailure(getErrorAsThrowable(
UpdatePolicyResponseJS.NAME, response));
else
callback.onSuccess(updateResponse);
}
}
});
} catch (RequestException x) {
callback.onFailure(x);
}
}
private String createSubjectGroupKeyRequest(
List<SubjectGroupKey> subjectGroupKeys, String url) {
// subject group key is optional
if (subjectGroupKeys != null && subjectGroupKeys.size() > 0) {
int i = 0;
for (SubjectGroupKey subjectGroupKey : subjectGroupKeys) {
url += (subjectGroupKey.getType() == null
|| "".equals(subjectGroupKey.getType().trim()) ? ""
: "&ns1:subjectGroupKey(" + i + ").ns1:subjectType="
+ subjectGroupKey.getType());
url += (subjectGroupKey.getId() == null ? ""
: "&ns1:subjectGroupKey(" + i + ").ns1:subjectGroupId="
+ subjectGroupKey.getId());
url += ((subjectGroupKey.getName() == null || subjectGroupKey
.getName().trim().isEmpty()) ? ""
: "&ns1:subjectGroupKey(" + i
+ ").ns1:subjectGroupName="
+ subjectGroupKey.getName().trim());
i++;
}
}
return url;
}
private String createSubjectKeyRequest(List<SubjectKey> subjectKeys,
String url) {
// subject key is optional
if (subjectKeys != null && subjectKeys.size() > 0) {
int i = 0;
for (SubjectKey subjectKey : subjectKeys) {
url += (subjectKey.getType() == null
|| "".equals(subjectKey.getType().trim()) ? ""
: "&ns1:subjectKey(" + i + ").ns1:subjectType="
+ subjectKey.getType());
url += (subjectKey.getId() == null ? "" : "&ns1:subjectKey("
+ i + ").ns1:subjectId=" + subjectKey.getId());
url += ((subjectKey.getName() == null || subjectKey.getName()
.trim().isEmpty()) ? "" : "&ns1:subjectKey(" + i
+ ").ns1:subjectName=" + subjectKey.getName().trim());
i++;
}
}
return url;
}
private String createOperationKeyRequest(List<OperationKey> opKeys,
String url) {
// operation key is optional
if (opKeys != null && opKeys.size() > 0) {
int i = 0;
for (OperationKey opKey : opKeys) {
url += (opKey.getOperationId() == null ? ""
: "&ns1:operationKey(" + i + ").ns1:operationId="
+ opKey.getOperationId());
url += (opKey.getOperationName() == null || opKey
.getOperationName().trim().isEmpty()) ? ""
: "&ns1:operationKey(" + i + ").ns1:operationName="
+ opKey.getOperationName().trim();
url += (opKey.getResourceName() == null || opKey
.getResourceName().trim().isEmpty()) ? ""
: "&ns1:operationKey(" + i + ").ns1:resourceName="
+ opKey.getResourceName().trim();
url += (opKey.getResourceType() == null || opKey
.getResourceType().trim().isEmpty()) ? ""
: "&ns1:operationKey(" + i + ").ns1:resourceType="
+ opKey.getResourceType();
i++;
}
}
return url;
}
private String createResourceKeyRequest(List<ResourceKey> resKeys,
String url) {
// resource key is optional
if (resKeys != null && resKeys.size() > 0) {
int i = 0;
for (ResourceKey resKey : resKeys) {
url += (resKey.getId() == null ? "" : "&ns1:resourceKey(" + i
+ ").ns1:resourceId=" + resKey.getId());
url += (resKey.getType() == null || resKey.getType().trim()
.isEmpty()) ? "" : "&ns1:resourceKey(" + i
+ ").ns1:resourceType=" + resKey.getType();
url += (resKey.getName() == null || resKey.getName().trim()
.isEmpty()) ? "" : "&ns1:resourceKey(" + i
+ ").ns1:resourceName=" + resKey.getName().trim();
i++;
}
}
return url;
}
private String createPolicyKeyRequest(List<PolicyKey> keys, String url) {
// at least one policy key must be present
if (keys != null && keys.size() > 0) {
int i = 0;
for (PolicyKey key : keys) {
url += (key.getType() == null
|| "".equals(key.getType().trim()) ? ""
: "&ns1:policyKey(" + i + ").ns1:policyType="
+ key.getType());
url += ((key.getId() == null) ? "" : "&ns1:policyKey(" + i
+ ").ns1:policyId=" + key.getId());
url += ((key.getName() == null || key.getName().trim()
.isEmpty()) ? "" : "&ns1:policyKey(" + i
+ ").ns1:policyName=" + key.getName().trim());
i++;
}
}
return url;
}
}