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 */ 017 018 package org.springframework.richclient.form; 019 020 import java.util.Collections; 021 import java.util.HashMap; 022 import java.util.Map; 023 024 import org.springframework.richclient.factory.AbstractControlFactory; 025 import org.springframework.richclient.form.binding.BindingFactory; 026 import org.springframework.util.Assert; 027 028 /** 029 * Abstract <code>FormUIProvider</code> implementation. Extenders only need to implement 030 * the <code>createControl()</code> and <code>getComponent(String id)</code> methods. 031 * 032 * @author Peter De Bruycker 033 */ 034 public abstract class AbstractFormUIProvider extends AbstractControlFactory implements FormUIProvider { 035 private boolean bound = false; 036 private String[] properties; 037 private Map contextMap = new HashMap(); 038 039 public void bind(BindingFactory factory, Form form) { 040 Assert.state(properties != null && properties.length > 0, "Properties must be set"); 041 042 bound = true; 043 044 for (int i = 0; i < properties.length; i++) { 045 factory.bindControl(getComponent(properties[i]), properties[i], getContext(properties[i])); 046 } 047 } 048 049 public Map getContext(String propertyPath) { 050 return contextMap.containsKey(propertyPath) ? (Map)contextMap.get(propertyPath) : Collections.EMPTY_MAP; 051 } 052 053 public void setContext(String propertyPath, Map context) { 054 contextMap.put(propertyPath, context); 055 } 056 057 public void setProperties(String[] properties) { 058 Assert.state(!bound, "You cannot set the form properties after the binding"); 059 060 this.properties = properties; 061 } 062 063 public String[] getProperties() { 064 return properties; 065 } 066 067 }