Search in sources :

Example 1 with IVisitor

use of org.apache.wicket.util.visit.IVisitor in project midpoint by Evolveum.

the class ChangePasswordPanel method initLayout.

private void initLayout() {
    WebMarkupContainer oldPasswordContainer = new WebMarkupContainer(ID_OLD_PASSWORD_CONTAINER);
    oldPasswordContainer.add(new VisibleEnableBehaviour() {

        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() {
            return isCheckOldPassword();
        }
    });
    add(oldPasswordContainer);
    PasswordTextField oldPasswordField = new PasswordTextField(ID_OLD_PASSWORD_FIELD, new PropertyModel<>(getModel(), MyPasswordsDto.F_OLD_PASSWORD));
    oldPasswordField.setRequired(false);
    oldPasswordContainer.add(oldPasswordField);
    Label passwordLabel = new Label(ID_PASSWORD_LABEL, createStringResource("PageSelfCredentials.passwordLabel1"));
    add(passwordLabel);
    PasswordPanel passwordPanel = new PasswordPanel(ID_PASSWORD_PANEL, new PropertyModel<>(getModel(), MyPasswordsDto.F_PASSWORD), getModelObject().getFocus(), getPageBase()) {

        @Override
        protected <F extends FocusType> ValuePolicyType getValuePolicy(PrismObject<F> object) {
            return getModelObject().getFocusPolicy();
        }

        @Override
        protected void updatePasswordValidation(AjaxRequestTarget target) {
            super.updatePasswordValidation(target);
            limitationsByPolicyOid.clear();
            getTable().visitChildren(PasswordPolicyValidationPanel.class, (IVisitor<PasswordPolicyValidationPanel, PasswordPolicyValidationPanel>) (panel, iVisit) -> {
                panel.refreshValidationPopup(target);
            });
        }
    };
    passwordPanel.getBaseFormComponent().add(new AttributeModifier("autofocus", ""));
    add(passwordPanel);
    WebMarkupContainer accountContainer = new WebMarkupContainer(ID_ACCOUNTS_CONTAINER);
    List<IColumn<PasswordAccountDto, String>> columns = initColumns();
    ListDataProvider<PasswordAccountDto> provider = new ListDataProvider<>(this, new PropertyModel<>(getModel(), MyPasswordsDto.F_ACCOUNTS));
    TablePanel accounts = new TablePanel(ID_ACCOUNTS_TABLE, provider, columns);
    accounts.setItemsPerPage(30);
    accounts.setShowPaging(false);
    accountContainer.add(accounts);
    accountContainer.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return shouldShowPasswordPropagation();
        }
    });
    add(accountContainer);
}
Also used : PageSelfCredentials(com.evolveum.midpoint.web.page.self.PageSelfCredentials) IColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn) StringUtils(org.apache.commons.lang3.StringUtils) AuthUtil(com.evolveum.midpoint.authentication.api.util.AuthUtil) WebModelServiceUtils(com.evolveum.midpoint.gui.api.util.WebModelServiceUtils) AbstractColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn) TablePanel(com.evolveum.midpoint.web.component.data.TablePanel) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) IModel(org.apache.wicket.model.IModel) SelectorOptions(com.evolveum.midpoint.schema.SelectorOptions) Label(org.apache.wicket.markup.html.basic.Label) ProgressReportActivityDto(com.evolveum.midpoint.web.component.progress.ProgressReportActivityDto) Model(org.apache.wicket.model.Model) LabelWithHelpPanel(com.evolveum.midpoint.gui.api.component.LabelWithHelpPanel) WebComponentUtil(com.evolveum.midpoint.gui.api.util.WebComponentUtil) ResourceTypeUtil(com.evolveum.midpoint.schema.util.ResourceTypeUtil) Task(com.evolveum.midpoint.task.api.Task) AttributeModifier(org.apache.wicket.AttributeModifier) AttributeAppender(org.apache.wicket.behavior.AttributeAppender) PropertyModel(org.apache.wicket.model.PropertyModel) Item(org.apache.wicket.markup.repeater.Item) PasswordAccountDto(com.evolveum.midpoint.web.page.admin.home.dto.PasswordAccountDto) MyPasswordsDto(com.evolveum.midpoint.web.page.admin.home.dto.MyPasswordsDto) PrismReferenceValue(com.evolveum.midpoint.prism.PrismReferenceValue) LoadableModel(com.evolveum.midpoint.gui.api.model.LoadableModel) ResourceObjectDefinition(com.evolveum.midpoint.schema.processor.ResourceObjectDefinition) java.util(java.util) GuiDisplayTypeUtil(com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil) com.evolveum.midpoint.web.component.data.column(com.evolveum.midpoint.web.component.data.column) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Trace(com.evolveum.midpoint.util.logging.Trace) ICellPopulator(org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator) CollectionUtils(org.apache.commons.collections4.CollectionUtils) GuiStyleConstants(com.evolveum.midpoint.gui.api.GuiStyleConstants) CredentialsCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CredentialsCapabilityType) StringLimitationResult(com.evolveum.midpoint.model.api.validator.StringLimitationResult) CapabilityUtil(com.evolveum.midpoint.schema.CapabilityUtil) IVisitor(org.apache.wicket.util.visit.IVisitor) Selectable(com.evolveum.midpoint.web.component.util.Selectable) DataTable(org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable) PasswordTextField(org.apache.wicket.markup.html.form.PasswordTextField) PrismObject(com.evolveum.midpoint.prism.PrismObject) PasswordPanel(com.evolveum.midpoint.gui.api.component.password.PasswordPanel) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) LoggingUtils(com.evolveum.midpoint.util.logging.LoggingUtils) BasePanel(com.evolveum.midpoint.gui.api.component.BasePanel) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) GetOperationOptions(com.evolveum.midpoint.schema.GetOperationOptions) PrismReference(com.evolveum.midpoint.prism.PrismReference) ProgressInformation(com.evolveum.midpoint.model.api.ProgressInformation) ListDataProvider(com.evolveum.midpoint.web.component.util.ListDataProvider) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) ListDataProvider(com.evolveum.midpoint.web.component.util.ListDataProvider) PasswordPanel(com.evolveum.midpoint.gui.api.component.password.PasswordPanel) Label(org.apache.wicket.markup.html.basic.Label) PasswordTextField(org.apache.wicket.markup.html.form.PasswordTextField) AttributeModifier(org.apache.wicket.AttributeModifier) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) PrismObject(com.evolveum.midpoint.prism.PrismObject) IColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn) PasswordAccountDto(com.evolveum.midpoint.web.page.admin.home.dto.PasswordAccountDto) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) TablePanel(com.evolveum.midpoint.web.component.data.TablePanel)

