blob: b9f22d3138d546ee042a2b9e22ab063717d3d509 [file] [log] [blame]
/*******************************************************************************
* 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]);
}
}