001 /*
002 * Copyright 2002-2006 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.convert.support;
017
018 import org.springframework.binding.convert.ConversionContext;
019 import org.springframework.binding.convert.support.AbstractConverter;
020 import org.springframework.binding.value.support.ListListModel;
021 import org.springframework.core.ReflectiveVisitorHelper;
022
023 import javax.swing.*;
024 import java.util.ArrayList;
025 import java.util.Arrays;
026 import java.util.Collection;
027 import java.util.List;
028
029 /**
030 * @author Mathias Broekelmann
031 *
032 */
033 public class ListModelConverter extends AbstractConverter {
034
035 private static final Class[] TARGET_CLASSES = new Class[] { ListModel.class };
036
037 private static final Class[] SOURCE_CLASSES = new Class[] { Collection.class, List.class, Object[].class,
038 ListModel.class, Object.class };
039
040 private final ReflectiveVisitorHelper visitorHelper = new ReflectiveVisitorHelper();
041
042 protected Object doConvert(Object sourceValue, Class targetClass, ConversionContext context) throws Exception {
043 return visitorHelper.invokeVisit(this, sourceValue);
044 }
045
046 public Class[] getSourceClasses() {
047 return SOURCE_CLASSES;
048 }
049
050 public Class[] getTargetClasses() {
051 return TARGET_CLASSES;
052 }
053
054 ListModel visit(ListModel listModel) {
055 return listModel;
056 }
057
058 ListModel visit(List list) {
059 return new ListListModel(list);
060 }
061
062 ListModel visit(Collection collection) {
063 return visit(new ArrayList(collection));
064 }
065
066 ListModel visit(Object[] array) {
067 return visit(Arrays.asList(array));
068 }
069
070 ListModel visit(Object object) {
071 if(object instanceof Object[]) {
072 return visit((Object[])object);
073 }
074 return visit(new Object[] { object });
075 }
076 }