We shouldn't have an ordinal. An ordinal implies some kind of total ordering over all the elements, which we can't guarantee. For example, if I want to add a new Protocol 'pigeon' I'm going to give it MAX+1 (which is 8 in this case). But if someone else wants to add 'avian' (also as 8) we now have a clash. It gets worse if the next version of (E/J)Git comes out with 'psychic (8)' we now have a duplicate (or triplicate).

The ordinal appears to add no value at all; we can impose a total ordering over the protocol using the lexicographic sorting of the protocol names; instead of using an ArrayList, we can use a TreeMap instead.

Lastly, the value of ordinal appears completely unused.