Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Aug 2, 2018
2 parents 74b0613 + a5710eb commit ea9175e
Show file tree
Hide file tree
Showing 3 changed files with 286 additions and 61 deletions.
Expand Up @@ -31,12 +31,14 @@
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.request.Response;
import org.apache.wicket.util.string.Strings;

Expand Down Expand Up @@ -77,12 +79,18 @@
import com.evolveum.midpoint.web.component.prism.ContainerWrapper;
import com.evolveum.midpoint.web.component.prism.ContainerWrapperFactory;
import com.evolveum.midpoint.web.component.prism.ItemVisibility;
import com.evolveum.midpoint.web.component.prism.ItemVisibilityHandler;
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory;
import com.evolveum.midpoint.web.component.prism.PrismContainerHeaderPanel;
import com.evolveum.midpoint.web.component.prism.PrismContainerPanel;
import com.evolveum.midpoint.web.component.prism.PrismPropertyColumn;
import com.evolveum.midpoint.web.component.prism.PrismPropertyPanel;
import com.evolveum.midpoint.web.component.prism.PropertyWrapper;
import com.evolveum.midpoint.web.component.prism.ValueWrapper;
import com.evolveum.midpoint.web.model.ContainerValueWrapperFromObjectWrapperModel;
import com.evolveum.midpoint.web.model.PrismPropertyRealValueFromContainerableModel;
import com.evolveum.midpoint.web.model.PrismPropertyRealValuesFromContainerValueWrapperModel;
import com.evolveum.midpoint.web.page.admin.configuration.dto.StandardLoggerType;
import com.evolveum.midpoint.web.session.PageStorage;
import com.evolveum.midpoint.web.session.UserProfileStorage;
Expand Down Expand Up @@ -392,6 +400,8 @@ protected Component createInputPanel(String componentId,
}

PropertyWrapper<String> packageWrapper = (PropertyWrapper<String>)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_PACKAGE));
// packageWrapper.setDefaultValues();
//TODO: what about using
AutoCompleteTextPanel<String> autoCompleteTextPanel = new AutoCompleteTextPanel<String>(componentId, new PropertyModel<String>(packageWrapper.getValues(), "[0].value.value") {

@Override
Expand Down Expand Up @@ -482,10 +492,12 @@ protected Component createInputPanel(String componentId,
IModel<ContainerValueWrapper<ClassLoggerConfigurationType>> rowModel) {
ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue();
PropertyWrapper<LoggingLevelType> levelWrapper = (PropertyWrapper<LoggingLevelType>)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_LEVEL));
DropDownChoicePanel<LoggingLevelType> dropDownChoicePanel = new DropDownChoicePanel<>(componentId,
new PropertyModel<LoggingLevelType>(levelWrapper.getValues(), "[0].value.value"),
WebComponentUtil.createReadonlyModelFromEnum(LoggingLevelType.class));
return dropDownChoicePanel;
// DropDownChoicePanel<LoggingLevelType> dropDownChoicePanel = new DropDownChoicePanel<>(componentId,
// new PropertyModel<LoggingLevelType>(levelWrapper.getValues(), "[0].value.value"),
// WebComponentUtil.createReadonlyModelFromEnum(LoggingLevelType.class));
// return dropDownChoicePanel;
Form form= new Form("form");
return new PrismPropertyColumn<>(componentId, new Model(levelWrapper), form, getPageBase());
}

@Override
Expand All @@ -502,65 +514,95 @@ protected Component staticPanel(String componentId,
@Override
protected Component createInputPanel(String componentId,
IModel<ContainerValueWrapper<ClassLoggerConfigurationType>> rowModel) {
ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue();
// ClassLoggerConfigurationType logger = rowModel.getObject().getContainerValue().getValue();

IModel<Map<String, String>> options = new Model(null);
Map<String, String> optionsMap = new HashMap<>();
optionsMap.put("nonSelectedText", createStringResource("LoggingConfigPanel.appenders.Inherit").getString());
options.setObject(optionsMap);
PropertyWrapper<String> appenderWrapper = (PropertyWrapper<String>)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_APPENDER));

