/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License, * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.xabber.android.data.roster; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * Contains information about resources for specified bare address. * * @author alexander.ivanov */ class ResourceContainer { /** * List of available resources for its STRING-PREPed resources. */ private final Map<String, ResourceItem> resourceItems; /** * Best resource. */ private ResourceItem best; public ResourceContainer() { resourceItems = new HashMap<String, ResourceItem>(); best = null; } /** * @return Best resource according priority. <code>null</code> can be * returned. */ ResourceItem getBest() { return best; } /** * Update information about best resource. */ void updateBest() { String bestKey = null; ResourceItem bestResource = null; for (Entry<String, ResourceItem> entry : resourceItems.entrySet()) { String key = entry.getKey(); ResourceItem resource = entry.getValue(); if (bestResource == null) { bestKey = key; bestResource = resource; } else { int result = resource.compareTo(bestResource); if (result > 0 || (result == 0 && key.compareTo(bestKey) > 0)) bestResource = resource; } } this.best = bestResource; } /** * @param resource * @return Resource item for specified resource name. <code>null</code> can * be returned. */ ResourceItem get(String resource) { return resourceItems.get(resource); } /** * Adds new resource item. * * @param resource * @param resourceItem */ void put(String resource, ResourceItem resourceItem) { resourceItems.put(resource, resourceItem); } /** * Removes resource item. * * @param resource */ void remove(String resource) { resourceItems.remove(resource); } /** * @return Collection with available resources. */ Collection<ResourceItem> getResourceItems() { return Collections.unmodifiableCollection(resourceItems.values()); } }