/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.project.structure.modules.mappingpriorities; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SNodeId; import org.jetbrains.mps.openapi.module.SRepository; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; public class MappingConfig_SimpleRef extends MappingConfig_AbstractRef { static final int PERSISTENCE_ID = 0x55550002; private String myModelUID; private String myNodeID; /* * hint for MC name (if myNodeId points to specific MC), to avoid dependency from sources * when we need to report an issue with deployed priority rule. */ private String myConfigName; public String getModelUID() { return myModelUID; } public void setModelUID(String modelUID) { myModelUID = modelUID; } public String getNodeID() { return myNodeID; } public void setNodeID(String nodeID) { myNodeID = nodeID; } public boolean includesAll() { return "*".equals(myNodeID); } public void setMapConfigName(String mcName) { myConfigName = mcName; } @Override @NotNull public MappingConfig_SimpleRef copy() { MappingConfig_SimpleRef result = new MappingConfig_SimpleRef(); result.myModelUID = myModelUID; result.myNodeID = myNodeID; result.myConfigName = myConfigName; return result; } @Override public boolean isIncomplete() { return myModelUID == null || myNodeID == null; } @Override public boolean removeModelReference(SModelReference ref, boolean[] mappingsChanged) { if (myModelUID != null && myModelUID.equals(ref.toString())) { mappingsChanged[0] = true; return true; } return false; } @Override public boolean updateReferences(SRepository repository) { if (myModelUID.equals("*")) { return false; } final SModelReference modelReference = PersistenceFacade.getInstance().createModelReference(myModelUID); final SModel model = modelReference.resolve(repository); if (model != null && !modelReference.equals(model.getReference())) { myModelUID = PersistenceFacade.getInstance().asString(model.getReference()); return true; } return false; } @Override public String asString(SRepository repository) { final SModelReference modelReference = PersistenceFacade.getInstance().createModelReference(myModelUID); String modelName = modelReference.getName().getLongName(); StringBuilder sb = new StringBuilder(); sb.append(modelName); sb.append('.'); if (myNodeID.equals("*")) { return sb.append('*').toString(); } else { SModel refModel = modelReference.resolve(repository); if (refModel != null) { SNodeId nodeId = PersistenceFacade.getInstance().createNodeId(myNodeID); assert nodeId != null : "wrong node id string"; SNode mappingConfig = refModel.getNode(nodeId); if (mappingConfig != null) { return sb.append(mappingConfig.getName()).toString(); } } } return sb.append(myNodeID).append("!unresolved!").toString(); } @Override public String asString() { final SModelReference modelReference = PersistenceFacade.getInstance().createModelReference(myModelUID); String modelName = modelReference.getName().getLongName(); StringBuilder sb = new StringBuilder(); sb.append(modelName); sb.append('.'); if (myNodeID.equals("*")) { sb.append('*'); } else { sb.append(myConfigName == null ? myNodeID : myConfigName); } return sb.toString(); } }