package org.eclipse.core.internal.events;
import java.util.*;
import org.eclipse.core.internal.resources.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.IPath;
public class ResourceChangeEvent extends EventObject implements IResourceChangeEvent {
private static final IMarkerDelta[] NO_MARKER_DELTAS = new IMarkerDelta[0];
private static final long serialVersionUID = 1L;
IResourceDelta delta;
IResource resource;
private int trigger = 0;
int type;
protected ResourceChangeEvent(Object source, int type, IResource resource) {
super(source);
this.resource = resource;
this.type = type;
}
public ResourceChangeEvent(Object source, int type, int buildKind, IResourceDelta delta) {
super(source);
this.delta = delta;
this.trigger = buildKind;
this.type = type;
}
@Override
public IMarkerDelta[] findMarkerDeltas(String findType, boolean includeSubtypes) {
if (delta == null)
return NO_MARKER_DELTAS;
ResourceDeltaInfo info = ((ResourceDelta) delta).getDeltaInfo();
if (info == null)
return NO_MARKER_DELTAS;
Map<IPath, MarkerSet> markerDeltas = info.getMarkerDeltas();
if (markerDeltas == null || markerDeltas.isEmpty())
return NO_MARKER_DELTAS;
ArrayList<IMarkerDelta> matching = new ArrayList<>();
Iterator<MarkerSet> deltaSets = markerDeltas.values().iterator();
while (deltaSets.hasNext()) {
MarkerSet deltas = deltaSets.next();
IMarkerSetElement[] elements = deltas.elements();
for (IMarkerSetElement element : elements) {
MarkerDelta markerDelta = (MarkerDelta) element;
if (findType == null || (includeSubtypes ? markerDelta.isSubtypeOf(findType) : markerDelta.getType().equals(findType)))
matching.add(markerDelta);
}
}
return matching.toArray(new IMarkerDelta[matching.size()]);
}
@Override
public int getBuildKind() {
return trigger;
}
@Override
public IResourceDelta getDelta() {
return delta;
}
@Override
public IResource getResource() {
return resource;
}
@Override
public int getType() {
return type;
}
public void setDelta(IResourceDelta value) {
delta = value;
}
public String toDebugString() {
StringBuilder output = new StringBuilder();
output.append("\nType: ");
switch (type) {
case POST_CHANGE :
output.append("POST_CHANGE");
break;
case PRE_CLOSE :
output.append("PRE_CLOSE");
break;
case PRE_DELETE :
output.append("PRE_DELETE");
break;
case PRE_BUILD :
output.append("PRE_BUILD");
break;
case POST_BUILD :
output.append("POST_BUILD");
break;
case PRE_REFRESH :
output.append("PRE_REFRESH");
break;
default :
output.append("?");
break;
}
output.append("\nBuild kind: ");
switch (trigger) {
case IncrementalProjectBuilder.FULL_BUILD :
output.append("FULL_BUILD");
break;
case IncrementalProjectBuilder.AUTO_BUILD :
case IncrementalProjectBuilder.INCREMENTAL_BUILD :
output.append("INCREMENTAL_BUILD");
break;
case IncrementalProjectBuilder.CLEAN_BUILD :
output.append("CLEAN_BUILD");
break;
default :
output.append(trigger);
break;
}
output.append("\nResource: " + (resource == null ? "null" : resource));
output.append("\nDelta:" + (delta == null ? " null" : ((ResourceDelta) delta).toDeepDebugString()));
return output.toString();
}
}