package jetbrains.mps.lang.core.intentions;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.openapi.editor.EditorContext;
import java.awt.Component;
import jetbrains.mps.project.ModelImporter;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import org.jetbrains.mps.openapi.model.SModelReference;
import java.util.List;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.model.SReference;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.smodel.constraints.ModelConstraints;
/*package*/ class DependencyHelper {
private final SNode myNode;
private final SRepository myRepository;
public DependencyHelper(SNode node, EditorContext context) {
myNode = node;
myRepository = context.getRepository();
}
public boolean isApplicable() {
return !(findMissingModelImports().isEmpty());
}
public void execute(Component parentComponent) {
ModelImporter mi = new ModelImporter(SNodeOperations.getModel(myNode));
for (SModelReference mr : findMissingModelImports()) {
mi.prepare(mr);
}
boolean confirmed = true;
if (mi.affectsModuleDependencies()) {
confirmed = mi.confirmModuleChanges(parentComponent);
}
if (confirmed) {
mi.execute();
}
}
private List<SModelReference> findMissingModelImports() {
ArrayList<SModelReference> rv = new ArrayList<SModelReference>();
for (SReference ref : myNode.getReferences()) {
SModelReference targetModelRef = ref.getTargetSModelReference();
SModel modelToImport = (targetModelRef == null ? null : targetModelRef.resolve(myRepository));
if (modelToImport == null) {
continue;
}
if (!(ModelConstraints.getScope(ref).contains(ref.getTargetNode()))) {
rv.add(targetModelRef);
}
}
return rv;
}
}