Skip to content

Commit

Permalink
can now from JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
scopatz committed Feb 6, 2015
1 parent f6f9d24 commit b468cdf
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 57 deletions.
9 changes: 2 additions & 7 deletions cli/cyclus.cc
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,6 @@ int main(int argc, char* argv[]) {
// Try to detect schema type
std::stringstream input;
LoadStringstreamFromFile(input, infile);
std::string inext = fs::path(infile).extension().string();
if (inext == ".json") {
std::string inxml = cyclus::toolkit::JsonToXml(input.str());
input.str(inxml);
}
boost::shared_ptr<XMLParser> parser =
boost::shared_ptr<XMLParser>(new XMLParser());
parser->Init(input);
Expand Down Expand Up @@ -377,7 +372,7 @@ int EarlyExitArgs(const ArgInfo& ai) {
std::string infile(ai.vm["json-to-xml"].as<std::string>());
try {
std::stringstream input;
LoadStringstreamFromFile(input, infile);
LoadRawStringstreamFromFile(input, infile);
std::cout << cyclus::toolkit::JsonToXml(input.str());
} catch (cyclus::IOError err) {
std::cout << err.what() << "\n";
Expand All @@ -387,7 +382,7 @@ int EarlyExitArgs(const ArgInfo& ai) {
std::string infile(ai.vm["xml-to-json"].as<std::string>());
try {
std::stringstream input;
LoadStringstreamFromFile(input, infile);
LoadRawStringstreamFromFile(input, infile);
std::cout << cyclus::toolkit::XmlToJson(input.str());
} catch (cyclus::IOError err) {
std::cout << err.what() << "\n";
Expand Down
50 changes: 30 additions & 20 deletions share/cyclus-flat.rng.in
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,22 @@ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<zeroOrMore>
<element name="commodity">
<element name="name"><text/></element>
<element name="solution_priority"><data type="double"/></element>
<interleave>
<element name="name"><text/></element>
<element name="solution_priority"><data type="double"/></element>
</interleave>
</element>
</zeroOrMore>

<element name="archetypes">
<oneOrMore>
<element name="spec">
<optional><element name="path"><text/></element></optional>
<optional><element name="lib"><text/></element></optional>
<element name="name"><text/></element>
<optional><element name="alias"><text/></element></optional>
<element name="spec">
<interleave>
<optional><element name="path"><text/></element></optional>
<optional><element name="lib"><text/></element></optional>
<element name="name"><text/></element>
<optional><element name="alias"><text/></element></optional>
</interleave>
</element>
</oneOrMore>
</element>
Expand All @@ -83,24 +87,30 @@ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<oneOrMore>
<element name="agent">
<element name="name"><text/></element>
<element name="prototype"><text/></element>
<optional>
<element name="parent"><text/></element>
</optional>
<interleave>
<element name="name"><text/></element>
<element name="prototype"><text/></element>
<optional>
<element name="parent"><text/></element>
</optional>
</interleave>
</element>
</oneOrMore>

<zeroOrMore>
<element name="recipe">
<element name="name"><text/></element>
<element name="basis"><text/></element>
<oneOrMore>
<element name="nuclide">
<element name="id"><data type="string"/></element>
<element name="comp"><data type="double"/></element>
</element>
</oneOrMore>
<interleave>
<element name="name"><text/></element>
<element name="basis"><text/></element>
<oneOrMore>
<element name="nuclide">
<interleave>
<element name="id"><data type="string"/></element>
<element name="comp"><data type="double"/></element>
</interleave>
</element>
</oneOrMore>
</interleave>
</element>
</zeroOrMore>

Expand Down
66 changes: 39 additions & 27 deletions share/cyclus.rng.in
Original file line number Diff line number Diff line change
Expand Up @@ -49,34 +49,40 @@ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<zeroOrMore>
<element name="commodity">
<element name="name"> <text/> </element>
<element name="solution_priority"> <data type="double"/> </element>
<interleave>
<element name="name"> <text/> </element>
<element name="solution_priority"> <data type="double"/> </element>
</interleave>
</element>
</zeroOrMore>

<element name="archetypes">
<oneOrMore>
<element name="spec">
<optional><element name="path"><text/></element></optional>
<optional><element name="lib"><text/></element></optional>
<element name="name"><text/></element>
<optional><element name="alias"><text/></element></optional>
<element name="spec">
<interleave>
<optional><element name="path"><text/></element></optional>
<optional><element name="lib"><text/></element></optional>
<element name="name"><text/></element>
<optional><element name="alias"><text/></element></optional>
</interleave>
</element>
</oneOrMore>
</element>

<oneOrMore>
<element name="facility">
<element name="name"> <text/> </element>
<optional>
<element name="lifetime"> <data type="nonNegativeInteger"/> </element>
</optional>

<element name="config">
<choice>
@Facility_REFS@
</choice>
</element>
<interleave>
<element name="name"> <text/> </element>
<optional>
<element name="lifetime"> <data type="nonNegativeInteger"/> </element>
</optional>

<element name="config">
<choice>
@Facility_REFS@
</choice>
</element>
</interleave>
</element>
</oneOrMore>

Expand Down Expand Up @@ -104,8 +110,10 @@ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<element name="initialfacilitylist">
<oneOrMore>
<element name="entry">
<element name="prototype"> <text/> </element>
<element name="number"> <data type="nonNegativeInteger"/> </element>
<interleave>
<element name="prototype"> <text/> </element>
<element name="number"> <data type="nonNegativeInteger"/> </element>
</interleave>
</element>
</oneOrMore>
</element>
Expand All @@ -124,14 +132,18 @@ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">

<zeroOrMore>
<element name="recipe">
<element name="name"><text/></element>
<element name="basis"><text/></element>
<oneOrMore>
<element name="nuclide">
<element name="id"><data type="string"/></element>
<element name="comp"><data type="double"/></element>
</element>
</oneOrMore>
<interleave>
<element name="name"><text/></element>
<element name="basis"><text/></element>
<oneOrMore>
<element name="nuclide">
<interleave>
<element name="id"><data type="string"/></element>
<element name="comp"><data type="double"/></element>
</interleave>
</element>
</oneOrMore>
</interleave>
</element>
</zeroOrMore>

Expand Down
16 changes: 14 additions & 2 deletions src/xml_file_loader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
#include "infile_tree.h"
#include "logger.h"
#include "sim_init.h"
#include "toolkit/infile_converters.h"

namespace cyclus {

namespace fs = boost::filesystem;

void LoadStringstreamFromFile(std::stringstream& stream, std::string file) {
void LoadRawStringstreamFromFile(std::stringstream& stream, std::string file) {
std::ifstream file_stream(file.c_str());
if (!file_stream) {
throw IOError("The file '" + file + "' could not be loaded.");
Expand All @@ -34,6 +35,15 @@ void LoadStringstreamFromFile(std::stringstream& stream, std::string file) {
file_stream.close();
}

void LoadStringstreamFromFile(std::stringstream& stream, std::string file) {
LoadRawStringstreamFromFile(stream, file);
std::string inext = fs::path(file).extension().string();
if (inext == ".json") {
std::string inxml = cyclus::toolkit::JsonToXml(stream.str());
stream.str(inxml);
}
}

std::vector<AgentSpec> ParseSpecs(std::string infile) {
std::stringstream input;
LoadStringstreamFromFile(input, infile);
Expand Down Expand Up @@ -144,8 +154,10 @@ XMLFileLoader::XMLFileLoader(Recorder* r,
parser_ = boost::shared_ptr<XMLParser>(new XMLParser());
parser_->Init(input);

std::stringstream orig_input;
LoadRawStringstreamFromFile(orig_input, file_);
ctx_->NewDatum("InputFiles")
->AddVal("Data", Blob(input.str()))
->AddVal("Data", Blob(orig_input.str()))
->Record();
}

Expand Down
5 changes: 4 additions & 1 deletion src/xml_file_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ namespace cyclus {

class Context;

/// Reads the given file path into the passed stream.
/// Reads the given file path into the passed stream without modification.
void LoadRawStringstreamFromFile(std::stringstream& stream, std::string file);

/// Reads the given file path as XML into the passed stream.
void LoadStringstreamFromFile(std::stringstream& stream, std::string file);

/// Returns a list of the full module+agent spec for all agents in the given
Expand Down

0 comments on commit b468cdf

Please sign in to comment.