/**
* Copyright (C) 2015 Orange
* 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.francetelecom.clara.cloud.presentation.designer.services;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import com.francetelecom.clara.cloud.logicalmodel.LogicalModelItem;
import com.francetelecom.clara.cloud.presentation.common.CustomModalWindow;
import com.francetelecom.clara.cloud.presentation.designer.pages.DesignerPage;
import com.francetelecom.clara.cloud.presentation.designer.services.webserviceprovider.LogicalWebServiceProviderPanel;
import com.francetelecom.clara.cloud.presentation.designer.support.LogicalServicesHelper;
import com.francetelecom.clara.cloud.presentation.tools.BlockUIDecorator;
import com.francetelecom.clara.cloud.presentation.tools.FieldFeedbackDecorator;
/**
* Created by IntelliJ IDEA.
* User: Thomas Escalle - tawe8231
* Entity : FT/OLNC/RD/MAPS/MEP/MSE
* Date: 06/01/12
*/
public class LogicalServiceBasePanel<L extends LogicalModelItem> extends GenericPanel<L> {
private static final long serialVersionUID = -4154303051453698255L;
private Form<L> serviceForm;
private Page parentPage;
private AjaxButton addUpdateButton;
private AjaxButton cancelCloseButton;
private CheckBox fullValidation;
private boolean isNew;
protected boolean readOnly;
protected boolean configOverride;
private String logicalModelType;
@SpringBean
private LogicalServicesHelper logicalServicesHelper;
public LogicalServiceBasePanel(String id, IModel<L> model, final Page parentPage,
boolean isNew, boolean readOnly, boolean configOverride) {
super(id, model);
this.parentPage = parentPage;
this.isNew = isNew;
this.readOnly = readOnly;
this.configOverride = configOverride;
logicalModelType = logicalServicesHelper.getLogicalServiceCatalogName(getModelObject());
initComponents(model);
}
private void initComponents(IModel<L> model) {
serviceForm = new Form<>("serviceForm", model);
// Add service button
addUpdateButton = new AjaxButton("addUpdateButton") {
private static final long serialVersionUID = 7572256727897511356L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
if (parentPage instanceof DesignerPage) {
((DesignerPage)parentPage).addOrUpdateLogicalService(form, target, isNew);
} else if (configOverride) {
applyOverrides();
findParent(CustomModalWindow.class).close(target);
}
target.add(form);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(form);
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
attributes.getAjaxCallListeners().add(new BlockUIDecorator(getString("portal.info.default.wait")));
}
};
String addOrUpdateKey;
if (configOverride) {
addOrUpdateKey = "portal.designer.service.button.override.apply";
} else if (isNew) {
addOrUpdateKey = "portal.designer.service.button.add";
} else {
addOrUpdateKey = "portal.designer.service.button.update";
}
Label addLabel = new Label("addUpdateLabel", new StringResourceModel(addOrUpdateKey, null));
addUpdateButton.add(addLabel);
serviceForm.add(addUpdateButton);
// Cancel service button
cancelCloseButton = new AjaxButton("cancelCloseButton") {
private static final long serialVersionUID = -513024373510393946L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
if (!readOnly) {
if (parentPage instanceof DesignerPage) {
((DesignerPage)parentPage).cancelServiceEdit(target);
}
} else {
findParent(CustomModalWindow.class).close(target);
}
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.add(form);
}
};
String cancelOrCloseKey;
if (configOverride) {
cancelOrCloseKey = "portal.designer.service.button.override.cancel";
} else if (readOnly) {
cancelOrCloseKey = "portal.designer.service.button.close";
addUpdateButton.setVisible(false);
} else {
cancelOrCloseKey = "portal.designer.service.button.cancel";
}
Label cancelLabel = new Label("cancelLabel", new StringResourceModel(cancelOrCloseKey, null));
cancelCloseButton.setDefaultFormProcessing(false);
cancelCloseButton.add(cancelLabel);
serviceForm.add(cancelCloseButton);
/****
* fullValidation displayed only for WSP (LogicalWebServiceProviderPanel)
****/
WebMarkupContainer fullvalidationContent = new WebMarkupContainer("fullvalidationContent"){
private static final long serialVersionUID = 8118606464182451428L;
@Override
public boolean isVisible() {
return this.getParent().getParent() instanceof LogicalWebServiceProviderPanel;
}
};
fullValidation = new CheckBox("fullvalidation", new Model<Boolean>(Boolean.TRUE));
fullvalidationContent.add(fullValidation);
serviceForm.add(fullvalidationContent);
add(serviceForm);
}
public Form<L> getServiceForm() {
return serviceForm;
}
@Override
protected void onInitialize() {
serviceForm.visitChildren(FormComponent.class, new IVisitor<Component, Void>() {
@Override
public void component(Component component, IVisit<Void> visit) {
component.add(new FieldFeedbackDecorator());
if (!component.equals(addUpdateButton) && !component.equals(cancelCloseButton)) {
boolean serviceParameterEnable = true;
if (parentPage instanceof DesignerPage) {
serviceParameterEnable = ((DesignerPage)parentPage).isServiceParameterEnable(serviceForm.getModelObject(), component.getId());
}
if (!serviceParameterEnable) {
component.setEnabled(false);
}
}
// To disable all field except close button in readOnly mode
if (readOnly) {
if (!component.equals(cancelCloseButton)) {
component.setEnabled(false);
}
}
// overridable components are re-enabled in subclasses, validation button here
if (configOverride) {
addUpdateButton.setEnabled(true);
}
visit.dontGoDeeper();
}
});
super.onInitialize();
}
public CheckBox getFullValidation() {
return fullValidation;
}
protected void applyOverrides() {
};
public String getLogicalModelType() {
return logicalModelType;
}
}