143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Protocol Buffers - Google's data interchange format
243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Copyright 2010 Google Inc.  All rights reserved.
343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// http://code.google.com/p/protobuf/
443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//
543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Redistribution and use in source and binary forms, with or without
643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// modification, are permitted provided that the following conditions are
743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// met:
843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//
943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//     * Redistributions of source code must retain the above copyright
1043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// notice, this list of conditions and the following disclaimer.
1143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//     * Redistributions in binary form must reproduce the above
1243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// copyright notice, this list of conditions and the following disclaimer
1343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// in the documentation and/or other materials provided with the
1443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// distribution.
1543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//     * Neither the name of Google Inc. nor the names of its
1643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// contributors may be used to endorse or promote products derived from
1743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// this software without specific prior written permission.
1843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci//
1943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
3143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Author: wink@google.com (Wink Saville)
3243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
3343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#ifndef PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
3443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#define PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
3543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
3643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <map>
3743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#include <google/protobuf/stubs/strutil.h>
3843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
3943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace google {
4043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace protobuf {
4143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace compiler {
4243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazcinamespace javanano {
4343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
4443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci// Parameters for used by the generators
4543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazciclass Params {
4643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci public:
4743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  typedef map<string, string> NameMap;
4843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci private:
4943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  string empty_;
5043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  string base_name_;
5143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  bool java_multiple_files_;
5243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  NameMap java_packages_;
5343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  NameMap java_outer_classnames_;
5443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
5543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci public:
5643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  Params(const string & base_name) :
5743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    empty_(""),
5843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    base_name_(base_name),
5943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    java_multiple_files_(false) {
6043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
6143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
6243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  const string& base_name() const {
6343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return base_name_;
6443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
6543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
6643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  bool has_java_package(const string& file_name) const {
6743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return java_packages_.find(file_name)
6843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci                        != java_packages_.end();
6943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
7043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  void set_java_package(const string& file_name,
7143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      const string& java_package) {
7243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    java_packages_[file_name] = java_package;
7343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
7443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  const string& java_package(const string& file_name) const {
7543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    NameMap::const_iterator itr;
7643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
7743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    itr = java_packages_.find(file_name);
7843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    if  (itr == java_packages_.end()) {
7943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      return empty_;
8043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    } else {
8143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      return itr->second;
8243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    }
8343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
8443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  const NameMap& java_packages() {
8543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return java_packages_;
8643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
8743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
8843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  bool has_java_outer_classname(const string& file_name) const {
8943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return java_outer_classnames_.find(file_name)
9043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci                        != java_outer_classnames_.end();
9143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
9243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  void set_java_outer_classname(const string& file_name,
9343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      const string& java_outer_classname) {
9443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    java_outer_classnames_[file_name] = java_outer_classname;
9543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
9643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  const string& java_outer_classname(const string& file_name) const {
9743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    NameMap::const_iterator itr;
9843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
9943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    itr = java_outer_classnames_.find(file_name);
10043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    if  (itr == java_outer_classnames_.end()) {
10143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      return empty_;
10243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    } else {
10343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci      return itr->second;
10443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    }
10543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
10643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  const NameMap& java_outer_classnames() {
10743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return java_outer_classnames_;
10843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
10943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
11043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  void set_java_multiple_files(bool value) {
11143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    java_multiple_files_ = value;
11243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
11343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  bool java_multiple_files() const {
11443325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci    return java_multiple_files_;
11543325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci  }
11643325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
11743325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci};
11843325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci
11943325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci}  // namespace javanano
12043325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci}  // namespace compiler
12143325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci}  // namespace protobuf
12243325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci}  // namespace google
12343325653beb4e5b6923d0380a84bf7e204be5c22Ulas Kirazci#endif  // PROTOBUF_COMPILER_JAVANANO_JAVANANO_PARAMS_H_
124