Search in sources :

Example 96 with AbstractReadOnlyModel

use of org.apache.wicket.model.AbstractReadOnlyModel in project midpoint by Evolveum.

the class PrismValuePanel method createTypedInputComponent.

// normally this method returns an InputPanel;
// however, for some special readonly types (like ObjectDeltaType) it will return a Panel
private Panel createTypedInputComponent(String id) {
    //        ValueWrapper valueWrapper = model.getObject();
    //        ItemWrapper itemWrapper =
    final Item item = valueWrapperModel.getObject().getItem().getItem();
    Panel panel = null;
    if (item instanceof PrismProperty) {
        final PrismProperty property = (PrismProperty) item;
        PrismPropertyDefinition definition = property.getDefinition();
        final QName valueType = definition.getTypeName();
        //pointing to prism property real value
        final String baseExpression = "value.value";
        //now it works only in description
        if (ObjectType.F_DESCRIPTION.equals(definition.getName())) {
            return new TextAreaPanel(id, new PropertyModel(valueWrapperModel, baseExpression), null);
        }
        if (ActivationType.F_ADMINISTRATIVE_STATUS.equals(definition.getName())) {
            return WebComponentUtil.createEnumPanel(ActivationStatusType.class, id, new PropertyModel<ActivationStatusType>(valueWrapperModel, baseExpression), this);
        } else if (ActivationType.F_LOCKOUT_STATUS.equals(definition.getName())) {
            return new LockoutStatusPanel(id, valueWrapperModel.getObject(), new PropertyModel<LockoutStatusType>(valueWrapperModel, baseExpression));
        } else {
            if (definition.getTypeName().getLocalPart().equals(ActivationStatusType.class.getSimpleName())) {
                return WebComponentUtil.createEnumPanel(ActivationStatusType.class, id, new PropertyModel<ActivationStatusType>(valueWrapperModel, baseExpression), this);
            }
        }
        if (DOMUtil.XSD_DATETIME.equals(valueType)) {
            panel = new DatePanel(id, new PropertyModel<XMLGregorianCalendar>(valueWrapperModel, baseExpression));
        } else if (ProtectedStringType.COMPLEX_TYPE.equals(valueType)) {
            panel = new PasswordPanel(id, new PropertyModel<ProtectedStringType>(valueWrapperModel, baseExpression), valueWrapperModel.getObject().isReadonly());
        } else if (DOMUtil.XSD_BOOLEAN.equals(valueType)) {
            panel = new TriStateComboPanel(id, new PropertyModel<Boolean>(valueWrapperModel, baseExpression));
        } else if (SchemaConstants.T_POLY_STRING_TYPE.equals(valueType)) {
            InputPanel inputPanel;
            PrismPropertyDefinition def = property.getDefinition();
            if (def.getValueEnumerationRef() != null) {
                PrismReferenceValue valueEnumerationRef = def.getValueEnumerationRef();
                String lookupTableUid = valueEnumerationRef.getOid();
                Task task = pageBase.createSimpleTask("loadLookupTable");
                OperationResult result = task.getResult();
                Collection<SelectorOptions<GetOperationOptions>> options = WebModelServiceUtils.createLookupTableRetrieveOptions();
                final PrismObject<LookupTableType> lookupTable = WebModelServiceUtils.loadObject(LookupTableType.class, lookupTableUid, options, pageBase, task, result);
                if (lookupTable != null) {
                    inputPanel = new AutoCompleteTextPanel<String>(id, new LookupPropertyModel<String>(valueWrapperModel, baseExpression + ".orig", lookupTable.asObjectable()), String.class) {

                        @Override
                        public Iterator<String> getIterator(String input) {
                            return prepareAutoCompleteList(input, lookupTable).iterator();
                        }
                    };
                } else {
                    inputPanel = new TextPanel<>(id, new PropertyModel<String>(valueWrapperModel, baseExpression + ".orig"), String.class);
                }
            } else {
                inputPanel = new TextPanel<>(id, new PropertyModel<String>(valueWrapperModel, baseExpression + ".orig"), String.class);
            }
            if (ObjectType.F_NAME.equals(def.getName()) || UserType.F_FULL_NAME.equals(def.getName())) {
                inputPanel.getBaseFormComponent().setRequired(true);
            }
            panel = inputPanel;
        } else if (DOMUtil.XSD_BASE64BINARY.equals(valueType)) {
            panel = new UploadDownloadPanel(id, valueWrapperModel.getObject().isReadonly()) {

                @Override
                public InputStream getStream() {
                    Object object = ((PrismPropertyValue) valueWrapperModel.getObject().getValue()).getValue();
                    return object != null ? new ByteArrayInputStream((byte[]) object) : new ByteArrayInputStream(new byte[0]);
                //                		return super.getStream();
                }

                @Override
                public void updateValue(byte[] file) {
                    ((PrismPropertyValue) valueWrapperModel.getObject().getValue()).setValue(file);
                }

                @Override
                public void uploadFilePerformed(AjaxRequestTarget target) {
                    super.uploadFilePerformed(target);
                    target.add(PrismValuePanel.this.get(ID_FEEDBACK));
                }

                @Override
                public void removeFilePerformed(AjaxRequestTarget target) {
                    super.removeFilePerformed(target);
                    target.add(PrismValuePanel.this.get(ID_FEEDBACK));
                }

                @Override
                public void uploadFileFailed(AjaxRequestTarget target) {
                    super.uploadFileFailed(target);
                    target.add(PrismValuePanel.this.get(ID_FEEDBACK));
                    target.add(((PageBase) getPage()).getFeedbackPanel());
                }
            };
        } else if (ObjectDeltaType.COMPLEX_TYPE.equals(valueType)) {
            panel = new ModificationsPanel(id, new AbstractReadOnlyModel<DeltaDto>() {

                @Override
                public DeltaDto getObject() {
                    if (valueWrapperModel.getObject() == null || valueWrapperModel.getObject().getValue() == null || ((PrismPropertyValue) valueWrapperModel.getObject().getValue()).getValue() == null) {
                        return null;
                    }
                    PrismContext prismContext = ((PageBase) getPage()).getPrismContext();
                    ObjectDeltaType objectDeltaType = (ObjectDeltaType) ((PrismPropertyValue) valueWrapperModel.getObject().getValue()).getValue();
                    try {
                        ObjectDelta delta = DeltaConvertor.createObjectDelta(objectDeltaType, prismContext);
                        return new DeltaDto(delta);
                    } catch (SchemaException e) {
                        throw new IllegalStateException("Couldn't convert object delta: " + objectDeltaType);
                    }
                }
            });
        } else if (QueryType.COMPLEX_TYPE.equals(valueType) || CleanupPoliciesType.COMPLEX_TYPE.equals(valueType)) {
            return new TextAreaPanel(id, new AbstractReadOnlyModel() {

                @Override
                public Object getObject() {
                    if (valueWrapperModel.getObject() == null || valueWrapperModel.getObject().getValue() == null) {
                        return null;
                    }
                    PrismPropertyValue ppv = (PrismPropertyValue) valueWrapperModel.getObject().getValue();
                    if (ppv == null || ppv.getValue() == null) {
                        return null;
                    }
                    QName name = property.getElementName();
                    if (name == null && property.getDefinition() != null) {
                        name = property.getDefinition().getName();
                    }
                    if (name == null) {
                        name = SchemaConstants.C_VALUE;
                    }
                    PrismContext prismContext = ((PageBase) getPage()).getPrismContext();
                    try {
                        return prismContext.xmlSerializer().serializeAnyData(ppv.getValue(), name);
                    } catch (SchemaException e) {
                        throw new SystemException("Couldn't serialize property value of type: " + valueType + ": " + e.getMessage(), e);
                    }
                }
            }, 10);
        } else {
            Class type = XsdTypeMapper.getXsdToJavaMapping(valueType);
            if (type != null && type.isPrimitive()) {
                type = ClassUtils.primitiveToWrapper(type);
            }
            if (isEnum(property)) {
                return WebComponentUtil.createEnumPanel(definition, id, new PropertyModel<>(valueWrapperModel, baseExpression), this);
            }
            //                  // default QName validation is a bit weird, so let's treat QNames as strings [TODO finish this - at the parsing side]
            //                  if (type == QName.class) {
            //                      type = String.class;
            //                  }
            PrismPropertyDefinition def = property.getDefinition();
            if (def.getValueEnumerationRef() != null) {
                PrismReferenceValue valueEnumerationRef = def.getValueEnumerationRef();
                String lookupTableUid = valueEnumerationRef.getOid();
                Task task = pageBase.createSimpleTask("loadLookupTable");
                OperationResult result = task.getResult();
                Collection<SelectorOptions<GetOperationOptions>> options = WebModelServiceUtils.createLookupTableRetrieveOptions();
                final PrismObject<LookupTableType> lookupTable = WebModelServiceUtils.loadObject(LookupTableType.class, lookupTableUid, options, pageBase, task, result);
                if (lookupTable != null) {
                    panel = new AutoCompleteTextPanel<String>(id, new LookupPropertyModel<String>(valueWrapperModel, baseExpression, lookupTable == null ? null : lookupTable.asObjectable()), type) {

                        @Override
                        public Iterator<String> getIterator(String input) {
                            return prepareAutoCompleteList(input, lookupTable).iterator();
                        }

                        @Override
                        public void checkInputValue(AutoCompleteTextField input, AjaxRequestTarget target, LookupPropertyModel model) {
                            Iterator<String> lookupTableValuesIterator = prepareAutoCompleteList("", lookupTable).iterator();
                            String value = input.getInput();
                            boolean isValueExist = false;
                            if (value != null) {
                                if (value.trim().equals("")) {
                                    isValueExist = true;
                                } else {
                                    while (lookupTableValuesIterator.hasNext()) {
                                        String lookupTableValue = lookupTableValuesIterator.next();
                                        if (value.trim().equals(lookupTableValue)) {
                                            isValueExist = true;
                                            break;
                                        }
                                    }
                                }
                            }
                            if (isValueExist) {
                                input.setModelValue(new String[] { value });
                                target.add(PrismValuePanel.this.get(ID_FEEDBACK));
                            } else {
                                input.error("Entered value doesn't match any of available values and will not be saved.");
                                target.add(PrismValuePanel.this.get(ID_FEEDBACK));
                            }
                        }
                    };
                } else {
                    panel = new TextPanel<>(id, new PropertyModel<String>(valueWrapperModel, baseExpression), type);
                }
            } else {
                panel = new TextPanel<>(id, new PropertyModel<String>(valueWrapperModel, baseExpression), type);
            }
        }
    } else if (item instanceof PrismReference) {
        PrismContext prismContext = item.getPrismContext();
        if (prismContext == null) {
            prismContext = pageBase.getPrismContext();
        }
        QName targetTypeName = ((PrismReferenceDefinition) item.getDefinition()).getTargetTypeName();
        Class targetClass = null;
        if (targetTypeName != null && prismContext != null) {
            targetClass = prismContext.getSchemaRegistry().determineCompileTimeClass(targetTypeName);
        }
        final Class typeClass = targetClass != null ? targetClass : (item.getDefinition().getTypeClassIfKnown() != null ? item.getDefinition().getTypeClassIfKnown() : FocusType.class);
        Collection typeClasses = new ArrayList();
        // HACK HACK MID-3201 MID-3231
        if (isUserOrgItem(item, typeClass)) {
            typeClasses.add(UserType.class);
            typeClasses.add(OrgType.class);
        } else {
            typeClasses.add(typeClass);
        }
        panel = new ValueChoosePanel(id, new PropertyModel<>(valueWrapperModel, "value"), item.getValues(), false, typeClasses);
    } else if (item instanceof PrismContainer<?>) {
        AssociationWrapper itemWrapper = (AssociationWrapper) valueWrapperModel.getObject().getItem();
        final PrismContainer container = (PrismContainer) item;
        PrismContainerDefinition definition = container.getDefinition();
        QName valueType = definition.getTypeName();
        if (ShadowAssociationType.COMPLEX_TYPE.equals(valueType)) {
            PrismContext prismContext = item.getPrismContext();
            if (prismContext == null) {
                prismContext = pageBase.getPrismContext();
            }
            ShadowType shadowType = ((ShadowType) itemWrapper.getContainer().getObject().getObject().asObjectable());
            PrismObject<ResourceType> resource = shadowType.getResource().asPrismObject();
            // of resources.
            try {
                resource.revive(prismContext);
            } catch (SchemaException e) {
                throw new SystemException(e.getMessage(), e);
            }
            RefinedResourceSchema refinedSchema;
            CompositeRefinedObjectClassDefinition rOcDef;
            try {
                refinedSchema = RefinedResourceSchemaImpl.getRefinedSchema(resource);
                rOcDef = refinedSchema.determineCompositeObjectClassDefinition(shadowType.asPrismObject());
            } catch (SchemaException e) {
                throw new SystemException(e.getMessage(), e);
            }
            RefinedAssociationDefinition assocDef = itemWrapper.getRefinedAssociationDefinition();
            RefinedObjectClassDefinition assocTargetDef = assocDef.getAssociationTarget();
            ObjectQuery query = getAssociationsSearchQuery(prismContext, resource, assocTargetDef.getTypeName(), assocTargetDef.getKind());
            List values = item.getValues();
            return new AssociationValueChoicePanel(id, valueWrapperModel, values, false, ShadowType.class, query, assocTargetDef);
        }
    }
    return panel;
}
Also used : LockoutStatusPanel(com.evolveum.midpoint.web.component.LockoutStatusPanel) Task(com.evolveum.midpoint.task.api.Task) ArrayList(java.util.ArrayList) AutoCompleteTextPanel(com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) AutoCompleteTextField(org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField) List(java.util.List) ArrayList(java.util.ArrayList) ValueChoosePanel(com.evolveum.midpoint.web.component.form.ValueChoosePanel) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) PasswordPanel(com.evolveum.midpoint.gui.api.component.password.PasswordPanel) DeltaDto(com.evolveum.midpoint.web.component.model.delta.DeltaDto) PageBase(com.evolveum.midpoint.gui.api.page.PageBase) AutoCompleteTextPanel(com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel) AjaxRequestTarget(org.apache.wicket.ajax.AjaxRequestTarget) ObjectDeltaType(com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType) ByteArrayInputStream(java.io.ByteArrayInputStream) Collection(java.util.Collection) ProtectedStringType(com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType) ModificationsPanel(com.evolveum.midpoint.web.component.model.delta.ModificationsPanel) AbstractReadOnlyModel(org.apache.wicket.model.AbstractReadOnlyModel) GetOperationOptions(com.evolveum.midpoint.schema.GetOperationOptions) SystemException(com.evolveum.midpoint.util.exception.SystemException) AssociationValueChoicePanel(com.evolveum.midpoint.web.page.admin.users.component.AssociationValueChoicePanel) Iterator(java.util.Iterator) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) QName(javax.xml.namespace.QName) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) LookupPropertyModel(com.evolveum.midpoint.web.model.LookupPropertyModel) PropertyModel(org.apache.wicket.model.PropertyModel) LockoutStatusPanel(com.evolveum.midpoint.web.component.LockoutStatusPanel) FeedbackPanel(org.apache.wicket.markup.html.panel.FeedbackPanel) AutoCompleteTextPanel(com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel) ValueChoosePanel(com.evolveum.midpoint.web.component.form.ValueChoosePanel) PasswordPanel(com.evolveum.midpoint.gui.api.component.password.PasswordPanel) ModificationsPanel(com.evolveum.midpoint.web.component.model.delta.ModificationsPanel) Panel(org.apache.wicket.markup.html.panel.Panel) AssociationValueChoicePanel(com.evolveum.midpoint.web.page.admin.users.component.AssociationValueChoicePanel) SelectorOptions(com.evolveum.midpoint.schema.SelectorOptions) LookupPropertyModel(com.evolveum.midpoint.web.model.LookupPropertyModel)

