private void mountFiles(String path, Class<?> clazz) { try { List<Resource> list = new ArrayList<>(); String packagePath = clazz.getPackage().getName().replace('.', '/'); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] res = resolver.getResources("classpath:" + packagePath + "/*.png"); if (res != null) { list.addAll(Arrays.asList(res)); } res = resolver.getResources("classpath:" + packagePath + "/*.gif"); if (res != null) { list.addAll(Arrays.asList(res)); } for (Resource resource : list) { URI uri = resource.getURI(); File file = new File(uri.toString()); mountResource( path + "/" + file.getName(), new SharedResourceReference(clazz, file.getName())); } } catch (Exception ex) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't mount files", ex); } }
@Override public void run() { LOGGER.info("ClusterManager thread starting."); long delay = taskManager.getConfiguration().getNodeRegistrationCycleTime() * 1000L; while (canRun) { OperationResult result = new OperationResult(ClusterManagerThread.class + ".run"); try { checkSystemConfigurationChanged(result); // these checks are separate in order to prevent a failure in one method blocking // execution of others try { checkClusterConfiguration(result); // if error, the scheduler will be stopped nodeRegistrar.updateNodeObject( result); // however, we want to update repo even in that case } catch (Throwable t) { LoggingUtils.logException( LOGGER, "Unexpected exception while checking cluster configuration; continuing execution.", t); } try { checkWaitingTasks(result); } catch (Throwable t) { LoggingUtils.logException( LOGGER, "Unexpected exception while checking waiting tasks; continuing execution.", t); } try { checkStalledTasks(result); } catch (Throwable t) { LoggingUtils.logException( LOGGER, "Unexpected exception while checking stalled tasks; continuing execution.", t); } } catch (Throwable t) { LoggingUtils.logException( LOGGER, "Unexpected exception in ClusterManager thread; continuing execution.", t); } LOGGER.trace("ClusterManager thread sleeping for " + delay + " msec"); try { Thread.sleep(delay); } catch (InterruptedException e) { LOGGER.trace("ClusterManager thread interrupted."); } } LOGGER.info("ClusterManager thread stopping."); }
private ObjectWrapper loadUserWrapper(PrismObject<UserType> userToEdit) { OperationResult result = new OperationResult(OPERATION_LOAD_USER); PrismObject<UserType> user = null; try { Collection options = SelectorOptions.createCollection( UserType.F_CREDENTIALS, GetOperationOptions.createRetrieve(RetrieveOption.INCLUDE)); Task task = createSimpleTask(OPERATION_LOAD_USER); user = getModelService() .getObject( UserType.class, SecurityUtils.getPrincipalUser().getOid(), options, task, result); result.recordSuccess(); } catch (Exception ex) { result.recordFatalError("Couldn't get user.", ex); LoggingUtils.logException(LOGGER, "Couldn't load user PageMyQuestions", ex); } if (!result.isSuccess()) { showResultInSession(result); } if (user == null) { throw new RestartResponseException(PageDashboard.class); } ContainerStatus status = ContainerStatus.MODIFYING; ObjectWrapperFactory owf = new ObjectWrapperFactory(this); ObjectWrapper wrapper; try { wrapper = owf.createObjectWrapper("pageMyPasswordQuestions.userDetails", null, user, status); } catch (Exception ex) { result.recordFatalError("Couldn't get user.", ex); LoggingUtils.logException(LOGGER, "Couldn't load user", ex); wrapper = owf.createObjectWrapper( "pageMyPasswordQuestions.userDetails", null, user, null, null, status, false); } // ObjectWrapper wrapper = new ObjectWrapper("pageUser.userDetails", null, user, status); if (owf.getResult() != null && !WebMiscUtil.isSuccessOrHandledError(wrapper.getResult())) { showResultInSession(wrapper.getResult()); } return wrapper; }
public static InputStream createReport( ReportOutputType report, AjaxDownloadBehaviorFromStream ajaxDownloadBehaviorFromStream, PageBase pageBase) { OperationResult result = new OperationResult(OPERATION_DOWNLOAD_REPORT); ReportManager reportManager = pageBase.getReportManager(); if (report == null) { return null; } String contentType = reportExportTypeMap.get(report.getExportType()); if (StringUtils.isEmpty(contentType)) { contentType = "multipart/mixed; charset=UTF-8"; } ajaxDownloadBehaviorFromStream.setContentType(contentType); InputStream input = null; try { input = reportManager.getReportOutputData(report.getOid(), result); } catch (Exception e) { pageBase.error( pageBase.getString("pageCreatedReports.message.downloadError") + " " + e.getMessage()); LoggingUtils.logUnexpectedException(LOGGER, "Couldn't download report.", e); LOGGER.trace(result.debugDump()); } finally { result.computeStatusIfUnknown(); } if (WebComponentUtil.showResultInPage(result)) { pageBase.showResult(result); } return input; }
private PasswordQuestionsDto loadPageModel() { LOGGER.debug("Loading user for Security Question Page."); PasswordQuestionsDto dto = new PasswordQuestionsDto(); OperationResult result = new OperationResult(OPERATION_LOAD_USER); try { String userOid = SecurityUtils.getPrincipalUser().getOid(); Task task = createSimpleTask(OPERATION_LOAD_USER); OperationResult subResult = result.createSubresult(OPERATION_LOAD_USER); PrismObject<UserType> user = getModelService().getObject(UserType.class, userOid, null, task, subResult); dto.setSecurityAnswers(createUsersSecurityQuestionsList(user)); subResult.recordSuccessIfUnknown(); } catch (Exception ex) { LoggingUtils.logExceptionOnDebugLevel( LOGGER, "Couldn't get user Questions, Probably not set yet", ex); } finally { result.recomputeStatus(); } return dto; }
private void savePerformed(boolean raw, String operationName, AjaxRequestTarget target) { clearOldFeedback(); OperationResult result = new OperationResult(operationName); if (!validateInput(raw)) { error(getString("pageImportObject.message.nullFile")); target.add(getFeedbackPanel()); return; } InputStream stream = null; try { Task task = createSimpleTask(operationName); stream = getInputStream(raw); getModelService().importObjectsFromStream(stream, model.getObject(), task, result); result.recomputeStatus(); } catch (Exception ex) { result.recordFatalError("Couldn't import file.", ex); LoggingUtils.logUnexpectedException(LOGGER, "Couldn't import file", ex); } finally { if (stream != null) { IOUtils.closeQuietly(stream); } } showResult(result); target.add(PageImportObject.this); }
public void stopClusterManagerThread(long waitTime, OperationResult parentResult) { OperationResult result = parentResult.createSubresult(ClusterManager.class.getName() + ".stopClusterManagerThread"); result.addParam("waitTime", waitTime); if (clusterManagerThread != null) { clusterManagerThread.signalShutdown(); try { clusterManagerThread.join(waitTime); } catch (InterruptedException e) { LoggingUtils.logException( LOGGER, "Waiting for ClusterManagerThread shutdown was interrupted", e); } if (clusterManagerThread.isAlive()) { result.recordWarning( "ClusterManagerThread shutdown requested but after " + waitTime + " ms it is still running."); } else { result.recordSuccess(); } } else { result.recordSuccess(); } }
private void updateAccountStatusPerformed( AjaxRequestTarget target, AccountContentDto dto, boolean enabled) { List<AccountContentDto> accounts = isAnythingSelected(target, dto); OperationResult result = new OperationResult(OPERATION_ADJUST_ACCOUNT_STATUS); if (accounts.isEmpty()) { return; } ActivationStatusType status = enabled ? ActivationStatusType.ENABLED : ActivationStatusType.DISABLED; for (AccountContentDto acc : accounts) { ObjectDelta delta = ObjectDelta.createModificationReplaceProperty( ShadowType.class, acc.getAccountOid(), new ItemPath(ShadowType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS), getPrismContext(), status); try { Task task = createSimpleTask(OPERATION_ADJUST_ACCOUNT_STATUS); getModelService() .executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); } catch (Exception e) { LoggingUtils.logException(LOGGER, "Couldn't enable/disable account(s) on resource", e); result.recordPartialError("Couldn't enable/disable account(s) on resource", e); } } result.recomputeStatus(); showResult(result); target.add(getFeedbackPanel()); }
private void importReportFromStreamPerformed(AjaxRequestTarget target) { String xml = xmlEditorModel.getObject(); if (StringUtils.isEmpty(xml)) { error(getString("PageNewReport.message.emptyXml")); target.add(getFeedbackPanel()); return; } OperationResult result = new OperationResult(OPERATION_IMPORT_REPORT_XML); InputStream stream = null; try { setResponsePage(new PageReport(new ReportDto(Base64.encodeBase64(xml.getBytes())))); } catch (Exception ex) { result.recordFatalError("Couldn't import object.", ex); LoggingUtils.logException(LOGGER, "Error occured during xml import", ex); } finally { if (stream != null) { IOUtils.closeQuietly(stream); } } if (result.isSuccess()) { xmlEditorModel.setObject(null); } showResult(result); target.add(getFeedbackPanel()); }
private void importAccount(AjaxRequestTarget target, AccountContentDto row) { List<AccountContentDto> accounts = isAnythingSelected(target, row); if (accounts.isEmpty()) { return; } OperationResult result = new OperationResult(OPERATION_CREATE_USER_FROM_ACCOUNTS); for (AccountContentDto dto : accounts) { OperationResult subResult = result.createMinorSubresult(OPERATION_CREATE_USER_FROM_ACCOUNT); try { getModelService() .importFromResource( dto.getAccountOid(), createSimpleTask(OPERATION_CREATE_USER_FROM_ACCOUNT), subResult); } catch (Exception ex) { subResult.computeStatus( getString("pageContentAccounts.message.cantImportAccount", dto.getAccountOid())); LoggingUtils.logException( LOGGER, "Can't import account {},oid={}", ex, dto.getAccountName(), dto.getAccountOid()); } finally { subResult.computeStatusIfUnknown(); } } result.computeStatus(); showResult(result); target.add(getFeedbackPanel()); target.add(getTable()); }
private ObjectQuery createQuery() { AccountContentSearchDto dto = searchModel.getObject(); if (StringUtils.isEmpty(dto.getSearchText())) { return null; } try { ObjectQuery query = null; List<ObjectFilter> conditions = new ArrayList<>(); ObjectClassComplexTypeDefinition def = getAccountDefinition(); if (dto.isIdentifiers()) { List<ResourceAttributeDefinition> identifiers = new ArrayList<>(); if (def.getIdentifiers() != null) { identifiers.addAll(def.getIdentifiers()); } // TODO set matching rule instead fo null for (ResourceAttributeDefinition attrDef : identifiers) { conditions.add( EqualFilter.createEqual( new ItemPath(ShadowType.F_ATTRIBUTES, attrDef.getName()), attrDef, dto.getSearchText())); } } if (dto.isName()) { List<ResourceAttributeDefinition> secondaryIdentifiers = new ArrayList<>(); if (def.getNamingAttribute() != null) { secondaryIdentifiers.add(def.getNamingAttribute()); } else if (def.getSecondaryIdentifiers() != null) { secondaryIdentifiers.addAll(def.getSecondaryIdentifiers()); } for (ResourceAttributeDefinition attrDef : secondaryIdentifiers) { conditions.add( SubstringFilter.createSubstring( new ItemPath(ShadowType.F_ATTRIBUTES, attrDef.getName()), attrDef, dto.getSearchText())); } } if (!conditions.isEmpty()) { if (conditions.size() > 1) { query = ObjectQuery.createObjectQuery(OrFilter.createOr(conditions)); } else { query = ObjectQuery.createObjectQuery(conditions.get(0)); } } return query; } catch (Exception ex) { error(getString("pageUsers.message.queryError") + " " + ex.getMessage()); LoggingUtils.logException(LOGGER, "Couldn't create query filter.", ex); } return null; }
private InputStream createReport() { OperationResult result = new OperationResult(OPERATION_DOWNLOAD_REPORT); ReportManager reportManager = getReportManager(); if (currentReport == null) { return null; } InputStream input = null; try { input = reportManager.getReportOutputData(currentReport.getOid(), result); } catch (Exception e) { error(getString("pageCreatedReports.message.downloadError") + " " + e.getMessage()); LoggingUtils.logException(LOGGER, "Couldn't download report.", e); LOGGER.trace(result.debugDump()); } finally { result.computeStatusIfUnknown(); } if (WebMiscUtil.showResultInPage(result)) { showResultInSession(result); } return input; }
private void deleteDefinitionPerformed( AjaxRequestTarget target, AccessCertificationDefinitionType definition) { OperationResult result = new OperationResult(OPERATION_DELETE_DEFINITION); try { Task task = createSimpleTask(OPERATION_DELETE_DEFINITION); ObjectDelta<AccessCertificationDefinitionType> delta = ObjectDelta.createDeleteDelta( AccessCertificationDefinitionType.class, definition.getOid(), getPrismContext()); getModelService() .executeChanges(WebComponentUtil.createDeltaCollection(delta), null, task, result); } catch (Exception ex) { result.recordPartialError("Couldn't delete campaign definition.", ex); LoggingUtils.logUnexpectedException(LOGGER, "Couldn't delete campaign definition", ex); } result.computeStatusIfUnknown(); if (result.isSuccess()) { result.recordStatus( OperationResultStatus.SUCCESS, "The definition has been successfully deleted."); } getDefinitionsTable().clearCache(); showResult(result); target.add(getFeedbackPanel(), getDefinitionsTable()); }
private ObjectQuery getAssociationsSearchQuery( PrismContext prismContext, PrismObject resource, QName objectClass, ShadowKindType kind, String intent) { try { ObjectFilter andFilter = AndFilter.createAnd( EqualFilter.createEqual( ShadowType.F_OBJECT_CLASS, ShadowType.class, prismContext, objectClass), EqualFilter.createEqual(ShadowType.F_KIND, ShadowType.class, prismContext, kind), // EqualFilter.createEqual(ShadowType.F_INTENT, ShadowType.class, // prismContext, intent), RefFilter.createReferenceEqual( new ItemPath(ShadowType.F_RESOURCE_REF), ShadowType.class, prismContext, resource.getOid())); ObjectQuery query = ObjectQuery.createObjectQuery(andFilter); return query; } catch (SchemaException ex) { LoggingUtils.logUnexpectedException(LOGGER, "Unable to create associations search query", ex); return null; } }
private void importReportFromFilePerformed(AjaxRequestTarget target) { OperationResult result = new OperationResult(OPERATION_IMPORT_REPORT); FileUploadField file = (FileUploadField) get(createComponentPath(ID_MAIN_FORM, ID_INPUT, ID_INPUT_FILE, ID_FILE_INPUT)); final FileUpload uploadedFile = file.getFileUpload(); if (uploadedFile == null) { error(getString("PageNewReport.message.nullFile")); target.add(getFeedbackPanel()); return; } InputStream stream = null; File newFile = null; try { // Create new file MidPointApplication application = getMidpointApplication(); WebApplicationConfiguration config = application.getWebApplicationConfiguration(); File folder = new File(config.getImportFolder()); if (!folder.exists() || !folder.isDirectory()) { folder.mkdir(); } newFile = new File(folder, uploadedFile.getClientFileName()); // Check new file, delete if it already exists if (newFile.exists()) { newFile.delete(); } // Save file // Task task = createSimpleTask(OPERATION_IMPORT_FILE); newFile.createNewFile(); uploadedFile.writeTo(newFile); InputStreamReader reader = new InputStreamReader(new FileInputStream(newFile), "utf-8"); // reader. stream = new ReaderInputStream(reader, reader.getEncoding()); byte[] reportIn = IOUtils.toByteArray(stream); setResponsePage(new PageReport(new ReportDto(Base64.encodeBase64(reportIn)))); } catch (Exception ex) { result.recordFatalError("Couldn't import file.", ex); LoggingUtils.logException(LOGGER, "Couldn't import file", ex); } finally { if (stream != null) { IOUtils.closeQuietly(stream); } if (newFile != null) { FileUtils.deleteQuietly(newFile); } } showResult(result); target.add(getFeedbackPanel()); }
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 void deleteConfirmedPerformed(AjaxRequestTarget target) { List<AccountContentDto> selected = new ArrayList<AccountContentDto>(); if (singleDelete != null) { selected.add(singleDelete); } else { selected = isAnythingSelected(target, null); } OperationResult result = new OperationResult(OPERATION_DELETE_ACCOUNT_FROM_RESOURCE); for (AccountContentDto acc : selected) { String accOid = acc.getAccountOid(); try { Task task = createSimpleTask(OPERATION_DELETE_ACCOUNT_FROM_RESOURCE); ObjectDelta delta = ObjectDelta.createDeleteDelta(ShadowType.class, accOid, getPrismContext()); getModelService() .executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); } catch (Exception e) { result.recordPartialError("Couldn't delete account from resource.", e); LoggingUtils.logException(LOGGER, "Couldn't delete account from resource", e); } } if (result.isUnknown()) { result.recomputeStatus("Error occurred during resource account deletion."); } if (result.isSuccess()) { result.recordStatus( OperationResultStatus.SUCCESS, "Selected accounts have been successfully deleted."); } AccountContentDataProvider provider = (AccountContentDataProvider) getTable().getDataTable().getDataProvider(); provider.clearCache(); TablePanel table = getTable(); target.add(table); showResult(result); target.add(getFeedbackPanel()); }
private ObjectViewDto loadResource() { if (!isEditing()) { return new ObjectViewDto(); } ObjectViewDto dto; try { PrismObject<ResourceType> resource = loadResource(null); String xml = getPrismContext().serializeObjectToString(resource, PrismContext.LANG_XML); dto = new ObjectViewDto(resource.getOid(), WebMiscUtil.getName(resource), resource, xml); } catch (Exception ex) { LoggingUtils.logException(LOGGER, "Couldn't load resource", ex); throw new RestartResponseException(PageResources.class); } return dto; }
@Override public Object getObject() { PrismProperty property; try { property = getPrismObject().findOrCreateProperty(path); } catch (SchemaException ex) { LoggingUtils.logException(LOGGER, "Couldn't create property in path {}", ex, path); // todo show message in page error [lazyman] throw new RestartResponseException(PageError.class); } Object val = getRealValue(property != null ? property.getRealValue() : null); if (val == null) { return defaultValue; } else { return val; } }
private ObjectQuery createQuery() { ReportOutputSearchDto dto = searchModel.getObject(); try { List<ObjectFilter> ands = new ArrayList<>(); if (StringUtils.isNotEmpty(dto.getText())) { PolyStringNormalizer normalizer = getPrismContext().getDefaultPolyStringNormalizer(); String normalizedString = normalizer.normalize(dto.getText()); SubstringFilter substring = SubstringFilter.createSubstring( ReportOutputType.F_NAME, ReportOutputType.class, getPrismContext(), PolyStringNormMatchingRule.NAME, normalizedString); ands.add(substring); } String oid = dto.getReportTypeMap().get(dto.getReportType()); if (StringUtils.isNotEmpty(oid)) { RefFilter ref = RefFilter.createReferenceEqual( ReportOutputType.F_REPORT_REF, ReportOutputType.class, getPrismContext(), oid); ands.add(ref); } switch (ands.size()) { case 0: return null; case 1: return ObjectQuery.createObjectQuery(ands.get(0)); default: AndFilter and = AndFilter.createAnd(ands); return ObjectQuery.createObjectQuery(and); } } catch (Exception e) { error(getString("pageCreatedReports.message.queryError") + " " + e.getMessage()); LoggingUtils.logException(LOGGER, "Couldn't create query filter.", e); return null; } }
@Override public void setObject(Object object) { try { PrismProperty property = getPrismObject().findOrCreateProperty(path); if (object != null) { PrismPropertyDefinition def = property.getDefinition(); if (PolyString.class.equals(def.getTypeClass())) { object = new PolyString((String) object); } property.setValue(new PrismPropertyValue(object, OriginType.USER_ACTION, null)); } else { PrismContainerValue parent = (PrismContainerValue) property.getParent(); parent.remove(property); } } catch (Exception ex) { LoggingUtils.logException(LOGGER, "Couldn't update prism property model", ex); } }
private UiWidget initWidget(String type, List<PropertyType> properties) { try { Class<? extends UiWidget> clazz = UiRegistry.getWidget(type); Constructor<? extends UiWidget> constructor = clazz.getConstructor(String.class, IModel.class); UiWidget widget = constructor.newInstance("widget", createValueModel()); widget.setProperties(properties); return widget; } catch (Exception ex) { StringBuilder builder = new StringBuilder(); StructuredFormUtils.createMessage(ex, builder); error(builder.toString()); LoggingUtils.logException(LOGGER, "Couldn't create widget", ex); } return new TextWidget("widget", createValueModel()); }
private HookOperationMode applyScenario( GeneralChangeProcessorScenarioType scenarioType, GcpScenarioBean scenarioBean, ModelContext context, Task taskFromModel, OperationResult result) { try { // ========== preparing root task =========== JobCreationInstruction rootInstruction = baseModelInvocationProcessingHelper.createInstructionForRoot( this, context, taskFromModel); Job rootJob = baseModelInvocationProcessingHelper.createRootJob(rootInstruction, taskFromModel, result); // ========== preparing child task, starting WF process =========== JobCreationInstruction instruction = scenarioBean.prepareJobCreationInstruction( scenarioType, (LensContext<?>) context, rootJob, taskFromModel, result); jobController.createJob(instruction, rootJob, result); // ========== complete the action =========== baseModelInvocationProcessingHelper.logJobsBeforeStart(rootJob, result); rootJob.startWaitingForSubtasks(result); return HookOperationMode.BACKGROUND; } catch (SchemaException | ObjectNotFoundException | CommunicationException | ConfigurationException | RuntimeException e) { LoggingUtils.logException(LOGGER, "Workflow process(es) could not be started", e); result.recordFatalError("Workflow process(es) could not be started: " + e, e); return HookOperationMode.ERROR; // todo rollback - at least close open tasks, maybe stop workflow process instances } }
private void ownerChangePerformed(AjaxRequestTarget target, UserType user) { AccountOwnerChangeDto dto = ownerChangeModel.getObject(); OperationResult result = new OperationResult(OPERATION_CHANGE_OWNER); try { Task task = createSimpleTask(OPERATION_CHANGE_OWNER); if (StringUtils.isNotEmpty(dto.getOldOwnerOid())) { ObjectDelta delta = new ObjectDelta(UserType.class, ChangeType.MODIFY, getPrismContext()); delta.setOid(dto.getOldOwnerOid()); PrismReferenceValue refValue = new PrismReferenceValue(dto.getAccountOid()); refValue.setTargetType(dto.getAccountType()); delta.addModification( ReferenceDelta.createModificationDelete( UserType.class, UserType.F_LINK_REF, getPrismContext(), refValue)); getModelService() .executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); } if (user != null) { ObjectDelta delta = new ObjectDelta(UserType.class, ChangeType.MODIFY, getPrismContext()); delta.setOid(user.getOid()); PrismReferenceValue refValue = new PrismReferenceValue(dto.getAccountOid()); refValue.setTargetType(dto.getAccountType()); delta.addModification( ReferenceDelta.createModificationAdd( UserType.class, UserType.F_LINK_REF, getPrismContext(), refValue)); getModelService() .executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result); } result.recomputeStatus(); } catch (Exception ex) { result.recordFatalError("Couldn't submit user.", ex); LoggingUtils.logException(LOGGER, "Couldn't submit user", ex); } showResult(result); target.add(getFeedbackPanel()); }
public List<SecurityQuestionAnswerDTO> createUsersSecurityQuestionsList( PrismObject<UserType> user) { LOGGER.debug("Security Questions Loading for user: "******"User SecurityQuestion ANswer List is Not null"); List<SecurityQuestionAnswerDTO> secQuestAnswListDTO = new ArrayList<SecurityQuestionAnswerDTO>(); for (Iterator iterator = secQuestAnsList.iterator(); iterator.hasNext(); ) { SecurityQuestionAnswerType securityQuestionAnswerType = (SecurityQuestionAnswerType) iterator.next(); Protector protector = getPrismContext().getDefaultProtector(); String decoded = ""; if (securityQuestionAnswerType.getQuestionAnswer().getEncryptedDataType() != null) { try { decoded = protector.decryptString(securityQuestionAnswerType.getQuestionAnswer()); } catch (EncryptionException e) { LoggingUtils.logException(LOGGER, "Couldn't decrypt user answer", e); } } // LOGGER.debug("SecAnswerIdentifier:"+securityQuestionAnswerType.getQuestionIdentifier()); secQuestAnswListDTO.add( new SecurityQuestionAnswerDTO( securityQuestionAnswerType.getQuestionIdentifier(), decoded)); } return secQuestAnswListDTO; } } return null; }
private void savePerformed(AjaxRequestTarget target, boolean decision) { LOGGER.debug("Saving work item changes."); OperationResult result = new OperationResult(OPERATION_SAVE_WORK_ITEM); try { WorkItemDto dto = workItemDtoModel.getObject(); getWorkflowService() .approveOrRejectWorkItem(dto.getWorkItemId(), decision, dto.getApproverComment(), result); } catch (Exception ex) { result.recordFatalError("Couldn't save work item.", ex); LoggingUtils.logUnexpectedException(LOGGER, "Couldn't save work item", ex); } result.computeStatusIfUnknown(); if (!result.isSuccess()) { showResult(result, false); target.add(getFeedbackPanel()); } else { showResult(result); redirectBack(); } }
private List<ObjectReferenceType> createResourceList() { resourceMap.clear(); OperationResult result = new OperationResult(OPERATION_LOAD_RESOURCES); Task task = getPageBase().createSimpleTask(OPERATION_LOAD_RESOURCES); List<PrismObject<ResourceType>> resources = null; List<ObjectReferenceType> references = new ArrayList<>(); try { resources = getPageBase() .getModelService() .searchObjects(ResourceType.class, new ObjectQuery(), null, task, result); result.recomputeStatus(); } catch (Exception e) { result.recordFatalError("Couldn't get resource list.", e); LoggingUtils.logException(LOGGER, "Couldn't get resource list.", e); } // TODO - show error somehow // if(!result.isSuccess()){ // getPageBase().showResult(result); // } if (resources != null) { ObjectReferenceType ref; for (PrismObject<ResourceType> r : resources) { resourceMap.put(r.getOid(), WebMiscUtil.getName(r)); ref = new ObjectReferenceType(); ref.setType(ResourceType.COMPLEX_TYPE); ref.setOid(r.getOid()); references.add(ref); } } return references; }
private List<ItemWrapper> createProperties(PageBase pageBase) { result = new OperationResult(CREATE_PROPERTIES); List<ItemWrapper> properties = new ArrayList<ItemWrapper>(); PrismContainerDefinition definition = null; PrismObject parent = getObject().getObject(); Class clazz = parent.getCompileTimeClass(); if (ShadowType.class.isAssignableFrom(clazz)) { QName name = containerDefinition.getName(); if (ShadowType.F_ATTRIBUTES.equals(name)) { try { definition = objectWrapper.getRefinedAttributeDefinition(); if (definition == null) { PrismReference resourceRef = parent.findReference(ShadowType.F_RESOURCE_REF); PrismObject<ResourceType> resource = resourceRef.getValue().getObject(); definition = pageBase .getModelInteractionService() .getEditObjectClassDefinition( (PrismObject<ShadowType>) objectWrapper.getObject(), resource, AuthorizationPhaseType.REQUEST) .toResourceAttributeContainerDefinition(); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Refined account def:\n{}", definition.debugDump()); } } } catch (Exception ex) { LoggingUtils.logException( LOGGER, "Couldn't load definitions from refined schema for shadow", ex); result.recordFatalError( "Couldn't load definitions from refined schema for shadow, reason: " + ex.getMessage(), ex); return properties; } } else { definition = containerDefinition; } } else if (ResourceType.class.isAssignableFrom(clazz)) { if (containerDefinition != null) { definition = containerDefinition; } else { definition = container.getDefinition(); } } else { definition = containerDefinition; } if (definition == null) { LOGGER.error( "Couldn't get property list from null definition {}", new Object[] {container.getElementName()}); return properties; } // assignments are treated in a special way -- we display names of // org.units and roles // (but only if ObjectWrapper.isShowAssignments() is true; otherwise // they are filtered out by ObjectWrapper) if (container.getCompileTimeClass() != null && AssignmentType.class.isAssignableFrom(container.getCompileTimeClass())) { for (Object o : container.getValues()) { PrismContainerValue<AssignmentType> pcv = (PrismContainerValue<AssignmentType>) o; AssignmentType assignmentType = pcv.asContainerable(); if (assignmentType.getTargetRef() == null) { continue; } // hack... we want to create a definition for Name // PrismPropertyDefinition def = ((PrismContainerValue) // pcv.getContainer().getParent()).getContainer().findProperty(ObjectType.F_NAME).getDefinition(); PrismPropertyDefinition def = new PrismPropertyDefinition( ObjectType.F_NAME, DOMUtil.XSD_STRING, pcv.getPrismContext()); if (OrgType.COMPLEX_TYPE.equals(assignmentType.getTargetRef().getType())) { def.setDisplayName("Org.Unit"); def.setDisplayOrder(100); } else if (RoleType.COMPLEX_TYPE.equals(assignmentType.getTargetRef().getType())) { def.setDisplayName("Role"); def.setDisplayOrder(200); } else { continue; } PrismProperty<Object> temp = def.instantiate(); String value = formatAssignmentBrief(assignmentType); temp.setValue(new PrismPropertyValue<Object>(value)); // TODO: do this.isReadOnly() - is that OK? (originally it was the default behavior for all // cases) properties.add(new PropertyWrapper(this, temp, this.isReadonly(), ValueStatus.NOT_CHANGED)); } } else if (isShadowAssociation()) { PrismContext prismContext = objectWrapper.getObject().getPrismContext(); Map<QName, PrismContainer<ShadowAssociationType>> assocMap = new HashMap<>(); if (objectWrapper.getAssociations() != null) { for (PrismContainerValue<ShadowAssociationType> cval : objectWrapper.getAssociations()) { ShadowAssociationType associationType = cval.asContainerable(); QName assocName = associationType.getName(); PrismContainer<ShadowAssociationType> fractionalContainer = assocMap.get(assocName); if (fractionalContainer == null) { fractionalContainer = new PrismContainer<>( ShadowType.F_ASSOCIATION, ShadowAssociationType.class, cval.getPrismContext()); fractionalContainer.setDefinition(cval.getParent().getDefinition()); // HACK: set the name of the association as the element name so wrapper.getName() will // return correct data. fractionalContainer.setElementName(assocName); assocMap.put(assocName, fractionalContainer); } try { fractionalContainer.add(cval.clone()); } catch (SchemaException e) { // Should not happen throw new SystemException("Unexpected error: " + e.getMessage(), e); } } } PrismReference resourceRef = parent.findReference(ShadowType.F_RESOURCE_REF); PrismObject<ResourceType> resource = resourceRef.getValue().getObject(); // HACK. The revive should not be here. Revive is no good. The next use of the resource will // cause parsing of resource schema. We need some centralized place to maintain live cached // copies // of resources. try { resource.revive(prismContext); } catch (SchemaException e) { throw new SystemException(e.getMessage(), e); } RefinedResourceSchema refinedSchema; CompositeRefinedObjectClassDefinition rOcDef; try { refinedSchema = RefinedResourceSchema.getRefinedSchema(resource); rOcDef = refinedSchema.determineCompositeObjectClassDefinition(parent); } catch (SchemaException e) { throw new SystemException(e.getMessage(), e); } // Make sure even empty associations have their wrappers so they can be displayed and edited for (RefinedAssociationDefinition assocDef : rOcDef.getAssociations()) { QName name = assocDef.getName(); if (!assocMap.containsKey(name)) { PrismContainer<ShadowAssociationType> fractionalContainer = new PrismContainer<>( ShadowType.F_ASSOCIATION, ShadowAssociationType.class, prismContext); fractionalContainer.setDefinition(getItemDefinition()); // HACK: set the name of the association as the element name so wrapper.getName() will // return correct data. fractionalContainer.setElementName(name); assocMap.put(name, fractionalContainer); } } for (Entry<QName, PrismContainer<ShadowAssociationType>> assocEntry : assocMap.entrySet()) { // HACK HACK HACK, the container wrapper should not parse itself. This code should not be // here. AssociationWrapper assocWrapper = new AssociationWrapper( this, assocEntry.getValue(), this.isReadonly(), ValueStatus.NOT_CHANGED); properties.add(assocWrapper); } } else { // if not an assignment if ((container.getValues().size() == 1 || container.getValues().isEmpty()) && (containerDefinition == null || containerDefinition.isSingleValue())) { // there's no point in showing properties for non-single-valued // parent containers, // so we continue only if the parent is single-valued Collection<ItemDefinition> propertyDefinitions = definition.getDefinitions(); for (ItemDefinition itemDef : propertyDefinitions) { if (itemDef instanceof PrismPropertyDefinition) { PrismPropertyDefinition def = (PrismPropertyDefinition) itemDef; if (def.isIgnored() || skipProperty(def)) { continue; } if (!showInheritedObjectAttributes && INHERITED_OBJECT_ATTRIBUTES.contains(def.getName())) { continue; } // capability handling for activation properties if (isShadowActivation() && !hasCapability(def)) { continue; } if (isShadowAssociation()) { continue; } PrismProperty property = container.findProperty(def.getName()); boolean propertyIsReadOnly; // decision is based on parent object status, not this // container's one (because container can be added also // to an existing object) if (objectWrapper.getStatus() == ContainerStatus.MODIFYING) { propertyIsReadOnly = !def.canModify(); } else { propertyIsReadOnly = !def.canAdd(); } if (property == null) { properties.add( new PropertyWrapper( this, def.instantiate(), propertyIsReadOnly, ValueStatus.ADDED)); } else { properties.add( new PropertyWrapper(this, property, propertyIsReadOnly, ValueStatus.NOT_CHANGED)); } } else if (itemDef instanceof PrismReferenceDefinition) { PrismReferenceDefinition def = (PrismReferenceDefinition) itemDef; if (INHERITED_OBJECT_ATTRIBUTES.contains(def.getName())) { continue; } PrismReference reference = container.findReference(def.getName()); boolean propertyIsReadOnly; // decision is based on parent object status, not this // container's one (because container can be added also // to an existing object) if (objectWrapper.getStatus() == ContainerStatus.MODIFYING) { propertyIsReadOnly = !def.canModify(); } else { propertyIsReadOnly = !def.canAdd(); } if (reference == null) { properties.add( new ReferenceWrapper( this, def.instantiate(), propertyIsReadOnly, ValueStatus.ADDED)); } else { properties.add( new ReferenceWrapper( this, reference, propertyIsReadOnly, ValueStatus.NOT_CHANGED)); } } } } } Collections.sort(properties, new ItemWrapperComparator()); result.recomputeStatus(); return properties; }
static { List<LocaleDescriptor> locales = new ArrayList<>(); try { ClassLoader classLoader = MidPointApplication.class.getClassLoader(); Enumeration<URL> urls = classLoader.getResources(LOCALIZATION_DESCRIPTOR); while (urls.hasMoreElements()) { final URL url = urls.nextElement(); LOGGER.debug("Found localization descriptor {}.", new Object[] {url.toString()}); Properties properties = new Properties(); Reader reader = null; try { reader = new InputStreamReader(url.openStream(), "utf-8"); properties.load(reader); Map<String, Map<String, String>> localeMap = new HashMap<>(); Set<String> keys = (Set) properties.keySet(); for (String key : keys) { String[] array = key.split("\\."); if (array.length != 2) { continue; } String locale = array[0]; Map<String, String> map = localeMap.get(locale); if (map == null) { map = new HashMap<>(); localeMap.put(locale, map); } map.put(key, properties.getProperty(key)); } for (String key : localeMap.keySet()) { Map<String, String> localeDefinition = localeMap.get(key); if (!localeDefinition.containsKey(key + PROP_NAME) || !localeDefinition.containsKey(key + PROP_FLAG)) { continue; } LocaleDescriptor descriptor = new LocaleDescriptor( localeDefinition.get(key + PROP_NAME), localeDefinition.get(key + PROP_FLAG), localeDefinition.get(key + PROP_DEFAULT), WebComponentUtil.getLocaleFromString(key)); locales.add(descriptor); } } catch (Exception ex) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load localization", ex); } finally { IOUtils.closeQuietly(reader); } } Collections.sort(locales); } catch (Exception ex) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load locales", ex); } AVAILABLE_LOCALES = Collections.unmodifiableList(locales); }
private List<ContainerWrapper> createContainers(PageBase pageBase) { result = new OperationResult(CREATE_CONTAINERS); List<ContainerWrapper> containers = new ArrayList<ContainerWrapper>(); try { Class clazz = object.getCompileTimeClass(); if (ShadowType.class.isAssignableFrom(clazz)) { PrismContainer attributes = object.findContainer(ShadowType.F_ATTRIBUTES); ContainerStatus status = attributes != null ? getStatus() : ContainerStatus.ADDING; if (attributes == null) { PrismContainerDefinition definition = object.getDefinition().findContainerDefinition(ShadowType.F_ATTRIBUTES); attributes = definition.instantiate(); } ContainerWrapper container = new ContainerWrapper( this, attributes, status, new ItemPath(ShadowType.F_ATTRIBUTES), pageBase); addSubresult(container.getResult()); container.setMain(true); containers.add(container); if (hasResourceCapability( ((ShadowType) object.asObjectable()).getResource(), ActivationCapabilityType.class)) { containers.addAll( createCustomContainerWrapper(object, ShadowType.F_ACTIVATION, pageBase)); } if (hasResourceCapability( ((ShadowType) object.asObjectable()).getResource(), CredentialsCapabilityType.class)) { containers.addAll( createCustomContainerWrapper(object, ShadowType.F_CREDENTIALS, pageBase)); } PrismContainer<ShadowAssociationType> associationContainer = object.findOrCreateContainer(ShadowType.F_ASSOCIATION); container = new ContainerWrapper( this, associationContainer, ContainerStatus.MODIFYING, new ItemPath(ShadowType.F_ASSOCIATION), pageBase); addSubresult(container.getResult()); containers.add(container); } else if (ResourceType.class.isAssignableFrom(clazz)) { containers = createResourceContainers(pageBase); } else if (ReportType.class.isAssignableFrom(clazz)) { containers = createReportContainers(pageBase); } else { ContainerWrapper container = new ContainerWrapper(this, object, getStatus(), null, pageBase); addSubresult(container.getResult()); containers.add(container); containers.addAll(createContainerWrapper(object, null, pageBase)); } } catch (Exception ex) { // TODO: shouldn't be this exception thrown???? LoggingUtils.logUnexpectedException(LOGGER, "Error occurred during container wrapping", ex); result.recordFatalError( "Error occurred during container wrapping, reason: " + ex.getMessage(), ex); } Collections.sort(containers, new ItemWrapperComparator()); result.recomputeStatus(); result.recordSuccessIfUnknown(); return containers; }