/******************************************************************************* * (c) Copyright 2016 Hewlett-Packard Development Company, L.P. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Apache License v2.0 which accompany this distribution. * * The Apache License is available at * http://www.apache.org/licenses/LICENSE-2.0 * *******************************************************************************/ package io.cloudslang.lang.compiler; import org.apache.commons.lang.Validate; import org.apache.commons.lang3.StringUtils; import java.util.Arrays; public enum Extension { SL("sl"), SL_YAML("sl.yaml"), SL_YML("sl.yml"), PROP_SL("prop.sl"), YAML("yaml"), YML("yml"); private final String value; private static final String[] extensionValues = new String[values().length]; static { initExtensionValues(); } private static void initExtensionValues() { Extension[] extensions = values(); for (int i = 0; i < extensions.length; i++) { extensionValues[i] = extensions[i].getValue(); } } Extension(String value) { this.value = value; } public String getValue() { return value; } public static String[] getSlangFileExtensionValues() { return Arrays.copyOfRange(extensionValues, 0, 3); } public static Extension[] getSlangFileExtensions() { return Arrays.copyOfRange(values(), 0, 3); } public static String[] getPropertiesFileExtensionValues() { return Arrays.copyOfRange(extensionValues, 3, 4); } public static Extension[] getPropertiesFileExtensions() { return Arrays.copyOfRange(values(), 3, 4); } public static String[] getYamlFileExtensionValues() { return Arrays.copyOfRange(extensionValues, 4, extensionValues.length); } public static String getExtensionValuesAsString() { return StringUtils.join(extensionValues, ", "); } public static void validateSlangFileExtension(String fileName) { Extension fileExtension = Extension.findExtension(fileName); validateFileExtension(fileName, fileExtension, getSlangFileExtensions(), getSlangFileExtensionValues()); } public static void validatePropertiesFileExtension(String fileName) { Extension fileExtension = Extension.findExtension(fileName); validateFileExtension(fileName, fileExtension, getPropertiesFileExtensions(), getPropertiesFileExtensionValues()); } private static void validateFileExtension(String fileName, Extension fileExtension, Extension[] extensions, String[] extensionValues) { boolean validFileExtension = false; for (Extension extension : extensions) { if (extension.equals(fileExtension)) { validFileExtension = true; } } String extensionsAsString = Arrays.toString(extensionValues); Validate.isTrue(validFileExtension, "File: " + fileName + " must have one of the following extensions: " + extensionsAsString.substring(1, extensionsAsString.length() - 1) + "." ); } public static String removeExtension(String fileName) { Extension extension = findExtension(fileName); if (extension != null) { return StringUtils.removeEnd(fileName, "." + extension.getValue()); } return fileName; } public static Extension findExtension(String fileName) { Extension foundExtension = null; if (fileName != null) { for (Extension extension : values()) { final String extensionValue = extension.getValue(); if (fileName.endsWith("." + extensionValue) && (foundExtension == null || extensionValue.length() > foundExtension.getValue().length())) { foundExtension = extension; } } } return foundExtension; } }