118 lines
7.9 KiB
Java
118 lines
7.9 KiB
Java
package gr.cite.annotation.model.builder;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import gr.cite.annotation.authorization.AuthorizationFlags;
|
|
import gr.cite.annotation.common.types.tenantconfiguration.DefaultUserLocaleConfigurationDataContainer;
|
|
import gr.cite.annotation.common.types.tenantconfiguration.EmailClientConfigurationDataContainer;
|
|
import gr.cite.annotation.convention.ConventionService;
|
|
import gr.cite.annotation.data.TenantConfigurationEntity;
|
|
import gr.cite.annotation.model.TenantConfiguration;
|
|
import gr.cite.tools.exception.MyApplicationException;
|
|
import gr.cite.tools.fieldset.FieldSet;
|
|
import gr.cite.tools.logging.DataLogEntry;
|
|
import gr.cite.tools.logging.LoggerService;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.context.annotation.RequestScope;
|
|
|
|
import java.util.*;
|
|
|
|
@Component
|
|
@RequestScope
|
|
public class TenantConfigurationBuilder extends BaseBuilder<TenantConfiguration, TenantConfigurationEntity> {
|
|
|
|
private EnumSet<AuthorizationFlags> authorize = EnumSet.of(AuthorizationFlags.None);
|
|
private final ObjectMapper mapper;
|
|
@Autowired
|
|
public TenantConfigurationBuilder(ConventionService conventionService) {
|
|
super(conventionService, new LoggerService(LoggerFactory.getLogger(TenantConfigurationBuilder.class)));
|
|
this.mapper = new ObjectMapper();
|
|
}
|
|
|
|
public TenantConfigurationBuilder authorize(EnumSet<AuthorizationFlags> values){
|
|
this.authorize = values;
|
|
return this;
|
|
}
|
|
@Override
|
|
public List<TenantConfiguration> build(FieldSet fields, List<TenantConfigurationEntity> data) throws MyApplicationException {
|
|
this.logger.debug("building for {} items requesting {} fields", Optional.ofNullable(data).map(List::size).orElse(0),Optional.ofNullable(fields).map(FieldSet::getFields).map(Set::size) .orElse(0));
|
|
this.logger.trace(new DataLogEntry("requested fields",fields));
|
|
if(fields == null || data == null || fields.isEmpty()) return new ArrayList<>();
|
|
|
|
List<TenantConfiguration> models = new ArrayList<>();
|
|
for(TenantConfigurationEntity d : data){
|
|
TenantConfiguration m = new TenantConfiguration();
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._id))) m.setId(d.getId());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._tenantId))) m.setTenantId(d.getTenantId());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._type))) m.setType(d.getType());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._value))) m.setValue(d.getValue());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._defaultUserLocaleData))) {
|
|
try {
|
|
m.setDefaultUserLocaleData(mapper.readValue(d.getValue(), DefaultUserLocaleConfigurationDataContainer.class));
|
|
|
|
} catch (JsonProcessingException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
if (!fields.extractPrefixed(this.asIndexer(TenantConfiguration._defaultUserLocaleData)).isEmpty()) {
|
|
try {
|
|
DefaultUserLocaleConfigurationDataContainer container = mapper.readValue(d.getValue(), DefaultUserLocaleConfigurationDataContainer.class);
|
|
if (container != null) {
|
|
m.setDefaultUserLocaleData(new DefaultUserLocaleConfigurationDataContainer());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._defaultUserLocaleData, DefaultUserLocaleConfigurationDataContainer.Field.LANGUAGE)))
|
|
m.getDefaultUserLocaleData().setLanguage(container.getLanguage());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._defaultUserLocaleData, DefaultUserLocaleConfigurationDataContainer.Field.TIME_ZONE)))
|
|
m.getDefaultUserLocaleData().setTimeZone(container.getTimeZone());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._defaultUserLocaleData, DefaultUserLocaleConfigurationDataContainer.Field.CULTURE)))
|
|
m.getDefaultUserLocaleData().setCulture(container.getCulture());
|
|
}
|
|
} catch (JsonProcessingException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._emailClientData))) {
|
|
try {
|
|
m.setEmailClientData(mapper.readValue(d.getValue(), EmailClientConfigurationDataContainer.class));
|
|
} catch (JsonProcessingException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
if (!fields.extractPrefixed(this.asIndexer(TenantConfiguration._emailClientData)).isEmpty()) {
|
|
try {
|
|
EmailClientConfigurationDataContainer container = mapper.readValue(d.getValue(), EmailClientConfigurationDataContainer.class);
|
|
if (container != null) {
|
|
m.setEmailClientData(new EmailClientConfigurationDataContainer());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.ENABLE_SSL)))
|
|
m.getEmailClientData().setEnableSSL(container.getEnableSSL());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.REQUIRE_CREDENTIALS)))
|
|
m.getEmailClientData().setRequireCredentials(container.getRequireCredentials());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.HOST_SERVER)))
|
|
m.getEmailClientData().setHostServer(container.getHostServer());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.HOST_PORT_NO)))
|
|
m.getEmailClientData().setHostPortNo(container.getHostPortNo());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.CERTIFICATE_PATH)))
|
|
m.getEmailClientData().setCertificatePath(container.getCertificatePath());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.EMAIL_ADDRESS)))
|
|
m.getEmailClientData().setEmailAddress(container.getEmailAddress());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.EMAIL_USER_NAME)))
|
|
m.getEmailClientData().setEmailUserName(container.getEmailUserName());
|
|
if (fields.hasField(this.asIndexer(TenantConfiguration._emailClientData, EmailClientConfigurationDataContainer.Field.EMAIL_PASSWORD)))
|
|
m.getEmailClientData().setEmailPassword(container.getEmailPassword());
|
|
}
|
|
} catch (JsonProcessingException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._isActive))) m.setIsActive(d.getIsActive());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._createdAt))) m.setCreatedAt(d.getCreatedAt());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._updatedAt))) m.setUpdatedAt(d.getUpdatedAt());
|
|
if(fields.hasField(this.asIndexer(TenantConfiguration._hash))) m.setHash(this.hashValue(d.getUpdatedAt()));
|
|
models.add(m);
|
|
}
|
|
this.logger.debug("build {} items",Optional.of(models).map(List::size).orElse(0));
|
|
return models;
|
|
}
|
|
}
|