io.ucoin.ucoinj.web.components.progressionModel.ProgressionPanel.java Source code

Java tutorial

Introduction

Here is the source code for io.ucoin.ucoinj.web.components.progressionModel.ProgressionPanel.java

Source

package io.ucoin.ucoinj.web.components.progressionModel;

/*
 * #%L
 * SIH-Adagio :: UI for Core Allegro
 * $Id:$
 * $HeadURL:$
 * %%
 * Copyright (C) 2012 - 2014 Ifremer
 * %%
 * 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/gpl-3.0.html>.
 * #L%
 */

import com.googlecode.wicket.jquery.ui.panel.JQueryFeedbackPanel;
import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
import io.ucoin.ucoinj.core.model.ProgressionModel;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.time.Duration;

public class ProgressionPanel extends Panel {
    private static final long serialVersionUID = 1L;

    private final AbstractAjaxTimerBehavior timer;
    private final ProgressBar progressBar;
    private final FeedbackPanel feedback;
    private final Label taskLabel;

    private boolean stopped = false;

    public ProgressionPanel(String id, IModel<ProgressionModel> model) {
        super(id, model);

        // Timer
        timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onTimer(AjaxRequestTarget target) {
                if (stopped) {
                    ProgressionPanel.this.stop(target);
                    return;
                }
                ProgressionModel progressionModel = getModelObject();
                if (progressionModel != null) {
                    synchronized (progressionModel) {
                        if (progressionModel.getStatus() == ProgressionModel.Status.FAILED
                                || progressionModel.getStatus() == ProgressionModel.Status.STOPPED) {
                            error(progressionModel.getMessage());
                        } else {
                            info(progressionModel.getMessage());
                        }
                    }
                }
                progressBar.refresh(target);
                target.add(feedback, progressBar, taskLabel);
            }
        };
        add(timer);

        // Job label
        taskLabel = new Label("taskLabel", new PropertyModel<String>(model, "task"));
        taskLabel.setOutputMarkupId(true);
        add(taskLabel);

        // ProgressBar
        this.progressBar = new ProgressBar("progress", new PropertyModel<Integer>(model, "current")) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onComplete(AjaxRequestTarget target) {
                timer.stop(target); // wicket6
                getFeedbackMessages().clear();

                ProgressionPanel.this.onComplete(target);

            }
        };
        // progressBar.add(new AjaxSelfUpdatingTimerBehavior(Duration.ONE_SECOND));
        progressBar.setOutputMarkupId(true);
        progressBar.setVisibilityAllowed(true);
        add(progressBar);

        // FeedbackPanel
        feedback = new JQueryFeedbackPanel("feedback", this);
        feedback.setOutputMarkupId(true);
        add(feedback);

    }

    @Override
    protected void onConfigure() {
        super.onConfigure();

        ProgressionModel progressionModel = getModelObject();
        if (progressionModel != null) {
            synchronized (progressionModel) {
                if (progressionModel.getStatus() == ProgressionModel.Status.FAILED
                        || progressionModel.getStatus() == ProgressionModel.Status.STOPPED) {
                    error(progressionModel.getMessage());
                } else {
                    info(progressionModel.getMessage());
                }
            }
        }
    }

    public void setModelObject(ProgressionModel progressionModel) {
        if (getDefaultModelObject() != progressionModel) {
            setDefaultModelObject(progressionModel);
        }
    }

    public void setModel(IModel<ProgressionModel> model) {
        setDefaultModel(model);
    }

    public void restart(AjaxRequestTarget target) {
        stopped = false;
        if (timer.isStopped()) {
            timer.restart(target);
        }
    }

    public void stop(AjaxRequestTarget target) {
        if (!timer.isStopped()) {
            timer.stop(target);
        }
        stopped = true;
    }

    public void onComplete(AjaxRequestTarget target) {
        // could be override by subclass
    }

    public IModel<ProgressionModel> getModel() {
        @SuppressWarnings("unchecked")
        IModel<ProgressionModel> result = (IModel<ProgressionModel>) getDefaultModel();
        return result;
    }

    public ProgressionModel getModelObject() {
        return (ProgressionModel) getDefaultModelObject();
    }

    /* -- Internal methods -- */

}