Java tutorial
/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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 Lesser General Public License for more details. * * Copyright (c) 2002-2017 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.dialogs.scheduling; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import org.pentaho.gwt.widgets.client.utils.string.StringUtils; import org.pentaho.gwt.widgets.client.wizards.AbstractWizardPanel; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.workspace.JsJob; import org.pentaho.mantle.client.workspace.JsJobParam; public class ScheduleEmailWizardPanel extends AbstractWizardPanel { private static final String PENTAHO_SCHEDULE = "pentaho-schedule-create"; //$NON-NLS-1$ public static final String EMAIL_MIME = "mime-message/text/html"; protected RadioButton yes = new RadioButton("SCH_EMAIL_YESNO", Messages.getString("yes")); protected RadioButton no = new RadioButton("SCH_EMAIL_YESNO", Messages.getString("no")); protected TextBox toAddressTextBox = new TextBox(); protected TextBox subjectTextBox = new TextBox(); protected TextBox attachmentNameTextBox = new TextBox(); protected Label attachmentLabel = new Label(Messages.getString("attachmentName")); protected TextArea messageTextArea = new TextArea(); private String filePath; private JSONObject jobSchedule; private JSONArray scheduleParams; public ScheduleEmailWizardPanel(String filePath, JSONObject jobSchedule, JsJob job) { this(filePath, jobSchedule, job, null); } public ScheduleEmailWizardPanel(String filePath, JSONObject jobSchedule, JsJob editJob, JSONArray scheduleParams) { super(); this.filePath = filePath; this.jobSchedule = jobSchedule; this.scheduleParams = scheduleParams; layout(editJob); } private native JsArray<JsSchedulingParameter> getParams(String to, String cc, String bcc, String subject, String message, String attachmentName) /*-{ var paramEntries = new Array(); paramEntries.push({ name: '_SCH_EMAIL_TO', stringValue: to, type: 'string' }); paramEntries.push({ name: '_SCH_EMAIL_CC', stringValue: cc, type: 'string' }); paramEntries.push({ name: '_SCH_EMAIL_BCC', stringValue: bcc, type: 'string' }); paramEntries.push({ name: '_SCH_EMAIL_SUBJECT', stringValue: subject, type: 'string' }); paramEntries.push({ name: '_SCH_EMAIL_MESSAGE', stringValue: message, type: 'string' }); paramEntries.push({ name: '_SCH_EMAIL_ATTACHMENT_NAME', stringValue: attachmentName, type: 'string' }); return paramEntries; }-*/; public JsArray<JsSchedulingParameter> getEmailParams() { if (yes.getValue()) { return getParams(toAddressTextBox.getText(), "", "", subjectTextBox.getText(), messageTextArea.getText(), attachmentNameTextBox.getText()); } else { return null; } } private void layout(JsJob job) { this.addStyleName(PENTAHO_SCHEDULE); final FlexTable emailSchedulePanel = new FlexTable(); emailSchedulePanel.getElement().setId("email-schedule-panel"); emailSchedulePanel.setVisible(false); HorizontalPanel emailYesNoPanel = new HorizontalPanel(); emailYesNoPanel.getElement().setId("email-yes-no-panel"); emailYesNoPanel.add((new Label(Messages.getString("wouldYouLikeToEmail")))); no.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { emailSchedulePanel.setVisible(!no.getValue()); setCanContinue(isValidConfig()); setCanFinish(isValidConfig()); } }); yes.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { emailSchedulePanel.setVisible(yes.getValue()); setCanContinue(isValidConfig()); setCanFinish(isValidConfig()); setFocus(); } }); no.setValue(true); yes.setValue(false); emailYesNoPanel.add(no); emailYesNoPanel.add(yes); this.add(emailYesNoPanel, NORTH); toAddressTextBox.setVisibleLength(95); subjectTextBox.setVisibleLength(95); attachmentNameTextBox.setVisibleLength(95); boolean hasExtension = filePath.lastIndexOf(".") != -1; String friendlyFileName = filePath.substring(filePath.lastIndexOf("/") + 1); if (hasExtension) { // remove it friendlyFileName = friendlyFileName.substring(0, friendlyFileName.lastIndexOf(".")); } subjectTextBox.setText(Messages.getString("scheduleDefaultSubject", friendlyFileName)); if (job != null) { attachmentNameTextBox.setText(job.getJobName()); } else { attachmentNameTextBox.setText(jobSchedule.get("jobName").isString().stringValue()); } Label toLabel = new Label(Messages.getString("to")); toLabel.getElement().getStyle().setMarginRight(3, Unit.PX); // toLabel.setWidth("130px"); toLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); Label toAddressLabel = new Label(Messages.getString("scheduleAddressSeparatorMessage")); toAddressLabel.setStyleName("msg-Label"); HorizontalPanel toLabelPanel = new HorizontalPanel(); toLabelPanel.add(toLabel); toLabelPanel.add(toAddressLabel); toAddressTextBox.addKeyUpHandler(new KeyUpHandler() { public void onKeyUp(KeyUpEvent event) { setCanContinue(isValidConfig()); setCanFinish(isValidConfig()); } }); emailSchedulePanel.setWidget(0, 0, toLabelPanel); emailSchedulePanel.setWidget(1, 0, toAddressTextBox); Label subjectLabel = new Label(Messages.getString("subject")); subjectLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); emailSchedulePanel.setWidget(3, 0, subjectLabel); emailSchedulePanel.setWidget(4, 0, subjectTextBox); attachmentLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); emailSchedulePanel.setWidget(5, 0, attachmentLabel); emailSchedulePanel.setWidget(6, 0, attachmentNameTextBox); messageTextArea.setVisibleLines(5); messageTextArea.setWidth("100%"); Label messageLabel = new Label(Messages.getString("scheduleEmailMessage")); emailSchedulePanel.setWidget(7, 0, messageLabel); emailSchedulePanel.setWidget(8, 0, messageTextArea); if (job != null) { JsArray<JsJobParam> jparams = job.getJobParams(); for (int i = 0; i < jparams.length(); i++) { if ("_SCH_EMAIL_TO".equals(jparams.get(i).getName())) { yes.setValue(true); no.setValue(false); emailSchedulePanel.setVisible(true); toAddressTextBox.setText(jparams.get(i).getValue()); } else if ("_SCH_EMAIL_SUBJECT".equals(jparams.get(i).getName())) { subjectTextBox.setText(jparams.get(i).getValue()); } else if ("_SCH_EMAIL_MESSAGE".equals(jparams.get(i).getName())) { messageTextArea.setText(jparams.get(i).getValue()); } else if ("_SCH_EMAIL_ATTACHMENT_NAME".equals(jparams.get(i).getName())) { attachmentNameTextBox.setText(jparams.get(i).getValue()); } } } this.add(emailSchedulePanel, CENTER); panelWidgetChanged(null); } private void toggleAttachmentFields() { if (attachmentLabel != null && attachmentNameTextBox != null) { if (scheduleParams != null && scheduleParams.toString().contains(EMAIL_MIME)) { attachmentLabel.setVisible(false); attachmentNameTextBox.setVisible(false); } else { attachmentLabel.setVisible(true); attachmentNameTextBox.setVisible(true); } } } public String getName() { return Messages.getString("schedule.scheduleEdit"); } protected boolean isValidConfig() { if (no.getValue()) { return true; } boolean empty = StringUtils.isEmpty(toAddressTextBox.getText()); if (!empty) { int at = toAddressTextBox.getText().indexOf("@"); if (at > 0 && at < toAddressTextBox.getText().length() - 1) { return true; } } return false; } protected void panelWidgetChanged(Widget changedWidget) { setCanContinue(isValidConfig()); setCanFinish(isValidConfig()); toggleAttachmentFields(); } public void setScheduleParams(JSONArray scheduleParams) { this.scheduleParams = scheduleParams; } public void setFocus() { Timer t = new Timer() { public void run() { toAddressTextBox.getElement().blur(); toAddressTextBox.setFocus(false); toAddressTextBox.setFocus(true); toAddressTextBox.getElement().focus(); if (toAddressTextBox.isAttached() && toAddressTextBox.isVisible()) { cancel(); } } }; t.scheduleRepeating(250); } }