net.sourceforge.msscodefactory.cfbam.v2_7.CFBamJavaFX.CFBamJavaFXScopeAttrPane.java Source code

Java tutorial

Introduction

Here is the source code for net.sourceforge.msscodefactory.cfbam.v2_7.CFBamJavaFX.CFBamJavaFXScopeAttrPane.java

Source

// Description: Java 8 JavaFX Attribute Pane implementation for Scope.

/*
 *   CFBam
 *
 *   Copyright (c) 2014-2016 Mark Sobkow
 *   
 *   This program is available as free software under the GNU GPL v3, or
 *   under a commercial license from Mark Sobkow.  For commercial licensing
 *   details, please contact msobkow@sasktel.net.
 *   
 *   Under the terms of the GPL:
 *   
 *      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 <http://www.gnu.org/licenses/>.
 *   
 */

package net.sourceforge.msscodefactory.cfbam.v2_7.CFBamJavaFX;

import java.math.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Control;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.Priority;
import net.sourceforge.msscodefactory.cflib.v2_7.CFLib.*;
import net.sourceforge.msscodefactory.cflib.v2_7.CFLib.JavaFX.*;
import net.sourceforge.msscodefactory.cflib.v2_7.CFLib.JavaFX.CFReferenceEditor.ICFReferenceCallback;
import org.apache.commons.codec.binary.Base64;
import net.sourceforge.msscodefactory.cfsecurity.v2_7.CFSecurity.*;
import net.sourceforge.msscodefactory.cfinternet.v2_7.CFInternet.*;
import net.sourceforge.msscodefactory.cfbam.v2_7.CFBam.*;
import net.sourceforge.msscodefactory.cfsecurity.v2_7.CFSecurityObj.*;
import net.sourceforge.msscodefactory.cfinternet.v2_7.CFInternetObj.*;
import net.sourceforge.msscodefactory.cfbam.v2_7.CFBamObj.*;
import net.sourceforge.msscodefactory.cfsecurity.v2_7.CFSecurityJavaFX.*;
import net.sourceforge.msscodefactory.cfinternet.v2_7.CFInternetJavaFX.*;

/**
 *   CFBamJavaFXScopeAttrPane JavaFX Attribute Pane implementation
 *   for Scope.
 */
public class CFBamJavaFXScopeAttrPane extends CFGridPane implements ICFBamJavaFXScopePaneCommon {
    protected ICFFormManager cfFormManager = null;
    protected ICFBamJavaFXSchema javafxSchema = null;
    boolean javafxIsInitializing = true;

    protected class IdCFLabel extends CFLabel {
        public IdCFLabel() {
            super();
            setText("Id");
        }
    }

    protected class IdEditor extends CFInt64Editor {
        public IdEditor() {
            super();
            setMinValue(CFBamScopeBuff.ID_MIN_VALUE);
            setFieldName("Id");
        }
    }

    protected IdCFLabel javafxLabelId = null;
    protected IdEditor javafxEditorId = null;

    public CFBamJavaFXScopeAttrPane(ICFFormManager formManager, ICFBamJavaFXSchema argSchema,
            ICFBamScopeObj argFocus) {
        super();
        Control ctrl;
        CFLabel label;
        CFReferenceEditor reference;
        final String S_ProcName = "construct-schema-focus";
        if (formManager == null) {
            throw CFLib.getDefaultExceptionFactory().newNullArgumentException(getClass(), S_ProcName, 1,
                    "formManager");
        }
        cfFormManager = formManager;
        if (argSchema == null) {
            throw CFLib.getDefaultExceptionFactory().newNullArgumentException(getClass(), S_ProcName, 2,
                    "argSchema");
        }
        // argFocus is optional; focus may be set later during execution as
        // conditions of the runtime change.
        javafxSchema = argSchema;
        setJavaFXFocusAsScope(argFocus);
        setPadding(new Insets(5));
        setHgap(5);
        setVgap(5);
        setAlignment(Pos.CENTER);
        ColumnConstraints column1 = new ColumnConstraints(125);
        ColumnConstraints column2 = new ColumnConstraints(125, 300, 500);
        column2.setHgrow(Priority.ALWAYS);
        getColumnConstraints().addAll(column1, column2);
        int gridRow = 0;
        label = getJavaFXLabelId();
        setHalignment(label, HPos.LEFT);
        add(label, 0, gridRow);

        ctrl = getJavaFXEditorId();
        setHalignment(ctrl, HPos.LEFT);
        add(ctrl, 1, gridRow);

        gridRow++;

        populateFields();
        adjustComponentEnableStates();
        javafxIsInitializing = false;
    }

