From 7729666b2cf76521e53f89f7253bb763ee207927 Mon Sep 17 00:00:00 2001 From: kate Date: Thu, 28 Feb 2019 18:41:18 +0100 Subject: [PATCH 01/12] fix for MID-5088 (accounts column in the popup) --- .../api/component/AbstractPopupTabPanel.java | 15 +++++++ .../component/data/column/ColumnUtils.java | 44 ++++++++++--------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java index ccdd3045d59..bb6e833cb79 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractPopupTabPanel.java @@ -21,8 +21,10 @@ import com.evolveum.midpoint.prism.query.OrFilter; import com.evolveum.midpoint.prism.query.RefFilter; import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.web.component.data.column.ColumnUtils; import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; @@ -30,6 +32,7 @@ import org.apache.commons.lang.ArrayUtils; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; @@ -37,6 +40,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; /** @@ -74,6 +78,17 @@ true, getPageBase()) { private static final long serialVersionUID = 1L; + @Override + protected List, String>> createColumns() { + if (AbstractRoleType.class.isAssignableFrom(getType())){ + List, String>> columns = new ArrayList<>(); + columns.addAll((Collection)ColumnUtils.getDefaultAbstractRoleColumns(false)); + return columns; + } else { + return super.createColumns(); + } + } + @Override protected void onUpdateCheckbox(AjaxRequestTarget target, IModel> rowModel) { onSelectionPerformed(target, rowModel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java index 947bfbc3d92..61eb4f3d90e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/column/ColumnUtils.java @@ -342,7 +342,7 @@ public static List, String>> ge List, String>> columns = new ArrayList<>(); - columns.addAll((Collection)getDefaultAbstractRoleColumns(RoleType.COMPLEX_TYPE)); + columns.addAll((Collection)getDefaultAbstractRoleColumns(true)); return columns; } @@ -350,7 +350,7 @@ public static List, String>> ge public static List, String>> getDefaultServiceColumns() { List, String>> columns = new ArrayList<>(); - columns.addAll((Collection)getDefaultAbstractRoleColumns(ServiceType.COMPLEX_TYPE)); + columns.addAll((Collection)getDefaultAbstractRoleColumns(true)); return columns; } @@ -358,12 +358,12 @@ public static List, String>> ge public static List, String>> getDefaultOrgColumns() { List, String>> columns = new ArrayList<>(); - columns.addAll((Collection)getDefaultAbstractRoleColumns(OrgType.COMPLEX_TYPE)); + columns.addAll((Collection)getDefaultAbstractRoleColumns(true)); return columns; } - private static List, String>> getDefaultAbstractRoleColumns(QName type) { + public static List, String>> getDefaultAbstractRoleColumns(boolean showAccounts) { String sortByDisplayName = null; String sortByIdentifer = null; @@ -381,28 +381,30 @@ private static List, Stri ); List, String>> columns = createColumns(columnsDefs); - - IColumn, String> column = new AbstractExportableColumn, String>( - createStringResource("pageUsers.accounts")) { - @Override - public void populateItem(Item>> cellItem, - String componentId, IModel> model) { - cellItem.add(new Label(componentId, - model.getObject().getValue() != null ? - model.getObject().getValue().getLinkRef().size() : null)); - } + if (showAccounts) { + IColumn, String> column = new AbstractExportableColumn, String>( + createStringResource("pageUsers.accounts")) { - @Override - public IModel getDataModel(IModel> rowModel) { - return Model.of(rowModel.getObject().getValue() != null ? - Integer.toString(rowModel.getObject().getValue().getLinkRef().size()) : ""); - } + @Override + public void populateItem(Item>> cellItem, + String componentId, IModel> model) { + cellItem.add(new Label(componentId, + model.getObject().getValue() != null ? + model.getObject().getValue().getLinkRef().size() : null)); + } + @Override + public IModel getDataModel(IModel> rowModel) { + return Model.of(rowModel.getObject().getValue() != null ? + Integer.toString(rowModel.getObject().getValue().getLinkRef().size()) : ""); + } - }; - columns.add(column); + }; + + columns.add(column); + } return columns; } From 6b27f218a545d1d3731ee35b080191dca50ead52 Mon Sep 17 00:00:00 2001 From: kate Date: Fri, 1 Mar 2019 09:02:08 +0100 Subject: [PATCH 02/12] assignment holder types list for org members panel --- .../MultiTypesMemberPopupTabPanel.java | 2 +- .../gui/api/util/WebComponentUtil.java | 36 +++++++++++++++++++ .../admin/users/component/OrgMemberPanel.java | 3 +- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.java index 68a7ea5dc0f..7157adc55f1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.java @@ -92,7 +92,7 @@ protected ObjectDelta prepareDelta(){ } protected List getSupportedTypesList(){ - List supportedTypes = new ArrayList<>(Arrays.asList(ObjectTypes.values())); + List supportedTypes = WebComponentUtil.createAssignmentHolderTypesList(); supportedTypes.remove(ObjectTypes.USER); supportedTypes.remove(ObjectTypes.ROLE); supportedTypes.remove(ObjectTypes.SERVICE); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index 86f00f42920..1d120e00970 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -687,6 +687,42 @@ public static List createObjectTypeList() { } + public static List createAssignmentHolderTypeQnamesList() { + + List objectTypes = createAssignmentHolderTypesList(); + List types = new ArrayList<>(); + objectTypes.forEach(objectType -> { + types.add(objectType.getTypeQName()); + }); + + return types.stream().sorted((type1, type2) -> { + Validate.notNull(type1); + Validate.notNull(type2); + + return String.CASE_INSENSITIVE_ORDER.compare(QNameUtil.qNameToUri(type1), QNameUtil.qNameToUri(type2)); + + + }).collect(Collectors.toList()); + + } + + public static List createAssignmentHolderTypesList(){ + List objectTypes = new ArrayList<>(); + for (ObjectTypes t : ObjectTypes.values()) { + if (AssignmentHolderType.class.isAssignableFrom(t.getClassDefinition())) { + objectTypes.add(t); + } + } + return objectTypes.stream().sorted((type1, type2) -> { + Validate.notNull(type1); + Validate.notNull(type2); + + return String.CASE_INSENSITIVE_ORDER.compare(QNameUtil.qNameToUri(type1.getTypeQName()), QNameUtil.qNameToUri(type2.getTypeQName())); + + + }).collect(Collectors.toList()); + } + // TODO: move to schema component public static List createFocusTypeList() { return createFocusTypeList(false); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index 0491550d63a..df0ccabb986 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -112,9 +112,10 @@ protected void unassignMembersPerformed(QName objectType, QueryScope scope, Coll @Override protected List getSupportedObjectTypes(boolean includeAbstractTypes) { - List objectTypes = WebComponentUtil.createObjectTypeList(); + List objectTypes = WebComponentUtil.createAssignmentHolderTypeQnamesList(); objectTypes.remove(ShadowType.COMPLEX_TYPE); objectTypes.remove(ObjectType.COMPLEX_TYPE); + objectTypes.remove(AssignmentHolderType.COMPLEX_TYPE); return objectTypes; } From 0ddbf58c873830400ec89b8afa945758a44252fa Mon Sep 17 00:00:00 2001 From: skublik Date: Fri, 1 Mar 2019 12:31:05 +0100 Subject: [PATCH 03/12] increase number of users --- ...stractInitializedModelIntegrationTest.java | 2 +- .../intest/security/AbstractSecurityTest.java | 3 +- .../intest/sync/AbstractInboundSyncTest.java | 38 +++++++++---------- .../AbstractSynchronizationStoryTest.java | 6 +-- .../intest/sync/TestInboundLiveSyncTask.java | 4 +- .../src/test/resources/common/user-will.xml | 1 - 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/AbstractInitializedModelIntegrationTest.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/AbstractInitializedModelIntegrationTest.java index c0662faa1b0..ca3d0ce0500 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/AbstractInitializedModelIntegrationTest.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/AbstractInitializedModelIntegrationTest.java @@ -68,7 +68,7 @@ public class AbstractInitializedModelIntegrationTest extends AbstractConfiguredM protected static final Trace LOGGER = TraceManager.getTrace(AbstractInitializedModelIntegrationTest.class); - private static final int NUMBER_OF_IMPORTED_USERS = 4; + private static final int NUMBER_OF_IMPORTED_USERS = 5; private static final int NUMBER_OF_IMPORTED_ROLES = 16; @Autowired protected MappingFactory mappingFactory; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/security/AbstractSecurityTest.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/security/AbstractSecurityTest.java index 6561647db3f..4203790587e 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/security/AbstractSecurityTest.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/security/AbstractSecurityTest.java @@ -369,7 +369,7 @@ public abstract class AbstractSecurityTest extends AbstractInitializedModelInteg protected static final XMLGregorianCalendar JACK_VALID_FROM_LONG_AGO = XmlTypeConverter.createXMLGregorianCalendar(10000L); protected static final XMLGregorianCalendar JACK_VALID_TO_LONG_AGEAD = XmlTypeConverter.createXMLGregorianCalendar(10000000000000L); - protected static final int NUMBER_OF_ALL_USERS = 11; + protected static final int NUMBER_OF_ALL_USERS = 12; protected static final int NUMBER_OF_IMPORTED_ROLES = 69; protected static final int NUMBER_OF_ALL_ORGS = 11; @@ -604,6 +604,7 @@ protected void cleanupAutzTest(String userOid, int expectedAssignments) throws O cleanupDelete(UserType.class, USER_RAPP_OID, task, result); cleanupDelete(UserType.class, USER_MANCOMB_OID, task, result); cleanupDelete(UserType.class, USER_CAPSIZE_OID, task, result); + cleanupDelete(UserType.class, USER_WILL_OID, task, result); cleanupAdd(USER_LARGO_FILE, task, result); cleanupAdd(USER_LECHUCK_FILE, task, result); cleanupAdd(USER_ESTEVAN_FILE, task, result); diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractInboundSyncTest.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractInboundSyncTest.java index ebafe4bba35..5ff8757ef35 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractInboundSyncTest.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractInboundSyncTest.java @@ -69,7 +69,7 @@ public abstract class AbstractInboundSyncTest extends AbstractInitializedModelIn protected static final Date ACCOUNT_MANCOMB_VALID_TO_DATE = MiscUtil.asDate(2066, 5, 4, 3, 2, 1); protected static final String ACCOUNT_POSIXUSER_DUMMY_USERNAME = "posixuser"; - + protected static String userWallyOid; protected boolean allwaysCheckTimestamp = false; @@ -131,7 +131,7 @@ public void test110AddDummyEmeraldAccountMancomb() throws Exception { prepareNotifications(); // Preconditions - assertUsers(5); + assertUsers(6); DummyAccount account = new DummyAccount(ACCOUNT_MANCOMB_DUMMY_USERNAME); account.setEnabled(true); @@ -171,7 +171,7 @@ public void test110AddDummyEmeraldAccountMancomb() throws Exception { assertLinked(userMancomb, accountMancomb); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -189,7 +189,7 @@ public void test120ModifyDummyEmeraldAccountMancombSeepbad() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -226,7 +226,7 @@ public void test120ModifyDummyEmeraldAccountMancombSeepbad() throws Exception { PrismAsserts.assertPropertyValue(userAfter, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Mancomb Seepbad")); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -244,7 +244,7 @@ public void test122ModifyDummyEmeraldAccountMancombSeepNULL() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -281,7 +281,7 @@ public void test122ModifyDummyEmeraldAccountMancombSeepNULL() throws Exception { PrismAsserts.assertNoItem(userAfter, UserType.F_FULL_NAME); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -299,7 +299,7 @@ public void test124ModifyDummyEmeraldAccountMancombSeepevil() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -336,7 +336,7 @@ public void test124ModifyDummyEmeraldAccountMancombSeepevil() throws Exception { PrismAsserts.assertPropertyValue(userAfter, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Mancomb Seepevil")); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -354,7 +354,7 @@ public void test126ModifyDummyEmeraldAccountMancombTitlePirate() throws Exceptio prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -392,7 +392,7 @@ public void test126ModifyDummyEmeraldAccountMancombTitlePirate() throws Exceptio PrismAsserts.assertPropertyValue(userAfter, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Mancomb Seepevil")); PrismAsserts.assertPropertyValue(userAfter, UserType.F_TITLE, PrismTestUtil.createPolyString("Pirate")); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -410,7 +410,7 @@ public void test127ModifyDummyEmeraldAccountMancombTitlePirateNull() throws Exce prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -448,7 +448,7 @@ public void test127ModifyDummyEmeraldAccountMancombTitlePirateNull() throws Exce PrismAsserts.assertPropertyValue(userAfter, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Mancomb Seepevil")); PrismAsserts.assertNoItem(userAfter, UserType.F_TITLE); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -466,7 +466,7 @@ public void test129ModifyDummyEmeraldAccountMancombSeepgood() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_MANCOMB_DUMMY_USERNAME); @@ -503,7 +503,7 @@ public void test129ModifyDummyEmeraldAccountMancombSeepgood() throws Exception { PrismAsserts.assertPropertyValue(userAfter, UserType.F_FULL_NAME, PrismTestUtil.createPolyString("Mancomb Seepgood")); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); @@ -531,7 +531,7 @@ public void test300AddDummyEmeraldAccountPosixUser() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); DummyAccount account = new DummyAccount(ACCOUNT_POSIXUSER_DUMMY_USERNAME); account.setEnabled(true); @@ -567,7 +567,7 @@ public void test300AddDummyEmeraldAccountPosixUser() throws Exception { assertAdministrativeStatusEnabled(userPosixUser); assertLinked(userPosixUser, accountPosixUser); - assertUsers(7); + assertUsers(8); // notifications notificationManager.setDisabled(true); @@ -589,7 +589,7 @@ public void test310ModifyDummyEmeraldAccountPosixUserUidNumber() throws Exceptio prepareNotifications(); // Preconditions - assertUsers(7); + assertUsers(8); DummyAccount account = dummyResourceEmerald.getAccountByUsername(ACCOUNT_POSIXUSER_DUMMY_USERNAME); @@ -620,7 +620,7 @@ public void test310ModifyDummyEmeraldAccountPosixUserUidNumber() throws Exceptio assertLinked(userAfter, accountAfter); - assertUsers(7); + assertUsers(8); // notifications notificationManager.setDisabled(true); diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractSynchronizationStoryTest.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractSynchronizationStoryTest.java index 6408971c8ee..0f1c041a9ff 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractSynchronizationStoryTest.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/AbstractSynchronizationStoryTest.java @@ -143,7 +143,7 @@ public void test110AddDummyGreenAccountMancomb() throws Exception { prepareNotifications(); // Preconditions - assertUsers(5); + assertUsers(6); DummyAccount account = new DummyAccount(ACCOUNT_MANCOMB_DUMMY_USERNAME); account.setEnabled(true); @@ -181,7 +181,7 @@ public void test110AddDummyGreenAccountMancomb() throws Exception { assertLinked(userMancomb, accountMancomb); - assertUsers(6); + assertUsers(7); // notifications displayAllNotifications(); @@ -251,7 +251,7 @@ public void test210AddDummyGreenAccountWally() throws Exception { assertUser(userWally, userWallyOid, ACCOUNT_WALLY_DUMMY_USERNAME, "Wally Feed", null, null); assertLinks(userWally, 1); - assertUsers(7); + assertUsers(8); assertLinked(userWally, accountWallyGreen); diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestInboundLiveSyncTask.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestInboundLiveSyncTask.java index 1fcb198d0e5..88424156f38 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestInboundLiveSyncTask.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestInboundLiveSyncTask.java @@ -80,7 +80,7 @@ public void test199DeleteDummyEmeraldAccountMancomb() throws Exception { prepareNotifications(); // Preconditions - assertUsers(6); + assertUsers(7); /// WHEN displayWhen(TEST_NAME); @@ -112,7 +112,7 @@ public void test199DeleteDummyEmeraldAccountMancomb() throws Exception { assertNoDummyAccount(ACCOUNT_MANCOMB_DUMMY_USERNAME); - assertUsers(6); + assertUsers(7); // notifications notificationManager.setDisabled(true); diff --git a/model/model-intest/src/test/resources/common/user-will.xml b/model/model-intest/src/test/resources/common/user-will.xml index d2c309a1a6a..c552243300a 100644 --- a/model/model-intest/src/test/resources/common/user-will.xml +++ b/model/model-intest/src/test/resources/common/user-will.xml @@ -24,7 +24,6 @@ xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3"> will - PIRATE Will Turner From 7a09c56d2723ea525fdc3e7a1c978b96afa41922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Fri, 1 Mar 2019 12:40:25 +0100 Subject: [PATCH 04/12] Translation, WIP --- .../localization/Midpoint_cs.properties | 6 +- .../localization/Midpoint_fr.properties | 64 +++++++++---------- .../localization/Midpoint_it.properties | 6 +- .../localization/Midpoint_ja.properties | 26 ++++---- .../localization/Midpoint_pl.properties | 2 +- .../localization/schema_fr.properties | 18 +++--- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties index 989560c5347..0b97954ddab 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties @@ -3456,15 +3456,15 @@ PageAdmin.menu.top.roles.edit=Upravit roli PageAdmin.menu.top.users.org.edit=Upravit organizaci PageSelfCredentials.tabs.password=Heslo PageSelfCredentials.title=Změna hesla -PageSelfCredentials.oldPasswordLabel=Staré heslo +PageSelfCredentials.oldPasswordLabel=Stávající heslo PageSelfCredentials.passwordLabel1=Nové heslo PageSelfCredentials.passwordLabel2=Potvrdit heslo PageSelfCredentials.accountMidpoint=Správce identit PageSelfCredentials.resourceMidpoint=Repozitář identit PageSelfCredentials.noAccountSelected=Heslo nebylo změněno. Nebyl vybrán žádný účet. PageSelfCredentials.emptyPasswordFiled=Je třeba vyplnit položky pro nové heslo. -PageSelfCredentials.incorrectOldPassword=Heslo nebylo změněno. Staré heslo není správně. -PageSelfCredentials.specifyOldPasswordMessage=Zadejte staré heslo +PageSelfCredentials.incorrectOldPassword=Heslo nebylo změněno. Stávající heslo není správně zadáno. +PageSelfCredentials.specifyOldPasswordMessage=Zadejte stávající heslo ChangePasswordPanel.accountsTable.header=Propagace hesla ChangePasswordPanel.name=Název ChangePasswordPanel.resourceName=Aplikace diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties index 706ce51efc0..91916fbecbb 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties @@ -652,7 +652,7 @@ ObjectPolicyDialog.property.placeholder=Insérer un chemin de propriété ObjectPolicyDialog.subtype=Sous-type d'objet ObjectPolicyDialog.template=Gabarit d'objet ObjectPolicyDialog.type=Type d'objet -ObjectPolicyDialogDto.message.preparePolicyConfig.warning=Skipping setting property constraint, no path was defined. +ObjectPolicyDialogDto.message.preparePolicyConfig.warning=Aucune contrainte sur la propriété n'est établie car aucun chemin n'a été défini. ObjectPolicyConfigurationTabPanel.type=Type ObjectPolicyConfigurationTabPanel.subtype=Sous-type ObjectPolicyConfigurationTabPanel.objectTemplate=Gabarit d'objet @@ -1104,8 +1104,8 @@ PageAdmin.menu.top.configuration.expressionEvaluator=Évaluateur d'expression PageAdmin.menu.top.configuration.importObject=Importer un objet PageAdmin.menu.top.configuration.internals=Configuration interne PageAdmin.menu.top.configuration.objectPolicy=Politique des objets -PageAdmin.menu.top.configuration.globalPolicyRule=Règle globale de politique -PageAdmin.menu.top.configuration.globalAccountSynchronization=Synchronisation globale des comptes +PageAdmin.menu.top.configuration.globalPolicyRule=Règles de politique globale +PageAdmin.menu.top.configuration.globalAccountSynchronization=Synchronisation des comptes PageAdmin.menu.top.configuration.cleanupPolicy=Politique de nettoyage PageAdmin.menu.top.configuration.workflow=Configuration de flux de travaux PageAdmin.menu.top.configuration.roleManagement=Gestion des rôles @@ -1116,7 +1116,7 @@ PageAdmin.menu.top.configuration.logging=Journalisation PageAdmin.menu.top.configuration.deploymentInformation=Information de déploiement PageAdmin.menu.top.configuration.notifications=Notifications PageAdmin.menu.top.configuration.profiling=Profilage -PageAdmin.menu.top.configuration.adminGui=Interface graphique d'administration +PageAdmin.menu.top.configuration.adminGui=Interface graphique d'admin. PageAdmin.menu.top.configuration.repositoryObjects=Objets du dépôt PageAdmin.menu.top.configuration.repositoryObjectsList=Tous les objets PageAdmin.menu.top.configuration.security=Sécurité @@ -2081,7 +2081,7 @@ PageRoles.title=Tous les rôles pageSecurityQuestions.message.WrongAnswer=Questions non répondues correctement pageSecurityQuestions.message.noPolicySet=Aucune politique des mots de passe n'est définie PageSecurityQuestions.title=Questions de sécurité -PageShowPassword.message=Votre nouveau mot de passe est : +PageShowPassword.message=Votre nouveau mot de passe est : PageShowPassword.success=Le nouveau mot de passe a été créé avec succès PageShowPassword.title=Nouveau Mot de Passe PageSizePopover.title=Lignes par page @@ -2093,10 +2093,10 @@ pageSystemConfiguration.assignmentPolicyEnforcement.value.positive=Positive pageSystemConfiguration.logging.title=Journalisation pageSystemConfiguration.notifications.title=Notifications pageSystemConfiguration.profiling.title=Profilage -pageSystemConfiguration.adminGui.title=Admin GUI +pageSystemConfiguration.adminGui.title=Interface graphique d'admin. pageSystemConfiguration.system.title=Système pageSystemConfiguration.objectPolicy.title=Politique des objets -pageSystemConfiguration.globalPolicyRule.title=Règle globale de politique +pageSystemConfiguration.globalPolicyRule.title=Règles de politique globale pageSystemConfiguration.globalAccountSynchronization.title=Synchronisation globale des comptes pageSystemConfiguration.cleanupPolicy.title=Politique de nettoyage pageSystemConfiguration.roleManagement.title=Gestion des rôles @@ -2792,7 +2792,7 @@ ResourceCredentialsEditor.label=Modifier les informations d'identification de la ResourceCredentialsEditor.label.fetchStrategy=Stratégie d'obtention ResourceCredentialsEditor.label.inbound=Entrant ResourceCredentialsEditor.label.outbound=Sortant -ResourceCredentialsEditor.label.passwordPolicyRef=Stratégie de mot de passe +ResourceCredentialsEditor.label.passwordPolicyRef=Politique de mot de passe ResourceDependencyEditor.label.button.add=Ajouter une dépendance de ressource ResourceDependencyEditor.label=Modifier les dépendances ResourceDependencyEditor.label.intent=Finalité de la dépendance @@ -3425,7 +3425,7 @@ PageAdmin.menu.profile=Profil PageAdmin.menu.assignments=Attributions PageAdmin.menu.credentials=Informations d'identification PageAdmin.menu.request=Demander un rôle -PageTemplate.version=Version: +PageTemplate.version=Version : PageTemplate.copy=Copyright © 2010-2018 Evolveum® et ses partenaires.  PageTemplate.toggleNavigation=Toggle navigation PageTemplate.user=utilisateur @@ -3437,7 +3437,7 @@ TableConfigurationPanel.pageSize=Lignes par page TableConfigurationPanel.tableColumns=Table columnsCountToolbar.label.unknownCount=Displaying {0,number,integer} to {1,number,integer}, nombre inconnu de résultats correspondants. MyRequestsPanel.started=Démarré MyRequestsPanel.rejected=Rejeté -MyRequestsPanel.skipped=Passé +MyRequestsPanel.skipped=Ignoré MyRequestsPanel.approved=Validé MyRequestsPanel.inProgress=En cours MyRequestsPanel.unknown=Inconnu @@ -3873,9 +3873,9 @@ AssignmentConflictPanel.undoAction=Annuler PageAssignmentConflicts.title=Conflits entre attributions PageAssignmentConflicts.back=Retour PageAssignmentConflicts.submit=Soumettre -PageAssignmentsList.conflictsWarning=Unable to calculate assignment conflicts due to authorization problem. Reason: +PageAssignmentsList.conflictsWarning=Impossible de calculer les conflits d'attribution dus à des problèmes d'autorisation. Cause : AbstractShoppingCartTabPanel.addAllButton=Les ajouter tou(te)s -AbstractShoppingCartTabPanel.goToShoppingCartButton=Go to shopping cart +AbstractShoppingCartTabPanel.goToShoppingCartButton=Voir le panier AbstractShoppingCartTabPanel.requestingForLabel=Demande pour AbstractShoppingCartTabPanel.availableRelationsLabel=Relations disponibles AssignmentCatalogPanel.selectTargetUser=Sélectionner l'utilisateur cible @@ -4155,8 +4155,8 @@ PolicyConstraintsType.objectMinAssigneesViolation=Violation du nombre minimal d' PolicyConstraintsType.objectMaxAssigneesViolation=Violation du nombre maximal d'attributaires de l'objet PolicyConstraintsType.modification=Modification PolicyConstraintsType.assignment=Attribution -PolicyConstraintsType.objectTimeValidity=Object time validity -PolicyConstraintsType.assignmentTimeValidity=Validité du temps d'attribution +PolicyConstraintsType.objectTimeValidity=Durée de validité de l'objet +PolicyConstraintsType.assignmentTimeValidity=Durée de validité des attributions PolicyConstraintsType.situation=Situation PolicyConstraintsType.transition=Transition PolicyConstraintsType.ref=Réf @@ -4168,11 +4168,11 @@ ExpressionValuePanel.literalValueTitle=Valeur littérale ExpressionValuePanel.associationTargetSearchTitle=Filtre pour la recherche de la cible de l'association ExpressionValuePanel.path=Chemin ExpressionValuePanel.value=Valeur -ExpressionValuePanel.specifyExpression=Specify expression -ExpressionValuePanel.addValueButtonDefaultTitle=Add shadow reference value +ExpressionValuePanel.specifyExpression=Spécifier l'expression +ExpressionValuePanel.addValueButtonDefaultTitle=Ajouter une valeur de référence du reflet ExpressionValuePanel.addValueButtonTargetSearchTitle=Ajouter une recherche de cible de l'association ExpressionValuePanel.addLiteralValueButton=Ajouter une valeur littérale -ExpressionValuePanel.associationDefenitionsNotDefined=Association definitions are not defined for the current resource with selected kind/intent parameters. +ExpressionValuePanel.associationDefenitionsNotDefined=Aucune définition d'association n'est définie pour la ressource actuelle avec les paramètres sorte et finalité sélectionnés. ConstructionType.attribute=Attribut ConstructionType.association=Association operation.Recompute.ALL.members=Recalculer tous les membres @@ -4259,32 +4259,32 @@ ItemPathPanel.button.reset=Réinitialiser le chemin ApprovalPolicyActionType.details.newValue=Nouvelle action de politique de validation LifecycleStateType.details.newValue=État du nouveau cycle de vie NotificationPolicyActionType.details.newValue=Nouvelle action de politique de notification -PropertyConstraintType.details.newValue=Nouvelle contrainte de propriété -objectState.details.newValue=New object state -assignmentState.details.newValue=Nouvel état d'attribution -hasAssignment.details.newValue=New has assignment -hasNoAssignment.details.newValue=New has no assignment +PropertyConstraintType.details.newValue=Nouvelle contrainte sur une propriété +objectState.details.newValue=Nouvelle contrainte relative à l'état de l'objet +assignmentState.details.newValue=Nouvelle contrainte relative à l'état de l'attribution +hasAssignment.details.newValue=Nouvelle contrainte relative à la présence d'attributions +hasNoAssignment.details.newValue=Nouvelle contrainte relative à l'absence d'attributions exclusion.details.newValue=Nouvelle exclusion minAssignees.details.newValue=Nouveau nombre minimal d'attributaires maxAssignees.details.newValue=Nouveau nombre maximal d'attributaires -modification.details.newValue=Nouvelle modification -assignment.details.newValue=Nouvelle attribution -objectTimeValidity.details.newValue=New object time validity -assignmentTimeValidity.details.newValue=New assignment time validity -situation.details.newValue=Nouvelle situation de politique +modification.details.newValue=Nouvelle contrainte sur la modification de l'objet +assignment.details.newValue=Nouvelle contrainte sur la modification d'une attribution +objectTimeValidity.details.newValue=Nouvelle contrainte sur la durée de validité de l'objet +assignmentTimeValidity.details.newValue=Nouvelle contrainte sur la durée de validité des attributions +situation.details.newValue=Nouvelle contrainte relative à une situation de politique transition.details.newValue=Nouvelle transition ref.details.newValue=Nouvelle référence objectMaxAssigneesViolation.details.newValue=Violation du nombre maximal d'attributaires du nouvel objet objectMinAssigneesViolation.details.newValue=Violation du nombre minimal d'attributaires du nouvel objet -PolicyConstraintReferenceType.details.newValue=New policy constraint reference +PolicyConstraintReferenceType.details.newValue=Nouvelle référence à une contrainte de politique RichHyperlinkType.details.newValue=New rich hyperlink UserInterfaceFeatureType.details.newValue=New user interface feature GuiObjectDetailsPageType.details.newValue=Page de détails du nouvel objet gui -ObjectFormType.details.newValue=Formulaire pour un nouvel objet +ObjectFormType.details.newValue=Nouveau formulaire d'objet GuiObjectColumnType.details.newValue=Colonne du nouvel objet gui GuiObjectListViewType.details.newValue=Vue de la liste d'objets du nouvel objet gui DashboardWidgetType.details.newValue=Nouvelle vignette de tableau de bord -RelationDefinitionType.details.newValue=Définition d'une nouvelle relation +RelationDefinitionType.details.newValue=Nouvelle définition de relation GuiActionType.details.newValue=Nouvelle action GUI ApprovalStageDefinitionType.details.newValue=Nouvelle définition de phase de validation WorkItemTimedActionsType.details.newValue=Actions programmées pour un nouveau travail @@ -4302,8 +4302,8 @@ minAssignees.details=Nombre minimal d'attributaires maxAssignees.details=Nombre maximal d'attributaires modification.details=Modification assignment.details=Attribution -objectTimeValidity.details=Object time validity -assignmentTimeValidity.details=Validité du temps d'attribution +objectTimeValidity.details=Durée de validité de l'objet +assignmentTimeValidity.details=Durée de validité des attributions situation.details=Situation de politique transition.details=Transition ref.details=Référence diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties index 6a949c698d9..754b18512da 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties @@ -1666,12 +1666,12 @@ pageDebugList.dialog.title.confirmDelete=Conferma cancellazione pageDebugList.dialog.title.deleteAll=Elimini Tutti gli Oggetti pageDebugList.menu.deleteAllIdentities=Elimina tutte le identità pageDebugList.menu.deleteAllType=Elimina tutto il tipo selezionato -pageDebugList.menu.deleteSelected=Delete selected/filtered +pageDebugList.menu.deleteSelected=Elimina selezionato/filtrato pageDebugList.menu.deleteShadowsOnResource=Elimina tutti gli shadow nella risorsa pageDebugList.menu.exportShadowsOnResource=Esporta tutti gli shadows nella risorsa pageDebugList.menu.exportAll=Esporta tutti gli oggetti pageDebugList.menu.exportAllSelectedType=Esporta tutto il tipo selezionato -pageDebugList.menu.exportSelected=Export selected/filtered +pageDebugList.menu.exportSelected=Esporta selezionato/filtrato pageDebugList.message.countSearchProblem=Impossibile eseguire operazioni di ricerca su utenti /shadow/unita' organizzative pageDebugList.message.createFileException=Impossibile creare il file per il download. pageDebugList.message.deleteAllType=Vuoi davvero cancellare tutti gli oggetti di tipo "{0}"? @@ -4172,7 +4172,7 @@ ExpressionValuePanel.specifyExpression=Specifica espressione ExpressionValuePanel.addValueButtonDefaultTitle=Aggiungi il valore del riferimento shadow ExpressionValuePanel.addValueButtonTargetSearchTitle=Aggiungi ricerca target di associazione ExpressionValuePanel.addLiteralValueButton=Aggiungi valore letterale -ExpressionValuePanel.associationDefenitionsNotDefined=Association definitions are not defined for the current resource with selected kind/intent parameters. +ExpressionValuePanel.associationDefenitionsNotDefined=Le definizioni di associazione non sono definite per la risorsa corrente con i parametri di tipo/Intent selezionati. ConstructionType.attribute=Attributo ConstructionType.association=Associazione operation.Recompute.ALL.members=Ricalcola tutti i membri diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties index fb0a07e4c9e..1f0357a8cbb 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties @@ -1148,7 +1148,7 @@ PageAdmin.menu.top.users=ユーザー PageAdmin.menu.top.valuePolicies.list= バリュー・ポリシー一覧 PageAdmin.menu.top.valuePolicies.new = 新しいバリュー・ポリシー PageAdmin.menu.top.valuePolicies= バリュー・ポリシー -PageAdmin.menu.top.workItems.listClaimable=私の主張するアイテム +PageAdmin.menu.top.workItems.listClaimable=私が要求できるアイテム PageAdmin.menu.top.workItems.list=私のアイテム PageAdmin.menu.top.workItems.listAll=すべてのアイテム PageAdmin.menu.top.workItems.listProcessInstancesAll=全リクエスト @@ -1666,12 +1666,12 @@ pageDebugList.dialog.title.confirmDelete=削除の確認 pageDebugList.dialog.title.deleteAll=すべてのオブジェクトの削除 pageDebugList.menu.deleteAllIdentities=すべての識別子の削除 pageDebugList.menu.deleteAllType=選択したすべてのタイプを削除 -pageDebugList.menu.deleteSelected=Delete selected/filtered +pageDebugList.menu.deleteSelected=選択/フィルターされたものを削除 pageDebugList.menu.deleteShadowsOnResource=リソース上のすべてのシャドウを削除 pageDebugList.menu.exportShadowsOnResource=リソース上のすべてのシャドウをエクスポート pageDebugList.menu.exportAll=すべてのオブジェクトのエクスポート pageDebugList.menu.exportAllSelectedType=選択したすべてのタイプをエクスポート -pageDebugList.menu.exportSelected=Export selected/filtered +pageDebugList.menu.exportSelected=選択/フィルターされたものをエクスポート pageDebugList.message.countSearchProblem=ユーザー/シャドウ/組織単位に対する検索操作を実行できませんでした。 pageDebugList.message.createFileException=ダウンロードするファイルを作成できませんでした。 pageDebugList.message.deleteAllType=本当にタイプ"{0}"のすべてのオブジェクトを削除しますか? @@ -2601,7 +2601,7 @@ pageWorkItems.button.approve=承認 pageWorkItems.button.claim=クレーム pageWorkItems.button.reject=却下 pageWorkItems.button.release=リリース -PageWorkItemsClaimable.title=私がクレーム可能な作業アイテム +PageWorkItemsClaimable.title=私が要求できる作業アイテム pageWorkItems.item.created=Created on pageWorkItems.item.name=名前 pageWorkItems.item.owner=オーナー @@ -2612,7 +2612,7 @@ pageWorkItems.message.success.approved=業務アイテムが正常に承認さ pageWorkItems.message.partialError.approved=予期しない例外のために作業アイテムを承認/却下できませんでした。 pageWorkItems.message.success.rejected=業務アイテムが正常に拒否されました。 pageWorkItems.message.success.claimed=業務アイテムが正常に要求されました。 -pageWorkItems.message.partialError.claimed=予期しない例外のために作業アイテムを請求できませんでした。 +pageWorkItems.message.partialError.claimed=予期しない例外のために作業アイテムを要求できませんでした。 pageWorkItems.message.success.released={0}個の業務アイテムが正常にリリースされました。 pageWorkItems.message.partialError.released=予期しない例外のために作業アイテムを解放できませんでした。 PageWorkItemsAll.title=すべての作業アイテム @@ -2842,8 +2842,8 @@ ResourceWizard.expression.tooltip.type=式のタイプ。 これは式がスク ResourceWizard.help.capabilityStep=

リソース機能はリソースができることです。すべてのリソースが機能的に同じというわけではありません。例えば、 1つのリソースはアカウントの有効化(アカウントの有効化と無効化)をサポートしますが、その他はサポートしません。 1つのリソースが読み書きアクセスを提供し、他のリソースが読み取り専用アクセスをサポートできます。一方のリソースはリアルタイム同期をサポートしますが、他方はサポートしません。機能は、リソースがサポートする機能を定義し、システムがそれに応じて動作できるようにします。

すべての機能を無効にする(つまりオフにする)ことができます。この機能を無効にすると、システムはコネクターとリソースのその部分を使用しません。これらの機能に問題があると、機能は通常無効になります。例えば、コネクターまたはリソースにバグがある場合、適切な機能が無効になっているとバグが回避される可能性があります。しかし、管理上の理由からも機能が無効になっている可能性があります。例えば、作成更新削除機能を無効にすると、リソースは効率的に読み取り専用になります。

一部の機能はシミュレートできます。つまり、システムにはリソースがなくてもリソースに特定の機能があると見せかけることができます。例えば、特定のアカウント属性を特定の値に設定してアカウントを無効にすることで、アクティブ化機能をシミュレートできます。そのようなシミュレートされた機能は通常何らかの設定を必要とします。これはこのページでも設定できます。

詳細はResource Capabilities wikiページを参照してください。

ResourceWizard.help.configurationStep=

ウィザードのこのステージで、コネクター設定プロパティを設定します。 それらは通常、ホスト名やポート番号などのリソースへのアクセスに使用されるネットワーク・パラメーターを定義します。 操作ネットワークのタイムアウトや接続プーリングの設定など、追加の接続パラメータをここで指定できます。

コネクター設定プロパティは各コネクターに固有です。 特定の構成プロパティーのセットは、コネクター構成スキーマによって決まります。 したがって、このページの内容は前のページで選択されたコネクターの種類によって異なります。

ResourceWizard.help.nameStep=

ウィザードのこのステージでは、リソースの基本的なプロパティを設定します。 リソース名と説明を設定するために使用できます。 コネクター名は必須であり、一意である必要があります。 リソースへのアクセスに使用されるコネクターも設定する必要があります。 コネクターはコネクター・ホストにデプロイされます。 コネクター・ホストを空のままにすると、システム・インスタンスに直接デプロイされたコネクターが使用されます。

リソース設定の詳細な説明については、リソース設定のWikiページを参照してください。

-ResourceWizard.help.schemaHandlingStep=

This step is used to provide configuration for handling of resource schema. The configuration displayed on this page tells system what to do with resource object classes and attributes. It contains the configuration of mappings between user properties and account attributes, configuration of account types, groups, provisioning dependencies, password mapping and so on.

The configuration is grouped into object types. Each object type defines the behavior for specific account type, entitlement type, OU, etc. The object type is uniquely identified by the combination of kind and intent. The kind defines what kind of the object it is:

  • kind=account means that the object is an account, i.e. that it represents a user.
  • kind=entitlement is applied to groups, roles, privileges, ACIs and similar objects that can be associated with accounts and which give privileges or access rights to the account.
  • kind=generic applies to other objects such as organizational units (OUs), domains, etc.
Intent is a plain string that can be used to distinguish several object types. E.g. it can be used to define several account types, e.g. "default user account", "administration account", "testing account" and so on. See Kind, Intent and ObjectClass wiki page for more details.

More details about schema handling configuration are provided on Resource Schema Handling wiki page. -ResourceWizard.help.schemaStep=

This page shows resource schema. The resource schema defines object classes that the connector can manage, e.g. accounts, groups, organizational units and so on. The schema defines a set of attributes for each object class. The schema is presented here in read-only form so you can inspect it and familiarize yourself with the data model that the resource provides.

The resource schema presented at this page is usually retrieved from the resource and automatically generated by system. Resource schema defines what the resource can do, i.e. what object classes it defines and what attributes are used in the object classes. Therefore the schema is read-only. It is not a configuration. It does not defines how system uses the object classes and attributes. That is configured in next steps of the wizard.

See Resource Schema wiki page for detailed explanation of resource schema concepts

+ResourceWizard.help.schemaHandlingStep=

このステップは、リソース・スキーマを処理するための設定を提供するために使用されます。このページに表示される設定は、リソース・オブジェクトのクラスと属性をどう処理するかをシステムに指示します。ユーザー・プロパティとアカウント属性間のマッピングの設定、アカウント・タイプの設定、グループ、プロビジョニングの依存関係、パスワード・マッピングなどが含まれます。

設定はオブジェクト・タイプに分類されます。各オブジェクト・タイプは、特定のアカウント・タイプ、エンタイトルメント・タイプ、OUなどの動作を定義します。オブジェクト・タイプは、種類用途の組み合わせによって一意に識別されます。 種類はどの種類のオブジェクトであるかを定義します。

  • kind = accountはオブジェクトがアカウントであることを意味します。つまり、ユーザーを表します。
  • kind= entitlementはグループ、ロール、特権、ACI、および関連することができる同様のオブジェクトに適用されます。 accountおよびaccountに特権またはアクセス権を付与する。
  • kind= genericは、組織単位(OU)、ドメインなどの他のオブジェクトに適用されます。
用途は、いくつかのオブジェクト・タイプを区別するために使用できるプレーンな文字列です。例えば、それはいくつかのアカウント・タイプを定義するために使用することができます。 「デフォルトのユーザー・アカウント」、「管理者アカウント」、「テスト用アカウント」など。詳細については、種類、用途、オブジェクト・クラスのWikiページを参照してください。

スキーマ処理設定の詳細については、リソース・スキーマ・ハンドリングのWikiページを参照してください。 +ResourceWizard.help.schemaStep=

このページはリソース・スキーマを表示します。リソース・スキーマは、コネクターが管理できるオブジェクト・クラスを定義します。 アカウント、グループ、組織単位など。 スキーマは、各オブジェクト・クラスの一連の属性を定義します。スキーマは読み取り専用形式でここに表示されるので、それを調べてリソースが提供するデータ・モデルに慣れることができます。

このページに表示されるリソース・スキーマは通常リソースから取得され、システムによって自動的に生成されます。リソース・スキーマは、そのリソースができること、即ちそれが定義するオブジェクト・クラス、および、そのオブジェクト・クラスで使用される属性を定義します。従って、スキーマは読み取り専用です。構成ではありません。システムがオブジェクト・クラスと属性をどのように使用するかは定義していません。これは、ウィザードの次のステップで構成されます。

リソース・スキーマの概念の詳細な説明については、

リソース・スキーマのWikiページを参照してください。

ResourceWizard.help.synchronizationStep=

同期設定は、リソース・オブジェクトが変更されたことを検出したときにIdentity Managerがどのように反応するかを定義します。例えば、新しいアカウントを検出したとき、存在すべきグループが存在しないことを検出したときなどに、システムがどのように反応するかを定義します。システムがどのように変化を検出しても反応は同じであるかどうかは、通常は問題ではありません(ただし、例外はチャネル指定を使用することで可能です)。したがって、ここで設定されているポリシーは通常、ライブ同期リコンシリエーションインポートディスカバリー(一貫性メカニズム)、および将来発生する可能性のあるその他のメカニズムにも適用されます。

詳細については、同期設定のWikiページを参照してください。 ResourceWizard.saveAndVisualize=保存と可視化 ResourceWizard.visualize=可視化 @@ -2889,7 +2889,7 @@ SchemaHandlingStep.association.tooltip.direction=アソシエーションの方 SchemaHandlingStep.association.tooltip.explicitRefIntegrity=明示的な参照整合性。falseに設定すると、システムはリソースが参照整合性を実装していると見なします。例えば、 システムは、アカウントの名前が変更され、システムが何もする必要がない場合に、リソースが自動的にアソシエーションIDを更新すると想定します。trueに設定すると、システムは明示的に参照整合性を取ります。この場合、システムは、アカウントの名前が変更されると、アソシエーション属性を明示的に更新します。 SchemaHandlingStep.association.tooltip.intent=アソシエーションの対象オブジェクト・タイプの用途。 ターゲットの種類と用途は、アソシエーションの対象となるオブジェクト・タイプを識別します。 グループ、特権、ロールなど SchemaHandlingStep.association.tooltip.kind=アソシエーションの対象オブジェクト・タイプの種類。 これは通常”エンタイトルメント”です。 ターゲットの種類と用途は、アソシエーションの対象となるオブジェクトタイプを識別します。例えば、 グループ、特権、ロールなど。 -SchemaHandlingStep.association.tooltip.valueAttribute=Name of the attribute that is the source of a value for the association. The value of this attribute will be taken and stored into the association attribute to form an association. This is usually an attribute that contains an identifier or name such as "uid", "id", "name", etc. In subject-to-object associations this is an attribute of an object (e.g. group). In object-to-subject associations this is an attribute of a subject (e.g. account). +SchemaHandlingStep.association.tooltip.valueAttribute=アソシエーションの値のソースとなる属性の名前。この属性の値が取得され、アソシエーションを形成するためにアソシエーション属性に格納されます。これは通常、 "uid"、 "id"、 "name"などの識別子または名前を含む属性です。サブジェクトとオブジェクトのアソシエーションでは、これはオブジェクトの属性です(グループなど)。オブジェクトとサブジェクトのアソシエーションでは、これはサブジェクトの属性です(例:アカウント)。 SchemaHandlingStep.attribute.label.attributeName=属性名 SchemaHandlingStep.attribute.label.attributeNamespace=属性名前空間 SchemaHandlingStep.attribute.tooltip.allow=オンにすると、元のリソーススキーマにない属性を指定できます。これは、完全なリソーススキーマを提供せず、いくつかの属性を隠すような不完全なコネクターを修正するために使用できます。 @@ -2973,7 +2973,7 @@ SchemaHandlingStep.tooltip.default=trueに設定した場合、この定義は SchemaHandlingStep.tooltip.dependency=Dependencies are object types that has to be processed before this object types is processed. I.e. this object type depends on them. The object types on which this object type depends will be provisioned before this object type. Dependencies are used to impose ordering into provisioning operations. SchemaHandlingStep.tooltip.filterClause=TODO: SchemaHandlingStep.tooltip.filterClause SchemaHandlingStep.tooltip.intent=用途は、システムがオブジェクトに対して何をすべきかを指定します。用途は、同じ種類のオブジェクトをいくつかのカテゴリに分類します。 用途が異なるオブジェクトは、システムによって異なる方法で処理される可能性があります。 -SchemaHandlingStep.tooltip.iteration=Iteratively find values for unique attributes such as identifiers. Identity Manager will try several times to find a unique value for such attributes. +SchemaHandlingStep.tooltip.iteration=識別子などの固有の属性の値を繰り返し見つけます。アイデンティティ・マネージャーは、そのような属性に固有の値を見つけるために何度か試行します。 SchemaHandlingStep.tooltip.kind=種類は、このオブジェクトが何であるか、それがアカウント、エンタイトルメント、または何か他のものであるかどうかを指定しました。 SchemaHandlingStep.tooltip.objectClass=このオブジェクト・タイプのインスタンスを構築するために使用されるスキーマのオブジェクトクラス。 SchemaHandlingStep.tooltip.protected=このオブジェクト型の保護されたインスタンスの指定 システムは保護されたインスタンスを見ることができますが、触れることはできません。 それらを変更しようとしても失敗します。 これは、 "root"や "administrator"などの緊急管理アカウントを保護するために使用されます。 @@ -3131,7 +3131,7 @@ SynchronizationStep.tooltip.enabled=この同期設定が有効になってい SynchronizationStep.tooltip.focus=リソース・オブジェクトに対応するフォーカル・オブジェクトのタイプ。アカウント・オブジェクトの場合、これは通常ユーザー・オブジェクト(UserType)です。これは、エンタイトルメント・オブジェクトなどに対してRoleTypeまたはOrgTypeに設定できます。 SynchronizationStep.tooltip.intent=Object intent for which this definition applies. If the object (shadow) already has a kind and intent when it is processed by the synchronization code then this kind/intent definition will be used to select the synchronization settings to apply to this object. If the object does not have kind/intent then object class and conditions will be used to select the settings. In such a case the object (shadow) will be marked by the intent specified in this field. SynchronizationStep.tooltip.kind=Object kind for which this definition applies. If the object (shadow) already has a kind and intent when it is processed by the synchronization code then this kind/intent definition will be used to select the synchronization settings to apply to this object. If the object does not have kind/intent then object class and conditions will be used to select the settings. In such a case the object (shadow) will be marked by the kind specified in this field. -SynchronizationStep.tooltip.objectClass=Object class for which this definition applies. This will be used to select the synchronization settings in case the object (shadow) does not have kind/intent definition yet. +SynchronizationStep.tooltip.objectClass=この定義が適用されるオブジェクトクラス。これはオブジェクト(シャドウ)が種類/用途の定義をまだ持っていない場合に同期設定を選択するために使用されます。 SynchronizationStep.tooltip.objectTemplate=この特定の同期イベントを処理するために使用されるオブジェクト・テンプレート。ここでオブジェクト・テンプレートが指定されていない場合は、通常のデフォルトが使用されます。 SynchronizationStep.tooltip.opportunistic=trueに設定すると、このイベントの処理中に日和見的同期(別名ディスカバリー)が有効になります。 SynchronizationStep.tooltip.reaction=システムがこの同期イベントにどのようにリアクションするかを指定します。 いくつかのリアクションを指定できます。 イベントの同期状況に適したリアクションが選択されます。 @@ -3696,7 +3696,7 @@ StageDefinitionPanel.notifyWhenNoDecisionHelp=チェックした場合、レビ StageDefinitionPanel.reviewerSpecificationTargetHelp=割当て/インデュースメント・ターゲットの所有者/承認者に基づくレビュー担当者の選択。 例えば ロールの所有者を使用して、(任意のユーザーに対する)「自分の」ロールのすべての割当てを認証するように指定できます。 StageDefinitionPanel.reviewerSpecificationObjectHelp=Selection of reviewers based on object that has something assigned (or induced) to. E.g. you can specify that the role owner is used to certify all inducements made to 'his' role. StageDefinitionPanel.reviewerUseObjectManagerHelp=Selection of reviewers based on managers of object (typically a user) that has something assigned/induced to. E.g. you can specify that a manager is used to certify all assignments made to users in 'his' organization. -StageDefinitionPanel.reviewerUseObjectManagerOrgTypeHelp=Influences determination of a manager of a user: First, we take all managers of all organizations the user belongs to. We exclude the user himself, if he is a manager of such organization (and if 'allow managers to approve their own assignments' below is unchecked). If the value in this field is filled-in, we use it to select only organizations with given organization type value - for example, 'functional' (if you have e.g. both functional-type and project-type organizations). If this field is empty, we take into account all organizations. If we find no suitable manager, we continue with all parent organizations (again, of the given type, if specified). +StageDefinitionPanel.reviewerUseObjectManagerOrgTypeHelp=ユーザーのマネージャーの決定に影響を与えます。まず、ユーザーが属するすべての組織のすべてのマネージャーを取得します。ユーザーがそのような組織のマネージャーである場合(および下記の「マネージャーに自分の割当てを承認することを許可する」のチェックが外されている場合)、ユーザー自身を除外します。 このフィールドの値が入力されている場合は、指定された組織タイプの値を持つ組織のみを選択するために使用します。例えば、「ファンクショナル」(例えば、ファンクショナル・タイプとプロジェクト・タイプの組織の両方がある場合)。 このフィールドが空白の場合は、すべての組織が考慮されます。 適切なマネージャーが見つからない場合は、すべての親組織(ここでも指定されている場合は指定されたタイプのもの)を続行します。 StageDefinitionPanel.reviewerUseObjectManagerAllowSelfHelp=If a user is a manager in his organization, could he be selected as a reviewer for his own assignments? If unchecked (the default), a higher-level manager is searched for - see description for the above field. StageDefinitionPanel.defaultReviewerRefHelp=上記の条件でレビューワーを導けない場合は、このレビューワー(複数可)が使用されます。 StageDefinitionPanel.additionalReviewerRefHelp=このレビューワー(複数可)は、上記の条件で選択されたレビューワーに加えて使用されます。 @@ -3747,7 +3747,7 @@ PageResourceVisualization.dotMessage=DOTグラフのレンダリングは実行 PageResourceVisualization.dot1=DOTレンダリング・ソフトウェアがサーバーにインストールされています。 推奨されるのはGraphvizです PageResourceVisualization.dot2=DOTレンダリング実行ファイルへのパスは、config.xmlファイルで正しく設定されています。 PageResourceVisualization.moreInformation=詳細は、こちらをご覧ください: -PageResourceVisualization.moreInformationLink=this article +PageResourceVisualization.moreInformationLink=この記事 PageResourceVisualization.errorMessage=エラーメッセージ PageResourceVisualization.seeOnline=オンラインのDOTレンダラーを使用することもできます PageResourceVisualization.seeOnlineLink=webgraphviz.com @@ -4172,7 +4172,7 @@ ExpressionValuePanel.specifyExpression=式を指定する ExpressionValuePanel.addValueButtonDefaultTitle=シャドウ・リファレンス値を追加 ExpressionValuePanel.addValueButtonTargetSearchTitle=アソシエーション・ターゲット・検索を追加 ExpressionValuePanel.addLiteralValueButton=リテラル値を追加 -ExpressionValuePanel.associationDefenitionsNotDefined=Association definitions are not defined for the current resource with selected kind/intent parameters. +ExpressionValuePanel.associationDefenitionsNotDefined=アソシエーション定義は、選択された種類/用途パラメーターを持つ現在のリソースに対して定義されていません。 ConstructionType.attribute=属性 ConstructionType.association=アソシエーション operation.Recompute.ALL.members=全メンバーの再計算 diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties index c6a0b9f683c..4bb0c3f8248 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties @@ -4172,7 +4172,7 @@ ExpressionValuePanel.specifyExpression=Określ wyrażenie ExpressionValuePanel.addValueButtonDefaultTitle=Dodaj wartość referencyjną cienia ExpressionValuePanel.addValueButtonTargetSearchTitle=Dodaj wyszukiwanie celu powiązania ExpressionValuePanel.addLiteralValueButton=Dodaj wartość dosłowną -ExpressionValuePanel.associationDefenitionsNotDefined=Association definitions are not defined for the current resource with selected kind/intent parameters. +ExpressionValuePanel.associationDefenitionsNotDefined=Brak jest definicji powiązań dla bieżącego systemu z wybranymi parametrami rodzaj/intencja ConstructionType.attribute=Atrybut ConstructionType.association=Powiązanie operation.Recompute.ALL.members=Przelicz wszystkich członków diff --git a/infra/schema/src/main/resources/localization/schema_fr.properties b/infra/schema/src/main/resources/localization/schema_fr.properties index b08ad80b20b..fce73424438 100644 --- a/infra/schema/src/main/resources/localization/schema_fr.properties +++ b/infra/schema/src/main/resources/localization/schema_fr.properties @@ -299,7 +299,7 @@ FormSpecificationType.formRef=Reference to form FormSpecificationType.panelClass=Classe de panneau FormSpecificationType.panelUri=Uri du panneau GenericPcpAspectConfigurationType.name=Nom -GlobalPolicyRuleType.details=Règle globale de politique +GlobalPolicyRuleType.details=Règle de politique globale GlobalPolicyRuleType.focusSelector=Sélecteur de foyer GlobalPolicyRuleType.targetSelector=Sélecteur de cible GlobalPolicyRuleType.condition=Conditions @@ -633,9 +633,9 @@ RoleManagementConfigurationType.defaultAssignmentConstraints=Contraintes d'attri RoleManagementConfigurationType.defaultExecuteAfterAllApprovals=Default execute after all approvals RoleManagementConfigurationType.autoassignEnabled=Autoassign enabled RoleManagementConfigurationType.relations=Relations -SearchBoxConfigurationType.defaultMode=Default mode -SearchBoxConfigurationType.defaultObjectType=Default object type -SearchBoxConfigurationType.defaultScope=Default scope +SearchBoxConfigurationType.defaultMode=Mode par défaut +SearchBoxConfigurationType.defaultObjectType=Type d'objet par défaut +SearchBoxConfigurationType.defaultScope=Champ d'application par défaut ShadowType.dead=Mort ShadowType.kind=Sorte ShadowType.failedOperationType=Failed operation type @@ -931,7 +931,7 @@ DefaultPolicyConstraint.not=Les contraintes incluses n'ont pas été enclenchée DefaultPolicyConstraint.transition=Contrainte de politique de transition appariée DefaultPolicyConstraint.situation=Contrainte de politique de situation appariée PolicyViolationException.message.aggregate=Des infractions à la politique {0} ont eu lieu. -PolicyViolationException.message.projectionPassword=Le mot de passe fourni ne satisfait pas aux stratégies de mot de passe dans {0 }: {1} +PolicyViolationException.message.projectionPassword=Le mot de passe fourni ne satisfait pas aux politiques de mots de passe dans {0} : {1} PolicyViolationException.message.credentials.nonce=Provided nonce does not satisfy the policies: {0} PolicyViolationException.message.credentials.password=Le mot de passe fourni ne satisfait pas les règles: {0} PolicyViolationException.message.credentials.securityQuestions=Les questions de sécurité fournies ne satisfont pas aux règles : {0} @@ -1003,9 +1003,9 @@ PolicyConstraintsType.modification=Modification PolicyConstraintsType.modification.help=Contrainte déclenchée lorsque l'objet est modifié. PolicyConstraintsType.assignment=Attribution PolicyConstraintsType.assignment.help=Contrainte déclenchée lorsqu'un objet est attribué ou que l'attribution est retirée ou modifiée. -PolicyConstraintsType.objectTimeValidity=Object time validity +PolicyConstraintsType.objectTimeValidity=Durée de validité de l'objet PolicyConstraintsType.objectTimeValidity.help=Une contrainte qui se déclenche lorsque la validité d'un objet ou n'importe lequel de ses éléments asservis au temps (p.e. un mot de passe) est sur le point d'expirer. -PolicyConstraintsType.assignmentTimeValidity=Validité du temps d'attribution +PolicyConstraintsType.assignmentTimeValidity=Durée de validité des attributions PolicyConstraintsType.assignmentTimeValidity.help=Une contrainte qui se déclenche lorsque la validité d'une attribution ou n'importe lequel de ses éléments asservis au temps (p.e. un mot de passe) est sur le point d'expirer. PolicyConstraintsType.situation=Situation de politique PolicyConstraintsType.situation.help=Occurrence de la situation de politique au sein d'un objet ou d'une attribution. @@ -1088,8 +1088,8 @@ DefaultPolicyConstraint.Short.objectModification.toBeDeleted=Suppression de {0} DefaultPolicyConstraint.Short.objectModification.wasDeleted={0} supprimé(e) DefaultPolicyConstraint.Short.objectModification.toBeModified=Modification de {0} DefaultPolicyConstraint.Short.objectModification.wasModified={0} modifié(e) -DefaultPolicyConstraint.Short.objectState.unnamed=État d'appariement : {0} -DefaultPolicyConstraint.Short.objectState.named=État d'appariement : {0} (« {1} ») +DefaultPolicyConstraint.Short.objectState.unnamed=État d'appariement : {0} +DefaultPolicyConstraint.Short.objectState.named=État d'appariement : {0} (« {1} ») # {0} = before/after, {1} target/path, {2} rule name DefaultPolicyConstraint.Short.assignmentState.unnamed=État correspondant : attribution de {1} ({0}) DefaultPolicyConstraint.Short.assignmentState.named=État correspondant : attribution de {1} ({0}) (« {2} ») From eb6903a93551361b7e97229b80e4cf9f645e02ea Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Fri, 1 Mar 2019 14:55:03 +0100 Subject: [PATCH 05/12] Fix intra-cluster authentication (MID-5162) Also fixed the fix for TaskManagerQuartzImpl autowiring when profiling is enabled. --- .../NodeAuthenticationEvaluatorImpl.java | 105 +++++++++--------- .../midpoint/task/api/TaskManager.java | 7 ++ .../quartzimpl/TaskManagerQuartzImpl.java | 7 +- .../cluster/ClusterExecutionHelperImpl.java | 9 +- .../quartzimpl/execution/HandlerExecutor.java | 4 +- .../LightweightPartitioningTaskHandler.java | 2 +- 6 files changed, 76 insertions(+), 58 deletions(-) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/NodeAuthenticationEvaluatorImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/NodeAuthenticationEvaluatorImpl.java index 680c24e495d..29776336582 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/NodeAuthenticationEvaluatorImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/NodeAuthenticationEvaluatorImpl.java @@ -23,6 +23,7 @@ import com.evolveum.midpoint.prism.crypto.Protector; import com.evolveum.midpoint.task.api.TaskManager; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -55,7 +56,7 @@ public class NodeAuthenticationEvaluatorImpl implements NodeAuthenticationEvalua private static final String OPERATION_SEARCH_NODE = NodeAuthenticationEvaluatorImpl.class.getName() + ".searchNode"; - public boolean authenticate(@Nullable String remoteName, String remoteAddress, @Nullable String credentials, String operation) { + public boolean authenticate(@Nullable String remoteName, String remoteAddress, @NotNull String credentials, String operation) { LOGGER.debug("Checking if {} ({}) is a known node", remoteName, remoteAddress); OperationResult result = new OperationResult(OPERATION_SEARCH_NODE); @@ -63,45 +64,52 @@ public boolean authenticate(@Nullable String remoteName, String remoteAddress, @ try { List> allNodes = repositoryService.searchObjects(NodeType.class, null, null, result); - List> matchingNodes = getMatchingNodes(allNodes, remoteName, remoteAddress, operation); - - if (matchingNodes.size() == 1 || matchingNodes.size() >= 1 && taskManager.isLocalNodeClusteringEnabled()) { + List> matchingNodes = getMatchingNodes(allNodes, remoteName, remoteAddress); + + if (matchingNodes.isEmpty()) { + LOGGER.debug("Authenticity cannot be established: No matching nodes for remote name '{}' and remote address '{}'", + remoteName, remoteAddress); + } else if (matchingNodes.size() > 1 && !taskManager.isLocalNodeClusteringEnabled()) { + LOGGER.debug("Authenticity cannot be established: More than one matching node for remote name '{}' and " + + "remote address '{}' with local-node clustering disabled: {}", remoteName, remoteAddress, matchingNodes); + } else { + assert matchingNodes.size() == 1 || matchingNodes.size() > 1 && taskManager.isLocalNodeClusteringEnabled(); LOGGER.trace( - "Matching result: Node(s) {} recognized as known (remote host name {} or IP address {} matched). Attempting to execute the requested operation: {}", - allNodes, remoteName, remoteAddress, operation); + "Matching result: Node(s) {} recognized as known (remote host name {} or IP address {} matched).", + matchingNodes, remoteName, remoteAddress); PrismObject actualNode = null; - if (credentials != null) { - for (PrismObject matchingNode : matchingNodes) { - ProtectedStringType encryptedSecret = matchingNode.asObjectable().getSecret(); - if (encryptedSecret != null) { - String plainSecret; - try { - plainSecret = protector.decryptString(encryptedSecret); - } catch (EncryptionException e) { - LoggingUtils.logUnexpectedException(LOGGER, "Couldn't decrypt node secret for {}", e, matchingNode); - continue; - } - if (credentials.equals(plainSecret)) { - LOGGER.debug("Node secret matches for {}", matchingNode); - actualNode = matchingNode; - break; - } else { - LOGGER.debug("Node secret does not match for {}", matchingNode); - } + for (PrismObject matchingNode : matchingNodes) { + ProtectedStringType encryptedSecret = matchingNode.asObjectable().getSecret(); + if (encryptedSecret != null) { + String plainSecret; + try { + plainSecret = protector.decryptString(encryptedSecret); + } catch (EncryptionException e) { + LoggingUtils.logUnexpectedException(LOGGER, "Couldn't decrypt node secret for {}", e, matchingNode); + continue; + } + if (credentials.equals(plainSecret)) { + LOGGER.debug("Node secret matches for {}", matchingNode); + actualNode = matchingNode; + break; + } else { + LOGGER.debug("Node secret does not match for {}", matchingNode); } + } else { + LOGGER.debug("No secret known for node {}", matchingNode); } - } else { - actualNode = matchingNodes.get(0); } if (actualNode != null) { + LOGGER.trace("Established authenticity for remote {}", actualNode); NodeAuthenticationToken authNtoken = new NodeAuthenticationToken(actualNode, remoteAddress, Collections.emptyList()); SecurityContextHolder.getContext().setAuthentication(authNtoken); securityHelper.auditLoginSuccess(actualNode.asObjectable(), connEnv); return true; + } else { + LOGGER.debug("Authenticity for {} couldn't be established: none of the secrets match", matchingNodes); } } - } catch (RuntimeException | SchemaException e) { LOGGER.error("Unhandled exception when listing nodes"); LoggingUtils.logUnexpectedException(LOGGER, "Unhandled exception when listing nodes", e); @@ -110,27 +118,24 @@ public boolean authenticate(@Nullable String remoteName, String remoteAddress, @ return false; } -private List> getMatchingNodes(List> knownNodes, String remoteName, String remoteAddress, String operation) { - List> matchingNodes = new ArrayList<>(); - for (PrismObject node : knownNodes) { - NodeType actualNode = node.asObjectable(); - if (remoteName != null && remoteName.equalsIgnoreCase(actualNode.getHostname())) { - LOGGER.trace("The node {} was recognized as a known node (remote host name {} matched). Attempting to execute the requested operation: {} ", - actualNode.getName(), actualNode.getHostname(), operation); - matchingNodes.add(node); - continue; - } - if (actualNode.getIpAddress().contains(remoteAddress)) { - LOGGER.trace("The node {} was recognized as a known node (remote host address {} matched). Attempting to execute the requested operation: {} ", - actualNode.getName(), remoteAddress, operation); - matchingNodes.add(node); - continue; - } - } - - return matchingNodes; -} - - - + private List> getMatchingNodes(List> knownNodes, String remoteName, + String remoteAddress) { + List> matchingNodes = new ArrayList<>(); + for (PrismObject node : knownNodes) { + NodeType actualNode = node.asObjectable(); + if (remoteName != null && remoteName.equalsIgnoreCase(actualNode.getHostname())) { + LOGGER.trace("The node {} was recognized as a known node (remote host name {} matched).", + actualNode.getName(), actualNode.getHostname()); + matchingNodes.add(node); + continue; + } + if (actualNode.getIpAddress().contains(remoteAddress)) { + LOGGER.trace("The node {} was recognized as a known node (remote host address {} matched).", + actualNode.getName(), remoteAddress); + matchingNodes.add(node); + continue; + } + } + return matchingNodes; + } } diff --git a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskManager.java b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskManager.java index 35ef928292e..c18f3704ccf 100644 --- a/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskManager.java +++ b/repo/task-api/src/main/java/com/evolveum/midpoint/task/api/TaskManager.java @@ -740,4 +740,11 @@ String recordTaskThreadsDump(String taskOid, String cause, OperationResult paren * Use only for tests. Otherwise considered to be an ugly hack. */ RunningTask createFakeRunningTask(Task task); + + TaskHandler getHandler(String handlerUri); + + NodeType getLocalNode(); + + // TEMPORARY HACK -- DO NOT USE OUTSIDE task-quartz-impl module + Object getWorkStateManager(); } diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java index c26f85620b7..f5786467073 100644 --- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java +++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java @@ -42,6 +42,7 @@ import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; import org.jetbrains.annotations.NotNull; @@ -91,7 +92,6 @@ import com.evolveum.midpoint.task.api.LightweightIdentifierGenerator; import com.evolveum.midpoint.task.api.LightweightTaskHandler; import com.evolveum.midpoint.task.api.RunningTask; -import com.evolveum.midpoint.task.api.RunningTask; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.task.api.TaskCategory; import com.evolveum.midpoint.task.api.TaskDeletionListener; @@ -2548,5 +2548,8 @@ public RunningTaskQuartzImpl createFakeRunningTask(Task task) { return createRunningTask(task); } - + @Override + public NodeType getLocalNode() { + return ObjectTypeUtil.asObjectable(clusterManager.getLocalNodeObject()); + } } diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/cluster/ClusterExecutionHelperImpl.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/cluster/ClusterExecutionHelperImpl.java index fcbe48703d4..80c223c505a 100644 --- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/cluster/ClusterExecutionHelperImpl.java +++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/cluster/ClusterExecutionHelperImpl.java @@ -34,6 +34,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.NodeType; +import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; import org.apache.cxf.common.util.Base64Utility; import org.apache.cxf.jaxrs.client.WebClient; import org.jetbrains.annotations.NotNull; @@ -110,14 +111,16 @@ public void execute(@NotNull NodeType node, @NotNull BiConsumer Date: Fri, 1 Mar 2019 15:43:25 +0100 Subject: [PATCH 06/12] MID-5107 sorting for dropdown choices --- .../AssignmentActivationPopupablePanel.html | 77 -------- .../AssignmentActivationPopupablePanel.java | 181 ------------------ .../component/input/DropDownChoicePanel.java | 19 +- .../web/page/admin/server/PageTaskAdd.html | 2 +- .../web/page/admin/server/PageTaskAdd.java | 13 +- 5 files changed, 23 insertions(+), 269 deletions(-) delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.html delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.html deleted file mode 100644 index 5048d061eff..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.html +++ /dev/null @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2010-2017 Evolveum -* -* Licensed 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. -*/ - - -
-
-
- -
- -
- -
-
-
- -
-
-
-
-
-
-
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
- -
-
-
- - - diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.java deleted file mode 100644 index 50caabfb269..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentActivationPopupablePanel.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2010-2017 Evolveum - * - * Licensed 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 com.evolveum.midpoint.web.component.assignment; - -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.web.component.AjaxButton; -import com.evolveum.midpoint.web.component.DateInput; -import com.evolveum.midpoint.web.component.dialog.Popupable; -import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; -import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; -import org.apache.wicket.Component; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.model.StringResourceModel; - -/** - * Created by honchar. - * the panel could be used as a content panel for popup - * window as well as a standard page activation panel - */ -public class AssignmentActivationPopupablePanel extends BasePanel implements Popupable{ - private static final long serialVersionUID = 1L; - - private static final String ID_ACTIVATION = "activation"; - private static final String ID_ACTIVATION_BLOCK = "activationBlock"; - private static final String ID_ADMINISTRATIVE_STATUS = "administrativeStatus"; - private static final String ID_VALID_FROM = "validFrom"; - private static final String ID_VALID_TO = "validTo"; - private static final String ID_ADMIN_STATUS_CONTAINER = "administrativeStatusContainer"; - private static final String ID_VALID_FROM_CONTAINER = "validFromContainer"; - private static final String ID_VALID_TO_CONTAINER = "validToContainer"; - private static final String ID_OK_BUTTON = "okButton"; - private static final String ID_CANCEL_BUTTON = "cancelButton"; - private static final String ID_BUTTONS_PANEL = "buttonsPanel"; - - - public AssignmentActivationPopupablePanel(String id, IModel assignmentModel){ - super(id, assignmentModel); - initModelObject(); - initLayout(); - } - - private void initModelObject(){ - if (getModelObject() == null){ - getModel().setObject(new ActivationType()); - } - } - - private void initLayout(){ - WebMarkupContainer activationBlock = new WebMarkupContainer(ID_ACTIVATION_BLOCK); - activationBlock.setOutputMarkupId(true); - add(activationBlock); - - WebMarkupContainer adminStatusContainer = new WebMarkupContainer(ID_ADMIN_STATUS_CONTAINER); - adminStatusContainer.setOutputMarkupId(true); - activationBlock.add(adminStatusContainer); - - DropDownChoicePanel administrativeStatus = WebComponentUtil.createEnumPanel( - ActivationStatusType.class, ID_ADMINISTRATIVE_STATUS, - new PropertyModel(getModel(), ActivationType.F_ADMINISTRATIVE_STATUS.getLocalPart()), - this); - adminStatusContainer.add(administrativeStatus); - - WebMarkupContainer validFromContainer = new WebMarkupContainer(ID_VALID_FROM_CONTAINER); - validFromContainer.setOutputMarkupId(true); - activationBlock.add(validFromContainer); - - DateInput validFrom = new DateInput(ID_VALID_FROM, - AssignmentsUtil.createDateModel(new PropertyModel<>(getModel(), - ActivationType.F_VALID_FROM.getLocalPart()))); - validFromContainer.add(validFrom); - - WebMarkupContainer validToContainer = new WebMarkupContainer(ID_VALID_TO_CONTAINER); - validToContainer.setOutputMarkupId(true); - activationBlock.add(validToContainer); - - DateInput validTo = new DateInput(ID_VALID_TO, - AssignmentsUtil.createDateModel(new PropertyModel<>(getModel(), - ActivationType.F_VALID_TO.getLocalPart()))); - validToContainer.add(validTo); - - activationBlock.add(new VisibleEnableBehaviour() { - - @Override - public boolean isVisible() { - // enabled activation in assignments for now. - return true; - } - }); - - WebMarkupContainer buttonsPanel = new WebMarkupContainer(ID_BUTTONS_PANEL); - buttonsPanel.setOutputMarkupId(true); - buttonsPanel.add(new VisibleEnableBehaviour(){ - private static final long serialVersionUID = 1L; - - @Override - public boolean isVisible(){ - return getButtonsPanelVisibility(); - } - }); - add(buttonsPanel); - - AjaxButton okButton = new AjaxButton(ID_OK_BUTTON, createStringResource("AssignmentActivationPopupPanel.okButton")) { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget ajaxRequestTarget) { - getPageBase().hideMainPopup(ajaxRequestTarget); - reloadDateComponent(ajaxRequestTarget); - } - }; - buttonsPanel.add(okButton); - - AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, createStringResource("AssignmentActivationPopupPanel.cancelButton")) { - private static final long serialVersionUID = 1L; - @Override - public void onClick(AjaxRequestTarget ajaxRequestTarget) { - getPageBase().hideMainPopup(ajaxRequestTarget); - } - }; - buttonsPanel.add(cancelButton); - - WebComponentUtil.addAjaxOnUpdateBehavior((WebMarkupContainer)get(ID_ACTIVATION_BLOCK)); - - } - - protected void reloadDateComponent(AjaxRequestTarget target){ - } - - protected boolean getButtonsPanelVisibility(){ - return true; - } - - @Override - public int getWidth(){ - return 600; - } - - @Override - public int getHeight(){ - return 300; - } - - @Override - public String getWidthUnit(){ - return "px"; - } - - @Override - public String getHeightUnit(){ - return "px"; - } - - @Override - public StringResourceModel getTitle(){ - return createStringResource("AssignmentActivationPopupPanel.title"); - } - - @Override - public Component getComponent(){ - return this; - } -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/DropDownChoicePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/DropDownChoicePanel.java index 21e8152cc33..cbb2ebdf569 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/DropDownChoicePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/DropDownChoicePanel.java @@ -17,13 +17,17 @@ package com.evolveum.midpoint.web.component.input; import java.util.List; +import java.util.stream.Collectors; +import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.web.component.prism.InputPanel; +import org.apache.commons.lang.Validate; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; /** * @author lazyman @@ -49,7 +53,8 @@ public DropDownChoicePanel(String id, IModel model, IModel input = new DropDownChoice(ID_INPUT, model, choices, renderer) { + DropDownChoice input = new DropDownChoice(ID_INPUT, model, + Model.ofList(sortChoices(choices, renderer)), renderer) { private static final long serialVersionUID = 1L; @@ -71,6 +76,18 @@ protected String getNullValidDisplayValue() { add(input); } + private List sortChoices(IModel> choicesModel, IChoiceRenderer renderer){ + List sortedList = choicesModel.getObject().stream().sorted((choice1, choice2) -> { + Validate.notNull(choice1); + Validate.notNull(choice2); + + return String.CASE_INSENSITIVE_ORDER.compare(renderer.getDisplayValue(choice1).toString(), renderer.getDisplayValue(choice2).toString()); + + + }).collect(Collectors.toList()); + return sortedList; + } + @Override public DropDownChoice getBaseFormComponent() { return (DropDownChoice) get("input"); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.html index 3f7e1dfdece..4d2da928c86 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskAdd.html @@ -37,7 +37,7 @@

-