Package jetbrains.mps.extapi.model
Class EditableSModelBase
- java.lang.Object
 - 
- jetbrains.mps.extapi.model.SModelDescriptorStub
 - 
- jetbrains.mps.extapi.model.SModelBase
 - 
- jetbrains.mps.extapi.model.EditableSModelBase
 
 
 
 
- 
- All Implemented Interfaces:
 ModelWithDisposeInfo,FastNodeFinder.Factory,SModelInternal,EditableSModel,SModel
- Direct Known Subclasses:
 CustomPersistenceModelWithHeader,CustomPersistenceSModel,LazyEditableSModelBase,TransientModelsModule.TransientSModelDescriptor
public abstract class EditableSModelBase extends SModelBase implements EditableSModel
Editable model (generally) backed up by file. Implicitly bound to files due to rename and changeModelFile methods, for a generic editable model, seeEditableModelDescriptorevgeny, 11/21/12 
- 
- 
Nested Class Summary
- 
Nested classes/interfaces inherited from interface org.jetbrains.mps.openapi.model.SModel
SModel.Problem 
 - 
 
- 
Field Summary
Fields Modifier and Type Field Description protected ModelSourceChangeTrackermyTimestampTracker 
- 
Constructor Summary
Constructors Modifier Constructor Description protectedEditableSModelBase(SModelReference modelReference, DataSource source) 
- 
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddChangeListener(SNodeChangeListener l)This class doesn't dispatch change events, no listeners are tracked.voidaddRootNode(SNode node)Adds the node as a root to this model.voidattach(SRepository repository)voiddetach()booleanisChanged()booleanisReadOnly()No changes are permitted.booleanneedsReloading()protected abstract voidreloadContents()voidreloadFromSource()voidremoveChangeListener(SNodeChangeListener l)This class doesn't dispatch change events, no listeners are tracked.voidremoveRootNode(SNode node)Removes the whole subtree from the model.voidrename(String newModelName, boolean changeFile)voidresolveDiskConflict()voidsave()When owning a write action lock, this method will save the model into the storage.protected abstract booleansaveModel()returns true if the content should be reloaded from storage after savevoidsetChanged(boolean changed)StringtoString()voidunload()Dispose model data, change model'sloading stateand dispatchstate change event.voidupdateTimestamp()- 
Methods inherited from class jetbrains.mps.extapi.model.SModelBase
addAccessListener, addModelListener, assertCanChange, assertCanRead, changeModelReference, createNode, createNode, doUnload, fireBeforeModelRenamed, fireConflictDetected, fireModelRenamed, fireModelReplaced, fireModelSaved, fireModelStateChanged, fireProblemsDetected, getCurrentModelInternal, getLoadingState, getModelData, getModelId, getModelName, getModelRoot, getModule, getName, getNode, getNodeEventDispatch, getProblems, getReference, getRepository, getRootNodes, getSource, isLoaded, load, removeAccessListener, removeModelListener, replaceModelAndFireEvent, setLoadingState, setModelRoot, setModule 
- 
Methods inherited from class jetbrains.mps.extapi.model.SModelDescriptorStub
addDevKit, addEngagedOnGenerationLanguage, addLanguage, addModelImport, addModelListener, clearListeners, createNodeFinder, deleteDevKit, deleteLanguageId, deleteModelImport, fireBeforeModelDisposed, fireBeforeModelFileChanged, fireBeforeModelRenamed, fireModelFileChanged, fireModelRenamed, fireModelStateChanged, getDisposedStacktrace, getLanguageImportVersion, getLanguagesEngagedOnGeneration, getModelDepsManager, getModelImports, getModelListeners, getSModel, getSModelInternal, importedDevkits, importedLanguageIds, isDisposed, removeEngagedOnGenerationLanguage, removeModelListener, setLanguageImportVersion, updateExternalReferences 
- 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait 
- 
Methods inherited from interface org.jetbrains.mps.openapi.model.SModel
addAccessListener, addModelListener, createNode, createNode, getModelId, getModelName, getModelRoot, getModule, getName, getNode, getProblems, getReference, getRepository, getRootNodes, getSource, isLoaded, load, removeAccessListener, removeModelListener 
 - 
 
 - 
 
