blob: 69d2c00baadc41045f36786b0e3455ff388af042 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 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.activities;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.ui.activities.IIdentifier;
import org.eclipse.ui.activities.IIdentifierListener;
import org.eclipse.ui.activities.IdentifierEvent;
import org.eclipse.ui.internal.util.Util;
final class Identifier implements IIdentifier {
private final static int HASH_FACTOR = 89;
private final static int HASH_INITIAL = Identifier.class.getName()
.hashCode();
private final static Set strongReferences = new HashSet();
private Set activityIds = Collections.EMPTY_SET;
private transient String[] activityIdsAsArray = {};
private boolean enabled;
private transient int hashCode = HASH_INITIAL;
private String id;
private List identifierListeners;
private transient String string;
Identifier(String id) {
if (id == null) {
throw new NullPointerException();
}
this.id = id;
}
public void addIdentifierListener(IIdentifierListener identifierListener) {
if (identifierListener == null) {
throw new NullPointerException();
}
if (identifierListeners == null) {
identifierListeners = new ArrayList();
}
if (!identifierListeners.contains(identifierListener)) {
identifierListeners.add(identifierListener);
}
strongReferences.add(this);
}
public int compareTo(Object object) {
Identifier castedObject = (Identifier) object;
int compareTo = Util.compare(activityIdsAsArray,
castedObject.activityIdsAsArray);
if (compareTo == 0) {
compareTo = Util.compare(enabled, castedObject.enabled);
if (compareTo == 0) {
compareTo = Util.compare(id, castedObject.id);
}
}
return compareTo;
}
public boolean equals(Object object) {
if (!(object instanceof Identifier)) {
return false;
}
final Identifier castedObject = (Identifier) object;
if (!Util.equals(activityIds, castedObject.activityIds)) {
return false;
}
if (!Util.equals(enabled, castedObject.enabled)) {
return false;
}
return Util.equals(id, castedObject.id);
}
void fireIdentifierChanged(IdentifierEvent identifierEvent) {
if (identifierEvent == null) {
throw new NullPointerException();
}
if (identifierListeners != null) {
for (int i = 0; i < identifierListeners.size(); i++) {
((IIdentifierListener) identifierListeners.get(i))
.identifierChanged(identifierEvent);
}
}
}
public Set getActivityIds() {
return activityIds;
}
public String getId() {
return id;
}
public int hashCode() {
if (hashCode == HASH_INITIAL) {
hashCode = hashCode * HASH_FACTOR + Util.hashCode(activityIds);
hashCode = hashCode * HASH_FACTOR + Util.hashCode(enabled);
hashCode = hashCode * HASH_FACTOR + Util.hashCode(id);
if (hashCode == HASH_INITIAL) {
hashCode++;
}
}
return hashCode;
}
public boolean isEnabled() {
return enabled;
}
public void removeIdentifierListener(IIdentifierListener identifierListener) {
if (identifierListener == null) {
throw new NullPointerException();
}
if (identifierListeners != null) {
identifierListeners.remove(identifierListener);
if (identifierListeners.isEmpty()) {
strongReferences.remove(this);
}
}
}
boolean setActivityIds(Set activityIds) {
activityIds = Util.safeCopy(activityIds, String.class);
if (!Util.equals(activityIds, this.activityIds)) {
this.activityIds = activityIds;
this.activityIdsAsArray = (String[]) this.activityIds
.toArray(new String[this.activityIds.size()]);
hashCode = HASH_INITIAL;
string = null;
return true;
}
return false;
}
boolean setEnabled(boolean enabled) {
if (enabled != this.enabled) {
this.enabled = enabled;
hashCode = HASH_INITIAL;
string = null;
return true;
}
return false;
}
public String toString() {
if (string == null) {
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append('[');
stringBuffer.append(activityIds);
stringBuffer.append(',');
stringBuffer.append(enabled);
stringBuffer.append(',');
stringBuffer.append(id);
stringBuffer.append(']');
string = stringBuffer.toString();
}
return string;
}
}