Example 97 with AbstractReadOnlyModel

use of org.apache.wicket.model.AbstractReadOnlyModel in project midpoint by Evolveum.

the class BaseAbstractRolePanel method createMultiplicityPolicyLabel.

private IModel<String> createMultiplicityPolicyLabel(final IModel<MultiplicityPolicyConstraintType> model) {
    return new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            StringBuilder sb = new StringBuilder();
            if (model == null || model.getObject() == null || model.getObject().getMultiplicity() == null || model.getObject().getMultiplicity().isEmpty()) {
                return getString("PageRoleEditor.label.assignmentConstraint.placeholder");
            }
            MultiplicityPolicyConstraintType policy = model.getObject();
            sb.append(policy.getMultiplicity());
            if (policy.getEnforcement() != null) {
                sb.append(" (");
                sb.append(policy.getEnforcement());
                sb.append(")");
            }
            return sb.toString();
        }
    };
}
Also used : AbstractReadOnlyModel(org.apache.wicket.model.AbstractReadOnlyModel) MultiplicityPolicyConstraintType(com.evolveum.midpoint.xml.ns._public.common.common_3.MultiplicityPolicyConstraintType)

Example 98 with AbstractReadOnlyModel

use of org.apache.wicket.model.AbstractReadOnlyModel in project midpoint by Evolveum.

