blob: dfbb234d342d8398a73c3b54822f62ae6a31f3d7 [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
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053019import static org.slf4j.LoggerFactory.getLogger;
20
Bharat saraswal870c56f2016-02-20 21:57:16 +053021import java.io.BufferedWriter;
22import java.io.File;
23import java.io.FileWriter;
24import java.io.IOException;
25import java.util.List;
26
Bharat saraswal594bc6d2016-02-22 22:15:21 +053027import org.apache.commons.io.FileUtils;
Vinod Kumar Sc4216002016-03-03 19:55:30 +053028import org.apache.maven.model.Resource;
29import org.apache.maven.project.MavenProject;
30import org.onosproject.yangutils.utils.UtilConstants;
31import org.slf4j.Logger;
32import org.sonatype.plexus.build.incremental.BuildContext;
Bharat saraswal870c56f2016-02-20 21:57:16 +053033
Bharat saraswal870c56f2016-02-20 21:57:16 +053034/**
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());
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053083 bufferedWriter.write(JavaDocGen.getJavaDoc(JavaDocGen.JavaDocType.PACKAGE_INFO, classInfo, false));
b.janani68c55e12016-02-24 12:23:03 +053084 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) {
Bharat saraswal8f2a6c52016-03-09 18:34:56 +053097 File generatedDirectory = new File(baseDir + File.separator + UtilConstants.YANG_GEN_DIR
98 + UtilConstants.DEFAULT_BASE_PKG.replace(UtilConstants.PERIOD, UtilConstants.SLASH));
Bharat saraswal870c56f2016-02-20 21:57:16 +053099 if (generatedDirectory.exists()) {
100 List<String> javafiles;
101 try {
102 javafiles = YangFileScanner.getJavaFiles(generatedDirectory.toString());
103 for (String file : javafiles) {
104 File currentFile = new File(file);
105 currentFile.delete();
106 }
Bharat saraswal594bc6d2016-02-22 22:15:21 +0530107 FileUtils.deleteDirectory(generatedDirectory);
Bharat saraswal870c56f2016-02-20 21:57:16 +0530108 } catch (IOException e) {
109 log.info("Failed to delete the generated files in " + generatedDirectory + " directory");
110 }
Bharat saraswal870c56f2016-02-20 21:57:16 +0530111 }
112 }
113
114 /**
115 * Adds generated source directory to the compilation root.
116 *
117 * @param source directory
118 * @param project current maven project
119 * @param context current build context
120 */
121 public static void addToSource(String source, MavenProject project, BuildContext context) {
122
123 project.addCompileSourceRoot(source);
124 Resource rsc = new Resource();
125 rsc.setDirectory(source);
126 project.addResource(rsc);
127 context.refresh(project.getBasedir());
128 log.info("Source directory added to compilation root: " + source);
129 }
130
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530131 /**
132 * Removes extra char from the string.
133 *
134 * @param valueString string to be trimmed
135 * @param removealStirng extra chars
136 * @return new string
137 */
138 public static String trimAtLast(String valueString, String removealStirng) {
139 StringBuilder stringBuilder = new StringBuilder(valueString);
140 int index = valueString.lastIndexOf(removealStirng);
141 stringBuilder.deleteCharAt(index);
142 return stringBuilder.toString();
143 }
144
145 /**
146 * Returns new parted string.
147 *
148 * @param partString string to be parted
149 * @return parted string
150 */
151 public static String partString(String partString) {
152 String[] strArray = partString.split(UtilConstants.COMMA);
153 String newString = "";
154 for (int i = 0; i < strArray.length; i++) {
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530155 if (i % 4 != 0 || i == 0) {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530156 newString = newString + strArray[i] + UtilConstants.COMMA;
157 } else {
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530158 newString = newString + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION
159 + strArray[i]
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530160 + UtilConstants.COMMA;
161 }
162 }
163 return trimAtLast(newString, UtilConstants.COMMA);
164 }
165
Bharat saraswal870c56f2016-02-20 21:57:16 +0530166}