org.jacp.demo.perspectives.ContactPerspective.java Source code

Java tutorial

Introduction

Here is the source code for org.jacp.demo.perspectives.ContactPerspective.java

Source

/*
 * Copyright (C) 2010,2011.
 * AHCP Project (http://code.google.com/p/jacp)
 * All rights reserved.
 *
 * 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.jacp.demo.perspectives;

import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jacp.demo.components.util.JACPOptionButtonCreator;
import org.jacp.demo.constants.GlobalConstants;
import org.jacpfx.api.annotations.Resource;
import org.jacpfx.api.annotations.lifecycle.PostConstruct;
import org.jacpfx.api.annotations.lifecycle.PreDestroy;
import org.jacpfx.api.annotations.perspective.Perspective;
import org.jacpfx.api.message.Message;
import org.jacpfx.rcp.componentLayout.FXComponentLayout;
import org.jacpfx.rcp.componentLayout.PerspectiveLayout;
import org.jacpfx.rcp.components.toolBar.JACPHoverMenu;
import org.jacpfx.rcp.components.toolBar.JACPToolBar;
import org.jacpfx.rcp.context.Context;
import org.jacpfx.rcp.perspective.FXPerspective;
import org.jacpfx.rcp.util.FXUtil.MessageUtil;

import java.util.ResourceBundle;

import static org.jacpfx.api.util.ToolbarPosition.*;
import static org.jacpfx.rcp.components.toolBar.JACPOptionButtonOrientation.*;

/**
 * Contact perspective; here you define the basic layout for your application
 * view and declare targets for your UI component.
 *
 * @author Andy Moncsek, Patrick Symmangk
 */
@Perspective(id = "id01", name = "contactPerspective", components = {
        GlobalConstants.ComponentConstants.COMPONENT_DETAIL_VIEW,
        GlobalConstants.ComponentConstants.COMPONENT_CHART_VIEW,
        GlobalConstants.ComponentConstants.COMPONENT_TABLE_VIEW,
        GlobalConstants.ComponentConstants.COMPONENT_TREE_VIEW, GlobalConstants.CallbackConstants.CALLBACK_CREATOR,
        GlobalConstants.CallbackConstants.CALLBACK_COORDINATOR,
        GlobalConstants.CallbackConstants.CALLBACK_ANALYTICS }, viewLocation = "/fxml/contactPerspective.fxml", resourceBundleLocation = "bundles.languageBundle", localeID = "en_US")
public class ContactPerspective implements FXPerspective {
    private final static Log LOGGER = LogFactory.getLog(ContactPerspective.class);

    private static final String SWITCH_MESSAGE = "switch";

    private String topId = "PmainContentTop";

    private String bottomId = "PmainContentBottom";

    private String detailId = "PdetailComponent";

    @FXML
    private GridPane gridPane1;
    @FXML
    private GridPane gridPane2;
    @FXML
    private GridPane chartView;
    @FXML
    private GridPane detailView;
    @FXML
    private AnchorPane chartAnchor;
    @FXML
    private AnchorPane detailAnchor;

    @Resource
    Context context;

    @PostConstruct
    /**
     * create buttons in tool bars; menu entries
     */
    public void PostConstructPerspective(final FXComponentLayout layout, final ResourceBundle resourceBundle) {
        LOGGER.debug("PostConstructPerspective ressource:" + resourceBundle);
        // create button in toolbar; button should switch top and bottom id's
        final JACPToolBar north = layout.getRegisteredToolBar(NORTH);
        final JACPToolBar south = layout.getRegisteredToolBar(SOUTH);
        final JACPToolBar west = layout.getRegisteredToolBar(WEST);
        final JACPToolBar east = layout.getRegisteredToolBar(EAST);

        final Button custom = new Button("switch");
        custom.setTooltip(new Tooltip("Switch Components"));
        custom.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(final ActionEvent e) {
                context.send(SWITCH_MESSAGE);

            }
        });
        north.addOnEnd(context.getId(), custom);

        // TEST OPTIONBUTTON ON NORTH
        north.addOnEnd(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10));
        north.addToCenter(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10));
        north.add(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, BOTTOM, 10));
        west.add(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT));
        west.addToCenter(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT));
        west.addOnEnd(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("another Button", layout, RIGHT));
        east.addOnEnd(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT));
        east.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT));
        east.addToCenter(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("right Button", layout, LEFT));
        south.add(context.getId(), JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP));
        south.addToCenter(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP));
        south.addOnEnd(context.getId(),
                JACPOptionButtonCreator.createDefaultOptionButton("bottom Button", layout, TOP));

        JACPHoverMenu menu = new JACPHoverMenu("Hovermenu", layout);

        VBox p = new VBox();
        p.setPadding(new Insets(10));
        Button b = new Button("HELLO");
        CheckBox check = new CheckBox("checkbox");

        p.getChildren().addAll(b, check);

        ColorPicker picker = new ColorPicker();
        menu.getContentPane().getChildren().add(p);

        north.addToCenter(context.getId(), menu);
        north.addToCenter(context.getId(), picker);

    }

    @PreDestroy
    public void PreDestroyPerspective(final FXComponentLayout layout) {
        LOGGER.debug("PreDestroyPerspective");
    }

    @Override
    public void handlePerspective(final Message<Event, Object> message, final PerspectiveLayout perspectiveLayout) {
        if (MessageUtil.INIT.equals(message.getMessageBody())) {
            this.createPerspectiveLayout(perspectiveLayout);
        } else if (SWITCH_MESSAGE.equals(message.getMessageBody())) {
            final String tmp = this.topId;
            this.topId = this.bottomId;
            this.bottomId = tmp;
            this.createPerspectiveLayout(perspectiveLayout);
        }
        LOGGER.debug("handlePerspective message: " + message.getMessageBody());
    }

    private void createPerspectiveLayout(final PerspectiveLayout perspectiveLayout) {

        // bind width and height to ensure that the gridpane is always on
        // fullspan!
        chartView.minWidthProperty().bind(chartAnchor.widthProperty());
        chartView.minHeightProperty().bind(chartAnchor.heightProperty());

        detailView.minWidthProperty().bind(detailAnchor.widthProperty());
        detailView.minHeightProperty().bind(detailAnchor.heightProperty());

        GridPane.setVgrow(perspectiveLayout.getRootComponent(), Priority.ALWAYS);
        GridPane.setHgrow(perspectiveLayout.getRootComponent(), Priority.ALWAYS);
        perspectiveLayout.registerTargetLayoutComponent("PleftMenu", gridPane1);
        // register main content Top
        perspectiveLayout.registerTargetLayoutComponent(this.topId, gridPane2);
        // register main content Bottom
        perspectiveLayout.registerTargetLayoutComponent(this.bottomId, chartView);
        perspectiveLayout.registerTargetLayoutComponent(this.detailId, detailView);
    }

}