/** * 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 com.francetelecom.clara.cloud.core.service.ManageApplication; import com.francetelecom.clara.cloud.core.service.exception.ApplicationNotFoundException; import com.francetelecom.clara.cloud.core.service.exception.DuplicateApplicationException; import com.francetelecom.clara.cloud.core.service.exception.PaasUserNotFoundException; import com.francetelecom.clara.cloud.coremodel.Application; import com.francetelecom.clara.cloud.presentation.HomePage; import com.francetelecom.clara.cloud.presentation.common.Breadcrumbs; import com.francetelecom.clara.cloud.presentation.common.NavigationMenuFirstLevel; import com.francetelecom.clara.cloud.presentation.designer.pages.DesignerHelperPage; import com.francetelecom.clara.cloud.presentation.releases.ReleaseCreatePanel; import com.francetelecom.clara.cloud.presentation.releases.ReleasesTablePanel; import com.francetelecom.clara.cloud.presentation.tools.BreadcrumbsItem; import com.francetelecom.clara.cloud.presentation.tools.BusinessExceptionHandler; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.LoggerFactory; import org.wicketstuff.annotation.mount.MountPath; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. User: Thomas Escalle - tawe8231 Entity : * FT/OLNC/RD/MAPS/MEP/MSE Date: 23/08/11 */ @MountPath("/application/appUid/${appUid}") @AuthorizeInstantiation({"ROLE_USER","ROLE_ADMIN"}) public class SelectedAppPage extends DesignerHelperPage { private static final long serialVersionUID = -7169645938227997056L; private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(SelectedAppPage.class); @SpringBean private ManageApplication manageApplication; private WebMarkupContainer buttonContainer; private WebMarkupContainer container; private ApplicationInformationPanel appInfoPanel; private AjaxLink newRelease; private Application app; private FeedbackPanel globalFeedback; private ReleasesTablePanel releasesTablePanel; private List<BreadcrumbsItem> breadcrumbsItems; public SelectedAppPage(final PageParameters params) { super(params); } @Override protected void onInitialize() { initComponents(); setOutputMarkupId(true); super.onInitialize(); } @Override public FeedbackPanel getFeedbackPanel() { return this.globalFeedback; } private void initComponents() { loadSelectedApplication(); setPagetitle(); createFirstLevelNavigation(); createBreadCrumbs(); createGlobalFeedbackPanel(); createApplicationInformationPanel(); createEmptyReleaseFormPanel(); createNewReleaseButton(); createReleasesTable(); } private void loadSelectedApplication() { String appUid = getPageParameters().get("appUid").toString(); try { app = manageApplication.findApplicationByUID(appUid); } catch (ApplicationNotFoundException e) { logger.error("Application not found ; appUid={}", appUid); throw new WicketRuntimeException(e); } } private void createReleasesTable() { releasesTablePanel = new ReleasesTablePanel("releasesTablePanel", manageApplicationRelease, app); releasesTablePanel.setOutputMarkupId(true); add(releasesTablePanel); releasesTablePanel.setVisible(app.isPublic() || app.isEditable()); } private void createNewReleaseButton() { buttonContainer = new WebMarkupContainer("buttonContainer"); buttonContainer.setOutputMarkupId(true); // create link newRelease = new AjaxLink("newReleaseLink") { @Override public void onClick(AjaxRequestTarget target) { ReleaseCreatePanel releaseCreatePanel = new ReleaseCreatePanel("createReleaseForm", app, manageApplication, manageApplicationRelease, SelectedAppPage.this); container.addOrReplace(releaseCreatePanel); target.add(container); this.setVisible(false); target.add(buttonContainer); } }; newRelease.setMarkupId("newReleaseLink"); buttonContainer.add(newRelease); buttonContainer.setVisible(app.isEditable()); add(buttonContainer); } private void createApplicationInformationPanel() { // Display application information with modify and delete button appInfoPanel = new ApplicationInformationPanel("appInfoPanel", app, getPageParameters(), this); appInfoPanel.setMembers(app.listMembers()); try { appInfoPanel.setCanBeDeleted(manageApplication.canBeDeleted(app.getUID())); } catch (ApplicationNotFoundException e) { appInfoPanel.setCanBeDeleted(false); } add(appInfoPanel); } public void updateAppInfopanel(AjaxRequestTarget target) { try { appInfoPanel.setCanBeDeleted(manageApplication.canBeDeleted(app.getUID()), target); } catch (ApplicationNotFoundException e) { appInfoPanel.setCanBeDeleted(false, target); } } private void createEmptyReleaseFormPanel() { container = new WebMarkupContainer("createReleaseContainer"); container.setOutputMarkupId(true); container.add(new EmptyPanel("createReleaseForm")); add(container); } private void createGlobalFeedbackPanel() { globalFeedback = new FeedbackPanel("globalFeedback"); globalFeedback.setOutputMarkupId(true); add(globalFeedback); } private void createBreadCrumbs() { breadcrumbsItems = new ArrayList<>(); breadcrumbsItems.add(new BreadcrumbsItem(HomePage.class, "portal.breadcrumb.home", null, false)); PageParameters appPageParameters = new PageParameters(); appPageParameters.add("appUid", app.getUID()); breadcrumbsItems.add(new BreadcrumbsItem(SelectedAppPage.class, appPageParameters, "portal.breadcrumb.selected.application", app.getLabel(), true)); Breadcrumbs breadcrumbs = new Breadcrumbs("breadcrumbs", breadcrumbsItems); breadcrumbs.setOutputMarkupId(true); add(breadcrumbs); } public void deleteApplication(AjaxRequestTarget target, Application appToDelete) { try { manageApplication.deleteApplication(appToDelete.getUID()); } catch (ApplicationNotFoundException e) { BusinessExceptionHandler.addError(target, globalFeedback, e); } } public void updateApplication(AjaxRequestTarget target, Form<Application> form, String members) throws ApplicationNotFoundException, DuplicateApplicationException, PaasUserNotFoundException { Application appToUpdate = form.getModelObject(); appToUpdate.setMembers(ApplicationsPage.toSSOIdsSet(members)); logger.debug("Update application {}", appToUpdate); app = manageApplication.updateApplication(appToUpdate); form.setDefaultModel(new CompoundPropertyModel<Application>(app)); info(getString("portal.application.update.successful", new Model<Object[]>(new Object[] { app.getLabel() }))); target.add(globalFeedback); target.add(releasesTablePanel); } private void createFirstLevelNavigation() { NavigationMenuFirstLevel navFirstLvl = new NavigationMenuFirstLevel(); add(navFirstLvl); } private void setPagetitle() { /* set head page title to display in browser title bar */ add(new Label("head_page_title", getString("portal.design.web.title.application.home"))); } public void cancelReleaseCreation(AjaxRequestTarget target) { resetPage(target); } private void resetPage(AjaxRequestTarget target) { newRelease.setVisible(true); target.add(buttonContainer); container.addOrReplace(new EmptyPanel("createReleaseForm")); target.add(container); } public List<BreadcrumbsItem> getBreadcrumbsItems() { return breadcrumbsItems; } }