Package org.jetbrains.mps.openapi.module
Class SRepositoryContentAdapter
- java.lang.Object
-
- org.jetbrains.mps.openapi.module.SModuleListenerBase
-
- org.jetbrains.mps.openapi.module.SRepositoryContentAdapter
-
- All Implemented Interfaces:
SModelListener,SNodeAccessListener,SNodeChangeListener,SModuleListener,SRepositoryAttachListener,SRepositoryListener
public class SRepositoryContentAdapter extends SModuleListenerBase implements SModelListener, SModuleListener, SRepositoryListener, SRepositoryAttachListener, SNodeChangeListener, SNodeAccessListener
This class serves as a convenient implementation of all repository listeners at once. In addition it tracks all objects (modules, models and nodes) as they come and leave the repository.
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedSRepositoryContentAdapter()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbeforeModelRemoved(SModule module, SModel model)voidbeforeModuleRemoved(SModule module)voidcommandFinished(SRepository repository)voidcommandStarted(SRepository repository)Notifications about commands in aModelAccessassociated with the repository.voidconflictDetected(SModel model)This event is fired when the storage-memory conflict is detected (== isChanged() && needsReloading()).protected booleanisIncluded(SModule module)voidmodelAdded(SModule module, SModel model)voidmodelAttached(SModel model, SRepository repository)Fired when a model becomes visible in a repository.voidmodelDetached(SModel model, SRepository repository)Fired when a model is no longer part of a repository, e.g.voidmodelLoaded(SModel model, boolean partially)voidmodelRemoved(SModule module, SModelReference ref)Model is removed from a repository.voidmodelReplaced(SModel model)voidmodelSaved(SModel model)voidmodelUnloaded(SModel model)voidmoduleAdded(SModule module)voidmoduleChanged(SModule module)Any change including module dependencies and descriptor reload from diskvoidmoduleRemoved(SModuleReference module)voidnodeAdded(SNodeAddEvent event)voidnodeRead(SNodeReadEvent event)voidnodeRemoved(SNodeRemoveEvent event)voidproblemsDetected(SModel model, Iterable<SModel.Problem> problems)This method is called each time a new problem, or a set of problems is discovered.voidpropertyChanged(SPropertyChangeEvent event)voidpropertyRead(SPropertyReadEvent event)voidreferenceChanged(SReferenceChangeEvent event)voidreferenceRead(SReferenceReadEvent event)voidrepositoryChanged()Handy notification about change in repository structure, namely added/removed modules and models.voidrepositoryCommandFinished(SRepository repository)voidrepositoryCommandStarted(SRepository repository)protected voidstartListening(SModel model)no-op by default.protected voidstartListening(SModule module)voidstartListening(SRepository repository)protected voidstopListening(SModel model)no-op by defaultprotected voidstopListening(SModule module)voidstopListening(SRepository repository)voidsubscribeTo(SRepository repository)voidunsubscribeFrom(SRepository repository)voidupdateFinished(SRepository repository)voidupdateStarted(SRepository repository)-
Methods inherited from class org.jetbrains.mps.openapi.module.SModuleListenerBase
beforeModelRenamed, dependencyAdded, dependencyRemoved, languageAdded, languageRemoved, modelRenamed, moduleRenamed
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.jetbrains.mps.openapi.module.SModuleListener
beforeModelRenamed, dependencyAdded, dependencyRemoved, languageAdded, languageRemoved, modelRenamed
-
-
-
-
Method Detail
-
subscribeTo
public void subscribeTo(SRepository repository)
-
unsubscribeFrom
public void unsubscribeFrom(SRepository repository)
-
startListening
public void startListening(@NotNull SRepository repository)
- Specified by:
startListeningin interfaceSRepositoryAttachListener
-
stopListening
public void stopListening(@NotNull SRepository repository)
- Specified by:
stopListeningin interfaceSRepositoryAttachListener
-
startListening
protected void startListening(SModule module)
-
stopListening
protected void stopListening(SModule module)
-
startListening
protected void startListening(SModel model)
no-op by default. Subclasses that wish to get model/node change/access events, shall add appropriate listeners here. These listeners are implemented by this class only for convenience, events are not dispatched unless proper listener is explicitly attached.
-
stopListening
protected void stopListening(SModel model)
no-op by default
-
isIncluded
protected boolean isIncluded(SModule module)
- Returns:
- always
true
-
moduleAdded
public void moduleAdded(@NotNull SModule module)
- Specified by:
moduleAddedin interfaceSRepositoryListener
-
beforeModuleRemoved
public void beforeModuleRemoved(@NotNull SModule module)
- Specified by:
beforeModuleRemovedin interfaceSRepositoryListener
-
moduleRemoved
public void moduleRemoved(@NotNull SModuleReference module)
- Specified by:
moduleRemovedin interfaceSRepositoryListener
-
commandStarted
public void commandStarted(SRepository repository)
Description copied from interface:SRepositoryListenerNotifications about commands in aModelAccessassociated with the repository. It's convenient to have command notifications right in SRepositoryListener implementation, like RepositoryChangeTracker (the one where all changes within a command are collected), rather than have distinctCommandListener. UnlikeCommandListener, gives context repository to facilitate use of the same listener instance among different repositories.- Specified by:
commandStartedin interfaceSRepositoryListener- See Also:
CommandListener.commandStarted()
-
commandFinished
public void commandFinished(SRepository repository)
- Specified by:
commandFinishedin interfaceSRepositoryListener- See Also:
CommandListener.commandFinished()
-
updateStarted
public void updateStarted(SRepository repository)
- Specified by:
updateStartedin interfaceSRepositoryListener
-
updateFinished
public void updateFinished(SRepository repository)
- Specified by:
updateFinishedin interfaceSRepositoryListener
-
repositoryCommandStarted
public void repositoryCommandStarted(SRepository repository)
- Specified by:
repositoryCommandStartedin interfaceSRepositoryListener
-
repositoryCommandFinished
public void repositoryCommandFinished(SRepository repository)
- Specified by:
repositoryCommandFinishedin interfaceSRepositoryListener
-
moduleChanged
public void moduleChanged(SModule module)
Description copied from interface:SModuleListenerAny change including module dependencies and descriptor reload from disk- Specified by:
moduleChangedin interfaceSModuleListener- Overrides:
moduleChangedin classSModuleListenerBase
-
modelAdded
public void modelAdded(SModule module, SModel model)
- Specified by:
modelAddedin interfaceSModuleListener- Overrides:
modelAddedin classSModuleListenerBase
-
beforeModelRemoved
public void beforeModelRemoved(SModule module, SModel model)
- Specified by:
beforeModelRemovedin interfaceSModuleListener- Overrides:
beforeModelRemovedin classSModuleListenerBase
-
modelRemoved
public void modelRemoved(SModule module, SModelReference ref)
Description copied from interface:SModuleListenerModel is removed from a repository. Note, it doesn't necessarily mean model was deleted. Does NOT come for module's models when module is being un-registered from a repository- Specified by:
modelRemovedin interfaceSModuleListener- Overrides:
modelRemovedin classSModuleListenerBase
-
modelLoaded
public void modelLoaded(SModel model, boolean partially)
- Specified by:
modelLoadedin interfaceSModelListener
-
modelReplaced
public void modelReplaced(SModel model)
- Specified by:
modelReplacedin interfaceSModelListener
-
modelUnloaded
public void modelUnloaded(SModel model)
- Specified by:
modelUnloadedin interfaceSModelListener
-
modelSaved
public void modelSaved(SModel model)
- Specified by:
modelSavedin interfaceSModelListener
-
conflictDetected
public void conflictDetected(SModel model)
Description copied from interface:SModelListenerThis event is fired when the storage-memory conflict is detected (== isChanged() && needsReloading()). An IDE can listen to it and give user a way to resolve the conflict by invoking either updateTimestamp(), or reloadFromSource().- Specified by:
conflictDetectedin interfaceSModelListener
-
problemsDetected
public void problemsDetected(SModel model, Iterable<SModel.Problem> problems)
Description copied from interface:SModelListenerThis method is called each time a new problem, or a set of problems is discovered.- Specified by:
problemsDetectedin interfaceSModelListener
-
modelAttached
public void modelAttached(SModel model, SRepository repository)
Description copied from interface:SModelListenerFired when a model becomes visible in a repository. IMPORTANT: it's unspecified whether the model is part of a module the moment this event is fired or not. Do not expectSModel.getModule()to give meaningful value. This contract may change (i.e. become stricter) in future. NOTE: This is not an event most clients could make use of, as it's technically tricky to attach a listener to a model not yet visible inside a repository, and thus it's more of internal mechanism (i.e. code that instantiates a model may attach a listener to not yet published model and thus get notified). Besides, detached models do not get their listeners automatically discarded, and the listeners get a chance to react to model detach/re-attach sequence with this event.- Specified by:
modelAttachedin interfaceSModelListener- Parameters:
model- affected model, nevernullrepository- repository the model become available at, nevernull
-
modelDetached
public void modelDetached(SModel model, SRepository repository)
Description copied from interface:SModelListenerFired when a model is no longer part of a repository, e.g. due to removal from module. This event is intended to clean-up listener caches associated with the model and to gracefully unregister other listeners. IMPORTANT: it's unspecified whether the model is part of a module the moment this event is fired or not. Do not expectSModel.getModule()to give meaningful value. This contract may change (i.e. become stricter) in future. Primary drive force for this event is desire to add model listener only, without a need to listen to module events to find out when the model is no longer available. Note, listeners not unregistered from the model would get notified withSModelListener.modelAttached(SModel, SRepository)in case detached model is brought back (perhaps, in completely different module and repository).- Specified by:
modelDetachedin interfaceSModelListener- Parameters:
model- affected model, nevernullrepository- repository the model become available at, nevernull
-
repositoryChanged
public void repositoryChanged()
Handy notification about change in repository structure, namely added/removed modules and models. For unknown reason also notifies about'unspecified'module changes no-op by default.
-
nodeRead
public void nodeRead(@NotNull SNodeReadEvent event)
- Specified by:
nodeReadin interfaceSNodeAccessListener
-
propertyRead
public void propertyRead(@NotNull SPropertyReadEvent event)
- Specified by:
propertyReadin interfaceSNodeAccessListener
-
referenceRead
public void referenceRead(@NotNull SReferenceReadEvent event)
- Specified by:
referenceReadin interfaceSNodeAccessListener
-
propertyChanged
public void propertyChanged(@NotNull SPropertyChangeEvent event)
- Specified by:
propertyChangedin interfaceSNodeChangeListener
-
referenceChanged
public void referenceChanged(@NotNull SReferenceChangeEvent event)
- Specified by:
referenceChangedin interfaceSNodeChangeListener
-
nodeAdded
public void nodeAdded(@NotNull SNodeAddEvent event)
- Specified by:
nodeAddedin interfaceSNodeChangeListener
-
nodeRemoved
public void nodeRemoved(@NotNull SNodeRemoveEvent event)
- Specified by:
nodeRemovedin interfaceSNodeChangeListener
-
-