the class InlineMenu method initMenuItem.

private void initMenuItem(ListItem<InlineMenuItem> menuItem) {
    final InlineMenuItem item = menuItem.getModelObject();
    menuItem.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            if (item.isMenuHeader()) {
                return "dropdown-header";
            } else if (item.isDivider()) {
                return "divider";
            }
            return getBoolean(item.getEnabled(), true) ? null : "disabled";
        }
    }));
    menuItem.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isEnabled() {
            return getBoolean(item.getEnabled(), true);
        }

        @Override
        public boolean isVisible() {
            return getBoolean(item.getVisible(), true);
        }
    });
    WebMarkupContainer menuItemBody;
    if (item.isMenuHeader() || item.isDivider()) {
        menuItemBody = new MenuDividerPanel(ID_MENU_ITEM_BODY, menuItem.getModel());
    } else {
        menuItemBody = new MenuLinkPanel(ID_MENU_ITEM_BODY, menuItem.getModel());
    }
    menuItemBody.setRenderBodyOnly(true);
    menuItem.add(menuItemBody);
}
Also used : AbstractReadOnlyModel(org.apache.wicket.model.AbstractReadOnlyModel) VisibleEnableBehaviour(com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour) WebMarkupContainer(org.apache.wicket.markup.html.WebMarkupContainer)

