/*******************************************************************************
* ===========================================================
* Ankush : Big Data Cluster Management Solution
* ===========================================================
*
* (C) Copyright 2014, by Impetus Technologies
*
* This is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (LGPL v3) as
* published by the Free Software Foundation;
*
* This software is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
******************************************************************************/
/**
*
*/
package com.impetus.ankush.common.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import com.impetus.ankush.AppStoreWrapper;
import com.impetus.ankush2.logger.AnkushLogger;
/**
* The Class FileNameUtils.
*
* @author mayur
*/
public class FileNameUtils {
private static final String TAR_GZ = ".tar.gz";
private static final String COMPONENT_ENV_FILE_PREFIX = "ankush_";
private static final String COMPONENT_ENV_FILE_DIR = "/etc/profile.d/";
private static final String TGZ = ".tgz";
private static final String ZIP = ".zip";
/** The log. */
private static final AnkushLogger LOG = new AnkushLogger(
FileNameUtils.class);
/**
* Gets the file extension.
*
* @param fileName
* the file name
* @return extension of file
*/
public static String getFileExtension(String fileName) {
if (fileName != null) {
if (fileName.endsWith(ZIP)) {
return ZIP;
}
if (fileName.endsWith(TAR_GZ)) {
return TAR_GZ;
}
if (fileName.endsWith(TGZ)) {
return TGZ;
}
}
return "unsupported";
}
/**
* Checks if is tar gz.
*
* @param componentExtension
* the component extension
* @return true, if is tar gz
*/
public static boolean isTarGz(String componentExtension) {
return componentExtension.equals(new String(TAR_GZ))
|| componentExtension.equals(new String(TGZ));
}
/**
* Checks if is zip.
*
* @param componentExtension
* the component extension
* @return true, if is zip
*/
public static boolean isZip(String componentExtension) {
return componentExtension.equals(new String(ZIP));
}
/**
* Checks if is unsupported.
*
* @param componentExtension
* the component extension
* @return true, if is unsupported
*/
public static boolean isUnsupported(String componentExtension) {
return componentExtension.equals(new String("unsupported"));
}
/**
* Convert to valid path.
*
* @param path
* the path
* @return the string
*/
public static String convertToValidPath(String path) {
if(path == null) {
return path;
}
if (path.endsWith("/")) {
return path;
} else {
return path + "/";
}
}
/**
* The Unix separator character.
*/
private static final char UNIX_SEPARATOR = '/';
/**
* The Windows separator character.
*/
private static final char WINDOWS_SEPARATOR = '\\';
/**
* Gets the name.
*
* @param filename
* the filename
* @return the name
*/
public static String getName(String filename) {
if (filename == null) {
return null;
}
int index = indexOfLastSeparator(filename);
return filename.substring(index + 1);
}
/**
* Index of last separator.
*
* @param filename
* the filename
* @return the int
*/
public static int indexOfLastSeparator(String filename) {
if (filename == null) {
return -1;
}
int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR);
int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR);
return Math.max(lastUnixPos, lastWindowsPos);
}
/**
* Gets the dependency file name.
*
* @param osName
* the os name
* @param componentName
* the component name
* @return the dependency file name
* @author hokam chauhan
*/
public static String getDependencyFileName(String osName,
String componentName) {
if (osName == null || componentName == null) {
return null;
}
String resourcePath = AppStoreWrapper.getResourcePath();
return resourcePath + "dependencies/" + componentName.toLowerCase()
+ "/" + osName.toLowerCase();
}
/**
* Gets the installer file path.
*
* @param osName
* the os name
* @param componentName
* the component name
* @return the installer file path
* @author hokam chauhan
*/
public static String getInstallerFilePath(String osName,
String componentName) {
if (osName == null || componentName == null) {
return null;
}
String resourcePath = AppStoreWrapper.getResourcePath();
return resourcePath + "installer/" + componentName.toLowerCase() + "/"
+ osName.toLowerCase();
}
/**
* Gets the sciprt path.
*
* @param type
* the type
* @return the sciprt path
*/
public static String getSciprtPath(String technology, String fileName) {
if (technology == null || fileName == null) {
return null;
}
String resourcePath = AppStoreWrapper.getResourcePath();
// getting configuration file
return resourcePath + "/scripts/" + technology.toLowerCase() + "/"
+ fileName + ".sh";
}
/**
* Method to get the parent folder path.
*
* @param folderPath
* the folder path
* @return The parent folder path.
*/
public static String getParentFolderName(String folderPath) {
/* Checking folderPath end with file separator. */
if (folderPath.endsWith(File.separator)) {
folderPath = folderPath.substring(0, folderPath.length() - 1);
}
// Getting the last index of file separator in folderPath string.
int end = folderPath.lastIndexOf(File.separator);
// Getting the second last index of file separator in folderPath string.
int start = folderPath.lastIndexOf(File.separator, end - 1);
// Getting teh parent folder name.
String parentFolderName = folderPath.substring(start + 1, end);
return parentFolderName;
}
/**
* The Enum ONSFileType.
*/
public enum ONSFileType {
/** The invalid. */
INVALID,
/** The zip. */
ZIP,
/** The tar gz. */
TAR_GZ,
/** The bin. */
BIN,
/** The rpm. */
RPM,
/** The gz. */
GZ
};
/**
* Gets the file type.
*
* @param fileName
* the file name
* @return the file type
*/
public static ONSFileType getFileType(String fileName) {
if (fileName != null) {
if (fileName.endsWith(ZIP)) {
return ONSFileType.ZIP;
}
if (fileName.endsWith(TAR_GZ)) {
return ONSFileType.TAR_GZ;
}
if (fileName.endsWith(".bin")) {
return ONSFileType.BIN;
}
if (fileName.endsWith(".gz")) {
return ONSFileType.GZ;
}
}
return ONSFileType.INVALID;
}
/**
* Gets the path from archive.
*
* @param archiveFile
* the archive file
* @param charSequence
* the char sequence
* @return the path from archive
*/
public static String getPathFromArchive(String archiveFile,
String charSequence) {
String path = null;
ONSFileType fileType = getFileType(archiveFile);
if (fileType == ONSFileType.TAR_GZ) {
try {
GZIPInputStream gzipInputStream = null;
gzipInputStream = new GZIPInputStream(new FileInputStream(
archiveFile));
TarArchiveInputStream tarInput = new TarArchiveInputStream(
gzipInputStream);
TarArchiveEntry entry;
while (null != (entry = tarInput.getNextTarEntry())) {
if (entry.getName().contains(charSequence)) {
path = entry.getName();
break;
}
}
} catch (FileNotFoundException e) {
LOG.error(e.getMessage(), e);
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
} else if (fileType == ONSFileType.ZIP) {
ZipFile zf;
try {
zf = new ZipFile(archiveFile);
Enumeration<? extends ZipEntry> entries = zf.entries();
String fileName;
while (entries.hasMoreElements()) {
fileName = entries.nextElement().getName();
if (fileName.contains(charSequence)) {
path = fileName;
break;
}
}
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
}
return path;
}
/**
* Gets the extracted directory name.
*
* @param archiveFile
* the archive file
* @return Directory name after extraction of archiveFile
*/
public static String getExtractedDirectoryName(String archiveFile) {
String path = null;
ONSFileType fileType = getFileType(archiveFile);
if (fileType == ONSFileType.TAR_GZ || fileType == ONSFileType.GZ) {
try {
GZIPInputStream gzipInputStream = null;
gzipInputStream = new GZIPInputStream(new FileInputStream(
archiveFile));
TarArchiveInputStream tarInput = new TarArchiveInputStream(
gzipInputStream);
return tarInput.getNextTarEntry().getName();
} catch (FileNotFoundException e) {
LOG.error(e.getMessage(), e);
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
} else if (fileType == ONSFileType.ZIP || fileType == ONSFileType.BIN) {
ZipFile zf;
try {
zf = new ZipFile(archiveFile);
Enumeration<? extends ZipEntry> entries = zf.entries();
return entries.nextElement().getName();
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
}
return path;
}
public static String getComponentEnvFilePath(String componentName) {
if(componentName != null && (!componentName.isEmpty())) {
return FileNameUtils.COMPONENT_ENV_FILE_DIR + FileNameUtils.COMPONENT_ENV_FILE_PREFIX + componentName + ".sh" ;
}
return null;
}
}