Copyright (c) 2005, 2015 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
/*******************************************************************************
* Copyright (c) 2005, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.commands;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.commands.common.NamedHandleObject;
import org.eclipse.core.commands.common.NotDefinedException;
A named handle object that can carry state with it. This state can be used to
override the name or description.
Clients may neither instantiate nor extend this class.
Since: 3.2
/**
* <p>
* A named handle object that can carry state with it. This state can be used to
* override the name or description.
* </p>
* <p>
* Clients may neither instantiate nor extend this class.
* </p>
*
* @since 3.2
*/
abstract class NamedHandleObjectWithState extends NamedHandleObject implements
IObjectWithState {
An empty string array, which can be returned from getStateIds()
if there is no state. /**
* An empty string array, which can be returned from {@link #getStateIds()}
* if there is no state.
*/
private static final String[] NO_STATE = new String[0];
The map of states currently held by this command. If this command has no
state, then this will be null
.
/**
* The map of states currently held by this command. If this command has no
* state, then this will be <code>null</code>.
*/
private Map<String, State> states;
Constructs a new instance of NamedHandleObjectWithState/code>.
Params: - id –
The identifier for this handle; must not be
null
.
/**
* Constructs a new instance of <code>NamedHandleObjectWithState/code>.
*
* @param id
* The identifier for this handle; must not be <code>null</code>.
*/
protected NamedHandleObjectWithState(final String id) {
super(id);
}
@Override
public void addState(final String stateId, final State state) {
if (state == null) {
throw new NullPointerException("Cannot add a null state"); //$NON-NLS-1$
}
if (states == null) {
states = new HashMap<>(3);
}
states.put(stateId, state);
}
@Override
public final String getDescription() throws NotDefinedException {
final String description = super.getDescription(); // Trigger a NDE.
final State descriptionState = getState(INamedHandleStateIds.DESCRIPTION);
if (descriptionState != null) {
final Object value = descriptionState.getValue();
if (value != null) {
return value.toString();
}
}
return description;
}
@Override
public final String getName() throws NotDefinedException {
final String name = super.getName(); // Trigger a NDE, if necessary.
final State nameState = getState(INamedHandleStateIds.NAME);
if (nameState != null) {
final Object value = nameState.getValue();
if (value != null) {
return value.toString();
}
}
return name;
}
@Override
public final State getState(final String stateId) {
if ((states == null) || (states.isEmpty())) {
return null;
}
return states.get(stateId);
}
@Override
public final String[] getStateIds() {
if ((states == null) || (states.isEmpty())) {
return NO_STATE;
}
final Set<String> stateIds = states.keySet();
return stateIds.toArray(new String[stateIds.size()]);
}
@Override
public void removeState(final String id) {
if (id == null) {
throw new NullPointerException("Cannot remove a null id"); //$NON-NLS-1$
}
if (states != null) {
states.remove(id);
if (states.isEmpty()) {
states = null;
}
}
}
}