Example 2 with IVisitor

use of org.apache.wicket.util.visit.IVisitor in project midpoint by Evolveum.

the class ChangePasswordPanel method initColumns.

private List<IColumn<PasswordAccountDto, String>> initColumns() {
    List<IColumn<PasswordAccountDto, String>> columns = new ArrayList<>();
    columns.add(new CheckBoxColumn<>(Model.of(""), Selectable.F_SELECTED) {

        @Override
        protected IModel<Boolean> getEnabled(IModel<PasswordAccountDto> rowModel) {
            return () -> {
                PasswordAccountDto passwordAccountDto = rowModel.getObject();
                if (!passwordAccountDto.isMidpoint() && !passwordAccountDto.isPasswordCapabilityEnabled()) {
                    passwordAccountDto.setSelected(false);
                    return false;
                }
                if (CredentialsPropagationUserControlType.ONLY_MAPPING.equals(getModelObject().getPropagation())) {
                    if (!passwordAccountDto.isMidpoint() && !passwordAccountDto.isPasswordOutbound()) {
                        passwordAccountDto.setSelected(false);
                    }
                    return false;
                }
                if (passwordAccountDto.isMidpoint() && CredentialsPropagationUserControlType.IDENTITY_MANAGER_MANDATORY.equals(getModelObject().getPropagation())) {
                    return false;
                }
                if (!passwordAccountDto.isMidpoint() && midpointAccountSelected.getObject() && passwordAccountDto.isPasswordOutbound()) {
                    passwordAccountDto.setSelected(true);
                    return false;
                }
                return true;
            };
        }

        @Override
        protected void processBehaviourOfCheckBox(IsolatedCheckBoxPanel check, IModel<PasswordAccountDto> rowModel) {
            super.processBehaviourOfCheckBox(check, rowModel);
            IModel<String> titleModel = () -> {
                PasswordAccountDto passwordAccountDto = rowModel.getObject();
                if (!getEnabled(rowModel).getObject()) {
                    String key;
                    if (!passwordAccountDto.isMidpoint() && !passwordAccountDto.isPasswordCapabilityEnabled()) {
                        key = "ChangePasswordPanel.legendMessage.no.password.capability";
                    } else {
                        key = "ChangePasswordPanel.legendMessage.policy";
                    }
                    return createStringResource(key).getString();
                }
                return "";
            };
            check.add(AttributeAppender.append("title", titleModel));
        }

        @Override
        protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel<PasswordAccountDto> rowModel, IModel<Boolean> selected) {
            super.onUpdateRow(target, table, rowModel, selected);
            if (rowModel.getObject().isMidpoint()) {
                table.visitChildren(IsolatedCheckBoxPanel.class, (IVisitor<IsolatedCheckBoxPanel, IsolatedCheckBoxPanel>) (panel, iVisit) -> {
                    target.add(panel);
                });
            }
        }
    });
    columns.add(new AbstractColumn<PasswordAccountDto, String>(createStringResource("ChangePasswordPanel.name")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(Item<ICellPopulator<PasswordAccountDto>> item, String componentId, final IModel<PasswordAccountDto> rowModel) {
            item.add(new Label(componentId, new IModel<>() {

                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    PasswordAccountDto dto = rowModel.getObject();
                    return dto.getDisplayName();
                }
            }));
        }
    });
    columns.add(new AbstractColumn<PasswordAccountDto, String>(createStringResource("ChangePasswordPanel.resourceName")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(Item<ICellPopulator<PasswordAccountDto>> item, String componentId, final IModel<PasswordAccountDto> rowModel) {
            IModel<String> helpModel = () -> {
                String title = "";
                if (!rowModel.getObject().isMidpoint() && !rowModel.getObject().isPasswordCapabilityEnabled()) {
                    title = createStringResource("ChangePasswordPanel.legendMessage.no.password.capability").getString();
                }
                if (rowModel.getObject().isMaintenanceState()) {
                    title = title + (StringUtils.isEmpty(title) ? "" : " ") + createStringResource("ChangePasswordPanel.legendMessage.maintenance").getString();
                }
                return title;
            };
            item.add(new LabelWithHelpPanel(componentId, new IModel<>() {

                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    PasswordAccountDto dto = rowModel.getObject();
                    return dto.getResourceName();
                }
            }) {

                @Override
                protected IModel<String> getHelpModel() {
                    return helpModel;
                }
            });
        }
    });
    IconColumn enabled = new IconColumn<PasswordAccountDto>(createStringResource("ChangePasswordPanel.enabled")) {

        @Override
        protected DisplayType getIconDisplayType(IModel<PasswordAccountDto> rowModel) {
            String cssClass = "fa fa-question text-info";
            String tooltip = "ActivationStatusType.null";
            if (rowModel != null && rowModel.getObject() != null && rowModel.getObject().isEnabled() != null) {
                if (rowModel.getObject().isEnabled()) {
                    cssClass = GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_APPROVED_COLORED;
                    tooltip = "ActivationStatusType.ENABLED";
                } else {
                    cssClass = GuiStyleConstants.CLASS_APPROVAL_OUTCOME_ICON_REJECTED_COLORED;
                    tooltip = "ActivationStatusType.DISABLED";
                }
            }
            return GuiDisplayTypeUtil.createDisplayType(cssClass + " fa-fw fa-lg", "", createStringResource(tooltip).getString());
        }

        @Override
        public String getCssClass() {
            return "col-lg-1";
        }
    };
    columns.add(enabled);
    columns.add(new AbstractColumn<PasswordAccountDto, String>(createStringResource("ChangePasswordPanel.passwordValidation")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(Item<ICellPopulator<PasswordAccountDto>> cellItem, String componentId, IModel<PasswordAccountDto> rowModel) {
            IModel<List<StringLimitationResult>> limitationsModel = () -> {
                String policyOid = rowModel.getObject().getPasswordValuePolicyOid();
                if (StringUtils.isEmpty(policyOid) || !getModelObject().getPasswordPolicies().containsKey(policyOid)) {
                    return new ArrayList<>();
                }
                if (limitationsByPolicyOid.containsKey(policyOid)) {
                    return limitationsByPolicyOid.get(policyOid);
                }
                ValuePolicyType policyType = getModelObject().getPasswordPolicies().get(policyOid);
                PrismObject<? extends ObjectType> object = rowModel.getObject().getObject();
                List<StringLimitationResult> limitations = getPasswordPanel().getLimitationsForActualPassword(policyType, object);
                limitationsByPolicyOid.put(policyOid, limitations);
                return limitations;
            };
            PasswordPolicyValidationPanel validationPanel = new PasswordPolicyValidationPanel(componentId, limitationsModel);
            validationPanel.add(new VisibleEnableBehaviour() {

                @Override
                public boolean isVisible() {
                    return !limitationsModel.getObject().isEmpty();
                }
            });
            cellItem.add(validationPanel);
        }

        @Override
        public String getCssClass() {
            return "col-lg-2";
        }
    });
    columns.add(new AbstractColumn<PasswordAccountDto, String>(createStringResource("ChangePasswordPanel.propagationResult")) {

        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(Item<ICellPopulator<PasswordAccountDto>> cellItem, String componentId, IModel<PasswordAccountDto> rowModel) {
            LoadableModel<OperationResult> resultStatusModel = new LoadableModel<OperationResult>() {

                @Override
                protected OperationResult load() {
                    if (getModelObject().getProgress() == null || getModelObject().getProgress().getProgressReportActivities().isEmpty()) {
                        return null;
                    }
                    for (ProgressReportActivityDto progressActivity : getModelObject().getProgress().getProgressReportActivities()) {
                        if (rowModel.getObject().isSelected() && progressActivity.getStatus() != null && rowModel.getObject().isMidpoint() && (ProgressInformation.ActivityType.FOCUS_OPERATION.equals(progressActivity.getActivityType()) || (ProgressInformation.ActivityType.PROJECTOR.equals(progressActivity.getActivityType()) && !OperationResultStatusType.SUCCESS.equals(progressActivity.getStatus())))) {
                            return progressActivity.getOperationResult();
                        } else if (progressActivity.getStatus() != null && !rowModel.getObject().isMidpoint() && ProgressInformation.ActivityType.RESOURCE_OBJECT_OPERATION.equals(progressActivity.getActivityType()) && progressActivity.getResourceOperationResultList() != null && !progressActivity.getResourceOperationResultList().isEmpty()) {
                            String resourceOid = rowModel.getObject().getResourceOid();
                            if (StringUtils.isNotEmpty(resourceOid) && progressActivity.getResourceShadowDiscriminator() != null && resourceOid.equals(progressActivity.getResourceShadowDiscriminator().getResourceOid())) {
                                return progressActivity.getOperationResult();
                            }
                        }
                    }
                    return new OperationResult("Empty result");
                }
            };
            ColumnResultPanel resultPanel = new ColumnResultPanel(componentId, resultStatusModel) {

                @Override
                protected boolean isProjectionResult() {
                    return !rowModel.getObject().isMidpoint();
                }

                @Override
                protected DisplayType getDisplayForEmptyResult() {
                    String policyOid = rowModel.getObject().getPasswordValuePolicyOid();
                    if (StringUtils.isNotEmpty(policyOid) && ChangePasswordPanel.this.getModelObject().getPasswordPolicies().containsKey(policyOid)) {
                        if (limitationsByPolicyOid.get(policyOid) != null) {
                            var ref = new Object() {

                                boolean result = true;
                            };
                            limitationsByPolicyOid.get(policyOid).forEach((limit) -> {
                                if (ref.result && !limit.isSuccess()) {
                                    ref.result = false;
                                }
                            });
                            if (!ref.result && rowModel.getObject().isSelected()) {
                                return GuiDisplayTypeUtil.createDisplayType("fa-fw fa fa-times-circle text-muted fa-lg", "", createStringResource("ChangePasswordPanel.result.validationError").getString());
                            }
                        }
                    }
                    return null;
                }
            };
            resultPanel.setOutputMarkupId(true);
            cellItem.add(resultPanel);
        }

        @Override
        public String getCssClass() {
            return "col-lg-2";
        }
    });
    return columns;
}
Also used : PageSelfCredentials(com.evolveum.midpoint.web.page.self.PageSelfCredentials) IColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn) StringUtils(org.apache.commons.lang3.StringUtils) AuthUtil(com.evolveum.midpoint.authentication.api.util.AuthUtil) WebModelServiceUtils(com.evolveum.midpoint.gui.api.util.WebModelServiceUtils) AbstractColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn) TablePanel(com.evolveum.midpoint.web.component.data.TablePanel) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) IModel(org.apache.wicket.model.IModel) SelectorOptions(com.evolveum.midpoint.schema.SelectorOptions) Label(org.apache.wicket.markup.html.basic.Label) ProgressReportActivityDto(com.evolveum.midpoint.web.component.progress.ProgressReportActivityDto) Model(org.apache.wicket.model.Model) LabelWithHelpPanel(com.evolveum.midpoint.gui.api.component.LabelWithHelpPanel) WebComponentUtil(com.evolveum.midpoint.gui.api.util.WebComponentUtil) ResourceTypeUtil(com.evolveum.midpoint.schema.util.ResourceTypeUtil) Task(com.evolveum.midpoint.task.api.Task) AttributeModifier(org.apache.wicket.AttributeModifier) AttributeAppender(org.apache.wicket.behavior.AttributeAppender) PropertyModel(org.apache.wicket.model.PropertyModel) Item(org.apache.wicket.markup.repeater.Item) PasswordAccountDto(com.evolveum.midpoint.web.page.admin.home.dto.PasswordAccountDto) MyPasswordsDto(com.evolveum.midpoint.web.page.admin.home.dto.MyPasswordsDto) PrismReferenceValue(com.evolveum.midpoint.prism.PrismReferenceValue) LoadableModel(com.evolveum.midpoint.gui.api.model.LoadableModel) ResourceObjectDefinition(com.evolveum.midpoint.schema.processor.ResourceObjectDefinition) java.util(java.util) GuiDisplayTypeUtil(com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil) com.evolveum.midpoint.web.component.data.column(com.evolveum.midpoint.web.component.data.column) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) Trace(com.evolveum.midpoint.util.logging.Trace) ICellPopulator(org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator) CollectionUtils(org.apache.commons.collections4.CollectionUtils) GuiStyleConstants(com.evolveum.midpoint.gui.api.GuiStyleConstants) CredentialsCapabilityType(com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CredentialsCapabilityType) StringLimitationResult(com.evolveum.midpoint.model.api.validator.StringLimitationResult) CapabilityUtil(com.evolveum.midpoint.schema.CapabilityUtil) IVisitor(org.apache.wicket.util.visit.IVisitor) Selectable(com.evolveum.midpoint.web.component.util.Selectable) DataTable(org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable) PasswordTextField(org.apache.wicket.markup.html.form.PasswordTextField) PrismObject(com.evolveum.midpoint.prism.PrismObject) PasswordPanel(com.evolveum.midpoint.gui.api.component.password.PasswordPanel) ItemPath(com.evolveum.midpoint.prism.path.ItemPath) LoggingUtils(com.evolveum.midpoint.util.logging.LoggingUtils) BasePanel(com.evolveum.midpoint.gui.api.component.BasePanel) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) GetOperationOptions(com.evolveum.midpoint.schema.GetOperationOptions) PrismReference(com.evolveum.midpoint.prism.PrismReference) ProgressInformation(com.evolveum.midpoint.model.api.ProgressInformation) ListDataProvider(com.evolveum.midpoint.web.component.util.ListDataProvider) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) TraceManager(com.evolveum.midpoint.util.logging.TraceManager) DataTable(org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable) LabelWithHelpPanel(com.evolveum.midpoint.gui.api.component.LabelWithHelpPanel) Label(org.apache.wicket.markup.html.basic.Label) StringLimitationResult(com.evolveum.midpoint.model.api.validator.StringLimitationResult) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) PasswordAccountDto(com.evolveum.midpoint.web.page.admin.home.dto.PasswordAccountDto) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) IModel(org.apache.wicket.model.IModel) IVisitor(org.apache.wicket.util.visit.IVisitor) ICellPopulator(org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) IColumn(org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn) LoadableModel(com.evolveum.midpoint.gui.api.model.LoadableModel) ProgressReportActivityDto(com.evolveum.midpoint.web.component.progress.ProgressReportActivityDto) PrismObject(com.evolveum.midpoint.prism.PrismObject)

