/* * Copyright (C) 2010 - 2014. * 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.components; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.control.Button; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jacp.demo.entity.Contact; import org.jacpfx.api.annotations.Resource; import org.jacpfx.api.annotations.component.View; import org.jacpfx.api.annotations.lifecycle.PostConstruct; import org.jacpfx.api.message.Message; import org.jacpfx.api.util.ToolbarPosition; import org.jacpfx.rcp.component.FXComponent; import org.jacpfx.rcp.componentLayout.FXComponentLayout; import org.jacpfx.rcp.components.toolBar.JACPToolBar; import org.jacpfx.rcp.context.Context; import org.jacpfx.rcp.util.FXUtil.MessageUtil; /** * The ContactTreeViewComponent displays the contact category on the left side * of the application; It creates a "add category" button to add new categories * to view * * @author Andy Moncsek Patrick Symmangk */ @View(id = "id001", name = "contactDemoTreeView", active = true,initialTargetLayoutId ="PleftMenu" ) public class ContactTreeViewComponent implements FXComponent { private final static Log LOGGER = LogFactory .getLog(ContactTreeViewComponent.class); private ContactTreeView pane; private ObservableList<Contact> contactList; @Resource private Context context; @Override /** * handle the component in worker thread */ public Node handle(final Message<Event, Object> message) throws Exception { // on initial message create the layout outside the FXApplication thread if (message.messageBodyEquals(MessageUtil.INIT)) { return this.createInitialLayout(); } LOGGER.debug("ContactTreeViewComponent handleAction message: " + message.getMessageBody()); return null; } @Override /** * handle the component in FX application thread */ public Node postHandle(final Node node, final Message<Event, Object> message) throws Exception { // add a new contact in FXApplication thread LOGGER.debug("parentId: "+context.getParentId() ); if (message.isMessageBodyTypeOf(Contact.class)) { final Contact contact = message.getTypedMessageBody(Contact.class); this.addNewContact(contact); } return this.pane; } /** * handle menu an toolbar entries on component start up */ @PostConstruct public void PostConstructComponent(final FXComponentLayout layout) { final JACPToolBar north = layout .getRegisteredToolBar(ToolbarPosition.NORTH); final Button add = new Button("add category"); add.getStyleClass().add("first"); final ContactTreeViewComponent component = this; add.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(final ActionEvent event) { new ContactAddDialog(component); } }); north.add(context.getId(), add); } private ContactTreeView createInitialLayout() { this.contactList = this.getCategoryList(); this.pane = new ContactTreeView(this.contactList, this); return this.pane; } /** * create dummy category list * * @return */ private ObservableList<Contact> getCategoryList() { final ObservableList<Contact> categories = FXCollections .<Contact> observableArrayList(); final Contact privateContact = new Contact(); privateContact.setFirstName("private"); final Contact publicContact = new Contact(); publicContact.setFirstName("public"); final Contact officeContact = new Contact(); officeContact.setFirstName("office"); categories.add(privateContact); categories.add(publicContact); categories.add(officeContact); return categories; } private void addNewContact(final Contact contact) { this.contactList.add(contact); } public Context getContext(){ return this.context; } }