/**
* 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.panels;
import com.francetelecom.clara.cloud.logicalmodel.LogicalModelItem;
import com.francetelecom.clara.cloud.presentation.designer.pages.DesignerHelperPage;
import com.francetelecom.clara.cloud.presentation.designer.pages.DesignerPage;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.ListChoice;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Thomas Escalle - tawe8231
* Entity : FT/OLNC/RD/MAPS/MEP/MSE
* Date: 22/05/12
*/
public class DesignerServiceDefinitionPanel extends GenericPanel<List<LogicalModelItem>> {
private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(DesignerServiceDefinitionPanel.class);
ListChoice<LogicalModelItem> servicesListChoice;
final CompoundPropertyModel<LogicalModelItem> serviceModel = new CompoundPropertyModel<>(new Model<LogicalModelItem>(null));
private DesignerPage parentPage;
/**
* Container of the service Form
*/
private WebMarkupContainer serviceFormContainerPanel;
/**
* There service form panel
*/
private Panel serviceFormPanel;
private boolean architectureLocked;
private int step;
public DesignerServiceDefinitionPanel(String id, IModel<List<LogicalModelItem>> model, boolean architectureLocked, int step, DesignerPage parentPage) {
super(id, model);
this.architectureLocked = architectureLocked;
this.step = step;
this.parentPage = parentPage;
initComponents();
}
@Override
public boolean isVisible() {
return !architectureLocked;
}
private StringResourceModel getStringResourceModel(java.lang.String key) {
// BVA fix Localizer warning : cf. https://issues.apache.org/jira/browse/WICKET-990
return new StringResourceModel(key, this, null);
}
private void initComponents() {
initPanelTitleComponent(step);
initServiceListChoiceComponent();
initServiceFormContainerComponent();
}
private void initPanelTitleComponent(int step) {
if (step == 0) {
add(new Label("panelTitleLabel", getStringResourceModel("portal.design.service.select_external.title")));
} else {
add(new Label("panelTitleLabel", getStringResourceModel("portal.design.service.select_internal.title")));
}
}
private void initServiceListChoiceComponent() {
// This form is needed to automatically select a service in HMI tests
Form<Void> selectForm = new Form<>("selectForm");
add(selectForm);
ChoiceRenderer<LogicalModelItem> choiceRenderer = new ChoiceRenderer<LogicalModelItem>() {
private static final long serialVersionUID = -6313188726358374089L;
@Override
public Object getDisplayValue(LogicalModelItem modelItem) {
return parentPage.getServiceCatalogName(modelItem);
}
@Override
public String getIdValue(LogicalModelItem modelItem, int i) {
return modelItem.getClass().getName();
}
};
servicesListChoice = new ListChoice<LogicalModelItem>("logicalServicesListSelect", serviceModel, getModelObject(), choiceRenderer) {
private static final long serialVersionUID = 4264246812205897235L;
@Override
protected boolean isDisabled(LogicalModelItem modelItem, int index, String selected) {
return !parentPage.isServiceEnable(modelItem);
}
};
servicesListChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = -913367640965160132L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
updateServiceFormPanel(target, serviceModel.getObject(), parentPage, true);
}
});
// servicesListChoice.setNullValid(true);
servicesListChoice.setOutputMarkupId(true);
selectForm.add(servicesListChoice);
}
private void initServiceFormContainerComponent() {
serviceFormContainerPanel = new WebMarkupContainer("container");
serviceFormContainerPanel.setOutputMarkupId(true);
serviceFormPanel = parentPage.getServicePanel("logicalServicePanel", null, parentPage, true, false, false);
serviceFormContainerPanel.add(serviceFormPanel);
add(serviceFormContainerPanel);
}
public void updateServiceFormPanel(AjaxRequestTarget target, LogicalModelItem service, DesignerHelperPage parentPage, boolean isNew) {
serviceFormPanel = parentPage.getServicePanel("logicalServicePanel", service, parentPage, isNew, false, false);
serviceFormContainerPanel.addOrReplace(serviceFormPanel);
target.add(serviceFormContainerPanel);
}
}