/**
* 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;
}
}