/** * @param type the user-friendly name of a registered subclass handler * @return the handler for the given user-friendly type name */ protected DelegatingSubclassHandler<T, ? extends T> getSubclassHandler(String type) { if (hasTypesDefined()) { if (subclassHandlers == null) { init(); } for (DelegatingSubclassHandler<T, ? extends T> handler : subclassHandlers) { if (type.equals(handler.getTypeName())) return handler; } } return null; }
/** * If this resources supports subclasses, this method gets the user-friendly type name for the * given subclass * * @param subclass * @return */ protected String getTypeName(Class<? extends T> subclass) { if (hasTypesDefined()) { DelegatingSubclassHandler<T, ? extends T> handler = getSubclassHandler(subclass); if (handler != null) return handler.getTypeName(); if (newDelegate().getClass().equals(subclass)) { String resourceName = getResourceName(); int lastSlash = resourceName.lastIndexOf("/"); resourceName = resourceName.substring(lastSlash + 1); return resourceName; } } return null; }