X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Fpreset%2Fxml%2FOpenRocketComponentSaver.java;h=934d4be5e88f5ab41f1aaf7625ff5272a392b893;hb=aef62410a9671aea9e7d653978c6ce7abd7d15f6;hp=add220a692e6059b52c9d4a9de25f7027e9b477e;hpb=a51d7cb0b4d1e59d8fd5bff629d3cf7934b45db9;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentSaver.java b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentSaver.java index add220a6..934d4be5 100644 --- a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentSaver.java +++ b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentSaver.java @@ -10,11 +10,15 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.StringWriter; +import java.util.Collections; +import java.util.Comparator; import java.util.List; /** @@ -36,6 +40,16 @@ public class OpenRocketComponentSaver { } } + public boolean save(File file, List theMaterialList, List thePresetList) throws + JAXBException, + IOException { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); + writer.write(marshalToOpenRocketComponent(theMaterialList, thePresetList)); + writer.flush(); + writer.close(); + return true; + } + /** * This method marshals a list of materials and ComponentPresets into an .orc formatted XML string. * @@ -53,6 +67,32 @@ public class OpenRocketComponentSaver { marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); StringWriter sw = new StringWriter(); + // We're going to sort the initial data since that makes the output much easier on the eyes. + + Collections.sort(theMaterialList, new Comparator() { + + @Override + public int compare(Material o1, Material o2) { + return o1.getName().compareTo( o2.getName() ); + } + + }); + + Collections.sort(thePresetList, new Comparator() { + + @Override + public int compare(ComponentPreset o1, ComponentPreset o2) { + int manucmp = o1.getManufacturer().getSimpleName().compareTo( o2.getManufacturer().getSimpleName() ); + + if ( manucmp != 0 ) { + return manucmp; + } + + return o1.getPartNo().compareTo( o2.getPartNo()); + } + + }); + marshaller.marshal(toOpenRocketComponentDTO(theMaterialList, thePresetList), sw); return sw.toString(); @@ -61,17 +101,17 @@ public class OpenRocketComponentSaver { /** * This method unmarshals from a Reader that is presumed to be open on an XML file in .orc format. * - * @param is an open reader; StringBufferInputStream could not be used because it's deprecated and does not handle UTF - * characters correctly + * @param is an open reader; StringBufferInputStream could not be used because it's deprecated and does not handle + * UTF characters correctly * * @return a list of ComponentPresets * * @throws InvalidComponentPresetException * */ - public List unmarshalFromOpenRocketComponent(Reader is) throws JAXBException, + public OpenRocketComponentDTO unmarshalFromOpenRocketComponent(Reader is) throws JAXBException, InvalidComponentPresetException { - return fromOpenRocketComponent(is).asComponentPresets(); + return fromOpenRocketComponent(is); } /** @@ -98,13 +138,13 @@ public class OpenRocketComponentSaver { * * @param is an open Reader; assumed to be opened on a file of XML in .orc format * - * @return the OpenRocketComponentDTO that is a POJO representation of the XML; null if the data could not be read or - * was in an invalid format + * @return the OpenRocketComponentDTO that is a POJO representation of the XML; null if the data could not be read + * or was in an invalid format */ private OpenRocketComponentDTO fromOpenRocketComponent(Reader is) throws JAXBException { /** The context is thread-safe, but unmarshallers are not. Create a local one. */ Unmarshaller unmarshaller = context.createUnmarshaller(); - return (OpenRocketComponentDTO) unmarshaller.unmarshal(is); + return (OpenRocketComponentDTO) unmarshaller.unmarshal(is); //new StreamSource(is)); } /** @@ -153,6 +193,12 @@ public class OpenRocketComponentSaver { return new CenteringRingDTO(thePreset); case ENGINE_BLOCK: return new EngineBlockDTO(thePreset); + case LAUNCH_LUG: + return new LaunchLugDTO(thePreset); + case STREAMER: + return new StreamerDTO(thePreset); + case PARACHUTE: + return new ParachuteDTO(thePreset); } return null;