Skip to content

Commit

Permalink
delete multivalue container value functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Oct 30, 2017
1 parent e0b3c62 commit c6e5a95
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 23 deletions.
Expand Up @@ -20,15 +20,12 @@

import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.web.model.ContainerWrapperFromObjectWrapperModel;
import com.evolveum.midpoint.web.model.ContainerWrapperListFromObjectWrapperModel;
import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.component.form.Form;
import org.apache.wicket.model.Model;

/**
* Created by honchar.
Expand All @@ -43,18 +40,39 @@ public PolicyRuleDetailsPanel(String id, Form<?> form, IModel<ContainerValueWrap
}

protected void initContainersPanel(Form form, PageAdminObjectDetails<F> pageBase){
RepeatingView containers = new RepeatingView(ID_CONTAINERS);

ContainerWrapperFromObjectWrapperModel<PolicyConstraintsType, F> policyRuleModel =
new ContainerWrapperFromObjectWrapperModel<PolicyConstraintsType, F>(pageBase.getObjectModel(),
ContainerWrapperFromObjectWrapperModel<PolicyRuleType, F> policyRuleModel =
new ContainerWrapperFromObjectWrapperModel<PolicyRuleType, F>(pageBase.getObjectModel(),
getModelObject().getPath().append(AssignmentType.F_POLICY_RULE));
PrismContainerPanel<PolicyRuleType> constraintsContainer = new PrismContainerPanel(ID_CONTAINERS, policyRuleModel,

ContainerWrapper<PolicyRuleType> policyRules = policyRuleModel.getObject();
policyRules.setShowEmpty(true, false);
setRemoveContainerButtonVisibility(policyRules);
setAddContainerButtonVisibility(policyRules);

PrismContainerPanel<PolicyRuleType> constraintsContainerPanel = new PrismContainerPanel(ID_CONTAINERS, policyRuleModel,
false, form, null, pageBase);
constraintsContainer.setOutputMarkupId(true);
containers.add(constraintsContainer);
add(constraintsContainer);
constraintsContainerPanel.setOutputMarkupId(true);
add(constraintsContainerPanel);
}

private void setRemoveContainerButtonVisibility(ContainerWrapper<PolicyRuleType> policyRulesContainer){
ContainerWrapper constraintsContainer = policyRulesContainer.findContainerWrapper(new ItemPath(policyRulesContainer.getPath(), PolicyRuleType.F_POLICY_CONSTRAINTS));
if (constraintsContainer != null){
constraintsContainer.getValues().forEach(value ->
((ContainerValueWrapper)value).getItems().forEach(
constraintContainerItem -> {
if (constraintContainerItem instanceof ContainerWrapper && ((ContainerWrapper) constraintContainerItem).getItemDefinition().isMultiValue()){
((ContainerWrapper) constraintContainerItem).setRemoveContainerButtonVisible(true);
}
}
));
}
}

private void setAddContainerButtonVisibility(ContainerWrapper<PolicyRuleType> policyRulesContainer){
ContainerWrapper constraintsContainer = policyRulesContainer.findContainerWrapper(new ItemPath(policyRulesContainer.getPath(), PolicyRuleType.F_POLICY_CONSTRAINTS));
constraintsContainer.setAddContainerButtonVisible(true);
}

@Override
protected List<ItemPath> collectContainersToShow() {
Expand Down
Expand Up @@ -20,7 +20,9 @@

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
Expand Down Expand Up @@ -83,6 +85,9 @@ protected void addNewContainerValuePerformed(AjaxRequestTarget ajaxRequestTarget
}


protected void reloadParentContainerPanel(AjaxRequestTarget target){
target.add(ContainerValuePanel.this);
}
};
header.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -125,6 +130,16 @@ protected void populateItem(final ListItem<IW> item) {
if (item.getModel().getObject() instanceof ContainerWrapper) {
PrismContainerPanel<C> containerPanel = new PrismContainerPanel("property", (IModel<ContainerWrapper<C>>) item.getModel(), true, form, isPanaleVisible, pageBase);
containerPanel.setOutputMarkupId(true);
containerPanel.add(AttributeAppender.append("style",
item.getModelObject().getPath() + " " + Boolean.toString(containerPanel.isVisible())));
item.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

public boolean isVisible(){
boolean childVis = containerPanel.isVisible();
return childVis;
}
});
item.add(containerPanel);
return;
}
Expand Down
Expand Up @@ -744,8 +744,7 @@ public boolean containsMultivalueContainer(){
if (!(wrapper instanceof ContainerWrapper)) {
continue;
}
if (!((ContainerWrapper<C>) wrapper).getItemDefinition().isSingleValue() &&
((ContainerWrapper<C>) wrapper).isVisible()){
if (!((ContainerWrapper<C>) wrapper).getItemDefinition().isSingleValue()){
return true;
}
}
Expand Down
Expand Up @@ -64,7 +64,9 @@ public class ContainerWrapper<C extends Containerable> extends PrismWrapper impl
private List<ContainerValueWrapper<C>> values;

private boolean readonly;

private boolean removeContainerButtonVisible;
private boolean addContainerButtonVisible;

//TODO: HACK to have custom filter for association contianer here becasue of creating new association:
private ObjectFilter filter;

Expand Down Expand Up @@ -464,7 +466,7 @@ public boolean isVisible() {

//TODO: is this correct place? shouldn't we restrict creation for multivalue containers
//dirrectly in factory? this can plausible cause problems while computing deltas.
if (!getItem().isSingleValue() && isEmpty() && ContainerStatus.MODIFYING.equals(status)){
if (!getItem().isSingleValue() && isEmpty()){
return false;
}

Expand Down Expand Up @@ -509,5 +511,20 @@ public boolean isDeprecated() {
public String getDeprecatedSince() {
return getItemDefinition().getDeprecatedSince();
}


public boolean isRemoveContainerButtonVisible() {
return removeContainerButtonVisible;
}

public void setRemoveContainerButtonVisible(boolean removeContainerButtonVisible) {
this.removeContainerButtonVisible = removeContainerButtonVisible;
}

public boolean isAddContainerButtonVisible() {
return addContainerButtonVisible;
}

public void setAddContainerButtonVisible(boolean addContainerButtonVisible) {
this.addContainerButtonVisible = addContainerButtonVisible;
}
}
Expand Up @@ -17,12 +17,8 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<!--<div class="prism-header" wicket:id="header"/>-->
<!-- <div class="prism-properties"> -->
<div wicket:id="values">
<!-- class="row prism-property" -->
<div class="container-fluid" wicket:id="value"/>
</div>
<!-- </div> -->
</wicket:panel>
</html>
Expand Up @@ -64,7 +64,9 @@ public boolean isVisible() {
if (isPanelVisible!= null && !isPanelVisible.isVisible(model.getObject())) {
return false;
}
return model.getObject() !=null && model.getObject().isVisible();
ContainerWrapper o = model.getObject();
boolean isVis = o != null && o.isVisible();
return isVis;
}
});

Expand Down
Expand Up @@ -21,6 +21,7 @@
<button wicket:id="sortProperties" wicket:message="title:PrismObjectPanel.sortProperties" class="btn btn-box-tool" ><i class="fa fa-sort-alpha-asc"></i></button>
<button wicket:id="showEmptyFields" wicket:message="title:PrismObjectPanel.showEmpty" class="btn btn-box-tool" trigger="hover" about="showEmptyFields"><i class="fa fa-arrows-alt"></i></button>
<button wicket:id="addChildContainer" wicket:message="title:PrismObjectPanel.addChildContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-plus-circle"></i></button>
<button wicket:id="removeContainer" wicket:message="title:PrismObjectPanel.deleteContainer" class="btn btn-box-tool" trigger="hover"><i class="fa fa-minus-circle"></i></button>
<div class="pull-right" wicket:id="childContainersSelectorPanel">
<div class="col-xs-8" wicket:id="childContainersList" />
<div class="col-xs-2 btn btn-xs btn-success" wicket:id="addButton" />
Expand Down
Expand Up @@ -32,6 +32,7 @@ public class PrismContainerValueHeaderPanel<C extends Containerable> extends Pri
private static final String ID_SHOW_METADATA = "showMetadata";
private static final String ID_SHOW_EMPTY_FIELDS = "showEmptyFields";
private static final String ID_ADD_CHILD_CONTAINER = "addChildContainer";
private static final String ID_REMOVE_CONTAINER = "removeContainer";
private static final String ID_CHILD_CONTAINERS_SELECTOR_PANEL = "childContainersSelectorPanel";
private static final String ID_CHILD_CONTAINERS_LIST = "childContainersList";
private static final String ID_ADD_BUTTON = "addButton";
Expand Down Expand Up @@ -146,15 +147,16 @@ public void onClick(AjaxRequestTarget target) {

@Override
public boolean isOn() {
return PrismContainerValueHeaderPanel.this.getModelObject().isSorted();
return true;
}
};
addChildContainerButton.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){
return getModelObject().containsMultivalueContainer();
return getModelObject().containsMultivalueContainer() && getModelObject().getContainer() != null
&& getModelObject().getContainer().isAddContainerButtonVisible();
}
});
add(addChildContainerButton);
Expand Down Expand Up @@ -183,6 +185,37 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
}
});
childContainersSelectorPanel.add(multivalueContainersList);

ToggleIconButton removeContainerButton = new ToggleIconButton(ID_REMOVE_CONTAINER,
GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER, GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
ContainerValueWrapper containerValueWrapper = PrismContainerValueHeaderPanel.this.getModelObject();
containerValueWrapper.setStatus(ValueStatus.DELETED);
target.add(PrismContainerValueHeaderPanel.this);
PrismContainerValueHeaderPanel.this.reloadParentContainerPanel(target);
}

@Override
public boolean isOn() {
return true;
}
};
removeContainerButton.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){
return getModelObject().getContainer() != null ? getModelObject().getContainer().isRemoveContainerButtonVisible() : false;
}
});
add(removeContainerButton);

}

protected void reloadParentContainerPanel(AjaxRequestTarget target){
}

protected void addNewContainerValuePerformed(AjaxRequestTarget ajaxRequestTarget){
Expand Down
Expand Up @@ -2385,6 +2385,7 @@ PrismObjectPanel.protectedAccount=Protected account
PrismObjectPanel.showEmpty=Show empty fields
PrismObjectPanel.sortProperties=Sort properties
PrismObjectPanel.addChildContainer=Add child container
PrismObjectPanel.deleteContainer=Remove container value
PrismObjectPanel.showMetadata=Show metadata
PrismObjectPanel.hideMetadata=Hide metadata
prismOptionButtonPanel.hideEmpty=Hide empty fields
Expand Down

0 comments on commit c6e5a95

Please sign in to comment.