Files
Umbrella/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java
2026-04-09 09:12:57 +02:00

106 lines
4.8 KiB
Java

/* © SRSoftware 2025 */
package de.srsoftware.umbrella.backend;
import static de.srsoftware.umbrella.core.Util.mapLogLevel;
import static de.srsoftware.umbrella.core.constants.Constants.UMBRELLA;
import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.INFO;
import com.sun.net.httpserver.HttpServer;
import de.srsoftware.configuration.JsonConfig;
import de.srsoftware.tools.ColorLogger;
import de.srsoftware.umbrella.accounting.AccountingModule;
import de.srsoftware.umbrella.bookmarks.BookmarkApi;
import de.srsoftware.umbrella.company.CompanyModule;
import de.srsoftware.umbrella.contact.ContactModule;
import de.srsoftware.umbrella.core.SettingsService;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.documents.DocumentApi;
import de.srsoftware.umbrella.files.FileModule;
import de.srsoftware.umbrella.journal.JournalModule;
import de.srsoftware.umbrella.legacy.*;
import de.srsoftware.umbrella.markdown.MarkdownApi;
import de.srsoftware.umbrella.message.MessageSystem;
import de.srsoftware.umbrella.messagebus.MessageApi;
import de.srsoftware.umbrella.notes.NoteModule;
import de.srsoftware.umbrella.poll.PollModule;
import de.srsoftware.umbrella.project.ProjectModule;
import de.srsoftware.umbrella.stock.StockModule;
import de.srsoftware.umbrella.tags.TagModule;
import de.srsoftware.umbrella.task.TaskModule;
import de.srsoftware.umbrella.time.TimeModule;
import de.srsoftware.umbrella.translations.Translations;
import de.srsoftware.umbrella.user.UserModule;
import de.srsoftware.umbrella.web.WebHandler;
import de.srsoftware.umbrella.wiki.WikiModule;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.json.JSONObject;
public class Application {
private static final System.Logger LOG = System.getLogger("Umbrella");
private static JsonConfig configureLogging(JsonConfig jsonConfig) {
var rootLevel = jsonConfig.get("umbrella.logging.rootLevel", "INFO");
ColorLogger.setRootLogLevel(mapLogLevel(rootLevel));
var loggers = jsonConfig.get("umbrella.logging.loggers").orElse(null);
if (loggers instanceof JSONObject json){
json.keySet().forEach(key -> {
var lvl = mapLogLevel(json.getString(key));
ColorLogger.setLogLevel(key,lvl);
});
}
return jsonConfig;
}
public static void main(String[] args) throws IOException, UmbrellaException {
LOG.log(INFO, "Starting Umbrella:");
var config = configureLogging(new JsonConfig(UMBRELLA));
var port = config.get("umbrella.http.port", 8080);
var threads = config.get("umbrella.threads", 16);
config.get("umbrella.plantuml").map(Object::toString).map(File::new).filter(File::exists).ifPresent(Util::setPlantUmlJar);
var server = HttpServer.create(new InetSocketAddress(port), 0);
try {
new Translations(config).bindPath("/api/translations").on(server);
new JournalModule(config).bindPath("/api/journal").on(server);
new MessageApi().bindPath("/api/bus").on(server);
new MessageSystem(config).bindPath("/api/message").on(server);
new UserModule(config).bindPath("/api/user").on(server);
new TagModule(config).bindPath("/api/tags").on(server);
new BookmarkApi(config).bindPath("/api/bookmark").on(server);
new CompanyModule(config).bindPath("/api/company").on(server);
new CompanyLegacy(config).bindPath("/legacy/company").on(server);
new ContactModule(config).bindPath("/api/contact").on(server);
new DocumentApi(config).bindPath("/api/document").on(server);
new UserLegacy(config).bindPath("/legacy/user").on(server);
new NotesLegacy(config).bindPath("/legacy/notes").on(server);
new MarkdownApi().bindPath("/api/markdown").on(server);
new NoteModule(config).bindPath("/api/notes").on(server);
new StockModule(config).bindPath("/api/stock").on(server);
new PollModule(config).bindPath("/api/poll").on(server);
new ProjectModule(config).bindPath("/api/project").on(server);
new ProjectLegacy(config).bindPath("/legacy/project").on(server);
new TaskModule(config).bindPath("/api/task").on(server);
new TaskLegacy().bindPath("/legacy/task").on(server);
new TimeModule(config).bindPath("/api/time").on(server);
new WebHandler().bindPath("/").on(server);
new WikiModule(config).bindPath("/api/wiki").on(server);
new FileModule(config).bindPath("/api/files").on(server);
new SettingsService(config).bindPath("/api/settings").on(server);
new AccountingModule(config).bindPath("/api/accounting").on(server);
} catch (Exception e) {
LOG.log(ERROR,"Startup failed",e);
System.exit(-1);
}
server.setExecutor(Executors.newFixedThreadPool(threads));
server.start();
LOG.log(INFO,"Started web server at port {0}",port);
}
}