/* * 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.karaf.bundle.core.internal; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Dictionary; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MavenConfigService { private final static Logger logger = LoggerFactory.getLogger(MavenConfigService.class); private final ConfigurationAdmin configurationAdmin; public MavenConfigService(ConfigurationAdmin configurationAdmin) { this.configurationAdmin = configurationAdmin; } File getLocalRepository() { String path = null; Dictionary<String, Object> config = getConfiguration(); if (config != null) { path = getLocalRepoFromConfig(config); } if (path == null) { path = System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository"; } int index = path.indexOf('@'); if (index > 0) { return new File(path.substring(index)).getAbsoluteFile(); } else { return new File(path).getAbsoluteFile(); } } private Dictionary<String, Object> getConfiguration() { try { Configuration configuration = configurationAdmin.getConfiguration("org.ops4j.pax.url.mvn", null); if (configuration != null) { return configuration.getProperties(); } } catch (Exception e) { logger.error("Error retrieving maven configuration", e); } return null; } static String getLocalRepoFromConfig(Dictionary<String, Object> dict) { String path = null; if (dict != null) { path = (String) dict.get("org.ops4j.pax.url.mvn.localRepository"); if (path == null) { String settings = (String) dict.get("org.ops4j.pax.url.mvn.settings"); if (settings != null) { path = getLocalRepositoryFromSettings(new File(settings)); } } } return path; } private static String getLocalRepositoryFromSettings(File file) { XMLStreamReader reader = null; try (InputStream fin = new FileInputStream(file)) { reader = XMLInputFactory.newFactory().createXMLStreamReader(fin); int event; String elementName = null; while ((event = reader.next()) != XMLStreamConstants.END_DOCUMENT) { if (event == XMLStreamConstants.START_ELEMENT) { elementName = reader.getLocalName(); } else if (event == XMLStreamConstants.END_ELEMENT) { elementName = null; } else if (event == XMLStreamConstants.CHARACTERS && "localRepository".equals(elementName)) { return reader.getText().trim(); } } } catch (Exception e) { logger.error("Error retrieving maven configuration", e); } finally { if (reader != null) { try { reader.close(); } catch (XMLStreamException e) { // Ignore } } } return null; } }