Example 3 with IVisitor

use of org.apache.wicket.util.visit.IVisitor in project wicket by apache.

the class AutoLabelResolver method findRelatedComponent.

/**
 * @param container
 * @param id
 * @return Component
 */
static Component findRelatedComponent(MarkupContainer container, final String id) {
    // try the quick and easy route first
    Component component = container.get(id);
    if (component != null) {
        return component;
    }
    // try the long way, search the hierarchy from the closest container up to the page
    final Component[] searched = new Component[] { null };
    while (container != null) {
        component = container.visitChildren(Component.class, new IVisitor<Component, Component>() {

            @Override
            public void component(Component child, IVisit<Component> visit) {
                if (child == searched[0]) {
                    // this container was already searched
                    visit.dontGoDeeper();
                    return;
                }
                if (id.equals(child.getId())) {
                    visit.stop(child);
                    return;
                }
            }
        });
        if (component != null) {
            return component;
        }
        // remember the container so we dont search it again, and search the parent
        searched[0] = container;
        container = container.getParent();
    }
    return null;
}
Also used : IVisitor(org.apache.wicket.util.visit.IVisitor) Component(org.apache.wicket.Component) IVisit(org.apache.wicket.util.visit.IVisit)

Example 4 with IVisitor

use of org.apache.wicket.util.visit.IVisitor in project wicket by apache.

