1 //
2 //  mimarksattributescommand.h
3 //  Mothur
4 //
5 //  Created by Sarah Westcott on 3/17/15.
6 //  Copyright (c) 2015 Schloss Lab. All rights reserved.
7 //
8 
9 #ifndef __Mothur__mimarksattributescommand__
10 #define __Mothur__mimarksattributescommand__
11 
12 #include "command.hpp"
13 
14 struct Package {
15     bool required;
16     string groupName;
17     string name;
PackagePackage18     Package() { required=false; groupName=""; name=""; }
PackagePackage19     Package(bool r, string g, string n) : required(r), groupName(g), name(n) {}
~PackagePackage20     ~Package() {}
21 
getPackageStringPackage22     string getPackageString() {
23         string r = "mandatory";
24         if (!required) { r = "optional";  }
25         string packageString = name + '\t' + groupName + '\t' + r;
26         return packageString;
27     }
28 };
29 
30 struct Value {
31     bool required;
32     string format, description;
33 
ValueValue34     Value() { format=""; description=""; required=false; }
ValueValue35     Value(bool r, string d, string f) : format(f), description(d), required(r) {}
~ValueValue36     ~Value() {}
37 
38 };
39 
40 struct Group {
41     string packageName;
42     map<string, Value> values;
43 
GroupGroup44     Group() { packageName = ""; }
GroupGroup45     Group(string p) :  packageName(p) {}
~GroupGroup46     ~Group() {}
47 };
48 
49 struct Attribute {
50     string name, harmonizedName, description, format;
51     vector<Package> packages;
52 
getPackagesStringAttribute53     string getPackagesString() {
54         string packagesString = "";
55         for (int i = 0; i < packages.size(); i++) {
56             packagesString += packages[i].getPackageString() + "\n";
57         }
58         return packagesString;
59     }
60 
AttributeAttribute61     Attribute() { format=""; description=""; harmonizedName=""; name=""; }
AttributeAttribute62     Attribute(string hn, string d, string n, string f) : format(f), harmonizedName(hn), name(n), description(d) {}
~AttributeAttribute63     ~Attribute() {}
64 };
65 
66 /**************************************************************************************************/
67 
68 class MimarksAttributesCommand : public Command {
69 public:
70     MimarksAttributesCommand(string);
~MimarksAttributesCommand()71    ~MimarksAttributesCommand(){}
72 
73     vector<string> setParameters();
getCommandName()74     string getCommandName()			{ return "mimarks.attributes";			}
getCommandCategory()75     string getCommandCategory()		{ return "Hidden";		}
76 
77     string getOutputPattern(string);
78 
79     string getHelpString();
getCitation()80     string getCitation() { return "http://www.mothur.org/wiki/Mimarks.attributes"; }
getDescription()81     string getDescription()		{ return "Reads bioSample Attributes xml and generates source for get.mimarkspackage command."; }
82 
83     int execute();
help()84     void help() { m->mothurOut(getHelpString()); }
85 
86 private:
87 
88     Attribute readAttribute(ifstream& in);
89     Package parsePackage(string package);
90     string trimTags(string& value);
91 
92     bool abort;
93     string  xmlFile, selectedPackage;
94     vector<string> outputNames;
95 };
96 
97 /**************************************************************************************************/
98 
99 
100 
101 #endif /* defined(__Mothur__mimarksattributescommand__) */
102