Skip to content

Commit

Permalink
Work on issues from MID-1724. Fixed issues 1,3,4. Work on issue 7 in …
Browse files Browse the repository at this point in the history
…progress.
  • Loading branch information
Erik Suta committed Mar 10, 2014
1 parent 80d7053 commit 95903f9
Show file tree
Hide file tree
Showing 10 changed files with 260 additions and 49 deletions.
Expand Up @@ -238,6 +238,9 @@ private void initLayout(final IModel<ObjectWrapper> model, ResourceReference ima

WebMarkupContainer headerPanel = new WebMarkupContainer("headerPanel");
headerPanel.add(new AttributeAppender("class", createHeaderClassModel(model), " "));
// TODO - attempt to fix row color application when certain actions performed, similar to AssignmentEditorPanel.
// headerPanel.add(AttributeModifier.append("class", createHeaderClassModel(model)));
// headerPanel.setOutputMarkupId(true);
add(headerPanel);
headerPanel.add(new VisibleEnableBehaviour() {

Expand Down
Expand Up @@ -378,13 +378,12 @@ private AssignmentItemDto createAssignmentItem(PrismObject<UserType> user, Opera
PrismReference targetRef = assignment.findReference(AssignmentType.F_TARGET_REF);
if (targetRef == null || targetRef.isEmpty()) {
//account construction
PrismProperty construction = assignment.findProperty(AssignmentType.F_CONSTRUCTION);
PrismContainer construction = assignment.findContainer(AssignmentType.F_CONSTRUCTION);
String name = null;
String description = null;
if (construction != null && !construction.isEmpty()) {
ConstructionType constr = (ConstructionType)
construction.getRealValue(ConstructionType.class);
description = constr.getDescription();
if (construction.getValue().asContainerable() != null && !construction.isEmpty()) {
ConstructionType constr = (ConstructionType) construction.getValue().asContainerable();
description = (String) construction.getPropertyRealValue(ConstructionType.F_DESCRIPTION, String.class);

if (constr.getResourceRef() != null) {
ObjectReferenceType resourceRef = constr.getResourceRef();
Expand Down
Expand Up @@ -63,11 +63,11 @@ public String getObject() {

switch (item.getType()) {
case ACCOUNT_CONSTRUCTION:
return "silk-medal_silver_2";
return "silk-drive";
case ORG_UNIT:
return "silk-building";
case ROLE:
return "silk-medal_gold_3";
return "silk-user_suit";
default:
return "silk-error";
}
Expand Down
Expand Up @@ -492,20 +492,11 @@ public void onClick(AjaxRequestTarget target) {
return items;
}

private void initAccounts(WebMarkupContainer accounts) {
//todo implement check all functionality [lazyman]
AjaxCheckBox accountCheckAll = new AjaxCheckBox(ID_ACCOUNT_CHECK_ALL, new Model()) {

@Override
protected void onUpdate(AjaxRequestTarget target) {
}
};
accounts.add(accountCheckAll);

private void initAccounts(final WebMarkupContainer accounts) {
InlineMenu accountMenu = new InlineMenu(ID_ACCOUNT_MENU, new Model((Serializable) createAccountsMenu()));
accounts.add(accountMenu);

ListView<UserAccountDto> accountList = new ListView<UserAccountDto>(ID_ACCOUNT_LIST, accountsModel) {
final ListView<UserAccountDto> accountList = new ListView<UserAccountDto>(ID_ACCOUNT_LIST, accountsModel) {

@Override
protected void populateItem(final ListItem<UserAccountDto> item) {
Expand All @@ -524,10 +515,25 @@ protected List<InlineMenuItem> createMenuItems() {
};
}
};
account.setOutputMarkupId(true);
item.add(account);
}
};

AjaxCheckBox accountCheckAll = new AjaxCheckBox(ID_ACCOUNT_CHECK_ALL, new Model()) {

@Override
protected void onUpdate(AjaxRequestTarget target) {
for(UserAccountDto dto: accountList.getModelObject()){
ObjectWrapper accModel = dto.getObject();
accModel.setSelected(getModelObject());
}

target.add(accounts);
}
};
accounts.add(accountCheckAll);

accounts.add(accountList);
}

Expand Down Expand Up @@ -662,20 +668,11 @@ private PrismObject getReference(ObjectReferenceType ref, OperationResult result
return target;
}

private void initAssignments(WebMarkupContainer assignments) {
//todo implement check all functionality [lazyman]
AjaxCheckBox assignmentCheckAll = new AjaxCheckBox(ID_ASSIGNMENT_CHECK_ALL, new Model()) {

@Override
protected void onUpdate(AjaxRequestTarget target) {
}
};
assignments.add(assignmentCheckAll);

private void initAssignments(final WebMarkupContainer assignments) {
InlineMenu accountMenu = new InlineMenu(ID_ASSIGNMENT_MENU, new Model((Serializable) createAssignmentsMenu()));
assignments.add(accountMenu);

ListView<AssignmentEditorDto> assignmentList = new ListView<AssignmentEditorDto>(ID_ASSIGNMENT_LIST,
final ListView<AssignmentEditorDto> assignmentList = new ListView<AssignmentEditorDto>(ID_ASSIGNMENT_LIST,
assignmentsModel) {

@Override
Expand All @@ -685,7 +682,21 @@ protected void populateItem(final ListItem<AssignmentEditorDto> item) {
item.add(assignmentEditor);
}
};
assignmentList.setOutputMarkupId(true);
assignments.add(assignmentList);

AjaxCheckBox assignmentCheckAll = new AjaxCheckBox(ID_ASSIGNMENT_CHECK_ALL, new Model()) {

@Override
protected void onUpdate(AjaxRequestTarget target) {
for(AssignmentEditorDto item: assignmentList.getModelObject()){
item.setSelected(this.getModelObject());
}

target.add(assignments);
}
};
assignments.add(assignmentCheckAll);
}

private void initTasks(WebMarkupContainer tasks) {
Expand Down
Expand Up @@ -15,13 +15,14 @@
-->

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<div wicket:id="feedback" />

<div wicket:id="content">

<form wicket:id="mainForm" class="form-inline pull-right"
style="padding: 5px;">
<div class="form-group">
<input type="text" class="form-control input-sm" wicket:id="searchText"/>
</div>
<a class="btn btn-sm btn-default" wicket:id="search"/>

<div wicket:id="basicSearch" />
</form>

<div class="clearfix">
Expand Down
Expand Up @@ -19,30 +19,38 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.match.PolyStringNormMatchingRule;
import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer;
import com.evolveum.midpoint.prism.query.*;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.BasicSearchPanel;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.users.dto.OrgTableDto;
import com.evolveum.midpoint.web.page.admin.users.dto.OrgUnitSearchDto;
import com.evolveum.midpoint.web.session.OrgUnitStorage;
import com.evolveum.midpoint.web.util.WebModelUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.OrgType;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
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.PropertyColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;

import java.util.ArrayList;
Expand All @@ -60,15 +68,16 @@ public static enum Operation {MOVE, ADD, REMOVE}
private static final String DOT_CLASS = OrgUnitBrowser.class.getName() + ".";
private static final String OPERATION_LOAD_PARENT_ORG_REFS = DOT_CLASS + "loadParentOrgRefs";

private static final String ID_SEARCH_TEXT = "searchText";
private static final String ID_SEARCH = "search";
private static final String ID_BASIC_SEARCH = "basicSearch";
private static final String ID_TABLE = "table";
private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_CANCEL = "cancel";
private static final String ID_CREATE_ROOT = "createRoot";
private static final String ID_FEEDBACK = "feedback";

private boolean initialized;
private Operation operation;
private IModel<OrgUnitSearchDto> searchModel;

/**
* Objects which were selected on page, not in this dialog. It's used for example to filter org. units
Expand All @@ -77,8 +86,6 @@ public static enum Operation {MOVE, ADD, REMOVE}
*/
private List<OrgTableDto> selected;

private IModel<String> searchModel = new Model<String>();

public OrgUnitBrowser(String id) {
super(id);

Expand All @@ -89,6 +96,22 @@ public OrgUnitBrowser(String id) {
setInitialWidth(900);
setInitialHeight(530);
setWidthUnit("px");
setOutputMarkupId(true);

searchModel = new LoadableModel<OrgUnitSearchDto>() {

@Override
protected OrgUnitSearchDto load() {
OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits();
OrgUnitSearchDto dto = storage.getOrgUnitSearch();

if(dto == null){
dto = new OrgUnitSearchDto();
}

return dto;
}
};

WebMarkupContainer content = new WebMarkupContainer(getContentId());
setContent(content);
Expand Down Expand Up @@ -132,21 +155,32 @@ protected void onBeforeRender() {
}

private void initLayout(WebMarkupContainer container) {
FeedbackPanel feedback = new FeedbackPanel(ID_FEEDBACK);
feedback.setOutputMarkupId(true);
add(feedback);

Form form = new Form(ID_MAIN_FORM);
form.setOutputMarkupId(true);
container.add(form);

TextField searchText = new TextField(ID_SEARCH_TEXT, searchModel);
form.add(searchText);
BasicSearchPanel<OrgUnitSearchDto> basicSearch = new BasicSearchPanel<OrgUnitSearchDto>(ID_BASIC_SEARCH) {

AjaxSubmitButton search = new AjaxSubmitButton(ID_SEARCH,
createStringResource("OrgUnitBrowser.search")) {
@Override
protected IModel<String> createSearchTextModel() {
return new PropertyModel<>(searchModel, OrgUnitSearchDto.F_SEARCH_TEXT);
}

@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
searchPerformed(target);
protected void searchPerformed(AjaxRequestTarget target) {
OrgUnitBrowser.this.searchPerformed(target);
}

@Override
protected void clearSearchPerformed(AjaxRequestTarget target) {
OrgUnitBrowser.this.clearSearchPerformed(target);
}
};
form.add(search);
form.add(basicSearch);

ObjectDataProvider<OrgTableDto, OrgType> provider = new ObjectDataProvider<OrgTableDto, OrgType>(this, OrgType.class) {

Expand All @@ -160,8 +194,10 @@ public ObjectQuery getQuery() {
return createQueryFromSelected();
}
};
provider.setQuery(createQuery());
List<IColumn<OrgTableDto, String>> columns = initColumns();
TablePanel table = new TablePanel(ID_TABLE, provider, columns);
table.setOutputMarkupId(true);
container.add(table);

AjaxButton cancel = new AjaxButton(ID_CANCEL,
Expand All @@ -185,6 +221,11 @@ public void onClick(AjaxRequestTarget target) {
container.add(createRoot);
}

private TablePanel getOrgUnitTablePanel(){
String[] path = new String[]{getContentId(), ID_TABLE};
return (TablePanel) get(StringUtils.join(path, ":"));
}

private ObjectQuery createQueryFromSelected() {
if (selected == null) {
return null;
Expand Down Expand Up @@ -212,6 +253,7 @@ private ObjectQuery createQueryFromSelected() {

//todo here we must create query which select object which have oid from oids list [lazyman]
//todo create IN(oids) filter in schema, objectfilter and repo implementation
// InOidFilter
return null;
}

Expand Down Expand Up @@ -241,8 +283,65 @@ protected void rowSelected(AjaxRequestTarget target, IModel<OrgTableDto> row, Op

}

private ObjectQuery createQuery(){
OrgUnitSearchDto dto = searchModel.getObject();
ObjectQuery query = null;

if(StringUtils.isEmpty(dto.getText())){
return null;
}

try{
PolyStringNormalizer normalizer = getPageBase().getPrismContext().getDefaultPolyStringNormalizer();
String normalized = normalizer.normalize(dto.getText());

SubstringFilter substring = SubstringFilter.createSubstring(OrgType.F_NAME, OrgType.class,
getPageBase().getPrismContext(), PolyStringNormMatchingRule.NAME, normalized);

//AndFilter and = AndFilter.createAnd(org, substring);

// query = ObjectQuery.createObjectQuery(and);
query = ObjectQuery.createObjectQuery(substring);

} catch (Exception e){
error(getString("OrgUnitBrowser.message.queryError") + " " + e.getMessage());
LoggingUtils.logException(LOGGER, "Couldn't create query filter.", e);
}

return query;
}

private void searchPerformed(AjaxRequestTarget target) {
ObjectQuery query = createQuery();
target.add(get(ID_FEEDBACK));

TablePanel panel = getOrgUnitTablePanel();
DataTable table = panel.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider();
provider.setQuery(query);

OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits();
storage.setOrgUnitSearch(searchModel.getObject());
panel.setCurrentPage(storage.getOrgUnitPaging());

target.add(get(getContentId()));
target.add(panel);
}

private void clearSearchPerformed(AjaxRequestTarget target){
searchModel.setObject(new OrgUnitSearchDto());

TablePanel panel = getOrgUnitTablePanel();
DataTable table = panel.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider();
provider.setQuery(null);

OrgUnitStorage storage = getPageBase().getSessionStorage().getOrgUnits();
storage.setOrgUnitSearch(searchModel.getObject());
panel.setCurrentPage(storage.getOrgUnitPaging());

target.add(get(getContentId()));
target.add(panel);
}

private void cancelPerformed(AjaxRequestTarget target) {
Expand Down
Expand Up @@ -17,4 +17,5 @@
OrgUnitBrowser.title=Choose new org. unit parent
OrgUnitBrowser.search=Search
OrgUnitBrowser.cancel=Cancel
OrgUnitBrowser.createRoot=Make it root
OrgUnitBrowser.createRoot=Make it root
OrgUnitBrowser.message.queryError=Error occurred during translation search query to filter.

0 comments on commit 95903f9

Please sign in to comment.