code: public static PackagingType of(String typeName) throws IllegalArgumentException {
          PackagingType packagingType = fromCache(typeName);
          if (packagingType != null){
              return packagingType;
          }
          // this will cause packaging object to register into cache
          return new PackagingType(typeName);
      }
docs: Builds a {@link PackagingType} object.
  If an appropriate object is not found in a cache, then a new one is created and registered into the cache.
  @see #fromCache(String)
  
  @param typeName
  String name of the packaging type
  @return Corresponding PackagingType object
  @throws IllegalArgumentException
  Thrown if typeName is {@code null} or empty