package org.eclipse.core.internal.registry;
import java.util.Arrays;
import java.util.Map;
import org.eclipse.core.runtime.IExtensionDelta;
import org.eclipse.core.runtime.IRegistryChangeEvent;
public final class RegistryChangeEvent implements IRegistryChangeEvent {
private final String filter;
private final Map<String, ?> deltas;
public RegistryChangeEvent(Map<String, ?> deltas, String filter) {
this.deltas = deltas;
this.filter = filter;
}
private RegistryDelta[] getHostDeltas() {
if (filter != null) {
RegistryDelta singleDelta = getHostDelta(filter);
return singleDelta == null ? new RegistryDelta[0] : new RegistryDelta[] {singleDelta};
}
return deltas.values().toArray(new RegistryDelta[deltas.size()]);
}
private RegistryDelta getHostDelta(String pluginId) {
if (filter != null && !pluginId.equals(filter))
return null;
return (RegistryDelta) deltas.get(pluginId);
}
@Override
public IExtensionDelta[] getExtensionDeltas() {
RegistryDelta[] hostDeltas = getHostDeltas();
if (hostDeltas.length == 0)
return new IExtensionDelta[0];
int extensionDeltasSize = 0;
for (RegistryDelta hostDelta : hostDeltas) {
extensionDeltasSize += hostDelta.getExtensionDeltasCount();
}
IExtensionDelta[] extensionDeltas = new IExtensionDelta[extensionDeltasSize];
for (int i = 0, offset = 0; i < hostDeltas.length; i++) {
IExtensionDelta[] hostExtDeltas = hostDeltas[i].getExtensionDeltas();
System.arraycopy(hostExtDeltas, 0, extensionDeltas, offset, hostExtDeltas.length);
offset += hostExtDeltas.length;
}
return extensionDeltas;
}
@Override
public IExtensionDelta[] getExtensionDeltas(String hostName) {
RegistryDelta hostDelta = getHostDelta(hostName);
if (hostDelta == null)
return new IExtensionDelta[0];
return hostDelta.getExtensionDeltas();
}
@Override
public IExtensionDelta[] getExtensionDeltas(String hostName, String extensionPoint) {
RegistryDelta hostDelta = getHostDelta(hostName);
if (hostDelta == null)
return new IExtensionDelta[0];
return hostDelta.getExtensionDeltas(hostName + '.' + extensionPoint);
}
@Override
public IExtensionDelta getExtensionDelta(String hostName, String extensionPoint, String extension) {
RegistryDelta hostDelta = getHostDelta(hostName);
if (hostDelta == null)
return null;
return hostDelta.getExtensionDelta(hostName + '.' + extensionPoint, extension);
}
@Override
public String toString() {
return "RegistryChangeEvent: " + Arrays.asList(getHostDeltas());
}
}