/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package controllers.tenant; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import com.emc.storageos.model.tenant.UserMappingAttributeParam; import com.emc.storageos.model.tenant.UserMappingParam; import com.google.common.collect.Lists; public class UserMappingForm { private static String LINE_BREAK = "\r\n"; public String domain = ""; public List<AttributeMapping> attributes = Lists.newArrayList(); public String groups = ""; public void validate() { // getAttributeValues(); } public UserMappingParam createUserMappingParam() { UserMappingParam userMappingParam = new UserMappingParam(); userMappingParam.setDomain(domain); for (String group : groups.split(LINE_BREAK)) { if (!StringUtils.isBlank(group)) { userMappingParam.getGroups().add(group.trim()); } } List<UserMappingAttributeParam> attributeParams = Lists.newArrayList(); if (!attributes.isEmpty()) { for (AttributeMapping mapping : attributes) { if (mapping != null) { attributeParams.add(mapping.createAttributeParam()); } } } userMappingParam.setAttributes(attributeParams); return userMappingParam; } public static List<UserMappingForm> loadUserMappingForms(List<UserMappingParam> userMappingParamEntries) { List<UserMappingForm> userMappingForms = Lists.newArrayList(); if (userMappingParamEntries != null) { for (UserMappingParam userMappingParam : userMappingParamEntries) { List<AttributeMapping> attributes = Lists.newArrayList(); for (UserMappingAttributeParam attributeParam : userMappingParam.getAttributes()) { AttributeMapping mapping = new AttributeMapping(); mapping.name = attributeParam.getKey(); mapping.values = StringUtils.join(attributeParam.getValues(), LINE_BREAK); attributes.add(mapping); } UserMappingForm form = new UserMappingForm(); form.domain = userMappingParam.getDomain(); form.groups = StringUtils.join(userMappingParam.getGroups(), LINE_BREAK); form.attributes = attributes; userMappingForms.add(form); } } return userMappingForms; } public static List<UserMappingParam> getAddedMappings(List<UserMappingParam> existingUserMappings, List<UserMappingForm> mappingForms) { List<UserMappingParam> added = Lists.newArrayList(); for (UserMappingForm userMappingForm : mappingForms) { if (userMappingForm != null) { boolean found = false; UserMappingParam userMappingParam = userMappingForm.createUserMappingParam(); for (UserMappingParam existingMapping : existingUserMappings) { if (isSameMapping(userMappingParam, existingMapping)) { found = true; break; } } if (!found) { added.add(userMappingParam); } } } return added; } public static List<UserMappingParam> getRemovedMappings(List<UserMappingParam> existingUserMappings, List<UserMappingForm> mappingForms) { List<UserMappingParam> removed = Lists.newArrayList(); for (UserMappingParam existingMapping : existingUserMappings) { if (existingMapping != null) { boolean found = false; for (UserMappingForm userMappingForm : mappingForms) { if (userMappingForm != null) { UserMappingParam userMappingParam = userMappingForm.createUserMappingParam(); if (isSameMapping(userMappingParam, existingMapping)) { found = true; } } } if (!found) { removed.add(existingMapping); } } } return removed; } public static boolean isSameMapping(UserMappingParam left, UserMappingParam right) { if (left == null && right == null) { return true; } if (left == null || right == null) { return false; } if (!left.getDomain().equals(right.getDomain())) { // NOSONAR (Suppressing null pointer dereference of left. When left is null, // previous if handles it. return false; } // Check Groups if (!CollectionUtils.isEqualCollection(left.getGroups(), right.getGroups())) { return false; } // Check Attributes if (left.getAttributes().size() != right.getAttributes().size()) { return false; } for (UserMappingAttributeParam leftAttribute : left.getAttributes()) { boolean found = false; for (UserMappingAttributeParam rightAttribute : right.getAttributes()) { if (leftAttribute.getKey().equals(rightAttribute.getKey())) { if (!CollectionUtils.isEqualCollection(leftAttribute.getValues(), rightAttribute.getValues())) { return false; } found = true; break; } } if (!found) { return false; } } return true; } public static class AttributeMapping { public String name; public String values; public UserMappingAttributeParam createAttributeParam() { UserMappingAttributeParam attributeParam = new UserMappingAttributeParam(); attributeParam.setKey(name); List<String> valueList = Lists.newArrayList(); if (!StringUtils.isBlank(values)) { String[] vals = values.split(LINE_BREAK); for (String val : vals) { valueList.add(val.trim()); } } attributeParam.setValues(valueList); return attributeParam; } } }