Package com.cedarsoft.spring.rcp.forms

Source Code of com.cedarsoft.spring.rcp.forms.FormPage

package com.cedarsoft.spring.rcp.forms;

import com.cedarsoft.spring.SpringSupport;
import com.jgoodies.forms.factories.Borders;
import org.jetbrains.annotations.NotNull;
import org.springframework.richclient.application.event.LifecycleApplicationEvent;
import org.springframework.richclient.command.ActionCommand;
import org.springframework.richclient.command.CommandGroup;
import org.springframework.richclient.core.UIConstants;
import org.springframework.richclient.factory.ControlFactory;
import org.springframework.richclient.form.FormGuard;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;

/**
* Creates a panel with a from that can be added to a view.
*
* @param <T> the type
*/
public class FormPage<T> implements ControlFactory {
  @NotNull
  private final FormUi<? extends T> formUi;

  @NotNull
  private final ActionCommand finishCommand = new ActionCommand( "okCommand" ) {
    @Override
    protected void doExecuteCommand() {
      commit();
    }
  };

  @NotNull
  private final ActionCommand revertCommand = new ActionCommand( "revertCommand" ) {
    @Override
    protected void doExecuteCommand() {
      formUi.revert();
    }
  };

  private final boolean addScrollPane;

  /**
   * Creates a new form page
   *
   * @param formUi the form ui support
   */
  public FormPage( @NotNull FormUi<? extends T> formUi ) {
    this( formUi, true );
  }

  public FormPage( @NotNull FormUi<? extends T> formUi, boolean addScrollPane ) {
    this.formUi = formUi;
    this.addScrollPane = addScrollPane;
  }

  protected void commit() {
    formUi.commit();
    SpringSupport.INSTANCE.getApplicationContext().publishEvent( new LifecycleApplicationEvent( LifecycleApplicationEvent.MODIFIED, formUi.getFormObject() ) )//todo notifying necessary???
  }

  @Override
  public JComponent getControl() {
    ExtendedForm<? extends T> form = formUi.getForm();

    form.addGuarded( finishCommand, FormGuard.LIKE_COMMITCOMMAND );
    form.addGuarded( revertCommand, FormGuard.LIKE_REVERTCOMMAND );

    JPanel panel = new JPanel( new BorderLayout( UIConstants.ONE_SPACE, UIConstants.ONE_SPACE ) );
    panel.add( form.getControl(), BorderLayout.CENTER );

    panel.add( createButtonBar(), BorderLayout.SOUTH );

    if ( addScrollPane ) {
      JScrollPane scrollPane = SpringSupport.INSTANCE.getComponentFactory().createScrollPane( panel );
      scrollPane.setViewportBorder( Borders.DLU7_BORDER );
      return scrollPane;
    } else {
      return panel;
    }
  }

  @NotNull
  private JComponent createButtonBar() {
    CommandGroup group = CommandGroup.createCommandGroup( null, new Object[]{revertCommand, finishCommand} );
    return group.createButtonBar( null, Borders.EMPTY_BORDER );
  }
}
TOP

Related Classes of com.cedarsoft.spring.rcp.forms.FormPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.