Skip to content

Commit 9ee988c

Browse files
committed
Lint
1 parent 994d817 commit 9ee988c

File tree

9 files changed

+82
-37
lines changed

9 files changed

+82
-37
lines changed

src/main/java/org/ligoj/app/plugin/id/dao/IdCacheDaoImpl.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,9 @@ private int persistUsersAndMemberships(final Map<String, UserOrg> users, final M
285285
}
286286

287287
// Remove old users and related membership
288-
deleteOldCacheEntities(CacheUser.class, cacheUsers, users, ids -> {
289-
log.info("Deleting removed cache {} {} entries", CacheMembership.class.getSimpleName(), ids.size());
290-
ListUtils.partition(ids, 1000).forEach(sIds -> em.createQuery("DELETE FROM CacheMembership WHERE user.id in (:ids)")
291-
.setParameter("ids", sIds)
292-
.executeUpdate());
293-
});
288+
deleteOldCacheEntities(CacheUser.class, cacheUsers, users, ids -> deleteBatch(CacheMembership.class, ids, sIds -> em.createQuery("DELETE FROM CacheMembership WHERE user.id in (:ids)")
289+
.setParameter("ids", sIds)
290+
.executeUpdate()));
294291
return memberships;
295292
}
296293

@@ -355,6 +352,11 @@ public void removeUserFromGroup(final UserOrg user, final GroupOrg group) {
355352
.setParameter(GROUP_ATTRIBUTE, group.getId()).setParameter(USER_ATTRIBUTE, user.getId()).executeUpdate();
356353
}
357354

