Populate parser/ hierarchy
[yangtools.git] / parser / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / YangParserFactoryImpl.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies, 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.yangtools.yang.parser.impl;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.Collections2;
14 import java.util.Collection;
15 import javax.inject.Inject;
16 import javax.inject.Singleton;
17 import org.eclipse.jdt.annotation.NonNull;
18 import org.kohsuke.MetaInfServices;
19 import org.opendaylight.yangtools.yang.model.parser.api.YangParser;
20 import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory;
21 import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode;
22 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
23 import org.opendaylight.yangtools.yang.xpath.api.YangXPathParserFactory;
24 import org.osgi.service.component.annotations.Activate;
25 import org.osgi.service.component.annotations.Component;
26 import org.osgi.service.component.annotations.Reference;
27
28 /**
29  * Reference {@link YangParserFactory} implementation.
30  *
31  * @deprecated Use {@link DefaultYangParserFactory} instead.
32  */
33 @Beta
34 @MetaInfServices
35 @Singleton
36 @Component(immediate = true)
37 @Deprecated(since = "7.0.0", forRemoval = true)
38 public final class YangParserFactoryImpl implements YangParserFactory {
39     private final DefaultYangParserFactory delegate;
40
41     private YangParserFactoryImpl(final DefaultYangParserFactory delegate) {
42         this.delegate = requireNonNull(delegate);
43     }
44
45     /**
46      * Construct a new {@link YangParserFactory} backed by {@link DefaultReactors#defaultReactor()}.
47      */
48     public YangParserFactoryImpl() {
49         this(new DefaultYangParserFactory());
50     }
51
52     @Inject
53     @Activate
54     public YangParserFactoryImpl(final @Reference YangXPathParserFactory xpathFactory) {
55         this(new DefaultYangParserFactory(xpathFactory));
56     }
57
58     @Override
59     public Collection<StatementParserMode> supportedParserModes() {
60         return Collections2.transform(delegate.supportedImportResolutionModes(), mode -> {
61             switch (mode) {
62                 case DEFAULT:
63                     return StatementParserMode.DEFAULT_MODE;
64                 case OPENCONFIG_SEMVER:
65                     return StatementParserMode.SEMVER_MODE;
66                 default:
67                     throw new IllegalStateException("Unhandled mode " + mode);
68             }
69         });
70     }
71
72     @Override
73     public @NonNull YangParser createParser(final YangParserConfiguration configuration) {
74         return new YangParserImpl(delegate.createParser(configuration));
75     }
76 }