blob: 83adcccda0f0afb98c59a05eeb6ddcea348bd09a [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// 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 com.googlesource.gerrit.plugins.messageoftheday;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.base.MoreObjects;
import com.google.common.base.Strings;
import com.google.gerrit.extensions.annotations.PluginData;
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.systemstatus.MessageOfTheDay;
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.eclipse.jgit.lib.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
class MessageOfTheDayImpl extends MessageOfTheDay {
private static final Logger log = LoggerFactory.getLogger(MessageOfTheDayImpl.class);
private final File data;
private final String id;
private final String startsAt;
private final String expiresAt;
private final String msg;
@Inject
public MessageOfTheDayImpl(
PluginConfigFactory configFactory, @PluginName String myName, @PluginData File data) {
this.data = data;
Config cfg = configFactory.getGlobalPluginConfig(myName);
id = cfg.getString("message", null, "id");
String configuredStartsAt = Strings.emptyToNull(cfg.getString("message", null, "startsAt"));
startsAt = MoreObjects.firstNonNull(configuredStartsAt, now());
expiresAt = cfg.getString("message", null, "expiresAt");
msg = message();
}
@Override
public String getHtmlMessage() {
if (Strings.isNullOrEmpty(id)) {
return null;
}
if (Strings.isNullOrEmpty(expiresAt)) {
log.warn("expiresAt not defined, no message will be shown");
return null;
}
if (now().compareTo(startsAt) < 0 || now().compareTo(expiresAt) > 0) {
return null;
}
return msg;
}
@Override
public String getMessageId() {
return id;
}
private String message() {
if (Strings.isNullOrEmpty(id)) {
return null;
}
Path p = new File(data, id + ".html").toPath();
try {
return new String(Files.readAllBytes(p), UTF_8);
} catch (IOException e) {
log.warn("Couldn't read content of the mesage with id = " + id, e);
return null;
}
}
private static String now() {
return new SimpleDateFormat("yyyyMMdd:HHmm").format(new Date());
}
}