blob: 1dced0576272700dc53a6993e6c24759ccc79f6e [file] [log] [blame]
Bharat saraswal97459962016-02-20 21:57:16 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal97459962016-02-20 21:57:16 +05303 *
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.BufferedReader;
20import java.io.File;
21import java.io.FileReader;
22import java.io.FileWriter;
23import java.io.IOException;
24import java.io.PrintWriter;
25
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053026import org.onosproject.yangutils.datamodel.YangNode;
27import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
28import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
29
Bharat saraswald532a4c2016-03-25 18:19:46 +053030import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getJavaPackageFromPackagePath;
31import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053032import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getParentNodeInGenCode;
Bharat saraswal84366c52016-03-23 19:40:35 +053033import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
34import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
35import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
36import static org.onosproject.yangutils.utils.UtilConstants.MULTIPLE_NEW_LINE;
37import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053038import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC_OF_CHILD;
Bharat saraswal84366c52016-03-23 19:40:35 +053039import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
40import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
41import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
Bharat saraswal84366c52016-03-23 19:40:35 +053042import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.createDirectories;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053043import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswal97459962016-02-20 21:57:16 +053044
45/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053046 * Represents utility to handle file system operations.
Bharat saraswal97459962016-02-20 21:57:16 +053047 */
48public final class FileSystemUtil {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053049
Bharat saraswal97459962016-02-20 21:57:16 +053050 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053051 * Creates an instance of file system util.
Bharat saraswal97459962016-02-20 21:57:16 +053052 */
53 private FileSystemUtil() {
54 }
55
56 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053057 * Checks if the package directory structure created.
Bharat saraswal97459962016-02-20 21:57:16 +053058 *
Vinod Kumar S08710982016-03-03 19:55:30 +053059 * @param pkg Package to check if it is created
60 * @return existence status of package
Bharat saraswal97459962016-02-20 21:57:16 +053061 */
b.janani66b749c2016-02-24 12:23:03 +053062 public static boolean doesPackageExist(String pkg) {
Bharat saraswald532a4c2016-03-25 18:19:46 +053063 File pkgDir = new File(getPackageDirPathFromJavaJPackage(pkg));
Bharat saraswal84366c52016-03-23 19:40:35 +053064 File pkgWithFile = new File(pkgDir + SLASH + "package-info.java");
Vidyashree Rama13960652016-04-26 15:06:06 +053065 return (pkgDir.exists() && pkgWithFile.isFile());
Bharat saraswal97459962016-02-20 21:57:16 +053066 }
67
68 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053069 * Creates a package structure with package info java file if not present.
Bharat saraswal97459962016-02-20 21:57:16 +053070 *
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053071 * @param yangNode YANG node for which code is being generated
Bharat saraswal97459962016-02-20 21:57:16 +053072 * @throws IOException any IO exception
73 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053074 public static void createPackage(YangNode yangNode)
75 throws IOException {
76
77 YangNode parent = getParentNodeInGenCode(yangNode);
78 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) yangNode).getJavaFileInfo();
79 String absolutePath = getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(),
80 javaFileInfo.getPackageFilePath());
81
82 String pkgInfo;
83 if (parent != null) {
84 pkgInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName()
85 + PACKAGE_INFO_JAVADOC_OF_CHILD;
86 } else {
87 pkgInfo = javaFileInfo.getJavaName();
88 }
89
90 if (!doesPackageExist(absolutePath)) {
Bharat saraswal97459962016-02-20 21:57:16 +053091 try {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053092 File pack = createDirectories(absolutePath);
93 addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(absolutePath));
Bharat saraswal97459962016-02-20 21:57:16 +053094 } catch (IOException e) {
95 throw new IOException("failed to create package-info file");
96 }
97 }
98 }
99
100 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530101 * Reads the contents from source file and append its contents to append
Bharat saraswal97459962016-02-20 21:57:16 +0530102 * file.
103 *
104 * @param toAppend destination file in which the contents of source file is
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530105 * appended
Bharat saraswal97459962016-02-20 21:57:16 +0530106 * @param srcFile source file from which data is read and added to to append
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530107 * file
Vinod Kumar S08710982016-03-03 19:55:30 +0530108 * @throws IOException any IO errors
Bharat saraswal97459962016-02-20 21:57:16 +0530109 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530110 public static void appendFileContents(File toAppend, File srcFile)
111 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530112 updateFileHandle(srcFile, NEW_LINE + readAppendFile(toAppend.toString(), FOUR_SPACE_INDENTATION), false);
Bharat saraswal97459962016-02-20 21:57:16 +0530113 }
114
115 /**
116 * Reads file and convert it to string.
117 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530118 * @param toAppend file to be converted
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530119 * @param spaces spaces to be appended
Vinod Kumar S08710982016-03-03 19:55:30 +0530120 * @return string of file
Bharat saraswal97459962016-02-20 21:57:16 +0530121 * @throws IOException when fails to convert to string
122 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530123 public static String readAppendFile(String toAppend, String spaces)
124 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530125 FileReader fileReader = new FileReader(toAppend);
126 BufferedReader bufferReader = new BufferedReader(fileReader);
Bharat saraswal97459962016-02-20 21:57:16 +0530127 try {
128 StringBuilder stringBuilder = new StringBuilder();
129 String line = bufferReader.readLine();
130
131 while (line != null) {
Vidyashree Rama02f115f2016-04-18 12:29:39 +0530132 if (line.equals(SPACE) || line.equals(EMPTY_STRING) || line.equals(EIGHT_SPACE_INDENTATION)
133 || line.equals(MULTIPLE_NEW_LINE)) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530134 stringBuilder.append(NEW_LINE);
135 } else if (line.equals(FOUR_SPACE_INDENTATION)) {
136 stringBuilder.append(EMPTY_STRING);
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530137 } else {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530138 stringBuilder.append(spaces + line);
Bharat saraswal84366c52016-03-23 19:40:35 +0530139 stringBuilder.append(NEW_LINE);
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530140 }
Bharat saraswal97459962016-02-20 21:57:16 +0530141 line = bufferReader.readLine();
142 }
143 return stringBuilder.toString();
144 } finally {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530145 fileReader.close();
Bharat saraswal97459962016-02-20 21:57:16 +0530146 bufferReader.close();
147 }
148 }
149
150 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530151 * Updates the generated file handle.
Bharat saraswal97459962016-02-20 21:57:16 +0530152 *
153 * @param inputFile input file
Vinod Kumar S08710982016-03-03 19:55:30 +0530154 * @param contentTobeAdded content to be appended to the file
Bharat saraswal022dae92016-03-04 20:08:09 +0530155 * @param isClose when close of file is called.
Bharat saraswal84366c52016-03-23 19:40:35 +0530156 * @throws IOException if the named file exists but is a directory rather than a regular file,
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530157 * does not exist but cannot be created, or cannot be opened for any other reason
Bharat saraswal97459962016-02-20 21:57:16 +0530158 */
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530159 public static void updateFileHandle(File inputFile, String contentTobeAdded, boolean isClose)
160 throws IOException {
Bharat saraswal97459962016-02-20 21:57:16 +0530161 FileWriter fileWriter = new FileWriter(inputFile, true);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530162 PrintWriter outputPrintWriter = new PrintWriter(fileWriter, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530163 if (!isClose) {
164 outputPrintWriter.write(contentTobeAdded);
165 outputPrintWriter.flush();
166 outputPrintWriter.close();
167 } else {
168 fileWriter.flush();
169 fileWriter.close();
170 }
Bharat saraswal97459962016-02-20 21:57:16 +0530171 }
172}