2 * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.mdsal.binding.javav2.dom.adapter.spi.loader;
10 import com.google.common.annotations.Beta;
11 import com.google.common.cache.CacheLoader;
12 import java.util.Optional;
13 import javax.annotation.Nonnull;
14 import javax.annotation.Nullable;
15 import org.opendaylight.mdsal.binding.javav2.dom.adapter.spi.builder.AdapterBuilder;
18 * Class for loading specific delegate type.
21 * - built specific object type
26 public abstract class AdapterLoader<T, D> extends CacheLoader<Class<? extends T>, Optional<T>> {
29 protected abstract D getDelegate(Class<? extends D> reqDeleg);
32 protected abstract AdapterBuilder<? extends T, D> createBuilder(Class<? extends T> key);
36 public Optional<T> load(@Nonnull final Class<? extends T> key) {
38 final AdapterBuilder<? extends T, D> builder = createBuilder(key);
39 for (final Class<? extends D> reqDeleg : builder.getRequiredDelegates()) {
40 final D deleg = getDelegate(reqDeleg);
42 builder.addDelegate(reqDeleg, deleg);
44 return Optional.empty();
47 return Optional.of(builder.build());