/* * @(#)FormatKey.java * * Copyright (c) 2011 Werner Randelshofer, Goldau, Switzerland. * All rights reserved. * * You may not use, copy or modify this file, except in compliance with the * license agreement you entered into with Werner Randelshofer. * For details see accompanying license terms. */ package org.monte.media; import java.io.Serializable; /** * A <em>FormatKey</em> provides type-safe access to an attribute of * a {@link Format}. * <p> * A format key has a name, a type and a value. * * @author Werner Randelshofer * @version $Id: FormatKey.java 299 2013-01-03 07:40:18Z werner $ */ public class FormatKey<T> implements Serializable, Comparable { public static final long serialVersionUID = 1L; /** * Holds a String representation of the attribute key. */ private String key; /** * Holds a pretty name. This can be null, if the value is self-explaining. */ private String name; /** This variable is used as a "type token" so that we can check for * assignability of attribute values at runtime. */ private Class<T> clazz; /** Comment keys are ignored when matching two media formats with each other. */ private boolean comment; /** Creates a new instance with the specified attribute key, type token class, * default value null, and allowing null values. */ public FormatKey(String key, Class<T> clazz) { this(key, key, clazz); } /** Creates a new instance with the specified attribute key, type token class, * default value null, and allowing null values. */ public FormatKey(String key, String name, Class<T> clazz) { this(key,name,clazz,false); } /** Creates a new instance with the specified attribute key, type token class, * default value null, and allowing null values. */ public FormatKey(String key, String name, Class<T> clazz, boolean comment) { this.key = key; this.name = name; this.clazz = clazz; this.comment=comment; } /** * Returns the key string. * @return key string. */ public String getKey() { return key; } /** * Returns the pretty name string. * @return name string. */ public String getName() { return name; } /** Returns the key string. */ @Override public String toString() { return key; } /** * Returns true if the specified value is assignable with this key. * * @param value * @return True if assignable. */ public boolean isAssignable(Object value) { return clazz.isInstance(value); } public boolean isComment() { return comment; } public Class getValueClass() { return clazz; } @Override public int compareTo(Object o) { return compareTo((FormatKey) o); } public int compareTo(FormatKey that) { return this.key.compareTo(that.key); } }