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