Micro Application Generator
===========================

:major:`[Major]` NullPointerException when using -outputFinalQoS if QoS Profile did not define each internal QoS
----------------------------------------------------------------------------------------------------------------

When using MAG with the ``-outputFinalQoS`` option, if the QoS Profile to check did not contain
a definition of each internal QoS (participant_qos, publisher_qos, etc.) directly or by inheriting
from another QoS Profile, MAG reported this error:

.. code-block:: console

   Exception in thread "main" java.lang.NullPointerException
      at com.rti.micro.appgen.utils.QosUtils.removeNullElementsFromList(QosUtils.java:2332)
      at com.rti.micro.appgen.utils.QosUtils.removeNullElements(QosUtils.java:2256)
      at com.rti.micro.appgen.MicroAppGen.main(MicroAppGen.java:328)

[RTI Issue ID MAG-121]

:minor:`[Minor]` MAG failed to generate code when qos_profile inherited from individual QoS policies
----------------------------------------------------------------------------------------------------

MAG failed to generate code when a ``<qos_profile>`` inherited from individual
QoS policies. For example, running MAG with the following input file caused an
error:

.. code-block:: XML

   <qos_library name="QosLibrary">
      <qos_profile name="QosProfile1" is_default_qos="true">
         <participant_qos name="QosParticipant">
            ...
         </participant_qos>
      </qos_profile>
      <qos_profile name="QosProfile2" base_name="QosProfile1::QosParticipant">
      </qos_profile>
   </qos_library>

The error was:

.. code-block:: console 

   ...
   11:31:40.548 [main] ERROR com.rti.micro.appgen.MicroAppGen - Failed to calculate the system model.
   java.lang.Exception: Unable to find QoS library/profile 'QosProfile1::QosParticipant'.
   ...
   11:31:40.552 [main] INFO com.rti.micro.appgen.MicroAppGen - Exiting.

Now MAG properly handles this case. 

[RTI Issue ID MAG-105]

:minor:`[Minor]` MAG always used default value for disable_auto_interface_config
--------------------------------------------------------------------------------

MAG always used the default value for ``disable_auto_interface_config`` in
the generated code, regardless of the value specified in the XML.

[RTI Issue ID MAG-110]

:minor:`[Minor]` MAG failed if arguments contained whitespace on Linux systems
------------------------------------------------------------------------------

On Linux systems, MAG failed to run if any arguments contained whitespace.
It logged an error similar to the following:

.. code-block:: console 

   12:04:55.205 [main] ERROR com.rti.micro.appgen.MicroAppGen - Only 1 input file
   can be processed.
   12:04:55.208 [main] INFO  com.rti.micro.appgen.MicroAppGen - Exiting.

[RTI Issue ID MAG-118]

:trivial:`[Trivial]` XSD validation failed if flags used a combination of values
--------------------------------------------------------------------------------

The XSD validation of an XML application file failed if there was
a UDPv4 configuration using a combination of values for the ``flags``
element. For example, this snippet caused an error:

.. code-block:: xml

   <transport_builtin>
      <udpv4>
            <interface_table>
               <element>
                  <flags>
                        UDP_INTERFACE_INTERFACE_UP_FLAG|UDP_INTERFACE_INTERFACE_MULTICAST_FLAG
                  </flags>
               </element>
            </interface_table>
      </udpv4>
   </transport_builtin>

The error was:

.. code-block:: console
   
   ERROR com.rti.micro.appgen.MicroAppGen - cvc-pattern-valid: 
   Value 'UDP_INTERFACE_INTERFACE_UP_FLAG|UDP_INTERFACE_INTERFACE_MULTICAST_FLAG'
   is not facet-valid with respect to pattern
   '(UDP_INTERFACE_INTERFACE_UP_FLAG|UDP_INTERFACE_INTERFACE_MULTICAST_FLAG)'
   for type 'udpInterfaceFlagMask'.

Now combinations are allowed.

[RTI Issue ID MAG-114]