Example usage for org.apache.wicket.model ChainingModel ChainingModel

List of usage examples for org.apache.wicket.model ChainingModel ChainingModel

Introduction

In this page you can find the example usage for org.apache.wicket.model ChainingModel ChainingModel.

Prototype

public ChainingModel(final Object modelObject) 

Source Link

Usage

From source file:com.evolveum.midpoint.web.component.assignment.ConstructionDetailsPanelChainedModel.java

License:Apache License

private void initModels() {
    resourceModel = new LoadableDetachableModel<PrismObject<ResourceType>>() {
        @Override//from w w  w.j av a  2 s.  co m
        protected PrismObject<ResourceType> load() {
            ObjectReferenceType resourceRef = getModelObject().getResourceRef();
            Task loadResourceTask = getPageBase().createSimpleTask(OPERATION_LOAD_RESOURCE);
            OperationResult result = new OperationResult(OPERATION_LOAD_RESOURCE);
            PrismObject<ResourceType> resource = WebModelServiceUtils.loadObject(resourceRef, getPageBase(),
                    loadResourceTask, result);
            result.computeStatusIfUnknown();
            if (!result.isAcceptable()) {
                LOGGER.error("Cannot find resource referenced from construction. {}", result.getMessage());
                result.recordPartialError("Could not find resource referenced from construction.");
                return null;
            }
            return resource;
        }
    };
    kindModel = new IModel<ShadowKindType>() {
        @Override
        public ShadowKindType getObject() {
            return getModelObject().getKind();
        }

        @Override
        public void setObject(ShadowKindType shadowKindType) {
            getModelObject().setKind(shadowKindType);
        }

        @Override
        public void detach() {

        }
    };
    intentChoicesModel = new ChainingModel<String>(kindModel) {
        private static final long serialVersionUID = 1L;

        @Override
        public String getObject() {

            List<String> availableIntentValues = new ArrayList<>();
            try {
                if (resourceModel.getObject() == null) {
                    return availableIntentValues.toString();
                }
                RefinedResourceSchema refinedSchema = RefinedResourceSchema
                        .getRefinedSchema(resourceModel.getObject());
                if (refinedSchema != null) {
                    ShadowKindType kind = ((IModel<ShadowKindType>) super.getChainedModel()).getObject();
                    List<? extends RefinedObjectClassDefinition> definitions = refinedSchema
                            .getRefinedDefinitions(kind);
                    for (RefinedObjectClassDefinition def : definitions) {
                        if (def.getIntent() != null) {
                            availableIntentValues.add(def.getIntent());
                        }
                    }
                }
            } catch (SchemaException ex) {
                LOGGER.error("Cannot get refined resource schema for resource {}. {}",
                        resourceModel.getObject().getName().getOrig(), ex.getLocalizedMessage());
            }

            return availableIntentValues.toString();
        }

        @Override
        public void setObject(String o) {
            super.setObject(o);
        }
    };
}