Remove netconf-config
[netconf.git] / apps / netconf-topology / src / main / java / org / opendaylight / netconf / topology / spi / NetconfTopologySchemaAssembler.java
1 /*
2  * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netconf.topology.spi;
9
10 import com.google.common.util.concurrent.ThreadFactoryBuilder;
11 import java.util.concurrent.Executor;
12 import java.util.concurrent.ThreadFactory;
13 import java.util.concurrent.TimeUnit;
14 import org.eclipse.jdt.annotation.NonNullByDefault;
15 import org.opendaylight.controller.config.threadpool.util.FlexibleThreadPoolWrapper;
16 import org.osgi.service.component.annotations.Activate;
17 import org.osgi.service.component.annotations.Component;
18 import org.osgi.service.component.annotations.Deactivate;
19 import org.osgi.service.metatype.annotations.AttributeDefinition;
20 import org.osgi.service.metatype.annotations.Designate;
21 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
22
23 @NonNullByDefault
24 @Component(service = NetconfTopologySchemaAssembler.class, configurationPid = "org.opendaylight.netconf.topology")
25 @Designate(ocd = NetconfTopologySchemaAssembler.Configuration.class)
26 public final class NetconfTopologySchemaAssembler implements AutoCloseable {
27     @ObjectClassDefinition
28     public @interface Configuration {
29         @AttributeDefinition(min = "0")
30         int assembler$_$min$_$threads() default 1;
31         @AttributeDefinition(min = "1")
32         int assembler$_$max$_$threads() default 4;
33         @AttributeDefinition(min = "0")
34         long assembler$_$keep$_$alive$_$millis() default 60_000;
35     }
36
37     private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder()
38         .setNameFormat("topology-schema-assembler-%d")
39         .setDaemon(true)
40         .build();
41
42     private final FlexibleThreadPoolWrapper threadPool;
43
44     public NetconfTopologySchemaAssembler(final int minThreads, final int maxThreads, final long keepAliveTime,
45             final TimeUnit unit) {
46         threadPool = new FlexibleThreadPoolWrapper(minThreads, maxThreads, keepAliveTime, unit, THREAD_FACTORY);
47     }
48
49     @Activate
50     public NetconfTopologySchemaAssembler(final Configuration config) {
51         this(config.assembler$_$min$_$threads(), config.assembler$_$max$_$threads(),
52             config.assembler$_$keep$_$alive$_$millis(), TimeUnit.MILLISECONDS);
53     }
54
55     @Override
56     @Deactivate
57     public void close() {
58         threadPool.close();
59     }
60
61     Executor executor() {
62         return threadPool.getExecutor();
63     }
64 }