1) the facility to add them is all in place. It's just a matter of creating the codec i.e., the CodecParameter<?> for the particular parameter type.. I think only one of signed or unsigned longs are supported presently. What we discovered was that most space system use calibrated values from unsigned ints so we shifted focus away from implementing the others.
We even plan to support non-numeric types. So a space craft could send encoded Strings. As I said though, everything we have seen so far uses uints for efficiency.
2) A "piece" TM is simply a group of Parameters. A TC is also simply a groups of parameters. You see differences at the lower levels of the OSI model stack where frames or packet headers contain meta data that describes whether the contained group of parameters is tm or tc. Essentially (and particularly with regard to data in a piece of software) they are the same though, yes.
The Space System Model deals with the internals and must implement methods to return command or tm groups. The return types are the same but the model must return the correct groups. The XTCE model gets this information from the model XML file which has distinct TM and TC sections/tags. When it builds the model it separates the definitions. To answer your question (finally), a UI woudl just as for allParameters() or allCommands() depending on what it wanted to display.
3) I don;t have the code here so I can't cite a specific example but I can tell it's because of complications arising from Type Erasure. Good reading here, section 3
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html We spent a lot of time trying to work around this and decided the best way was to handle the complexities in the model and keep the API ass simply as possible for application level development.
4) See above. Not, the generics in parameters are used to reference the type required to hold the value not necessarily what the parameter type is! This information comes from (if I remember correctly) the encodings (stored in the model). The reason for this is that Java has a limited set of primitives and no concept of unsigned values. This means an abstract type 32bit uint will not fit in a Java integer as the MSB is reserved for the twos complement sign. For this you need a Long and then have to play around at the bit shifting level. It get's even more complicated when we support different endianess! This is also why there are multiple codecs for integers, longs etc.
5) Pretty stable I think. Retrictions were made very generic so one can use anythings. It's a String,Object map I think with the Object being the restriction value. We've used CCSDS apid and an ip so far in tests.