/*
* Copyright 2001-2013 Stephen Colebourne
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.joda.beans.ui.swing;
import java.io.File;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.URI;
import java.net.URL;
import java.util.Calendar;
import java.util.Currency;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.UUID;
import org.joda.beans.Bean;
import org.joda.beans.BeanBuilder;
import org.joda.beans.BeanDefinition;
import org.joda.beans.JodaBeanUtils;
import org.joda.beans.MetaProperty;
import org.joda.beans.PropertyDefinition;
import org.joda.beans.impl.direct.DirectBeanBuilder;
import org.joda.beans.impl.direct.DirectMetaProperty;
import org.joda.beans.impl.direct.DirectMetaPropertyMap;
import org.joda.beans.ui.BundleResourceResolver;
import org.joda.beans.ui.ResourceResolver;
import org.joda.beans.ui.UISettings;
import org.joda.beans.ui.form.DefaultUIComponentFactory;
import org.joda.beans.ui.form.UIComponentFactory;
import org.joda.beans.ui.swing.type.BigNumberSwingUIComponent;
import org.joda.beans.ui.swing.type.BooleanSwingUIComponent;
import org.joda.beans.ui.swing.type.CurrencySwingUIComponent;
import org.joda.beans.ui.swing.type.DateSwingUIComponent;
import org.joda.beans.ui.swing.type.FloatingSwingUIComponent;
import org.joda.beans.ui.swing.type.IntegralSwingUIComponent;
import org.joda.beans.ui.swing.type.StringListSwingUIComponent;
import org.joda.beans.ui.swing.type.StringSwingUIComponent;
import org.joda.beans.ui.swing.type.TimeZoneSwingUIComponent;
/**
* Settings for the Swing UI.
*/
@BeanDefinition(style = "minimal")
public class SwingUISettings extends UISettings {
/**
* The name of the application bundle.
*/
public static final String SWING_APP_BUNDLE_NAME = "org.joda.beans.ui.swing.SwingAppResources";
/**
* The name of the default bundle.
*/
public static final String SWING_DEFAULT_BUNDLE_NAME = "org.joda.beans.ui.swing.SwingDefaultResources";
/**
* The singleton settings.
*/
public static final SwingUISettings INSTANCE = new SwingUISettings();
/**
* The map of factories, which can be edited.
*/
@PropertyDefinition(validate = "notNull", set = "private")
private final Map<Class<?>, UIComponentFactory> factories = new HashMap<>();
//-------------------------------------------------------------------------
/**
* Creates an instance.
*/
public SwingUISettings() {
factories.put(Boolean.TYPE, DefaultUIComponentFactory.of(BooleanSwingUIComponent.class));
factories.put(Boolean.class, DefaultUIComponentFactory.of(BooleanSwingUIComponent.class));
factories.put(Byte.TYPE, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Byte.class, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Short.TYPE, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Short.class, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Integer.TYPE, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Integer.class, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Long.TYPE, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Long.class, DefaultUIComponentFactory.of(IntegralSwingUIComponent.class));
factories.put(Float.TYPE, DefaultUIComponentFactory.of(FloatingSwingUIComponent.class));
factories.put(Float.class, DefaultUIComponentFactory.of(FloatingSwingUIComponent.class));
factories.put(Double.TYPE, DefaultUIComponentFactory.of(FloatingSwingUIComponent.class));
factories.put(Double.class, DefaultUIComponentFactory.of(FloatingSwingUIComponent.class));
factories.put(BigDecimal.class, DefaultUIComponentFactory.of(BigNumberSwingUIComponent.class));
factories.put(BigInteger.class, DefaultUIComponentFactory.of(BigNumberSwingUIComponent.class));
factories.put(String.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(CharSequence.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(StringBuffer.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(StringBuilder.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(Calendar.class, DefaultUIComponentFactory.of(DateSwingUIComponent.class));
factories.put(GregorianCalendar.class, DefaultUIComponentFactory.of(DateSwingUIComponent.class));
factories.put(Date.class, DefaultUIComponentFactory.of(DateSwingUIComponent.class));
factories.put(Class.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(Package.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(URL.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(URI.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(File.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(InetAddress.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(UUID.class, DefaultUIComponentFactory.of(StringSwingUIComponent.class));
factories.put(Currency.class, DefaultUIComponentFactory.of(CurrencySwingUIComponent.class));
factories.put(TimeZone.class, DefaultUIComponentFactory.of(TimeZoneSwingUIComponent.class));
factories.put(List.class, DefaultUIComponentFactory.of(StringListSwingUIComponent.class));
ResourceResolver res = BundleResourceResolver.of(
SWING_APP_BUNDLE_NAME, SWING_DEFAULT_BUNDLE_NAME,
BundleResourceResolver.APP_BUNDLE_NAME, BundleResourceResolver.DEFAULT_BUNDLE_NAME);
setResourceResolver(res);
}
//------------------------- AUTOGENERATED START -------------------------
///CLOVER:OFF
/**
* The meta-bean for {@code SwingUISettings}.
* @return the meta-bean, not null
*/
public static SwingUISettings.Meta meta() {
return SwingUISettings.Meta.INSTANCE;
}
static {
JodaBeanUtils.registerMetaBean(SwingUISettings.Meta.INSTANCE);
}
@Override
public SwingUISettings.Meta metaBean() {
return SwingUISettings.Meta.INSTANCE;
}
//-----------------------------------------------------------------------
/**
* Gets the map of factories, which can be edited.
* @return the value of the property, not null
*/
public Map<Class<?>, UIComponentFactory> getFactories() {
return factories;
}
/**
* Sets the map of factories, which can be edited.
* @param factories the new value of the property
*/
private void setFactories(Map<Class<?>, UIComponentFactory> factories) {
this.factories.clear();
this.factories.putAll(factories);
}
//-----------------------------------------------------------------------
@Override
public SwingUISettings clone() {
return (SwingUISettings) super.clone();
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj != null && obj.getClass() == this.getClass()) {
SwingUISettings other = (SwingUISettings) obj;
return JodaBeanUtils.equal(getFactories(), other.getFactories()) &&
super.equals(obj);
}
return false;
}
@Override
public int hashCode() {
int hash = 7;
hash += hash * 31 + JodaBeanUtils.hashCode(getFactories());
return hash ^ super.hashCode();
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder(64);
buf.append("SwingUISettings{");
int len = buf.length();
toString(buf);
if (buf.length() > len) {
buf.setLength(buf.length() - 2);
}
buf.append('}');
return buf.toString();
}
@Override
protected void toString(StringBuilder buf) {
super.toString(buf);
buf.append("factories").append('=').append(JodaBeanUtils.toString(getFactories())).append(',').append(' ');
}
//-----------------------------------------------------------------------
/**
* The meta-bean for {@code SwingUISettings}.
*/
public static class Meta extends UISettings.Meta {
/**
* The singleton instance of the meta-bean.
*/
static final Meta INSTANCE = new Meta();
/**
* The meta-property for the {@code factories} property.
*/
@SuppressWarnings({"unchecked", "rawtypes" })
private final MetaProperty<Map<Class<?>, UIComponentFactory>> factories = DirectMetaProperty.ofReadWrite(
this, "factories", SwingUISettings.class, (Class) Map.class);
/**
* The meta-properties.
*/
private final Map<String, MetaProperty<?>> metaPropertyMap$ = new DirectMetaPropertyMap(
this, (DirectMetaPropertyMap) super.metaPropertyMap(),
"factories");
/**
* Restricted constructor.
*/
protected Meta() {
}
@Override
protected MetaProperty<?> metaPropertyGet(String propertyName) {
switch (propertyName.hashCode()) {
case -1327306968: // factories
return factories;
}
return super.metaPropertyGet(propertyName);
}
@Override
public BeanBuilder<? extends SwingUISettings> builder() {
return new DirectBeanBuilder<SwingUISettings>(new SwingUISettings());
}
@Override
public Class<? extends SwingUISettings> beanType() {
return SwingUISettings.class;
}
@Override
public Map<String, MetaProperty<?>> metaPropertyMap() {
return metaPropertyMap$;
}
//-----------------------------------------------------------------------
@Override
protected Object propertyGet(Bean bean, String propertyName, boolean quiet) {
switch (propertyName.hashCode()) {
case -1327306968: // factories
return ((SwingUISettings) bean).getFactories();
}
return super.propertyGet(bean, propertyName, quiet);
}
@SuppressWarnings("unchecked")
@Override
protected void propertySet(Bean bean, String propertyName, Object newValue, boolean quiet) {
switch (propertyName.hashCode()) {
case -1327306968: // factories
((SwingUISettings) bean).setFactories((Map<Class<?>, UIComponentFactory>) newValue);
return;
}
super.propertySet(bean, propertyName, newValue, quiet);
}
@Override
protected void validate(Bean bean) {
JodaBeanUtils.notNull(((SwingUISettings) bean).factories, "factories");
super.validate(bean);
}
}
///CLOVER:ON
//-------------------------- AUTOGENERATED END --------------------------
}