/*******************************************************************************
* 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.resources;
import com.google.common.annotations.Beta;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Resource change events describe changes to resources.
* <p/>
* Each event has resource delta. Delta means some information, which was performed to a resource. To obtain information
* about specific type of event, then method {@link ResourceDelta#getKind()} should be called.
* <p/>
* Third party components should implement {@link ResourceChangedHandler} to handle resource event and subscribe this
* implementation in general event bus.
* <p/>
* Example of usage:
* <pre>
* eventBus.addHandler(ResourceChangedEvent.getType(), new ResourceChangedHandler{
* void onResourceChanged(ResourceChangedEvent event) {
* ResourceDelta delta = event.getDelta();
* Resource resource = delta.getResource();
*
* if (delta.getKind() == ResourceDelta.ADDED) {
* //handle resource creation
* }
*
* if (delta.getKind() == ResourceDelta.REMOVED) {
* //handle resource removal
* }
*
* if (delta.getKind() == ResourceDelta.UPDATED) {
* //handle resource update
* }
* }
* });
* </pre>
*
* @author Vlad Zhukovskiy
* @see ResourceDelta
* @since 4.4.0
*/
@Beta
public final class ResourceChangedEvent extends GwtEvent<ResourceChangedEvent.ResourceChangedHandler> {
/**
* A resource change listener is notified of changes to resources in the workspace. These changes arise
* from direct manipulation of resources, or indirectly through re-synchronization with the local file
* system.
* <p/>
* Third party components may implement this interface to handle resource changes event.
*
* @since 4.4.0
*/
public interface ResourceChangedHandler extends EventHandler {
/**
* Notifies the listener that some resource changes are happening. The supplied event dives details.
* This event object (and the resource delta within it) is valid only for the duration of the invocation
* of this method.
*
* @param event
* instance of {@link ResourceChangedEvent}
* @see ResourceChangedEvent
* @since 4.4.0
*/
void onResourceChanged(ResourceChangedEvent event);
}
private static Type<ResourceChangedHandler> TYPE;
public static Type<ResourceChangedHandler> getType() {
if (TYPE == null) {
TYPE = new Type<>();
}
return TYPE;
}
private ResourceDelta delta;
public ResourceChangedEvent(ResourceDelta delta) {
this.delta = checkNotNull(delta, "Resource delta should not be a null");
}
/**
* Returns the resource delta.
*
* @return the resource delta
* @see ResourceDelta
* @since 4.4.0
*/
public ResourceDelta getDelta() {
return delta;
}
/** {@inheritDoc} */
@Override
public Type<ResourceChangedHandler> getAssociatedType() {
return TYPE;
}
/** {@inheritDoc} */
@Override
protected void dispatch(ResourceChangedHandler handler) {
handler.onResourceChanged(this);
}
}