Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into bootstrap-upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Sep 26, 2014
2 parents 56aa791 + 4aaaa4d commit ea5dbe0
Show file tree
Hide file tree
Showing 27 changed files with 525 additions and 247 deletions.
Expand Up @@ -37,7 +37,6 @@
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.configuration.component.ChooseTypeDialog;
import com.evolveum.midpoint.web.page.admin.configuration.component.ChooseTypePanel;
import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto;
import com.evolveum.midpoint.web.util.WebMiscUtil;
Expand Down Expand Up @@ -67,6 +66,7 @@
import org.apache.wicket.util.visit.IVisitor;

import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import java.util.*;

Expand Down Expand Up @@ -249,11 +249,11 @@ public void setObject(Date object) {
}

private void initBodyLayout(WebMarkupContainer body) {
TextArea description = new TextArea(ID_DESCRIPTION,
new PropertyModel(getModel(), AssignmentEditorDto.F_DESCRIPTION));
TextArea description = new TextArea<>(ID_DESCRIPTION,
new PropertyModel<String>(getModel(), AssignmentEditorDto.F_DESCRIPTION));
body.add(description);

TextField relation = new TextField(ID_RELATION, new PropertyModel(getModel(), AssignmentEditorDto.F_RELATION));
TextField relation = new TextField<>(ID_RELATION, new PropertyModel<String>(getModel(), AssignmentEditorDto.F_RELATION));
relation.setEnabled(false);
body.add(relation);

Expand All @@ -271,6 +271,16 @@ protected ObjectQuery getChooseQuery(){

return query;
}

@Override
protected boolean isSearchEnabled() {
return true;
}

@Override
protected QName getSearchProperty() {
return OrgType.F_NAME;
}
};
tenantRefContainer.add(tenantRef);
tenantRefContainer.add(new VisibleEnableBehaviour(){
Expand Down
@@ -0,0 +1,54 @@
/*
* Copyright (c) 2010-2013 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.evolveum.midpoint.web.component.form;

import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.request.Response;

/**
* @author shood
* */
public class Form<T> extends org.apache.wicket.markup.html.form.Form<T>{

private static final String ID_CONTAINER = "fake";

public Form(String id){
this(id, false);
}

/**
* Use this constructor when a form needs to display empty input field:
* &lt;input style="display:none"&gt;
* &lt;input type="password" style="display:none"&gt;
*
* To overcome Chrome auto-completion of password and other form fields
* */
public Form(String id, boolean addFakeInputFields){
super(id);
}

@Override
public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
super.onComponentTagBody(markupStream, openTag);

final Response response = getResponse();

response.write("<input style=\"display:none\">\n" +
"<input type=\"password\" style=\"display:none\">");
}
}
Expand Up @@ -48,7 +48,7 @@
* TODO - not finished, work in progress
* @author shood
* */
public class MultiValueChoosePanel <T extends Serializable> extends SimplePanel<List<T>>{
public class MultiValueChoosePanel <T extends ObjectType> extends SimplePanel<List<T>>{

private static final Trace LOGGER = TraceManager.getTrace(MultiValueChoosePanel.class);

Expand Down Expand Up @@ -153,7 +153,7 @@ public void onClick(AjaxRequestTarget target) {
}

private void initDialog(Class<T> type){
ModalWindow dialog = new ChooseTypeDialog<T>(MODAL_ID_CHOOSE_PANEL, type){
ModalWindow dialog = new ChooseTypeDialog(MODAL_ID_CHOOSE_PANEL, type){

@Override
protected void chooseOperationPerformed(AjaxRequestTarget target, ObjectType object){
Expand All @@ -173,7 +173,7 @@ protected ObjectQuery createChooseQuery(){
}

/**
* @return css class for offseting other values (not first, left to the first there is a label)
* @return css class for off-setting other values (not first, left to the first there is a label)
*/
protected String getOffsetClass() {
return "col-md-offset-4";
Expand All @@ -188,9 +188,7 @@ public String getObject() {
}

@Override
public void setObject(String object) {
model.setObject((T) object);
}
public void setObject(String object) {}

@Override
public void detach() {
Expand Down
Expand Up @@ -107,7 +107,7 @@ public boolean isSuccess() {
return status == null || status == OperationResultStatusType.SUCCESS;
}

public static class ResourceOperationResult {
public static class ResourceOperationResult implements Serializable {
private ChangeType changeType;
private OperationResultStatus resultStatus;

Expand Down
Expand Up @@ -15,7 +15,11 @@
-->

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<div wicket:id="content">
<div wicket:id="content" style="padding: 10px;">
<form wicket:id="searchForm" class="form-inline pull-right">
<div wicket:id="basicSearch" />
</form>

<div wicket:id="table" />

<p align="right">
Expand Down
Expand Up @@ -16,15 +16,24 @@

package com.evolveum.midpoint.web.page.admin.configuration.component;

import com.evolveum.midpoint.prism.match.PolyStringNormMatchingRule;
import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer;
import com.evolveum.midpoint.prism.query.AndFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.SubstringFilter;
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.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.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ChooseTypeSearchDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import org.apache.commons.lang.StringUtils;
Expand All @@ -33,30 +42,45 @@
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.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;

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

/**
* @author shood
* */
public class ChooseTypeDialog<T extends Serializable> extends ModalWindow{
public class ChooseTypeDialog extends ModalWindow{

private static final Trace LOGGER = TraceManager.getTrace(ChooseTypeDialog.class);

private static final String DEFAULT_SORTABLE_PROPERTY = null;

private static final String ID_TABLE = "table";
private static final String ID_BUTTON_CANCEL = "cancelButton";
private static final String ID_SEARCH_FORM = "searchForm";
private static final String ID_BASIC_SEARCH = "basicSearch";

private static final Trace LOGGER = TraceManager.getTrace(ChooseTypeDialog.class);
Class<T> objectType;
private Class<? extends ObjectType> objectType;
private boolean initialized;
private IModel<ChooseTypeSearchDto> searchModel;

public ChooseTypeDialog(String id, Class<T> type){
public ChooseTypeDialog(String id, Class<? extends ObjectType> type){
super(id);

searchModel = new LoadableModel<ChooseTypeSearchDto>(false) {

@Override
protected ChooseTypeSearchDto load() {
return new ChooseTypeSearchDto();
}
};

objectType = type;

setTitle(createStringResource("chooseTypeDialog.title"));
Expand Down Expand Up @@ -84,6 +108,36 @@ protected void onBeforeRender(){
}

public void initLayout(WebMarkupContainer content){
Form searchForm = new Form(ID_SEARCH_FORM);
searchForm.setOutputMarkupId(true);
content.add(searchForm);
searchForm.add(new VisibleEnableBehaviour(){

@Override
public boolean isVisible() {
return isSearchEnabled();
}
});

BasicSearchPanel<ChooseTypeSearchDto> basicSearch = new BasicSearchPanel<ChooseTypeSearchDto>(ID_BASIC_SEARCH) {

@Override
protected IModel<String> createSearchTextModel() {
return new PropertyModel<>(searchModel, ChooseTypeSearchDto.F_SEARCH_TEXT);
}

@Override
protected void searchPerformed(AjaxRequestTarget target) {
typeSearchPerformed(target);
}

@Override
protected void clearSearchPerformed(AjaxRequestTarget target) {
typeClearSearchPerformed(target);
}
};
searchForm.add(basicSearch);

List<IColumn<SelectableBean<ObjectType>, String>> columns = initColumns();
ObjectDataProvider provider = new ObjectDataProvider(getPageBase(), this.objectType);
provider.setQuery(getDataProviderQuery());
Expand Down Expand Up @@ -119,8 +173,16 @@ public void onClick(AjaxRequestTarget target, IModel<SelectableBean<ObjectType>>
return columns;
}

private TablePanel getTablePanel(){
return (TablePanel) get(StringUtils.join(new String[]{CONTENT_ID, ID_TABLE}, ":"));
}

private Form getSearchForm(){
return (Form) get(StringUtils.join(new String[]{CONTENT_ID, ID_SEARCH_FORM}, ":"));
}

public void updateTablePerformed(AjaxRequestTarget target, ObjectQuery query){
TablePanel table = (TablePanel) get(StringUtils.join(new String[]{CONTENT_ID, ID_TABLE}, ":"));
TablePanel table = getTablePanel();
DataTable dataTable = table.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider)dataTable.getDataProvider();
provider.setQuery(query);
Expand Down Expand Up @@ -150,4 +212,78 @@ public StringResourceModel createStringResource(String resourceKey, Object... ob
private PageBase getPageBase() {
return (PageBase) getPage();
}

private void typeSearchPerformed(AjaxRequestTarget target){
ObjectQuery query = createObjectQuery();
TablePanel panel = getTablePanel();
DataTable table = panel.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider();
provider.setQuery(query);

target.add(panel);
}

private ObjectQuery createObjectQuery(){
ChooseTypeSearchDto dto = searchModel.getObject();
ObjectQuery query = null;

if(StringUtils.isEmpty(dto.getText())){
if(getDataProviderQuery() != null){
return getDataProviderQuery();
} else {
return query;
}
}

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

SubstringFilter filter = SubstringFilter.createSubstring(getSearchProperty(), objectType, getPageBase().getPrismContext(),
PolyStringNormMatchingRule.NAME, normalized);

if(getDataProviderQuery() != null){
AndFilter and = AndFilter.createAnd(getDataProviderQuery().getFilter(), filter);
query = ObjectQuery.createObjectQuery(and);
} else {
query = ObjectQuery.createObjectQuery(filter);
}

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

return query;
}

private void typeClearSearchPerformed(AjaxRequestTarget target){
searchModel.setObject(new ChooseTypeSearchDto());

TablePanel panel = getTablePanel();
DataTable table = panel.getDataTable();
ObjectDataProvider provider = (ObjectDataProvider) table.getDataProvider();

if(getDataProviderQuery() != null){
provider.setQuery(getDataProviderQuery());
} else {
provider.setQuery(null);
}

target.add(panel, getSearchForm());
}

/**
* Determines if search capabilities in this modal window are or are not enabled
* */
public boolean isSearchEnabled(){
return false;
}

/**
* provides search property to the search filter
* */
public QName getSearchProperty(){
return null;
}
}
Expand Up @@ -16,4 +16,5 @@

chooseTypeDialog.title=Choose Object
chooseTypeDialog.column.name=Name
chooseTypeDialog.button.cancel=Cancel
chooseTypeDialog.button.cancel=Cancel
chooseTypeDialog.message.queryError=Error occurred during translation search query to filter.

0 comments on commit ea5dbe0

Please sign in to comment.