KON-616 Als Administrator möchte ich die Stammdaten auf einer Seite konfigurieren können um nicht zwischen verschiedenen Seiten wechseln zu müssen
KON-613 Als Anwender möchte ich, dass Expandables nur so hoch sind wie es aktuell sichtbare Inhalte erforderlich machen, um unnötige Weißflächen zu vermeiden.
KON-680 LDAP-Synchronisationsnotiz in eigenes Feld packen
diff --git a/deploy/db/04_CR_add_syncotes.sql b/deploy/db/04_CR_add_syncotes.sql
new file mode 100644
index 0000000..f8b1120
--- /dev/null
+++ b/deploy/db/04_CR_add_syncotes.sql
@@ -0,0 +1,18 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+
+alter table tbl_internal_person
+ add column SYNC_NOTE character varying(1024),
+ add column IS_SYNC_ERROR boolean;
\ No newline at end of file
diff --git a/deploy/db/oracle/03_CR_add_syncotes.sql b/deploy/db/oracle/03_CR_add_syncotes.sql
new file mode 100644
index 0000000..bf5a4d8
--- /dev/null
+++ b/deploy/db/oracle/03_CR_add_syncotes.sql
@@ -0,0 +1,20 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
+-- *
+-- * See the NOTICE file(s) distributed with this work for additional
+-- * information regarding copyright ownership.
+-- *
+-- * This program and the accompanying materials are made available under the
+-- * terms of the Eclipse Public License v. 2.0 which is available at
+-- * http://www.eclipse.org/legal/epl-2.0.
+-- *
+-- * SPDX-License-Identifier: EPL-2.0
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+
+ALTER TABLE tbl_internal_person
+ADD (
+ SYNC_NOTE VARCHAR2(1024),
+ IS_SYNC_ERROR NUMBER
+);
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java b/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
index 7423ae2..49af9fc 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/TblInternalPerson.java
@@ -41,6 +41,8 @@
private String department;
private String uidIdent;
private String userRef;
+ private String syncNote;
+ private Boolean isSyncError;
@OneToOne
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
index d5c6009..b0ba185 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/AuthNAuthService.java
@@ -83,6 +83,8 @@
boolean attributesChanged = false;
if (keyCloakUserToSync == null) {
tblInternalPerson.setUserRef(null);
+ log.warn("InternalPerson is not synchronized with Portal anymore, most likely the user was removed from the Portal! /n" +
+ " Id: " + tblInternalPerson.getId() + " Firstname: " + tblInternalPerson.getFirstName() + " Lastname: " + tblInternalPerson.getLastName());
attributesChanged = true;
} else {
if (!Objects.equals(tblInternalPerson.getFirstName(), keyCloakUserToSync.getFirstName())
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
index 45feaa4..370116a 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactAnonymizerService.java
@@ -169,7 +169,7 @@
private static String getContactNote() {
return new StringBuilder()
.append("*** [")
- .append(new SimpleDateFormat("yyyy-mm-dd hh:mm:ss").format(Date.from(Instant.now())))
+ .append(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(Date.from(Instant.now())))
.append("] ***")
.toString();
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
index 0bf4e5f..675b403 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/InternalPersonService.java
@@ -109,6 +109,8 @@
existingInternalPerson.setDepartment(internalPersonDto.getDepartment());
existingInternalPerson.setUidIdent(internalPersonDto.getUid());
existingInternalPerson.setUserRef(internalPersonDto.getUserRef());
+ existingInternalPerson.setSyncNote(internalPersonDto.getSyncNote());
+ existingInternalPerson.setIsSyncError(internalPersonDto.getIsSyncError());
setFromInternalPersonDto( existingInternalPerson, internalPersonDto );
internalPersonUpdated = internalPersonRepository.save(existingInternalPerson);
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
index eb91580..ccfe4a8 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
@@ -16,7 +16,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -31,7 +34,7 @@
@Service
public class LdapService {
- @Value("${authnauth-sync.scheduling.enabled}")
+ @Value("${ldap-sync.scheduling.enabled}")
private Boolean ldapEnabled;
@Value("${ldap-sync.attribute-mapping.uid}")
@@ -122,34 +125,35 @@
}
private void findExistingAndNotExistingLdapUsers(List<TblInternalPerson> internalPersonList, List<LdapUser> allFoundLdapUsers, List<TblInternalPerson> allNotExistingLdapUsers) {
+ String now = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(Date.from(Instant.now()));
for (TblInternalPerson tblInternalPerson : internalPersonList) {
String uidTblInternalPerson = tblInternalPerson.getUidIdent();
List<LdapUser> ldapUserByUIDResult = getLdapUserByUID(uidTblInternalPerson);
if(ldapUserByUIDResult.isEmpty()){
- String errorMsg = String.format("[LDAP Sync Error] User with Uid: [ %s ] can not be found in LDAP", uidTblInternalPerson);
- setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+ String syncMsg = String.format("[LDAP Sync Fehler: %s] User mit der Uid: [ %s ] nicht gefunden im LDAP", now, uidTblInternalPerson);
+ setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, syncMsg);
}
else if(ldapUserByUIDResult.size() > 1){
- String errorMsg = String.format("[LDAP Sync Error] More than one result for UID: [ %s ] in LDAP", uidTblInternalPerson);
- setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+ String syncMsg = String.format("[LDAP Sync Fehler: %s] Mehr als ein Eintrag für die Uid: [ %s ] im LDAP", now, uidTblInternalPerson);
+ setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, syncMsg);
}
else {
LdapUser ldapUser = ldapUserByUIDResult.get(0);
+ String syncMsg = String.format("[LDAP Sync Erfolg: %s]", now);
+ tblInternalPerson.setSyncNote(syncMsg);
+ tblInternalPerson.setIsSyncError(false);
allFoundLdapUsers.add(ldapUser);
}
}
}
- private void setNoteAndLogSyncError(List<TblInternalPerson> allNotExistingLdapUsers, TblInternalPerson tblInternalPerson, String errorMsg) {
- log.error(errorMsg);
- String note = tblInternalPerson.getContact().getNote();
- if (note == null) note = "";
- if (!note.contains(errorMsg)) {
- note = note + System.lineSeparator() + errorMsg;
- tblInternalPerson.getContact().setNote(note);
- allNotExistingLdapUsers.add(tblInternalPerson);
- }
+ private void setNoteAndLogSyncError(List<TblInternalPerson> allNotExistingLdapUsers,
+ TblInternalPerson tblInternalPerson, String syncMsg) {
+ log.error(syncMsg);
+ tblInternalPerson.setSyncNote(syncMsg);
+ tblInternalPerson.setIsSyncError(true);
+ allNotExistingLdapUsers.add(tblInternalPerson);
}
private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser, RefCommunicationType refCommunicationTypeMail, RefCommunicationType refCommunicationTypePhone) {
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
index 27969b2..5ff2c38 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/InternalPersonDto.java
@@ -34,6 +34,8 @@
private String department;
private String uid;
private String userRef;
+ private String syncNote;
+ private Boolean isSyncError;
//from Contact
@JsonProperty("contactId")
diff --git a/src/main/resources/application_localdev.yml b/src/main/resources/application_localdev.yml
index 9c1cb64..06e46ff 100644
--- a/src/main/resources/application_localdev.yml
+++ b/src/main/resources/application_localdev.yml
@@ -38,8 +38,8 @@
mail-id: 1
telephone-number-id: 2
scheduling:
- enabled: false
- cron-expression: '*/10 * * * * *'
+ enabled: true
+ cron-expression: '*/20 * * * * *'
authnauth-sync:
attribute-mapping:
diff --git a/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql b/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
index 2b5d3f9..aee5cdd 100644
--- a/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
+++ b/src/main/resources/db/migration/V0_23__CREATE_CBD_DB.sql
@@ -484,6 +484,8 @@
FK_SALUTATION_ID bigint,
FK_REF_PERSON_TYPE_ID bigint,
DEPARTMENT character varying(255),
+ SYNC_NOTE character varying(1024),
+ IS_SYNC_ERROR boolean,
UID_IDENT character varying(255),
USER_REF character varying(255),
FK_CONTACT_ID bigint NOT NULL,
@@ -505,9 +507,9 @@
CREATE UNIQUE INDEX idx_tbl_internal_person_uid ON public.TBL_INTERNAL_PERSON ( UID_IDENT ASC );
CREATE UNIQUE INDEX idx_tbl_internal_person_user_ref ON public.TBL_INTERNAL_PERSON ( USER_REF ASC );
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Pauline', 'Freudenberg', 'B.Sc.', 1, 1,'Abteilung Rechnungsstellung', '66cd78c3-6716-4ab3-b834-a199fc796b88', 'PFREUD', 5);
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Bernhardt', 'Iffland', '', 2, 2,'Kreativ', '4124e4e7-3488-4492-bf39-75e6a23a1c1a', 'BIFFL', 6);
-INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Horatio', 'Hornblower', 'Capt.', 1, 2,'Royal Navy', 'hhornblo', 'HORNB', 13);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Pauline', 'Freudenberg', 'B.Sc.', 1, 1,'Abteilung Rechnungsstellung', '66cd78c3-6716-4ab3-b834-a199fc796b88', null, 5);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Bernhardt', 'Iffland', '', 2, 2,'Kreativ', null, 'BIFFL', 6);
+INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Horatio', 'Hornblower', 'Capt.', 1, 2,'Royal Navy', 'hhornblo', null, 13);
INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID_IDENT, USER_REF, FK_CONTACT_ID) VALUES ( 'Cornelius', 'Buckley', '', 1, 2,'Royal Navy', null, 'BUCKC', 14);
-- ---------------------------------------------
-- TABLE TBL_ASSIGNMENT_MODUL_CONTACT