listener/touch functionality; openapied

This commit is contained in:
greg
2008-10-18 02:56:29 +04:00
parent 69aa610866
commit 0803196f42
3 changed files with 50 additions and 15 deletions
@@ -21,6 +21,8 @@ import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleServiceManager;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.util.ModificationTrackerListener;
import com.intellij.openapi.Disposable;
/**
* @author nik
@@ -31,7 +33,16 @@ public abstract class FacetModificationTrackingService {
return ModuleServiceManager.getService(module, FacetModificationTrackingService.class);
}
public static FacetModificationTrackingService getInstance(@NotNull Facet facet) {
return ModuleServiceManager.getService(facet.getModule(), FacetModificationTrackingService.class);
}
@NotNull
public abstract ModificationTracker getFacetModificationTracker(@NotNull Facet facet);
public abstract void incFacetModificationTracker(@NotNull Facet facet);
public abstract <T extends Facet> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent);
public abstract void removeModificationTrackerListener(final Facet facet, final ModificationTrackerListener<?> listener);
}
@@ -21,6 +21,6 @@ import java.util.EventListener;
/**
* @author Gregory.Shrago
*/
public interface ModificationTrackerListener<T extends ModificationTracker> extends EventListener {
void modificationCountChanged(T modificationTracker);
public interface ModificationTrackerListener<T> extends EventListener {
void modificationCountChanged(T source);
}
@@ -4,35 +4,58 @@
package com.intellij.facet.impl;
import com.intellij.facet.FacetModificationTrackingService;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.FacetManagerAdapter;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.facet.FacetModificationTrackingService;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.util.ModificationTrackerListener;
import com.intellij.openapi.util.Pair;
import com.intellij.util.EventDispatcher;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
import java.util.HashMap;
/**
* @author nik
*/
public class FacetModificationTrackingServiceImpl extends FacetModificationTrackingService {
private Map<Facet, FacetModificationTracker> myModificationsTrackers = new HashMap<Facet, FacetModificationTracker>();
private Map<Facet, Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>>> myModificationsTrackers =
new THashMap<Facet, Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>>>();
public FacetModificationTrackingServiceImpl(final Module module) {
module.getMessageBus().connect().subscribe(FacetManager.FACETS_TOPIC, new FacetModificationTrackingListener());
}
@NotNull
public ModificationTracker getFacetModificationTracker(@NotNull final Facet facet) {
FacetModificationTracker tracker = myModificationsTrackers.get(facet);
if (tracker == null) {
tracker = new FacetModificationTracker();
myModificationsTrackers.put(facet, tracker);
public FacetModificationTracker getFacetModificationTracker(@NotNull final Facet facet) {
return getFacetInfo(facet).first;
}
private Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>> getFacetInfo(final Facet facet) {
Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>> pair = myModificationsTrackers.get(facet);
if (pair == null) {
pair = Pair.create(new FacetModificationTracker(), EventDispatcher.create(ModificationTrackerListener.class));
myModificationsTrackers.put(facet, pair);
}
return tracker;
return pair;
}
public void incFacetModificationTracker(@NotNull final Facet facet) {
final Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>> pair = getFacetInfo(facet);
pair.first.myModificationCount ++;
pair.second.getMulticaster().modificationCountChanged(facet);
}
public <T extends Facet> void addModificationTrackerListener(final T facet, final ModificationTrackerListener<? super T> listener, final Disposable parent) {
getFacetInfo(facet).second.addListener(listener, parent);
}
public void removeModificationTrackerListener(final Facet facet, final ModificationTrackerListener<?> listener) {
getFacetInfo(facet).second.removeListener(listener);
}
private static class FacetModificationTracker implements ModificationTracker {
@@ -45,9 +68,10 @@ public class FacetModificationTrackingServiceImpl extends FacetModificationTrack
private class FacetModificationTrackingListener extends FacetManagerAdapter {
public void facetConfigurationChanged(@NotNull final Facet facet) {
final FacetModificationTracker tracker = myModificationsTrackers.get(facet);
if (tracker != null) {
tracker.myModificationCount++;
final Pair<FacetModificationTracker, EventDispatcher<ModificationTrackerListener>> pair = myModificationsTrackers.get(facet);
if (pair != null) {
pair.first.myModificationCount++;
pair.second.getMulticaster().modificationCountChanged(facet);
}
}