2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.concepts;
10 import java.util.Collection;
11 import java.util.Collections;
12 import java.util.HashSet;
15 public final class CompositeObjectRegistration<T> extends AbstractObjectRegistration<T> {
17 private final Set<Registration> registrations;
19 public CompositeObjectRegistration(final T instance, final Collection<? extends Registration> registrations) {
21 if (registrations == null) {
22 throw new IllegalArgumentException();
24 this.registrations = Collections.unmodifiableSet(new HashSet<>(registrations));
28 protected void removeRegistration() {
29 for (Registration registration : registrations) {
32 } catch (Exception e) {
38 public static <T> CompositeObjectRegistrationBuilder<T> builderFor(final T instance) {
39 return new CompositeObjectRegistrationBuilder<>(instance);
42 public static final class CompositeObjectRegistrationBuilder<T> implements Builder<CompositeObjectRegistration<T>> {
44 private final T instance;
45 private final Set<Registration> registrations;
47 public CompositeObjectRegistrationBuilder(final T instance) {
48 this.instance = instance;
49 registrations = new HashSet<>();
52 public CompositeObjectRegistrationBuilder<T> add(final ObjectRegistration<? super T> registration) {
53 if (registration.getInstance() != instance) {
54 throw new IllegalArgumentException("Instance must be same.");
56 registrations.add(registration);
60 public CompositeObjectRegistrationBuilder<T> remove(final ObjectRegistration<? super T> registration) {
61 if (registration.getInstance() != instance) {
62 throw new IllegalArgumentException("Instance must be same.");
64 registrations.remove(registration);
69 public CompositeObjectRegistration<T> build() {
70 return new CompositeObjectRegistration<>(instance, registrations);