Created
August 14, 2018 16:05
-
-
Save catalinghita8/282e48d024330c9c57571daa341beafd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @AppScoped | |
| public class MessageViewModelFactory implements ViewModelProvider.Factory { | |
| private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators; | |
| @Inject | |
| public MessageViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) { | |
| this.creators = creators; | |
| } | |
| @SuppressWarnings("unchecked") | |
| @Override | |
| public <T extends ViewModel> T create(Class<T> modelClass) { | |
| Provider<? extends ViewModel> creator = creators.get(modelClass); | |
| if (creator == null) { | |
| for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : creators.entrySet()) { | |
| if (modelClass.isAssignableFrom(entry.getKey())) { | |
| creator = entry.getValue(); | |
| break; | |
| } | |
| } | |
| } | |
| if (creator == null) { | |
| throw new IllegalArgumentException("unknown model class " + modelClass); | |
| } | |
| try { | |
| return (T) creator.get(); | |
| } catch (Exception e) { | |
| throw new RuntimeException(e); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment