/* * Copyright 2016-2017 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.example.calculator; import griffon.core.artifact.GriffonView; import griffon.inject.MVCMember; import griffon.metadata.ArtifactProviderFor; import griffon.util.CollectionUtils; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.TextField; import org.codehaus.griffon.runtime.javafx.artifact.AbstractJavaFXGriffonView; import org.opendolphin.core.client.ClientDolphin; import org.opendolphin.core.client.ClientPresentationModel; import javax.annotation.Nonnull; import javax.inject.Inject; import static org.example.calculator.CalculatorPM.ATTR_ERROR; import static org.example.calculator.CalculatorPM.ATTR_OP1; import static org.example.calculator.CalculatorPM.ATTR_OP2; import static org.example.calculator.CalculatorPM.ATTR_RESULT; import static org.example.calculator.CalculatorPM.PM_CALCULATION; import static org.opendolphin.binding.JFXBinder.bind; @ArtifactProviderFor(GriffonView.class) public class CalculatorView extends AbstractJavaFXGriffonView { private static final String TEXT = "text"; private CalculatorController controller; @MVCMember public void setController(@Nonnull CalculatorController controller) { this.controller = controller; } @FXML private TextField op1Field; @FXML private TextField op2Field; @FXML private TextField resultField; @Inject private ClientDolphin clientDolphin; private Node calculatorNode; @Nonnull public Node getCalculatorNode() { return calculatorNode; } @Override public void initUI() { calculatorNode = loadFromFXML(); connectActions(calculatorNode, controller); bindPresentationModel(); } private void bindPresentationModel() { ClientPresentationModel pm = clientDolphin.presentationModel(PM_CALCULATION, CollectionUtils.<String, Object>map() .e(ATTR_OP1, 0L) .e(ATTR_OP2, 0L) .e(ATTR_RESULT, 0L) .e(ATTR_ERROR, "")); // from PM attributes to UI widgets bind(ATTR_OP1).of(pm).to(TEXT).of(op1Field); bind(ATTR_OP2).of(pm).to(TEXT).of(op2Field); bind(ATTR_RESULT).of(pm).to(TEXT).of(resultField); // from UI widgets to PM attributes bind(TEXT).of(op1Field).to(ATTR_OP1).of(pm); bind(TEXT).of(op2Field).to(ATTR_OP2).of(pm); } }