com.linecorp.centraldogma.client.AbstractCentralDogma Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of centraldogma-client Show documentation
Show all versions of centraldogma-client Show documentation
Highly-available version-controlled service configuration repository based on Git, ZooKeeper and HTTP/2 (centraldogma-client)
/*
* Copyright 2019 LINE Corporation
*
* LINE Corporation 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:
*
* https://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 com.linecorp.centraldogma.client;
import static com.linecorp.centraldogma.internal.PathPatternUtil.toPathPattern;
import static java.util.Objects.requireNonNull;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.function.Function;
import com.linecorp.centraldogma.common.Author;
import com.linecorp.centraldogma.common.Change;
import com.linecorp.centraldogma.common.Commit;
import com.linecorp.centraldogma.common.Entry;
import com.linecorp.centraldogma.common.Markup;
import com.linecorp.centraldogma.common.MergeSource;
import com.linecorp.centraldogma.common.MergedEntry;
import com.linecorp.centraldogma.common.PushResult;
import com.linecorp.centraldogma.common.Query;
import com.linecorp.centraldogma.common.Revision;
/**
* A skeletal {@link CentralDogma} implementation.
*/
public abstract class AbstractCentralDogma implements CentralDogma {
private final ScheduledExecutorService blockingTaskExecutor;
/**
* Creates a new instance.
*
* @param blockingTaskExecutor the {@link ScheduledExecutorService} which will be used for scheduling the
* tasks related with automatic retries and invoking the callbacks for
* watched changes.
*/
protected AbstractCentralDogma(ScheduledExecutorService blockingTaskExecutor) {
this.blockingTaskExecutor = requireNonNull(blockingTaskExecutor, "blockingTaskExecutor");
}
/**
* Returns the {@link ScheduledExecutorService} which is used for scheduling the tasks related with
* automatic retries and invoking the callbacks for watched changes.
*/
protected final ScheduledExecutorService executor() {
return blockingTaskExecutor;
}
@Override
public CentralDogmaRepository forRepo(String projectName, String repositoryName) {
requireNonNull(projectName, "projectName");
requireNonNull(repositoryName, "repositoryName");
return new CentralDogmaRepository(this, projectName, repositoryName, blockingTaskExecutor);
}
@Override
public final CompletableFuture> getFile(
String projectName, String repositoryName, Revision revision, String path) {
return CentralDogma.super.getFile(projectName, repositoryName, revision, path);
}
@Override
public final CompletableFuture> mergeFiles(
String projectName, String repositoryName, Revision revision, MergeSource... mergeSources) {
return CentralDogma.super.mergeFiles(projectName, repositoryName, revision, mergeSources);
}
@Override
public final CompletableFuture> mergeFiles(
String projectName, String repositoryName, Revision revision, Iterable mergeSources) {
return CentralDogma.super.mergeFiles(projectName, repositoryName, revision, mergeSources);
}
@Override
public final CompletableFuture> getHistory(
String projectName, String repositoryName, Revision from, Revision to) {
return CentralDogma.super.getHistory(projectName, repositoryName, from, to);
}
@Override
public final CompletableFuture> getDiff(
String projectName, String repositoryName, Revision from, Revision to, String path) {
return CentralDogma.super.getDiff(projectName, repositoryName, from, to, path);
}
@Override
public final CompletableFuture>> getPreviewDiffs(
String projectName, String repositoryName, Revision baseRevision, Change>... changes) {
return CentralDogma.super.getPreviewDiffs(projectName, repositoryName, baseRevision, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
String summary, Change>... changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision, summary, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
String summary, Iterable extends Change>> changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision, summary, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
String summary, String detail, Markup markup, Change>... changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision,
summary, detail, markup, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
Author author, String summary, Change>... changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision, author, summary, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
Author author, String summary, Iterable extends Change>> changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision, author, summary, changes);
}
@Override
public final CompletableFuture push(
String projectName, String repositoryName, Revision baseRevision,
Author author, String summary, String detail, Markup markup, Change>... changes) {
return CentralDogma.super.push(projectName, repositoryName, baseRevision,
author, summary, detail, markup, changes);
}
@Override
public Watcher fileWatcher(
String projectName, String repositoryName, Query query,
Function super T, ? extends U> function) {
return fileWatcher(projectName, repositoryName, query, function, blockingTaskExecutor);
}
@Override
public Watcher fileWatcher(String projectName, String repositoryName, Query query,
Function super T, ? extends U> function, Executor executor) {
//noinspection unchecked
return (Watcher) forRepo(projectName, repositoryName).watcher(query)
.map(function)
.mapperExecutor(executor)
.start();
}
@Override
public Watcher repositoryWatcher(
String projectName, String repositoryName, String pathPattern,
Function function) {
return repositoryWatcher(projectName, repositoryName, pathPattern, function, blockingTaskExecutor);
}
@Override
public Watcher repositoryWatcher(String projectName, String repositoryName, String pathPattern,
Function function, Executor executor) {
//noinspection unchecked
return (Watcher) forRepo(projectName, repositoryName).watcher(toPathPattern(pathPattern))
.map(function)
.mapperExecutor(executor)
.start();
}
/**
* Normalizes the specified {@link Revision} only if it is a relative revision.
*
* @return the absolute {@link Revision}
*/
protected final CompletableFuture maybeNormalizeRevision(
String projectName, String repositoryName, Revision revision) {
if (revision.isRelative()) {
return normalizeRevision(projectName, repositoryName, revision);
} else {
return CompletableFuture.completedFuture(revision);
}
}
}