blob: d410cfb327942333dded0721e397c9388bb05288 [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) {
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
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530130 /**
131 * Removes extra char from the string.
132 *
133 * @param valueString string to be trimmed
134 * @param removealStirng extra chars
135 * @return new string
136 */
137 public static String trimAtLast(String valueString, String removealStirng) {
138 StringBuilder stringBuilder = new StringBuilder(valueString);
139 int index = valueString.lastIndexOf(removealStirng);
140 stringBuilder.deleteCharAt(index);
141 return stringBuilder.toString();
142 }
143
144 /**
145 * Returns new parted string.
146 *
147 * @param partString string to be parted
148 * @return parted string
149 */
150 public static String partString(String partString) {
151 String[] strArray = partString.split(UtilConstants.COMMA);
152 String newString = "";
153 for (int i = 0; i < strArray.length; i++) {
154 if (i % 4 != 0) {
155 newString = newString + strArray[i] + UtilConstants.COMMA;
156 } else {
157 newString = newString + UtilConstants.NEW_LINE + UtilConstants.TWELVE_SPACE_INDENTATION + strArray[i]
158 + UtilConstants.COMMA;
159 }
160 }
161 return trimAtLast(newString, UtilConstants.COMMA);
162 }
163
Bharat saraswal870c56f2016-02-20 21:57:16 +0530164}