| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.ivy.osgi.core; |
| |
| import java.io.FileNotFoundException; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.HashMap; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| import java.util.Properties; |
| |
| import org.apache.ivy.util.Message; |
| |
| public class ExecutionEnvironmentProfileProvider { |
| |
| private static final String DEFAULT_PROFILES_FILE = "jvm-packages.properties"; |
| |
| private static final String PACKAGE_PREFIX = "org/apache/ivy/osgi/core/"; |
| |
| private Map<String, ExecutionEnvironmentProfile> profileList; |
| |
| private static final ExecutionEnvironmentProfileProvider INSTANCE; |
| |
| static { |
| try { |
| INSTANCE = new ExecutionEnvironmentProfileProvider(); |
| } catch (IOException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public static ExecutionEnvironmentProfileProvider getInstance() { |
| return INSTANCE; |
| } |
| |
| public ExecutionEnvironmentProfileProvider() throws IOException { |
| profileList = loadDefaultProfileList(); |
| } |
| |
| public ExecutionEnvironmentProfile getProfile(String profile) { |
| return profileList.get(profile); |
| } |
| |
| public static Map<String, ExecutionEnvironmentProfile> loadDefaultProfileList() |
| throws IOException { |
| ClassLoader loader = ExecutionEnvironmentProfileProvider.class.getClassLoader(); |
| InputStream defaultProfilesFile = loader.getResourceAsStream(PACKAGE_PREFIX |
| + DEFAULT_PROFILES_FILE); |
| if (defaultProfilesFile == null) { |
| throw new FileNotFoundException(PACKAGE_PREFIX + DEFAULT_PROFILES_FILE |
| + " not found in the classpath"); |
| } |
| Properties props = new Properties(); |
| try { |
| props.load(defaultProfilesFile); |
| } finally { |
| defaultProfilesFile.close(); |
| } |
| Map<String, ExecutionEnvironmentProfile> profiles = new HashMap<String, ExecutionEnvironmentProfile>(); |
| for (Entry<Object, Object> prop : props.entrySet()) { |
| String propName = (String) prop.getKey(); |
| if (propName.endsWith(".pkglist")) { |
| String profileName = propName.substring(0, propName.length() - 8); |
| if (!profiles.containsKey(profileName)) { |
| loadProfile(props, profiles, profileName); |
| } |
| } |
| } |
| return profiles; |
| } |
| |
| private static ExecutionEnvironmentProfile loadProfile(Properties props, |
| Map<String, ExecutionEnvironmentProfile> profiles, String name) { |
| |
| ExecutionEnvironmentProfile profile = new ExecutionEnvironmentProfile(name); |
| |
| // load the package for the extended profile |
| String extendedProfileName = props.getProperty(name + ".extends"); |
| if (extendedProfileName != null) { |
| ExecutionEnvironmentProfile extendedProfile = profiles.get(extendedProfileName); |
| if (extendedProfile == null) { |
| // not loaded yet, so load it now |
| extendedProfile = loadProfile(props, profiles, extendedProfileName); |
| } |
| profile.pkgNames.addAll(extendedProfile.pkgNames); |
| } |
| |
| // load the actual list |
| String pkgList = props.getProperty(name + ".pkglist"); |
| String[] packages = pkgList.split(","); |
| for (int i = 0; i < packages.length; i++) { |
| String pkg = packages[i].trim(); |
| if (pkg.length() != 0) { |
| profile.pkgNames.add(pkg); |
| } |
| } |
| |
| profiles.put(name, profile); |
| |
| String aliasList = props.getProperty(name + ".aliases"); |
| if (aliasList != null) { |
| String[] aliases = aliasList.split(","); |
| for (int i = 0; i < aliases.length; i++) { |
| String alias = aliases[i].trim(); |
| if (alias.length() != 0) { |
| ExecutionEnvironmentProfile profileAlias = new ExecutionEnvironmentProfile( |
| alias); |
| profileAlias.pkgNames = profile.pkgNames; |
| profiles.put(alias, profileAlias); |
| } |
| } |
| } |
| |
| Message.verbose("Execution environment profile " + profile.getName() + " loaded"); |
| |
| return profile; |
| } |
| |
| } |