package jetbrains.mps.project.persistence;
/*Generated by MPS */
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.project.structure.modules.DevkitDescriptor;
import org.jdom.Element;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.project.ModuleId;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.List;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
import org.jetbrains.mps.openapi.model.SModelReference;
import jetbrains.mps.util.annotation.ToRemove;
import jetbrains.mps.vfs.IFile;
import org.jdom.Document;
import jetbrains.mps.util.JDOMUtil;
import org.jetbrains.mps.openapi.module.SModuleReference;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.io.OutputStream;
import org.apache.log4j.Level;
public class DevkitDescriptorPersistence {
private static final Logger LOG = LogManager.getLogger(DevkitDescriptorPersistence.class);
public DevkitDescriptorPersistence() {
}
@NotNull
public DevkitDescriptor load(@NotNull final Element root) throws ModuleReadException {
try {
DevkitDescriptor descriptor = new _FunctionTypes._return_P0_E0<DevkitDescriptor>() {
public DevkitDescriptor invoke() {
final DevkitDescriptor result_raojav_a0a0a0a0c = new DevkitDescriptor();
final String result_raojav_a0a0a0a0a0c = root.getAttributeValue("name");
result_raojav_a0a0a0a0c.setNamespace(result_raojav_a0a0a0a0a0c);
String uuid = root.getAttributeValue("uuid");
if (uuid != null) {
final ModuleId result_raojav_a0a2a0a0a0a0c = ModuleId.fromString(uuid);
result_raojav_a0a0a0a0c.setId(result_raojav_a0a2a0a0a0a0c);
}
for (Element exportedLang : ListSequence.fromList((List<Element>) root.getChildren("exported-language"))) {
result_raojav_a0a0a0a0c.getExportedLanguages().add(PersistenceFacade.getInstance().createModuleReference(exportedLang.getAttributeValue("name")));
}
Element extendedDevKits = ListSequence.fromList(((List<Element>) root.getChildren("extendedDevKits"))).first();
if (extendedDevKits != null) {
for (Element xde : ListSequence.fromList((List<Element>) extendedDevKits.getChildren("extendedDevKit"))) {
result_raojav_a0a0a0a0c.getExtendedDevkits().add(PersistenceFacade.getInstance().createModuleReference(xde.getText()));
}
}
Element exportedSolutions = ListSequence.fromList(((List<Element>) root.getChildren("exported-solutions"))).first();
if (exportedSolutions != null) {
for (Element xse : ListSequence.fromList((List<Element>) exportedSolutions.getChildren("exported-solution"))) {
result_raojav_a0a0a0a0c.getExportedSolutions().add(PersistenceFacade.getInstance().createModuleReference(xse.getText()));
}
}
Element genPlanElement;
if ((genPlanElement = root.getChild("generation-plan")) != null) {
final SModelReference result_raojav_a0a11a0a0a0a0c = PersistenceFacade.getInstance().createModelReference(genPlanElement.getAttributeValue("model"));
result_raojav_a0a0a0a0c.setAssociatedPlan(result_raojav_a0a11a0a0a0a0c);
}
return result_raojav_a0a0a0a0c;
}
}.invoke();
return descriptor;
} catch (Exception e) {
throw new ModuleReadException(e);
}
}
/**
*
* @deprecated use {@link jetbrains.mps.project.persistence.DevkitDescriptorPersistence#save(DevkitDescriptor) instance method} instead
*/
@Deprecated
@ToRemove(version = 3.5)
public static DevkitDescriptor loadDevKitDescriptor(IFile file) {
try {
Document document = JDOMUtil.loadDocument(file);
DevkitDescriptor descriptor = new DevkitDescriptorPersistence().load(document.getRootElement());
ModuleDescriptorPersistence.setTimestamp(descriptor, file);
return descriptor;
} catch (ModuleReadException ex) {
throw ex;
} catch (Exception e) {
throw new ModuleReadException(e);
}
}
@NotNull
public Element save(@NotNull final DevkitDescriptor descriptor) {
Element root = new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0g = new Element("dev-kit");
result_raojav_a0a0a0g.setAttribute("name", descriptor.getNamespace());
if (descriptor.getId() != null) {
result_raojav_a0a0a0g.setAttribute("uuid", descriptor.getId().toString());
}
for (final SModuleReference lang : SetSequence.fromSet(descriptor.getExportedLanguages())) {
result_raojav_a0a0a0g.addContent(new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0a3a0a0a0g = new Element("exported-language");
result_raojav_a0a0a0a3a0a0a0g.setAttribute("name", lang.toString());
return result_raojav_a0a0a0a3a0a0a0g;
}
}.invoke());
}
if (!(descriptor.getExtendedDevkits().isEmpty())) {
result_raojav_a0a0a0g.addContent(new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0a5a0a0a0g = new Element("extendedDevKits");
for (final SModuleReference ref : SetSequence.fromSet(descriptor.getExtendedDevkits())) {
result_raojav_a0a0a0a5a0a0a0g.addContent(new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0a0a0a0a0a5a0a0a0g = new Element("extendedDevKit");
result_raojav_a0a0a0a0a0a0a0a5a0a0a0g.setText(ref.toString());
return result_raojav_a0a0a0a0a0a0a0a5a0a0a0g;
}
}.invoke());
}
return result_raojav_a0a0a0a5a0a0a0g;
}
}.invoke());
}
if (!(descriptor.getExportedSolutions().isEmpty())) {
result_raojav_a0a0a0g.addContent(new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0a7a0a0a0g = new Element("exported-solutions");
for (final SModuleReference ref : SetSequence.fromSet(descriptor.getExportedSolutions())) {
result_raojav_a0a0a0a7a0a0a0g.addContent(new _FunctionTypes._return_P0_E0<Element>() {
public Element invoke() {
final Element result_raojav_a0a0a0a0a0a0a0a7a0a0a0g = new Element("exported-solution");
result_raojav_a0a0a0a0a0a0a0a7a0a0a0g.setText(ref.toString());
return result_raojav_a0a0a0a0a0a0a0a7a0a0a0g;
}
}.invoke());
}
return result_raojav_a0a0a0a7a0a0a0g;
}
}.invoke());
}
if (descriptor.getAssociatedGenPlan() != null) {
Element genPlanElement = new Element("generation-plan");
genPlanElement.setAttribute("model", PersistenceFacade.getInstance().asString(descriptor.getAssociatedGenPlan()));
result_raojav_a0a0a0g.addContent(genPlanElement);
}
return result_raojav_a0a0a0g;
}
}.invoke();
return root;
}
/**
*
* @deprecated use {@link jetbrains.mps.project.persistence.DevkitDescriptorPersistence#save(DevkitDescriptor) instance method} instead
*/
@Deprecated
@ToRemove(version = 3.5)
public static void saveDevKitDescriptor(IFile file, DevkitDescriptor descriptor) {
try {
Element root = new DevkitDescriptorPersistence().save(descriptor);
OutputStream os = file.openOutputStream();
JDOMUtil.writeDocument(new Document(root), os);
} catch (Exception e) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("", e);
}
}
ModuleDescriptorPersistence.setTimestamp(descriptor, file);
}
}