    public ICFFormManager getCFFormManager() {
        return (cfFormManager);
    }

    public void setCFFormManager(ICFFormManager value) {
        final String S_ProcName = "setCFFormManager";
        if (value == null) {
            throw CFLib.getDefaultExceptionFactory().newNullArgumentException(getClass(), S_ProcName, 1, "value");
        }
        cfFormManager = value;
    }

    public ICFBamJavaFXSchema getJavaFXSchema() {
        return (javafxSchema);
    }

    public void setJavaFXFocus(ICFLibAnyObj value) {
        final String S_ProcName = "setJavaFXFocus";
        if ((value == null) || (value instanceof ICFBamScopeObj)) {
            super.setJavaFXFocus(value);
        } else {
            throw CFLib.getDefaultExceptionFactory().newUnsupportedClassException(getClass(), S_ProcName, "value",
                    value, "ICFBamScopeObj");
        }
        populateFields();
        adjustComponentEnableStates();
    }

    public ICFBamScopeObj getJavaFXFocusAsScope() {
        return ((ICFBamScopeObj) getJavaFXFocus());
    }

    public void setJavaFXFocusAsScope(ICFBamScopeObj value) {
        setJavaFXFocus(value);
    }

    public IdCFLabel getJavaFXLabelId() {
        if (javafxLabelId == null) {
            javafxLabelId = new IdCFLabel();
        }
        return (javafxLabelId);
    }

    public void setJavaFXLabelId(IdCFLabel value) {
        javafxLabelId = value;
    }

    public IdEditor getJavaFXEditorId() {
        if (javafxEditorId == null) {
            javafxEditorId = new IdEditor();
        }
        return (javafxEditorId);
    }

    public void setJavaFXEditorId(IdEditor value) {
        javafxEditorId = value;
    }

    public void populateFields() {
        ICFBamScopeObj popObj;
        ICFBamScopeObj focus = getJavaFXFocusAsScope();
        if (focus != null) {
            popObj = (ICFBamScopeObj) (focus.getEdit());
            if (popObj == null) {
                popObj = focus;
            }
        } else {
            popObj = null;
        }
        if (getPaneMode() == CFPane.PaneMode.Unknown) {
            popObj = null;
        }
        if (popObj == null) {
            getJavaFXEditorId().setInt64Value(null);
        } else {
            getJavaFXEditorId().setInt64Value(popObj.getRequiredId());
        }
    }

