/******************************************************************************* * 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.Collection; import java.util.HashMap; import java.util.HashSet; 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.ExtraField; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicy; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.GenericPolicyImpl; 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.GetPoliciesResponse; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicySubjectAssignment; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.QueryCondition; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Resource; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Rule; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.RuleAttribute; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.Subject; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectGroup; import org.ebayopensource.turmeric.policy.adminui.client.model.policy.SubjectType; import com.google.gwt.core.client.GWT; 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 PolicyEditPresenter. */ public abstract class PolicyEditPresenter extends PolicyCreatePresenter { /** The original policy id. */ protected String originalPolicyId; /** The original policy type. */ protected String originalPolicyType; // protected final List<Rule> rules = new ArrayList<Rule>(); /** * Instantiates a new policy edit presenter. * * @param eventBus * the event bus * @param view * the view * @param serviceMap * the service map */ public PolicyEditPresenter(HandlerManager eventBus, PolicyEditDisplay view, Map<SupportedService, PolicyAdminUIService> serviceMap) { super(eventBus, view, serviceMap); } /* * Interface definitions */ /** * The Interface PolicyEditDisplay. */ public interface PolicyEditDisplay extends PolicyCreateDisplay { } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.PolicyCreatePresenter#go(com.google.gwt.user.client.ui.HasWidgets, org.ebayopensource.turmeric.policy.adminui.client.model.HistoryToken) */ @Override public void go(HasWidgets container, final HistoryToken token) { super.go(container, token); validateEnablingPrivileges(token); loadAssignments(token); } //TURMERIC-1402 - To check privileges for updating Status at edition time private void validateEnablingPrivileges(final HistoryToken token) { final String statusEditable = token.getValue(HistoryToken.POLICY_STATUS_EDITABLE); this.view.setStatusListboxEnabled(Boolean.parseBoolean(statusEditable)); } private void loadAssignments(final HistoryToken token) { originalPolicyId = token .getValue(HistoryToken.SELECTED_POLICY_TOKEN_ID); originalPolicyType = token .getValue(HistoryToken.SELECTED_POLICY_TOKEN_TYPE); PolicyKey pKey = new PolicyKey(); pKey.setId(Long.valueOf(originalPolicyId)); pKey.setType(originalPolicyType); ArrayList<PolicyKey> poKeys = new ArrayList<PolicyKey>(); poKeys.add(pKey); QueryCondition condition = new QueryCondition(); condition.addQuery(new QueryCondition.Query( QueryCondition.ActivePoliciesOnlyValue.FALSE)); service.findPolicies(null, poKeys, null, null, null, null, null, condition, new AsyncCallback<PolicyQueryService.GetPoliciesResponse>() { public void onFailure(Throwable arg) { if (arg.getLocalizedMessage().contains("500")) { view.error(PolicyAdminUIUtil.messages .serverError(PolicyAdminUIUtil.policyAdminConstants .genericErrorMessage())); } else { view.error(PolicyAdminUIUtil.messages.serverError(arg .getLocalizedMessage())); } GWT.log("findPolicies:Fail"); } public void onSuccess(GetPoliciesResponse result) { GWT.log("findPolicies:Success"); Collection<GenericPolicy> policies = result .getPolicies(); for (GenericPolicy policy : policies) { resourceAssignments = new ArrayList<Resource>(); resourceAssignments.addAll(policy.getResources()); if(assignedUniqueResources == null){ assignedUniqueResources = new HashSet<String>(); } for (Resource assignment : resourceAssignments){ assignedUniqueResources.add(assignment .getResourceType() + assignment.getResourceName()); } view.getResourceContentView().setAssignments( resourceAssignments); subjectAssignments = new ArrayList<PolicySubjectAssignment>(); subjectAssignments .addAll(fetchSubjectAndSGAssignment(policy)); for(PolicySubjectAssignment assignment : subjectAssignments){ subjectTypes.remove(assignment.getSubjectType()); } view.getSubjectContentView().setAvailableSubjectTypes(subjectTypes); view.getSubjectContentView().setAssignments( subjectAssignments); view.setPolicyName(policy.getName()); view.setPolicyDesc(policy.getDescription()); view.setPolicyType(policy.getType()); view.setPolicyStatus(policy.getEnabled()); if ("RL".equalsIgnoreCase(policy.getType())) { setExtraFieldView(policy); } break; } } }); } /** * Sets the extra field view. * * @param policy * the new extra field view */ protected void setExtraFieldView(GenericPolicy policy) { if (policy.getRules() != null && policy.getRules().size() > 0) { Rule rule = policy.getRules().get(0); if (rule.getAttributeList() != null && rule.getAttributeList().size() > 0) { for (RuleAttribute attribute : rule.getAttributeList()) { if (RuleAttribute.NotifyKeys.NotifyEmails.name().equals( attribute.getKey())) { // Policy Based Email Address view.setExtraFieldValue(1, attribute.getValue(), false); } if (RuleAttribute.NotifyKeys.NotifyActive.name().equals( attribute.getKey())) { // Subject Based Email Address view.setExtraFieldValue(2, attribute.getValue(), false); } } } // Effect Duration view.setExtraFieldValue(3, rule.getEffectDuration().toString(), false); // Rollover period view.setExtraFieldValue(4, rule.getRolloverPeriod().toString(), false); // Priority view.setExtraFieldValue(5, rule.getPriority().toString(), false); // Priority view.setExtraFieldValue(6, rule.getEffect().toString(), false); // Condition try { view.setExtraFieldValue(7, rule.getCondition().getExpression() .getPrimitiveValue().getValue(), false); } catch (NullPointerException ex) { // do nothing...no condition value GWT.log("No condition Values "); } } } private List<PolicySubjectAssignment> fetchSubjectAndSGAssignment( GenericPolicy policy) { HashMap<String, List<Subject>> sAssignMap = new HashMap<String, List<Subject>>(); for (Subject subject : policy.getSubjects()) { String type = subject.getType(); // if(subject.getName() != null){ if (!sAssignMap.containsKey(type)) { List list = new ArrayList(); list.add(subject); sAssignMap.put(type, list); } else { List list = (List) sAssignMap.get(type); list.add(subject); sAssignMap.put(type, list); } // }else{ // //means it has selectAllSubject activated // SubjectImpl allSb = new SubjectImpl(); // allSb.setType(type); // allSb.setName(PolicyAdminUIUtil.policyAdminConstants.all()); // if (!sAssignMap.containsKey(type)) { // List list = new ArrayList(); // list.add(allSb); // sAssignMap.put(type, list); // } else { // List list = (List) sAssignMap.get(type); // list.add(allSb); // sAssignMap.put(type, list); // } // break; // } } HashMap<String, List<Subject>> exclSAssignMap = new HashMap<String, List<Subject>>(); for (Subject subject : policy.getExclusionSubjects()) { String type = subject.getType(); if (!exclSAssignMap.containsKey(type)) { List list = new ArrayList(); list.add(subject); exclSAssignMap.put(type, list); } else { List list = (List) exclSAssignMap.get(type); list.add(subject); exclSAssignMap.put(type, list); } } HashMap<String, List<SubjectGroup>> sgAssignMap = new HashMap<String, List<SubjectGroup>>(); for (SubjectGroup subjectGroup : policy.getSubjectGroups()) { String type = subjectGroup.getType(); if (!sgAssignMap.containsKey(type)) { List list = new ArrayList(); list.add(subjectGroup); sgAssignMap.put(type, list); } else { List list = (List) sgAssignMap.get(type); list.add(subjectGroup); sgAssignMap.put(type, list); } } HashMap<String, List<SubjectGroup>> exclSGAssignMap = new HashMap<String, List<SubjectGroup>>(); for (SubjectGroup subjectGroup : policy.getExclusionSG()) { String type = subjectGroup.getType(); if (!exclSGAssignMap.containsKey(type)) { List list = new ArrayList(); list.add(subjectGroup); exclSGAssignMap.put(type, list); } else { List list = (List) exclSGAssignMap.get(type); list.add(subjectGroup); exclSGAssignMap.put(type, list); } } // Generates the PolicySubjectAssignment objects List<PolicySubjectAssignment> polSubAssignmentList = new ArrayList<PolicySubjectAssignment>(); //there are 4 subject types according the metadata info for(String subjectType : SubjectType.getValues()){ PolicySubjectAssignment polSubAssignment = null; if(sAssignMap.containsKey(subjectType)){ if(polSubAssignment == null){ polSubAssignment = new PolicySubjectAssignment(); polSubAssignment.setSubjectType(subjectType); } polSubAssignment.setSubjects(sAssignMap.get(subjectType)); } if(exclSAssignMap.containsKey(subjectType)){ if(polSubAssignment == null){ polSubAssignment = new PolicySubjectAssignment(); polSubAssignment.setSubjectType(subjectType); } polSubAssignment.setExclusionSubjects(exclSAssignMap.get(subjectType)); } if(sgAssignMap.containsKey(subjectType)){ if(polSubAssignment == null){ polSubAssignment = new PolicySubjectAssignment(); polSubAssignment.setSubjectType(subjectType); } polSubAssignment.setSubjectGroups(sgAssignMap.get(subjectType)); } if(exclSGAssignMap.containsKey(subjectType)){ if(polSubAssignment == null){ polSubAssignment = new PolicySubjectAssignment(); polSubAssignment.setSubjectType(subjectType); } polSubAssignment.setExclusionSubjectGroups(exclSGAssignMap.get(subjectType)); } if(polSubAssignment != null){ polSubAssignmentList.add(polSubAssignment); } } return polSubAssignmentList; } /** * Gets the policy. * * @param name * the name * @param type * the type * @param description * the description * @param resources * the resources * @param subjectAssignments * the subject assignments * @param enabled * the enabled * @param id * the id * @param rules * the rules * @return the policy */ public GenericPolicy getPolicy(String name, String type, String description, List<Resource> resources, List<PolicySubjectAssignment> subjectAssignments, boolean enabled, long id, List<Rule> rules) { GenericPolicyImpl p = new GenericPolicyImpl(); p.setName(name); p.setType(type); p.setDescription(description); // update existing one p.setId(id); p.setEnabled(enabled); if (rules != null) { p.setRules(rules); } if (resources != null) p.setResources(new ArrayList<Resource>(resources)); if (subjectAssignments != null) { List<Subject> subjects = new ArrayList<Subject>(); List<Subject> exclusionSubjects = new ArrayList<Subject>(); List<SubjectGroup> groups = new ArrayList<SubjectGroup>(); List<SubjectGroup> exclusionGroups = new ArrayList<SubjectGroup>(); for (PolicySubjectAssignment a : subjectAssignments) { if (a.getSubjects() != null) { subjects.addAll(a.getSubjects()); } if (a.getExclusionSubjects() != null) { exclusionSubjects.addAll(a.getExclusionSubjects()); } if (a.getSubjectGroups() != null) { groups.addAll(a.getSubjectGroups()); } if (a.getExclusionSubjectGroups() != null) { exclusionGroups.addAll(a.getExclusionSubjectGroups()); } } p.setSubjects(subjects); p.setExclusionSubjects(exclusionSubjects); p.setSubjectGroups(groups); p.setExclusionSG(exclusionGroups); } return p; } private void foreach(List<Subject> subjects) { } }