/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* 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 org.uberfire.client.mvp;
import org.uberfire.workbench.events.UberFireEvent;
import static org.uberfire.commons.validation.PortablePreconditions.checkNotNull;
/**
* CDI event fired by the framework each time an Activity lifecycle method throws an exception. Observers of the event
* can use its methods to get information about the lifecycle call that failed, and can also ask the framework to
* suppress the default error message.
*/
public class ActivityLifecycleError implements UberFireEvent {
private final Activity failedActivity;
private final LifecyclePhase failedCall;
private final Throwable exception;
private boolean errorMessageSuppressed = false;
ActivityLifecycleError(Activity failedActivity,
LifecyclePhase failedCall,
Throwable exception) {
this.failedActivity = checkNotNull("failedActivity",
failedActivity);
this.failedCall = checkNotNull("failedCall",
failedCall);
this.exception = exception;
}
/**
* Returns the Activity instance that threw the exception.
* @return the Activity that failed a lifecycle call. Never null.
*/
public Activity getFailedActivity() {
return failedActivity;
}
/**
* Tells which lifecycle phase failed.
* @return the lifecycle phase that failed to happen. Never null.
*/
public LifecyclePhase getFailedCall() {
return failedCall;
}
/**
* Returns the exception thrown by the failed lifecycle method, if the failure was due to a thrown exception.
* @return the exception thrown by the failed lifecycle method. May be null.
*/
public Throwable getException() {
return exception;
}
/**
* Tells the framework that it should not mention this failure in the workbench GUI. Once this method has been
* invoked, there is no way to flip it back. Any such mechanism would not be reliable, because observers are not
* called in a predictable order.
*/
public void suppressErrorMessage() {
errorMessageSuppressed = true;
}
/**
* Tells whether a previous observer has requested that the standard error message in the GUI be suppressed. This is
* only truly useful to the originator of the event, who can examine the value after all observers have been
* notified. Application code should not rely on the return value of this method, because there is no guarantee what
* order observers are called in.
* @return true if any observer has invoked the {@link #suppressErrorMessage()} method on this event .
*/
public boolean isErrorMessageSuppressed() {
return errorMessageSuppressed;
}
/**
* The different activity lifecycle calls that can fail.
*/
public enum LifecyclePhase {
STARTUP,
OPEN,
CLOSE,
SHUTDOWN;
}
}