Java tutorial
/* * Copyright (C) 2011 JFrog Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jfrog.hudson.util; import com.google.common.collect.Maps; import hudson.FilePath; import hudson.remoting.VirtualChannel; import org.apache.commons.io.IOUtils; import org.jfrog.hudson.release.gradle.GradleModule; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Map; import java.util.Properties; import java.util.logging.Logger; /** * Utility class to help rewrite a properties file while keeping the contents of the properties file intact (e.g * comments) * * @author Tomer Cohen */ public class PropertyUtils { private static final Logger debuggingLogger = Logger.getLogger(PropertyUtils.class.getName()); private PropertyUtils() { // utility class throw new IllegalAccessError(); } /** * Read the {@code gradle.properties} and parse it into {@link GradleModule}s. Only those keys which are given will * be included in the parsing. * * @param gradlePropPath The path of the gradle.properties file * @param propKeys The property keys that should be taken into account when reading the properties file. * @return A map of {@link GradleModule}s that were assembled from the properties file, with the version as its * value. * @throws IOException In case an error occurs while reading the properties file, this exception is thrown. */ public static Map<String, String> getModulesPropertiesFromPropFile(FilePath gradlePropPath, String[] propKeys) throws IOException, InterruptedException { Properties gradleProps = loadGradleProperties(gradlePropPath); Map<String, String> versionsByPropKey = Maps.newLinkedHashMap(); for (String propKey : propKeys) { if (gradleProps.containsKey(propKey)) { versionsByPropKey.put(propKey, gradleProps.getProperty(propKey)); } } return versionsByPropKey; } /** * Load a properties file from a file path * * @param gradlePropertiesFilePath The file path where the gradle.properties is located. * @return The loaded properties. * @throws IOException In case an error occurs while reading the properties file, this exception is thrown. */ private static Properties loadGradleProperties(FilePath gradlePropertiesFilePath) throws IOException, InterruptedException { return gradlePropertiesFilePath.act(new FilePath.FileCallable<Properties>() { public Properties invoke(File gradlePropertiesFile, VirtualChannel channel) throws IOException, InterruptedException { Properties gradleProps = new Properties(); if (gradlePropertiesFile.exists()) { debuggingLogger .fine("Gradle properties file exists at: " + gradlePropertiesFile.getAbsolutePath()); FileInputStream stream = null; try { stream = new FileInputStream(gradlePropertiesFile); gradleProps.load(stream); } catch (IOException e) { debuggingLogger.fine("IO exception occurred while trying to read properties file from: " + gradlePropertiesFile.getAbsolutePath()); throw new RuntimeException(e); } finally { IOUtils.closeQuietly(stream); } } return gradleProps; } }); } }