private TestSModelDescriptor(String modelName, SModel toCopy) { super( PersistenceFacade.getInstance() .createModelReference(null, jetbrains.mps.smodel.SModelId.generate(), modelName)); myLongName = SModelStereotype.withoutStereotype(modelName); myToCopy = toCopy; }
@NotNull @Override public SModel create(DataSource dataSource, @NotNull Map<String, String> options) throws IOException { if (!(dataSource instanceof StreamDataSource)) { throw new UnsupportedDataSourceException(dataSource); } StreamDataSource source = (StreamDataSource) dataSource; String modelName = options.get(OPTION_MODELNAME); if (modelName == null) { throw new IOException("modelName is not provided"); } String modulRef = options.get(OPTION_MODULEREF); if (modulRef == null) { throw new IOException("moduleRef is not provided"); } final SModelHeader header = new SModelHeader(); header.setModelReference( PersistenceFacade.getInstance() .createModelReference(null, jetbrains.mps.smodel.SModelId.generate(), modelName)); return new DefaultSModelDescriptor(new PersistenceFacility(this, source), header); }
/** Igor Alshannikov May 31, 2007 */ public class AuxilaryRuntimeModel implements ModelOwner, CoreComponent { private static final SModelFqName myModelFqName = new SModelFqName("" + System.currentTimeMillis(), "$orphan-stuff$"); private static final SModelReference MY_MODEL_REFERENCE = new SModelReference(myModelFqName, SModelId.generate()); private static AuxilaryRuntimeModel INSTANCE; public AuxilaryRuntimeModel(SModelRepository repository) { ourInstance = new AuxModelDescriptor(); } private final SModelDescriptor ourInstance; public static SModelDescriptor getDescriptor() { return INSTANCE.ourInstance; } public static boolean isAuxModel(SModel model) { if (model == null) return false; SModelDescriptor descriptor = getDescriptor(); return model.getModelDescriptor() == descriptor; } @Override public void init() { if (INSTANCE != null) { throw new IllegalStateException("double initialization"); } INSTANCE = this; SModelRepository.getInstance().registerModelDescriptor(ourInstance, this); } @Override public void dispose() { ModelAccess.instance() .runWriteAction( new Runnable() { @Override public void run() { SModelRepository.getInstance() .unRegisterModelDescriptor(ourInstance, AuxilaryRuntimeModel.this); } }); INSTANCE = null; } private static class AuxModelDescriptor extends BaseSpecialModelDescriptor { public AuxModelDescriptor() { super(AuxilaryRuntimeModel.MY_MODEL_REFERENCE, false); } protected SModel createModel() { return new SModel(getSModelReference()) { protected void performUndoableAction(SNodeUndoableAction action) { if (!UndoHelper.getInstance().needRegisterUndo(this)) return; UndoHelper.getInstance().addUndoableAction(action); } protected boolean canFireEvent() { return false; } }; } } }