From 69600d99bbeb6995a19ab4a3c4ea30aef4cec60c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Thu, 13 Dec 2018 11:55:00 +0100 Subject: [PATCH 1/3] Translation, WIP --- .../localization/Midpoint_cs.properties | 124 +++++++++--------- .../localization/Midpoint_pl.properties | 2 +- .../localization/schema_cs.properties | 2 +- 3 files changed, 64 insertions(+), 64 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 653465cd728..a3fa55b8f17 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties @@ -61,8 +61,8 @@ AssignmentEditorPanel.target=Cíl AssignmentEditorPanel.tenantRef=Klient AssignmentEditorPanel.undefined=Nedefinováno AssignmentEditorPanel.metadataBlock={0} Metadata -AssignmentEditorPanel.message.loadAttributes.fatalError=Exception occurred during assignment attribute loading. -AssignmentEditorPanel.message.getReference.fatalError=Couldn't get account construction resource ref. +AssignmentEditorPanel.message.loadAttributes.fatalError=V průběhu načítání atributů přiřazení došlo k výjimce. +AssignmentEditorPanel.message.getReference.fatalError=Nepodařilo se získat odkaz na aplikaci v konstrukci účtu. AssignmentAktivacePopupPanel.title=Aktivace AssignmentActivationPopupPanel.okButton=OK AssignmentActivationPopupPanel.cancelButton=Zrušit @@ -254,7 +254,7 @@ contentPanel.accounts=Obsah contentPanel.entitlements=Oprávnění CountToolbar.label={0,number,integer} až {1,number,integer} z {2,number,integer} CountToolbar.noFound=Nebylo nic nalezeno. -DataLanguagePanel.message.onStateChanged.fatalError=Couldn't change the language. +DataLanguagePanel.message.onStateChanged.fatalError=Nepodařilo se změnit jazyk. DateValidator.message.fromAfterTo=Položka Datum od musí být před položkou Datum do. DebugButtonPanel.button.delete=Smazat DebugButtonPanel.button.export=Exportovat @@ -380,7 +380,7 @@ feedtempMessagePanelbackMessagePanel.message.info=Informace fetchStrategy.nullValid=Vyberte jeden filter.duplicate=Filtr se jménem '{0}' je již definován filter.emptyFilter=Filtr nesmí být prázdný -FocusTypeAssignmentPopupTabPanel.message.addFilterToContentQuery.fatalError=Couldn't load available roles +FocusTypeAssignmentPopupTabPanel.message.addFilterToContentQuery.fatalError=Nepodařilo se načíst dostupné role H3Header.label.error=Chyba H3Header.showMore=Více HandlerUriActions.ACTION_ADD_FOCUS=Vložit vzorový objekt @@ -570,7 +570,7 @@ Message.SourceMemory=úloha v paměti (získáno {0}) Message.SourceRepository=repozitory (statistika aktualizována {0}) message.success=Vaše odpovědi byly úspěšně změmněny message.WrongAnswer=Otázky nebyly správně zodpovězeny -ModelInitialSetup.message.init.fatalError=Model post initialization failed. +ModelInitialSetup.message.init.fatalError=Došlo k selhání akcí návazných na inicializaci modelu. ModelOperationStatusPanel.label.focusName=Objekt: ModelOperationStatusPanel.label.focusType=Typ: ModelOperationStatusPanel.label.primaryDelta=Hlavní rozdílová změna: @@ -634,10 +634,10 @@ NotificationsStatistics.Min.Time=Min. NotificationsStatistics.TotalTime=Celkový čas NotificationsStatistics.Přenos=Přenos nullValid=Vyberte jeden -ObjectDataProvider.message.listObjects.fatalError=Couldn't list objects -ObjectDataProvider.message.countObjects.fatalError=Objekty se nepodařilo spočíst. -ObjectDataProvider.message.loadResourceForAccount.fatalError=Couldn't load resource for account. -ObjectDeltaOperationPanel.message.fetchOrVisualize.fatalError=Couldn't fetch or visualize the delta: {0} +ObjectDataProvider.message.listObjects.fatalError=Nepodařilo se získat seznam objektů. +ObjectDataProvider.message.countObjects.fatalError=Nepodařilo se spočítat objekty. +ObjectDataProvider.message.loadResourceForAccount.fatalError=Nepodařilo se načíst aplikaci účtu. +ObjectDeltaOperationPanel.message.fetchOrVisualize.fatalError=Nepodařilo se získat nebo vizualizovat rozdílovou (delta) změnu: {0} objectPolicyConfigurationUpravitor.button.edit=Upravit objectPolicyConfigurationEditor.label=Politiky objektu objectPolicyConfigurationEditor.name.placeholder=Vložit politiku objektu @@ -652,7 +652,7 @@ ObjectPolicyDialog.property.placeholder=Vložit cestu vlastnosti ObjectPolicyDialog.subtype=Podtyp objektu ObjectPolicyDialog.template=Šablona objektu ObjectPolicyDialog.type=Typ objektu -ObjectPolicyDialogDto.message.preparePolicyConfig.warning=Skipping setting property constraint, no path was defined. +ObjectPolicyDialogDto.message.preparePolicyConfig.warning=Nebylo možno nastavit pravidlo na vlastnost, nebyla definována cesta. ObjectPolicyConfigurationTabPanel.type=Typ ObjectPolicyConfigurationTabPanel.subtype=Podtyp ObjectPolicyConfigurationTabPanel.objectTemplate=Šablona objektu @@ -1180,7 +1180,7 @@ PageAdminObjectDetails.title.newSystemConfigurationType=Vytvořit novou konfigur PageAdminObjectDetails.title.editSystemConfigurationType=Upravit konfiguraci systému PageAdminObjectDetails.noChangesSave=Nebyly provedeny žádné změny, které by měly být uloženy. PageAdminObjectDetails.noChangesPreview=Nebyly provedeny žádné změny, které by mohly být zobrazeny v náhledu. -PageAdminObjectDetails.message.loadParentOrgs.warning=Cannot load parent org {0} +PageAdminObjectDetails.message.loadParentOrgs.warning=Nebylo možno načíst nadřazenou organizaci {0} pageAdminFocus.basic=Základní pageAdminFocus.message.cantEditFocus=Nastala neznámá chyba, Nepodařilo se upravit vzorový objekt. pageAdminFocus.message.cantNewFocus=Nastala neznámá chyba, Nepodařilo se vytvořit objekt vzorový objekt. @@ -1276,13 +1276,13 @@ PageBulkAction.button.start=Spustit PageBulkAction.message.emptyString=Vložená hronadná akce je prázdná. Vložte neprázdný skript. PageBulkAction.options=Nastavení PageBulkAction.title=Uživatelské hromadné operace -PageBulkAction.message.startPerformed.inProgress={0} has been successfully submitted to execution -PageBulkAction.message.startPerformed.success=Action executed. Returned {0} item(s). Console and data output available via 'Export to XML' function. -PageBulkAction.message.startPerformed.fatalError.execute=Couldn't execute bulk action -PageBulkAction.message.startPerformed.fatalError.submit=Couldn't submit bulk action to execution -PageBulkAction.message.startPerformed.fatalError.parse=Couldn't parse bulk action object -PageBulkAction.message.startPerformed.fatalError.provided=No bulk action object was provided. -PageBulkAction.message.startPerformed.fatalError.notBulkAction=Provided text is not a bulk action object. An instance of {0} is expected; you have provided {1} instead. +PageBulkAction.message.startPerformed.inProgress=Hromadná dávka {0} byla úspěšně odeslána k vykonání +PageBulkAction.message.startPerformed.success=Akce byla vykonána a bylo vráceno {0} objekt/y/ů. Výstup z konzole a výstupní data jsou k dispozici přes funkcionalitu 'Exportovat do XML'. +PageBulkAction.message.startPerformed.fatalError.execute=Nepodařilo se vykonat hromadnou změnu +PageBulkAction.message.startPerformed.fatalError.submit=Nepodařilo se odeslat hromadnou změnu k vykonání +PageBulkAction.message.startPerformed.fatalError.parse=Objekt hromadné změny se nepodařilo zpracovat. +PageBulkAction.message.startPerformed.fatalError.provided=Nebyl poskytnut objekt hromadné změny. +PageBulkAction.message.startPerformed.fatalError.notBulkAction=Dodaný text není objektem hromadného přiřazení. Je očekávána instance {0}; bylo však zadána instance {1} PageRepositoryQuery.title=Dotaz do repozitáře PageRepositoryQuery.button.translateAndExecute=Přeložit a provést PageRepositoryQuery.button.translate=Přeložit na Hibernate dotaz @@ -1491,7 +1491,7 @@ PageCertDefinition.scopeEnabledItemsOnly=Jen povolené položky PageCertDefinition.stagesDefinition=Definice fází PageCertDefinitions.message.deleteDefinitionPerformed.success=Došlo k úspěšnému smazání definice. PageCertDefinitions.message.deleteDefinitionPerformed.partialError=Nepodařilo se smazat definici kampaně. -PageCertDefinitions.message.createCampaignPerformed.warning=Definition '{0}' is for ad-hoc campaigns that cannot be started manually. +PageCertDefinitions.message.createCampaignPerformed.warning=Definice '{0}' odpovídá ad-hoc kampani. Tu není možno spustit manuálně. PageCert.in=za {0} PageCert.message.assignment={0} z {1} {2} až {3} {4}. PageCert.message.textAdministrativeState=Administrativní stav: {0}. @@ -1540,10 +1540,10 @@ StageDefinitionPanel.addNewStageButton = Přidat definici nové fáze StageDefinitionPanel.moveStageLeftButton = Přesunout doleva StageDefinitionPanel.moveStageRightButton = Přesunout doprava StageDefinitionPanel.deleteStageButton = Smazat tuto fázi -PageBase.message.parseObject.fatalError=Couldn't parse object: {0} -PageBase.message.loadAdminGuiConfiguration.fatalError=Couldn't load system configuration. -PageBase.message.loadDeploymentInformationType.fatalError=Couldn't load deployment information. -PageBase.message.getAdministratorPrivileged.fatalError=Couldn't get administrator user: {0} +PageBase.message.parseObject.fatalError=Nepodařilo se zpracovat objekt: {0} +PageBase.message.loadAdminGuiConfiguration.fatalError=Nepodařilo se načíst systémovou konfiguraci. +PageBase.message.loadDeploymentInformationType.fatalError=Nepodařilo se načíst informace o nasazení. +PageBase.message.getAdministratorPrivileged.fatalError=Nepodařilo se získat administrátorského uživatele: {0} PageContacts.title=Prohlížení kontaktů pageContentAccounts.button.searchButton=Hledat pageContentAccounts.dialog.title.confirmDelete=Potvrzení smazání @@ -1719,7 +1719,7 @@ PageForgetPassword.resetPassword=Resetovat heslo PageForgotPassword.title=Zapomenuté heslo PageForgetPassword.username=Uživatel PageForgotPassword.unsupported.reset.type=Nepodporovaný typ resetu hesla -PageForgotPassword.send.nonce.failed=Uživatelské heslo nemůže být zresetováno. Bude třeba kontaktovat Vašeho správce systému. +PageForgotPassword.send.nonce.failed=Uživatelské heslo se nepodařilo zresetovat. Bude třeba kontaktovat Vašeho správce systému. PageImportObject.button.import=Importovat objekt PageImportObject.embeddedEditor=Vložený editor PageImportObject.file=Soubor @@ -2314,10 +2314,10 @@ pageTasks.message.confirmationMessageForSingleTaskObject=Opravdu chcete {0} úlo pageTasks.message.confirmationMessageForMultipleTaskObject=Opravdu chcete {0} {1} vybraných úloh? pageTasks.message.confirmationMessageForSingleNodeObject=Opravdu chcete {0} uzel '{1}'? pageTasks.message.confirmationMessageForMultipleNodeObject=Opravdu chcete {0} {1} vybraných uzlů? -pageTasks.message.resumeTasksPerformed.success=The task(s) have been successfully resumed. -pageTasks.message.resumeTasksPerformed.fatalError=Couldn't resume the task(s) -pageTasks.message.synchronizeTasksPerformed.fatalError=Couldn't synchronize tasks -pageTasks.message.deleteAllClosedTasksConfirmedPerformed.fatalError=Error dealing with schema +pageTasks.message.resumeTasksPerformed.success=Došlo k úspěšnému pokračování v provádění úlohy či úloh. +pageTasks.message.resumeTasksPerformed.fatalError=Nepodařilo se pokračovat v provádění úlohy; +pageTasks.message.synchronizeTasksPerformed.fatalError=Nepodařilo se synchronizovat úlohy +pageTasks.message.deleteAllClosedTasksConfirmedPerformed.fatalError=Při práci se schématem došlo k chybě pageTask.scheduleHelp=Pro jednorázové úlohy nenastavujte interval opakování ani cron-like specifikaci. Pro opakující se úlohy nastavte buď jedno nebo druhé. pageTask.scheduleInterval=Interval spouštění (vteřiny) pageTask.scheduleTitle=Plánování @@ -2527,8 +2527,8 @@ pageWorkItem.requestedOn=Požádáno dne: pageWorkItem.requester.description=Žadatel pageWorkItem.requestSpecific.description=Vaše rozhodnutí WebComponentUtil.message.createMenuItemsFromActions.warning=Nebyly nalezeny žádné objekty, na kterých by se dala vykonat akce -WebComponentUtil.message.refreshResourceSchema.fatalError=Error refreshing resource schema -WebComponentUtil.message.getAssignableRolesFilter.fatalError=Couldn't load available roles +WebComponentUtil.message.refreshResourceSchema.fatalError=Došlo k chybě při načítání schématu aplikace +WebComponentUtil.message.getAssignableRolesFilter.fatalError=Nepodařilo se načíst dostupné role WebComponentUtil.formatDurationWordsForLocal.vteřin=vteřin WebComponentUtil.formatDurationWordsForLocal.minut=minut WebComponentUtil.formatDurationWordsForLocal.hodin=hodin @@ -2582,8 +2582,8 @@ workItemPanel.relatedRequests=Příbuzné žádosti workItemPanel.reasons=Zdůvodnění pro schvalovací proces workItemPanel.approverComment=Komentář schvalovatele workItemPanel.approverInstruction=Instrukce schvalovatele -PageTaskController.message.deleteSyncTokenPerformed.warning=Token is not present in this task. -PageTaskController.message.deleteSyncTokenPerformed.fatalError=Couldn't delete sync token from the task. +PageTaskController.message.deleteSyncTokenPerformed.warning=V této úloze není přítomen pešek. +PageTaskController.message.deleteSyncTokenPerformed.fatalError=Nepodařilo se smazat synchronizačního peška z úlohy. pageWorkItems.button.back=Zpět pageWorkItems.button.approve=Schválit pageWorkItems.button.claim=Převzít @@ -2597,12 +2597,12 @@ pageWorkItems.item.status=Stav pageWorkItems.message.noItemSelected=Nebyla vybrána žádná pracovní položka. pageWorkItems.message.noItemToBeReleased=Žádná z pracovních položek nemůže být uvolněna (pravděpodobná příčina je, že nebyly převzaty žádným uživatelem). pageWorkItems.message.success.approved=Pracovní položky byly úspěšně schváleny. -pageWorkItems.message.partialError.approved=Couldn't approve/reject work item due to an unexpected exception. +pageWorkItems.message.partialError.approved=Nepodařilo se schválit či zamítnout pracovní položku z důvodu neočekávané výjimky. pageWorkItems.message.success.rejected=Pracovní položky byly úspěšně zamítnuty. pageWorkItems.message.success.claimed=Pracovní položky byly úspěšně převzaty. -pageWorkItems.message.partialError.claimed=Couldn't claim work item due to an unexpected exception. +pageWorkItems.message.partialError.claimed=Pracovní položky se nepodařilo předat z důvodu neočekávané výjimky. pageWorkItems.message.success.released={0} pracovních položek bylo úspěšně uvolněno. -pageWorkItems.message.partialError.released=Couldn't release work item due to an unexpected exception. +pageWorkItems.message.partialError.released=Nepodařilo se uvolnit pracovní položku z důvodu neočekávané výjimky. PageWorkItemsAll.title=Všechny pracovní položky PageWorkItemsAllocatedToMe.title=Pracovní položky přiřazené mně PageWorkItem.title=Podrobnosti pracovní položky @@ -2675,7 +2675,7 @@ ProgressPanel.ExecutionTimeWhenFinished=Operace trvala {0} milivteřin. ProgressPanel.ExecutionTimeWhenRunning=Operace běží {0} vteřin. ProgressPanel.abortRequested=Bylo vyžádáno přerušení, prosím počkejte. ProgressPanel.abortRequestedFinished=Bylo vyžádáno přerušení, ale vykonávání úlohy už bylo pravděpodobně dokončeno. -ProgressPanel.abortRequestedNoInterrupt=Bylo vyžádáno přerušení, prosím počkejte. (poznámka: vlákno nelze přerušit) +ProgressPanel.abortRequestedNoInterrupt=Bylo vyžádáno přerušení, prosím počkejte. (poznámka: vlákno se nepodařilo přerušit) ProgressPanel.populateStatusItem.resourceObjectActivity={0} ({1}) na {2} ProgressTableHeader.Aktivita=Aktivita ProgressTableHeader.ResourceObject=Zdrojový objekt (pokud existuje) @@ -2714,7 +2714,7 @@ StáhnoutButtonPanel.download=Stáhnout ReconciliationPopupPanel.resource=Aplikace ReconciliationPopupPanel.title.basic=Základní konfigurace reportů rekonciliace repeater.input.nullValid=Vyberte jeden -RepoInitialSetup.message.init.fatalError=Repository post initialization failed. +RepoInitialSetup.message.init.fatalError=Selhaly kroky následné inicializaci repozitáře. ReportConfigurationPanel.title.basic=Základní ReportConfigurationPanel.title.advanced=Rozšířený Requestable.ALL=Vše @@ -2771,11 +2771,11 @@ ResourceAttributeEditor.label.tolerantVP=Tolerantní vzor ResourceAttributeEditor.message.cantParseSchema=Nepodařilo se zpracovat schéma aplikace ResourceAttributeEditor.title.delete=Smazat ResourceAttributeUpravitor.title.edit=Upravit -ResourceContentPanel.message.importResourceObject.warning=Nothing select to import -ResourceContentPanel.message.importResourceObject.partialError=Could not import account {0} -ResourceContentPanel.message.updateResourceObjectStatusPerformed.warning=Nothing selected to update status -ResourceContentPanel.message.updateResourceObjectStatusPerformed.partialError=Could not update status (to {0}) for {1} -ResourceContentPanel.message.deleteResourceObjectPerformed.warning=Nothing selected to delete +ResourceContentPanel.message.importResourceObject.warning=Nebylo nic vybráno k importu +ResourceContentPanel.message.importResourceObject.partialError=Nepodařilo se importovat účet {0} +ResourceContentPanel.message.updateResourceObjectStatusPerformed.warning=Nebylo nic vybráno k aktualizaci stavu +ResourceContentPanel.message.updateResourceObjectStatusPerformed.partialError=Nebylo možno aktualizovat stav (na {0}) pro {1} +ResourceContentPanel.message.deleteResourceObjectPerformed.warning=Nebylo vybráno nic ke smazání ResourceCredentialsEditor.label=Upravit pověření aplikace ResourceCredentialsEditor.label.fetchStrategy=Strategie získávání ResourceCredentialsEditor.label.inbound=Příchozí @@ -3301,7 +3301,7 @@ type.nullValid=Vyberte jeden Type.RECONCILIATION=Rekonciliace typeSelect.null=Všechny role Type.USERS=Uživatel -TypedAssignablePanel.message.addFilterToContentQuery.fatalError=Couldn't load available roles +TypedAssignablePanel.message.addFilterToContentQuery.fatalError=Nepodařilo se načíst dostupné role UploadPanel.delete.tooltip=Odebrat soubor UploadPanel.message.help=Vyberte soubor pro import. UploadPanel.message.removeError=Soubor nebyl odstraněn. @@ -3327,7 +3327,7 @@ UserMenuPanel.editPasswordQuestions=Bezpečnostní otázky UserMenuPanel.editProfile=Upravit profil UserMenuPanel.logout=Odhlásit se UserMenuPanel.resetPasswords=Reset hesla -UserMenuPanel.message.loadSecurityPolicyQuestionsModel.fatalError=Couldn't load system security policy {0} +UserMenuPanel.message.loadSecurityPolicyQuestionsModel.fatalError=Nepodařilo se načíst systémovou bezpečnostní politiku {0} UserOrgReferenceChoosePanel.type.org=Org. jednotka UserOrgReferenceChoosePanel.type=Typ vlastníka UživatelOrgReferenceChoosePanel.type.user=Uživatel @@ -3344,15 +3344,15 @@ user.noOrgs=Bez organizací validFromFetchStrategy.nullValid=Vyberte jeden validToFetchStrategy.nullValid=Vyberte jeden valueAttribute.nullValid=Vyberte jeden -WebModelUtils.couldntRunTask=Couldn't run task {0} -WebModelUtils.couldntLoadPasswordPolicies=Couldn't load password policies. -WebModelUtils.couldntAssumePowerAttorney=Couldn't assume power of attorney -WebModelUtils.couldntDropPowerAttorney=Couldn't drop power of attorney -WebModelUtils.couldntLoadSystemConfiguration=Couldn't load system configuration. +WebModelUtils.couldntRunTask=Nepodařilo se spustit úlohu {0} +WebModelUtils.couldntLoadPasswordPolicies=Nepodařilo se načíst politiky hesel +WebModelUtils.couldntAssumePowerAttorney=Nepodařilo se převzít moc zmocněnce +WebModelUtils.couldntDropPowerAttorney=Nepodařilo se odebrat moc zmocněnce +WebModelUtils.couldntLoadSystemConfiguration=Nepodařilo se načíst systémovou konfiguraci. WebModelUtils.couldntLoadObject=Nepodařilo se načíst objekt. -WebModelUtils.couldntSaveObject=Objekt se nepovedlo uložit. -WebModelUtils.couldntSearchObjects=Objekty se nepovedlo vyhledat. -WebModelUtils.couldntDeleteObject=Objekty se nepovedlo smazat. +WebModelUtils.couldntSaveObject=Objekt se nepodařilo uložit. +WebModelUtils.couldntSearchObjects=Objekty se nepodařilo vyhledat. +WebModelUtils.couldntDeleteObject=Objekty se nepodařilo smazat. WebModelUtils.couldntCountObjects=Objekty se nepodařilo spočíst. web.security.provider.access.denied=Přístup odepřen. Nemáte právo k přístupu, kontaktujte prosím administrátory Správce identit. web.security.provider.denied=Přístup odepřen. @@ -3372,13 +3372,13 @@ web.security.ldap.invalid=Chybné uživatelské jméno a/nebo heslo. web.security.ldap.invalid.link=Špatný odkaz web.security.ldap.locked=Uživatel je zamknutý, prosíme, počkejte. web.security.ldap.password.bad=Uživatel nemá určené heslo. -web.security.ldap.password.encoding=Systém nemohl přihlásit uživatele, důvod: Nelze zašifrovat heslo. +web.security.ldap.password.encoding=Nepodařilo se přihlásit uživatele, důvod: Nelze zašifrovat heslo. web.security.ldap.unavailable=Systém nyní nemůže zpracovat Váš požadavek. Prosíme, zkuste to znovu později. LdapAuthenticationProvider.badCredentials=Neplatné uživatelské jméno a/nebo heslo. LdapAuthenticationProvider.emptyUsername=Prázdné uživatelské jméno LdapAuthentication.incorrect.value=Typ principála (přihlášení uživatele) nesedí. LdapAuthentication.bad.user=Neznámý uživatel. -UserProfileServiceImpl.unknownUser=Uživatele nelze nalézt. +UserProfileServiceImpl.unknownUser=Nepodařilo se nalézt uživatele. AbstractLdapAuthenticationProvider.emptyPassword=Prázdné heslo. BindAuthenticator.badCredentials=Neplatné uživatelské jméno a/nebo heslo. WfDeltasPanel.label.deltaIn=Vstup procesu: Rozdílové změny ke schválení @@ -3857,7 +3857,7 @@ AssignmentConflictPanel.undoAction=Vrátit zpět PageAssignmentConflicts.title=Přiřazení jsou v konfliktu s PageAssignmentConflicts.back=Zpět PageAssignmentConflicts.submit=Odeslat -PageAssignmentsList.conflictsWarning=Unable to calculate assignment conflicts due to authorization problem. Reason: +PageAssignmentsList.conflictsWarning=Ve spočítání konfliktů přiřazení z důvodu brání problém s autorizací. Důvod: AbstractShoppingCartTabPanel.addAllButton=Přidat vše AbstractShoppingCartTabPanel.requestingForLabel=Žádáno pro: AbstractShoppingCartTabPanel.availableRelationsLabel=Dostupné vztahy @@ -4050,15 +4050,15 @@ operation.com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports.delete operation.com.evolveum.midpoint.report.impl.ReportManagerImpl.deleteReportOutput=Smazat report (Report) operation.com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports.downloadReport=Stáhnout report (GUI) operation..com.evolveum.midpoint.report.impl.ReportManagerImpl.getReportOutputData=Získat report (Report) -PageWorkItem.couldNotGetWorkItem=Systém nemohl nalézt pracovní položku. Možná byla smazána, nebo je již dokončena. -PageWorkItem.noRequest=Pracovní položku není možné zobrazit, protože není přidružena k žádnému požadavku na schvalování. Pokud problém přetrvává, spusťte prosím úlohu 'Vyčistit Activiti procesy' -PageCaseWorkItem.couldNotGetCase=Systém nemůže získat případ. Možná už byla dokončen nebo smazán. -PageCaseWorkItem.couldNotGetCaseWorkItem=Systém nemůže získat položku pracovního případu. Možná už byla dokončena nebo smazána. +PageWorkItem.couldNotGetWorkItem=Nepodařilo se nalézt pracovní položku. Možná byla smazána, nebo je již dokončena. +PageWorkItem.noRequest=Nepodařilo se zobrazit pracovní položku, protože není přidružena k žádnému požadavku na schvalování. Pokud problém přetrvává, spusťte prosím úlohu 'Vyčistit Activiti procesy' +PageCaseWorkItem.couldNotGetCase=Nepodařilo se získat případ. Možná už byla dokončen nebo smazán. +PageCaseWorkItem.couldNotGetCaseWorkItem=Nepodařilo se získat položku pracovního případu. Možná už byla dokončena nebo smazána. CsvDownloadButtonPanel.export=Exportovat do CSV CsvDownloadButtonPanel.confirmationMessage=Export do CSV formátu je omezen na {0} záznamů. Pokračovat? AssignmentEditorDto.policyRuleTitle=Pravidlo politiky -AssignmentEditorDto.message.prepareAssignmentAttributes.fatalError=Exception occurred during assignment attribute loading. -AssignmentEditorDto.message.getReference.fatalError=Couldn't get account construction resource ref. +AssignmentEditorDto.message.prepareAssignmentAttributes.fatalError=V průběhu načítání atributů přiřazení došlo k výjimce. +AssignmentEditorDto.message.getReference.fatalError=Nepodařilo se získat odkaz na aplikaci v konstrukci účtu. AssignmentDataTablePanel.targetColumnName=Cíl AssignmentDataTablePanel.validityColumnName=Platnost AssignmentDataTablePanel.organizationColumnName=Organizace @@ -4263,7 +4263,7 @@ WorkItemNotificationActionType.details.newValue=Nová pracovní položka notifik ResourceObjectAssociationType.details.newValue=Nová asociace objektu aplikace ResourceAttributeDefinitionType.details.newValue=Nová definice atributu aplikace MappingType.details.newValue=Nové mapování -FullTextSearchIndexedItemsConfigurationType.details.newValue=New full text search indexed items +FullTextSearchIndexedItemsConfigurationType.details.newValue=Nové fulltextové prohledávání indexovaných položek objectState.details=Stav objektu assignmentState.details=Stav přiřazení hasAssignment.details=Má přiřazení 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 645cf221ece..05bac6aec48 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties @@ -3857,7 +3857,7 @@ AssignmentConflictPanel.undoAction=Cofnij PageAssignmentConflicts.title=Konflikty przypisań PageAssignmentConflicts.back=Wstecz PageAssignmentConflicts.submit=Prześlij -PageAssignmentsList.conflictsWarning=Unable to calculate assignment conflicts due to authorization problem. Reason: +PageAssignmentsList.conflictsWarning=Nie można obliczyć konfliktów przypisać z powodu problemu z autoryzacją. Powód: AbstractShoppingCartTabPanel.addAllButton=Dodaj wszystko AbstractShoppingCartTabPanel.requestingForLabel=Wnioskuj dla AbstractShoppingCartTabPanel.availableRelationsLabel=Dostępne relacje diff --git a/infra/schema/src/main/resources/localization/schema_cs.properties b/infra/schema/src/main/resources/localization/schema_cs.properties index 1474e01dbe7..8857209d497 100644 --- a/infra/schema/src/main/resources/localization/schema_cs.properties +++ b/infra/schema/src/main/resources/localization/schema_cs.properties @@ -275,7 +275,7 @@ FileConfigurationType.name=Název SouborConfigurationType.file=Soubor FullTextSearchConfigurationType.enabled=Povolený FullTextSearchConfigurationType.indexed=Indexovaný -FullTextSearchIndexedItemsConfigurationType.details=Full text search indexed items +FullTextSearchIndexedItemsConfigurationType.details=Fulltextové prohledávání indexovaných položek FullTextSearchIndexedItemsConfigurationType.objectType=Typ objektu FullTextSearchIndexedPoložkasConfigurationType.item=Položka FocusType.activation=Aktivace From c787b827edf7952d1c6def0918f837168f8529c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20L=C3=ADzner?= Date: Thu, 13 Dec 2018 13:09:19 +0100 Subject: [PATCH 2/3] Travis: add retry for tests --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index a916f32fe61..55f9520f859 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ cache: before_install: - choco install maven - RefreshEnv.cmd - - export MAVEN_OPTS='-Xmx6g -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn' + - export MAVEN_OPTS='-Xmx6g' - export JAVA_HOME=`find "/c/Program Files/Java" -name jdk1.8.*` addons: @@ -24,6 +24,6 @@ env: matrix: include: - name: JDK8 - Run all excluding model-intest - script: mvn install -B -DskipTests; mvn verify -DskipModelIntTest=true -DskipModelUnitTest=true + script: mvn install -T 1C -q -DskipTests; mvn verify -DskipModelIntTest=true -DskipModelUnitTest=true -Dfailsafe.rerunFailingTestsCount=2 - name: JDK8 - Run only model-intest - script: mvn install -B -DskipTests; mvn verify -pl :model-intest + script: mvn install -T 1C -q -DskipTests; mvn verify -pl :model-intest -Dfailsafe.rerunFailingTestsCount=2 From 86003d82cd27f890ca45d177f2a4e97b0f9020de Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Thu, 13 Dec 2018 13:55:54 +0100 Subject: [PATCH 3/3] Filter in compiles object views (+tests) --- .../CompiledObjectCollectionView.java | 12 +- .../impl/security/UserProfileCompiler.java | 22 ++- .../midpoint/model/intest/TestArchetypes.java | 144 +++++++++++++++--- .../model/intest/TestPreviewChanges.java | 4 +- .../collection-active-employees.xml | 33 ++++ .../archetypes/role-user-administrator.xml | 75 +++++++++ .../system-configuration-archetypes.xml | 11 ++ .../asserter/CompiledUserProfileAsserter.java | 17 ++- .../ObjectCollectionViewAsserter.java | 58 +++++++ .../asserter/ObjectCollectionViewFinder.java | 88 +++++++++++ .../ObjectCollectionViewsAsserter.java | 67 ++++++++ 11 files changed, 503 insertions(+), 28 deletions(-) create mode 100644 model/model-intest/src/test/resources/archetypes/collection-active-employees.xml create mode 100644 model/model-intest/src/test/resources/archetypes/role-user-administrator.xml create mode 100644 model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewAsserter.java create mode 100644 model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewFinder.java create mode 100644 model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewsAsserter.java diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/authentication/CompiledObjectCollectionView.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/authentication/CompiledObjectCollectionView.java index a5a9645a871..0d45f82803c 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/authentication/CompiledObjectCollectionView.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/authentication/CompiledObjectCollectionView.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull; +import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.util.DebugDumpable; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.QNameUtil; @@ -54,6 +55,7 @@ public class CompiledObjectCollectionView implements DebugDumpable, Serializable private DistinctSearchOptionType distinct; private Boolean disableSorting; private SearchBoxConfigurationType searchBoxConfiguration; + private ObjectFilter filter; // Only used to construct "default" view definition. May be not needed later on. public CompiledObjectCollectionView() { @@ -141,6 +143,14 @@ public void setSearchBoxConfiguration(SearchBoxConfigurationType searchBoxConfig this.searchBoxConfiguration = searchBoxConfiguration; } + public ObjectFilter getFilter() { + return filter; + } + + public void setFilter(ObjectFilter filter) { + this.filter = filter; + } + public boolean match(QName expectedObjectType, String expectedViewName) { if (!QNameUtil.match(objectType, expectedObjectType)) { return false; @@ -176,7 +186,7 @@ public String debugDump(int indent) { DebugUtil.debugDumpWithLabelToStringLn(sb, "distinct", distinct, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "disableSorting", disableSorting, indent + 1); DebugUtil.debugDumpWithLabelToStringLn(sb, "searchBoxConfiguration", searchBoxConfiguration, indent + 1); - // TODO + DebugUtil.debugDumpWithLabel(sb, "filter", filter, indent + 1); return sb.toString(); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileCompiler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileCompiler.java index ab7556bb635..7e3ab836d1d 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileCompiler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileCompiler.java @@ -51,6 +51,7 @@ import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.PlusMinusZero; +import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.util.ItemDeltaItem; import com.evolveum.midpoint.prism.util.ObjectDeltaObject; import com.evolveum.midpoint.repo.api.RepositoryService; @@ -76,6 +77,8 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractObjectTypeConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationRoleManagementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ArchetypeType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CollectionSpecificationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType; @@ -92,6 +95,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFormsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OtherPrivilegesLimitationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType; @@ -455,8 +459,22 @@ private void compileCollection(CompiledObjectCollectionView existingView, GuiObj if (existingView.getCollection() != null) { LOGGER.debug("Redefining collection in view {}", existingView.getViewName()); } - // TODO: resolve collection, apply filter existingView.setCollection(collection); + + // Compute and apply filter + ObjectReferenceType collectionRef = collection.getCollectionRef(); + QName collectionRefType = collectionRef.getType(); + ObjectFilter filter = null; + + // TODO: support more cases + if (QNameUtil.match(ArchetypeType.COMPLEX_TYPE, collectionRefType)) { + filter = prismContext.queryFor(AssignmentHolderType.class) + .item(AssignmentHolderType.F_ARCHETYPE_REF).ref(collectionRef.getOid()) + .buildFilter(); + } + + // TODO: resolve (read) collection if needed + existingView.setFilter(filter); } private void compileColumns(CompiledObjectCollectionView existingView, GuiObjectListViewType objectListViewType) { @@ -505,8 +523,6 @@ private void compileSearchBox(CompiledObjectCollectionView existingView, GuiObje existingView.setSearchBoxConfiguration(newSearchBoxConfig); } - - private void joinForms(ObjectFormsType objectForms, ObjectFormType newForm) { objectForms.getObjectForm().removeIf(currentForm -> isTheSameObjectForm(currentForm, newForm)); objectForms.getObjectForm().add(newForm.clone()); diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestArchetypes.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestArchetypes.java index 04741ff5627..c50bf1385c3 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestArchetypes.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestArchetypes.java @@ -24,10 +24,15 @@ import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; +import com.evolveum.midpoint.model.api.authentication.CompiledUserProfile; import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.util.PrismTestUtil; +import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ObjectQueryUtil; import com.evolveum.midpoint.security.api.MidPointPrincipal; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; @@ -35,6 +40,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.RichHyperlinkType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; @@ -50,6 +56,7 @@ public class TestArchetypes extends AbstractInitializedModelIntegrationTest { public static final File TEST_DIR = new File("src/test/resources/archetypes"); public static final File SYSTEM_CONFIGURATION_ARCHETYPES_FILE = new File(TEST_DIR, "system-configuration-archetypes.xml"); + public static final String VIEW_ALL_EMPLOYEES_NAME = "All employees"; public static final File ARCHETYPE_EMPLOYEE_FILE = new File(TEST_DIR, "archetype-employee.xml"); protected static final String ARCHETYPE_EMPLOYEE_OID = "7135e68c-ee53-11e8-8025-170b77da3fd6"; @@ -61,13 +68,17 @@ public class TestArchetypes extends AbstractInitializedModelIntegrationTest { public static final File ROLE_EMPLOYEE_BASE_FILE = new File(TEST_DIR, "role-employee-base.xml"); protected static final String ROLE_EMPLOYEE_BASE_OID = "e869d6c4-f6ef-11e8-b51f-df3e51bba129"; + + public static final File ROLE_USER_ADMINISTRATOR_FILE = new File(TEST_DIR, "role-user-administrator.xml"); + protected static final String ROLE_USER_ADMINISTRATOR_OID = "6ae02e34-f8b0-11e8-9c40-87e142b606fe"; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); repoAddObjectFromFile(ROLE_EMPLOYEE_BASE_FILE, initResult); - repoAddObjectFromFile(ARCHETYPE_TEST_FILE, initResult); + repoAddObjectFromFile(ROLE_USER_ADMINISTRATOR_FILE, initResult); + repoAddObjectFromFile(ARCHETYPE_EMPLOYEE_FILE, initResult); addObject(SHADOW_GROUP_DUMMY_TESTERS_FILE, initTask, initResult); } @@ -78,8 +89,8 @@ protected File getSystemConfigurationFile() { } @Test - public void test050AddArchetypeEmployee() throws Exception { - final String TEST_NAME = "test050SetupJack"; + public void test050AddArchetypeTest() throws Exception { + final String TEST_NAME = "test050AddArchetypeTest"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); @@ -87,14 +98,33 @@ public void test050AddArchetypeEmployee() throws Exception { // WHEN displayWhen(TEST_NAME); - addObject(ARCHETYPE_EMPLOYEE_FILE, task, result); + addObject(ARCHETYPE_TEST_FILE, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); - PrismObject archetypeEmployee = modelService.getObject(ArchetypeType.class, ARCHETYPE_EMPLOYEE_OID, null, task, result); - display("Archetype employee", archetypeEmployee); + PrismObject archetypeTest = modelService.getObject(ArchetypeType.class, ARCHETYPE_TEST_OID, null, task, result); + display("Archetype test", archetypeTest); + } + + @Test + public void test060AssignGuybrushUserAdministrator() throws Exception { + final String TEST_NAME = "test060AssignGuybrushUserAdministrator"; + displayTestTitle(TEST_NAME); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + // WHEN + displayWhen(TEST_NAME); + assignRole(USER_GUYBRUSH_OID, ROLE_USER_ADMINISTRATOR_OID, task, result); + + // THEN + displayThen(TEST_NAME); + assertSuccess(result); + + // TODO: assert guybrush } @@ -134,11 +164,93 @@ public void test100AssignJackArchetypeEmployee() throws Exception { .assertPluralLabel(ARCHETYPE_EMPLOYEE_DISPLAY_PLURAL_LABEL); } + @Test + public void test102SearchEmployeeArchetypeRef() throws Exception { + final String TEST_NAME = "test102SearchEmployeeArchetypeRef"; + displayTestTitle(TEST_NAME); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + ObjectQuery query = queryFor(UserType.class) + .item(UserType.F_ARCHETYPE_REF).ref(ARCHETYPE_EMPLOYEE_OID) + .build(); + + // WHEN + displayWhen(TEST_NAME); + + SearchResultList> searchResults = modelService.searchObjects(UserType.class, query, null, task, result); + + // THEN + displayThen(TEST_NAME); + assertSuccess(result); + display("Search results", searchResults); + assertEquals("Wrong number of search results", 1, searchResults.size()); + PrismObject foundUser = searchResults.get(0); + assertUser(foundUser, "found user") + .assertName(USER_JACK_USERNAME) + .assertOid(USER_JACK_OID) + .assignments() + .assertAssignments(1) + .assertArchetype(ARCHETYPE_EMPLOYEE_OID) + .end() + .assertArchetypeRef(ARCHETYPE_EMPLOYEE_OID) + .roleMembershipRefs() + .assertRoleMemberhipRefs(1) + .assertArchetype(ARCHETYPE_EMPLOYEE_OID) + .end() + .getObject(); + } + + @Test + public void test104GetGuybryshCompiledUserProfile() throws Exception { + final String TEST_NAME = "test104GetGuybryshCompiledUserProfile"; + displayTestTitle(TEST_NAME); + + // GIVEN + login(USER_GUYBRUSH_USERNAME); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + // WHEN + CompiledUserProfile compiledUserProfile = modelInteractionService.getCompiledUserProfile(task, result); + + // THEN + assertSuccess(result); + + loginAdministrator(); + + ObjectFilter viewFilter = assertCompiledUserProfile(compiledUserProfile) + .assertAdditionalMenuLinks(0) + .assertUserDashboardLinks(0) + .assertObjectForms(0) + .assertUserDashboardWidgets(0) + .objectCollectionViews() + .single() + .assertName(VIEW_ALL_EMPLOYEES_NAME) + .assertFilter() + .getFilter(); + + ObjectQuery viewQuery = prismContext.queryFactory().createQuery(viewFilter, null); + SearchResultList> searchResults = modelService.searchObjects(UserType.class, viewQuery, null, task, result); + + display("Search results", searchResults); + assertEquals("Wrong number of search results", 1, searchResults.size()); + PrismObject foundUser = searchResults.get(0); + assertUser(foundUser, "found user") + .assertName(USER_JACK_USERNAME) + .assertOid(USER_JACK_OID); + + } + @Test public void test109UnassignJackArchetypeEmployee() throws Exception { final String TEST_NAME = "test109UnassignJackArchetypeEmployee"; displayTestTitle(TEST_NAME); + loginAdministrator(); + Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); @@ -274,19 +386,17 @@ public void test129UnassignJackArchetypeTest() throws Exception { assertSuccess(result); assertUserAfter(USER_JACK_OID) - .assignments() - .assertAssignments(0) - .end() - .assertNoArchetypeRef() - .roleMembershipRefs() - .assertRoleMemberhipRefs(0) - .end() - .links() - .assertNone(); + .assignments() + .assertAssignments(0) + .end() + .assertNoArchetypeRef() + .roleMembershipRefs() + .assertRoleMemberhipRefs(0) + .end() + .links() + .assertNone(); } - // TODO: search by archetypeRef - // TODO: object template in archetype // TODO: correct application of object template for new object (not yet stored) diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java index d6e1e15e63a..bef91443d48 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java @@ -411,8 +411,8 @@ private void assertAddAccount(ModelContext modelContext, boolean expec } @Test - public void test130GetAdminGuiConfig() throws Exception { - final String TEST_NAME = "test130GetAdminGuiConfig"; + public void test130GetCompiledUserProfile() throws Exception { + final String TEST_NAME = "test130GetCompiledUserProfile"; displayTestTitle(TEST_NAME); // GIVEN diff --git a/model/model-intest/src/test/resources/archetypes/collection-active-employees.xml b/model/model-intest/src/test/resources/archetypes/collection-active-employees.xml new file mode 100644 index 00000000000..3003f519e3b --- /dev/null +++ b/model/model-intest/src/test/resources/archetypes/collection-active-employees.xml @@ -0,0 +1,33 @@ + + + Active employees + UserType + + + activation/effectiveStatus + enabled + + + + + + diff --git a/model/model-intest/src/test/resources/archetypes/role-user-administrator.xml b/model/model-intest/src/test/resources/archetypes/role-user-administrator.xml new file mode 100644 index 00000000000..f9635a0ca18 --- /dev/null +++ b/model/model-intest/src/test/resources/archetypes/role-user-administrator.xml @@ -0,0 +1,75 @@ + + + + User administrator + Role for delegated administration of users. + + + self-read + + Allow to read all the properties of "self" object. I.e. every logged-in user can read + object that represent his own identity. + + http://midpoint.evolveum.com/xml/ns/public/security/authorization-model-3#read + + self + + + + + self-shadow-read + + Allow to read all the properties of all the shadows that belong to "self" object. + I.e. every logged-in user can read all his accounts. + + http://midpoint.evolveum.com/xml/ns/public/security/authorization-model-3#read + + ShadowType + + self + + + + + + assignment-target-read + + Authorization that allows to read all the object that are possible assignment targets. We want that + to display the targets in the selection windows. + Note that this authorization may be too broad for production use. Normally it should be limited to just + selected properties such as name and description. + + http://midpoint.evolveum.com/xml/ns/public/security/authorization-model-3#read + + OrgType + + + ResourceType + + + RoleType + + + ServiceType + + + + + + diff --git a/model/model-intest/src/test/resources/archetypes/system-configuration-archetypes.xml b/model/model-intest/src/test/resources/archetypes/system-configuration-archetypes.xml index 712d2184ef1..56efa0af7d9 100644 --- a/model/model-intest/src/test/resources/archetypes/system-configuration-archetypes.xml +++ b/model/model-intest/src/test/resources/archetypes/system-configuration-archetypes.xml @@ -194,5 +194,16 @@ 30 + + + + All employees + UserType + + + + + + diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/CompiledUserProfileAsserter.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/CompiledUserProfileAsserter.java index a63371b7fe6..2c0cca4073f 100644 --- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/CompiledUserProfileAsserter.java +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/CompiledUserProfileAsserter.java @@ -17,16 +17,13 @@ import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; import org.testng.AssertJUnit; -import com.evolveum.midpoint.model.api.ArchetypeInteractionSpecification; import com.evolveum.midpoint.model.api.authentication.CompiledUserProfile; import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.asserter.AbstractAsserter; -import com.evolveum.midpoint.test.asserter.ArchetypePolicyAsserter; -import com.evolveum.midpoint.test.asserter.DisplayTypeAsserter; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ArchetypePolicyType; /** * @author semancik @@ -62,7 +59,11 @@ public CompiledUserProfileAsserter assertUserDashboardLinks(int expectedLink } public CompiledUserProfileAsserter assertObjectForms(int expectedForms) { - assertEquals("Wrong number of object forms in " + desc(), expectedForms, getCompiledUserProfile().getObjectForms().getObjectForm().size()); + if (getCompiledUserProfile().getObjectForms() == null) { + assertTrue("Wrong number of object forms in " + desc() + "; exected " + expectedForms + " but was null", expectedForms == 0); + } else { + assertEquals("Wrong number of object forms in " + desc(), expectedForms, getCompiledUserProfile().getObjectForms().getObjectForm().size()); + } return this; } @@ -83,6 +84,12 @@ public CompiledUserProfileAsserter assertObjectCollectionViews(int expectedV return this; } + public ObjectCollectionViewsAsserter> objectCollectionViews() { + ObjectCollectionViewsAsserter> asserter = new ObjectCollectionViewsAsserter<>(getCompiledUserProfile().getObjectCollectionViews(), this, desc()); + copySetupTo(asserter); + return asserter; + } + // TODO: better asserter for views public CompiledUserProfileAsserter display() { diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewAsserter.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewAsserter.java new file mode 100644 index 00000000000..56ec294f600 --- /dev/null +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewAsserter.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2018 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.model.test.asserter; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNotNull; + +import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.test.asserter.AbstractAsserter; + +/** + * @author semancik + * + */ +public class ObjectCollectionViewAsserter extends AbstractAsserter { + + private final CompiledObjectCollectionView view; + + public ObjectCollectionViewAsserter(CompiledObjectCollectionView view, RA returnAsserter, String desc) { + super(returnAsserter, desc); + this.view = view; + } + + public ObjectCollectionViewAsserter assertName(String expected) { + assertEquals("Wrong view name in "+desc(), expected, view.getViewName()); + return this; + } + + public ObjectCollectionViewAsserter assertFilter() { + assertNotNull("Null filter in "+desc(), view.getFilter()); + return this; + } + // TODO + + public ObjectFilter getFilter() { + return view.getFilter(); + } + + @Override + protected String desc() { + return descWithDetails(view); + } + +} diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewFinder.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewFinder.java new file mode 100644 index 00000000000..0a07e7da22c --- /dev/null +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewFinder.java @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2018 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.model.test.asserter; + +import static org.testng.AssertJUnit.assertEquals; + +import org.testng.AssertJUnit; + +import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; +import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.SchemaException; + +/** + * @author semancik + * + */ +public class ObjectCollectionViewFinder { + + private final ObjectCollectionViewsAsserter viewsAsserter; + private String name; + + public ObjectCollectionViewFinder(ObjectCollectionViewsAsserter viewsAsserter) { + this.viewsAsserter = viewsAsserter; + } + + public ObjectCollectionViewFinder name(String name) { + this.name = name; + return this; + } + + public ObjectCollectionViewAsserter> find() throws ObjectNotFoundException, SchemaException { + CompiledObjectCollectionView found = null; + for (CompiledObjectCollectionView view: viewsAsserter.getViews()) { + if (matches(view)) { + if (found == null) { + found = view; + } else { + fail("Found more than one link that matches search criteria"); + } + } + } + if (found == null) { + fail("Found no link that matches search criteria"); + } + return viewsAsserter.forView(found); + } + + public ObjectCollectionViewsAsserter assertCount(int expectedCount) throws ObjectNotFoundException, SchemaException { + int foundCount = 0; + for (CompiledObjectCollectionView view: viewsAsserter.getViews()) { + if (matches(view)) { + foundCount++; + } + } + assertEquals("Wrong number of links for specified criteria in "+viewsAsserter.desc(), expectedCount, foundCount); + return viewsAsserter; + } + + private boolean matches(CompiledObjectCollectionView view) throws ObjectNotFoundException, SchemaException { + + if (name != null) { + if (!name.equals(view.getViewName())) { + return false; + } + } + + // TODO: more criteria + return true; + } + + protected void fail(String message) { + AssertJUnit.fail(message); + } + +} diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewsAsserter.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewsAsserter.java new file mode 100644 index 00000000000..915e86f17c8 --- /dev/null +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/asserter/ObjectCollectionViewsAsserter.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2018 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.model.test.asserter; + +import static org.testng.AssertJUnit.assertEquals; + +import java.util.List; + +import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; +import com.evolveum.midpoint.test.asserter.AbstractAsserter; + +/** + * @author semancik + * + */ +public class ObjectCollectionViewsAsserter extends AbstractAsserter { + + private final List objectCollectionViews; + + public ObjectCollectionViewsAsserter(List objectCollectionViews, RA returnAsserter, String desc) { + super(returnAsserter, desc); + this.objectCollectionViews = objectCollectionViews; + } + + ObjectCollectionViewAsserter> forView(CompiledObjectCollectionView view) { + ObjectCollectionViewAsserter> asserter = new ObjectCollectionViewAsserter<>(view, this, "view in "+desc()); + copySetupTo(asserter); + return asserter; + } + + public ObjectCollectionViewFinder by() { + return new ObjectCollectionViewFinder<>(this); + } + + public List getViews() { + return objectCollectionViews; + } + + public ObjectCollectionViewsAsserter assertViews(int expected) { + assertEquals("Wrong number of views in "+desc(), expected, getViews().size()); + return this; + } + + public ObjectCollectionViewAsserter> single() { + assertViews(1); + return forView(getViews().get(0)); + } + + @Override + protected String desc() { + return "object collection views of " + getDetails(); + } + +}