/*
* Copyright (C) 2014 Toshiaki Maki <makingx@gmail.com>
*
* 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 jqiita;
import java.util.concurrent.ConcurrentHashMap;
public class Qiita {
private static final String DEFAULT_HOST = "https://qiita.com";
private static final String DEFAULT_LOG_LEVEL = "NONE";
private static final ConcurrentHashMap<String, QiitaClient> clientCache = new ConcurrentHashMap<>();
private static final ConfiguredAccessToken configuredAccessToken = new ConfiguredAccessToken();
public static QiitaClient client() {
String accessToken = configuredAccessToken.getToken();
return clientCache.computeIfAbsent(accessToken, key -> new QiitaClient(DEFAULT_HOST, accessToken, DEFAULT_LOG_LEVEL));
}
public static QiitaClientBuilder given() {
return new QiitaClientBuilder();
}
public static class QiitaClientBuilder {
private String accessToken = configuredAccessToken.getToken();
private String host = DEFAULT_HOST;
private String logLevel = DEFAULT_LOG_LEVEL;
public QiitaClient client() {
return clientCache.computeIfAbsent(accessToken, key -> new QiitaClient(host, accessToken, logLevel));
}
public QiitaClientBuilder accessToken(String accessToken) {
this.accessToken = accessToken;
return this;
}
public QiitaClientBuilder host(String host) {
this.host = host;
return this;
}
public LogLevelBuilder log() {
return new LogLevelBuilder(this);
}
}
public static class LogLevelBuilder {
private final QiitaClientBuilder clientBuilder;
LogLevelBuilder(QiitaClientBuilder clientBuilder) {
this.clientBuilder = clientBuilder;
}
public QiitaClientBuilder none() {
clientBuilder.logLevel = "NONE";
return clientBuilder;
}
public QiitaClientBuilder basic() {
clientBuilder.logLevel = "BASIC";
return clientBuilder;
}
public QiitaClientBuilder all() {
clientBuilder.logLevel = "FULL";
return clientBuilder;
}
}
}