/** * 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.applications; import java.util.Map; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.bean.validation.PropertyValidator; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.Radio; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.util.visit.IVisit; import org.apache.wicket.util.visit.IVisitor; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.validator.AbstractValidator; import com.francetelecom.clara.cloud.core.service.ManageApplicationRelease; import com.francetelecom.clara.cloud.presentation.common.ReleaseFieldsetPanel; import com.francetelecom.clara.cloud.presentation.common.WicketUtils; import com.francetelecom.clara.cloud.presentation.models.FirstApplicationReleaseInfos; import com.francetelecom.clara.cloud.presentation.resource.CacheActivatedImage; import com.francetelecom.clara.cloud.presentation.tools.FieldFeedbackDecorator; public class ApplicationCreatePanel extends Panel{ private static final long serialVersionUID = 6343641923671807395L; private final ManageApplicationRelease manageApplicationRelease; private Form<FirstApplicationReleaseInfos> appForm; private ApplicationsPage parentPage; private ReleaseFieldsetPanel releaseFiedsetPanel; public ApplicationCreatePanel(String id, ManageApplicationRelease manageApplicationRelease) { super(id); this.manageApplicationRelease = manageApplicationRelease; } private void initComponents() { createAppForm(); } private void createAppForm() { appForm = new Form<>("appForm", new CompoundPropertyModel<>(new FirstApplicationReleaseInfos())); TextField<String> appLabel = new TextField<>("appLabel"); appLabel.setLabel(WicketUtils.getStringResourceModel(this, "portal.application.label.label")); appLabel.add(new AbstractValidator<String>() { @Override protected void onValidate(IValidatable<String> iValidatable) { if(!parentPage.isApplicationLabelUnique(iValidatable.getValue())) { error(iValidatable); } } @Override protected String resourceKey() { return "portal.application.label.non.unique"; } @Override protected Map<String, Object> variablesMap(IValidatable<String> stringIValidatable) { Map<String, Object> map = super.variablesMap(stringIValidatable); map.put("label", stringIValidatable.getValue()); return map; } }); appLabel.add(new PropertyValidator<>()); appForm.add(appLabel); TextField<String> appCode = new TextField<>("appCode"); appCode.setLabel(WicketUtils.getStringResourceModel(this, "portal.application.code.label")); appCode.add(new PropertyValidator<>()); appForm.add(appCode); TextArea<String> appDescription = new TextArea<>("appDescription"); appDescription.setLabel(WicketUtils.getStringResourceModel(this, "portal.application.description.label")); appDescription.add(new PropertyValidator<>()); appForm.add(appDescription); RadioGroup<Boolean> appVisibility = new RadioGroup<>("appPublic"); appVisibility.add(new Radio<Boolean>("appVisibilityRadioGroup-public", new Model<>(Boolean.TRUE))); appVisibility.add(new Radio<Boolean>("appVisibilityRadioGroup-private", new Model<>(Boolean.FALSE))); appVisibility.add(new PropertyValidator<>()); appForm.add(appVisibility); appForm.add(new CacheActivatedImage("imageHelp.visibilityField", new ResourceModel("image.help").getObject())); TextField<String> members = new TextField<>("members"); members.add(new PropertyValidator<>()); appForm.add(members); appForm.add(new CacheActivatedImage("imageHelp.membersField", new ResourceModel("image.help").getObject())); releaseFiedsetPanel = new ReleaseFieldsetPanel("releaseFieldsetPanel", parentPage, manageApplicationRelease); appForm.add(releaseFiedsetPanel); createFormButtons(appForm); // set default visibility to private appForm.getModelObject().setAppPublic(Boolean.FALSE); add(appForm); } private void createFormButtons(Form<FirstApplicationReleaseInfos> appForm) { // Add first application button AjaxButton addButton = new AjaxButton("addAppButton") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { parentPage.addFirstApplicationCreation(form, target, releaseFiedsetPanel.getAppRelease(), releaseFiedsetPanel.getCurrentMiddlewareProfile()); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.add(form); } }; appForm.add(addButton); // Cancel first application add / update button AjaxButton cancelButton = new AjaxButton("cancelAppButton") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { parentPage.cancelFirstApplicationCreation(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.add(form); } }; cancelButton.setDefaultFormProcessing(false); appForm.add(cancelButton); } @Override protected void onInitialize() { parentPage = (ApplicationsPage) getPage(); initComponents(); appForm.visitChildren(FormComponent.class, new IVisitor<Component, Void>() { @Override public void component(Component object, IVisit<Void> visit) { object.add(new FieldFeedbackDecorator()); visit.dontGoDeeper(); } }); super.onInitialize(); } public boolean shouldFork() { return releaseFiedsetPanel.shouldFork(); } }