package jetbrains.mps.lang.migration.pluginSolution.plugin;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import jetbrains.mps.refactoring.participant.RefactoringSession;
import org.jetbrains.mps.openapi.module.SearchScope;
import org.jetbrains.mps.openapi.module.SModule;
import java.util.Map;
import org.jetbrains.mps.openapi.module.SModuleReference;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import jetbrains.mps.smodel.Language;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.smodel.LanguageAspect;
import jetbrains.mps.smodel.SModelInternal;
import org.jetbrains.mps.openapi.model.SModelReference;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.internal.collections.runtime.ITranslator2;
import org.jetbrains.mps.openapi.model.SReference;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.smodel.SModelOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import jetbrains.mps.lang.migration.runtime.base.MigrationModuleUtil;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import org.apache.log4j.Level;
import jetbrains.mps.refactoring.participant.RefactoringParticipant;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.lang.typesystem.runtime.HUtil;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
import jetbrains.mps.smodel.SModelUtil_new;
public class LogBuilder {
private static final Logger LOG = LogManager.getLogger(LogBuilder.class);
private static final String myId = "refactoringSession.logBuilder";
public static LogBuilder getBuilder(RefactoringSession session, SearchScope searchScope, SModule module) {
Map<SModuleReference, LogBuilder> moduleBuilders = (Map<SModuleReference, LogBuilder>) session.getObject(myId);
if (moduleBuilders == null) {
moduleBuilders = MapSequence.fromMap(new HashMap<SModuleReference, LogBuilder>());
session.putObject(myId, moduleBuilders);
}
LogBuilder builder = MapSequence.fromMap(moduleBuilders).get(module.getModuleReference());
if (builder == null) {
builder = new LogBuilder(session, searchScope, ((Language) module));
MapSequence.fromMap(moduleBuilders).put(module.getModuleReference(), builder);
}
return builder;
}
private SNode myRefactoringStep;
private LogBuilder(RefactoringSession session, final SearchScope searchScope, final Language module) {
final int moduleVersion = module.getModuleVersion();
myRefactoringStep = createRefactoringLog_1o8b1n_a0b0d(moduleVersion, "RefactoringLog_" + moduleVersion);
session.registerChange(new Runnable() {
public void run() {
SModel migrationModel = LanguageAspect.MIGRATION.getOrCreate(module);
SModelInternal sm = (SModelInternal) (SModel) migrationModel;
for (SModelReference reference : ListSequence.fromList(SNodeOperations.getNodeDescendants(myRefactoringStep, null, true, new SAbstractConcept[]{})).translate(new ITranslator2<SNode, SReference>() {
public Iterable<SReference> translate(SNode it) {
return SNodeOperations.getReferences(it);
}
}).select(new ISelector<SReference, SModelReference>() {
public SModelReference select(SReference it) {
return it.getTargetSModelReference();
}
}).distinct()) {
if (!(SModelOperations.getImportedModelUIDs(migrationModel).contains(reference))) {
sm.addModelImport(reference);
}
}
sm.addLanguage(MetaAdapterFactory.getLanguage(0x9882f4ad195546feL, 0x826994189e5dbbf2L, "jetbrains.mps.lang.migration.util"));
jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.addRootNode(migrationModel, myRefactoringStep);
module.setModuleVersion(moduleVersion + 1);
Iterable<SModule> modules = searchScope.getModules();
List<SModule> modulesToIncrementDependencyVersion = Sequence.fromIterable(modules).where(new IWhereFilter<SModule>() {
public boolean accept(SModule m) {
return MigrationModuleUtil.isModuleMigrateable(m);
}
}).where(new IWhereFilter<SModule>() {
public boolean accept(SModule m) {
return SetSequence.fromSet(MigrationModuleUtil.getModuleDependencies(m)).contains(module);
}
}).toListSequence();
for (SModule m : ListSequence.fromList(modulesToIncrementDependencyVersion)) {
int depVersion = MigrationModuleUtil.getDependencyVersion(m, module);
if (moduleVersion != depVersion) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Module " + m + " depends on module " + module + " with version " + depVersion + ", but current version is " + moduleVersion);
}
} else {
MigrationModuleUtil.setDepVersion(m, module.getModuleReference(), moduleVersion + 1);
}
}
}
});
}
public void addPart(RefactoringParticipant.PersistentRefactoringParticipant participant, SNode initialState, SNode finalState) {
ListSequence.fromList(SLinkOperations.getChildren(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d92L, "part"))).addElement(createRefactoringPart_1o8b1n_a0a0a4(participant.getId(), SNodeOperations.cast(HUtil.copyIfNecessary(initialState), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept")), SNodeOperations.cast(HUtil.copyIfNecessary(finalState), MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept"))));
}
public int getFromVersion() {
return SPropertyOperations.getInteger(this.myRefactoringStep, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d91L, "fromVersion"));
}
public void addOptions(Iterable<RefactoringParticipant.Option> selectedOptions) {
if ((SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")) == null)) {
SLinkOperations.setNewChild(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options"), MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, "jetbrains.mps.lang.migration.structure.RefactoringOptions"));
}
for (RefactoringParticipant.Option option : Sequence.fromIterable(selectedOptions)) {
if (!(ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")), MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, 0x31ee543051f23346L, "options"))).select(new ISelector<SNode, RefactoringParticipant.Option>() {
public RefactoringParticipant.Option select(SNode it) {
return new RefactoringParticipant.Option(SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f23344L, "optionId")), SPropertyOperations.getString(it, MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f30774L, "description")));
}
}).contains(option))) {
ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(myRefactoringStep, MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x31ee543051f2333cL, "options")), MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23340L, 0x31ee543051f23346L, "options"))).addElement(createRefactoringOption_1o8b1n_a0a0a0a1a6(option.getId(), option.getDescription()));
}
}
}
private static SNode createRefactoringLog_1o8b1n_a0b0d(Object p0, Object p1) {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, "jetbrains.mps.lang.migration.structure.RefactoringLog"), null, null, false);
n1.setProperty(MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, 0x115eca8579fL, "virtualPackage"), "refactoring");
n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x1bf9eb43276b6d8fL, 0x1bf9eb43276b6d91L, "fromVersion"), p0 + "");
n1.setProperty(MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name"), p1 + "");
return n1;
}
private static SNode createRefactoringPart_1o8b1n_a0a0a4(Object p0, Object p1, Object p2) {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, "jetbrains.mps.lang.migration.structure.RefactoringPart"), null, null, false);
n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3aaL, "participant"), p0 + "");
if (p1 != null) {
n1.addChild(MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3acL, "initialState"), (SNode) p1);
}
if (p2 != null) {
n1.addChild(MetaAdapterFactory.getContainmentLink(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x2b3f57492c163158L, 0x325b97b223b9e3aeL, "finalState"), (SNode) p2);
}
return n1;
}
private static SNode createRefactoringOption_1o8b1n_a0a0a0a1a6(Object p0, Object p1) {
PersistenceFacade facade = PersistenceFacade.getInstance();
SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, "jetbrains.mps.lang.migration.structure.RefactoringOption"), null, null, false);
n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f23344L, "optionId"), p0 + "");
n1.setProperty(MetaAdapterFactory.getProperty(0x9074634404fd4286L, 0x97d5b46ae6a81709L, 0x31ee543051f23343L, 0x31ee543051f30774L, "description"), p1 + "");
return n1;
}
}