/* * Copyright 2014 OpenMarket Ltd * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.matrix.androidsdk.rest.model.bingrules; import android.text.TextUtils; import java.util.ArrayList; import java.util.List; public class BingRuleSet { public List<BingRule> override; public List<ContentRule> content; public List<BingRule> room; public List<BingRule> sender; public List<BingRule> underride; /** * Constructor */ public BingRuleSet() { override = new ArrayList<>(); content = new ArrayList<>(); room = new ArrayList<>(); sender = new ArrayList<>(); underride = new ArrayList<>(); } /** * Find a rule from its rule ID. * @param rules the rules list. * @param ruleID the rule ID. * @return the bing rule if it exists, else null. */ private BingRule findRule(List<BingRule> rules, String ruleID) { for(BingRule rule : rules) { if (TextUtils.equals(ruleID, rule.ruleId)) { return rule; } } return null; } private List<BingRule> getBingRulesList(String kind) { List<BingRule> res = null; if (BingRule.KIND_OVERRIDE.equals(kind)) { res = override; } else if (BingRule.KIND_ROOM.equals(kind)) { res = room; } else if (BingRule.KIND_SENDER.equals(kind)) { res = sender; } else if (BingRule.KIND_UNDERRIDE.equals(kind)) { res = underride; } return res; } /** * Add a rule from the bingRules * @param rule the rule to add. */ public void addAtTop(BingRule rule) { if (TextUtils.equals(BingRule.KIND_CONTENT, rule.kind)) { if (null != content) { if (rule instanceof ContentRule) { content.add(0, (ContentRule) rule); } } } else { List<BingRule> rulesList = getBingRulesList(rule.kind); if (null != rulesList) { rulesList.add(0, rule); } } } /** * Remove a rule from the bingRules * @param rule the rule to delete. * @return true if the rule has been deleted */ public boolean remove(BingRule rule) { boolean res = false; if (BingRule.KIND_CONTENT.equals(rule.kind)) { if (null != content) { res = content.remove(rule); } } else { List<BingRule> rulesList = getBingRulesList(rule.kind); if (null != rulesList) { res = rulesList.remove(rule); } } return res; } /** * Find a rule from its rule ID. * @param rules the rules list. * @param ruleID the rule ID. * @return the bing rule if it exists, else null. */ private BingRule findContentRule(List<ContentRule> rules, String ruleID) { for(BingRule rule : rules) { if (TextUtils.equals(ruleID, rule.ruleId)) { return rule; } } return null; } /** * Find a rule from its ruleID. * @param ruleId a RULE_ID_XX value * @return the matched bing rule or null it doesn't exist. */ public BingRule findDefaultRule(String ruleId) { BingRule rule = null; // sanity check if (null != ruleId) { if (TextUtils.equals(BingRule.RULE_ID_CONTAIN_USER_NAME, ruleId)) { rule = findContentRule(content, ruleId); } else { // assume that the ruleId is unique. rule = findRule(override, ruleId); if (null == rule) { rule = findRule(underride, ruleId); } } } return rule; } /** * Return the content rules list. * @return the content rules list. */ public List<BingRule> getContentRules() { ArrayList<BingRule> res = new ArrayList<>(); if (null != content) { for(BingRule rule : content) { if (!rule.ruleId.startsWith(".m.")) { res.add(rule); } } } return res; } /** * Return the room rules list. * @return the room rules list. */ public List<BingRule> getRoomRules() { if (null == room) { return new ArrayList<>(); } else { return room; } } /** * Return the room rules list. * @return the sender rules list. */ public List<BingRule> getSenderRules() { if (null == sender) { return new ArrayList<>(); } else { return sender; } } }