/** * 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.camel.component.git; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.git.consumer.GitBranchConsumer; import org.apache.camel.component.git.consumer.GitCommitConsumer; import org.apache.camel.component.git.consumer.GitTagConsumer; import org.apache.camel.component.git.consumer.GitType; import org.apache.camel.component.git.producer.GitProducer; import org.apache.camel.impl.DefaultEndpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; /** * The git component is used for working with git repositories. */ @UriEndpoint(firstVersion = "2.16.0", scheme = "git", title = "Git", syntax = "git:localPath", label = "file") public class GitEndpoint extends DefaultEndpoint { @UriPath @Metadata(required = "true") private String localPath; @UriParam private String branchName; @UriParam private String tagName; @UriParam(enums = "commit,tag,branch", label = "consumer") private GitType type; @UriParam private String username; @UriParam private String password; @UriParam private String remotePath; @UriParam private String remoteName; // Set to true for backward compatibility , better to set to false (native git behavior) @UriParam(defaultValue = "true") @Metadata(label = "producer") private boolean allowEmpty = true; @UriParam(enums = "clone,init,add,remove,commit,commitAll,createBranch,deleteBranch,createTag,deleteTag,status,log,push,pull,showBranches,cherryPick,remoteAdd,remoteList", label = "producer") private String operation; public GitEndpoint(String uri, GitComponent component) { super(uri, component); } @Override public Producer createProducer() throws Exception { return new GitProducer(this); } @Override public Consumer createConsumer(Processor processor) throws Exception { if (type == GitType.COMMIT) { return new GitCommitConsumer(this, processor); } else if (type == GitType.TAG) { return new GitTagConsumer(this, processor); } else if (type == GitType.BRANCH) { return new GitBranchConsumer(this, processor); } else { throw new IllegalArgumentException("Cannot create consumer with type " + type); } } @Override public boolean isSingleton() { return true; } /** * The remote repository path */ public String getRemotePath() { return remotePath; } public void setRemotePath(String remotePath) { this.remotePath = remotePath; } /** * The branch name to work on */ public String getBranchName() { return branchName; } public void setBranchName(String branchName) { this.branchName = branchName; } /** * Remote repository username */ public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } /** * Remote repository password */ public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** * Local repository path */ public String getLocalPath() { return localPath; } public void setLocalPath(String localPath) { this.localPath = localPath; } /** * The operation to do on the repository */ public String getOperation() { return operation; } public void setOperation(String operation) { this.operation = operation; } /** * The consumer type */ public GitType getType() { return type; } public void setType(GitType type) { this.type = type; } /** * The tag name to work on */ public String getTagName() { return tagName; } public void setTagName(String tagName) { this.tagName = tagName; } /** * The remote repository name to use in particular operation like pull */ public String getRemoteName() { return remoteName; } public void setRemoteName(String remoteName) { this.remoteName = remoteName; } /** * The flag to manage empty git commits */ public boolean isAllowEmpty() { return allowEmpty; } public void setAllowEmpty(boolean allowEmpty) { this.allowEmpty = allowEmpty; } }