Back compatibility fix for toggle switch

This commit is contained in:
Bane Stojkovic
2022-12-08 22:32:34 +01:00
parent be996d6494
commit c5a095cad9
@@ -31,6 +31,8 @@ import java.io.OutputStreamWriter;
import java.io.Reader; import java.io.Reader;
import java.io.Writer; import java.io.Writer;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
@@ -261,24 +263,27 @@ public class ProjectFileManager {
} catch (Exception e) { } catch (Exception e) {
warnings.add("Could not read file version number, the file may be corrupted."); warnings.add("Could not read file version number, the file may be corrupted.");
} }
FileInputStream fis = new FileInputStream(fileName);
String xml = new String(Files.readAllBytes(Paths.get(fileName)));
missingFields.clear(); missingFields.clear();
try { try {
Reader reader = new InputStreamReader(fis, "UTF-8"); xml = cleanupV3XML(xml);
project = (Project) xStream.fromXML(reader); project = (Project) xStream.fromXML(xml);
} catch (Exception e) { } catch (Exception e) {
LOG.warn("Could not open with the new xStream, trying the old one", e); LOG.warn("Could not open with the new xStream, trying the old one", e);
fis.close(); project = (Project) xStreamOld.fromXML(xml);
fis = new FileInputStream(fileName);
project = (Project) xStreamOld.fromXML(fis);
} }
if (!missingFields.isEmpty()) { if (!missingFields.isEmpty()) {
LOG.warn("The opened file is missing the following properties: " + String.join(", ", missingFields)); LOG.warn("The opened file is missing the following properties: " + String.join(", ", missingFields));
warnings.add("The project references unknown component properties, most likely because it was created with a newer version of DIYLC."); warnings.add("The project references unknown component properties, most likely because it was created with a newer version of DIYLC.");
} }
fis.close();
return project; return project;
} }
private String cleanupV3XML(String xml) {
xml = xml.replaceAll("<name defined-in=\"diylc.AbstractComponent\"></name>", "");
return xml;
}
private VersionNumber readV3Version(String fileName) throws Exception { private VersionNumber readV3Version(String fileName) throws Exception {
File fXmlFile = new File(fileName); File fXmlFile = new File(fileName);