/**
* 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.releases;
import com.francetelecom.clara.cloud.core.service.ManageApplication;
import com.francetelecom.clara.cloud.core.service.exception.ObjectNotFoundException;
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.tools.BreadcrumbsItem;
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.panel.FeedbackPanel;
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;
/**
* ReleasesPage
*
* panel used to display all releases and create a new application release
*
* Last update : $LastChangedDate$
* Last author : $Author$
*
* @version : $Revision$
*/
@MountPath("/releases")
@AuthorizeInstantiation({"ROLE_USER","ROLE_ADMIN"})
public class ReleasesPage extends DesignerHelperPage {
private static final long serialVersionUID = 6987787041668276885L;
private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(ReleasesPage.class);
@SpringBean
private ManageApplication manageApplication;
private WebMarkupContainer newReleaseContainer;
private Application app;
private AjaxLink newRelease;
private WebMarkupContainer buttonContainer;
private final DesignerHelperPage parentPage;
private ReleaseCreatePanel releaseCreatePanel;
private FeedbackPanel globalFeedback;
/**
* PageTemplate constructor
*
* @param params - page parameters map
*/
public ReleasesPage(final PageParameters params) {
super(params);
this.parentPage = this;
initComponents();
setOutputMarkupId(true);
app = null;
}
@Override
public FeedbackPanel getFeedbackPanel() {
return this.globalFeedback;
}
private void initComponents() {
setPageTitle();
createFirstLevelNavigation();
createBreadCrumbs();
createGlobalFeedbackPanel();
createReleaseFormPanel();
createNewReleaseButton();
createReleasesTable();
}
private void setPageTitle() {
/* set head page title to display in browser title bar */
add(new Label("head_page_title", getString("portal.design.web.title.releases.home")));
}
private void createFirstLevelNavigation() {
NavigationMenuFirstLevel navFirstLvl = new NavigationMenuFirstLevel();
add(navFirstLvl);
}
private void createBreadCrumbs() {
List<BreadcrumbsItem> breadcrumbsItems = new ArrayList<BreadcrumbsItem>();
breadcrumbsItems.add(new BreadcrumbsItem(HomePage.class, "portal.design.breadcrumbs.homepage", null, false));
PageParameters params = getPageParameters();
if (params.getNamedKeys().contains("appUid")) {
try {
app = manageApplication.findApplicationByUID(params.get("appUid").toString());
breadcrumbsItems.add(new BreadcrumbsItem(this.getClass(), params, "portal.design.breadcrumbs.application.release.home", app.getLabel(), true));
} catch (ObjectNotFoundException e) {
String errMsg = getString("portal.release.objectnotfound");
logger.error(errMsg);
error(errMsg);
breadcrumbsItems.add(new BreadcrumbsItem(this.getClass(), params, "portal.design.breadcrumbs.releases.home", null, true));
}
} else {
// releasesTablePanel = new ReleasesTablePanel("releasesTablePanel", manageApplicationRelease);
breadcrumbsItems.add(new BreadcrumbsItem(this.getClass(), params, "portal.design.breadcrumbs.releases.home", null, true));
}
Breadcrumbs breadcrumbs = new Breadcrumbs("breadcrumbs", breadcrumbsItems);
add(breadcrumbs);
}
private void createGlobalFeedbackPanel() {
globalFeedback = new FeedbackPanel("globalFeedback");
globalFeedback.setOutputMarkupId(true);
add(globalFeedback);
}
private void createReleaseFormPanel() {
newReleaseContainer = new WebMarkupContainer("createReleaseContainer");
add(newReleaseContainer);
newReleaseContainer.setOutputMarkupId(true);
releaseCreatePanel = new ReleaseCreatePanel("createReleaseForm", app,
manageApplication, manageApplicationRelease, parentPage);
releaseCreatePanel.setOutputMarkupId(true);
releaseCreatePanel.setVisible(false);
newReleaseContainer.add(releaseCreatePanel);
}
private void createNewReleaseButton() {
buttonContainer = new WebMarkupContainer("buttonContainer");
buttonContainer.setOutputMarkupId(true);
//create link
newRelease = new AjaxLink("newReleaseLink") {
@Override
public void onClick(AjaxRequestTarget target) {
this.setVisible(false);
target.add(buttonContainer);
releaseCreatePanel.setVisible(true);
newReleaseContainer.addOrReplace(releaseCreatePanel);
target.add(newReleaseContainer);
}
};
newRelease.setMarkupId("newReleaseLink");
buttonContainer.add(newRelease);
add(buttonContainer);
}
public void cancelReleaseCreation(AjaxRequestTarget target) {
resetPage(target);
}
private void resetPage(AjaxRequestTarget target) {
// display new release button
newRelease.setVisible(true);
target.add(buttonContainer);
// hide ReleaseCreatePanel
releaseCreatePanel.setVisible(false);
newReleaseContainer.addOrReplace(releaseCreatePanel);
target.add(newReleaseContainer);
}
private void createReleasesTable() {
ReleasesTablePanel releasesTablePanel = new ReleasesTablePanel("releasesTablePanel", manageApplicationRelease, null);
releasesTablePanel.setOutputMarkupId(true);
add(releasesTablePanel);
}
}