//:: # Copyright 2013, Big Switch Networks, Inc.
//:: #
//:: # LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
//:: # the following special exception:
//:: #
//:: # LOXI Exception
//:: #
//:: # As a special exception to the terms of the EPL, you may distribute libraries
//:: # generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
//:: # that copyright and licensing notices generated by LoxiGen are not altered or removed
//:: # from the LoxiGen Libraries and the notice provided below is (i) included in
//:: # the LoxiGen Libraries, if distributed in source code form and (ii) included in any
//:: # documentation for the LoxiGen Libraries, if distributed in binary form.
//:: #
//:: # Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
//:: #
//:: # You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
//:: # a copy of the EPL at:
//:: #
//:: # http::: #www.eclipse.org/legal/epl-v10.html
//:: #
//:: # Unless required by applicable law or agreed to in writing, software
//:: # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//:: # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
//:: # EPL for the specific language governing permissions and limitations
//:: # under the EPL.
//::
//:: import itertools
//:: include('_copyright.java')

//:: include('_autogen.java')

package ${package};

//:: include("_imports.java", msg=enum)

public enum ${class_name} {
//:: for i, entry in enumerate(enum.entries):
//::    if enum.metadata.properties:
//::        params = "({})".format(", ".join(entry.constructor_params))
//::    else:
//::        params = ""
//::    #endif
//::    delimiter = ", " if i < len(enum.entries)-1 else ";"
//::    to_string_value = enum.metadata.to_string(entry) if enum.metadata.to_string else None
//::    if to_string_value:
     ${entry.name}${params} {
         @Override
         public String toString() {
            return "${to_string_value}";
         }
     }${delimiter}
//::    else:
     ${entry.name}${params}${delimiter}
//::    #endif
//:: #endfor
//:: if enum.metadata.properties:

//:: for property_metadata in enum.metadata.properties:
     private final ${property_metadata.type.public_type} ${property_metadata.variable_name};
//:: #endfor

     private ${class_name}(${", ".join("{} {}".format(m.type.public_type, m.variable_name) for m in enum.metadata.properties)}) {
     //:: for property_metadata in enum.metadata.properties:
        this.${property_metadata.variable_name} = ${property_metadata.variable_name};
     //:: #endfor
     }
//:: for property_metadata in enum.metadata.properties:

     public ${property_metadata.type.public_type} ${property_metadata.getter_name}() {
         return ${property_metadata.variable_name};
     }
//:: #endfor
//:: #endif
}