Example 99 with AbstractReadOnlyModel

use of org.apache.wicket.model.AbstractReadOnlyModel in project midpoint by Evolveum.

the class LoggingConfigPanel method createAppendersListModel.

private IModel<List<String>> createAppendersListModel() {
    return new AbstractReadOnlyModel<List<String>>() {

        @Override
        public List<String> getObject() {
            List<String> list = new ArrayList<>();
            LoggingDto dto = getModel().getObject();
            for (AppenderConfiguration appender : dto.getAppenders()) {
                list.add(appender.getName());
            }
            return list;
        }
    };
}
Also used : AbstractReadOnlyModel(org.apache.wicket.model.AbstractReadOnlyModel) AppenderConfiguration(com.evolveum.midpoint.web.page.admin.configuration.dto.AppenderConfiguration) ArrayList(java.util.ArrayList) LoggingDto(com.evolveum.midpoint.web.page.admin.configuration.dto.LoggingDto)

Example 100 with AbstractReadOnlyModel

use of org.apache.wicket.model.AbstractReadOnlyModel in project midpoint by Evolveum.

the class LoggingConfigPanel method createNewLoggerAppendersListModel.

private IModel<List<String>> createNewLoggerAppendersListModel() {
    return new AbstractReadOnlyModel<List<String>>() {

        @Override
        public List<String> getObject() {
            List<String> list = new ArrayList<>();
            LoggingDto dto = getModel().getObject();
            for (AppenderConfiguration appender : dto.getAppenders()) {
                list.add(appender.getName());
            }
            return list;
        }
    };
}
Also used : AbstractReadOnlyModel(org.apache.wicket.model.AbstractReadOnlyModel) AppenderConfiguration(com.evolveum.midpoint.web.page.admin.configuration.dto.AppenderConfiguration) ArrayList(java.util.ArrayList) LoggingDto(com.evolveum.midpoint.web.page.admin.configuration.dto.LoggingDto)

Aggregations

AbstractReadOnlyModel (org.apache.wicket.model.AbstractReadOnlyModel)102 AjaxRequestTarget (org.apache.wicket.ajax.AjaxRequestTarget)58 Label (org.apache.wicket.markup.html.basic.Label)57 WebMarkupContainer (org.apache.wicket.markup.html.WebMarkupContainer)52 VisibleEnableBehaviour (com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour)41 ArrayList (java.util.ArrayList)32 AjaxLink (org.apache.wicket.ajax.markup.html.AjaxLink)29 ListItem (org.apache.wicket.markup.html.list.ListItem)27 IModel (org.apache.wicket.model.IModel)26 AttributeAppender (org.apache.wicket.behavior.AttributeAppender)23 ListView (org.apache.wicket.markup.html.list.ListView)23 List (java.util.List)21 AttributeModifier (org.apache.wicket.AttributeModifier)20 PropertyModel (org.apache.wicket.model.PropertyModel)20 Model (org.apache.wicket.model.Model)16 InfoTooltipBehavior (com.evolveum.midpoint.web.util.InfoTooltipBehavior)13 TextField (org.apache.wicket.markup.html.form.TextField)11 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)10 Form (org.apache.wicket.markup.html.form.Form)9 IColumn (org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn)8