ro.fortsoft.wicket.pivot.web.FieldCalculationPanel.java Source code

Java tutorial

Introduction

Here is the source code for ro.fortsoft.wicket.pivot.web.FieldCalculationPanel.java

Source

/*
 * Copyright 2012, 2013 Decebal Suiu, Emmeran Seehuber
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with
 * the License. You may obtain a copy of the License in the LICENSE file, or 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 ro.fortsoft.wicket.pivot.web;

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

import ro.fortsoft.wicket.pivot.FieldCalculation;
import ro.fortsoft.wicket.pivot.PivotField;
import ro.fortsoft.wicket.pivot.PivotModel;

public class FieldCalculationPanel extends GenericPanel<PivotField> {
    private final static class OnChangeAjaxBehaviorExtension extends OnChangeAjaxBehavior {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            // We just want the field content to be pushed to the server
        }
    }

    private static final class PivotFieldChoiceRenderer extends ChoiceRenderer<PivotField> {
        private static final long serialVersionUID = 1L;

        @Override
        public Object getDisplayValue(PivotField object) {
            return object.getTitle() + " (" + object.getCalculationDescription() + ")";
        }
    }

    private static final long serialVersionUID = 1L;

    private FieldCalculation fieldCalculation;
    private PivotField fieldA;
    private PivotField fieldB;
    private String title = "Calculation";
    private boolean okPressed;

    public FieldCalculationPanel(String id, IModel<PivotField> model, IModel<PivotModel> pivotModel) {
        super(id, model);

        okPressed = false;

        setFieldCalculation(getModelObject().getFieldCalculation());
        if (fieldCalculation != null) {
            fieldA = fieldCalculation.getFieldA();
            fieldB = fieldCalculation.getFieldB();
        }
        List<FieldCalculation> fieldCalculations = new ArrayList<FieldCalculation>();
        for (String name : FieldCalculation.FUNCTIONS)
            fieldCalculations.add(FieldCalculation.get(name));

        final DropDownChoice<FieldCalculation> fieldCalculationDropDown = new DropDownChoice<FieldCalculation>(
                "fieldCalcluation", new PropertyModel<FieldCalculation>(this, "fieldCalculation"),
                fieldCalculations, new ChoiceRenderer<FieldCalculation>("function") {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public Object getDisplayValue(FieldCalculation object) {
                        return object == null ? "" : object.getDescription();
                    }
                });
        fieldCalculationDropDown.setOutputMarkupId(true);
        fieldCalculationDropDown.add(new OnChangeAjaxBehaviorExtension());
        add(fieldCalculationDropDown);

        List<PivotField> fields = new ArrayList<PivotField>();
        for (PivotField field : pivotModel.getObject().getFields()) {
            if (field.getAggregator() != null && field.getFieldCalculation() == null && field.isNumber())
                fields.add(field);
        }
        final DropDownChoice<PivotField> fieldADropDown = new DropDownChoice<PivotField>("fieldA",
                new PropertyModel<PivotField>(this, "fieldA"), fields, new PivotFieldChoiceRenderer());
        fieldADropDown.setOutputMarkupId(true);
        fieldADropDown.add(new OnChangeAjaxBehaviorExtension());
        add(fieldADropDown);

        final DropDownChoice<PivotField> fieldBDropDown = new DropDownChoice<PivotField>("fieldB",
                new PropertyModel<PivotField>(this, "fieldB"), fields, new PivotFieldChoiceRenderer());
        fieldBDropDown.setOutputMarkupId(true);
        fieldBDropDown.add(new OnChangeAjaxBehaviorExtension());
        add(fieldBDropDown);

        add(new TextField<String>("title", new PropertyModel<String>(this, "title"))
                .add(new OnChangeAjaxBehaviorExtension()));

        add(new AjaxLink<Void>("ok") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                if (fieldCalculation != null) {
                    okPressed = true;
                    fieldCalculation.setFieldA(fieldA);
                    fieldCalculation.setFieldB(fieldB);
                }
                ModalWindow.closeCurrent(target);
            }
        });
    }

    public boolean isOkPressed() {
        return okPressed;
    }

    public FieldCalculation getFieldCalculation() {
        return fieldCalculation;
    }

    public void setFieldCalculation(FieldCalculation fieldCalculation) {
        this.fieldCalculation = fieldCalculation;
    }

    public PivotField getFieldA() {
        return fieldA;
    }

    public void setFieldA(PivotField fieldA) {
        this.fieldA = fieldA;
    }

    public PivotField getFieldB() {
        return fieldB;
    }

    public void setFieldB(PivotField fieldB) {
        this.fieldB = fieldB;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}