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-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.dialogs.scheduling; import com.google.gwt.json.client.JSONObject; import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.gwt.widgets.client.dialogs.PromptDialogBox; import org.pentaho.gwt.widgets.client.filechooser.RepositoryFile; import org.pentaho.mantle.client.commands.AbstractCommand; import org.pentaho.mantle.client.events.EventBusUtil; import org.pentaho.mantle.client.events.SolutionFileActionEvent; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.workspace.JsJob; import org.pentaho.mantle.login.client.MantleLoginDialog; import com.google.gwt.core.client.GWT; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.json.client.JSONString; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; public class ScheduleHelper { static { setupNativeHooks(new ScheduleHelper()); } public static String JOB_SCHEDULER_URL = "api/scheduler/job"; public static String UPDATE_JOB_SCHEDULER_URL = "api/scheduler/job/update"; private static native void setupNativeHooks(ScheduleHelper scheduleHelper) /*-{ $wnd.mantle_confirmBackgroundExecutionDialog = function(url) { //CHECKSTYLE IGNORE LineLength FOR NEXT 1 LINES @org.pentaho.mantle.client.dialogs.scheduling.ScheduleHelper::confirmBackgroundExecutionDialog(Ljava/lang/String;)(url); } }-*/; public static void showScheduleDialog(final String fileNameWithPath, final IDialogCallback callback) { final SolutionFileActionEvent event = new SolutionFileActionEvent(); event.setAction(ScheduleHelper.class.getName()); try { final String url = ScheduleHelper.getFullyQualifiedURL() + "api/mantle/isAuthenticated"; //$NON-NLS-1$ RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url); requestBuilder.setHeader("accept", "text/plain"); requestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); requestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable caught) { MantleLoginDialog.performLogin(new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { } public void onSuccess(Boolean result) { showScheduleDialog(fileNameWithPath, callback); } }); } public void onResponseReceived(Request request, Response response) { String moduleBaseURL = GWT.getModuleBaseURL(); String moduleName = GWT.getModuleName(); final String contextURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf(moduleName)); RequestBuilder emailValidRequest = new RequestBuilder(RequestBuilder.GET, contextURL + "api/emailconfig/isValid"); emailValidRequest.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); emailValidRequest.setHeader("accept", "text/plain"); try { emailValidRequest.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ exception.toString(), false, false, true); dialogBox.center(); event.setMessage(exception.getLocalizedMessage()); EventBusUtil.EVENT_BUS.fireEvent(event); } public void onResponseReceived(Request request, Response response) { if (response.getStatusCode() == Response.SC_OK) { final boolean isEmailConfValid = Boolean.parseBoolean(response.getText()); NewScheduleDialog dialog = new NewScheduleDialog(fileNameWithPath, callback, isEmailConfValid); dialog.center(); event.setMessage("Open"); EventBusUtil.EVENT_BUS.fireEvent(event); } } }); } catch (RequestException e) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), e.toString(), //$NON-NLS-1$ false, false, true); dialogBox.center(); event.setMessage(e.getLocalizedMessage()); EventBusUtil.EVENT_BUS.fireEvent(event); } } }); } catch (RequestException e) { Window.alert(e.getMessage()); event.setMessage(e.getLocalizedMessage()); EventBusUtil.EVENT_BUS.fireEvent(event); } } public static void createSchedule(final RepositoryFile repositoryFile, final IDialogCallback callback) { AbstractCommand scheduleCommand = new AbstractCommand() { protected void performOperation() { // hit the server and check: isScheduleAllowed final String url = ScheduleHelper.getFullyQualifiedURL() + "api/scheduler/isScheduleAllowed?id=" //$NON-NLS-1$ + repositoryFile.getId(); RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url); requestBuilder.setHeader("accept", "text/plain"); requestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); final MessageDialogBox errorDialog = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("noSchedulePermission"), false, false, true); //$NON-NLS-1$ try { requestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable caught) { errorDialog.center(); } public void onResponseReceived(Request request, Response response) { if ("true".equalsIgnoreCase(response.getText())) { callback.okPressed(); } else { errorDialog.center(); } } }); } catch (RequestException re) { errorDialog.center(); } } protected void performOperation(boolean feedback) { performOperation(); } }; scheduleCommand.execute(); } /** * The passed in URL has all the parameters set for background execution. We simply call GET on the URL and * handle the response object. If the response object contains a particular string then we display success * message box. * * @param url * Complete url with all the parameters set for scheduling a job in the background. */ private static void runInBackground(final String url) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); try { builder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); builder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("couldNotBackgroundExecute"), false, false, true); //$NON-NLS-1$ dialogBox.center(); } public void onResponseReceived(Request request, Response response) { /* * We are checking for this specific string because if the job was scheduled successfully by * QuartzBackgroundExecutionHelper then the response is an html that contains the specific string. We * have coded this way because we did not want to touch the old way. */ if ("true".equals(response.getHeader("background_execution"))) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("info"), //$NON-NLS-1$ Messages.getString("backgroundJobScheduled"), false, false, true); //$NON-NLS-1$ dialogBox.center(); } } }); } catch (RequestException e) { MessageDialogBox dialogBox = new MessageDialogBox(Messages.getString("error"), //$NON-NLS-1$ Messages.getString("couldNotBackgroundExecute"), false, false, true); //$NON-NLS-1$ dialogBox.center(); } } public static void confirmBackgroundExecutionDialog(final String url) { final String title = Messages.getString("confirm"); //$NON-NLS-1$ final String message = Messages.getString("userParamBackgroundWarning"); //$NON-NLS-1$ VerticalPanel vp = new VerticalPanel(); vp.add(new Label(Messages.getString(message))); final PromptDialogBox scheduleInBackground = new PromptDialogBox(title, Messages.getString("yes"), //$NON-NLS-1$ Messages.getString("no"), false, true, vp); //$NON-NLS-1$ final IDialogCallback callback = new IDialogCallback() { public void cancelPressed() { scheduleInBackground.hide(); } public void okPressed() { runInBackground(url); } }; scheduleInBackground.setCallback(callback); scheduleInBackground.center(); } public static RequestBuilder buildRequestForJob(JsJob editJob, JSONObject requestPayload) { RequestBuilder scheduleFileRequestBuilder = null; if (editJob == null || editJob.getJobId() == null) { scheduleFileRequestBuilder = new RequestBuilder(RequestBuilder.POST, getFullyQualifiedURL() + JOB_SCHEDULER_URL); } else { scheduleFileRequestBuilder = new RequestBuilder(RequestBuilder.POST, getFullyQualifiedURL() + UPDATE_JOB_SCHEDULER_URL); if (null != requestPayload) { requestPayload.put("jobId", new JSONString(editJob.getJobId())); } } scheduleFileRequestBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); scheduleFileRequestBuilder.setHeader("Content-Type", "application/json"); //$NON-NLS-1$//$NON-NLS-2$ return scheduleFileRequestBuilder; } public static native String getFullyQualifiedURL() /*-{ return $wnd.location.protocol + "//" + $wnd.location.host + $wnd.CONTEXT_PATH }-*/; }