001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007-2008 Three Rings Design, Inc. 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without 008 * modification, are permitted provided that the following conditions 009 * are met: 010 * 1. Redistributions of source code must retain the above copyright 011 * notice, this list of conditions and the following disclaimer. 012 * 2. Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in the 014 * documentation and/or other materials provided with the distribution. 015 * 3. Neither the name of the copyright owner nor the names of contributors 016 * may be used to endorse or promote products derived from this software 017 * without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 029 * POSSIBILITY OF SUCH DAMAGE. 030 */ 031 package com.threerings.antidote.property; 032 033 import com.threerings.antidote.EnumHelper; 034 import com.threerings.antidote.field.Field; 035 036 import static com.threerings.antidote.MutabilityHelper.objectIsSet; 037 038 039 /** 040 * A {@link BaseProperty} that holds an {@link Enum} object. 041 */ 042 public class EnumProperty<T extends Enum<T>> extends BaseProperty<T> 043 { 044 // from BaseProperty 045 public EnumProperty (String name, Field field, Class<T> enumClass) 046 { 047 super(name, field); 048 _enumClass = enumClass; 049 } 050 051 // from BaseProperty 052 public EnumProperty (String name, Field field, Class<T> enumClass, T defaultValue) 053 { 054 super(name, field, defaultValue); 055 _enumClass = enumClass; 056 } 057 058 @Override // from BaseProperty 059 protected T validateProperty () 060 { 061 final T enumType = EnumHelper.parseEnum(getRawValue(), _enumClass); 062 063 if (objectIsSet(enumType)) { 064 return enumType; 065 066 } else { 067 final StringBuilder builder = new StringBuilder(); 068 for (final Enum<? extends Enum<?>> type : _enumClass.getEnumConstants()) { 069 if (builder.length() > 0) { 070 builder.append(", "); 071 } 072 builder.append(type.name().toLowerCase(EnumHelper.LOCALE)); 073 } 074 075 appendViolation(new InvalidEnumViolation(this, builder.toString())); 076 return null; 077 } 078 } 079 080 /** The Enum Class for the enum held in this Property. */ 081 private final Class<T> _enumClass; 082 }