org.apache.james.MemoryJamesConfiguration Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of james-server-memory-app
Show all versions of james-server-memory-app
An advanced email server - Memory backend with guice injection
/****************************************************************
* 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.james;
import java.io.File;
import java.util.Optional;
import org.apache.james.data.UsersRepositoryModuleChooser;
import org.apache.james.filesystem.api.FileSystem;
import org.apache.james.filesystem.api.JamesDirectoriesProvider;
import org.apache.james.server.core.JamesServerResourceLoader;
import org.apache.james.server.core.MissingArgumentException;
import org.apache.james.server.core.configuration.Configuration;
import org.apache.james.server.core.configuration.FileConfigurationProvider;
import org.apache.james.server.core.filesystem.FileSystemImpl;
public class MemoryJamesConfiguration implements Configuration {
public static class Builder {
private Optional rootDirectory;
private Optional configurationPath;
private Optional usersRepositoryImplementation;
private Builder() {
rootDirectory = Optional.empty();
configurationPath = Optional.empty();
usersRepositoryImplementation = Optional.empty();
}
public Builder workingDirectory(String path) {
rootDirectory = Optional.of(path);
return this;
}
public Builder workingDirectory(File file) {
rootDirectory = Optional.of(file.getAbsolutePath());
return this;
}
public Builder useWorkingDirectoryEnvProperty() {
rootDirectory = Optional.ofNullable(System.getProperty(WORKING_DIRECTORY));
if (!rootDirectory.isPresent()) {
throw new MissingArgumentException("Server needs a working.directory env entry");
}
return this;
}
public Builder configurationPath(ConfigurationPath path) {
configurationPath = Optional.of(path);
return this;
}
public Builder configurationFromClasspath() {
configurationPath = Optional.of(new ConfigurationPath(FileSystem.CLASSPATH_PROTOCOL));
return this;
}
public Builder usersRepository(UsersRepositoryModuleChooser.Implementation implementation) {
this.usersRepositoryImplementation = Optional.of(implementation);
return this;
}
public MemoryJamesConfiguration build() {
ConfigurationPath configurationPath = this.configurationPath.orElse(new ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
JamesServerResourceLoader directories = new JamesServerResourceLoader(rootDirectory
.orElseThrow(() -> new MissingArgumentException("Server needs a working.directory env entry")));
FileSystemImpl fileSystem = new FileSystemImpl(directories);
FileConfigurationProvider configurationProvider = new FileConfigurationProvider(fileSystem, Basic.builder()
.configurationPath(configurationPath)
.workingDirectory(directories.getRootDirectory())
.build());
UsersRepositoryModuleChooser.Implementation usersRepositoryChoice = usersRepositoryImplementation.orElseGet(
() -> UsersRepositoryModuleChooser.Implementation.parse(configurationProvider));
return new MemoryJamesConfiguration(
configurationPath,
directories,
usersRepositoryChoice);
}
}
public static Builder builder() {
return new Builder();
}
private final ConfigurationPath configurationPath;
private final JamesDirectoriesProvider directories;
private final UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation;
public MemoryJamesConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation) {
this.configurationPath = configurationPath;
this.directories = directories;
this.usersRepositoryImplementation = usersRepositoryImplementation;
}
@Override
public ConfigurationPath configurationPath() {
return configurationPath;
}
@Override
public JamesDirectoriesProvider directories() {
return directories;
}
public UsersRepositoryModuleChooser.Implementation getUsersRepositoryImplementation() {
return usersRepositoryImplementation;
}
}