/** * Get optional extension instance. * * @param frameOwner screen or screen fragment * @param extensionClass class of the extension * @param <T> type of extension * @return optional extension */ public static <T> Optional<T> getOptional(FrameOwner frameOwner, Class<T> extensionClass) { checkNotNullArgument(frameOwner); checkNotNullArgument(extensionClass); if (frameOwner instanceof Screen) { Screen screen = (Screen) frameOwner; Map<Class<?>, Object> extensions = screen.getExtensions(); if (extensions != null) { return Optional.ofNullable(extensionClass.cast(extensions.get(extensionClass))); } } else if (frameOwner instanceof ScreenFragment) { ScreenFragment screen = (ScreenFragment) frameOwner; Map<Class<?>, Object> extensions = screen.getExtensions(); if (extensions != null) { return Optional.ofNullable(extensionClass.cast(extensions.get(extensionClass))); } } return Optional.empty(); }
/** * Remove extension instance. * * @param frameOwner screen or screen fragment * @param extensionClass class of the extension */ public static void remove(FrameOwner frameOwner, Class<?> extensionClass) { checkNotNullArgument(frameOwner); checkNotNullArgument(extensionClass); if (frameOwner instanceof Screen) { Screen screen = (Screen) frameOwner; Map<Class<?>, Object> extensions = screen.getExtensions(); if (extensions != null && extensions.containsKey(extensionClass)) { Map<Class<?>, Object> newExtensions = new HashMap<>(extensions); newExtensions.remove(extensionClass); screen.setExtensions(ImmutableMap.copyOf(newExtensions)); } } else if (frameOwner instanceof ScreenFragment) { ScreenFragment screen = (ScreenFragment) frameOwner; Map<Class<?>, Object> extensions = screen.getExtensions(); if (extensions != null && extensions.containsKey(extensionClass)) { Map<Class<?>, Object> newExtensions = new HashMap<>(extensions); newExtensions.remove(extensionClass); screen.setExtensions(ImmutableMap.copyOf(newExtensions)); } } }
ScreenFragment screen = (ScreenFragment) frameOwner; Map<Class<?>, Object> extensions = screen.getExtensions(); if (extensions == null) { screen.setExtensions(ImmutableMap.of(extensionClass, extension));