| /******************************************************************************* |
| * Copyright (c) 2004, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.about; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * Utility class used to associate BundleInfo's that have the same provider and |
| * image. The algorithm in <code>java.util.zip.CRC32</code> is used to determine |
| * image identity. |
| */ |
| public class AboutFeaturesButtonManager { |
| private Map providerMap = new HashMap(); |
| |
| private static class Key { |
| public String providerName; |
| |
| public Long crc; |
| |
| /** |
| * @param crc must not be null |
| */ |
| public Key(String providerName, Long crc) { |
| this.providerName = providerName; |
| this.crc = crc; |
| } |
| |
| public boolean equals(Object o) { |
| if (!(o instanceof Key)) { |
| return false; |
| } |
| Key other = (Key) o; |
| if (!providerName.equals(other.providerName)) { |
| return false; |
| } |
| return crc.equals(other.crc); |
| } |
| |
| public int hashCode() { |
| return providerName.hashCode(); |
| } |
| } |
| |
| /** |
| * @return true if a button should be added (i.e., the argument has an image |
| * and it does not already have a button) |
| */ |
| public boolean add(AboutBundleGroupData info) { |
| // no button for features without an image |
| Long crc = info.getFeatureImageCrc(); |
| if (crc == null) { |
| return false; |
| } |
| |
| String providerName = info.getProviderName(); |
| Key key = new Key(providerName, crc); |
| |
| List infoList = (List) providerMap.get(key); |
| if (infoList != null) { |
| infoList.add(info); |
| return false; |
| } |
| |
| infoList = new ArrayList(); |
| infoList.add(info); |
| providerMap.put(key, infoList); |
| return true; |
| } |
| |
| /** |
| * Return an array of all bundle groups that share the argument's provider and |
| * image. Returns an empty array if there isn't any related information. |
| */ |
| public AboutBundleGroupData[] getRelatedInfos(AboutBundleGroupData info) { |
| // if there's no image, then there won't be a button |
| Long crc = info.getFeatureImageCrc(); |
| if (crc == null) { |
| return new AboutBundleGroupData[0]; |
| } |
| |
| String providerName = info.getProviderName(); |
| Key key = new Key(providerName, crc); |
| |
| List infoList = (List) providerMap.get(key); |
| if (infoList == null) { |
| return new AboutBundleGroupData[0]; |
| } |
| |
| return (AboutBundleGroupData[]) infoList |
| .toArray(new AboutBundleGroupData[0]); |
| } |
| } |