package jetbrains.mps.lang.migration.runtime.base;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.jetbrains.mps.openapi.language.SLanguage;
import jetbrains.mps.smodel.adapter.ids.MetaIdHelper;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.smodel.adapter.ids.SLanguageId;
import jetbrains.mps.smodel.language.LanguageRegistry;
import jetbrains.mps.smodel.MPSModuleRepository;
import org.apache.log4j.Level;
public class MigrationScriptReference implements BaseScriptReference<MigrationScript> {
private static final Logger LOG = LogManager.getLogger(MigrationScriptReference.class);
private final SLanguage language;
private final int fromVersion;
public MigrationScriptReference(SLanguage language, int fromVersion) {
this.language = language;
this.fromVersion = fromVersion;
}
public SLanguage getLanguage() {
return language;
}
public int getFromVersion() {
return fromVersion;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || this.getClass() != o.getClass()) {
return false;
}
MigrationScriptReference that = (MigrationScriptReference) o;
if (!(language.equals(that.language))) {
return false;
}
if (fromVersion != that.fromVersion) {
return false;
}
return true;
}
@Override
public int hashCode() {
return language.hashCode() + 31 * fromVersion;
}
public String serialize() {
return MetaIdHelper.getLanguage(language).serialize() + "(" + language.getQualifiedName() + ")" + "/" + fromVersion;
}
public static MigrationScriptReference deserialize(String s) {
int version = Integer.parseInt(s.substring(s.indexOf('/') + 1));
int ix = s.indexOf('(');
SLanguage language = MetaAdapterFactory.getLanguage(SLanguageId.deserialize(s.substring(0, ix)), s.substring(ix + 1, s.indexOf(')', ix)));
return new MigrationScriptReference(language, version);
}
@Override
public MigrationScript resolve(boolean silent) {
int current = this.getFromVersion();
MigrationAspectDescriptor md = LanguageRegistry.getInstance(MPSModuleRepository.getInstance()).getLanguage(language).getAspect(MigrationAspectDescriptor.class);
if (md == null && !(silent)) {
if (LOG.isEnabledFor(Level.WARN)) {
LOG.warn("Could not load migration descriptor for language " + language + ".");
}
}
MigrationScript script = check_dhbyxl_a0e0k(md, current);
if (script == null && !(silent)) {
if (LOG.isEnabledFor(Level.WARN)) {
LOG.warn("Could not load migration script for language " + language + ", version " + current + ".");
}
return null;
}
return script;
}
private static MigrationScript check_dhbyxl_a0e0k(MigrationAspectDescriptor checkedDotOperand, Integer current) {
if (null != checkedDotOperand) {
return checkedDotOperand.getScript(current);
}
return null;
}
}