List<String> list = new ArrayList<>();

for (ValueWrapper appender : appenderWrapper.getValues()) {
list.add(appender.getValue().getRealValue());
}
// IModel<Map<String, String>> options = new Model(null);
// Map<String, String> optionsMap = new HashMap<>();
// optionsMap.put("nonSelectedText", createStringResource("LoggingConfigPanel.appenders.Inherit").getString());
// options.setObject(optionsMap);

PropertyWrapper<String> appenderWrapper = (PropertyWrapper<String>)rowModel.getObject().findPropertyWrapper(new ItemPath(rowModel.getObject().getPath(), ClassLoggerConfigurationType.F_APPENDER));

LOGGER.info("XXXXXXXXXXXXXXXXXX appenders: " + appenderWrapper.getValues().get(0).getValue());

ListMultipleChoicePanel panel = new ListMultipleChoicePanel<>(componentId,
new IModel<List<String>>(){

private static final long serialVersionUID = 1L;

@Override
public void setObject(List<String> list) {
appenderWrapper.getValues().clear();
List<ValueWrapper> appenders = new ArrayList<ValueWrapper>();
for(String value : list){
ValueWrapper<String> appender = appenderWrapper.createAddedValue();
PrismPropertyValue<String> prismValueAppender = (PrismPropertyValue<String>)appender.getValue();
prismValueAppender.setValue(value);
appenders.add(appender);
}
appenderWrapper.getValues().addAll(appenders);

}

@Override
public void detach() {
}

@Override
public List<String> getObject() {
return list;
}
},
new AbstractReadOnlyModel<List<String>>() {

private static final long serialVersionUID = 1L;
@Override
public List<String> getObject() {
List<String> list = new ArrayList<>();

for (AppenderConfigurationType appender : getModelObject().getValues().get(0).getContainerValue().getValue().getAppender()) {
list.add(appender.getName());
}

return list;
}
},
StringChoiceRenderer.simple(), options);
// List<String> list = new ArrayList<>();
//
Form form = new Form("form");
PrismPropertyColumn<PropertyWrapper<String>> panel = new PrismPropertyColumn<>(componentId, new Model(appenderWrapper), form, getPageBase());

// for (ValueWrapper appender : appenderWrapper.getValues()) {
// list.add(appender.getValue().getRealValue());
// }
//
// LOGGER.info("XXXXXXXXXXXXXXXXXX appenders: " + appenderWrapper.getValues().get(0).getValue());
//
// IModel<List<String>> choiceModel = new AbstractReadOnlyModel<List<String>>() {
//
// private static final long serialVersionUID = 1L;
//
// @Override
// public List<String> getObject() {
// List<String> list = new ArrayList<>();
//
// for (AppenderConfigurationType appender : getModelObject().getValues().get(0).getContainerValue()
// .getValue().getAppender()) {
// list.add(appender.getName());
// }
//
// return list;
// }
// };
//
//
// List<ValueWrapper> choices = getModelObject().getValues().get(0).findPropertyWrapper(new ItemPath(getModel().getObject().getPath(), LoggingConfigurationType.F_APPENDER, AppenderConfigurationType.F_NAME)).getValues();
//
// ListMultipleChoicePanel<ValueWrapper> panel = new ListMultipleChoicePanel(componentId,
// new ListModel(appenderWrapper.getValues()), new ListModel(choices),
//
// new IChoiceRenderer<ValueWrapper>() {
//
// public Object getDisplayValue(ValueWrapper object) {
//
// return object.getValue().getRealValue();
//
// };
//
// @Override
// public String getIdValue(ValueWrapper object, int index) {
// return Integer.toString(index);
// }
// @Override
// public ValueWrapper getObject(String id, IModel<? extends List<? extends ValueWrapper>> choices) {
// if (StringUtils.isEmpty(id)) {
// return null;
// }
// return choices.getObject().get(Integer.parseInt(id));
// }
//
// }
// , options);
//

