@Test(enabled = true) public void test100SerializeContext() throws Exception { OperationResult result = new OperationResult("test100SerializeContext"); LensContext<UserType> context = new LensContext<UserType>(UserType.class, prismContext, provisioningService); PrismObject<UserType> bill = prismContext.parseObject(USER_BARBOSSA_FILE); CryptoUtil.encryptValues(protector, bill); ObjectDelta<UserType> userDelta = ObjectDelta.createAddDelta(bill); LensFocusContext<UserType> focusContext = context.getOrCreateFocusContext(); focusContext.setPrimaryDelta(userDelta); LensContextType contextType = context.toLensContextType(); JaxbValueContainer<LensContextType> container = new JaxbValueContainer<LensContextType>(contextType, prismContext); container.clearActualValue(); System.out.println("XML value = " + container.getXmlValue()); LensContextType contextTypeRetrieved = container.getValue(); LensContext<UserType> contextRetrieved = LensContext.fromLensContextType( contextTypeRetrieved, prismContext, provisioningService, result); assertEquals( "Context after serialization/deserialization does not match context before it (object to add is changed)", context.getFocusContext().getPrimaryDelta().getObjectToAdd(), contextRetrieved.getFocusContext().getPrimaryDelta().getObjectToAdd()); }
private void savePerformed(AjaxRequestTarget target) { ObjectViewDto dto = model.getObject(); if (StringUtils.isEmpty(dto.getXml())) { error(getString("pageResourceEdit.message.emptyXml")); target.add(getFeedbackPanel()); return; } Task task = createSimpleTask(OPERATION_SAVE_RESOURCE); OperationResult result = task.getResult(); try { Holder<PrismObject<ResourceType>> objectHolder = new Holder<PrismObject<ResourceType>>(null); validateObject(dto.getXml(), objectHolder, false, result); if (result.isAcceptable()) { PrismObject<ResourceType> newResource = objectHolder.getValue(); updateConnectorRef(newResource, task, result); if (!isEditing()) { // we're adding new resource ObjectDelta delta = ObjectDelta.createAddDelta(newResource); getModelService() .executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); } else { // we're editing existing resource PrismObject<ResourceType> oldResource = dto.getObject(); ObjectDelta<ResourceType> delta = oldResource.diff(newResource); getModelService() .executeChanges( WebMiscUtil.createDeltaCollection(delta), ModelExecuteOptions.createRaw(), task, result); } result.computeStatus(); } } catch (Exception ex) { LoggingUtils.logException(LOGGER, "Couldn't save resource", ex); result.recordFatalError("Couldn't save resource.", ex); } if (WebMiscUtil.isSuccessOrHandledError(result)) { showResultInSession(result); setResponsePage(PageResources.class); } else { showResult(result); target.add(getFeedbackPanel()); } }
private ObjectDelta createAddingObjectDelta() throws SchemaException { PrismObject object = this.object.clone(); List<ContainerWrapper> containers = getContainers(); // sort containers by path size Collections.sort(containers, new PathSizeComparator()); for (ContainerWrapper containerWrapper : getContainers()) { if (containerWrapper.getItemDefinition().getName().equals(ShadowType.F_ASSOCIATION)) { PrismContainer associationContainer = object.findOrCreateContainer(ShadowType.F_ASSOCIATION); List<AssociationWrapper> associationItemWrappers = (List<AssociationWrapper>) containerWrapper.getItems(); for (AssociationWrapper associationItemWrapper : associationItemWrappers) { List<ValueWrapper> assocValueWrappers = associationItemWrapper.getValues(); for (ValueWrapper assocValueWrapper : assocValueWrappers) { PrismContainerValue<ShadowAssociationType> assocValue = (PrismContainerValue<ShadowAssociationType>) assocValueWrapper.getValue(); associationContainer.add(assocValue.clone()); } } continue; } if (!containerWrapper.hasChanged()) { continue; } PrismContainer container = containerWrapper.getItem(); ItemPath path = containerWrapper.getPath(); if (containerWrapper.getPath() != null) { container = container.clone(); if (path.size() > 1) { ItemPath parentPath = path.allExceptLast(); PrismContainer parent = object.findOrCreateContainer(parentPath); parent.add(container); } else { PrismContainer existing = object.findContainer(container.getElementName()); if (existing == null) { object.add(container); } else { continue; } } } else { container = object; } for (ItemWrapper propertyWrapper : (List<ItemWrapper>) containerWrapper.getItems()) { if (!propertyWrapper.hasChanged()) { continue; } Item property = propertyWrapper.getItem().clone(); if (container.findProperty(property.getElementName()) != null) { continue; } for (ValueWrapper valueWrapper : propertyWrapper.getValues()) { valueWrapper.normalize(object.getPrismContext()); if (!valueWrapper.hasValueChanged() || ValueStatus.DELETED.equals(valueWrapper.getStatus())) { continue; } if (property.hasRealValue(valueWrapper.getValue())) { continue; } PrismValue cloned = clone(valueWrapper.getValue()); if (cloned != null) { property.add(cloned); } } if (!property.isEmpty()) { container.add(property); } } } // cleanup empty containers cleanupEmptyContainers(object); ObjectDelta delta = ObjectDelta.createAddDelta(object); // returning container to previous order Collections.sort(containers, new ItemWrapperComparator()); if (InternalsConfig.consistencyChecks) { delta.checkConsistence(true, true, true, ConsistencyCheckScope.THOROUGH); } return delta; }