    public void postFields() {
        final String S_ProcName = "postFields";
        ICFBamScopeObj focus = getJavaFXFocusAsScope();
        ICFBamScopeEditObj editObj;
        if (focus != null) {
            editObj = (ICFBamScopeEditObj) (focus.getEdit());
        } else {
            editObj = null;
        }
        if (editObj == null) {
            throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                    "Pane is unfocused or is not editing the focus object");
        }
    }

    public void setPaneMode(CFPane.PaneMode value) {
        final String S_ProcName = "setPaneMode";
        CFPane.PaneMode oldValue = getPaneMode();
        if (oldValue == value) {
            return;
        }
        ICFBamScopeObj focus = getJavaFXFocusAsScope();
        if ((value != CFPane.PaneMode.Unknown) && (value != CFPane.PaneMode.View)) {
            if (focus == null) {
                throw CFLib.getDefaultExceptionFactory().newNullArgumentException(getClass(), S_ProcName, 0,
                        "javaFXFocus");
            }
        }
        ICFBamScopeEditObj editObj;
        if (focus != null) {
            editObj = (ICFBamScopeEditObj) focus.getEdit();
        } else {
            editObj = null;
        }
        switch (value) {
        case Unknown:
            switch (oldValue) {
            case Unknown:
                break;
            default:
                if (editObj != null) {
                    editObj.endEdit();
                }
                break;
            }
            break;
        case Add:
            switch (oldValue) {
            case Unknown:
            case Add:
            case View:
                if (editObj == null) {
                    if (focus != null) {
                        if (!focus.getIsNew()) {
                            throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                    "Transitioning to PaneMode Add requires Focus.getIsNew() to be true");
                        }
                        editObj = (ICFBamScopeEditObj) focus.beginEdit();
                        if (editObj == null) {
                            throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                    "Expected beginEdit() to return a new edition of the focus object");
                        }
                    } else {
                        throw CFLib.getDefaultExceptionFactory().newNullArgumentException(getClass(), S_ProcName, 0,
                                "focus");
                    }
                }
                break;
            case Edit:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode Edit to Add");
            case Update:
                if ((editObj == null) || (!editObj.getIsNew())) {
                    throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                            "Cannot transition PaneMode Update to Add");
                }
                break;
            case Delete:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode Delete to Add");
            default:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode default to Add");
            }
            break;
        case View:
            switch (oldValue) {
            case Unknown:
                break;
            case View:
                break;
            case Edit:
                break;
            case Update:
                break;
            case Delete:
                break;
            default:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode " + oldValue + " to View");
            }
            if (editObj != null) {
                editObj.endEdit();
            }
            break;
        case Edit:
            switch (oldValue) {
            case Unknown:
                if (editObj == null) {
                    editObj = (ICFBamScopeEditObj) focus.beginEdit();
                    if (editObj == null) {
                        throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                "Expected beginEdit() to return a new edition of the focus object");
                    }
                }
                break;
            case View:
                if (editObj == null) {
                    editObj = (ICFBamScopeEditObj) focus.beginEdit();
                    if (editObj == null) {
                        throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                "Expected beginEdit() to return a new edition of the focus object");
                    }
                }
                break;
            case Edit:
                if (editObj == null) {
                    editObj = (ICFBamScopeEditObj) focus.beginEdit();
                    if (editObj == null) {
                        throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                "Expected beginEdit() to return a new edition of the focus object");
                    }
                }
                break;
            case Update:
                if (editObj == null) {
                    throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                            "Cannot transition PaneMode " + oldValue + " to Edit");
                }
                break;
            default:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode " + oldValue + " to Edit");
            }
            break;
        case Update:
            if ((oldValue != CFPane.PaneMode.Edit) && (oldValue != CFPane.PaneMode.Add)) {
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition from mode " + oldValue + " to Update");
            }
            super.setPaneMode(value);
            if (editObj != null) {
                postFields();
                if (editObj.getIsNew()) {
                    focus = (ICFBamScopeObj) editObj.create();
                    setJavaFXFocus(focus);
                } else {
                    editObj.update();
                }
                editObj.endEdit();
                editObj = null;
            }
            setPaneMode(CFPane.PaneMode.View);
            break;
        case Delete:
            switch (oldValue) {
            case View:
                if (focus != null) {
                    if (editObj == null) {
                        editObj = (ICFBamScopeEditObj) focus.beginEdit();
                        if (editObj == null) {
                            throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                    "Expected beginEdit() to return a new edition of the focus object");
                        }
                    }
                }
                break;
            case Edit:
                if (focus != null) {
                    if (editObj == null) {
                        editObj = (ICFBamScopeEditObj) focus.beginEdit();
                        if (editObj == null) {
                            throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                    "Expected beginEdit() to return a new edition of the focus object");
                        }
                    }
                }
                break;
            case Update:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode Update to Delete");
            case Delete:
                if (editObj == null) {
                    editObj = (ICFBamScopeEditObj) focus.beginEdit();
                    if (editObj == null) {
                        throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                                "Expected beginEdit() to return a new edition of the focus object");
                    }
                }
                break;
            default:
                throw CFLib.getDefaultExceptionFactory().newUsageException(getClass(), S_ProcName,
                        "Cannot transition PaneMode " + oldValue + " to Delete");
            }
            editObj.delete();
            editObj.endEdit();
            setJavaFXFocus(null);
            setPaneMode(CFPane.PaneMode.Unknown);
            break;
        default:
            switch (oldValue) {
            case Unknown:
                break;
            default:
                if (editObj != null) {
                    editObj.endEdit();
                }
                break;
            }
            break;
        }
        super.setPaneMode(value);
        populateFields();
        adjustComponentEnableStates();
    }

    public void adjustComponentEnableStates() {
        CFPane.PaneMode mode = getPaneMode();
        boolean isEditing;
        switch (mode) {
        case Unknown:
        case View:
        case Delete:
            isEditing = false;
            break;
        case Add:
        case Edit:
        case Update:
            isEditing = true;
            break;
        default:
            isEditing = false;
            break;
        }
        if (isEditing) {
            ICFBamScopeObj focus = getJavaFXFocusAsScope();
            if (focus == null) {
                isEditing = false;
            } else if (null == focus.getEdit()) {
                isEditing = false;
            }
        }
        if (javafxEditorId != null) {
            javafxEditorId.setDisable(true);
        }
    }
}