All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anwiba.commons.swing.object.AbstractObjectFieldConfigurationBuilder Maven / Gradle / Ivy

/*
 * #%L
 * anwiba commons swing
 * %%
 * Copyright (C) 2007 - 2016 Andreas Bartels
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 2.1 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 Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */
package net.anwiba.commons.swing.object;

import java.awt.Color;
import java.awt.Component;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;

import net.anwiba.commons.lang.functional.IBlock;
import net.anwiba.commons.lang.functional.IConverter;
import net.anwiba.commons.model.IObjectModel;
import net.anwiba.commons.model.ObjectModel;
import net.anwiba.commons.swing.action.ConfigurableActionBuilder;
import net.anwiba.commons.swing.action.IActionProcedure;
import net.anwiba.commons.swing.icon.GuiIcons;
import net.anwiba.commons.utilities.string.StringUtilities;
import net.anwiba.commons.utilities.validation.AggregatingStringValidator;
import net.anwiba.commons.utilities.validation.AllwaysValidStringValidator;
import net.anwiba.commons.utilities.validation.IValidationResult;
import net.anwiba.commons.utilities.validation.IValidator;

public abstract class AbstractObjectFieldConfigurationBuilder> {

  private boolean isEditable = true;
  private int columns = 10;
  private final List> validators = new ArrayList<>();
  private IConverter toObjectConverter;
  private IConverter toStringConverter;
  private IToolTipFactory toolTipFactory = new IToolTipFactory() {

    @Override
    public String create(final IValidationResult validationResult, final String text) {
      if (!validationResult.isValid()) {
        return validationResult.getMessage();
      }
      if (StringUtilities.isNullOrEmpty(text)) {
        return null;
      }
      return text;
    }
  };
  private IObjectModel validStateModel = new ObjectModel<>(IValidationResult.valid());
  private IObjectModel model = new ObjectModel<>();
  private final List> actionFactorys = new ArrayList<>();
  private Color background;
  private IKeyListenerFactory keyListenerFactory;

  public AbstractObjectFieldConfigurationBuilder(
      final IValidator validator,
      final IConverter toObjectConverter,
      final IConverter toStringConverter) {
    this.validators.add(validator);
    this.toObjectConverter = toObjectConverter;
    this.toStringConverter = toStringConverter;
  }

  public IObjectFieldConfiguration build() {
    final IValidator validator = this.validators.isEmpty()
        ? new AllwaysValidStringValidator()
        : this.validators.size() == 1 ? this.validators.get(0) : new AggregatingStringValidator(this.validators);
    return new DefaultObjectFieldConfiguration<>(
        this.model,
        this.validStateModel,
        validator,
        this.toObjectConverter,
        this.toStringConverter,
        this.toolTipFactory,
        this.isEditable,
        this.columns,
        this.actionFactorys,
        this.keyListenerFactory,
        this.background);
  }

  @SuppressWarnings("unchecked")
  public C setKeyListenerFactory(final IKeyListenerFactory keyListenerFactory) {
    this.keyListenerFactory = keyListenerFactory;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setToolTipFactory(final IToolTipFactory factory) {
    this.toolTipFactory = factory;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setModel(final IObjectModel model) {
    this.model = model;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setValidStateModel(final IObjectModel validStateModel) {
    this.validStateModel = validStateModel;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setValidator(final IValidator validator) {
    this.validators.clear();;
    this.validators.add(validator);
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C addValidator(final IValidator validator) {
    this.validators.add(validator);
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setToObjectConverter(final IConverter toObjectConverter) {
    this.toObjectConverter = toObjectConverter;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setToStringConverter(final IConverter toStringConverter) {
    this.toStringConverter = toStringConverter;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setEditable(final boolean isEditable) {
    this.isEditable = isEditable;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setColumns(final int columns) {
    this.columns = columns;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C addActionFactory(final IActionFactory actionFactory) {
    this.actionFactorys.add(actionFactory);
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C setBackgroundColor(final Color background) {
    this.background = background;
    return (C) this;
  }

  @SuppressWarnings("unchecked")
  public C addClearAction(final String tooltip) {
    addActionFactory(new IActionFactory() {

      @Override
      public AbstractAction create(
          final IObjectModel context,
          final Document document,
          final IBlock clearBlock) throws RuntimeException {
        final ConfigurableActionBuilder builder = new ConfigurableActionBuilder();
        final AbstractAction action = builder
            .setIcon(GuiIcons.EDIT_CLEAR_LOCATIONBAR_ICON)
            .setTooltip(tooltip)
            .setProcedure(new IActionProcedure() {

              @Override
              public void execute(final Component value) throws RuntimeException {
                clearBlock.execute();
              }
            })
            .build();
        action.setEnabled(document.getLength() != 0);
        document.addDocumentListener(new DocumentListener() {

          @Override
          public void removeUpdate(final DocumentEvent e) {
            action.setEnabled(document.getLength() != 0);
          }

          @Override
          public void insertUpdate(final DocumentEvent e) {
            action.setEnabled(document.getLength() != 0);
          }

          @Override
          public void changedUpdate(final DocumentEvent e) {
            action.setEnabled(document.getLength() != 0);
          }
        });
        return action;
      }
    });

    return (C) this;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy