blob: ce5d9db0c9de1e0cbfaf6f6f4a6ec532e32c8a07 [file] [log] [blame]
/*
* 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.cauldron.bld.ivy;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.cauldron.bld.config.IRepositoryConfig;
import org.cauldron.sigil.repository.AbstractRepositoryManager;
import org.cauldron.sigil.repository.IBundleRepository;
import org.cauldron.sigil.repository.IRepositoryProvider;
public class BldRepositoryManager extends AbstractRepositoryManager {
private static Map<String, String> aliases = new HashMap<String, String>();
static {
aliases.put("filesystem", "org.cauldron.bld.core.repository.FileSystemRepositoryProvider");
aliases.put("obr", "org.cauldron.bld.obr.OBRRepositoryProvider");
aliases.put("project", "org.cauldron.bld.ivy.ProjectRepositoryProvider");
aliases.put("system", "org.cauldron.bld.core.repository.SystemRepositoryProvider");
};
private Map<String, Properties> repos;
public BldRepositoryManager(Map<String, Properties> repos) {
this.repos = repos;
}
@Override
protected void loadRepositories() {
for (String name : repos.keySet()) {
Properties repo = repos.get(name);
String alias = repo.getProperty(IRepositoryConfig.REPOSITORY_PROVIDER);
if (alias == null) {
Log.error("provider not specified for repository: " + name);
continue;
}
String provider = (aliases.containsKey(alias) ? aliases.get(alias) : alias);
if (alias.equals("obr")) {
// cache is directory where synchronized bundles are stored;
// not needed in ivy.
repo.setProperty("cache", "/no-cache");
if (!repo.containsKey("index")) {
// index is created as copy of url
File indexFile = new File(System.getProperty("java.io.tmpdir"), "obr-index-" + name);
indexFile.deleteOnExit();
repo.setProperty("index", indexFile.getAbsolutePath());
}
}
int level = Integer.parseInt(repo.getProperty(IRepositoryConfig.REPOSITORY_LEVEL,
IBundleRepository.NORMAL_PRIORITY + ""));
try {
IRepositoryProvider instance = (IRepositoryProvider) (Class.forName(provider).newInstance());
IBundleRepository repository = instance.createRepository(name, repo);
addRepository(repository, level);
Log.verbose("added repository: " + repository);
} catch (Exception e) {
throw new Error("createRepository() failed: " + repo + " : " + e, e);
}
}
}
}