com.francetelecom.clara.cloud.presentation.applications.SelectedAppPage.java Source code

Java tutorial

Introduction

Here is the source code for com.francetelecom.clara.cloud.presentation.applications.SelectedAppPage.java

Source

/**
 * 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;
    }
}