litesoft
@ 821
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.core.util; import java.io.*; import java.util.*; import org.litesoft.core.typeutils.*; public class HintManager implements Hintable, Serializable { private static final long serialVersionUID = 1L; public static final HintManager NULL = new NullHintManager(); public HintManager addAll( Hintable pHintable ) { return ((pHintable != null) && pHintable.anyHints()) ? LLaddAll( pHintable.getHints() ) : this; } public HintManager addAll( Hint[] pHints ) { return (pHints != null) ? LLaddAll( pHints ) : this; } private HintManager LLaddAll( Hint[] pHints ) { HintManager rv = this; for ( int i = 0; i < pHints.length; i++ ) { Hint hint = pHints[i]; if ( hint != null ) { (rv = rv.aboutToAdd()).addHint( hint ); } } return rv; } private Map<String, Hint> mNamesToHints = new HashMap<String, Hint>(); public HintManager aboutToAdd() { return this; } public boolean anyHints() { return !mNamesToHints.isEmpty(); } private transient Hint[] mHintsAsArray = null; /** * @return !null and No Nulls */ public synchronized Hint[] getHints() { if ( mHintsAsArray == null ) { mHintsAsArray = mNamesToHints.isEmpty() ? EMPTY_ARRAY : toArray(); } return mHintsAsArray; } private Hint[] toArray() { Hint[] rv = new Hint[mNamesToHints.size()]; int rvAt = 0; for ( Iterator<Hint> it = mNamesToHints.values().iterator(); it.hasNext(); ) { rv[rvAt++] = it.next(); } return rv; } /** * Return the value associated with pName if any. * * @param pName !null or empty * * @return null or value associated with pName * * @throws IllegalArgumentException if pName was null or empty */ public String getHintValue( String pName ) throws IllegalArgumentException { Hint cur = mNamesToHints.get( Strings.assertNotNullNotEmpty( "Name", pName ) ); return (cur != null) ? cur.getValue() : null; } /** * Return the value associated with pName if any. * * @param pName !null or empty * @param pDefaultIfNullOrEmpty return value if the normally found value was null or empty * * @return value associated with pName or default if the normally found value was null or empty * * @throws IllegalArgumentException if pName was null or empty */ public String getHintValue( String pName, String pDefaultIfNullOrEmpty ) throws IllegalArgumentException { String rv = getHintValue( pName ); return Strings.isNotNullOrEmpty( rv ) ? rv : pDefaultIfNullOrEmpty; } /** * Add the Hint (if pValue is not null or empty) and return any previous Hint's Value with the same pName * * @param pName !null or empty * * @return null or previous Hint's Value with the same pName * * @throws IllegalArgumentException if pName was null or empty */ public String addHint( String pName, String pValue ) throws IllegalArgumentException { if ( null == (pValue = Strings.noEmpty( pValue )) ) { return null; } return addHint( new Hint( pName, pValue ) ); } /** * Add the Hint (if it was not null) and return any previous Hint's Value with the same Hint Name * * @return null or previous Hint's Value with the same Hint Name */ public synchronized String addHint( Hint pHint ) { if ( pHint != null ) { mHintsAsArray = null; Hint prev = mNamesToHints.put( pHint.getName(), pHint ); if ( prev != null ) { return prev.getValue(); } } return null; } /** * Remove the Hint indicated by pName and return its Value * * @param pName !null or empty * * @return null if not found or removed Hint's Value * * @throws IllegalArgumentException if pName was null or empty */ public synchronized String removeHint( String pName ) throws IllegalArgumentException { Hint prev = mNamesToHints.remove( Strings.assertNotNullNotEmpty( "Name", pName ) ); if ( (prev != null) ) { mHintsAsArray = null; return prev.getValue(); } return null; } public static class NullHintManager extends HintManager { private static final long serialVersionUID = 1L; public HintManager aboutToAdd() { return new HintManager(); } public String addHint( Hint pHint ) { throw new IllegalStateException( "Attempt to add a Hint to the NULL HintManager" ); } } } |
Commits for litesoft/trunk/Java/core/jvm1.4/src/org/litesoft/core/util/HintManager.java
Revision | Author | Commited | Message |
---|---|---|---|
821 Diff | GeorgeS | Sun 19 Aug, 2012 00:08:41 +0000 | |
802 Diff | GeorgeS | Wed 15 Aug, 2012 04:04:47 +0000 | |
801 Diff | GeorgeS | Wed 15 Aug, 2012 03:59:02 +0000 | |
60 Diff | GeorgeS | Tue 24 Aug, 2010 00:37:36 +0000 | |
49 Diff | GeorgeS | Mon 12 Apr, 2010 02:59:10 +0000 | License Text |
2 | GeorgeS | Sun 07 Feb, 2010 12:50:58 +0000 |