Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-maven-plugin / src / main / java / org / opendaylight / yangtools / yang2sources / plugin / YangProvider.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. 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.yang2sources.plugin;
9
10 import com.google.common.io.Files;
11 import java.io.File;
12 import java.io.IOException;
13 import java.util.Collection;
14 import org.apache.maven.model.Resource;
15 import org.apache.maven.project.MavenProject;
16 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 abstract class YangProvider {
21     private static final class Default extends YangProvider {
22         private static final Logger LOG = LoggerFactory.getLogger(Default.class);
23
24         @Override
25         void addYangsToMetaInf(final MavenProject project, final Collection<YangTextSchemaSource> modelsInProject)
26                 throws IOException {
27
28             final File generatedYangDir = new GeneratedDirectories(project).getYangDir();
29             LOG.debug("Generated dir {}", generatedYangDir);
30
31             // copy project's src/main/yang/*.yang to ${project.builddir}/generated-sources/yang/META-INF/yang/
32             // This honors setups like a Eclipse-profile derived one
33             final File withMetaInf = new File(generatedYangDir, YangToSourcesProcessor.META_INF_YANG_STRING);
34
35             for (YangTextSchemaSource source : modelsInProject) {
36                 final String fileName = source.getIdentifier().toYangFilename();
37                 final File file = new File(withMetaInf, fileName);
38                 Files.createParentDirs(file);
39
40                 source.copyTo(Files.asByteSink(file));
41                 LOG.debug("Created file {} for {}", file, source.getIdentifier());
42             }
43
44             setResource(generatedYangDir, project);
45             LOG.debug("{} YANG files marked as resources: {}", YangToSourcesProcessor.LOG_PREFIX, generatedYangDir);
46         }
47     }
48
49     private static final YangProvider DEFAULT = new Default();
50
51     static YangProvider getInstance() {
52         return DEFAULT;
53     }
54
55     abstract void addYangsToMetaInf(MavenProject project, Collection<YangTextSchemaSource> modelsInProject)
56             throws IOException;
57
58     static void setResource(final File targetYangDir, final MavenProject project) {
59         Resource res = new Resource();
60         res.setDirectory(targetYangDir.getPath());
61         project.addResource(res);
62     }
63 }