/*
* Copyright (c) 2010-2016 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.page.admin.configuration.component;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.form.TextAreaFormGroup;
import com.evolveum.midpoint.web.component.form.TextFormGroup;
import com.evolveum.midpoint.web.component.form.multivalue.MultiValueTextFormGroup;
import com.evolveum.midpoint.xml.ns._public.common.common_3.IconType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RichHyperlinkType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
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 java.util.List;
/**
* Created by Honchar.
*/
public class RichHyperlinkConfigDialog extends ModalWindow {
private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_DESCRIPTION = "description";
private static final String ID_LABEL = "label";
private static final String ID_TARGET_URL = "targetUrl";
private static final String ID_COLOR = "color";
private static final String ID_AUTHORIZATION = "authorization";
private static final String ID_ICON = "icon";
private static final String ID_BUTTON_SAVE = "saveButton";
private static final String ID_BUTTON_CANCEL = "cancelButton";
private static final String ID_LABEL_SIZE = "col-md-4";
private static final String ID_INPUT_SIZE = "col-md-8";
private static final String ID_MULTIPLE_INPUT_SIZE = "col-md-6";
private boolean initialized;
private boolean isMenuItem;
private IModel<RichHyperlinkType> model;
public RichHyperlinkConfigDialog(String id, final RichHyperlinkType link, boolean isMenuItem, String titleKey){
super(id);
this.isMenuItem = isMenuItem;
model = new LoadableModel<RichHyperlinkType>(false) {
@Override
protected RichHyperlinkType load() {
return loadModel(link);
}
};
setOutputMarkupId(true);
setTitle(createStringResource(titleKey));
showUnloadConfirmation(false);
setCssClassName(ModalWindow.CSS_CLASS_GRAY);
setCookieName(RichHyperlinkConfigDialog.class.getSimpleName() + ((int) (Math.random() * 100)));
setInitialWidth(625);
setInitialHeight(400);
setWidthUnit("px");
WebMarkupContainer content = new WebMarkupContainer(getContentId());
content.setOutputMarkupId(true);
setContent(content);
}
public IModel<RichHyperlinkType> getModel(){
return model;
}
private RichHyperlinkType loadModel(RichHyperlinkType link){
return link == null ? new RichHyperlinkType() : link;
}
public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return PageBase.createStringResourceStatic(this, resourceKey, objects);
}
public void updateModel(AjaxRequestTarget target, RichHyperlinkType link){
if(link == null){
warn("RichHyperlinkConfigDialog.message.badUpdate");
target.add(getPageBase().getFeedbackPanel());
}
model.setObject(link);
target.add(getContent());
}
@Override
protected void onBeforeRender(){
super.onBeforeRender();
if(initialized){
return;
}
initLayout((WebMarkupContainer) get(getContentId()));
initialized = true;
}
private PageBase getPageBase() {
return (PageBase) getPage();
}
private void initLayout(WebMarkupContainer content){
Form form = new Form(ID_MAIN_FORM);
form.setOutputMarkupId(true);
content.add(form);
TextFormGroup name = new TextFormGroup(ID_LABEL,
new PropertyModel<String>(model, RichHyperlinkType.F_LABEL.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.label"), ID_LABEL_SIZE, ID_INPUT_SIZE, true);
form.add(name);
TextAreaFormGroup description = new TextAreaFormGroup(ID_DESCRIPTION,
new PropertyModel<String>(model, RichHyperlinkType.F_DESCRIPTION.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.description"), ID_LABEL_SIZE, ID_INPUT_SIZE);
description.setVisible(!isMenuItem);
form.add(description);
TextFormGroup targetUrl = new TextFormGroup(ID_TARGET_URL,
new PropertyModel<String>(model, RichHyperlinkType.F_TARGET_URL.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.targetUrl"), ID_LABEL_SIZE, ID_INPUT_SIZE, false);
form.add(targetUrl);
TextFormGroup color = new TextFormGroup(ID_COLOR,
new PropertyModel<String>(model, RichHyperlinkType.F_COLOR.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.color"), ID_LABEL_SIZE, ID_INPUT_SIZE, false);
color.setVisible(!isMenuItem);
form.add(color);
MultiValueTextFormGroup authorizations = new MultiValueTextFormGroup(ID_AUTHORIZATION,
new PropertyModel<List<String>>(model, RichHyperlinkType.F_AUTHORIZATION.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.authorization"), ID_LABEL_SIZE, ID_MULTIPLE_INPUT_SIZE, false);
authorizations.setVisible(!isMenuItem);
form.add(authorizations);
TextFormGroup icon = new TextFormGroup(ID_ICON,
new PropertyModel<String>(model, RichHyperlinkType.F_ICON.getLocalPart() + "." + IconType.F_CSS_CLASS.getLocalPart()),
createStringResource("RichHyperlinkConfigDialog.icon"), ID_LABEL_SIZE, ID_INPUT_SIZE, false);
form.add(icon);
initButtons(form);
}
private void initButtons(Form mainForm){
AjaxSubmitButton cancel = new AjaxSubmitButton(ID_BUTTON_CANCEL,
createStringResource("PageBase.button.cancel")) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
cancelPerformed(target);
}
};
mainForm.add(cancel);
AjaxSubmitButton save = new AjaxSubmitButton(ID_BUTTON_SAVE,
createStringResource("PageBase.button.save")) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
savePerformed(target);
}
};
mainForm.add(save);
}
protected void cancelPerformed(AjaxRequestTarget target){
close(target);
}
/**
* Override to provide call-back to situation when save button is clicked
* */
protected void savePerformed(AjaxRequestTarget target){}
}