- 
- 
Field Detail
- 
myTimestampTracker
protected final ModelSourceChangeTracker myTimestampTracker
 
 - 
 
- 
Constructor Detail
- 
EditableSModelBase
protected EditableSModelBase(@NotNull SModelReference modelReference, @NotNull DataSource source)
 
 - 
 
- 
Method Detail
- 
attach
public void attach(@NotNull SRepository repository)
- Overrides:
 attachin classSModelBase
 
- 
detach
public void detach()
- Overrides:
 detachin classSModelBase
 
- 
isChanged
public boolean isChanged()
- Specified by:
 isChangedin interfaceEditableSModel
 
- 
setChanged
public void setChanged(boolean changed)
- Specified by:
 setChangedin interfaceEditableSModel
 
- 
addRootNode
public void addRootNode(@NotNull SNode node)
Description copied from interface:SModelAdds the node as a root to this model. Each node in the underlying subtree becomes connected to this model and returns it from the getModel() method.- Specified by:
 addRootNodein interfaceSModel- Overrides:
 addRootNodein classSModelBase
 
- 
removeRootNode
public void removeRootNode(@NotNull SNode node)
Description copied from interface:SModelRemoves the whole subtree from the model.- Specified by:
 removeRootNodein interfaceSModel- Overrides:
 removeRootNodein classSModelBase
 
- 
isReadOnly
public boolean isReadOnly()
Description copied from interface:SModelNo changes are permitted. For read-only models all modification operations always throwIllegalModelChangeError.- Specified by:
 isReadOnlyin interfaceSModel- Overrides:
 isReadOnlyin classSModelBase
 
- 
unload
public final void unload()
Description copied from class:SModelBaseDispose model data, change model'sloading stateand dispatchstate change event. Base implementation does nothing if there's noinitialized model data. Generally, subclasses shall overrideSModelBase.doUnload()to perform actual cleanup of instance fields.- Specified by:
 unloadin interfaceSModel- Overrides:
 unloadin classSModelBase
 
- 
reloadFromSource
public void reloadFromSource()
- Specified by:
 reloadFromSourcein interfaceEditableSModel
 
- 
reloadContents
protected abstract void reloadContents()
 
- 
resolveDiskConflict
public void resolveDiskConflict()
 
- 
save
public final void save()
Description copied from interface:EditableSModelWhen owning a write action lock, this method will save the model into the storage. Throws an exception if there were fatal errors during the load phase. Should only be called when isChanged() == true- Specified by:
 savein interfaceEditableSModel
 
- 
saveModel
protected abstract boolean saveModel() throws IOException, ModelSaveExceptionreturns true if the content should be reloaded from storage after save- Throws:
 IOExceptionModelSaveException
 
- 
rename
public void rename(String newModelName, boolean changeFile)
- Specified by:
 renamein interfaceEditableSModel
 
- 
updateTimestamp
public void updateTimestamp()
- Specified by:
 updateTimestampin interfaceEditableSModel
 
- 
needsReloading
public boolean needsReloading()
- Specified by:
 needsReloadingin interfaceEditableSModel
 
- 
addChangeListener
public void addChangeListener(SNodeChangeListener l)
Description copied from class:SModelBaseThis class doesn't dispatch change events, no listeners are tracked.- Specified by:
 addChangeListenerin interfaceSModel- Overrides:
 addChangeListenerin classSModelBase- Parameters:
 l- listener to add, toleratesnull
 
- 
removeChangeListener
public void removeChangeListener(SNodeChangeListener l)
Description copied from class:SModelBaseThis class doesn't dispatch change events, no listeners are tracked.- Specified by:
 removeChangeListenerin interfaceSModel- Overrides:
 removeChangeListenerin classSModelBase- Parameters:
 l- listener to remove, toleratesnulland unknown (not registered) listeners
 
 - 
 
 -