Skip to content

Commit

Permalink
modification before merge
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Aug 27, 2018
1 parent c2861b9 commit caf3ebf
Show file tree
Hide file tree
Showing 9 changed files with 155 additions and 48 deletions.
Expand Up @@ -1142,10 +1142,12 @@ public static <C extends Containerable> String getDisplayName(PrismContainerValu
}
if (prismContainerValue.canRepresent(RelationDefinitionType.class)){
RelationDefinitionType relationDefinition = (RelationDefinitionType) prismContainerValue.asContainerable();
String name = (relationDefinition.getRef().getLocalPart());
String description = relationDefinition.getDescription();
if(StringUtils.isNotEmpty(name)) {
return name + (StringUtils.isNotEmpty(description) ? (" - " + description) : "");
if(relationDefinition.getRef() != null) {
String name = (relationDefinition.getRef().getLocalPart());
String description = relationDefinition.getDescription();
if(StringUtils.isNotEmpty(name)) {
return name + (StringUtils.isNotEmpty(description) ? (" - " + description) : "");
}
}
}
Class<C> cvalClass = prismContainerValue.getCompileTimeClass();
Expand Down
Expand Up @@ -27,8 +27,12 @@
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.util.exception.*;
import com.evolveum.midpoint.web.component.prism.ContainerStatus;
import com.evolveum.midpoint.web.component.prism.ContainerValueWrapper;
import com.evolveum.midpoint.web.component.prism.ContainerWrapper;
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory;
import com.evolveum.midpoint.web.component.prism.PropertyOrReferenceWrapper;
import com.evolveum.midpoint.web.page.error.PageError;
import com.evolveum.midpoint.web.page.login.PageLogin;
import com.evolveum.midpoint.web.security.MidPointApplication;
Expand Down Expand Up @@ -835,4 +839,13 @@ public static ObjectWrapper<SystemConfigurationType> loadSystemConfigurationAsOb

return wrapper;
}

public static <C extends Containerable> boolean isContainerValueWrapperEmpty(ContainerValueWrapper<C> value) {
for(ItemWrapper itemWrapper: value.getItems()) {
if(!itemWrapper.isEmpty()) {
return false;
}
}
return true;
}
}
Expand Up @@ -75,7 +75,7 @@ public boolean isVisible() {
return model.getObject().isVisible();
}
});

LOGGER.trace("Creating container panel for {}", model.getObject());

initLayout(model, form, isPanelVisible, showHeader);
Expand All @@ -87,7 +87,11 @@ private void initLayout(final IModel<ContainerValueWrapper<C>> model, final Form

@Override
protected void onButtonClick(AjaxRequestTarget target) {
addOrReplaceProperties(model, form, isPanelVisible, true);
if(model.getObject().getContainer().isShowOnTopLevel()) {
addOrReplaceProperties(model, form, isPanelVisible, true);
} else {
addOrReplacePropertiesAndContainers(model, form, isPanelVisible, true);
}
target.add(ContainerValuePanel.this);
target.add(getPageBase().getFeedbackPanel());
}
Expand All @@ -105,13 +109,14 @@ public boolean isVisible() {
});
add(header);
header.setOutputMarkupId(true);
addOrReplaceProperties(model, form, isPanelVisible, false);
addOrReplacePropertiesAndContainers(model, form, isPanelVisible, false);

AjaxButton labelShowEmpty = new AjaxButton(ID_SHOW_EMPTY_BUTTON, getNameOfShowEmptyButton(model)) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
onShowEmptyClick(target, model, form, isPanelVisible);
isVisibleShowMoreButton = true;
setModel(getNameOfShowEmptyButton(model));
target.add(this);
}
Expand Down Expand Up @@ -141,7 +146,7 @@ private void onShowEmptyClick(AjaxRequestTarget target, IModel<ContainerValueWra
wrapper.setShowEmpty(!wrapper.isShowEmpty(), false);

wrapper.computeStripes();
addOrReplaceProperties(model, form, isPanelVisible, true);
addOrReplacePropertiesAndContainers(model, form, isPanelVisible, true);
target.add(ContainerValuePanel.this);
target.add(getPageBase().getFeedbackPanel());
}
Expand All @@ -162,8 +167,13 @@ public String getObject() {
};
}

