/**
* 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.config;
import com.francetelecom.clara.cloud.logicalmodel.InvalidConfigServiceException;
import com.francetelecom.clara.cloud.logicalmodel.LogicalConfigService;
import com.francetelecom.clara.cloud.presentation.designer.services.LogicalServiceBasePanel;
import com.francetelecom.clara.cloud.presentation.environments.EnvironmentsPage;
import com.francetelecom.clara.cloud.presentation.releases.SelectedReleasePage;
import com.francetelecom.clara.cloud.presentation.resource.CacheActivatedImage;
import com.francetelecom.clara.cloud.presentation.tools.CodeMirrorTextArea;
import com.francetelecom.clara.cloud.presentation.validators.ConfigDuplicateKeysValidator;
import com.francetelecom.clara.cloud.presentation.validators.ConfigMaxNumberKeysValidator;
import com.francetelecom.clara.cloud.presentation.validators.ConfigMaxSizeValidator;
import com.francetelecom.clara.cloud.presentation.validators.InvalidCharsetValidator;
import org.apache.wicket.Page;
import org.apache.wicket.bean.validation.PropertyValidator;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import java.util.regex.Pattern;
/**
* Created by IntelliJ IDEA.
* User: Thomas Escalle - tawe8231
* Entity : FT/OLNC/RD/MAPS/MEP/MSE
* Date: 24/01/12
*/
public class LogicalConfigServicePanel extends LogicalServiceBasePanel<LogicalConfigService> {
private static final long serialVersionUID = 5611122953942366873L;
private CodeMirrorTextArea<String> configSetContent;
public LogicalConfigServicePanel(String id, IModel<LogicalConfigService> model, final Page parentPage,
boolean isNew, boolean readOnly, boolean configOverride) {
super(id, model, parentPage, isNew, readOnly, configOverride);
initComponents();
}
private void initComponents() {
getServiceForm().add(new CacheActivatedImage("logicalconfig-icon",new ResourceModel("cfconfigservice.icon").getObject()));
// Online help link
String completeHelpUrl = "";
try {
completeHelpUrl = new StringResourceModel("portal.designer.logical.service.online_manual.baseUrl", null).getString()
+ new StringResourceModel("portal.designer.logical.service.online_manual." + getLogicalModelType(), null).getString();
} catch (Exception e) {
//do nothing
}
ExternalLink onlineHelpLink = new ExternalLink("onlineHelpLink", completeHelpUrl);
ExternalLink onlineHelpLinkOverride = new ExternalLink("onlineHelpLinkOverride", completeHelpUrl);
if (completeHelpUrl.isEmpty()) {
onlineHelpLink.setVisible(false);
onlineHelpLinkOverride.setVisible(false);
}
// Creates 2 blocks only for good displaying : Read more... juste after description (not possible with span wicket:id=descriptionLabel).
WebMarkupContainer descriptionBlock = new WebMarkupContainer("descriptionBlock");
descriptionBlock.add(onlineHelpLink);
getServiceForm().add(descriptionBlock);
WebMarkupContainer overrideDescriptionBlock = new WebMarkupContainer("overrideDescriptionBlock");
overrideDescriptionBlock.add(onlineHelpLinkOverride);
getServiceForm().add(overrideDescriptionBlock);
if (configOverride) {
descriptionBlock.setVisible(false);
} else {
overrideDescriptionBlock.setVisible(false);
}
// FUNCTIONNAL PARAMETERS
RequiredTextField<String> label = new RequiredTextField<>("label");
label.setLabel(new StringResourceModel("portal.designer.service.config.label",null));
label.add(new PropertyValidator<>());
getServiceForm().add(label);
TextField<String> keyPrefix = new TextField<>("keyPrefix", String.class);
keyPrefix.setConvertEmptyInputStringToNull(false);
keyPrefix.setLabel(new StringResourceModel("portal.designer.service.config.keyPrefix", null));
keyPrefix.add(new PropertyValidator<>());
getServiceForm().add(keyPrefix);
configSetContent = new CodeMirrorTextArea<>("configSetContent", readOnly && !configOverride);
configSetContent.setLabel(new StringResourceModel("portal.designer.service.config.configSetContent", null));
configSetContent.add(new PropertyValidator<>());
getServiceForm().add(configSetContent);
configSetContent.add(new ConfigDuplicateKeysValidator());
configSetContent.add(new ConfigMaxSizeValidator());
configSetContent.add(new ConfigMaxNumberKeysValidator());
configSetContent.add(new InvalidCharsetValidator());
}
@Override
protected void onInitialize() {
super.onInitialize();
if (configOverride) {
// Get previous changes
LogicalConfigService overridenConfigService = null;
if (getPage() instanceof SelectedReleasePage) {
overridenConfigService = ((SelectedReleasePage) getPage()).getEnvironmentConfigOverride(getServiceForm().getModelObject().getLabel());
} else if (getPage() instanceof EnvironmentsPage) {
overridenConfigService = ((EnvironmentsPage) getPage()).getEnvironmentConfigOverride(getServiceForm().getModelObject().getLabel());
}
if (overridenConfigService == null) {
LogicalConfigService originalConfigService = getServiceForm().getModelObject();
overridenConfigService = new LogicalConfigService();
overridenConfigService.setAvailable(originalConfigService.isAvailable());
overridenConfigService.setKeyPrefix(originalConfigService.getKeyPrefix());
overridenConfigService.setLabel(originalConfigService.getLabel());
String configSetContent = originalConfigService.getConfigSetContent();
String explanation = getString("portal.designer.service.config.override.explanation");
configSetContent = explanation + "\n\n" + configSetContent;
// Comment each line
configSetContent = Pattern.compile("^", Pattern.MULTILINE).matcher(configSetContent).replaceAll("#");
try {
overridenConfigService.setConfigSetContent(configSetContent);
} catch (InvalidConfigServiceException e) {
// Config content is coming from a previous config service, so it should be ok
throw new IllegalArgumentException("Invalid Config Service.", e);
}
}
getServiceForm().setModel(new CompoundPropertyModel<LogicalConfigService>(overridenConfigService));
// The config set content is the only field overridable
configSetContent.setEnabled(true);
}
}
@Override
protected void applyOverrides() {
if (getPage() instanceof SelectedReleasePage) {
((SelectedReleasePage) getPage()).addEnvironmentConfigOverride(getServiceForm().getModelObject());
} else if (getPage() instanceof EnvironmentsPage) {
((EnvironmentsPage) getPage()).addEnvironmentConfigOverride(getServiceForm().getModelObject());
}
}
}