/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.notification;
import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto;
/**
* Status notification. May have one of three status: PROGRESS, SUCCESS and FAIL.
*
* @author Vlad Zhukovskiy
*/
public class StatusNotification extends Notification {
public enum Status {
PROGRESS,
SUCCESS,
WARNING,
FAIL
}
public enum DisplayMode {
/** Notification will be float as balloon during the notification is in progress status */
FLOAT_MODE,
/** Notification will be emerge as balloon only when status is changed */
EMERGE_MODE,
/** Notification won't be emerge at all */
NOT_EMERGE_MODE
}
private Status status;
private DisplayMode displayMode;
private StatusNotificationListener statusListener;
/**
* Creates status notification object with specified title, status and display mode.
*
* @param title
* notification title (required)
* @param status
* notification status (required)
* @param displayMode
* mode of displaying of the notification
*/
public StatusNotification(String title,
Status status,
DisplayMode displayMode) {
super(title);
this.status = status;
this.displayMode = displayMode;
}
/**
* Creates status notification object with specified title, status and display mode.
*
* @param title
* notification title (required)
* @param status
* notification status (required)
* @param displayMode
* mode of displaying of the notification
* @param listener
* event listener that handle mouse events (optional)
*/
public StatusNotification(String title,
Status status,
DisplayMode displayMode,
NotificationListener listener) {
super(title);
this.status = status;
this.displayMode = displayMode;
this.listener = listener;
}
/**
* Creates status notification.
*
* @param title
* notification title (required)
* @param content
* notification content (optional)
* @param status
* notification status (required)
* @param displayMode
* mode of displaying of the notification
* @param project
* project which name will be displayed in the notification (optional)
* @param listener
* event listener that handle mouse events (optional)
*/
public StatusNotification(String title,
String content,
Status status,
DisplayMode displayMode,
ProjectConfigDto project,
NotificationListener listener) {
super(title, content, project, listener);
this.status = status;
this.displayMode = displayMode;
}
/**
* Return the notification status.
*
* @return notification status
* @see org.eclipse.che.ide.api.notification.StatusNotification.Status
*/
public Status getStatus() {
return status;
}
/**
* Set new status notification.
*
* @param status
* new notification status
* @throws IllegalArgumentException
* if status is null
* @see org.eclipse.che.ide.api.notification.StatusNotification.Status
*/
public void setStatus(Status status) {
if (status == null) {
throw new IllegalArgumentException("Status shouldn't be a null");
}
boolean isStatusChanged = this.status != status;
this.status = status;
if (isStatusChanged && statusListener != null) {
statusListener.onNotificationStatusChanged(this);
}
setUnreadState();
}
/**
* Sets display mode
*
* @param displayMode
* mode of displaying of the notification
*/
public void setDisplayMode(DisplayMode displayMode) {
this.displayMode = displayMode;
setUnreadState();
}
/** Returns the display mode of notification */
public DisplayMode getDisplayMode() {
return displayMode;
}
/** Sets listener for being notified about changes of notification status.*/
public void setStatusListener(StatusNotificationListener statusListener) {
this.statusListener = statusListener;
}
}