View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  package org.apache.geronimo.common.propertyeditor;
19  
20  import java.beans.PropertyEditor;
21  import java.beans.PropertyEditorSupport;
22  import java.lang.reflect.Array;
23  import java.util.LinkedList;
24  import java.util.List;
25  import java.util.StringTokenizer;
26  
27  /**
28   * Adapter for editing array types.
29   *
30   * @version $Rev: 356022 $ $Date: 2005-12-11 12:58:34 -0800 (Sun, 11 Dec 2005) $
31   */
32  public final class ArrayPropertyEditorAdapter extends PropertyEditorSupport {
33      private Class type;
34      private PropertyEditor editor;
35  
36      public ArrayPropertyEditorAdapter(final Class type, final PropertyEditor editor) {
37          if (type == null) {
38              throw new IllegalArgumentException("Type is null");
39          }
40          if (editor == null) {
41              throw new IllegalArgumentException("Editor is null");
42          }
43  
44          this.type = type;
45          this.editor = editor;
46      }
47  
48      public void setAsText(String text) {
49          if (text == null || text.length() == 0) {
50              setValue(null);
51          } else {
52              StringTokenizer stok = new StringTokenizer(text, ",");
53              final List list = new LinkedList();
54  
55              while (stok.hasMoreTokens()) {
56                  editor.setAsText(stok.nextToken());
57                  list.add(editor.getValue());
58              }
59  
60              Object array = Array.newInstance(type, list.size());
61              for (int i = 0; i < list.size(); i++) {
62                  Array.set(array, i, list.get(i));
63              }
64  
65              setValue(array);
66          }
67      }
68  
69      public String getAsText() {
70          Object[] objects = (Object[]) getValue();
71          if (objects == null || objects.length == 0) {
72              return null;
73          }
74  
75          StringBuffer result = new StringBuffer(String.valueOf(objects[0]));
76          for (int i = 1; i < objects.length; i++) {
77              result.append(",").append(objects[i]);
78          }
79  
80          return result.toString();
81  
82      }
83  }