/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. 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.presenter.policy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.ebayopensource.turmeric.policy.adminui.client.PolicyAdminUIUtil;
import org.ebayopensource.turmeric.policy.adminui.client.SupportedService;
import org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken;
import org.ebayopensource.turmeric.policy.adminui.client.model.PolicyAdminUIService;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.EntityHistory;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.OperationKey;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyKey;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.GetEntityHistoryResponse;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.ResourceKey;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupKey;
import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectKey;
import org.ebayopensource.turmeric.policy.adminui.client.presenter.AbstractGenericPresenter;
import org.ebayopensource.turmeric.policy.adminui.client.util.PolicyKeysUtil;
import org.ebayopensource.turmeric.policy.adminui.client.view.common.PolicyTemplateDisplay.PolicyPageTemplateDisplay;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasWidgets;
/**
* The Class HistoryChangeSummaryPresenter.
*/
public class HistoryChangeSummaryPresenter extends AbstractGenericPresenter {
/** The Constant PRESENTER_ID. */
public static final String PRESENTER_ID = "HistoryChangeSummary";
/** The event bus. */
private HandlerManager eventBus;
/** The view. */
private HistoryChangeSummaryDisplay view;
/** The service map. */
private Map<SupportedService, PolicyAdminUIService> serviceMap;
/** The entities. */
protected List<EntityHistory> entities;
/** The service. */
protected PolicyQueryService service;
/**
* The Interface HistoryChangeSummaryDisplay.
*/
public interface HistoryChangeSummaryDisplay extends
PolicyPageTemplateDisplay {
void setEntities(List<EntityHistory> entities);
void setEntityTypes(List<String> entityTypes);
HasClickHandlers getSearchButton();
String getEntity();
long getFrom();
long getTo();
void error(String error);
}
/**
* Instantiates a new history change summary presenter.
*
* @param eventBus
* the event bus
* @param view
* the view
* @param serviceMap
* the service map
*/
public HistoryChangeSummaryPresenter(final HandlerManager eventBus,
final HistoryChangeSummaryDisplay view,
final Map<SupportedService, PolicyAdminUIService> serviceMap) {
this.eventBus = eventBus;
this.view = view;
this.view.setAssociatedId(getId());
this.serviceMap = serviceMap;
bind();
}
/*
* (non-Javadoc)
*
* @see
* org.ebayopensource.turmeric.policy.adminui.client.presenter.Presenter
* #getId()
*/
public String getId() {
return PRESENTER_ID;
}
/*
* (non-Javadoc)
*
* @see org.ebayopensource.turmeric.policy.adminui.client.presenter.
* AbstractGenericPresenter#getView()
*/
@Override
protected final PolicyPageTemplateDisplay getView() {
return view;
}
/**
* Bind.
*/
public void bind() {
this.view.getSearchButton().addClickHandler(new ClickHandler() {
public void onClick(final ClickEvent event) {
fetchEntities(view.getEntity(), view.getFrom(), view.getTo());
}
});
}
/*
* (non-Javadoc)
*
* @see org.ebayopensource.turmeric.policy.adminui.client.presenter.
* AbstractGenericPresenter#go(com.google.gwt.user.client.ui.HasWidgets,
* org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken)
*/
@Override
public final void go(final HasWidgets container, final HistoryToken token) {
container.clear();
this.view.setEntities(null);
setEntityTypes();
service = (PolicyQueryService) serviceMap
.get(SupportedService.POLICY_QUERY_SERVICE);
this.view.activate();
container.add(this.view.asWidget());
}
private void setEntityTypes() {
List<String> entitiesList = new ArrayList<String>();
entitiesList.add("All");
entitiesList.add("Resource");
entitiesList.add("Operation");
entitiesList.add("Subject");
entitiesList.add("Subject Group");
entitiesList.add("Authorization Policy");
entitiesList.add("Blacklist Policy");
entitiesList.add("Rate Limiting Policy");
entitiesList.add("Whitelist Policy");
this.view.setEntityTypes(entitiesList);
}
private void fetchEntities(final String entityType, long from, long to) {
if (from == 0) {
from = System.currentTimeMillis() - 24 * 60 * 60 * 1000;
}
if (to == 0) {
to = System.currentTimeMillis();
}
List<PolicyKey> poKeys = null;
List<SubjectKey> sKeys = null;
List<SubjectGroupKey> sgKeys = null;
List<ResourceKey> rsKeys = null;
List<OperationKey> opKeys = null;
PolicyKey pkey = null;
SubjectKey sKey = null;
SubjectGroupKey sgKey = null;
ResourceKey rsKey = null;
if ("Authorization Policy".equals(entityType)) {
pkey = new PolicyKey();
pkey.setType("AUTHZ");
poKeys = new ArrayList<PolicyKey>(Collections.singletonList(pkey));
QueryCondition condition = new QueryCondition();
condition.addQuery(new QueryCondition.Query(
QueryCondition.ActivePoliciesOnlyValue.FALSE));
} else if ("Blacklist Policy".equals(entityType)) {
pkey = new PolicyKey();
pkey.setType("BLACKLIST");
poKeys = new ArrayList<PolicyKey>(Collections.singletonList(pkey));
QueryCondition condition = new QueryCondition();
condition.addQuery(new QueryCondition.Query(
QueryCondition.ActivePoliciesOnlyValue.FALSE));
} else if ("Whitelist Policy".equals(entityType)) {
pkey = new PolicyKey();
pkey.setType("WHITELIST");
poKeys = new ArrayList<PolicyKey>(Collections.singletonList(pkey));
QueryCondition condition = new QueryCondition();
condition.addQuery(new QueryCondition.Query(
QueryCondition.ActivePoliciesOnlyValue.FALSE));
} else if ("Rate Limiting Policy".equals(entityType)) {
pkey = new PolicyKey();
pkey.setType("RL");
poKeys = new ArrayList<PolicyKey>(Collections.singletonList(pkey));
QueryCondition condition = new QueryCondition();
condition.addQuery(new QueryCondition.Query(
QueryCondition.ActivePoliciesOnlyValue.FALSE));
} else if ("Subject".equals(entityType)) {
sKeys = new ArrayList<SubjectKey>(
PolicyKeysUtil.getAllSubjectKeyList());
} else if ("Subject Group".equals(entityType)) {
sgKeys = new ArrayList<SubjectGroupKey>(
PolicyKeysUtil.getAllSubjectGroupKeyList());
} else if ("Resource".equals(entityType)) {
rsKeys = new ArrayList<ResourceKey>(
PolicyKeysUtil.getAllResourceKeyList());
} else if ("Operation".equals(entityType)) {
opKeys = new ArrayList<OperationKey>(
PolicyKeysUtil.getAllOperationKeyList());
} else if ("All".equals(entityType)) {
poKeys = new ArrayList<PolicyKey>(
PolicyKeysUtil.getAllPolicyKeyList());
rsKeys = new ArrayList<ResourceKey>(
PolicyKeysUtil.getAllResourceKeyList());
opKeys = new ArrayList<OperationKey>(
PolicyKeysUtil.getAllOperationKeyList());
sKeys = new ArrayList<SubjectKey>(
PolicyKeysUtil.getAllSubjectKeyList());
sgKeys = new ArrayList<SubjectGroupKey>(
PolicyKeysUtil.getAllSubjectGroupKeyList());
}
service.getEntityHistory(from, to, poKeys, rsKeys, opKeys, sKeys,
sgKeys, new AsyncCallback<GetEntityHistoryResponse>() {
public void onFailure(final Throwable arg) {
if (arg.getLocalizedMessage().contains("500")) {
view.error(PolicyAdminUIUtil.messages
.serverError(PolicyAdminUIUtil.policyAdminConstants
.genericErrorMessage()));
} else {
view.error(PolicyAdminUIUtil.messages
.serverError(arg.getLocalizedMessage()));
}
}
public void onSuccess(final GetEntityHistoryResponse result) {
List<EntityHistory> entities = new ArrayList<EntityHistory>(
result.getEntities());
if (entities != null && entities.size() > 0) {
view.setEntities(entities);
} else
view.setEntities(null);
}
});
}
}