} catch (SchemaException ex) { parentResult.recordFatalError("Can't create shadow from identifiers: " + change.getIdentifiers()); throw new SchemaException("Can't create shadow from identifiers: " + change.getIdentifiers());
private List<PrismObject<ShadowType>> searchShadowByIdenifiers(ProvisioningContext ctx, Change change, OperationResult parentResult) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, ExpressionEvaluationException { Collection<ResourceAttribute<?>> identifiers = change.getIdentifiers(); ObjectQuery query = createSearchShadowQuery(ctx, identifiers, true, prismContext, parentResult); List<PrismObject<ShadowType>> accountList = null; try { accountList = repositoryService.searchObjects(ShadowType.class, query, null, parentResult); } catch (SchemaException ex) { parentResult.recordFatalError( "Failed to search shadow according to the identifiers: " + identifiers + ". Reason: " + ex.getMessage(), ex); throw new SchemaException("Failed to search shadow according to the identifiers: " + identifiers + ". Reason: " + ex.getMessage(), ex); } MiscSchemaUtil.reduceSearchResult(accountList); return accountList; }
@Test public void test200FetchChanges() throws Exception { final String TEST_NAME = "test200FetchChanges"; TestUtil.displayTestTitle(this, TEST_NAME); OperationResult result = new OperationResult(this.getClass().getName() + "." + TEST_NAME); ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findObjectClassDefinition(OpenDJController.OBJECT_CLASS_INETORGPERSON_NAME); PrismProperty<Integer> lastToken = cc.fetchCurrentToken(accountDefinition, null, result); System.out.println("Property:"); System.out.println(SchemaDebugUtil.prettyPrint(lastToken)); System.out.println("token " + lastToken.toString()); assertNotNull("No last token", lastToken); assertNotNull("No last token value", lastToken.getRealValue()); List<Change> changes = cc.fetchChanges(accountDefinition, lastToken, null, null, result); display("Changes", changes); // Just one pseudo-change that updates the token AssertJUnit.assertEquals(1, changes.size()); Change change = changes.get(0); assertNull(change.getCurrentShadow()); assertNull(change.getIdentifiers()); assertNull(change.getObjectDelta()); assertNotNull(change.getToken()); }
@Test public void test101FetchAddChange() throws Exception { final String TEST_NAME = "test101FetchAddChange"; TestUtil.displayTestTitle(this, TEST_NAME); OperationResult result = new OperationResult(this.getClass().getName() + "." + TEST_NAME); ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); PrismProperty<?> lastToken = cc.fetchCurrentToken(accountDefinition, null, result); assertNotNull("No last sync token", lastToken); // Add account to the resource dummyResource.setSyncStyle(DummySyncStyle.DUMB); DummyAccount newAccount = new DummyAccount("blackbeard"); newAccount.addAttributeValues("fullname", "Edward Teach"); newAccount.setEnabled(true); newAccount.setPassword("shiverMEtimbers"); dummyResource.addAccount(newAccount); // WHEN List<Change> changes = cc.fetchChanges(accountDefinition, lastToken, null, null, result); AssertJUnit.assertEquals(1, changes.size()); Change change = changes.get(0); assertNotNull("null change", change); PrismObject<ShadowType> currentShadow = change.getCurrentShadow(); assertNotNull("null current shadow", currentShadow); PrismAsserts.assertParentConsistency(currentShadow); Collection<ResourceAttribute<?>> identifiers = change.getIdentifiers(); assertNotNull("null identifiers", identifiers); assertFalse("empty identifiers", identifiers.isEmpty()); }
LOGGER.trace("Re-fetching object {} because it is not in the change", change.getIdentifiers()); currentShadow = fetchResourceObject(shadowCtx, change.getIdentifiers(), shadowAttrsToReturn, true, parentResult); // todo consider whether it is always necessary to fetch the entitlements change.setCurrentShadow(currentShadow); change.getIdentifiers()); identification.validatePrimaryIdenfiers(); LOGGER.trace("Re-fetching object {} because of attrsToReturn", identification);