package jetbrains.mps.vcs.diff.merge;
/*Generated by MPS */
import jetbrains.mps.smodel.EditableModelDescriptor;
import jetbrains.mps.persistence.PersistenceVersionAware;
import org.jetbrains.mps.openapi.model.EditableSModel;
import org.jetbrains.mps.openapi.model.SModelReference;
import org.jetbrains.mps.openapi.persistence.NullDataSource;
import jetbrains.mps.smodel.SModel;
import jetbrains.mps.smodel.ModelLoadResult;
import jetbrains.mps.smodel.loading.ModelLoadingState;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.smodel.DefaultSModel;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.persistence.ModelFactory;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
/**
* Merge model has to be EditableSModel for now (there's otherwise dubious use of isChanged status),
* however, rest of the EditableSModel API is superfluous for the merge model.
*/
public class MergeTemporaryModel extends EditableModelDescriptor implements PersistenceVersionAware, EditableSModel {
private boolean myReadOnly;
public MergeTemporaryModel(SModelReference modelRef, boolean readonly) {
super(modelRef, new NullDataSource());
myReadOnly = readonly;
}
public MergeTemporaryModel(SModel model, boolean readonly) {
this(model.getReference(), readonly);
replace(new ModelLoadResult<SModel>(model, ModelLoadingState.FULLY_LOADED));
}
@NotNull
protected ModelLoadResult<SModel> createModel() {
return new ModelLoadResult<SModel>(new SModel(getReference()), ModelLoadingState.FULLY_LOADED);
}
/*package*/ void setSModelInternal(SModel model) {
assert model == null || getReference().equals(model.getReference());
replace(new ModelLoadResult<SModel>(model, (model == null ? ModelLoadingState.NOT_LOADED : ModelLoadingState.FULLY_LOADED)));
}
@Override
public void save() {
// no-op
}
@Override
public void rename(String newModelName, boolean changeFile) {
throw new UnsupportedOperationException();
}
@Override
public boolean isReadOnly() {
return myReadOnly;
}
@Override
public void reloadFromSource() {
throw new UnsupportedOperationException();
}
@Override
public void updateTimestamp() {
// no-op
}
@Override
public boolean needsReloading() {
return false;
}
public void setPersistenceVersion(int version) {
if (getModelData() instanceof DefaultSModel) {
((DefaultSModel) getModelData()).getSModelHeader().setPersistenceVersion(version);
}
}
public int getPersistenceVersion() {
if (getModelData() instanceof DefaultSModel) {
return ((DefaultSModel) getModelData()).getSModelHeader().getPersistenceVersion();
}
return -1;
}
@Nullable
public ModelFactory getModelFactory() {
// in fact, shall derive persitence from models being merged, however, so far we've got merge for default/xml persistence only, thus it's ok to hardcode specific factory
return PersistenceFacade.getInstance().getDefaultModelFactory();
}
}