diff --git a/annotation-service/annotation-web/pom.xml b/annotation-service/annotation-web/pom.xml index 729d1ce10..9e2b1e0f0 100644 --- a/annotation-service/annotation-web/pom.xml +++ b/annotation-service/annotation-web/pom.xml @@ -65,7 +65,7 @@ gr.cite cache - 2.1.0 + 2.2.0 gr.cite diff --git a/annotation-service/annotation-web/src/main/java/gr/cite/annotation/web/interceptors/UserInterceptor.java b/annotation-service/annotation-web/src/main/java/gr/cite/annotation/web/interceptors/UserInterceptor.java index 918705a1d..33b21485a 100644 --- a/annotation-service/annotation-web/src/main/java/gr/cite/annotation/web/interceptors/UserInterceptor.java +++ b/annotation-service/annotation-web/src/main/java/gr/cite/annotation/web/interceptors/UserInterceptor.java @@ -31,11 +31,8 @@ public class UserInterceptor implements WebRequestInterceptor { private final UserScope userScope; private final ClaimExtractor claimExtractor; private final CurrentPrincipalResolver currentPrincipalResolver; - private final PlatformTransactionManager transactionManager; private final UserInterceptorCacheService userInterceptorCacheService; - private final JsonHandlingService jsonHandlingService; private final QueryFactory queryFactory; - private final LockByKeyManager lockByKeyManager; @PersistenceContext public EntityManager entityManager; @@ -44,19 +41,13 @@ public class UserInterceptor implements WebRequestInterceptor { UserScope userScope, ClaimExtractor claimExtractor, CurrentPrincipalResolver currentPrincipalResolver, - PlatformTransactionManager transactionManager, UserInterceptorCacheService userInterceptorCacheService, - JsonHandlingService jsonHandlingService, - QueryFactory queryFactory, - LockByKeyManager lockByKeyManager) { + QueryFactory queryFactory) { this.userScope = userScope; this.currentPrincipalResolver = currentPrincipalResolver; this.claimExtractor = claimExtractor; - this.transactionManager = transactionManager; this.userInterceptorCacheService = userInterceptorCacheService; - this.jsonHandlingService = jsonHandlingService; this.queryFactory = queryFactory; - this.lockByKeyManager = lockByKeyManager; } @Override diff --git a/annotation-service/annotation-web/src/main/resources/config/application.yml b/annotation-service/annotation-web/src/main/resources/config/application.yml index fd750fd10..8ed82b873 100644 --- a/annotation-service/annotation-web/src/main/resources/config/application.yml +++ b/annotation-service/annotation-web/src/main/resources/config/application.yml @@ -14,7 +14,5 @@ spring: optional:classpath:config/tenant.yml[.yml], optional:classpath:config/tenant-${spring.profiles.active}.yml[.yml], optional:file:../config/tenant-${spring.profiles.active}.yml[.yml], optional:classpath:config/locale.yml[.yml], optional:classpath:config/locale-${spring.profiles.active}.yml[.yml], optional:file:../config/locale-${spring.profiles.active}.yml[.yml], optional:classpath:config/cors.yml[.yml], optional:classpath:config/cors-${spring.profiles.active}.yml[.yml], optional:file:../config/cors-${spring.profiles.active}.yml[.yml], - optional:classpath:config/email.yml[.yml], optional:classpath:config/email-${spring.profiles.active}.yml[.yml], optional:file:../config/email-${spring.profiles.active}.yml[.yml], optional:classpath:config/queue.yml[.yml], optional:classpath:config/queue-${spring.profiles.active}.yml[.yml], optional:file:../config/queue-${spring.profiles.active}.yml[.yml], - optional:classpath:config/cipher.yml[.yml], optional:classpath:config/cipher-${spring.profiles.active}.yml[.yml], optional:file:../config/cipher-${spring.profiles.active}.yml[.yml], - optional:classpath:config/formatting.yml[.yml], optional:classpath:config/formatting-${spring.profiles.active}.yml[.yml], optional:file:../config/formatting-${spring.profiles.active}.yml[.yml] + optional:classpath:config/cipher.yml[.yml], optional:classpath:config/cipher-${spring.profiles.active}.yml[.yml], optional:file:../config/cipher-${spring.profiles.active}.yml[.yml] diff --git a/annotation-service/annotation-web/src/main/resources/config/cache.yml b/annotation-service/annotation-web/src/main/resources/config/cache.yml index 5b30dee77..c49b230c5 100644 --- a/annotation-service/annotation-web/src/main/resources/config/cache.yml +++ b/annotation-service/annotation-web/src/main/resources/config/cache.yml @@ -7,53 +7,32 @@ cache: initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ tenantByCode ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ tenantById ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ userBySubjectId ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 5 - expireAfterAccessMinutes: 5 - refreshAfterWriteMinutes: 5 + expireAfterWriteSeconds: 320 - names: [ userAccessTenant ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 5 - expireAfterAccessMinutes: 5 - refreshAfterWriteMinutes: 5 - - names: [ formattingUserProfile ] - allowNullValues: true - initialCapacity: 100 - maximumSize: 500 - enableRecordStats: false - expireAfterWriteMinutes: 1 - expireAfterAccessMinutes: 1 - refreshAfterWriteMinutes: 1 + expireAfterWriteSeconds: 320 mapCaches: - - names: [ cacheB ] - allowNullValues: true - storeByValue: true apiKey: name: apikey keyPattern: resolve_$keyhash$:v0 @@ -69,9 +48,3 @@ cache: userAllowedTenant: name: userAccessTenant keyPattern: user_access_tenant_$user_id$_$tenant_id$:v0 - formattingUserProfileCache: - name: formattingUserProfile - keyPattern: formatting_user_profile$user_id$:v0 - template: - name: template - key-pattern: ------ diff --git a/annotation-service/annotation-web/src/main/resources/config/db-devel.yml b/annotation-service/annotation-web/src/main/resources/config/db-devel.yml index 22a089fbd..e5299bb04 100644 --- a/annotation-service/annotation-web/src/main/resources/config/db-devel.yml +++ b/annotation-service/annotation-web/src/main/resources/config/db-devel.yml @@ -1,7 +1,10 @@ spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 jpa: show-sql: true properties: hibernate: - show_sql: true - format_sql: false + format_sql: false \ No newline at end of file diff --git a/annotation-service/annotation-web/src/main/resources/config/db.yml b/annotation-service/annotation-web/src/main/resources/config/db.yml index 12f21a0f9..d8c511a44 100644 --- a/annotation-service/annotation-web/src/main/resources/config/db.yml +++ b/annotation-service/annotation-web/src/main/resources/config/db.yml @@ -1,7 +1,11 @@ spring: jpa: properties: + org: + hibernate: + flushMode: MANUAL hibernate: + globally_quoted_identifiers: true ddl-auto: validate dialect: org.hibernate.dialect.PostgreSQLDialect hibernate: @@ -16,7 +20,7 @@ spring: hikari: connection-timeout: 30000 minimum-idle: 3 - maximum-pool-size: 5 + maximum-pool-size: 10 idle-timeout: 600000 max-lifetime: 1800000 diff --git a/annotation-service/annotation-web/src/main/resources/config/email.yml b/annotation-service/annotation-web/src/main/resources/config/email.yml deleted file mode 100644 index fb7c94ba0..000000000 --- a/annotation-service/annotation-web/src/main/resources/config/email.yml +++ /dev/null @@ -1,14 +0,0 @@ -spring: - mail: - host: ${MAIL_HOST:} - port: ${MAIL_PORT:} - username: ${MAIL_USERNAME:} - password: ${MAIL_PASSWORD:} - properties: - mail: - smtp: - auth: ${MAIL_AUTH:} - starttls: - enable: ${MAIL_TLS:} -email: - address: ${MAIL_ADDRESS:} \ No newline at end of file diff --git a/annotation-service/annotation-web/src/main/resources/config/formatting.yml b/annotation-service/annotation-web/src/main/resources/config/formatting.yml deleted file mode 100644 index abdc31184..000000000 --- a/annotation-service/annotation-web/src/main/resources/config/formatting.yml +++ /dev/null @@ -1,6 +0,0 @@ -formatting: - options: - integer-format: "%,d" - decimal-digits-round: 2 - decimal-format: "#0.00" - date-time-format: "YYYY-MM-dd'T'HH:mm:ss" diff --git a/annotation-service/annotation-web/src/main/resources/config/idpclaims.yml b/annotation-service/annotation-web/src/main/resources/config/idpclaims.yml index 3372e4ca7..97ff4a10e 100644 --- a/annotation-service/annotation-web/src/main/resources/config/idpclaims.yml +++ b/annotation-service/annotation-web/src/main/resources/config/idpclaims.yml @@ -37,3 +37,5 @@ idpclient: - type: azp Authorities: - type: authorities + ExternalProviderName: + - type: identity_provider \ No newline at end of file diff --git a/annotation-service/annotation-web/src/main/resources/config/permissions.yml b/annotation-service/annotation-web/src/main/resources/config/permissions.yml index 59115ee60..7b7fb2ed1 100644 --- a/annotation-service/annotation-web/src/main/resources/config/permissions.yml +++ b/annotation-service/annotation-web/src/main/resources/config/permissions.yml @@ -5,26 +5,26 @@ permissions: # Tenants BrowseTenant: roles: - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false EditTenant: roles: - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false DeleteTenant: roles: - - ic-sti-superuser + - Admin claims: [ ] clients: [ ] allowAnonymous: false allowAuthenticated: false AllowNoTenant: roles: - - ic-sti-superuser + - Admin claims: [ ] clients: [ ] allowAnonymous: false @@ -32,21 +32,19 @@ permissions: # Users BrowseUser: roles: - - ic-sti-superuser - - tenantadmin + - Admin clients: [ ] allowAnonymous: true allowAuthenticated: false EditUser: roles: - - admin - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false DeleteUser: roles: - - ic-sti-superuser + - Admin claims: [ ] clients: [ ] allowAnonymous: false @@ -54,20 +52,19 @@ permissions: # UserContactInfo BrowseUserContactInfo: roles: - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: true allowAuthenticated: false EditUserContactInfo: roles: - - ic-sti-superuser - - user + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false DeleteUserContactInfo: roles: - - ic-sti-superuser + - Admin claims: [ ] clients: [ ] allowAnonymous: false @@ -94,13 +91,13 @@ permissions: #Tenant Configuration BrowseTenantConfiguration: roles: - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false EditTenantConfiguration: roles: - - ic-sti-superuser + - Admin clients: [ ] allowAnonymous: false allowAuthenticated: false diff --git a/annotation-service/annotation-web/src/main/resources/config/security-devel.yml b/annotation-service/annotation-web/src/main/resources/config/security-devel.yml new file mode 100644 index 000000000..7692e66d9 --- /dev/null +++ b/annotation-service/annotation-web/src/main/resources/config/security-devel.yml @@ -0,0 +1,6 @@ +web: + security: + idp: + resource: + jwt: + audiences: [ "dmp_annotation" ] \ No newline at end of file diff --git a/annotation-service/annotation-web/src/main/resources/config/security.yml b/annotation-service/annotation-web/src/main/resources/config/security.yml index 3024921aa..8f41034ac 100644 --- a/annotation-service/annotation-web/src/main/resources/config/security.yml +++ b/annotation-service/annotation-web/src/main/resources/config/security.yml @@ -2,19 +2,13 @@ web: security: enabled: true authorized-endpoints: [ api ] - allowed-endpoints: [ public, dataset, master-item, test ] + allowed-endpoints: [ public ] idp: api-key: - enabled: true - authorization-header: Authorization - client-id: ${IDP_APIKEY_CLIENT_ID} - client-secret: ${IDP_APIKEY_CLIENT_SECRET} - scope: ${IDP_APIKEY_SCOPE} + enabled: false resource: - token-type: JWT - opaque: - client-id: ${IDP_OPAQUE_CLIENT_ID} - client-secret: ${IDP_OPAQUE_CLIENT_SECRET} + token-type: JWT #| opaque jwt: claims: [ role, x-role ] - issuer-uri: ${IDP_ISSUER_URI:} \ No newline at end of file + issuer-uri: ${IDP_ISSUER_URI} + validIssuer: ${IDP_ISSUER_URI} \ No newline at end of file diff --git a/annotation-service/annotation-web/src/main/resources/config/server.yml b/annotation-service/annotation-web/src/main/resources/config/server.yml index bc9a15d9f..9a4a97cbc 100644 --- a/annotation-service/annotation-web/src/main/resources/config/server.yml +++ b/annotation-service/annotation-web/src/main/resources/config/server.yml @@ -1,3 +1,13 @@ server: port: ${WEB_PORT} - forward-headers-strategy: NONE \ No newline at end of file + forward-headers-strategy: NONE + tomcat: + threads: + max: 20 + max-connections: 10000 + + spring: + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB \ No newline at end of file diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/cache/FormattingUserprofileCacheCacheService.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/cache/FormattingUserprofileCacheCacheService.java deleted file mode 100644 index 346050a47..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/cache/FormattingUserprofileCacheCacheService.java +++ /dev/null @@ -1,93 +0,0 @@ -package gr.cite.annotation.cache; - -import gr.cite.annotation.config.formatting.FormattingUserprofileCacheOptions; -import gr.cite.annotation.event.UserTouchedEvent; -import gr.cite.tools.cache.CacheService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Locale; -import java.util.UUID; - -@Service -public class FormattingUserprofileCacheCacheService extends CacheService { - - public static class UserFormattingProfileCacheValue { - - public UserFormattingProfileCacheValue() { - } - - public UserFormattingProfileCacheValue(UUID userId, String zone, String culture, String language) { - this.userId = userId; - this.zone = zone; - this.culture = culture; - this.language = language; - } - - private UUID userId; - private String zone; - private String culture; - private String language; - - public String getZone() { - return zone; - } - - public void setZone(String zone) { - this.zone = zone; - } - - public String getCulture() { - return culture; - } - - public void setCulture(String culture) { - this.culture = culture; - } - - public String getLanguage() { - return language; - } - - public void setLanguage(String language) { - this.language = language; - } - - public UUID getUserId() { - return userId; - } - - public void setUserId(UUID userId) { - this.userId = userId; - } - } - - @Autowired - public FormattingUserprofileCacheCacheService(FormattingUserprofileCacheOptions options) { - super(options); - } - - @EventListener - public void handleUserTouchedEvent(UserTouchedEvent event) { - if (event.getUserId() != null) this.evict(this.buildKey(event.getUserId())); - } - - @Override - protected Class valueClass() { - return UserFormattingProfileCacheValue.class; - } - - @Override - public String keyOf(UserFormattingProfileCacheValue value) { - return this.buildKey(value.getUserId()); - } - - - public String buildKey(UUID userId) { - return this.generateKey(new HashMap<>() {{ - put("$user_id$", userId.toString().toLowerCase(Locale.ROOT)); - }}); - } -} diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailConfig.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailConfig.java deleted file mode 100644 index acb6a8b79..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package gr.cite.annotation.config.email; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(EmailProperties.class) -public class EmailConfig { -} diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailProperties.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailProperties.java deleted file mode 100644 index 65e80a319..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/email/EmailProperties.java +++ /dev/null @@ -1,17 +0,0 @@ -package gr.cite.annotation.config.email; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties(prefix = "email") -public class EmailProperties { - - private final String address; - - public EmailProperties(String address) { - this.address = address; - } - - public String getAddress() { - return address; - } -} diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceConfiguration.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceConfiguration.java deleted file mode 100644 index 20b43545f..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package gr.cite.annotation.config.formatting; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(FormattingServiceProperties.class) -public class FormattingServiceConfiguration { -} diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceProperties.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceProperties.java deleted file mode 100644 index e9427a2c6..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingServiceProperties.java +++ /dev/null @@ -1,38 +0,0 @@ -package gr.cite.annotation.config.formatting; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties(prefix = "formatting.options") -public class FormattingServiceProperties { - - private final String integerFormat; - - private final String decimalFormat; - - private final String dateTimeFormat; - - private final Integer decimalDigitsRound; - - public FormattingServiceProperties(String integerFormat, String decimalFormat, String dateTimeFormat, Integer decimalDigitsRound) { - this.integerFormat = integerFormat; - this.decimalFormat = decimalFormat; - this.dateTimeFormat = dateTimeFormat; - this.decimalDigitsRound = decimalDigitsRound; - } - - public String getIntegerFormat() { - return integerFormat; - } - - public String getDecimalFormat() { - return decimalFormat; - } - - public String getDateTimeFormat() { - return dateTimeFormat; - } - - public Integer getDecimalDigitsRound() { - return decimalDigitsRound; - } -} \ No newline at end of file diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingUserprofileCacheOptions.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingUserprofileCacheOptions.java deleted file mode 100644 index 7c473bfeb..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/config/formatting/FormattingUserprofileCacheOptions.java +++ /dev/null @@ -1,10 +0,0 @@ -package gr.cite.annotation.config.formatting; - -import gr.cite.tools.cache.CacheOptions; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ConfigurationProperties(prefix = "cache.formatting-user-profile-cache") -public class FormattingUserprofileCacheOptions extends CacheOptions { -} diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingService.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingService.java deleted file mode 100644 index da1b8646f..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingService.java +++ /dev/null @@ -1,26 +0,0 @@ -package gr.cite.annotation.service.formatting; - -import java.time.Instant; -import java.util.Locale; -import java.util.TimeZone; -import java.util.UUID; - -public interface FormattingService { - - String format(int value, UUID userId, String format, Locale locale); - - String format(int value, String format, Locale locale); - - String format(long value, UUID userId, String format, Locale locale); - - String format(long value, String format, Locale locale); - - String format(double value, UUID userId, Integer decimals, String format, Locale locale); - - String format(double value, Integer decimals, String format, Locale locale); - - String format(Instant value, UUID userId, TimeZone timezone, String format, Locale locale); - - String format(Instant value, TimeZone timeZone, String format, Locale locale); -} - diff --git a/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingServiceImpl.java b/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingServiceImpl.java deleted file mode 100644 index 5229e52e4..000000000 --- a/annotation-service/annotation/src/main/java/gr/cite/annotation/service/formatting/FormattingServiceImpl.java +++ /dev/null @@ -1,171 +0,0 @@ -package gr.cite.annotation.service.formatting; - -import gr.cite.annotation.cache.FormattingUserprofileCacheCacheService; -import gr.cite.annotation.config.formatting.FormattingServiceProperties; -import gr.cite.annotation.convention.ConventionService; -import gr.cite.annotation.locale.LocaleService; -import gr.cite.tools.data.query.QueryFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.context.annotation.RequestScope; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.NumberFormat; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import java.time.format.FormatStyle; -import java.util.Locale; -import java.util.TimeZone; -import java.util.UUID; - -@Component -@RequestScope -public class FormattingServiceImpl implements FormattingService { - - private final QueryFactory queryFactory; - private final ConventionService conventionService; - private final LocaleService localeService; - private final FormattingServiceProperties properties; - private final FormattingUserprofileCacheCacheService formattingUserprofileCacheCacheService; - - @Autowired - public FormattingServiceImpl(QueryFactory queryFactory, - ConventionService conventionService, - LocaleService localeService, - FormattingServiceProperties properties, - FormattingUserprofileCacheCacheService formattingUserprofileCacheCacheService - ) { - this.queryFactory = queryFactory; - this.conventionService = conventionService; - this.localeService = localeService; - this.properties = properties; - this.formattingUserprofileCacheCacheService = formattingUserprofileCacheCacheService; - } - - public String format(int value, UUID userId, String format, Locale locale) { - return this.formatNonDecimal(value, userId, format, locale); - } - - private String formatNonDecimal(Number value,UUID userId, String format, Locale locale) { - Locale localeToUse = this.localeService.culture(); - if (locale != null) { - localeToUse = locale; - } else if (userId != null) { - FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue profile = this.getUserProfile(userId); - if (profile != null) { - localeToUse = this.localeService.cultureSafe(profile.getCulture()); - } - } - - String formatToUse = !this.conventionService.isNullOrEmpty(format) ? format : this.properties.getIntegerFormat(); - return this.formatNonDecimal(value, formatToUse, localeToUse); - } - - public String format(int value, String format, Locale locale) { - return this.formatNonDecimal(value, format, locale); - } - - private String formatNonDecimal(Number value, String format, Locale locale) { - if (this.conventionService.isNullOrEmpty(format) && locale != null) return NumberFormat.getInstance(locale).format(value); - else if (!this.conventionService.isNullOrEmpty(format) && locale == null) return String.format(format, value); - else if (!this.conventionService.isNullOrEmpty(format) && locale != null) return String.format(locale, format, value); - - return NumberFormat.getInstance(Locale.ROOT).format(value); - } - - public String format(long value, UUID userId, String format, Locale locale) { - return this.formatNonDecimal(value, userId, format, locale); - } - - public String format(long value, String format, Locale locale) { - return this.formatNonDecimal(value, format, locale); - } - - public String format(double value, UUID userId, Integer decimals, String format, Locale locale) { - Locale localeToUse = this.localeService.culture(); - if (locale != null) { - localeToUse = locale; - } else if (userId != null) { - FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue profile = this.getUserProfile(userId); - if (profile != null) { - localeToUse = this.localeService.cultureSafe(profile.getCulture()); - } - } - - String formatToUse = !this.conventionService.isNullOrEmpty(format) ? format : this.properties.getDecimalFormat(); - int decimalsToUse = decimals != null ? decimals : this.properties.getDecimalDigitsRound(); - return this.format(value, decimalsToUse, formatToUse, localeToUse); - } - - public String format(double value, Integer decimals, String format, Locale locale) { - double val = value; - if (decimals != null) { - BigDecimal bd = new BigDecimal(Double.toString(value)); - bd = bd.setScale(decimals, RoundingMode.HALF_UP); - val = bd.doubleValue(); - } - - if (this.conventionService.isNullOrEmpty(format) && locale != null) return NumberFormat.getInstance(locale).format(val); - else if (!this.conventionService.isNullOrEmpty(format) && locale == null) return new DecimalFormat(format).format(val); - else if (!this.conventionService.isNullOrEmpty(format) && locale != null) return new DecimalFormat(format, new DecimalFormatSymbols(locale)).format(val); - - return NumberFormat.getInstance(Locale.ROOT).format(val); - } - - public String format(Instant value, UUID userId, TimeZone timezone, String format, Locale locale) { - FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue profile = null; - if (userId != null && (locale == null || timezone == null)) { - profile = this.getUserProfile(userId); - } - - Locale localeToUse = this.localeService.culture(); - if (locale != null) { - localeToUse = locale; - } else if (userId != null) { - localeToUse = this.localeService.cultureSafe(profile.getCulture()); - } - - TimeZone timezoneToUse = this.localeService.timezone(); - if (timezone != null) { - timezoneToUse = timezone; - } else if (userId != null) { - timezoneToUse = this.localeService.timezoneSafe(profile.getZone()); - } - - String formatToUse = !this.conventionService.isNullOrEmpty(format) ? format : this.properties.getDateTimeFormat(); - return this.format(value, timezoneToUse, formatToUse, localeToUse); - } - - public String format(Instant value, TimeZone timeZone, String format, Locale locale) { - ZoneId zoneId = ZoneId.from(ZoneOffset.UTC); - - if (timeZone != null) { - zoneId = timeZone.toZoneId(); - } - if (this.conventionService.isNullOrEmpty(format) && locale != null) DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM).withLocale(locale).withZone(zoneId).format(value); - else if (!this.conventionService.isNullOrEmpty(format) && locale == null) return DateTimeFormatter.ofPattern(format).withZone(zoneId).format(value); - else if (!this.conventionService.isNullOrEmpty(format) && locale != null) return DateTimeFormatter.ofPattern(format, locale).withZone(zoneId).format(value); - - return DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM).withZone(zoneId).format(value); - } - - private FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue getUserProfile(UUID userId) { - FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue cacheValue = this.formattingUserprofileCacheCacheService.lookup(this.formattingUserprofileCacheCacheService.buildKey(userId)); - if (cacheValue != null) { - return cacheValue; - } else { -// UserEntity user = this.queryFactory.query(UserQuery.class).ids(userId).firstAs(new BaseFieldSet().ensure(User._culture).ensure(User._language).ensure(User._timezone).ensure(User._id)); -// if (user == null) return null; -// cacheValue = new FormattingUserprofileCacheCacheService.UserFormattingProfileCacheValue(userId, user.getTimezone(), user.getCulture(), user.getLanguage()); -// this.formattingUserprofileCacheCacheService.put(cacheValue); - - return cacheValue; - } - } -} - diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 200ef159d..f8049f2c1 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -333,7 +333,7 @@ gr.cite cache - 2.1.0 + 2.2.0 diff --git a/dmp-backend/web/src/main/resources/config/cache.yml b/dmp-backend/web/src/main/resources/config/cache.yml index 8fbdce800..bb670773b 100644 --- a/dmp-backend/web/src/main/resources/config/cache.yml +++ b/dmp-backend/web/src/main/resources/config/cache.yml @@ -5,67 +5,51 @@ cache: - names: [ "userBySubjectId" ] allowNullValues: true initialCapacity: 100 - maximumSize: 500 + maximumSize: 5000 enableRecordStats: false - expireAfterWriteMinutes: 1 - expireAfterAccessMinutes: 1 - refreshAfterWriteMinutes: 1 + expireAfterWriteSeconds: 20 - names: [ "supportiveMaterial" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ "Reference" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ "depositConfigById" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ "affiliation" ] allowNullValues: true initialCapacity: 100 - maximumSize: 500 + maximumSize: 5000 enableRecordStats: false - expireAfterWriteMinutes: 1 - expireAfterAccessMinutes: 1 - refreshAfterWriteMinutes: 1 + expireAfterWriteSeconds: 20 - names: [ "dashboardStatisticsByUserId" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 1 - expireAfterAccessMinutes: 1 - refreshAfterWriteMinutes: 1 + expireAfterWriteSeconds: 30 - names: [ "transformer" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 600 - names: [ "tokenExchangeKey" ] allowNullValues: true initialCapacity: 100 maximumSize: 500 enableRecordStats: false - expireAfterWriteMinutes: 10 - expireAfterAccessMinutes: 10 - refreshAfterWriteMinutes: 10 + expireAfterWriteSeconds: 60 mapCaches: userBySubjectId: name: userBySubjectId diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html index c80edb200..5c35bdd72 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html @@ -24,8 +24,8 @@
- - + +
{{'GENERAL.ACTIONS.NO-MORE-AVAILABLE' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts index c39e08b43..496612988 100644 --- a/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.ts @@ -22,6 +22,8 @@ import { ReferenceType } from '@app/core/model/reference-type/reference-type'; import { DmpStatus } from '@app/core/common/enum/dmp-status'; import { DescriptionStatus } from '@app/core/common/enum/description-status'; import { IsActive } from '@app/core/common/enum/is-active.enum'; +import { AppPermission } from '@app/core/common/enum/permission.enum'; +import { DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint'; @Component({ selector: 'app-drafts', @@ -135,10 +137,22 @@ export class DraftsComponent extends BaseComponent implements OnInit { [nameof(x => x.dmp), nameof(x => x.groupId)].join('.'), [nameof(x => x.dmp), nameof(x => x.updatedAt)].join('.'), [nameof(x => x.dmp), nameof(x => x.isActive)].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.CreateNewVersionDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.DeleteDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.CloneDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.FinalizeDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.ExportDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.InviteDmpUsers].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.AssignDmpUsers].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.EditDmp].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.label)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.status)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.isActive)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.id)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.label)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.id)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.label)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.user.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.role)].join('.'), @@ -154,12 +168,19 @@ export class DraftsComponent extends BaseComponent implements OnInit { [nameof(x => x.description), nameof(x => x.status)].join('.'), [nameof(x => x.description), nameof(x => x.updatedAt)].join('.'), [nameof(x => x.description), nameof(x => x.isActive)].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.EditDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.DeleteDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.InviteDmpUsers].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.groupId)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.accessType)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.label)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.user.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.role)].join('.'), diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html index a2d00d6f9..66343068a 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.html @@ -26,8 +26,8 @@
- - + +
{{'GENERAL.ACTIONS.NO-MORE-AVAILABLE' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts index 3fe14e807..240bed9d1 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-activity/recent-edited-activity.component.ts @@ -5,10 +5,12 @@ import { ActivatedRoute, Router } from '@angular/router'; import { DescriptionStatus } from '@app/core/common/enum/description-status'; import { DmpStatus } from '@app/core/common/enum/dmp-status'; import { IsActive } from '@app/core/common/enum/is-active.enum'; +import { AppPermission } from '@app/core/common/enum/permission.enum'; import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { RecentActivityItem } from '@app/core/model/dashboard/recent-activity-item'; import { DescriptionTemplate } from '@app/core/model/description-template/description-template'; import { Description } from '@app/core/model/description/description'; +import { DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint'; import { Dmp, DmpUser } from '@app/core/model/dmp/dmp'; import { DmpReference } from '@app/core/model/dmp/dmp-reference'; import { ReferenceType } from '@app/core/model/reference-type/reference-type'; @@ -134,10 +136,22 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn [nameof(x => x.dmp), nameof(x => x.groupId)].join('.'), [nameof(x => x.dmp), nameof(x => x.updatedAt)].join('.'), [nameof(x => x.dmp), nameof(x => x.isActive)].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.CreateNewVersionDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.DeleteDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.CloneDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.FinalizeDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.ExportDmp].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.InviteDmpUsers].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.AssignDmpUsers].join('.'), + [nameof(x => x.dmp), nameof(x => x.authorizationFlags), AppPermission.EditDmp].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.label)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.status)].join('.'), [nameof(x => x.dmp), nameof(x => x.descriptions), nameof(x => x.isActive)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.id)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.label)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.id)].join('.'), + [nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.label)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.user.id)].join('.'), [nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.role)].join('.'), @@ -153,12 +167,19 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn [nameof(x => x.description), nameof(x => x.status)].join('.'), [nameof(x => x.description), nameof(x => x.updatedAt)].join('.'), [nameof(x => x.description), nameof(x => x.isActive)].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.EditDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.DeleteDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.InviteDmpUsers].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.groupId)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.accessType)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.label)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.user.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.role)].join('.'), diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.html index 27d97e860..62c190f78 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.html @@ -24,7 +24,7 @@
- +
{{'GENERAL.ACTIONS.NO-MORE-AVAILABLE' | translate}} diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.ts b/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.ts index 2899bda5d..f1f569041 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-description-activity/recent-edited-description-activity.component.ts @@ -19,6 +19,8 @@ import { BaseComponent } from '@common/base/base.component'; import { debounceTime, takeUntil } from 'rxjs/operators'; import { nameof } from 'ts-simple-nameof'; import { DescriptionStatus } from '@app/core/common/enum/description-status'; +import { AppPermission } from '@app/core/common/enum/permission.enum'; +import { DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionSection } from '@app/core/model/dmp-blueprint/dmp-blueprint'; @Component({ selector: 'app-recent-edited-description-activity', @@ -129,12 +131,19 @@ export class RecentEditedDescriptionActivityComponent extends BaseComponent impl [nameof(x => x.description), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.status)].join('.'), [nameof(x => x.description), nameof(x => x.updatedAt)].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.EditDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.DeleteDescription].join('.'), + [nameof(x => x.description), nameof(x => x.authorizationFlags), AppPermission.InviteDmpUsers].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.descriptionTemplate), nameof(x => x.groupId)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.accessType)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.label)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.id)].join('.'), + [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.blueprint), nameof(x => x.definition), nameof(x => x.sections), nameof(x => x.label)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.user.id)].join('.'), [nameof(x => x.description), nameof(x => x.dmp), nameof(x => x.dmpUsers), nameof(x => x.role)].join('.'), diff --git a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html index 1690310d3..169d2f49d 100644 --- a/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html +++ b/dmp-frontend/src/app/ui/dashboard/recent-edited-dmp-activity/recent-edited-dmp-activity.component.html @@ -24,7 +24,7 @@
- +