Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / core / src / net / sf / openrocket / preset / xml / OpenRocketComponentLoader.java
diff --git a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentLoader.java b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentLoader.java
new file mode 100644 (file)
index 0000000..a27712c
--- /dev/null
@@ -0,0 +1,44 @@
+package net.sf.openrocket.preset.xml;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Collection;
+import java.util.List;
+
+import javax.xml.bind.JAXBException;
+
+import net.sf.openrocket.file.Loader;
+import net.sf.openrocket.logging.LogHelper;
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.InvalidComponentPresetException;
+import net.sf.openrocket.startup.Application;
+import net.sf.openrocket.util.BugException;
+
+public class OpenRocketComponentLoader  implements Loader<ComponentPreset> {
+
+       private static final LogHelper log = Application.getLogger();
+
+       @Override
+       public Collection<ComponentPreset> load(InputStream stream,     String filename) {
+
+               log.debug("Loading presets from file " + filename);
+               
+               if ( ! (stream instanceof BufferedInputStream) ) {
+                       stream = new BufferedInputStream(stream);
+               }
+
+               try {
+                       List<ComponentPreset> presets;
+                       presets = (new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent( new InputStreamReader (stream))).asComponentPresets();
+                       log.debug("ComponentPreset file " + filename + " contained " + presets.size() + " presets");
+                       return presets;
+               } catch (JAXBException e) {
+                       throw new BugException("Unable to parse file: "+ filename, e);
+               } catch (InvalidComponentPresetException e) {
+                       throw new BugException("Unable to parse file: "+ filename, e);
+               }
+
+       }
+
+}