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 }