3 #include "cheprep/XMLHepRepWriter.h"
4 #include "cheprep/XMLWriter.h"
5 #include "cheprep/BHepRepWriter.h"
7 #include "cheprep/DefaultHepRepInstance.h"
8 #include "cheprep/DefaultHepRepAttValue.h"
10 #define NAMESPACE "heprep"
21 XMLHepRepWriter::XMLHepRepWriter(ostream* os,
bool randomAccess,
bool useCompression)
29 zip =
new ZipOutputStream(*os);
35 #ifndef CHEPREP_NO_ZLIB
36 gz =
new GZIPOutputStream(*os);
39 cerr <<
"WARNING: the .gz output stream you are creating will be a plain file," << endl;
40 cerr <<
"since compression support (ZLIB) was not compiled into the library." << endl;
41 cerr <<
"To add ZLIB support, you need to undefine CHEPREP_NO_ZLIB." << endl;
50 XMLHepRepWriter::~XMLHepRepWriter() {
55 bool XMLHepRepWriter::addProperty(std::string key, std::string value) {
56 properties[key] = value;
60 bool XMLHepRepWriter::close() {
62 zip->putNextEntry(
"heprep.properties",
true);
64 map<string, string>::iterator i = properties.begin();
65 while (i != properties.end()) {
66 *zip << (*i).first <<
"=" << (*i).second << endl;
79 bool XMLHepRepWriter::write(HepRep* heprep,
string name) {
84 if (name.rfind(
".bheprep") == name.length()-8) {
85 xml =
new BHepRepWriter(*out);
91 xml->setAttribute(
"version", (
string)
"2.0");
92 xml->setAttribute(
"xmlns", (
string)
"http://java.freehep.org/schemas/heprep/2.0");
93 xml->setAttribute(
"xmlns",
"xsi",
"http://www.w3.org/2001/XMLSchema-instance");
94 xml->setAttribute(
"xsi",
"schemaLocation",
"http://java.freehep.org/schemas/heprep/2.0 http://java.freehep.org/schemas/heprep/2.0/HepRep.xsd");
95 xml->openTag(nameSpace,
"heprep");
96 write(heprep->getLayerOrder());
97 vector<HepRepTypeTree*> typeTreeSet = heprep->getTypeTreeList();
98 for (vector<HepRepTypeTree*>::iterator i1=typeTreeSet.begin(); i1 != typeTreeSet.end(); i1++) {
101 vector<HepRepInstanceTree*> instanceTreeSet = heprep->getInstanceTreeList();
102 for (vector<HepRepInstanceTree*>::iterator i2=instanceTreeSet.begin(); i2 != instanceTreeSet.end(); i2++) {
117 bool XMLHepRepWriter::write(vector<string> layers) {
118 string layerOrder =
"";
120 for (vector<string>::iterator i=layers.begin(); i != layers.end(); i++) {
122 layerOrder.append(
", ");
124 layerOrder.append(*i);
127 xml->setAttribute(
"order", layerOrder);
128 xml->printTag(nameSpace,
"layer");
132 bool XMLHepRepWriter::write(HepRepTypeTree* typeTree) {
133 xml->setAttribute(
"name", typeTree->getName());
134 xml->setAttribute(
"version", typeTree->getVersion());
135 xml->openTag(nameSpace,
"typetree");
137 vector<HepRepType*> types = typeTree->getTypeList();
138 for (vector<HepRepType*>::iterator i=types.begin(); i != types.end(); i++) {
146 bool XMLHepRepWriter::write(HepRepType* type) {
147 xml->setAttribute(
"name", type->getName());
148 xml->openTag(nameSpace,
"type");
149 write((HepRepDefinition*)type);
150 write((HepRepAttribute*)type);
152 vector<HepRepType*> types = type->getTypeList();
153 for (vector<HepRepType*>::iterator i=types.begin(); i != types.end(); i++) {
160 bool XMLHepRepWriter::write(HepRepTreeID* treeID) {
161 xml->setAttribute(
"qualifier", treeID->getQualifier());
162 xml->setAttribute(
"name", treeID->getName());
163 xml->setAttribute(
"version", treeID->getVersion());
164 xml->printTag(nameSpace,
"treeid");
168 bool XMLHepRepWriter::write(HepRepAction* action) {
169 xml->setAttribute(
"name", action->getName());
170 xml->setAttribute(
"expression", action->getExpression());
171 xml->printTag(nameSpace,
"action");
175 bool XMLHepRepWriter::write(HepRepInstanceTree* instanceTree) {
176 xml->setAttribute(
"name", instanceTree->getName());
177 xml->setAttribute(
"version", instanceTree->getVersion());
178 xml->setAttribute(
"typetreename", instanceTree->getTypeTree()->getName());
179 xml->setAttribute(
"typetreeversion", instanceTree->getTypeTree()->getVersion());
180 xml->openTag(nameSpace,
"instancetree");
182 vector<HepRepTreeID*> instanceTreeSet = instanceTree->getInstanceTreeList();
183 for (vector<HepRepTreeID*>::iterator i1=instanceTreeSet.begin(); i1 != instanceTreeSet.end(); i1++) {
188 vector<HepRepInstance*> instanceList = instanceTree->getInstances();
189 for (vector<HepRepInstance*>::iterator i2=instanceList.begin(); i2 != instanceList.end(); i2++) {
196 bool XMLHepRepWriter::write(HepRepInstance*
instance) {
198 xml->setAttribute(
"type", instance->getType()->getFullName());
199 xml->openTag(nameSpace,
"instance");
200 write((HepRepAttribute*)instance);
202 vector<HepRepPoint*> pointList = instance->getPoints();
203 for (vector<HepRepPoint*>::iterator i1=pointList.begin(); i1 != pointList.end(); i1++) {
207 vector<HepRepInstance*> instanceList = instance->getInstances();
208 for (vector<HepRepInstance*>::iterator i2=instanceList.begin(); i2 != instanceList.end(); i2++) {
215 bool XMLHepRepWriter::write(HepRepPoint* point) {
216 xml->setAttribute(
"x", point->getX());
217 xml->setAttribute(
"y", point->getY());
218 xml->setAttribute(
"z", point->getZ());
219 if (point->getAttValuesFromNode().size() != 0) {
220 xml->openTag(nameSpace,
"point");
221 write((HepRepAttribute*)point);
224 xml->printTag(nameSpace,
"point");
229 bool XMLHepRepWriter::write(HepRepAttribute* attribute) {
232 HepRepAttValue* layerAtt = attribute->getAttValueFromNode(
"layer");
233 if (layerAtt != NULL) write(layerAtt);
235 set<HepRepAttValue*> attSet = attribute->getAttValuesFromNode();
236 for (set<HepRepAttValue*>::iterator i=attSet.begin(); i != attSet.end(); i++) {
242 bool XMLHepRepWriter::write(HepRepDefinition* definition) {
243 set<HepRepAttDef*> list = definition->getAttDefsFromNode();
244 for (set<HepRepAttDef*>::iterator i=list.begin(); i != list.end(); i++) {
250 bool XMLHepRepWriter::write(HepRepAttValue* attValue) {
251 string name = attValue->getName();
253 xml->setAttribute(
"name", name);
255 switch(attValue->getType()) {
256 default: xml->setAttribute(
"value", attValue->getAsString());
258 case HepRepConstants::TYPE_STRING: xml->setAttribute(
"value", attValue->getString());
260 case HepRepConstants::TYPE_LONG: xml->setAttribute(
"value", attValue->getLong());
262 case HepRepConstants::TYPE_INT: xml->setAttribute(
"value", attValue->getInteger());
264 case HepRepConstants::TYPE_DOUBLE: xml->setAttribute(
"value", attValue->getDouble());
266 case HepRepConstants::TYPE_BOOLEAN: xml->setAttribute(
"value", attValue->getBoolean());
268 case HepRepConstants::TYPE_COLOR: xml->setAttribute(
"value", attValue->getColor());
271 if (attValue->showLabel() != HepRepConstants::SHOW_NONE) {
272 xml->setAttribute(
"showlabel", attValue->showLabel());
275 xml->printTag(nameSpace,
"attvalue");
279 bool XMLHepRepWriter::write(HepRepAttDef* attDef) {
280 xml->setAttribute(
"name", attDef->getName());
281 xml->setAttribute(
"desc", attDef->getDescription());
282 xml->setAttribute(
"category", attDef->getCategory());
283 xml->setAttribute(
"extra", attDef->getExtra());
284 xml->printTag(nameSpace,
"attdef");
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
static MCTruthManager * instance