Package org.apache.syncope.console.markup.html

Source Code of org.apache.syncope.console.markup.html.CrontabContainer

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.apache.syncope.console.markup.html;

import java.util.Arrays;
import org.apache.syncope.console.commons.SelectChoiceRenderer;
import org.apache.syncope.console.commons.SelectOption;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CrontabContainer extends WebMarkupContainer {

    /**
     * Logger.
     */
    protected static final Logger LOG = LoggerFactory.getLogger(CrontabContainer.class);

    private static final SelectOption[] CRON_TEMPLATES = {
        new SelectOption("Unschedule", "UNSCHEDULE"), new SelectOption("Every 5 minutes", "0 0/5 * * * ?"),
        new SelectOption("Fire at 12pm (noon) every day", "0 0 12 * * ?"),
        new SelectOption("Fire at 12am (midnight) every first day of the month", "0 0 0 1 * ?"),
        new SelectOption("Fire at 12am (midnight) every last day of the month", "0 0 0 L * ?"),
        new SelectOption("Fire at 12am (midnight) every Monday", "0 0 0 ? * 2")
    };

    private static final long serialVersionUID = 7879593326085337650L;

    private final TextField seconds;

    private final TextField minutes;

    private final TextField hours;

    private final TextField daysOfMonth;

    private final TextField months;

    private final TextField daysOfWeek;

    public CrontabContainer(final String id, final PropertyModel<String> cronExpressionModel,
            final String cronExpression) {

        super(id);
        setOutputMarkupId(true);

        final DropDownChoice<SelectOption> cronTemplateChooser =
                new DropDownChoice<SelectOption>("cronTemplateChooser") {

                    private static final long serialVersionUID = -5843424545478691442L;

                    @Override
                    protected CharSequence getDefaultChoice(final String selected) {
                        return "<option value=\"\">" + getString("chooseForTemplate") + "</option>";
                    }
                };
        cronTemplateChooser.setModel(new IModel<SelectOption>() {

            private static final long serialVersionUID = 6762568283146531315L;

            @Override
            public SelectOption getObject() {
                SelectOption result = null;
                for (SelectOption so : CRON_TEMPLATES) {
                    if (so.getKeyValue().equals(cronExpressionModel.getObject())) {

                        result = so;
                    }
                }

                return result;
            }

            @Override
            public void setObject(final SelectOption object) {
                cronExpressionModel.setObject(object == null || object.equals(CRON_TEMPLATES[0])
                        ? null
                        : object.toString());
            }

            @Override
            public void detach() {
            }
        });
        cronTemplateChooser.setChoices(Arrays.asList(CRON_TEMPLATES));
        cronTemplateChooser.setChoiceRenderer(new SelectChoiceRenderer());
        add(cronTemplateChooser);

        seconds = new TextField("seconds", new Model(getCronField(cronExpression, 0)));
        add(seconds);

        minutes = new TextField("minutes", new Model(getCronField(cronExpression, 1)));
        add(minutes);

        hours = new TextField("hours", new Model(getCronField(cronExpression, 2)));
        add(hours);

        daysOfMonth = new TextField("daysOfMonth", new Model(getCronField(cronExpression, 3)));
        add(daysOfMonth);

        months = new TextField("months", new Model(getCronField(cronExpression, 4)));
        add(months);

        daysOfWeek = new TextField("daysOfWeek", new Model(getCronField(cronExpression, 5)));
        add(daysOfWeek);

        cronTemplateChooser.add(new AjaxFormComponentUpdatingBehavior("onchange") {

            private static final long serialVersionUID = -1107858522700306810L;

            @Override
            protected void onUpdate(final AjaxRequestTarget target) {
                seconds.setModelObject(getCronField(cronTemplateChooser, 0));
                minutes.setModelObject(getCronField(cronTemplateChooser, 1));
                hours.setModelObject(getCronField(cronTemplateChooser, 2));
                daysOfMonth.setModelObject(getCronField(cronTemplateChooser, 3));
                months.setModelObject(getCronField(cronTemplateChooser, 4));
                daysOfWeek.setModelObject(getCronField(cronTemplateChooser, 5));
                target.add(CrontabContainer.this);
            }
        });
    }

    private String getCronField(final FormComponent formComponent, final int field) {
        String cronField = null;

        if (formComponent != null) {
            cronField = getCronField(formComponent.getInput(), field);
        }

        return cronField;
    }

    private String getCronField(final String cron, final int field) {
        String cronField = null;

        if (cron != null && !cron.isEmpty() && !"UNSCHEDULE".equals(cron)) {
            cronField = cron.split(" ")[field].trim();
        }

        return cronField;
    }

    public String getCronExpression() {
        String cronExpression = null;

        if (seconds != null && seconds.getInput() != null && minutes != null && minutes.getInput() != null
                && hours != null && hours.getInput() != null && daysOfMonth != null && daysOfMonth.getInput() != null
                && months != null && months.getInput() != null && daysOfWeek != null && daysOfWeek.getInput() != null) {

            cronExpression = new StringBuilder().
                    append(seconds.getInput().trim()).append(" ").
                    append(minutes.getInput().trim()).append(" ").
                    append(hours.getInput().trim()).append(" ").
                    append(daysOfMonth.getInput().trim()).append(" ").
                    append(months.getInput().trim()).append(" ").
                    append(daysOfWeek.getInput().trim()).toString();
        }

        return cronExpression;
    }
}
TOP

Related Classes of org.apache.syncope.console.markup.html.CrontabContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.