alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 *
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 *
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
 * Microsystems, Inc. All Rights Reserved.
 */
/*
 * IntEditor.java
 *
 * Created on February 28, 2003, 2:15 PM
 */

package org.netbeans.beaninfo.editors;
import java.beans.*;
import java.util.Arrays;
import org.openide.ErrorManager;
import org.openide.explorer.propertysheet.*;
import org.openide.util.NbBundle;
/** An editor for primitive integer types which allows hinting of tag
 *  values and handles whitespace in setAsText better than the default
 *  JDK one.  The following hints are supported:
 *  
  • stringKeys - an array of Strings that should be supplied * from getTags()
  • intValues - an array of ints corresponding to * the values represented by stringKeys. This hint must be present if * the stringKeys hint is used, and the arrays must be of the same length.
  • *
  • codeValues - an array of strings that should be returned from * getJavaInitializationString. This hint is optional when using the * aforementioned hints.

    These hints will also work for the Integer * editor, which wraps an instance of this editor. * * @author Tim Boudreau * @version 1.0 */ public class IntEditor extends ExPropertyEditorSupport { public static final String KEYS = "stringKeys"; //NOI18N public static final String VALS = "intValues"; //NOI18N public static final String CODE_VALS = "codeValues"; //NOI18N String[] keys=null; String[] code=null; int[] values=null; /** Creates a new instance of IntEditor */ public IntEditor() { } protected void attachEnvImpl(PropertyEnv env) { keys = (String[]) env.getFeatureDescriptor().getValue(KEYS); values = (int[]) env.getFeatureDescriptor().getValue(VALS); code = (String[]) env.getFeatureDescriptor().getValue(CODE_VALS); } /** Validate that the values supplied by the PropertyEnv are proper, * so there's not an obscure ArrayIndexOutOfBoundsException some time * later because bad information was supplied. */ protected void validateEnv(PropertyEnv env) { //fail fast validation of illegal values boolean valid = keys == null && values == null && code == null; if (!valid) { valid = keys != null && values != null; if (!valid) { throw new EnvException( "You must specify both an array of keys and an " + //NOI18N "array of values if you specify one. Keys=" + //NOI18N arrToStr(keys) + " Values=" + arrToStr(values)); //NOI18N } else { valid = keys.length == values.length; if (valid) { valid = keys.length > 0 && values.length > 0; } if (!valid) { throw new EnvException( "The arrays of keys and values must have the same " + //NOI18N "length and the length must be > 0. keys.length =" + //NOI18N keys.length + " values.length=" + values.length + " Keys=" + //NOI18N arrToStr(keys) + " Values=" + arrToStr(values)); //NOI18N } else { if (code != null) { valid = code.length == keys.length; if (valid) { valid = code.length > 0; } if (!valid) { throw new EnvException( "The arrays of keys and values and codes must all" + //NOI18N " have the same length, > 0. keys.length =" + //NOI18N keys.length + " values.length=" + values.length + //NOI18N " Code.length=" + code.length + " Keys=" + //NOI18N arrToStr(keys) + " Values=" + arrToStr(values) + " Code=" + arrToStr(code)); //NOI18N } } } } } } private static final String arrToStr(int[] s) { if (s == null) return "null"; //NOI18N StringBuffer out = new StringBuffer(s.length * 3); for (int i=0; i < s.length; i++) { out.append(s[i]); if (i != s.length-1) { out.append(","); //NOI18N } } return out.toString(); } private String getStringRep(int i) { if (keys != null) { try { return keys[i]; } catch (ArrayIndexOutOfBoundsException ae) { //don't internationalize this exception, users never see it throw new IllegalArgumentException( "This property editor uses a set of keyed values, " + //NOI18N "and the value " //NOI18N + i + " is out of range."); //NOI18N } } else { return Integer.toString(i); } } public String getAsText() { Integer i = (Integer) getValue(); String result; if (i != null) { if (keys != null) { int intVal = i.intValue(); int idx = -1; for (int j=0; j < values.length; j++) { if (values[j] == intVal) { idx = j; break; } } if (idx != -1) { result = keys [((Integer) super.getValue()).intValue()]; } else { throw new IllegalArgumentException( "This property editor uses a set of keyed values, " + //NOI18N "and the current value, " //NOI18N + i + ", is not specified."); //NOI18N } } else { result = getValue().toString(); } } else { result = NbBundle.getMessage (IntEditor.class, "NULL"); //NOI18N } return result; } private void doSetAsText(String s) { //fixes issue 23077, confusing error message from NFE. //IllegalArgumentException is a more correct exception to throw //anyway try { setValue(new Integer(Integer.parseInt(s))); } catch (NumberFormatException nfe) { String msg = NbBundle.getMessage( IntEditor.class, "EXC_ILLEGAL_VALUE_TEXT") + s; //NOI18N RuntimeException iae = new IllegalArgumentException(msg); //NOI18N ErrorManager.getDefault().annotate(iae, ErrorManager.USER, msg, msg, nfe, new java.util.Date()); throw iae; } } public void setAsText(String s) { s = s.trim(); if (keys == null) { doSetAsText(s); } else { //use the keys, translate to an int value int idx = Arrays.asList(keys).indexOf(s); if ((idx == -1) || (idx > values.length-1)) { StringBuffer msg = new StringBuffer(); msg.append(NbBundle.getMessage(IntEditor.class, "EXC_ILLEGAL_STRING_TEXT_FIRST")); //NOI18N msg.append(s); msg.append(NbBundle.getMessage(IntEditor.class, "EXC_ILLEGAL_STRING_TEXT_SECOND")); //NOI18N msg.append(arrToStr(keys)); String message = msg.toString(); RuntimeException iae = new IllegalArgumentException(message); ErrorManager.getDefault().annotate(iae, ErrorManager.USER, message, message, iae, new java.util.Date()); throw iae; } else { setValue(new Integer(idx)); } } } public Object getValue () { Integer v = (Integer) super.getValue(); if (values != null) { v = new Integer (values[v.intValue()]); } return v; } //issue 34037 - make setValue calls with illegal values fail-fast public void setValue (Object value) { if ((value instanceof Integer) || (value == null)) { super.setValue (value); } else { throw new IllegalArgumentException ( "Argument to IntEditor.setValue() must be Integer, but was " + //NOI18N value.getClass().getName() + "(=" + //NOI18N value.toString() + ")"); //NOI18N } } public String[] getTags() { return keys; } public String getJavaInitializationString() { String result; if (code == null) { result = getValue().toString(); } else { result = code[((Integer) getValue()).intValue()]; } return result; } }

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.