@SuppressWarnings("unchecked")
ModelManager(ImmutableSet<? extends Model<?>> ms) {
models = (ImmutableSet<Model<?>>) ms;
final ImmutableSetMultimap.Builder<Class<?>, Model<?>> builder =
ImmutableSetMultimap
.builder();
builder.put(ModelReceiver.class, new ModelReceiverModel(this));
final Set<UserInterface> uis = new LinkedHashSet<>();
for (final Model<?> m : models) {
final Class<?> suptype = m.getSupportedType();
checkNotNull(suptype,
"Model.getSupportedType() must return a non-null, model: %s.", m);
builder.put(suptype, m);
if (m instanceof UserInterface) {
uis.add((UserInterface) m);
}
}
checkState(uis.size() <= 1,
"At most one implementor of %s can be defined, found %s.",
UserInterface.class, uis);
if (uis.isEmpty()) {
userInterface = Optional.absent();
} else {
userInterface = Optional.of(uis.iterator().next());
}
registry = builder.build();
for (final Model<?> m : models) {
doRegister(m);
}
}