/* * 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 jetbrains.mps.project.structure.modules.ModuleReference; import jetbrains.mps.smodel.Generator; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.module.SRepository; /** * FIXME Superfluous as long as {@link MappingConfig_SimpleRef} holds full-fledged {@link SModelReference} */ public class MappingConfig_ExternalRef extends MappingConfig_AbstractRef { public static final int PERSISTENCE_ID = 0x55550004; private SModuleReference myGenerator; private MappingConfig_AbstractRef myMappingConfig; public MappingConfig_ExternalRef() { myMappingConfig = new MappingConfig_AbstractRef(); } public SModuleReference getGenerator() { return myGenerator; } public void setGenerator(SModuleReference generator) { myGenerator = generator; } public MappingConfig_AbstractRef getMappingConfig() { return myMappingConfig; } public void setMappingConfig(MappingConfig_AbstractRef ref) { myMappingConfig = ref; } @NotNull @Override public MappingConfig_ExternalRef copy() { MappingConfig_ExternalRef result = new MappingConfig_ExternalRef(); result.myGenerator = myGenerator; result.myMappingConfig = myMappingConfig != null ? myMappingConfig.copy() : null; return result; } @Override public boolean isIncomplete() { if (myGenerator == null) return true; return myMappingConfig.isIncomplete(); } @Override public boolean updateReferences(SRepository repository) { SModule newGenerator = myGenerator.resolve(repository); boolean changed = newGenerator != null && ModuleReference.differs(myGenerator, newGenerator.getModuleReference()); if (changed) { myGenerator = newGenerator.getModuleReference(); } if (myMappingConfig != null) { changed |= myMappingConfig.updateReferences(repository); } return changed; } @Override public boolean removeModelReference(SModelReference ref, boolean[] mappingsChanged) { if (myMappingConfig != null) { if (myMappingConfig.removeModelReference(ref, mappingsChanged)) { return true; } } return false; } @Override public String asString(SRepository repository) { if (myGenerator == null) { return "unknown"; } SModule generator = myGenerator.resolve(repository); if (!(generator instanceof Generator)) { return "unknown" + '(' + myGenerator.getModuleName() + ')'; } String alias = ((Generator) generator).getAlias(); return '[' + alias + ':' + myMappingConfig.asString(repository) + ']'; } @Override public String asString() { return '[' + myGenerator.getModuleName() + ':' + myMappingConfig.asString() + ']'; } }