001    /*
002     * PropertyEditorUtil.java
003     *
004     * Created on August 16, 2006, 7:09 PM
005     *
006     * To change this template, choose Tools | Template Manager
007     * and open the template in the editor.
008     */
009    
010    package org.jdesktop.swingx.editors;
011    
012    import java.lang.reflect.Constructor;
013    import java.lang.reflect.InvocationTargetException;
014    
015    /**
016     *
017     * @author joshy
018     */
019    public class PropertyEditorUtil {
020        //the text could be in many different formats. All of the supported formats are as follows:
021        //(where x and y are doubles of some form)
022        //[x,y]
023        //[x y]
024        //x,y]
025        //[x,y
026        //[ x , y ] or any other arbitrary whitespace
027        // x , y ] or any other arbitrary whitespace
028        //[ x , y  or any other arbitrary whitespace
029        //x,y
030        // x , y (or any other arbitrary whitespace)
031        //x y
032        // (empty space)
033        //null
034        //[]
035        //[ ]
036        //any other value throws an IllegalArgumentException
037        public static Object createValueFromString(String text, int count, Class objectClass, Class paramClass) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
038            // strip all extra whitespace
039            text = text.replaceAll("[\\[|,| |\\]]"," ");
040            text = text.replaceAll("\\s+"," ");
041            text = text.trim();
042    //        u.p("text = " + text);
043            if (text == null || text.equals("") || text.equals("null")) {
044                return null;
045            }
046            // split by spaces
047            String[] strs = text.split(" ");
048    //        u.p("split:");
049    //        u.p(strs);
050    //        u.p("len = " + strs.length);
051            if(strs.length != count) {
052                return null;
053            }
054            Object[] params = new Object[count];
055            Class[] paramClasses = new Class[count];
056            for(int i=0; i<strs.length; i++) {
057                if(paramClass == int.class) {
058                    params[i] = Integer.valueOf(strs[i]);
059                    paramClasses[i] = paramClass;
060                }
061                if(paramClass == double.class) {
062                    params[i] = Double.valueOf(strs[i]);
063                    paramClasses[i] = paramClass;
064                }
065            }
066    //        u.p("parms = ");
067    //        u.p(params);
068            Constructor con = objectClass.getConstructor(paramClasses);
069            return con.newInstance(params);
070        }
071        
072    }