fr.ird.observe.client.form.spi.FormUIInitializerContext Maven / Gradle / Ivy
package fr.ird.observe.client.form.spi;
/*
* #%L
* ObServe Toolkit :: Common Client
* %%
* Copyright (C) 2008 - 2017 IRD, Ultreia.io
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* .
* #L%
*/
import com.google.common.collect.ImmutableMap;
import fr.ird.observe.client.MainUI;
import fr.ird.observe.client.action.ObserveActionMap;
import fr.ird.observe.client.form.FormUI;
import fr.ird.observe.client.form.FormUIHandler;
import fr.ird.observe.dto.decoration.decorators.DataReferenceDecorator;
import fr.ird.observe.dto.decoration.decorators.ReferentialReferenceDecorator;
import fr.ird.observe.dto.reference.DataDtoReference;
import fr.ird.observe.dto.reference.ReferentialDtoReference;
import io.ultreia.java4all.lang.GetterProducer;
import io.ultreia.java4all.lang.SetterProducer;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import javax.swing.AbstractButton;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import org.apache.commons.lang3.BooleanUtils;
import org.nuiton.jaxx.runtime.spi.init.UIComponentInitializer;
import org.nuiton.jaxx.runtime.spi.init.UIInitializerContext;
import org.nuiton.jaxx.runtime.swing.TabInfo;
import org.nuiton.jaxx.widgets.datetime.DateTimeEditor;
import org.nuiton.jaxx.widgets.gis.CoordinateFormat;
import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor;
import org.nuiton.jaxx.widgets.select.BeanComboBox;
import org.nuiton.jaxx.widgets.select.BeanListHeader;
import org.nuiton.jaxx.widgets.select.FilterableDoubleList;
/**
* To initialize ui.
*
* Created on 9/26/14.
*
* @author Tony Chemit - [email protected]
* @since 3.7
*/
public abstract class FormUIInitializerContext extends UIInitializerContext {
private final ObserveActionMap actionMap;
private final MainUI mainUI;
private final FormUIContext.Builder formUIContextBuilder;
private Class>[] acceptedComponentTypes;
public MainUI getMainUI() {
return mainUI;
}
public abstract CoordinateFormat getCoordinateFormat();
public abstract boolean isShowTimeEditorSlider();
public abstract boolean isShowDateTimeEditorSlider();
public abstract Locale getLocale();
public abstract boolean isAutoPopupNumberEditor();
public abstract boolean isShowNumberEditorButton();
public abstract O getBean();
public abstract DataReferenceDecorator getDataReferenceDecorator(Class dtoClass);
public abstract ReferentialReferenceDecorator getReferentialReferenceDecorator(Class dtoClass);
public FormUIInitializerContext(U ui, Collection initializerList, ImmutableMap filters) {
super(ui, initializerList);
this.mainUI = ui.getMainUI();
this.actionMap = ui.getMainUI().getActionMap();
this.formUIContextBuilder = new FormUIContext.Builder();
InputMap inputMap = ui.getMainUI().getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ui.getActionMap().setParent(actionMap);
ui.setInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
if (filters != null) {
for (Map.Entry entry : filters.entrySet()) {
formUIContextBuilder.addReferentialFilter(entry.getKey(), entry.getValue());
}
}
}
public final ObserveActionMap actionMap() {
return actionMap;
}
public final void addAutoSelectOnFocus(JSpinner.DateEditor hourEditor) {
addAutoSelectOnFocus(hourEditor.getTextField());
}
public final boolean isAutoSelectOnFocus(JComponent comp) {
Boolean selectOnFocus = (Boolean) comp.getClientProperty(FormUIHandler.SELECT_ON_FOCUS);
return BooleanUtils.isTrue(selectOnFocus);
}
public final void addAutoSelectOnFocus(JTextField jTextField) {
jTextField.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(final FocusEvent e) {
SwingUtilities.invokeLater(() -> {
JTextField source = (JTextField) e.getSource();
source.selectAll();
});
}
});
}
public final void registerBeanComboBox(BeanComboBox editor) {
formUIContextBuilder.register(editor);
}
public final void registerBeanListHeader(BeanListHeader editor) {
formUIContextBuilder.register(editor);
}
public final void registerFilterableDoubleList(FilterableDoubleList editor) {
formUIContextBuilder.register(editor);
}
public final void registerObserveAction(AbstractButton editor) {
formUIContextBuilder.register(editor);
}
public final FormUIContext.Builder getFormUIContext() {
return formUIContextBuilder;
}
public final void registerDateTimeEditor(DateTimeEditor component) {
formUIContextBuilder.register(component);
}
public final void registerCoordinatesEditor(CoordinatesEditor component) {
formUIContextBuilder.register(component);
}
public final void registerMainTabModel(TabInfo component) {
formUIContextBuilder.register(component);
}
public final Class>[] getAcceptedComponentTypes() {
return acceptedComponentTypes;
}
public final void setAcceptedComponentTypes(Class>... acceptedComponentTypes) {
this.acceptedComponentTypes = acceptedComponentTypes;
}
}