• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2010 Google Inc.  All rights reserved.
3 // http://code.google.com/p/protobuf/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 //     * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 //     * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 // Author: wink@google.com (Wink Saville)
32 
33 #ifndef PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
34 #define PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
35 
36 #include <map>
37 #include <set>
38 #include <google/protobuf/stubs/strutil.h>
39 
40 namespace google {
41 namespace protobuf {
42 namespace compiler {
43 namespace javanano {
44 
45 enum eMultipleFiles { JAVANANO_MUL_UNSET, JAVANANO_MUL_FALSE, JAVANANO_MUL_TRUE };
46 
47 // Parameters for used by the generators
48 class Params {
49  public:
50   typedef map<string, string> NameMap;
51   typedef set<string> NameSet;
52  private:
53   string empty_;
54   string base_name_;
55   eMultipleFiles override_java_multiple_files_;
56   bool store_unknown_fields_;
57   NameMap java_packages_;
58   NameMap java_outer_classnames_;
59   NameSet java_multiple_files_;
60   bool generate_has_;
61   bool java_enum_style_;
62   bool optional_field_accessors_;
63   bool use_reference_types_for_primitives_;
64   bool generate_equals_;
65   bool ignore_services_;
66   bool parcelable_messages_;
67 
68  public:
Params(const string & base_name)69   Params(const string & base_name) :
70     empty_(""),
71     base_name_(base_name),
72     override_java_multiple_files_(JAVANANO_MUL_UNSET),
73     store_unknown_fields_(false),
74     generate_has_(false),
75     java_enum_style_(false),
76     optional_field_accessors_(false),
77     use_reference_types_for_primitives_(false),
78     generate_equals_(false),
79     ignore_services_(false),
80     parcelable_messages_(false) {
81   }
82 
base_name()83   const string& base_name() const {
84     return base_name_;
85   }
86 
has_java_package(const string & file_name)87   bool has_java_package(const string& file_name) const {
88     return java_packages_.find(file_name)
89                         != java_packages_.end();
90   }
set_java_package(const string & file_name,const string & java_package)91   void set_java_package(const string& file_name,
92       const string& java_package) {
93     java_packages_[file_name] = java_package;
94   }
java_package(const string & file_name)95   const string& java_package(const string& file_name) const {
96     NameMap::const_iterator itr;
97 
98     itr = java_packages_.find(file_name);
99     if  (itr == java_packages_.end()) {
100       return empty_;
101     } else {
102       return itr->second;
103     }
104   }
java_packages()105   const NameMap& java_packages() {
106     return java_packages_;
107   }
108 
has_java_outer_classname(const string & file_name)109   bool has_java_outer_classname(const string& file_name) const {
110     return java_outer_classnames_.find(file_name)
111                         != java_outer_classnames_.end();
112   }
set_java_outer_classname(const string & file_name,const string & java_outer_classname)113   void set_java_outer_classname(const string& file_name,
114       const string& java_outer_classname) {
115     java_outer_classnames_[file_name] = java_outer_classname;
116   }
java_outer_classname(const string & file_name)117   const string& java_outer_classname(const string& file_name) const {
118     NameMap::const_iterator itr;
119 
120     itr = java_outer_classnames_.find(file_name);
121     if  (itr == java_outer_classnames_.end()) {
122       return empty_;
123     } else {
124       return itr->second;
125     }
126   }
java_outer_classnames()127   const NameMap& java_outer_classnames() {
128     return java_outer_classnames_;
129   }
130 
set_override_java_multiple_files(bool java_multiple_files)131   void set_override_java_multiple_files(bool java_multiple_files) {
132     if (java_multiple_files) {
133       override_java_multiple_files_ = JAVANANO_MUL_TRUE;
134     } else {
135       override_java_multiple_files_ = JAVANANO_MUL_FALSE;
136     }
137   }
clear_override_java_multiple_files()138   void clear_override_java_multiple_files() {
139     override_java_multiple_files_ = JAVANANO_MUL_UNSET;
140   }
141 
set_java_multiple_files(const string & file_name,bool value)142   void set_java_multiple_files(const string& file_name, bool value) {
143     if (value) {
144       java_multiple_files_.insert(file_name);
145     } else {
146       java_multiple_files_.erase(file_name);
147     }
148   }
java_multiple_files(const string & file_name)149   bool java_multiple_files(const string& file_name) const {
150     switch (override_java_multiple_files_) {
151       case JAVANANO_MUL_FALSE:
152         return false;
153       case JAVANANO_MUL_TRUE:
154         return true;
155       default:
156         return java_multiple_files_.find(file_name)
157                 != java_multiple_files_.end();
158     }
159   }
160 
set_store_unknown_fields(bool value)161   void set_store_unknown_fields(bool value) {
162     store_unknown_fields_ = value;
163   }
store_unknown_fields()164   bool store_unknown_fields() const {
165     return store_unknown_fields_;
166   }
167 
set_generate_has(bool value)168   void set_generate_has(bool value) {
169     generate_has_ = value;
170   }
generate_has()171   bool generate_has() const {
172     return generate_has_;
173   }
174 
set_java_enum_style(bool value)175   void set_java_enum_style(bool value) {
176     java_enum_style_ = value;
177   }
java_enum_style()178   bool java_enum_style() const {
179     return java_enum_style_;
180   }
181 
set_optional_field_accessors(bool value)182   void set_optional_field_accessors(bool value) {
183     optional_field_accessors_ = value;
184   }
optional_field_accessors()185   bool optional_field_accessors() const {
186     return optional_field_accessors_;
187   }
188 
set_use_reference_types_for_primitives(bool value)189   void set_use_reference_types_for_primitives(bool value) {
190     use_reference_types_for_primitives_ = value;
191   }
use_reference_types_for_primitives()192   bool use_reference_types_for_primitives() const {
193     return use_reference_types_for_primitives_;
194   }
195 
set_generate_equals(bool value)196   void set_generate_equals(bool value) {
197     generate_equals_ = value;
198   }
generate_equals()199   bool generate_equals() const {
200     return generate_equals_;
201   }
202 
set_ignore_services(bool value)203   void set_ignore_services(bool value) {
204     ignore_services_ = value;
205   }
ignore_services()206   bool ignore_services() const {
207     return ignore_services_;
208   }
209 
set_parcelable_messages(bool value)210   void set_parcelable_messages(bool value) {
211     parcelable_messages_ = value;
212   }
parcelable_messages()213   bool parcelable_messages() const {
214     return parcelable_messages_;
215   }
216 };
217 
218 }  // namespace javanano
219 }  // namespace compiler
220 }  // namespace protobuf
221 }  // namespace google
222 #endif  // PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
223