@Override public String getIdValue(final AnyTypeTO object, final int index) { return object.getKey(); }
@Override public Object getDisplayValue(final AnyTypeTO object) { return object.getKey(); }
@Override public AnyTypeTO getObject(final String id, final IModel<? extends List<? extends AnyTypeTO>> choices) { return choices.getObject().stream(). filter(anyTypeTO -> id.equals(anyTypeTO.getKey())).findAny().orElse(null); } });
@Override public AnyTypeTO getObject() { for (AnyTypeTO obj : availableTypes) { if (obj.getKey().equals(rel.getOtherEndType())) { return obj; } } return null; }
@Override public void setObject(final AnyTypeTO object) { rel.setOtherEndType(object == null ? null : object.getKey()); } }, false);
@PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_UPDATE + "')") public AnyTypeTO update(final AnyTypeTO anyTypeTO) { AnyType anyType = anyTypeDAO.find(anyTypeTO.getKey()); if (anyType == null) { LOG.error("Could not find anyType '" + anyTypeTO.getKey() + "'"); throw new NotFoundException(anyTypeTO.getKey()); } binder.update(anyType, anyTypeTO); anyType = anyTypeDAO.save(anyType); return binder.getAnyTypeTO(anyTypeDAO.save(anyType)); }
@PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_CREATE + "')") public AnyTypeTO create(final AnyTypeTO anyTypeTO) { if (StringUtils.isBlank(anyTypeTO.getKey())) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing); sce.getElements().add(AnyType.class.getSimpleName() + " key"); throw sce; } if (anyTypeDAO.find(anyTypeTO.getKey()) != null) { throw new DuplicateException(anyTypeTO.getKey()); } return binder.getAnyTypeTO(anyTypeDAO.save(binder.create(anyTypeTO))); }
@Override public int compare(final AnyTypeTO o1, final AnyTypeTO o2) { if (o1.getKind() == AnyTypeKind.USER) { return -1; } if (o2.getKind() == AnyTypeKind.USER) { return 1; } if (o1.getKind() == AnyTypeKind.GROUP) { return -1; } if (o2.getKind() == AnyTypeKind.GROUP) { return 1; } return ObjectUtils.compare(o1.getKey(), o2.getKey()); } }
@Override protected void populateItem(final ListItem<AnyTypeTO> item) { final String key = item.getModelObject().getKey(); item.add(new Accordion("aDynMembershipCond", Collections.<ITab>singletonList( new AbstractTab(new StringResourceModel( "aDynMembershipCond", this, new Model<AnyTypeTO>(item.getModelObject()))) { private static final long serialVersionUID = 1037272333056449378L; @Override public Panel getPanel(final String panelId) { return new AnyObjectSearchPanel.Builder( key, new MapOfListModel<>(groupWrapper, "aDynClauses", key)). required(false).build(panelId); } }), Model.of(StringUtils.isBlank(groupWrapper.getADynMembershipConds().get(key)) ? -1 : 0)). setOutputMarkupId(true)); } });
@Override protected void populateItem(final ListItem<AnyTypeTO> item) { final String key = item.getModelObject().getKey(); item.add(new Accordion("filters", Collections.<ITab>singletonList( new AbstractTab(new StringResourceModel( "filters", this, new Model<>(item.getModelObject()))) { private static final long serialVersionUID = 1037272333056449378L; @Override public Panel getPanel(final String panelId) { return new AnyObjectSearchPanel.Builder( key, new MapOfListModel<>(pushTaskWrapper, "filterClauses", key)). required(false).build(panelId); } }), Model.of(StringUtils.isBlank(pushTaskWrapper.getFilters().get(key)) ? -1 : 0)) .setOutputMarkupId(true)); } });
@Override public void onClick(final AjaxRequestTarget target, final AnyTypeTO ignore) { try { restClient.delete(model.getObject().getKey()); SyncopeConsoleSession.get().refreshAuth(null); SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED)); target.add(container); } catch (Exception e) { LOG.error("While deleting {}", model.getObject(), e); SyncopeConsoleSession.get().error(StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()); } ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target); } }, ActionLink.ActionType.DELETE, StandardEntitlement.ANYTYPE_DELETE, true);
@Override protected AnyTypeTO resolveReference(final Method method, final Object... args) throws UnresolvedReferenceException { String key = null; if (ArrayUtils.isNotEmpty(args)) { for (int i = 0; key == null && i < args.length; i++) { if (args[i] instanceof String) { key = (String) args[i]; } else if (args[i] instanceof AnyTypeTO) { key = ((AnyTypeTO) args[i]).getKey(); } } } if (StringUtils.isNotBlank(key)) { try { return binder.getAnyTypeTO(anyTypeDAO.find(key)); } catch (Throwable ignore) { LOG.debug("Unresolved reference", ignore); throw new UnresolvedReferenceException(ignore); } } throw new UnresolvedReferenceException(); }
@Override public AnyTypeTO delete(final AnyType anyType) { AnyTypeTO deleted = getAnyTypeTO(anyType); anyTypeDAO.delete(anyType.getKey()); final Set<String> removed = EntitlementsHolder.getInstance().removeFor(deleted.getKey()); if (!adminUser.equals(AuthContextUtils.getUsername())) { AccessToken accessToken = accessTokenDAO.findByOwner(AuthContextUtils.getUsername()); try { Set<SyncopeGrantedAuthority> authorities = new HashSet<>(POJOHelper.deserialize( ENCRYPTOR.decode(new String(accessToken.getAuthorities()), CipherAlgorithm.AES), new TypeReference<Set<SyncopeGrantedAuthority>>() { })); authorities.removeAll(authorities.stream(). filter(authority -> removed.contains(authority.getAuthority())).collect(Collectors.toList())); accessToken.setAuthorities(ENCRYPTOR.encode( POJOHelper.serialize(authorities), CipherAlgorithm.AES). getBytes()); accessTokenDAO.save(accessToken); } catch (Exception e) { LOG.error("Could not fetch or store authorities", e); } } return deleted; }
@Override protected void populateItem(final ListItem<AnyTypeTO> item) { final String key = item.getModelObject().getKey(); item.add(new Accordion("dynMembershipCond", Collections.<ITab>singletonList( new AbstractTab(Model.of(key + " Dynamic Condition")) { private static final long serialVersionUID = 1037272333056449378L; @Override public Panel getPanel(final String panelId) { switch (item.getModelObject().getKind()) { case USER: return new UserSearchPanel.Builder( new MapOfListModel<>(dynRealmWrapper, "dynClauses", key)). required(false).build(panelId); case GROUP: return new GroupSearchPanel.Builder( new MapOfListModel<>(dynRealmWrapper, "dynClauses", key)). required(false).build(panelId); case ANY_OBJECT: default: return new AnyObjectSearchPanel.Builder( key, new MapOfListModel<>(dynRealmWrapper, "dynClauses", key)). required(false).build(panelId); } } }), Model.of(StringUtils.isBlank(dynRealmWrapper.getDynMembershipConds().get(key)) ? -1 : 0)). setOutputMarkupId(true)); } });
@Override public void update(final AnyType anyType, final AnyTypeTO anyTypeTO) { if (anyType.getKey() == null) { anyType.setKey(anyTypeTO.getKey()); } if (anyType.getKind() == null) { anyType.setKind(anyTypeTO.getKind()); } if (anyType.getKind() != anyTypeTO.getKind()) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyType); sce.getElements().add(AnyTypeKind.class.getSimpleName() + " cannot be changed"); throw sce; } anyType.getClasses().clear(); anyTypeTO.getClasses().forEach(anyTypeClassName -> { AnyTypeClass anyTypeClass = anyTypeClassDAO.find(anyTypeClassName); if (anyTypeClass == null) { LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName() + " {}, ignoring...", anyTypeClassName); } else { anyType.add(anyTypeClass); } }); }
precond + SearchUtils.buildFIQL( AnyPanel.this.searchPanel.getModel().getObject(), SyncopeClient.getAnyObjectSearchConditionBuilder(anyTypeTO.getKey()), AnyPanel.this.searchPanel.getAvailableSchemaTypes()), target); break;
@Override protected void onUpdate(final AjaxRequestTarget target) { final AnyTypeTO anyType = otherType.getModelObject(); if (anyType == null) { Fragment emptyFragment = new Fragment("searchPanel", "emptyFragment", Specification.this); container.addOrReplace(emptyFragment.setRenderBodyOnly(true)); } else { final Fragment fragment = new Fragment("searchPanel", "searchFragment", Specification.this); container.addOrReplace(fragment.setRenderBodyOnly(true)); anyObjectSearchPanel = new AnyObjectSearchPanel.Builder( anyType.getKey(), new ListModel<>(new ArrayList<>())). enableSearch(Specification.this). build("searchPanel"); fragment.add(anyObjectSearchPanel.setRenderBodyOnly(true)); anyObjectDirectoryPanel = new AnyObjectSelectionDirectoryPanel.Builder( anyTypeClassRestClient.list(anyType.getClasses()), anyType.getKey(), pageRef). setFiql(SyncopeClient.getAnyObjectSearchConditionBuilder(anyType.getKey()). is("key").notNullValue().query()). setWizardInModal(true).build("searchResultPanel"); fragment.add(anyObjectDirectoryPanel.setRenderBodyOnly(true)); } target.add(container); } });
clause.setProperty("name"); panel = new AnyObjectSearchPanel.Builder(anyTypeTO.getKey(), new ListModel<>(clauses)).required(true).enableSearch().build(id); break;