the class StatelessChecker method onBeforeRender.

/**
 * @see org.apache.wicket.application.IComponentOnBeforeRenderListener#onBeforeRender(org.apache.wicket.Component)
 */
@Override
public void onBeforeRender(final Component component) {
    if (mustCheck(component)) {
        final IVisitor<Component, Component> visitor = new IVisitor<Component, Component>() {

            @Override
            public void component(final Component comp, final IVisit<Component> visit) {
                if ((component instanceof Page) && mustCheck(comp)) {
                    // Do not go deeper, because this component will be
                    // checked by checker
                    // itself.
                    // Actually we could go deeper but that would mean we
                    // traverse it twice
                    // (for current component and for inspected one).
                    // We go deeper for Page because full tree will be
                    // inspected during
                    // isPageStateless call.
                    visit.dontGoDeeper();
                } else if (!comp.isStateless()) {
                    visit.stop(comp);
                } else {
                // continue
                }
            }
        };
        if (component.isStateless() == false) {
            StringList statefulBehaviors = new StringList();
            for (Behavior b : component.getBehaviors()) {
                if (b.getStatelessHint(component) == false) {
                    statefulBehaviors.add(Classes.name(b.getClass()));
                }
            }
            String reason;
            if (statefulBehaviors.size() == 0) {
                reason = " Possible reason: no stateless hint";
            } else {
                reason = " Stateful behaviors: " + statefulBehaviors.join();
            }
            fail(new StatelessCheckFailureException(component, reason));
            return;
        }
        if (component instanceof MarkupContainer) {
            MarkupContainer container = ((MarkupContainer) component);
            // Traverse children
            final Object o = container.visitChildren(visitor);
            if (o != null) {
                fail(new StatelessCheckFailureException(container, " Offending component: " + o));
                return;
            }
        }
        if (component instanceof Page) {
            final Page p = (Page) component;
            if (!p.isBookmarkable()) {
                fail(new StatelessCheckFailureException(p, " Only bookmarkable pages can be stateless"));
                return;
            }
            if (!p.isPageStateless()) {
                fail(new StatelessCheckFailureException(p, " for unknown reason"));
                return;
            }
        }
    }
}
Also used : MarkupContainer(org.apache.wicket.MarkupContainer) IVisitor(org.apache.wicket.util.visit.IVisitor) StringList(org.apache.wicket.util.string.StringList) Page(org.apache.wicket.Page) Behavior(org.apache.wicket.behavior.Behavior) Component(org.apache.wicket.Component) IVisit(org.apache.wicket.util.visit.IVisit)

