#4 Implemented abstract factory pattern to support instantiation of
Annotation parts.
#5 change setType(Enum) method names to setTypeEnum, because Jackson
doesn't allow setter method overloading