package jetbrains.mps.smodel.persistence.def.v4; /*Generated by MPS */ import jetbrains.mps.smodel.persistence.def.VisibleModelElements; import java.util.Map; import org.jetbrains.mps.openapi.model.SModelReference; import java.util.HashMap; import org.jdom.Element; import java.util.List; import jetbrains.mps.vcspersistence.VCSPersistenceSupport; import jetbrains.mps.vcspersistence.VCSPersistenceUtil; /*package*/ class DOMVisibleModelElements implements VisibleModelElements { private Map<Integer, SModelReference> myVisibleModelElements = new HashMap<Integer, SModelReference>(); private int myMaxVisibleModelIndex = 1; private Element myModelElement; /*package*/ DOMVisibleModelElements(Element modelElement) { myModelElement = modelElement; parseVisibleElements(); } private void parseVisibleElements() { List visibles = myModelElement.getChildren(VCSPersistenceSupport.VISIBLE_ELEMENT); for (Object aVisible : visibles) { Element element = (Element) aVisible; String indexValue = element.getAttributeValue(VCSPersistenceSupport.MODEL_IMPORT_INDEX); int index = Integer.parseInt(indexValue); String visibleModelUIDString = element.getAttributeValue(VCSPersistenceSupport.MODEL_UID); myVisibleModelElements.put(index, VCSPersistenceUtil.createModelReference(visibleModelUIDString)); myMaxVisibleModelIndex = Math.max(index, myMaxVisibleModelIndex); } } @Override public int getVisibleModelIndex(SModelReference modelReference) { for (Map.Entry<Integer, SModelReference> entry : myVisibleModelElements.entrySet()) { if (modelReference.equals(entry.getValue())) { return entry.getKey(); } } return addModel(modelReference); } private int addModel(SModelReference modelReference) { myMaxVisibleModelIndex++; myVisibleModelElements.put(myMaxVisibleModelIndex, modelReference); Element visibleElement = new Element(VCSPersistenceSupport.VISIBLE_ELEMENT); visibleElement.setAttribute(VCSPersistenceSupport.MODEL_IMPORT_INDEX, myMaxVisibleModelIndex + ""); visibleElement.setAttribute(VCSPersistenceSupport.MODEL_UID, modelReference.toString()); myModelElement.addContent(visibleElement); return myMaxVisibleModelIndex; } @Override public SModelReference getModelUID(int index) { return myVisibleModelElements.get(index); } }