/*******************************************************************************
* Copyright (c) 2011 Oak Ridge National Laboratory.
* 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
******************************************************************************/
package org.csstudio.data.values.internal;
import java.util.Arrays;
import org.csstudio.data.values.IEnumeratedMetaData;
/** Implementation of {@link IEnumeratedMetaData}.
* @author Kay Kasemir
*/
public class EnumeratedMetaData implements IEnumeratedMetaData
{
private static final long serialVersionUID = 1L;
/** The enumeration strings for the possible values of an EnumSample. */
private final String states[];
/** Constructor for meta data from pieces.
* @param states array of states. Must not be <code>null</code>
*/
public EnumeratedMetaData(final String states[])
{
if (states == null)
throw new IllegalArgumentException("Zero state array"); //$NON-NLS-1$
this.states = states;
}
/** {@inheritDoc} */
@Override
public final String[] getStates()
{ return states; }
/** {@inheritDoc} */
@Override
public String getState(final int state)
{
if (state < 0 || state >= states.length)
return "<enum " + state + ">"; //$NON-NLS-1$ //$NON-NLS-2$
return states[state];
}
/** @return <code>true</code> if given meta data equals this */
@Override
public boolean equals(final Object obj)
{
if (obj == this)
return true;
if (! (obj instanceof IEnumeratedMetaData))
return false;
final IEnumeratedMetaData other = (IEnumeratedMetaData) obj;
return Arrays.equals(states, other.getStates());
}
/** @return Hash code based on state strings */
@Override
public int hashCode()
{
return Arrays.hashCode(states);
}
/** {@inheritDoc} */
@SuppressWarnings("nls")
@Override
public String toString()
{
final StringBuffer buf = new StringBuffer();
buf.append("EnumeratedMetaData: " + states.length + " states:\n");
for (String state : states)
buf.append(" '" + state + "'\n");
return buf.toString();
}
}