/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed 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 net.java.sip.communicator.impl.gui; import javax.swing.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.systray.*; import net.java.sip.communicator.service.systray.event.*; import net.java.sip.communicator.util.*; /** * The AlertUIServiceImpl is an implementation of the * AlertUIService that allows to show swing error dialogs. * * @author Yana Stamcheva */ public class AlertUIServiceImpl implements AlertUIService { /** * The pop-up notification listener which handles the clicking on the * pop-up notification. */ private SystrayPopupMessageListener listener = null; /** * The Logger used by the AlertUIServiceImpl class and * its instances for logging output. */ private static final Logger logger = Logger.getLogger(AlertUIServiceImpl.class); /** * Shows an alert dialog with the given title and message. * * @param title the title of the dialog * @param message the message to be displayed */ public void showAlertDialog(final String title, final String message) { if(!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(new Runnable() { public void run() { showAlertDialog(title, message); } }); return; } new ErrorDialog(GuiActivator.getUIService().getMainFrame(), title, message).showDialog(); } /** * Shows an alert dialog with the given title message and exception * corresponding to the error. * * @param title the title of the dialog * @param message the message to be displayed * @param e the exception corresponding to the error */ public void showAlertDialog(final String title, final String message, final Throwable e) { if(!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(new Runnable() { public void run() { showAlertDialog(title, message, e); } }); return; } new ErrorDialog(GuiActivator.getUIService().getMainFrame(), title, message, e).showDialog(); } /** * Shows an alert dialog with the given title, message and type of message. * * @param title the title of the error dialog * @param message the message to be displayed * @param type the dialog type (warning or error) */ public void showAlertDialog(final String title, final String message, final int type) { if(!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(new Runnable() { public void run() { showAlertDialog(title, message, type); } }); return; } new ErrorDialog(GuiActivator.getUIService().getMainFrame(), title, message, type).showDialog(); } /** * Shows an notification pop-up which can be clicked. An error dialog is * shown when the notification is clicked. * * @param title the title of the error dialog and the notification pop-up * @param message the message to be displayed in the error dialog and the * pop-up */ public void showAlertPopup(String title, String message) { showAlertPopup(title, message, title, message, null); } /** * Shows an notification pop-up which can be clicked. An error dialog is * shown when the notification is clicked. * * @param title the title of the error dialog and the notification pop-up * @param message the message to be displayed in the error dialog and the * pop-up * @param e the exception that can be shown in the error dialog */ public void showAlertPopup(String title, String message, Throwable e) { showAlertPopup(title, message, title, message, e); } /** * Shows an notification pop-up which can be clicked. An error dialog is * shown when the notification is clicked. * * @param title the title of the notification pop-up * @param message the message of the pop-up * @param errorDialogTitle the title of the error dialog * @param errorDialogMessage the message of the error dialog */ public void showAlertPopup(String title, String message, String errorDialogTitle, String errorDialogMessage) { showAlertPopup(title, message, errorDialogTitle, errorDialogMessage, null); } /** * Shows an notification pop-up which can be clicked. An error dialog is * shown when the notification is clicked. * * @param title the title of the notification pop-up * @param message the message of the pop-up * @param errorDialogTitle the title of the error dialog * @param errorDialogMessage the message of the error dialog * @param e the exception that can be shown in the error dialog */ public void showAlertPopup(final String title, final String message, final String errorDialogTitle, final String errorDialogMessage, final Throwable e) { if(!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(new Runnable() { public void run() { showAlertPopup(title, message, errorDialogTitle, errorDialogMessage, e); } }); return; } SystrayService systray = GuiActivator.getSystrayService(); if(systray == null) { logger.warn("SystrayService not available."); return; } if(listener == null) { listener = new SystrayPopupMessageListener() { public void popupMessageClicked(SystrayPopupMessageEvent evt) { Object tag = evt.getTag(); if(tag instanceof ErrorDialogParams) { ErrorDialogParams params = (ErrorDialogParams)tag; Throwable e = params.getEx(); if(e != null) { showAlertDialog(params.getTitle(), params.getMessage(), e); } else { showAlertDialog(params.getTitle(), params.getMessage()); } } } }; systray.addPopupMessageListener(listener); } systray.showPopupMessage( new PopupMessage(title, message, null, new ErrorDialogParams(errorDialogTitle, errorDialogMessage, e))); } /** * Releases the resources acquired by this instance throughout its lifetime * and removes the listeners. */ public void dispose() { SystrayService systray = GuiActivator.getSystrayService(); if(systray == null) { logger.warn("SystrayService not available."); return; } systray.removePopupMessageListener(listener); } /** * The ErrorDialogParams class is holder for the parameters needed by the * error dialog to be shown. */ class ErrorDialogParams { /** * The title parameter. */ private String title; /** * The message parameter. */ private String message; /** * The exception parameter. */ private Throwable e; public ErrorDialogParams(String title, String message, Throwable e) { this.title = title; this.message = message; this.e = e; } /** * @return the title */ public String getTitle() { return title; } /** * @return the message */ public String getMessage() { return message; } /** * @return the exception */ public Throwable getEx() { return e; } } }