355+
private void deleteBatch(Class<?> cls, List<String> ids, Consumer<List<String>> batchConsumer) {
356+
log.info("Deleting removed cache {} {} entries", cls.getSimpleName(), ids.size());
357+
ListUtils.partition(ids, 1000).forEach(batchConsumer);
358+
}
359+
358360
@Override
359361
@Transactional(Transactional.TxType.REQUIRES_NEW)
360362
public void reset(final Map<String, CompanyOrg> companies, final Map<String, GroupOrg> groups,
@@ -388,17 +390,14 @@ public void reset(final Map<String, CompanyOrg> companies, final Map<String, Gro
388390
em.flush();
389391

390392
// Remove old groups and companies
391-
deleteOldCacheEntities(CacheGroup.class, oldGroups, groups, ids -> {
392-
log.info("Deleting removed cache {} {} entries", CacheProjectGroup.class.getSimpleName(), ids.size());
393-
ListUtils.partition(ids, 1000).forEach(sIds -> {
394-
em.createQuery("DELETE FROM CacheMembership WHERE group.id in (:ids) OR subGroup.id in (:ids)")
395-
.setParameter("ids", sIds)
396-
.executeUpdate();
397-
em.createQuery("DELETE FROM CacheProjectGroup WHERE group.id in (:ids)")
398-
.setParameter("ids", sIds)
399-
.executeUpdate();
400-
});
401-
});
393+
deleteOldCacheEntities(CacheGroup.class, oldGroups, groups, ids -> deleteBatch(CacheProjectGroup.class, ids, sIds -> {
394+
em.createQuery("DELETE FROM CacheMembership WHERE group.id in (:ids) OR subGroup.id in (:ids)")
395+
.setParameter("ids", sIds)
396+
.executeUpdate();
397+
em.createQuery("DELETE FROM CacheProjectGroup WHERE group.id in (:ids)")
398+
.setParameter("ids", sIds)
399+
.executeUpdate();
400+
}));
402401

403402
deleteOldCacheEntities(CacheCompany.class, oldCompanies, companies, null);
404403
em.flush();
@@ -419,8 +418,7 @@ private <T extends Persistable<String>> void deleteOldCacheEntities(final Class<
419418
if (onDelete != null) {
420419
onDelete.accept(idsAsList);
421420
}
422-
log.info("Deleting removed cache {} {} entries", entityClass.getSimpleName(), idsAsList.size());
423-
ListUtils.partition(idsAsList, 1000).forEach(sIds -> em.createQuery("DELETE FROM " + entityClass.getSimpleName() + " WHERE id in (:ids)")
421+
deleteBatch(entityClass, idsAsList, sIds -> em.createQuery("DELETE FROM " + entityClass.getSimpleName() + " WHERE id in (:ids)")
424422
.setParameter("ids", sIds)
425423
.executeUpdate());
426424
}

src/main/java/org/ligoj/app/plugin/id/resource/UserOrgResource.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public TableItem<UserOrgVo> findAll(@QueryParam(SimpleUser.COMPANY_ALIAS) final
165165
final var findAll = findAllNotSecure(visibleGroups, company, group, criteria, uriInfo);
166166

167167
// Apply pagination and secure the users data
168-
final var result = paginationJson.applyPagination(uriInfo, findAll, rawUserOrg -> {
168+
final var result = paginationJson.applyPagination(uriInfo, findAll, rawUserOrg -> {
169169

170170
final var securedUserOrg = new UserOrgVo();
171171
rawUserOrg.copy(securedUserOrg);
@@ -513,7 +513,10 @@ protected boolean canWrite(final DelegateOrg delegate, final String dn, final De
513513
return (delegate.getType() == type || delegate.getType() == DelegateType.TREE) && delegate.isCanWrite() && DnUtils.equalsOrParentOf(delegate.getDn(), dn);
514514
}
515515

516-
private String mapToString(Map<String, String> map) {
516+
/**
517+
* Convert a map to a comparable string with sorted keys.
518+
*/
519+
String mapToString(Map<String, String> map) {
517520
if (map == null) {
518521
return "";
519522
}
@@ -526,7 +529,7 @@ private String mapToString(Map<String, String> map) {
526529
private boolean hasAttributeChange(final UserOrgEditionVo importEntry, final UserOrg userOrg) {
527530
return hasAttributeChange(importEntry, userOrg == null, "new")
528531
|| hasAttributeChange(importEntry, userOrg, SimpleUser::getFirstName, SimpleUser::getLastName, SimpleUser::getCompany, SimpleUser::getLocalId, SimpleUser::getDepartment)
529-
|| hasAttributeChange(importEntry, !mapToString(importEntry.getCustomAttributes()).equals(mapToString(userOrg.getCustomAttributes()) ), "customAttributes")
532+
|| hasAttributeChange(importEntry, !mapToString(importEntry.getCustomAttributes()).equals(mapToString(userOrg.getCustomAttributes())), "customAttributes")
530533
|| hasAttributeChange(importEntry, !userOrg.getMails().contains(importEntry.getMail()), "mail");
531534
}
532535

@@ -543,10 +546,11 @@ private boolean hasAttributeChange(final SimpleUser importEntry, boolean hasChan
543546
@SafeVarargs
544547
private boolean hasAttributeChange(final SimpleUser user1, final SimpleUser user2, final Function<SimpleUser, String>... equals) {
545548
final var predicateFalse = Arrays.stream(equals).filter(f -> !StringUtils.equalsIgnoreCase(StringUtils.trimToNull(f.apply(user2)), StringUtils.trimToNull(f.apply(user1)))).findFirst().orElse(null);
546-
if (predicateFalse != null) {
547-
return hasAttributeChange(user1, true, String.format("'%s' != '%s'", predicateFalse.apply(user1), predicateFalse.apply(user2)));
549+
if (predicateFalse == null) {
550+
return false;
548551
}
549-
return false;
552+
hasAttributeChange(user1, true, String.format("'%s' != '%s'", predicateFalse.apply(user1), predicateFalse.apply(user2)));
553+
return true;
550554
}
551555

552556
/**

src/main/resources/META-INF/resources/webjars/id/container-scope/container-scope.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ <h4 id="modal-title">{{container-scope}}</h4>
6868
</div>
6969
<div class="modal-footer">
7070
<input type="submit" class="btn btn-primary btn-raised" id="confirmCreate" value="{{save}}" data-loading-text="{{save}} ..." data-complete-text="{{save}}" />
71-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">
71+
<button type="button" class="btn btn-link" data-dismiss="modal">
7272
{{cancel}}
7373
</button>
7474
</div>

src/main/resources/META-INF/resources/webjars/id/container/container.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ <h4 class="modal-title" id="import-modal-title">{{upload-new}}</h4>
112112
</div>
113113
<div class="modal-footer">
114114
<input type="submit" class="btn btn-primary btn-raised" id="csv-upload" data-loading-text="{{upload-new}}..." value="{{upload-new}}" data-complete-text="{{upload-new}}">
115-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">
115+
<button type="button" class="btn btn-link" data-dismiss="modal">
116116
{{cancel}}
117117
</button>
118118
</div>

src/main/resources/META-INF/resources/webjars/id/delegate/delegate.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ <h4 id="modal-title">{{delegate}}</h4>
124124
</div>
125125
<div class="modal-footer">
126126
<input type="submit" class="btn btn-primary btn-raised" id="confirmCreate" value="{{save}}" data-loading-text="{{save}} ..." data-complete-text="{{save}}" />
127-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">
127+
<button type="button" class="btn btn-link" data-dismiss="modal">
128128
{{cancel}}
129129
</button>
130130
</div>

src/main/resources/META-INF/resources/webjars/id/home/home.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ <h4 class="modal-title" id="modal-title">{{user}}</h4>
127127
</label>
128128
</div>
129129
<input type="submit" class="btn btn-primary btn-raised" id="confirmCreate" value="{{save}}" data-loading-text="{{save}} ..." data-complete-text="{{save}}">
130-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">
130+
<button type="button" class="btn btn-link" data-dismiss="modal">
131131
{{cancel}}
132132
</button>
133133
</div>
@@ -223,7 +223,7 @@ <h4 class="modal-title" id="import-modal-title">{{upload-new}}</h4>
223223
</div>
224224
<div class="modal-footer">
225225
<input type="submit" class="btn btn-primary btn-raised" id="csv-upload" data-loading-text="{{upload-new}}..." value="{{upload-new}}" data-complete-text="{{upload-new}}">
226-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">
226+
<button type="button" class="btn btn-link" data-dismiss="modal">
227227
{{cancel}}
228228
</button>
229229
</div>

src/main/resources/META-INF/resources/webjars/id/home/home.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ define(function () {
6161
current.$main.newSelect2Company('#search-company');
6262
}
6363
if (parameters) {
64-
let $lastInput = null;
6564
parameters.split('/').forEach(p => {
6665
let kv = p.split('=');
6766
// Group/company filtering
@@ -243,10 +242,12 @@ define(function () {
243242
ajax: function(aoData, oSettings) {
244243
const company = $('#search-company').select2('data');
245244
const group = $('#search-group').select2('data');
245+
let url = null;
246246
if (company || group) {
247247
url = REST_PATH + 'service/id/user?' + (company ? 'company=' + (company.id || company) : '') + ((company && group) ? '&' : '') + (group ? 'group=' + (group.id || group) : '');
248+
} else {
249+
url = REST_PATH + 'service/id/user';
248250
}
249-
url = REST_PATH + 'service/id/user';
250251
oSettings.ajax.callback = function (json, callback){
251252
current.extensions = json?.extensions;
252253
callback(json);

src/main/resources/META-INF/resources/webjars/id/id.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ <h4 class="modal-title" id="modal-title">{{agreement}}</h4>
4141
</div>
4242
<div class="modal-footer">
4343
<input type="submit" class="btn btn-primary btn-raised" value="{{save}}" data-loading-text="{{save}} ..." data-complete-text="{{save}}" />
44-
<button type="button" class="btn btn-link" data-dismiss="modal" aria-hidden="true">{{cancel}}</button>
44+
<button type="button" class="btn btn-link" data-dismiss="modal">{{cancel}}</button>
4545
</div>
4646
</div>
4747
</div>

src/test/java/org/ligoj/app/plugin/id/resource/UserOrgResourceTest.java

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
package org.ligoj.app.plugin.id.resource;
55

66
import jakarta.transaction.Transactional;
7+
import jakarta.ws.rs.PathParam;
78
import jakarta.ws.rs.core.UriInfo;
89
import org.apache.commons.lang3.ArrayUtils;
10+
import org.apache.commons.lang3.reflect.FieldUtils;
911
import org.junit.jupiter.api.Assertions;
1012
import org.junit.jupiter.api.BeforeEach;
1113
import org.junit.jupiter.api.Test;
@@ -24,6 +26,9 @@
2426
import org.ligoj.bootstrap.model.system.SystemRole;
2527
import org.ligoj.bootstrap.model.system.SystemRoleAssignment;
2628
import org.ligoj.bootstrap.model.system.SystemUser;
29+
import org.ligoj.bootstrap.resource.system.configuration.ConfigurationResource;
30+
import org.ligoj.bootstrap.resource.system.session.ApplicationSettings;
31+
import org.ligoj.bootstrap.resource.system.session.SessionSettings;
2732
import org.mockito.ArgumentMatchers;
2833
import org.mockito.Mockito;
2934
import org.mockito.internal.verification.VerificationModeFactory;
@@ -199,8 +204,8 @@ void findAllFilteredNonVisibleGroup() {
199204
Assertions.assertTrue(userVo.isCanWriteGroups());
200205
}
201206

202-
private <U extends SimpleUser> U getTestUser(final String user, List<U> result) {
203-
return result.stream().filter(u->user.equals(u.getId())).findFirst().orElse(null);
207+
private <U extends SimpleUser> U getTestUser(final String user, List<U> result) {
208+
return result.stream().filter(u -> user.equals(u.getId())).findFirst().orElse(null);
204209
}
205210

206211
@Test
@@ -1132,9 +1137,9 @@ void canWriteSameTypeNoRight() {
11321137
void canWrite() {
11331138
final var delegate = new DelegateOrg();
11341139
delegate.setType(DelegateType.GROUP);
1135-
delegate.setDn("rightdn");
1140+
delegate.setDn("right_dn");
11361141
delegate.setCanWrite(true);
1137-
Assertions.assertTrue(resource.canWrite(delegate, "rightdn", DelegateType.GROUP));
1142+
Assertions.assertTrue(resource.canWrite(delegate, "right_dn", DelegateType.GROUP));
11381143
}
11391144

11401145
/**
@@ -1157,4 +1162,41 @@ void canWriteAsReader() {
11571162
Assertions.assertFalse(resource.canWrite(delegate, "right-dn", DelegateType.GROUP));
11581163
}
11591164

1165+
@Test
1166+
void mapToString() {
1167+
Assertions.assertEquals("", resource.mapToString(new HashMap<>()));
1168+
Assertions.assertEquals("", resource.mapToString(null));
1169+
Assertions.assertEquals("a=VAb=VB", resource.mapToString(Map.of("b", "VB", "a", "VA")));
1170+
}
1171+
1172+
@Test
1173+
void decorate() throws IllegalAccessException {
1174+
decorate(new UserOrgResource() {
1175+
public UserOrg findById(@PathParam("user") final String user) {
1176+
return new UserOrg();
1177+
}
1178+
});
1179+
}
1180+
1181+
private void decorate(UserOrgResource resource) throws IllegalAccessException {
1182+
var settings = new SessionSettings();
1183+
FieldUtils.writeDeclaredField(settings, "userName", "JUNIT", true);
1184+
FieldUtils.writeDeclaredField(settings, "applicationSettings", new ApplicationSettings(), true);
1185+
settings.setUserSettings(new HashMap<>());
1186+
var configuration = Mockito.mock(ConfigurationResource.class);
1187+
Mockito.when(configuration.get("service:id:user-display")).thenReturn("some");
1188+
FieldUtils.writeField(resource, "configuration", configuration, true);
1189+
resource.decorate(settings);
1190+
Assertions.assertEquals("some", settings.getApplicationSettings().getData().get("service:id:user-display"));
1191+
}
1192+
1193+
@Test
1194+
void decorateError() throws IllegalAccessException {
1195+
decorate(new UserOrgResource() {
1196+
public UserOrg findById(@PathParam("user") final String user) {
1197+
throw new ValidationJsonException();
1198+
}
1199+
});
1200+
}
1201+
11601202
}

0 commit comments

Comments
 (0)