blob: a0aba1f56d4c2905911b11517d0b824fcf44c535 [file] [log] [blame]
Bharat saraswal870c56f2016-02-20 21:57:16 +05301/*
2 * Copyright 2016 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.utils.io.impl;
18
19import java.io.BufferedWriter;
20import java.io.File;
21import java.io.FileWriter;
22import java.io.IOException;
23import java.util.List;
24
Bharat saraswal594bc6d2016-02-22 22:15:21 +053025import org.apache.commons.io.FileUtils;
Vinod Kumar Sc4216002016-03-03 19:55:30 +053026import org.apache.maven.model.Resource;
27import org.apache.maven.project.MavenProject;
28import org.onosproject.yangutils.utils.UtilConstants;
29import org.slf4j.Logger;
30import org.sonatype.plexus.build.incremental.BuildContext;
Bharat saraswal870c56f2016-02-20 21:57:16 +053031
32import static org.slf4j.LoggerFactory.getLogger;
Bharat saraswal870c56f2016-02-20 21:57:16 +053033
34/**
35 * Provides common utility functionalities for code generation.
36 */
37public final class YangIoUtils {
38
39 private static final Logger log = getLogger(YangIoUtils.class);
40
41 /**
42 * Default constructor.
43 */
44 private YangIoUtils() {
45 }
46
47 /**
48 * Creates the directory structure.
49 *
50 * @param path directory path
51 * @return directory structure
52 */
53 public static File createDirectories(String path) {
54
b.janani68c55e12016-02-24 12:23:03 +053055 File generatedDir = new File(path);
Bharat saraswal870c56f2016-02-20 21:57:16 +053056 generatedDir.mkdirs();
57 return generatedDir;
58 }
59
60 /**
61 * Adds package info file for the created directory.
62 *
63 * @param path directory path
64 * @param classInfo class info for the package
65 * @param pack package of the directory
Vinod Kumar Sc4216002016-03-03 19:55:30 +053066 * @throws IOException when fails to create package info file
Bharat saraswal870c56f2016-02-20 21:57:16 +053067 */
68 public static void addPackageInfo(File path, String classInfo, String pack) throws IOException {
69
b.janani68c55e12016-02-24 12:23:03 +053070 if (pack.contains(UtilConstants.YANG_GEN_DIR)) {
Bharat saraswal4bf8b152016-02-25 02:26:43 +053071 String[] strArray = pack.split(UtilConstants.YANG_GEN_DIR);
72 pack = strArray[1];
73 }
Bharat saraswal870c56f2016-02-20 21:57:16 +053074 try {
75
76 File packageInfo = new File(path + File.separator + "package-info.java");
77 packageInfo.createNewFile();
b.janani68c55e12016-02-24 12:23:03 +053078 FileWriter fileWriter = null;
79 BufferedWriter bufferedWriter = null;
80 fileWriter = new FileWriter(packageInfo);
81 bufferedWriter = new BufferedWriter(fileWriter);
82 bufferedWriter.write(CopyrightHeader.getCopyrightHeader());
83 bufferedWriter.write(JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.PACKAGE_INFO, classInfo));
84 bufferedWriter.write(UtilConstants.PACKAGE + UtilConstants.SPACE + pack + UtilConstants.SEMI_COLAN);
85 bufferedWriter.close();
Bharat saraswal870c56f2016-02-20 21:57:16 +053086 } catch (IOException e) {
87 throw new IOException("Exception occured while creating package info file.");
88 }
89 }
90
91 /**
92 * Cleans the generated directory if already exist in source folder.
93 *
Vinod Kumar Sc4216002016-03-03 19:55:30 +053094 * @param baseDir generated directory in previous build
Bharat saraswal870c56f2016-02-20 21:57:16 +053095 */
96 public static void clean(String baseDir) {
97 File generatedDirectory = new File(baseDir + File.separator + UtilConstants.YANG_GEN_DIR);
98 if (generatedDirectory.exists()) {
99 List<String> javafiles;
100 try {
101 javafiles = YangFileScanner.getJavaFiles(generatedDirectory.toString());
102 for (String file : javafiles) {
103 File currentFile = new File(file);
104 currentFile.delete();
105 }
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530106 FileUtils.deleteDirectory(generatedDirectory);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530107 } catch (IOException e) {
108 log.info("Failed to delete the generated files in " + generatedDirectory + " directory");
109 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530110 }
111 }
112
113 /**
114 * Adds generated source directory to the compilation root.
115 *
116 * @param source directory
117 * @param project current maven project
118 * @param context current build context
119 */
120 public static void addToSource(String source, MavenProject project, BuildContext context) {
121
122 project.addCompileSourceRoot(source);
123 Resource rsc = new Resource();
124 rsc.setDirectory(source);
125 project.addResource(rsc);
126 context.refresh(project.getBasedir());
127 log.info("Source directory added to compilation root: " + source);
128 }
129
130}