/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.model; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import java.util.NoSuchElementException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSeparator; import org.beanfabrics.IModelProvider; import org.beanfabrics.Link; import org.beanfabrics.ModelProvider; import org.beanfabrics.ModelSubscriber; import org.beanfabrics.Path; import org.beanfabrics.View; import org.beanfabrics.support.OnChange; import org.beanfabrics.support.Operation; import org.beanfabrics.swing.BnButton; import org.beanfabrics.swing.BnComboBox; import org.beanfabrics.swing.BnTextField; @SuppressWarnings("serial") public class DatePMTestGUI extends JFrame implements View<DatePMTestGUI.DateTestModel>, ModelSubscriber { private BnButton defaultLocaleDateButton; private JSeparator separator; private BnTextField dateTimeTextField; private JLabel dateTimeLabel; private final Link link = new Link(this); private ModelProvider localProvider; private JLabel defaultLocaleDateLabel; private BnTextField defaultLocaleDateTextField; private BnTextField autoConvertDateTextField; private JLabel autoConvertDateLabel; private DateTestModel dateTestModel; private JLabel dateLabel; private JLabel localeLabel; private BnTextField dateTextField; private BnComboBox localeComboBox; private JPanel panel; private BnComboBox bnComboBox; /** * Launch the application * * @param args */ public static void main(String args[]) { try { DatePMTestGUI frame = new DatePMTestGUI(); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } /** * Create the frame */ public DatePMTestGUI() { super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(getPanel(), BorderLayout.CENTER); // } private ModelProvider getLocalProvider() { if (localProvider == null) { localProvider = new ModelProvider(); // @wb:location=35,247 localProvider.setPresentationModel(getDateTestModel()); localProvider.setPresentationModelType(DateTestModel.class); } return localProvider; } /** {@inheritDoc} */ public DateTestModel getPresentationModel() { return getLocalProvider().getPresentationModel(); } /** {@inheritDoc} */ public void setPresentationModel(DateTestModel pModel) { getLocalProvider().setPresentationModel(pModel); } /** {@inheritDoc} */ public IModelProvider getModelProvider() { return this.link.getModelProvider(); } /** {@inheritDoc} */ public void setModelProvider(IModelProvider provider) { this.link.setModelProvider(provider); } public Path getPath() { /** {@inheritDoc} */ return this.link.getPath(); } /** {@inheritDoc} */ public void setPath(Path path) { this.link.setPath(path); } private JPanel getPanel() { if (panel == null) { panel = new JPanel(); final GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWeights = new double[] { 0.0, 0.0, 1.0 }; gridBagLayout.rowHeights = new int[] { 0, 64, 0, 0, 0, 0 }; gridBagLayout.columnWidths = new int[] { 0, 0, 7 }; panel.setLayout(gridBagLayout); final GridBagConstraints gridBagConstraints_6 = new GridBagConstraints(); gridBagConstraints_6.gridwidth = 2; gridBagConstraints_6.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_6.gridx = 1; gridBagConstraints_6.gridy = 3; gridBagConstraints_6.insets = new Insets(2, 2, 5, 2); panel.add(getDateTextField(), gridBagConstraints_6); final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints(); gridBagConstraints_4.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_4.gridx = 0; gridBagConstraints_4.gridy = 4; gridBagConstraints_4.insets = new Insets(2, 2, 5, 5); panel.add(getAutoConvertDateLabel(), gridBagConstraints_4); final GridBagConstraints gridBagConstraints_7 = new GridBagConstraints(); gridBagConstraints_7.gridwidth = 2; gridBagConstraints_7.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_7.gridx = 1; gridBagConstraints_7.gridy = 4; gridBagConstraints_7.insets = new Insets(2, 2, 5, 2); panel.add(getAutoConvertDateTextField(), gridBagConstraints_7); final GridBagConstraints gridBagConstraints_8 = new GridBagConstraints(); gridBagConstraints_8.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_8.insets = new Insets(2, 2, 2, 5); gridBagConstraints_8.gridy = 5; gridBagConstraints_8.gridx = 0; panel.add(getDateTimeLabel(), gridBagConstraints_8); final GridBagConstraints gridBagConstraints_9 = new GridBagConstraints(); gridBagConstraints_9.gridwidth = 2; gridBagConstraints_9.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_9.insets = new Insets(2, 2, 2, 2); gridBagConstraints_9.gridy = 5; gridBagConstraints_9.gridx = 1; panel.add(getDateTimeTextField(), gridBagConstraints_9); } return panel; } private BnComboBox getLocaleComboBox() { if (localeComboBox == null) { localeComboBox = new BnComboBox(); localeComboBox.setPath(new org.beanfabrics.Path("this.locale")); localeComboBox.setModelProvider(getLocalProvider()); } return localeComboBox; } private BnComboBox getBnComboBox() { if (bnComboBox == null) { bnComboBox = new BnComboBox(); bnComboBox.setPath(new org.beanfabrics.Path("this.style")); bnComboBox.setModelProvider(getLocalProvider()); } return bnComboBox; } private BnTextField getDateTextField() { if (dateTextField == null) { final GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new Insets(2, 2, 5, 5); panel.add(getLocaleLabel(), gridBagConstraints); final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints(); gridBagConstraints_1.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_1.gridx = 1; gridBagConstraints_1.gridy = 0; gridBagConstraints_1.insets = new Insets(2, 2, 5, 5); panel.add(getLocaleComboBox(), gridBagConstraints_1); GridBagConstraints gbc_bnComboBox = new GridBagConstraints(); gbc_bnComboBox.insets = new Insets(0, 0, 5, 0); gbc_bnComboBox.fill = GridBagConstraints.HORIZONTAL; gbc_bnComboBox.gridx = 2; gbc_bnComboBox.gridy = 0; getPanel().add(getBnComboBox(), gbc_bnComboBox); final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints(); gridBagConstraints_2.gridwidth = 3; gridBagConstraints_2.insets = new Insets(2, 2, 5, 2); gridBagConstraints_2.gridy = 1; gridBagConstraints_2.gridx = 0; panel.add(getSeparator(), gridBagConstraints_2); final GridBagConstraints gridBagConstraints_3 = new GridBagConstraints(); gridBagConstraints_3.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_3.gridx = 0; gridBagConstraints_3.gridy = 2; gridBagConstraints_3.insets = new Insets(2, 2, 5, 5); panel.add(getDefaultLocaleDateLabel(), gridBagConstraints_3); final GridBagConstraints gridBagConstraints_5 = new GridBagConstraints(); gridBagConstraints_5.weightx = 1; gridBagConstraints_5.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_5.gridx = 1; gridBagConstraints_5.gridy = 2; gridBagConstraints_5.insets = new Insets(2, 2, 5, 5); panel.add(getDefaultLocaleDateTextField(), gridBagConstraints_5); final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints(); gridBagConstraints_4.insets = new Insets(2, 2, 5, 2); gridBagConstraints_4.gridy = 2; gridBagConstraints_4.gridx = 2; panel.add(getDefaultLocaleDateButton(), gridBagConstraints_4); final GridBagConstraints gridBagConstraints_6 = new GridBagConstraints(); gridBagConstraints_6.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints_6.gridx = 0; gridBagConstraints_6.gridy = 3; gridBagConstraints_6.insets = new Insets(2, 2, 5, 5); panel.add(getDateLabel(), gridBagConstraints_6); dateTextField = new BnTextField(); dateTextField.setPath(new org.beanfabrics.Path("this.date")); dateTextField.setModelProvider(getLocalProvider()); } return dateTextField; } private JLabel getLocaleLabel() { if (localeLabel == null) { localeLabel = new JLabel(); localeLabel.setText("Locale"); } return localeLabel; } private JLabel getDateLabel() { if (dateLabel == null) { dateLabel = new JLabel(); dateLabel.setText("Date"); } return dateLabel; } private DateTestModel getDateTestModel() { if (dateTestModel == null) { dateTestModel = new DateTestModel(); // @wb:location=159,255 } return dateTestModel; } private JLabel getAutoConvertDateLabel() { if (autoConvertDateLabel == null) { autoConvertDateLabel = new JLabel(); autoConvertDateLabel.setText("Auto Convert. Date"); } return autoConvertDateLabel; } private BnTextField getAutoConvertDateTextField() { if (autoConvertDateTextField == null) { autoConvertDateTextField = new BnTextField(); autoConvertDateTextField.setPath(new org.beanfabrics.Path("this.autoConvertDate")); autoConvertDateTextField.setModelProvider(getLocalProvider()); } return autoConvertDateTextField; } private BnTextField getDefaultLocaleDateTextField() { if (defaultLocaleDateTextField == null) { defaultLocaleDateTextField = new BnTextField(); defaultLocaleDateTextField.setColumns(10); defaultLocaleDateTextField.setPath(new org.beanfabrics.Path("this.defaultLocaleDate")); defaultLocaleDateTextField.setModelProvider(getLocalProvider()); } return defaultLocaleDateTextField; } private JLabel getDefaultLocaleDateLabel() { if (defaultLocaleDateLabel == null) { defaultLocaleDateLabel = new JLabel(); defaultLocaleDateLabel.setText("Default Locale Date"); } return defaultLocaleDateLabel; } private JLabel getDateTimeLabel() { if (dateTimeLabel == null) { dateTimeLabel = new JLabel(); dateTimeLabel.setText("Date & Time"); } return dateTimeLabel; } private BnTextField getDateTimeTextField() { if (dateTimeTextField == null) { dateTimeTextField = new BnTextField(); dateTimeTextField.setPath(new org.beanfabrics.Path("this.dateTime")); dateTimeTextField.setModelProvider(getLocalProvider()); dateTimeTextField.setColumns(12); } return dateTimeTextField; } private JSeparator getSeparator() { if (separator == null) { separator = new JSeparator(); } return separator; } private BnButton getDefaultLocaleDateButton() { if (defaultLocaleDateButton == null) { defaultLocaleDateButton = new BnButton(); defaultLocaleDateButton.setPath(new org.beanfabrics.Path("this.setDefaultLocaleDate")); defaultLocaleDateButton.setModelProvider(getLocalProvider()); } return defaultLocaleDateButton; } public static class LocalePM extends TextPM { Options<Locale> localeOptions = getLocaleOptions(new Locale[] { Locale.GERMAN, Locale.US, Locale.UK }); public LocalePM() { PMManager.setup(this); } public Options<Locale> getOptions() { return localeOptions; } private static Options<Locale> getLocaleOptions(Locale[] locales) { Options<Locale> opts = new Options<Locale>(); for (Locale locale : locales) { opts.put(locale, locale.getDisplayName()); } return opts; } } public static class StylePM extends TextPM { Options<Integer> styleOptions = new Options<Integer>(); public StylePM() { styleOptions.put(DateFormat.SHORT, "Short"); styleOptions.put(DateFormat.MEDIUM, "Medium"); styleOptions.put(DateFormat.LONG, "Long"); styleOptions.put(DateFormat.FULL, "Full"); PMManager.setup(this); } public Options<Integer> getOptions() { return styleOptions; } } public static class DateTestModel extends AbstractPM { protected final IDatePM defaultLocaleDate = new DatePM(); protected final IOperationPM setDefaultLocaleDate = new OperationPM(); protected final IDatePM date = new DatePM(); protected final IDatePM autoConvertDate = new DatePM(); protected final LocalePM locale = new LocalePM(); protected final IDatePM dateTime = new DatePM(); protected final StylePM style = new StylePM(); public DateTestModel() { PMManager.setup(this); setDefaultLocaleDate.setTitle("now"); locale.setText(locale.getOptions().get(Locale.GERMAN)); style.setText(style.getOptions().get(DateFormat.MEDIUM)); date.setDate(new Date()); dateTime.setFormat(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT)); } @Operation public void setDefaultLocaleDate() { Date now = new Date(); defaultLocaleDate.setDate(now); } @OnChange(path = "defaultLocaleDate") private void updateDates() { try { Date dateValue = defaultLocaleDate.getDate(); date.setDate(dateValue); autoConvertDate.setDate(dateValue); } catch (ConversionException e) { // ignore } } @OnChange(path = { "locale", "style" }) private void updateDate() { try { Locale localeValue = (Locale)locale.getOptions().getKey(locale.getText()); int aStyle = (Integer)style.getOptions().getKey(style.getText()); date.setFormat(getDateFormat(localeValue, aStyle)); } catch (NoSuchElementException ex) { // ignore } } private DateFormat getDateFormat(Locale localeValue, int style) { DateFormat result = DateFormat.getDateInstance(style, localeValue); result.setLenient(false); return result; } @OnChange(path = { "locale", "style" }) private void updateAutoConvertDate() { try { Locale localeValue = (Locale)locale.getOptions().getKey(locale.getText()); int aStyle = (Integer)style.getOptions().getKey(style.getText()); Date date; try { date = autoConvertDate.getDate(); } catch (ConversionException e) { date = null; } autoConvertDate.setFormat(getDateFormat(localeValue, aStyle)); if (date != null) { autoConvertDate.setDate(date); } } catch (NoSuchElementException ex) { // ignore } } } }