/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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.guvnor.ala.source.git.executor; import java.net.URI; import java.util.Collections; import java.util.HashMap; import java.util.Optional; import javax.inject.Inject; import org.guvnor.ala.config.Config; import org.guvnor.ala.pipeline.FunctionConfigExecutor; import org.guvnor.ala.registry.SourceRegistry; import org.guvnor.ala.source.Source; import org.guvnor.ala.source.git.GitRepository; import org.guvnor.ala.source.git.UFLocal; import org.guvnor.ala.source.git.config.GitConfig; import org.uberfire.java.nio.file.FileSystems; import static org.uberfire.commons.validation.PortablePreconditions.*; public class GitConfigExecutor implements FunctionConfigExecutor<GitConfig, Source> { private final SourceRegistry sourceRegistry; @Inject public GitConfigExecutor(final SourceRegistry sourceRegistry) { this.sourceRegistry = sourceRegistry; } @Override public Optional<Source> apply(final GitConfig gitConfig) { checkNotEmpty("repo-name parameter is mandatory", gitConfig.getRepoName()); if (Boolean.parseBoolean(gitConfig.getCreateRepo())) { final URI uri = URI.create("git://" + gitConfig.getRepoName()); FileSystems.newFileSystem(uri, new HashMap<String, Object>() { { if (gitConfig.getOrigin() != null && !gitConfig.getOrigin().isEmpty()) { put("origin", gitConfig.getOrigin()); } else { put("init", Boolean.TRUE); } if (gitConfig.getOutPath() != null && !gitConfig.getOutPath().isEmpty()) { put("out-dir", gitConfig.getOutPath()); } } }); } else { final URI uri = URI.create("git://" + gitConfig.getRepoName() + "?sync"); try { FileSystems.getFileSystem(uri); } catch (Exception ex) { // The repo might not support sync, because it doesn't have an origin, we should move forward for now. } } final GitRepository gitRepository = (GitRepository) new UFLocal().getRepository(gitConfig.getRepoName(), Collections.emptyMap()); final Optional<Source> source_ = Optional.ofNullable(gitRepository.getSource((gitConfig.getBranch() != null && !gitConfig.getBranch().isEmpty()) ? gitConfig.getBranch() : "master")); if (source_.isPresent()) { Source source = source_.get(); sourceRegistry.registerRepositorySources(source.getPath(), gitRepository); sourceRegistry.registerSource(gitRepository, source); } return source_; } @Override public Class<? extends Config> executeFor() { return GitConfig.class; } @Override public String outputId() { return "source"; } @Override public String inputId() { return "git-config"; } }