Example 5 with IVisitor

use of org.apache.wicket.util.visit.IVisitor in project wicket by apache.

the class VisitorTest method testVisitParents.

/**
 * https://issues.apache.org/jira/browse/WICKET-3805
 *
 * Visit parents with arbitrary type
 */
@Test
public void testVisitParents() {
    TestContainer testContainer = new TestContainer();
    IVisitor<MarkupContainer, MarkerInterface> visitor = new IVisitor<MarkupContainer, MarkerInterface>() {

        @Override
        public void component(MarkupContainer object, IVisit<MarkerInterface> visit) {
            visit.stop((MarkerInterface) object);
        }
    };
    MarkerInterface markedParent = testContainer.get("G:H").visitParents(MarkupContainer.class, visitor, new ClassVisitFilter(MarkerInterface.class));
    assertEquals("G", markedParent.getId());
}
Also used : WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer) IVisitor(org.apache.wicket.util.visit.IVisitor) ClassVisitFilter(org.apache.wicket.util.visit.ClassVisitFilter) IVisit(org.apache.wicket.util.visit.IVisit) Test(org.junit.Test)

Aggregations

IVisit (org.apache.wicket.util.visit.IVisit)3 IVisitor (org.apache.wicket.util.visit.IVisitor)3 AuthUtil (com.evolveum.midpoint.authentication.api.util.AuthUtil)2 GuiStyleConstants (com.evolveum.midpoint.gui.api.GuiStyleConstants)2 BasePanel (com.evolveum.midpoint.gui.api.component.BasePanel)2 LabelWithHelpPanel (com.evolveum.midpoint.gui.api.component.LabelWithHelpPanel)2 PasswordPanel (com.evolveum.midpoint.gui.api.component.password.PasswordPanel)2 LoadableModel (com.evolveum.midpoint.gui.api.model.LoadableModel)2 GuiDisplayTypeUtil (com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil)2 WebComponentUtil (com.evolveum.midpoint.gui.api.util.WebComponentUtil)2 WebModelServiceUtils (com.evolveum.midpoint.gui.api.util.WebModelServiceUtils)2 ProgressInformation (com.evolveum.midpoint.model.api.ProgressInformation)2 StringLimitationResult (com.evolveum.midpoint.model.api.validator.StringLimitationResult)2 PrismObject (com.evolveum.midpoint.prism.PrismObject)2 PrismReference (com.evolveum.midpoint.prism.PrismReference)2 PrismReferenceValue (com.evolveum.midpoint.prism.PrismReferenceValue)2 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)2 CapabilityUtil (com.evolveum.midpoint.schema.CapabilityUtil)2 GetOperationOptions (com.evolveum.midpoint.schema.GetOperationOptions)2 SelectorOptions (com.evolveum.midpoint.schema.SelectorOptions)2