/******************************************************************** * 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.presenter.policy; 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.Display; import org.ebayopensource.turmeric.policy.adminui.client.SupportedService; import org.ebayopensource.turmeric.policy.adminui.client.model.PolicyAdminUIService; import org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroup; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupKey; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroupQuery; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.FindSubjectGroupsResponse; import org.ebayopensource.turmeric.policy.adminui.client.presenter.AbstractGenericPresenter; 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.History; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HasWidgets; /** * SubjectGroupViewPresenter. */ public class SubjectGroupViewPresenter extends AbstractGenericPresenter { /** The Constant PRESENTER_ID. */ public static final String PRESENTER_ID = "SubjectGroupView"; /** The event bus. */ protected HandlerManager eventBus; /** The view. */ protected SubjectGroupViewDisplay view; /** The group. */ protected SubjectGroup group; /** The service map. */ protected Map<SupportedService, PolicyAdminUIService> serviceMap; /** * The Interface SubjectGroupViewDisplay. */ public interface SubjectGroupViewDisplay extends PolicyPageTemplateDisplay { /** * Sets the name. * * @param name * the new name */ void setName(String name); /** * Gets the name. * * @return the name */ String getName(); /** * Sets the description. * * @param desc * the new description */ void setDescription(String desc); /** * Gets the description. * * @return the description */ String getDescription(); /** * Sets the type. * * @param type * the new type */ void setType(String type); /** * Gets the type. * * @return the type */ String getType(); /** * Gets the cancel button. * * @return the cancel button */ HasClickHandlers getCancelButton(); /** * Sets the subjects. * * @param subjects * the new subjects */ void setSubjects(List<String> subjects); /** * Error. * * @param msg * the msg */ void error(String msg); /** * Clear. */ void clear(); } /** * Instantiates a new subject group view presenter. * * @param eventBus * the event bus * @param view * the view * @param serviceMap * the service map */ public SubjectGroupViewPresenter(final HandlerManager eventBus, final SubjectGroupViewDisplay view, 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. * AbstractGenericPresenter#getView() */ @Override protected final Display getView() { return view; } /* * (non-Javadoc) * * @see * org.ebayopensource.turmeric.policy.adminui.client.presenter.Presenter * #getId() */ @Override public final String getId() { return PRESENTER_ID; } /** * Bind. */ public final void bind() { this.view.getCancelButton().addClickHandler(new ClickHandler() { public void onClick(final ClickEvent event) { view.clear(); // Just go back to the summary HistoryToken token = makeToken(PolicyController.PRESENTER_ID, SubjectGroupSummaryPresenter.PRESENTER_ID, null); History.newItem(token.toString(), true); } }); } /* * (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) */ public void go(final HasWidgets container, final HistoryToken token) { // Get the id from the token final String name = token .getValue(HistoryToken.SELECTED_SUBJECT_GROUP_TOKEN); final String type = token .getValue(HistoryToken.SELECTED_SUBJECT_GROUP_TYPE_TOKEN); if (name != null) { container.clear(); view.activate(); container.add(view.asWidget()); // Get the SubjectGroup being viewed final PolicyQueryService service = (PolicyQueryService) serviceMap .get(SupportedService.POLICY_QUERY_SERVICE); SubjectGroupQuery query = new SubjectGroupQuery(); query.setIncludeSubjects(true); SubjectGroupKey key = new SubjectGroupKey(); key.setName(name); key.setType(type); query.setGroupKeys(Collections.singletonList(key)); service.findSubjectGroups(query, new AsyncCallback<FindSubjectGroupsResponse>() { 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 FindSubjectGroupsResponse response) { if (response.getGroups() != null && response.getGroups().size() > 0) { group = response.getGroups().get(0); view.setName(group.getName()); view.setType(group.getType()); view.setDescription(group.getDescription()); view.setSubjects(group.getSubjects()); } } }); } } }