package jetbrains.mps.build.mps.pluginSolution.plugin; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.vfs.IFile; import jetbrains.mps.project.structure.modules.ModuleDescriptor; import jetbrains.mps.build.mps.util.PathConverter; import jetbrains.mps.project.structure.modules.LanguageDescriptor; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.project.structure.modules.SolutionDescriptor; import jetbrains.mps.project.structure.modules.DevkitDescriptor; import jetbrains.mps.project.structure.modules.GeneratorDescriptor; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import org.apache.log4j.Level; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.build.mps.util.PathBuilder; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.build.mps.util.VisibleModules; import jetbrains.mps.build.mps.util.ModuleLoader; import jetbrains.mps.build.mps.util.ModuleChecker; import jetbrains.mps.build.mps.util.ModuleLoaderException; public class ImportModuleHelper { private static final Logger LOG = LogManager.getLogger(ImportModuleHelper.class); private SNode project; private IFile moduleFile; private ModuleDescriptor moduleDescriptor; private PathConverter converter; private SNode created; public ImportModuleHelper(SNode project, IFile moduleFile, ModuleDescriptor moduleDescriptor) { this.project = project; this.moduleFile = moduleFile; this.moduleDescriptor = moduleDescriptor; this.converter = new PathConverter(project); } public void create() { try { if (moduleDescriptor instanceof LanguageDescriptor) { SNode lang = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x2c446791464290f8L, "jetbrains.mps.build.mps.structure.BuildMps_Language")); initModule(lang); created = lang; } else if (moduleDescriptor instanceof SolutionDescriptor) { SNode solution = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x2c446791464290f7L, "jetbrains.mps.build.mps.structure.BuildMps_Solution")); initModule(solution); created = solution; } else if (moduleDescriptor instanceof DevkitDescriptor) { SNode devkit = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d2060eL, "jetbrains.mps.build.mps.structure.BuildMps_DevKit")); initModule(devkit); created = devkit; } else if (moduleDescriptor instanceof GeneratorDescriptor) { // TODO once we allow standalone generators in Build language, have to put reasonable code here if (LOG.isDebugEnabled()) { LOG.debug("Standalone generators are not yet implemented"); } created = null; } if ((created != null)) { ListSequence.fromList(SLinkOperations.getChildren(project, MetaAdapterFactory.getContainmentLink(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, 0x668c6cfbafacf6f2L, "parts"))).addElement(created); } } catch (PathConverter.PathConvertException ex) { // ignore if (LOG.isEnabledFor(Level.ERROR)) { LOG.error(ex.getMessage()); } } } private void initModule(SNode module) throws PathConverter.PathConvertException { SPropertyOperations.set(module, MetaAdapterFactory.getProperty(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, 0x742675d05378e98dL, "compact"), "" + (true)); SPropertyOperations.set(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), moduleDescriptor.getModuleReference().getModuleName()); SPropertyOperations.set(module, MetaAdapterFactory.getProperty(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, 0x4780308f5d3868bL, "uuid"), moduleDescriptor.getModuleReference().getModuleId().toString()); SLinkOperations.setTarget(module, MetaAdapterFactory.getContainmentLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, 0x4780308f5d47f25L, "path"), ListSequence.fromList(converter.convertPath(moduleFile.getPath(), new PathBuilder(SNodeOperations.getModel(project)))).first()); } public void update(VisibleModules visible) { if ((created == null)) { return; } try { ModuleLoader.createModuleChecker(created, visible, converter).check(ModuleChecker.CheckType.LOAD_IMPORTANT_PART); } catch (ModuleLoaderException ex) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error(ex.getMessage()); } } } }