/* * 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 ro.nextreports.server.web.schedule.time; import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Arrays; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import ro.nextreports.server.domain.SchedulerJob; import ro.nextreports.server.domain.SchedulerTime; import ro.nextreports.server.schedule.ScheduleConstants; // public class MonthlyJobPanel extends Panel { private SchedulerJob schedulerJob; private Label minuteLabel; private DropDownChoice minuteChoice; private Label everyMinuteLabel; private TextField<Integer> minuteText; private IntervalFieldPanel hoursPanel; private IntervalFieldPanel daysPanel; private IntervalFieldPanel weekdaysPanel; private Label monthsLabel; private IntervalFieldPanel monthsPanel; private Label weekDaysLabel; private DropDownChoice<Integer> noChoice ; private DropDownChoice<String> dayChoice; private Label everyLabel; private Label typeLabel; private DropDownChoice<Integer> mTypeChoice; public MonthlyJobPanel(String id, SchedulerJob schedulerJob) { super(id, new Model<SchedulerJob>(schedulerJob)); this.schedulerJob = schedulerJob; setOutputMarkupId(true); add(minuteLabel = new Label("minuteLabel", getString("JobPanel.minute"))); add(minuteChoice = new DropDownChoice<Integer>("minuteChoice", new PropertyModel<Integer>(schedulerJob, "time.minute"), getMinutes())); everyMinuteLabel = new Label("everyMinuteLabel", getString("JobPanel.everyMinute")); add(everyMinuteLabel); minuteText = new TextField<Integer>("minuteText", new PropertyModel<Integer>(schedulerJob, "time.gap")); add(minuteText); Label hoursLabel = new Label("hoursLabel", getString("hours")); add(hoursLabel); hoursPanel = new IntervalFieldPanel("hoursPanel", new PropertyModel(schedulerJob, "time.hours"), SelectIntervalPanel.HOUR_ENTITY, TimeValues.DISCRETE_TYPE, true); add(hoursPanel); Label daysLabel = new Label("daysLabel", getString("days")); add(daysLabel); daysPanel = new IntervalFieldPanel("daysPanel", new PropertyModel(schedulerJob, "time.days"), SelectIntervalPanel.DAY_ENTITY, null); add(daysPanel); monthsLabel = new Label("monthsLabel", getString("months")); add(monthsLabel); monthsPanel = new IntervalFieldPanel("monthsPanel", new PropertyModel(schedulerJob, "time.months"), SelectIntervalPanel.MONTH_ENTITY, null); add(monthsPanel); weekDaysLabel = new Label("weekDaysLabel", getString("weekDays")); add(weekDaysLabel); weekdaysPanel = new IntervalFieldPanel("weekdaysPanel", new PropertyModel(schedulerJob, "time.daysOfWeek"), SelectIntervalPanel.DAY_OF_WEEK_ENTITY, null); add(weekdaysPanel); final String[] nos = new String[]{"first", "second", "third", "fourth", "last"}; noChoice = new DropDownChoice<Integer>("noChoice", new PropertyModel<Integer>(schedulerJob, "time.dayNo"), Arrays.asList(1, 2, 3, 4, 5), new IChoiceRenderer<Integer>() { public Object getDisplayValue(Integer s) { return getString(nos[s.intValue() - 1]); } public String getIdValue(Integer s, int i) { return String.valueOf(s); } }); add(noChoice); final String[] days = new String[7]; System.arraycopy(new DateFormatSymbols().getWeekdays(), 1, days, 0, 7); dayChoice = new DropDownChoice<String>("dayChoice", new PropertyModel<String>(schedulerJob, "time.daysOfWeek"), Arrays.asList("1", "2", "3", "4", "5", "6", "7"), new IChoiceRenderer<String>() { public Object getDisplayValue(String s) { int index; try { index = Integer.parseInt(s); } catch (NumberFormatException ex) { return s; } return days[index - 1]; } public String getIdValue(String s, int i) { return s; } }) { protected CharSequence getDefaultChoice(Object o) { return days[0]; } }; dayChoice.setRequired(true); add(dayChoice); everyLabel = new Label("everyLabel", getString("JobPanel.monthly.every")); add(everyLabel); noChoice.setEnabled(false); dayChoice.setEnabled(false); everyLabel.setEnabled(false); add(typeLabel = new Label("mTypeLabel", getString("JobPanel.monthly.type"))); final String[] names = new String[]{"General", "DayOfWeek", "LastDay"}; mTypeChoice = new DropDownChoice<Integer>("mTypeChoice", new PropertyModel<Integer>(MonthlyJobPanel.this.schedulerJob, "time.monthlyType"), Arrays.asList(ScheduleConstants.MONTHLY_GENERAL_TYPE, ScheduleConstants.MONTHLY_DAY_OF_WEEK_TYPE, ScheduleConstants.MONTHLY_LAST_DAY_TYPE), new IChoiceRenderer<Integer>() { public Object getDisplayValue(Integer s) { return getString("JobPanel.monthly." + names[s.intValue() - 1]); } public String getIdValue(Integer s, int i) { return String.valueOf(s); } }); mTypeChoice.setRequired(true); add(mTypeChoice); mTypeChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { protected void onUpdate(AjaxRequestTarget target) { int monthlyType = mTypeChoice.getModelObject(); enableComponents(monthlyType, minuteLabel, minuteChoice, everyMinuteLabel, minuteText, hoursPanel, monthsPanel, noChoice, dayChoice, everyLabel); getSchedulerTime().setMonthlyType(monthlyType); target.add(MonthlyJobPanel.this); } }); if ((schedulerJob.getTime() != null) && (schedulerJob.getTime().getMonthlyType() != 0)) { enableComponents(schedulerJob.getTime().getMonthlyType(), minuteLabel, minuteChoice, everyMinuteLabel, minuteText, hoursPanel, monthsPanel, noChoice, dayChoice, everyLabel); } } private void enableComponents(int monthlyType, Label mLabel, DropDownChoice minuteChoice, Label label, TextField<Integer> minuteText, IntervalFieldPanel hoursPanel, IntervalFieldPanel monthsPanel, DropDownChoice<Integer> noChoice, DropDownChoice<String> dayChoice, Label everyLabel) { if (ScheduleConstants.MONTHLY_GENERAL_TYPE == monthlyType) { mLabel.setEnabled(true); minuteChoice.setEnabled(true); label.setEnabled(true); minuteText.setEnabled(true); hoursPanel.setEnabled(true); daysPanel.setEnabled(true); monthsPanel.setEnabled(true); weekdaysPanel.setEnabled(true); noChoice.setEnabled(false); dayChoice.setEnabled(false); everyLabel.setEnabled(false); } else if (ScheduleConstants.MONTHLY_DAY_OF_WEEK_TYPE == monthlyType) { mLabel.setEnabled(false); minuteChoice.setEnabled(false); label.setEnabled(false); minuteText.setEnabled(false); hoursPanel.setEnabled(false); daysPanel.setEnabled(false); monthsPanel.setEnabled(false); weekdaysPanel.setEnabled(false); noChoice.setEnabled(true); dayChoice.setEnabled(true); everyLabel.setEnabled(true); } else { mLabel.setEnabled(false); minuteChoice.setEnabled(false); label.setEnabled(false); minuteText.setEnabled(false); hoursPanel.setEnabled(false); daysPanel.setEnabled(false); monthsPanel.setEnabled(false); weekdaysPanel.setEnabled(false); noChoice.setEnabled(false); dayChoice.setEnabled(false); everyLabel.setEnabled(false); } } public SchedulerTime getSchedulerTime() { return schedulerJob.getTime(); } public IntervalFieldPanel getDaysPanel() { return daysPanel; } public IntervalFieldPanel getWeekdaysPanel() { return weekdaysPanel; } public void setAdvancedType(boolean advanced) { typeLabel.setVisible(advanced); mTypeChoice.setVisible(advanced); everyMinuteLabel.setVisible(advanced); minuteText.setVisible(advanced); hoursPanel.setLinkVisible(advanced); weekDaysLabel.setVisible(advanced); weekdaysPanel.setVisible(advanced); daysPanel.setLinkVisible(advanced); monthsLabel.setVisible(advanced); monthsPanel.setVisible(advanced); noChoice.setVisible(advanced); dayChoice.setVisible(advanced); everyLabel.setVisible(advanced); } public void reset(boolean advanced) { if (!advanced) { schedulerJob.getTime().setGap(0); // we have fixed minute schedulerJob.getTime().setMonths(null); schedulerJob.getTime().setDaysOfWeek(null); schedulerJob.getTime().setMonthlyType(ScheduleConstants.MONTHLY_GENERAL_TYPE); } } public ArrayList<Integer> getMinutes() { ArrayList<Integer> result = new ArrayList<Integer>(); for (int i = 0; i <= 59; i++) { result.add(i); } return result; } }