/**
* 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.environments;
import com.francetelecom.clara.cloud.core.service.exception.ObjectNotFoundException;
import com.francetelecom.clara.cloud.presentation.releases.SelectedReleasePage;
import com.francetelecom.clara.cloud.presentation.tools.BlockUIDecorator;
import com.francetelecom.clara.cloud.presentation.tools.DeleteConfirmationBlockUIDecorator;
import com.francetelecom.clara.cloud.services.dto.EnvironmentDto;
import com.francetelecom.clara.cloud.services.dto.EnvironmentDto.EnvironmentStatusEnum;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.LoggerFactory;
/**
* Created by IntelliJ IDEA.
* User: lzxv3002
* Date: 03/08/11
* Time: 17:22
* To change this template use File | Settings | File Templates.
*/
public class EnvironmentActionPanel<E extends EnvironmentDto> extends GenericPanel<E> {
/*
* serial UID
*/
private static final long serialVersionUID = -6858797361884019223L;
/**
* logger
*/
private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(EnvironmentActionPanel.class);
private Page parentPage;
AjaxLink<E> startBtn;
AjaxLink<E> stopBtn;
AjaxLink<E> deleteBtn;
BookmarkablePageLink reloadBtn;
WebMarkupContainer startDisableSpan;
WebMarkupContainer stopDisableSpan;
WebMarkupContainer deleteDisableSpan;
WebMarkupContainer reloadSpan;
public EnvironmentActionPanel(String id, IModel<E> model) {
super(id, model);
}
@Override
protected void onInitialize() {
this.parentPage = getPage();
createButtons();
super.onInitialize();
}
@Override
protected void onModelChanged() {
startBtn.setModelObject(getModelObject());
stopBtn.setModelObject(getModelObject());
deleteBtn.setModelObject(getModelObject());
reloadBtn.getPageParameters().set("envUid", getModelObject().getUid());
}
private void createButtons() {
createStartDisableBtn();
createStartEnableBtn();
createStopDisableBtn();
createStopEnableBtn();
createDeleteDisableBtn();
createDeleteEnableBtn();
createReloadBtn();
}
/** START BUTTON ENABLE **/
private void createStartEnableBtn() {
startBtn = new IndicatingAjaxLink<E>("env-start-link", getModel()) {
private static final long serialVersionUID = -3624723770141461652L;
@Override
public void onClick(AjaxRequestTarget target) {
try {
String envUID = getModelObject().getUid();
if (parentPage instanceof SelectedEnvironmentPage) {
((SelectedEnvironmentPage)parentPage).getManageEnvironment().startEnvironment(envUID);
} else if (parentPage instanceof EnvironmentsPage) {
((EnvironmentsPage)parentPage).getManageEnvironment().startEnvironment(envUID);
} else {
((SelectedReleasePage)parentPage).getManageEnvironment().startEnvironment(envUID);
}
propagateAjaxUpdate(target);
} catch (ObjectNotFoundException e) {
String errMsg = getString("portal.environment.action.start.error.objectnotfound", new Model<Object[]>(new Object[]{ getModelObject().getLabel() }));
logger.error(errMsg);
error(errMsg);
}
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
attributes.getAjaxCallListeners().add(new BlockUIDecorator(getString("portal.info.env.start")));
}
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.STOPPED ||
envStatus == EnvironmentStatusEnum.FAILED);
}
};
add(startBtn);
}
/** START BUTTON DISABLE **/
private void createStartDisableBtn() {
startDisableSpan = new WebMarkupContainer("env-start-disable") {
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return !(getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.STOPPED ||
envStatus == EnvironmentStatusEnum.FAILED));
}
};
add(startDisableSpan);
}
/** STOP BUTTON ENABLE **/
private void createStopEnableBtn() {
stopBtn = new IndicatingAjaxLink<E>("env-stop-link", getModel()) {
private static final long serialVersionUID = -7938349139632727052L;
@Override
public void onClick(AjaxRequestTarget target) {
try {
String envUID = getModelObject().getUid();
if (parentPage instanceof SelectedEnvironmentPage) {
((SelectedEnvironmentPage)parentPage).getManageEnvironment().stopEnvironment(envUID);
} else if (parentPage instanceof EnvironmentsPage) {
((EnvironmentsPage)parentPage).getManageEnvironment().stopEnvironment(envUID);
} else {
((SelectedReleasePage)parentPage).getManageEnvironment().stopEnvironment(envUID);
}
propagateAjaxUpdate(target);
} catch (ObjectNotFoundException e) {
String errMsg = getString("portal.environment.action.stop.error.objectnotfound", new Model<Object[]>(new Object[]{ getModelObject().getLabel() }));
logger.error(errMsg);
error(errMsg);
}
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
attributes.getAjaxCallListeners().add(new BlockUIDecorator(getString("portal.info.env.stop")));
}
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.RUNNING ||
envStatus == EnvironmentStatusEnum.FAILED);
}
};
add(stopBtn);
}
/** STOP BUTTON DISABLE **/
private void createStopDisableBtn() {
stopDisableSpan = new WebMarkupContainer("env-stop-disable") {
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return !(getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.RUNNING ||
envStatus == EnvironmentStatusEnum.FAILED));
}
};
add(stopDisableSpan);
}
/** DELETE BUTTON ENABLE **/
private void createDeleteEnableBtn() {
deleteBtn = new IndicatingAjaxLink<E>("env-delete-link", getModel()) {
private static final long serialVersionUID = -8608226682718820756L;
@Override
public void onClick(AjaxRequestTarget target) {
try {
String envUID = getModelObject().getUid();
if (parentPage instanceof SelectedEnvironmentPage) {
((SelectedEnvironmentPage)parentPage).getManageEnvironment().deleteEnvironment(envUID);
} else if (parentPage instanceof EnvironmentsPage) {
((EnvironmentsPage)parentPage).getManageEnvironment().deleteEnvironment(envUID);
} else {
((SelectedReleasePage)parentPage).getManageEnvironment().deleteEnvironment(envUID);
}
propagateAjaxUpdate(target);
} catch (ObjectNotFoundException e) {
String errMsg = getString("portal.environment.action.delete.error.objectnotfound", new Model<Object[]>(new Object[]{ getModelObject().getLabel() }));
logger.error(errMsg);
error(errMsg);
}
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
attributes.getAjaxCallListeners().add(new DeleteConfirmationBlockUIDecorator(getString("portal.environment.action.delete.confirm", new Model<String[]>(new String[]{ getModelObject().getLabel() }))
, getString("portal.info.env.delete")));
}
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.RUNNING ||
envStatus == EnvironmentStatusEnum.STOPPED ||
envStatus == EnvironmentStatusEnum.FAILED);
}
};
add(deleteBtn);
}
/** DELETE BUTTON DISABLE **/
private void createDeleteDisableBtn() {
deleteDisableSpan = new WebMarkupContainer("env-delete-disable"){
@Override
public boolean isVisible() {
EnvironmentStatusEnum envStatus = getModelObject().getStatus();
return !(getModelObject().isEditable() && (envStatus == EnvironmentStatusEnum.RUNNING ||
envStatus == EnvironmentStatusEnum.STOPPED ||
envStatus == EnvironmentStatusEnum.FAILED));
}
};
add(deleteDisableSpan);
}
/** RELOAD BUTTON **/
private void createReloadBtn() {
/** actions button from environment details page **/
PageParameters params = new PageParameters();
if (parentPage.getPageParameters().getNamedKeys().contains("appUid")) {
params.set("appUid", parentPage.getPageParameters().get("appUid"));
}
if (parentPage.getPageParameters().getNamedKeys().contains("releaseUid")) {
params.set("releaseUid", parentPage.getPageParameters().get("releaseUid"));
}
if (parentPage.getPageParameters().getNamedKeys().contains("envUid")) {
params.set("envUid", getModelObject().getUid());
}
reloadBtn = new BookmarkablePageLink("env-reload-link", parentPage.getClass(), params);
add(reloadBtn);
}
private void propagateAjaxUpdate(AjaxRequestTarget target) {
if (parentPage instanceof EnvironmentsPage) {
((EnvironmentsPage)parentPage).getEnvironmentsTablePanel().updateEnvActionsPanelAndStatus(target);
} else if (parentPage instanceof SelectedEnvironmentPage) {
((SelectedEnvironmentPage)parentPage).getEnvDetailsPanel().updateEnvDetailsPanel(target);
} else {
((SelectedReleasePage)parentPage).getEnvironmentsTablePanel().updateEnvActionsPanelAndStatus(target);
}
}
}