org.jdal.swing.ViewFrame.java Source code

Java tutorial

Introduction

Here is the source code for org.jdal.swing.ViewFrame.java

Source

/*
 * Copyright 2008-2011 the original author or authors.
 *
 * 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.jdal.swing;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.Serializable;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.EventListenerList;

import org.apache.commons.lang.StringUtils;
import org.jdal.dao.Dao;
import org.jdal.service.PersistentServiceAware;
import org.jdal.swing.action.DialogAcceptAction;
import org.jdal.swing.action.ViewAction;
import org.jdal.swing.action.ViewCancelAction;
import org.jdal.ui.Editor;
import org.jdal.ui.EditorEvent;
import org.jdal.ui.EditorListener;
import org.jdal.ui.bind.ControlChangeListener;
import org.springframework.validation.BindingResult;

/**
 * A JFrame for use as View Container
 * 
 * @author Jose Luis Martin - (jlm@joseluismartin.info)
 */
public class ViewFrame<T> extends JFrame implements View<T>, Editor<T> {

    private static final long serialVersionUID = 1L;
    private View<T> view;
    private ViewAction<T> acceptAction = new DialogAcceptAction<T>();
    private ViewAction<T> cancelAction = new ViewCancelAction<T>();
    private JButton acceptButton;
    private JButton cancelButton;
    private int windowWidth;
    private int windowHeight;
    private EventListenerList listenerList = new EventListenerList();
    private Dao<T, ? extends Serializable> persistentService;

    /**
     * Default Ctor
     */
    public ViewFrame() {
        super();
    }

    /**
     * Compatibility ctor with ViewDialog.
     * @param owner
     */
    public ViewFrame(Frame owner) {
        super();
    }

    public void init() {
        acceptAction.setView(view);
        cancelAction.setView(view);
        acceptAction.setDialog(this);
        cancelAction.setDialog(this);
        add(view.getPanel(), BorderLayout.CENTER);
        add(createButtonBox(), BorderLayout.SOUTH);

        if (view.getModel() != null && StringUtils.isEmpty(getTitle()))
            setTitle(view.getModel().toString());

        setLocationRelativeTo(null);
        setSize(new Dimension(windowWidth, windowHeight));
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        addWindowListener(new CloseListener());
    }

    protected Component createButtonBox() {
        acceptButton = new JButton(acceptAction);
        cancelButton = new JButton(cancelAction);
        JPanel p = new JPanel();
        p.add(acceptButton);
        p.add(cancelButton);

        return p;
    }

    /**
     * {@inheritDoc}
     */
    public void save() {
        Object[] listeners = listenerList.getListenerList();
        EditorEvent e = null;

        for (int i = listeners.length - 2; i >= 0; i -= 2) {
            if (listeners[i] == EditorListener.class) {
                if (e == null) {
                    e = new EditorEvent(this, getModel());
                }
                ((EditorListener) listeners[i + 1]).modelChanged(e);
            }
        }

    }

    public View<T> getView() {
        return view;
    }

    public void setView(View<T> view) {
        this.view = view;
    }

    public ViewAction<T> getAcceptAction() {
        return acceptAction;
    }

    public void setAcceptAction(ViewAction<T> acceptAction) {
        this.acceptAction = acceptAction;
        this.acceptAction.setView(view);
        this.acceptAction.setDialog(this);
    }

    public ViewAction<T> getCancelAction() {
        return cancelAction;
    }

    public void setCancelAction(ViewAction<T> cancelAction) {
        this.cancelAction = cancelAction;
        cancelAction.setDialog(this);
        cancelAction.setView(view);
    }

    public T getModel() {
        return view.getModel();
    }

    public JComponent getPanel() {
        return view.getPanel();
    }

    public void refresh() {
        view.refresh();
        setTitle(view.getModel().toString());
    }

    public void setModel(T model) {
        view.setModel(model);
    }

    public void update() {
        view.update();
    }

    public void clear() {
        view.clear();
    }

    public boolean validateView() {
        return view.validateView();
    }

    /**
     * @return the windowWidth
     */
    public int getWindowWidth() {
        return windowWidth;
    }

    /**
     * @param windowWidth the windowWidth to set
     */
    public void setWindowWidth(int windowWidth) {
        this.windowWidth = windowWidth;
    }

    /**
     * @return the windowHeight
     */
    public int getWindowHeight() {
        return windowHeight;
    }

    /**
     * @param windowHeight the windowHeight to set
     */
    public void setWindowHeight(int windowHeight) {
        this.windowHeight = windowHeight;
    }

    /**
     * {@inheritDoc}
     */
    public void addEditorListener(EditorListener l) {
        listenerList.add(EditorListener.class, l);

    }

    public void removeEditorListener(EditorListener l) {
        listenerList.remove(EditorListener.class, l);
    }

    /**
     * {@inheritDoc}
     */
    public boolean isDirty() {
        return view.isDirty();
    }

    /**
     * {@inheritDoc}
     */
    public void enableView(boolean enabled) {
        view.enableView(enabled);
        // acceptButton.setEnabled(enabled);
    }

    /**
     * {@inheritDoc}
     */
    public BindingResult getBindingResult() {
        return view.getBindingResult();
    }

    /**
     * {@inheritDoc}
     */
    public String getErrorMessage() {
        return view.getErrorMessage();
    }

    /**
     * {@inheritDoc}
     */
    public void addControlChangeListener(ControlChangeListener listener) {
        view.addControlChangeListener(listener);

    }

    /**
     * {@inheritDoc}
     */
    public void removeControlChangeListener(ControlChangeListener listener) {
        view.removeControlChangeListener(listener);
    }

    @SuppressWarnings("unchecked")
    public void setPersistentService(Dao<T, ? extends Serializable> persistentService) {
        this.persistentService = persistentService;

        if (this.acceptAction instanceof PersistentServiceAware)
            ((PersistentServiceAware<T>) acceptAction).setPersistentService(this.persistentService);

    }

    private class CloseListener extends WindowAdapter {

        @Override
        public void windowClosing(WindowEvent e) {
            cancelAction.actionPerformed(null);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void cancel() {
        // TODO Auto-generated method stub

    }
}