Skip to content

Commit

Permalink
fix style of last resource wizard step for selecting object class and…
Browse files Browse the repository at this point in the history
… save new resource
  • Loading branch information
skublik committed Jul 4, 2022
1 parent 47ac6d9 commit 709aeab
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,15 @@ protected void onError(AjaxRequestTarget target) {
WebComponentUtil.addDisabledClassBehavior(next);
add(next);

Label nextLabel = new Label(ID_NEXT_LABEL, () -> {
Label nextLabel = new Label(ID_NEXT_LABEL, getNextLabelModel());
next.add(nextLabel);
}

protected IModel<String> getNextLabelModel() {
return () -> {
WizardStep step = getWizard().getNextPanel();
return step != null ? step.getTitle().getObject() : null;
});
next.add(nextLabel);
};
}

protected void updateFeedbackPanels(AjaxRequestTarget target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SelectableListDataProvider;
import com.evolveum.midpoint.web.component.wizard.resource.dto.ObjectClassDto;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand All @@ -22,6 +21,8 @@
*/
public class ObjectClassDataProvider extends SelectableListDataProvider<SelectableBean<ObjectClassWrapper>, ObjectClassWrapper> {

public final static String F_FILTER = "filter";

private String filter;

public ObjectClassDataProvider(Component Component, IModel<List<ObjectClassWrapper>> model) {
Expand Down Expand Up @@ -49,4 +50,9 @@ public void setFilter(String filter) {
public String getFilter() {
return filter;
}

@Override
public long size() {
return super.size();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,31 @@
<wicket:message key="PageResource.wizard.step.selectObjectClasses"/>
</span>
</span>
<div class="ml-auto input-group" style="width: 350px;">
<form class="ml-auto input-group" style="width: 350px;" wicket:id="searchForm">
<input class="form-control" wicket:id="searchFiled"/>
<div class="input-group-append">
<a class="btn btn-primary" wicket:id="searchButton">
<a class="btn btn-primary" wicket:id="searchButton"
style="border-bottom-right-radius: 0.25rem; border-top-right-radius: 0.25rem;">
<i class="fa fa-magnifying-glass mr-2"></i>
<wicket:message key="pageResources.button.search"/>
</a>
</div>
</div>
</form>
</div>
<div class="bg-white rounded border d-flex p-3" style="min-height: 4rem;">

<div class="bg-white rounded border-left border-right d-flex flex-column p-3" style="min-height: 5.4rem;" wicket:id="selectedItemsContainer">
<span>
<wicket:message key="SelectObjectClassesStepPanel.selectedItem"/>
</span>
<div class="d-inline-flex">
<wicket:container wicket:id="selectedItemContainer">
<div class="btn-sm btn-primary d-flex" style="cursor: auto;">
<div wicket:id="selectedItem"/>
<a wicket:id="deselectButton">
<i class="fa fa-xmark ml-2 text-white"></i>
</a>
</div>
</wicket:container>
</div>
</div>
<div class="bg-white rounded border mb-0" wicket:id="table" style="box-shadow: none;"/>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,45 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.wizard.BasicWizardPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.factory.panel.ItemRealValueModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.data.BoxedTablePanel;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;

import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.wizard.resource.dto.ObjectClassDto;

import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.XmlSchemaType;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -46,16 +58,42 @@
// display = @PanelDisplay(label = "PageResource.wizard.step.selectObjectClasses", icon = "fa fa-table-cells"))
public class SelectObjectClassesStepPanel extends BasicWizardPanel {

private static final String ID_SEARCH_FORM = "searchForm";
private static final String ID_SEARCH_FIELD = "searchFiled";
private static final String ID_SEARCH_BUTTON = "searchButton";
private static final String ID_SELECTED_ITEMS_CONTAINER = "selectedItemsContainer";
private static final String ID_SELECTED_ITEM_CONTAINER = "selectedItemContainer";
private static final String ID_SELECTED_ITEM = "selectedItem";
private static final String ID_DESELECT_BUTTON = "deselectButton";
private static final String ID_TABLE = "table";

private final ResourceDetailsModel resourceModel;
// private final LoadableModel<List<QName>> selected;
private final LoadableModel<List<QName>> selectedItems;

public SelectObjectClassesStepPanel(ResourceDetailsModel model) {
super();
this.resourceModel = model;

// selectedItems = new ItemRealValueModel<>()

selectedItems = new LoadableModel<>() {
@Override
protected List<QName> load() {
@NotNull ResourceType resource = resourceModel.getObjectType();
if (resource.getSchema() == null) {
resource.beginSchema();
}
if (resource.getSchema().getGenerationConstraints() == null) {
resource.getSchema().beginGenerationConstraints();
}

List<QName> list = resource.getSchema().getGenerationConstraints().getGenerateObjectClass();
if (list.size() == 1 && list.get(0) == null) {
list.clear();
}
return list;
}
};
}

@Override
Expand All @@ -81,32 +119,72 @@ protected void onInitialize() {

private void initLayout() {

TextField<String> objectClass = new TextField<>(ID_SEARCH_FIELD, new Model<>());
ObjectClassDataProvider provider = createProvider();

MidpointForm searchForm = new MidpointForm(ID_SEARCH_FORM);
searchForm.setOutputMarkupId(true);
add(searchForm);

TextField<String> objectClass =
new TextField<>(ID_SEARCH_FIELD, new PropertyModel<>(provider, ObjectClassDataProvider.F_FILTER));
objectClass.setOutputMarkupId(true);
add(objectClass);
objectClass.add(WebComponentUtil.getSubmitOnEnterKeyDownBehavior("searchSimple"));
searchForm.add(objectClass);

AjaxButton searchButton = new AjaxButton(ID_SEARCH_BUTTON) {
AjaxSubmitButton searchButton = new AjaxSubmitButton(ID_SEARCH_BUTTON) {
@Override
public void onClick(AjaxRequestTarget target) {
public void onSubmit(AjaxRequestTarget target) {
updateSearchPerformed(target);
}
};
searchButton.setOutputMarkupId(true);
searchButton.setOutputMarkupPlaceholderTag(true);
add(searchButton);
searchForm.add(searchButton);

WebMarkupContainer selectedItemsContainer = new WebMarkupContainer(ID_SELECTED_ITEMS_CONTAINER);
selectedItemsContainer.setOutputMarkupId(true);
add(selectedItemsContainer);
ListView<QName> selectedContainer = new ListView<>(ID_SELECTED_ITEM_CONTAINER, selectedItems) {

BoxedTablePanel<SelectableBean<ObjectClassDto>> table = new BoxedTablePanel(ID_TABLE, createProvider(), createColumns());
@Override
protected void populateItem(ListItem<QName> item) {
QName objectClass = item.getModelObject();

item.add(new Label(ID_SELECTED_ITEM, () -> objectClass.getLocalPart()));
item.add(new AjaxButton(ID_DESELECT_BUTTON) {
@Override
public void onClick(AjaxRequestTarget target) {
deselectItem(objectClass, target);
}
});
}
};
selectedContainer.setOutputMarkupId(true);
selectedItemsContainer.add(selectedContainer);

BoxedTablePanel<SelectableBean<ObjectClassDto>> table = new BoxedTablePanel(ID_TABLE, provider, createColumns());
add(table);
}

private void deselectItem(QName objectClass, AjaxRequestTarget target) {
selectedItems.getObject().remove(objectClass);

BoxedTablePanel table = getTable();
((ObjectClassDataProvider) table.getDataTable().getDataProvider()).clearCache();

target.add(table);
target.add(getSelectedItemsContainer());
}

private void updateSearchPerformed(AjaxRequestTarget target) {
BoxedTablePanel table = getTable();
((ObjectClassDataProvider)table.getDataTable().getDataProvider()).setFilter(getObjectClassText().getModelObject());
target.add(getTable());
((ObjectClassDataProvider) table.getDataTable().getDataProvider()).setFilter(getObjectClassText().getModelObject());
((ObjectClassDataProvider) table.getDataTable().getDataProvider()).clearCache();
target.add(table);
}

private TextField<String> getObjectClassText() {
return (TextField) get(ID_SEARCH_FIELD);
return (TextField) get(getPageBase().createComponentPath(ID_SEARCH_FORM, ID_SEARCH_FIELD));
}

private BoxedTablePanel getTable() {
Expand All @@ -120,6 +198,25 @@ private List<IColumn<SelectableBean<ObjectClassWrapper>, String>> createColumns(
@Override
protected void onUpdateRow(AjaxRequestTarget target, DataTable table, IModel<SelectableBean<ObjectClassWrapper>> rowModel, IModel<Boolean> selected) {
super.onUpdateRow(target, table, rowModel, selected);
if (Boolean.TRUE.equals(selected.getObject())) {
selectedItems.getObject().add(rowModel.getObject().getValue().getObjectClassName());
} else {
selectedItems.getObject().remove(rowModel.getObject().getValue().getObjectClassName());
}
target.add(getSelectedItemsContainer());
}

@Override
protected void onUpdateHeader(AjaxRequestTarget target, boolean selected, DataTable table) {
super.onUpdateHeader(target, selected, table);
ObjectClassDataProvider provider = (ObjectClassDataProvider) table.getDataProvider();
if (selected) {
provider.getListFromModel().forEach(objectClass -> selectedItems.getObject().add(objectClass.getObjectClassName()));
} else {
provider.getListFromModel().forEach(objectClass -> selectedItems.getObject().remove(objectClass.getObjectClassName()));
}
target.add(getSelectedItemsContainer());

}
});

Expand Down Expand Up @@ -157,7 +254,29 @@ public void populateItem(
return columns;
}

private Component getSelectedItemsContainer() {
return get(ID_SELECTED_ITEMS_CONTAINER);
}

private ObjectClassDataProvider createProvider() {
return new ObjectClassDataProvider(SelectObjectClassesStepPanel.this, resourceModel.getObjectClassesModel());
return new ObjectClassDataProvider(SelectObjectClassesStepPanel.this, resourceModel.getObjectClassesModel()) {
@Override
protected SelectableBean<ObjectClassWrapper> createObjectWrapper(ObjectClassWrapper object) {
SelectableBean<ObjectClassWrapper> wrapper = super.createObjectWrapper(object);
wrapper.setSelected(selectedItems.getObject().contains(object.getObjectClassName()));
return wrapper;
}
};
}

@Override
protected IModel<String> getNextLabelModel() {
return getPageBase().createStringResource("SelectObjectClassesStepPanel.nextLabel");
}

@Override
public boolean onNextPerformed(AjaxRequestTarget target) {
((PageResource)getPageBase()).savePerformed(target);
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="bg-white rounded p-2 pl-3 pr-3 border" wicket:id="header"/>
<div class="bg-white rounded p-2 pl-3 pr-3 border-top border-left border-right" wicket:id="header"/>
<div class="mb-3">
<wicket:container wicket:id="values">
<div wicket:id="value"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ protected W createObjectWrapper(T object) {

@Override
protected int internalSize() {
List<T> list = getModel().getObject();
List<T> list = getListFromModel();
if (list == null) {
return 0;
}
Expand Down

0 comments on commit 709aeab

Please sign in to comment.