// ListMultipleChoicePanel panel = new ListMultipleChoicePanel<>(componentId,
// new IModel<List<String>>(){
//
// private static final long serialVersionUID = 1L;
//
// @Override
// public void setObject(List<String> object) {
// logger.getAppender().clear();
// logger.getAppender().addAll(object);
// }
//
// @Override
// public void detach() {
// }
//
// @Override
// public List<String> getObject() {
// return list;
// }
// },
// ,
// StringChoiceRenderer.simple(), options);

return panel;
}
Expand Down
@@ -0,0 +1,24 @@
<!--
~ Copyright (c) 2010-2017 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.
-->

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="col-md-10 prism-property-value" wicket:id="values">
<div wicket:id="value"/>
</div>
</wicket:panel>
</html>
@@ -0,0 +1,159 @@
/*
* Copyright (c) 2010-2018 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.prism;

import java.util.List;

import org.apache.commons.lang.Validate;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.input.ExpressionValuePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationType;

/**
* @author katkav
*/
public class PrismPropertyColumn<IW extends ItemWrapper> extends BasePanel<IW> {
private static final long serialVersionUID = 1L;

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

private boolean labelContainerVisible = true;
private PageBase pageBase;

public PrismPropertyColumn(String id, final IModel<IW> model, Form form, PageBase pageBase) {
super(id, model);
Validate.notNull(model, "no model");
this.pageBase= pageBase;

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

setOutputMarkupId(true);
add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
// IW propertyWrapper = model.getObject();
// boolean visible = propertyWrapper.isVisible();
// LOGGER.trace("isVisible: {}: {}", propertyWrapper, visible);
// return visible;
return true;
}

@Override
public boolean isEnabled() {
return !model.getObject().isReadonly();
}
});

initLayout(model, form);
}

private void initLayout(final IModel<IW> model, final Form form) {

ListView<ValueWrapper> values = new ListView<ValueWrapper>("values",
new PropertyModel<>(model, "values")) {
private static final long serialVersionUID = 1L;

@Override
protected void populateItem(final ListItem<ValueWrapper> item) {
BasePanel panel = new PrismValuePanel("value", item.getModel(), createStringResource("smth"), form, getValueCssClass(), getInputCssClass());
item.add(panel);
item.add(AttributeModifier.append("class", createStyleClassModel(item.getModel())));

item.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return isVisibleValue(item.getModel());
}
});
}
};
values.add(new AttributeModifier("class", getValuesClass()));
values.setReuseItems(true);
add(values);
}

protected String getInputCssClass() {
return"col-xs-10";
}

protected String getValuesClass() {
return "col-md-6";
}

protected String getValueCssClass() {
return "row";
}


protected IModel<String> createStyleClassModel(final IModel<ValueWrapper> value) {
return new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 1L;

@Override
public String getObject() {
if (getIndexOfValue(value.getObject()) > 0) {
return "col-md-offset-2 prism-value";
}

return null;
}
};
}

private int getIndexOfValue(ValueWrapper value) {
ItemWrapper property = value.getItem();
List<ValueWrapper> values = property.getValues();
for (int i = 0; i < values.size(); i++) {
if (values.get(i).equals(value)) {
return i;
}
}

return -1;
}

private boolean isVisibleValue(IModel<ValueWrapper> model) {
ValueWrapper value = model.getObject();
return !ValueStatus.DELETED.equals(value.getStatus());
}

public boolean isLabelContainerVisible() {
return labelContainerVisible;
}

public void setLabelContainerVisible(boolean labelContainerVisible) {
this.labelContainerVisible = labelContainerVisible;
}
}

0 comments on commit ea9175e

Please sign in to comment.