private <IW extends ItemWrapper> void addOrReplaceProperties(IModel<ContainerValueWrapper<C>> model, final Form form, ItemVisibilityHandler isPanaleVisible, boolean isToBeReplaced){
isVisibleShowMoreButton = false;
private <IW extends ItemWrapper> void addOrReplacePropertiesAndContainers(IModel<ContainerValueWrapper<C>> model, final Form form, ItemVisibilityHandler isPanaleVisible, boolean isToBeReplaced){
addOrReplaceProperties(model, form, isPanaleVisible, isToBeReplaced);
addOrReplaceContainers(model, form, isPanaleVisible, isToBeReplaced);
}

private <IW extends ItemWrapper> void addOrReplaceProperties(IModel<ContainerValueWrapper<C>> model, final Form form, ItemVisibilityHandler isPanalVisible, boolean isToBeReplaced){
isVisibleShowMoreButton = false;

ListView<IW> properties = new ListView<IW>("properties",
new PropertyModel<>(model, "properties")) {
Expand All @@ -172,8 +182,8 @@ private <IW extends ItemWrapper> void addOrReplaceProperties(IModel<ContainerVal
@Override
protected void populateItem(final ListItem<IW> item) {
item.setOutputMarkupId(true);
if (!(item.getModel().getObject() instanceof ContainerWrapper)) {
PrismPropertyPanel propertyPanel = new PrismPropertyPanel("property", item.getModel(), form, isPanaleVisible, pageBase);
if (item.getModelObject() instanceof PropertyOrReferenceWrapper) {
PrismPropertyPanel propertyPanel = new PrismPropertyPanel("property", item.getModel(), form, isPanalVisible, pageBase);
propertyPanel.setOutputMarkupId(true);
propertyPanel.add(new VisibleEnableBehaviour() {

Expand All @@ -189,7 +199,9 @@ public boolean isVisible() {
});
item.add(propertyPanel);
item.add(AttributeModifier.append("class", createStyleClassModel((IModel<ItemWrapper>) item.getModel())));
isVisibleShowMoreButton = true;
if(propertyPanel.isVisible(isPanalVisible)) {
isVisibleShowMoreButton = true;
}
return;
}
WebMarkupContainer property = new WebMarkupContainer("property");
Expand All @@ -209,25 +221,28 @@ public boolean isVisible() {
} else {
add(properties);
}

ListView<IW> containers = new ListView<IW>("containers",
}

private <IW extends ItemWrapper> void addOrReplaceContainers(IModel<ContainerValueWrapper<C>> model, final Form form, ItemVisibilityHandler isPanalVisible, boolean isToBeReplaced){
ListView<IW> containers = new ListView<IW>("containers",
new PropertyModel<>(model, "properties")) {
private static final long serialVersionUID = 1L;

@Override
protected void populateItem(final ListItem<IW> item) {
item.setOutputMarkupId(true);
if (item.getModel().getObject() instanceof ContainerWrapper) {
PrismContainerPanel<C> containerPanel = new PrismContainerPanel<C>("container", (IModel<ContainerWrapper<C>>) item.getModel(), true, form, isPanaleVisible, pageBase, false);
PrismContainerPanel<C> containerPanel = new PrismContainerPanel<C>("container", (IModel<ContainerWrapper<C>>) item.getModel(), true, form, isPanalVisible, pageBase, false);
containerPanel.setOutputMarkupId(true);
item.add(containerPanel);
LOGGER.info("XXXXXXXX container: " + item.getModelObject().getItemDefinition());
item.add(new VisibleEnableBehaviour() {

private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
if(!model.getObject().isExpanded()) {
if(!model.getObject().isExpanded() && !model.getObject().getContainer().isShowOnTopLevel()) {
return false;
}

Expand All @@ -245,15 +260,13 @@ public boolean isVisible() {
return false;
}

return containerPanel.isPanelVisible(isPanaleVisible, (IModel<ContainerWrapper<C>>) item.getModel());
return containerPanel.isPanelVisible(isPanalVisible, (IModel<ContainerWrapper<C>>) item.getModel());

}
});
if(!( ((ContainerWrapper)item.getModelObject() != null && ((ContainerWrapper)item.getModelObject()).getItemDefinition() != null
if(!( (ContainerWrapper)item.getModelObject() != null && ((ContainerWrapper)item.getModelObject()).getItemDefinition() != null
&& ((ContainerWrapper)item.getModelObject()).getItemDefinition().getTypeName() != null
&& ((ContainerWrapper)item.getModelObject()).getItemDefinition().getTypeName().equals(MetadataType.COMPLEX_TYPE) )
&& ( ((ContainerWrapper)item.getModelObject()).getValues() != null && ((ContainerWrapper)item.getModelObject()).getValues().get(0) != null
&& !((ContainerWrapper<MetadataType>)item.getModelObject()).getValues().get(0).isVisible() ) ) ){
&& ((ContainerWrapper)item.getModelObject()).getItemDefinition().getTypeName().equals(MetadataType.COMPLEX_TYPE) ) ){
item.add(AttributeModifier.append("class", "container-wrapper"));
}
return;
Expand Down
Expand Up @@ -64,7 +64,7 @@ public boolean isVisible() {
}

protected boolean isAddButtonVisible() {
return true;
return getModelObject().isExpanded();
}

private void addValue(AjaxRequestTarget target) {
Expand Down
Expand Up @@ -17,11 +17,16 @@
package com.evolveum.midpoint.web.component.prism;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.xml.namespace.QName;

import com.evolveum.midpoint.web.component.assignment.ConstructionDetailsPanelChainedModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -34,10 +39,14 @@
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.util.GuiImplUtil;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
Expand All @@ -46,7 +55,7 @@
* @author lazyman
* @author semancik
*/
public class PrismContainerPanel<C extends Containerable> extends Panel {
public class PrismContainerPanel<C extends Containerable> extends BasePanel<ContainerWrapper<C>> {
private static final long serialVersionUID = 1L;

private static final Trace LOGGER = TraceManager.getTrace(PrismContainerPanel.class);
Expand All @@ -60,13 +69,18 @@ public PrismContainerPanel(String id, final IModel<ContainerWrapper<C>> model, b
}

public PrismContainerPanel(String id, final IModel<ContainerWrapper<C>> model, boolean showHeader, Form form, ItemVisibilityHandler isPanelVisible, PageBase pageBase, boolean isModelOnTopLevel) {
super(id);
super(id, model);
setOutputMarkupId(true);
this.pageBase = pageBase;
if(model.getObject() != null) {

if(model.getObject() != null) {
model.getObject().setShowOnTopLevel(isModelOnTopLevel);
}


if(model.getObject() != null && model.getObject().getPath() != null) {
setExtendedForEmptyContainers(model);
}

LOGGER.trace("Creating container panel for {}", model.getObject());

//TODO: visible behaviour??
Expand All @@ -79,6 +93,8 @@ public boolean isVisible() {
}
});

LOGGER.info("XXXXXXXXXXX container visible : " + isPanelVisible(isPanelVisible, model));

initLayout(model, form, isPanelVisible, showHeader);

if(model.getObject() != null && model.getObject().getItemDefinition() != null && model.getObject().getItemDefinition().isMultiValue()) {
Expand All @@ -87,7 +103,59 @@ public boolean isVisible() {

}

public boolean isPanelVisible(ItemVisibilityHandler isPanelVisible, IModel<ContainerWrapper<C>> model) {
private void setExtendedForEmptyContainers(IModel<ContainerWrapper<C>> model) {
Collection<QName> qNames = QNameUtil.createCollection(
SystemConfigurationType.F_DEFAULT_OBJECT_POLICY_CONFIGURATION,
SystemConfigurationType.F_GLOBAL_POLICY_RULE,
SystemConfigurationType.F_GLOBAL_ACCOUNT_SYNCHRONIZATION_SETTINGS,
SystemConfigurationType.F_CLEANUP_POLICY,
SystemConfigurationType.F_PROFILING_CONFIGURATION,
SystemConfigurationType.F_ADMIN_GUI_CONFIGURATION,
SystemConfigurationType.F_WORKFLOW_CONFIGURATION,
SystemConfigurationType.F_ROLE_MANAGEMENT,
SystemConfigurationType.F_INTERNALS,
SystemConfigurationType.F_DEPLOYMENT_INFORMATION,
SystemConfigurationType.F_ACCESS_CERTIFICATION,
SystemConfigurationType.F_INFRASTRUCTURE,
SystemConfigurationType.F_FULL_TEXT_SEARCH);

if(qNames.contains(model.getObject().getPath().getFirstName())) {
model.getObject().getValues().forEach(value -> setExpandedForContainerValueWrapper(value));
}
}

private void setExpandedForContainerValueWrapper(ContainerValueWrapper<C> value) {

value.setExpanded(true);
if(WebModelServiceUtils.isContainerValueWrapperEmpty(value) && getModelObject().isShowOnTopLevel()) {
value.setShowEmpty(true, false);
}

boolean expandingHigherLevelContainerValue = true;
if(WebModelServiceUtils.isContainerValueWrapperEmpty(value) && !getModelObject().isShowOnTopLevel()) {
value.setExpanded(false);
value.setShowEmpty(true, false);
expandingHigherLevelContainerValue = false;
}

for(ItemWrapper itemWrapper: value.getItems()) {
if(itemWrapper instanceof ContainerWrapper) {
if(!((ContainerWrapper<C>)itemWrapper).isEmpty()) {
((ContainerWrapper<C>)itemWrapper).getValues().forEach(containerValue -> setExpandedForContainerValueWrapper(containerValue));
((ContainerWrapper<C>)itemWrapper).setExpanded(true);
continue;
}
if(!getModelObject().isShowOnTopLevel()) {
((ContainerWrapper<C>)itemWrapper).setExpanded(true);
// ((ContainerWrapper<C>)itemWrapper).setShowEmpty(true, false);
} else {
((ContainerWrapper<C>)itemWrapper).setExpanded(expandingHigherLevelContainerValue);
}
}
}
}

public boolean isPanelVisible(ItemVisibilityHandler isPanelVisible, IModel<ContainerWrapper<C>> model) {
if (isPanelVisible != null && model.getObject() != null) {
ItemVisibility visible = isPanelVisible.isVisible(model.getObject());
if (visible != null) {
Expand Down
Expand Up @@ -170,7 +170,8 @@ public void onClick(AjaxRequestTarget target) {
public boolean isVisible(){
return getModelObject().containsMultipleMultivalueContainer() && getModelObject().getContainer() != null
&& getModelObject().getDefinition().canModify()
&& !getModelObject().getChildMultivalueContainersToBeAdded(isPanelVisible).isEmpty();
&& !getModelObject().getChildMultivalueContainersToBeAdded(isPanelVisible).isEmpty()
&& buttonsVisibleBehaviour.isVisible();
}
});
add(addChildContainerButton);
Expand All @@ -183,13 +184,12 @@ && getModelObject().getDefinition().canModify()

@Override
public boolean isVisible(){
return pathsList.size() > 1 && isChildContainersSelectorPanelVisible;
return pathsList.size() > 1 && isChildContainersSelectorPanelVisible && buttonsVisibleBehaviour.isVisible();
}
});
childContainersSelectorPanel.setOutputMarkupId(true);
add(childContainersSelectorPanel);

LOGGER.info("XXXXXXXXXXXXXXXX model " + getModelObject().getDisplayName());
DropDownChoicePanel multivalueContainersList = new DropDownChoicePanel<>(ID_CHILD_CONTAINERS_LIST,
Model.of(pathsList.size() > 0 ? pathsList.get(0) : null), Model.ofList(pathsList),
new QNameIChoiceRenderer(getModelObject().getContainerValue().getValue().getClass().getSimpleName()));
Expand Down Expand Up @@ -353,4 +353,9 @@ public boolean isOn() {

return expandCollapseFragment;
}

@Override
public boolean isButtonsVisible() {
return PrismContainerValueHeaderPanel.this.getModelObject().isExpanded();
}
}

0 comments on commit caf3ebf

Please sign in to comment.