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; 032 033 034 /** 035 * A static helper utility for dealing with mutable Ant data. 036 */ 037 public class MutabilityHelper 038 { 039 /** 040 * Checks to see if the supplied Object is set, e.g. not null. 041 * It is expected this method would be used as a static import to increase readability as in: 042 * if (objectIsSet(object)) 043 */ 044 public static boolean objectIsSet (Object object) 045 { 046 if (object != null) { 047 return true; 048 } 049 return false; 050 } 051 052 /** 053 * Checks to see if the supplied Object is not set, e.g. null. 054 * It is expected this method would be used as a static import to increase readability as in: 055 * if (objectIsNotSet(object)) 056 */ 057 public static boolean objectIsNotSet (Object object) 058 { 059 return !objectIsSet(object); 060 } 061 062 /** 063 * Return a {@link SetStatus} enum describing the "set" state, of the list of 064 * supplied {@link Mutable} objects. 065 */ 066 public static SetStatus areMutablesSet (Mutable...mutables) 067 { 068 int unset = 0; 069 for (final Mutable mutable : mutables) { 070 if (mutable.isNotSet()) { 071 unset++; 072 } 073 } 074 075 if (unset == mutables.length) { 076 return SetStatus.ALL_UNSET; 077 078 } else if (unset == 0) { 079 return SetStatus.ALL_SET; 080 081 } else { 082 return SetStatus.SOME_UNSET; 083 } 084 } 085 086 /** 087 * Alerts the developer via an {@link RequiresValidationException} that an object was accessed before 088 * validate() or validateField() was called, which is the method where the object is being set. 089 * This is a workaround for Ant's mutable state. 090 * It is expected this method would be used as a static import to increase readability as in: 091 * requiresValidation(object); 092 * @throws RequiresValidationException If the supplied object is null 093 */ 094 public static void requiresValidation (Object notNull) 095 { 096 if (objectIsNotSet(notNull)) { 097 throw new RequiresValidationException(); 098 } 099 } 100 }