Skip to content

Commit

Permalink
MID-1939 - editor for object policies on system configuration pages f…
Browse files Browse the repository at this point in the history
…inished
  • Loading branch information
Erik Suta committed Aug 11, 2014
1 parent 3d21733 commit 4939b35
Show file tree
Hide file tree
Showing 10 changed files with 256 additions and 77 deletions.
Expand Up @@ -106,7 +106,7 @@ public String getObject() {
}));
listItem.add(textWrapper);

TextField text = new TextField<String>(ID_TEXT, createTextModel(listItem.getModel()));
TextField text = new TextField<>(ID_TEXT, createTextModel(listItem.getModel()));
text.add(new AjaxFormComponentUpdatingBehavior("onblur") {
@Override
protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) {}
Expand Down
Expand Up @@ -20,12 +20,13 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.ObjectPolicyDialog;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.web.util.WebModelUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -50,7 +51,7 @@
* @author shood
*/

public class ObjectPolicyConfigurationEditor extends SimplePanel<List<ObjectPolicyConfigurationType>> {
public class ObjectPolicyConfigurationEditor extends SimplePanel<List<ObjectPolicyConfigurationTypeDto>> {

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

Expand All @@ -73,7 +74,7 @@ public class ObjectPolicyConfigurationEditor extends SimplePanel<List<ObjectPoli
private static final String CLASS_MULTI_VALUE = "multivalue-form";
private static final String OFFSET_CLASS = "col-md-offset-4";

public ObjectPolicyConfigurationEditor(String id, IModel<List<ObjectPolicyConfigurationType>> model){
public ObjectPolicyConfigurationEditor(String id, IModel<List<ObjectPolicyConfigurationTypeDto>> model){
super(id, model);

setOutputMarkupId(true);
Expand All @@ -85,7 +86,7 @@ protected void initLayout(){
final Label label = new Label(ID_LABEL, createStringResource("objectPolicyConfigurationEditor.label"));
add(label);

ListView repeater = new ListView<ObjectPolicyConfigurationType>(ID_REPEATER, getModel()) {
ListView repeater = new ListView<ObjectPolicyConfigurationTypeDto>(ID_REPEATER, getModel()) {

@Override
protected void populateItem(final ListItem item) {
Expand All @@ -104,6 +105,7 @@ public String getObject(){
item.add(textWrapper);

TextField name = new TextField<>(ID_NAME, createNameModel(item.getModel()));
name.setOutputMarkupId(true);
name.add(new AjaxFormComponentUpdatingBehavior("onblur") {
@Override
protected void onUpdate(AjaxRequestTarget target) {}
Expand Down Expand Up @@ -142,6 +144,7 @@ public String getObject() {
};

initDialog();
repeater.setOutputMarkupId(true);
add(repeater);
}

Expand All @@ -150,14 +153,36 @@ private void initDialog(){

@Override
protected void savePerformed(AjaxRequestTarget target){
ObjectPolicyConfigurationTypeDto oldConfig = getModel().getObject().getConfig();
ObjectPolicyConfigurationTypeDto newConfig = getModel().getObject().preparePolicyConfig();

ObjectPolicyConfigurationEditor.this.replace(oldConfig, newConfig);


target.add(ObjectPolicyConfigurationEditor.this);
close(target);
}
};
add(editor);
}

private void replace(ObjectPolicyConfigurationTypeDto old, ObjectPolicyConfigurationTypeDto newC){
boolean added = false;

List<ObjectPolicyConfigurationTypeDto> list = getModelObject();
for(ObjectPolicyConfigurationTypeDto o: list){
if(old.equals(o)){
o.setConstraints(newC.getConstraints());
o.setTemplateRef(newC.getTemplateRef());
o.setType(newC.getType());
added = true;
}
}

if(!added){
list.add(newC);
}
}

private void initButtons(WebMarkupContainer buttonGroup, final ListItem item){
AjaxLink add = new AjaxLink(ID_BUTTON_ADD) {

Expand Down Expand Up @@ -213,17 +238,17 @@ protected boolean isRemoveButtonVisible() {
return false;
}

private IModel<String> createNameModel(final IModel<ObjectPolicyConfigurationType> model){
return new AbstractReadOnlyModel<String>() {
private IModel<String> createNameModel(final IModel<ObjectPolicyConfigurationTypeDto> model){
return new LoadableModel<String>() {

@Override
public String getObject() {
public String load() {
OperationResult result = new OperationResult(OPERATION_LOAD_OBJECT_TEMPLATE);
StringBuilder sb = new StringBuilder();
ObjectPolicyConfigurationType config = model.getObject();
ObjectPolicyConfigurationTypeDto config = model.getObject();

if(config != null){
ObjectReferenceType ref = config.getObjectTemplateRef();
ObjectReferenceType ref = config.getTemplateRef();

if(ref != null){
String oid = ref.getOid();
Expand All @@ -247,18 +272,18 @@ public String getObject() {
}

private void addPerformed(AjaxRequestTarget target){
List<ObjectPolicyConfigurationType> list = getModelObject();
list.add(new ObjectPolicyConfigurationType());
List<ObjectPolicyConfigurationTypeDto> list = getModelObject();
list.add(new ObjectPolicyConfigurationTypeDto());

target.add(this);
}

private void removePerformed(AjaxRequestTarget target, ListItem item){
List<ObjectPolicyConfigurationType> list = getModelObject();
Iterator<ObjectPolicyConfigurationType> iterator = list.iterator();
List<ObjectPolicyConfigurationTypeDto> list = getModelObject();
Iterator<ObjectPolicyConfigurationTypeDto> iterator = list.iterator();

while (iterator.hasNext()){
ObjectPolicyConfigurationType object = iterator.next();
ObjectPolicyConfigurationTypeDto object = iterator.next();

if(object.equals(item.getModelObject())){
iterator.remove();
Expand All @@ -267,15 +292,15 @@ private void removePerformed(AjaxRequestTarget target, ListItem item){
}

if(list.size() == 0){
list.add(new ObjectPolicyConfigurationType());
list.add(new ObjectPolicyConfigurationTypeDto());
}

target.add(this);
}

private void editPerformed(AjaxRequestTarget target, ListItem item){
ObjectPolicyDialog window = (ObjectPolicyDialog) get(ID_MODAL_WINDOW);
window.updateModel(target, (ObjectPolicyConfigurationType)item.getModelObject());
window.updateModel(target, (ObjectPolicyConfigurationTypeDto)item.getModelObject());
window.show(target);
}

Expand Down
Expand Up @@ -40,6 +40,7 @@
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -315,6 +316,7 @@ private void savePerformed(AjaxRequestTarget target) {

s = saveLogging(target, s);
s = saveNotificationConfiguration(s);
saveObjectPolicies(s);

if(LOGGER.isTraceEnabled())
LOGGER.trace("Saving logging configuration.");
Expand Down Expand Up @@ -359,6 +361,40 @@ private void savePerformed(AjaxRequestTarget target) {
resetPerformed(target);
}

private void saveObjectPolicies(SystemConfigurationType systemConfig){
List<ObjectPolicyConfigurationTypeDto> configList = systemConfigPanel.getModel().getObject().getObjectPolicyList();
List<ObjectPolicyConfigurationType> confList = new ArrayList<>();

ObjectPolicyConfigurationType newObjectPolicyConfig;
for(ObjectPolicyConfigurationTypeDto o: configList){
newObjectPolicyConfig = new ObjectPolicyConfigurationType();
newObjectPolicyConfig.setType(o.getType());
newObjectPolicyConfig.setObjectTemplateRef(o.getTemplateRef());

List<PropertyConstraintType> constraintList = new ArrayList<>();
PropertyConstraintType property;

if(o.getConstraints() != null){
for(PropertyConstraintTypeDto c: o.getConstraints()){
if(StringUtils.isNotEmpty(c.getPropertyPath())){
property = new PropertyConstraintType();
property.setOidBound(c.isOidBound());
property.setPath(new ItemPathType(c.getPropertyPath()));

constraintList.add(property);
}
}
}

newObjectPolicyConfig.getPropertyConstraint().addAll(constraintList);

confList.add(newObjectPolicyConfig);
}

systemConfig.getDefaultObjectPolicyConfiguration().clear();
systemConfig.getDefaultObjectPolicyConfiguration().addAll(confList);
}

/*
* TODO - currently, we are saving changes to MailServerConfigType on index 0 in ArrayList. This will
* change when GUI is update to define multiple mailServer or even SMS notifications
Expand Down
Expand Up @@ -23,11 +23,12 @@
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.form.DropDownFormGroup;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyDialogDto;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectTemplateConfigTypeReferenceDto;
import com.evolveum.midpoint.web.page.admin.configuration.dto.PropertyConstraintTypeDto;
Expand Down Expand Up @@ -86,10 +87,9 @@ public class ObjectPolicyDialog extends ModalWindow{
private static final String OFFSET_CLASS = "col-md-offset-4";

private boolean initialized;
private boolean isEditing;
private IModel<ObjectPolicyDialogDto> model;

public ObjectPolicyDialog(String id, final ObjectPolicyConfigurationType config){
public ObjectPolicyDialog(String id, final ObjectPolicyConfigurationTypeDto config){
super(id);

model = new LoadableModel<ObjectPolicyDialogDto>(false) {
Expand All @@ -101,7 +101,7 @@ protected ObjectPolicyDialogDto load() {
};

setOutputMarkupId(true);
createTitle();
setTitle(createStringResource("ObjectPolicyDialog.label"));
showUnloadConfirmation(false);
setCssClassName(ModalWindow.CSS_CLASS_GRAY);
setCookieName(ObjectPolicyDialog.class.getSimpleName() + ((int) (Math.random() * 100)));
Expand All @@ -114,28 +114,18 @@ protected ObjectPolicyDialogDto load() {
setContent(content);
}

private ObjectPolicyDialogDto loadModel(ObjectPolicyConfigurationType config){
private ObjectPolicyDialogDto loadModel(ObjectPolicyConfigurationTypeDto config){
ObjectPolicyDialogDto dto;

if(config == null){
dto = new ObjectPolicyDialogDto(new ObjectPolicyConfigurationType(), getPageBase());
isEditing = false;
dto = new ObjectPolicyDialogDto(new ObjectPolicyConfigurationTypeDto(), getPageBase());
} else {
dto = new ObjectPolicyDialogDto(config, getPageBase());
isEditing = true;
}

return dto;
}

private void createTitle(){
if(isEditing){
setTitle(createStringResource("ObjectPolicyDialog.label.edit"));
} else {
setTitle(createStringResource("ObjectPolicyDialog.label.new"));
}
}

public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return new StringResourceModel(resourceKey, this, null, resourceKey, objects);
}
Expand All @@ -152,19 +142,18 @@ protected void onBeforeRender(){
initialized = true;
}

public void updateModel(AjaxRequestTarget target, ObjectPolicyConfigurationType config){
public void updateModel(AjaxRequestTarget target, ObjectPolicyConfigurationTypeDto config){
model.setObject(new ObjectPolicyDialogDto(config, getPageBase()));
target.add(getContent());
}

public void initLayout(WebMarkupContainer content){

Form form = new Form(ID_FORM);
form.setOutputMarkupId(true);
content.add(form);

DropDownFormGroup type = new DropDownFormGroup(ID_TYPE, new PropertyModel<QName>(model,
"config.type"), createTypeChoiceList(),
ObjectPolicyDialogDto.F_TYPE), createTypeChoiceList(),
new IChoiceRenderer<QName>() {

@Override
Expand All @@ -177,10 +166,9 @@ public String getIdValue(QName object, int index) {
return Integer.toString(index);
}
}, createStringResource("ObjectPolicyDialog.type"), ID_LABEL_SIZE, ID_INPUT_SIZE, false);
type.getInput().setNullValid(true);
form.add(type);

DropDownFormGroup template = new DropDownFormGroup(ID_OBJECT_TEMPLATE, new PropertyModel(model, ObjectPolicyDialogDto.F_TEMPLATE_REF),
DropDownFormGroup template = new DropDownFormGroup(ID_OBJECT_TEMPLATE, new PropertyModel<ObjectTemplateConfigTypeReferenceDto>(model, ObjectPolicyDialogDto.F_TEMPLATE_REF),
createObjectTemplateList(), new IChoiceRenderer<ObjectTemplateConfigTypeReferenceDto>() {
@Override
public Object getDisplayValue(ObjectTemplateConfigTypeReferenceDto object) {
Expand All @@ -192,7 +180,6 @@ public String getIdValue(ObjectTemplateConfigTypeReferenceDto object, int index)
return Integer.toString(index);
}
}, createStringResource("ObjectPolicyDialog.template"), ID_LABEL_SIZE, ID_INPUT_SIZE, false);
template.getInput().setNullValid(true);
form.add(template);

ListView repeater = new ListView<PropertyConstraintTypeDto>(ID_REPEATER,
Expand Down Expand Up @@ -244,19 +231,21 @@ public String getObject() {
};
form.add(repeater);

AjaxButton cancel = new AjaxButton(ID_BUTTON_CANCEL,
AjaxSubmitButton cancel = new AjaxSubmitButton(ID_BUTTON_CANCEL,
createStringResource("ObjectPolicyDialog.button.cancel")) {

@Override
public void onClick(AjaxRequestTarget target) {
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
cancelPerformed(target);
}
};
form.add(cancel);

AjaxButton save = new AjaxButton(ID_BUTTON_SAVE,
AjaxSubmitButton save = new AjaxSubmitButton(ID_BUTTON_SAVE,
createStringResource("ObjectPolicyDialog.button.save")) {

@Override
public void onClick(AjaxRequestTarget target) {
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
savePerformed(target);
}
};
Expand Down Expand Up @@ -401,4 +390,8 @@ protected void savePerformed(AjaxRequestTarget target){}
private PageBase getPageBase() {
return (PageBase) getPage();
}

public IModel<ObjectPolicyDialogDto> getModel(){
return model;
}
}
Expand Up @@ -14,8 +14,7 @@
# limitations under the License.
#

ObjectPolicyDialog.label.new=Create new Object Policy
ObjectPolicyDialog.label.edit=Edit Object Policy
ObjectPolicyDialog.label=Create/Edit Object Policy
ObjectPolicyDialog.type=Object type
ObjectPolicyDialog.template=Object template
ObjectPolicyDialog.propertyConstraint=Property constraint
Expand Down
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.web.component.form.DropDownFormGroup;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import com.evolveum.midpoint.web.page.admin.configuration.dto.AEPlevel;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto;
import com.evolveum.midpoint.web.page.admin.configuration.dto.SystemConfigurationDto;
import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
Expand Down Expand Up @@ -83,7 +84,7 @@ protected void initLayout(){
add(userTemplateChoosePanel);

ObjectPolicyConfigurationEditor objectPolicyEditor = new ObjectPolicyConfigurationEditor(ID_OBJECT_POLICY_EDITOR,
new PropertyModel<List<ObjectPolicyConfigurationType>>(getModel(), SystemConfigurationDto.F_OBJECT_POLICY_LIST));
new PropertyModel<List<ObjectPolicyConfigurationTypeDto>>(getModel(), SystemConfigurationDto.F_OBJECT_POLICY_LIST));
add(objectPolicyEditor);

DropDownChoice<AEPlevel> aepLevel = new DropDownChoice<>(ID_GLOBAL_AEP,
Expand Down

0 comments on commit 4939b35

Please sign in to comment.