/* * RHQ Management Platform * Copyright (C) 2005-2009 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.gui.alert.common; import javax.faces.application.FacesMessage; import org.rhq.core.domain.alert.notification.AlertNotification; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.enterprise.gui.common.framework.EnterpriseFacesContextUIBean; import org.rhq.enterprise.server.alert.AlertNotificationManagerLocal; import org.rhq.enterprise.server.plugin.pc.alert.AlertSenderInfo; import org.rhq.enterprise.server.plugin.pc.alert.CustomAlertSenderBackingBean; //@Scope(ScopeType.EVENT) //@Name("customContentUIBean") public class CustomContentUIBean extends EnterpriseFacesContextUIBean { //@RequestParameter("nid") private Integer alertNotificationId; //@In private AlertNotificationManagerLocal alertNotificationManager; private String contentUrl; private CustomAlertSenderBackingBean customBackingBean; public String getContentUrl() { return contentUrl; } //@Create public void init() { if (alertNotificationId == null) { return; } AlertNotification activeNotification = alertNotificationManager.getAlertNotification(getSubject(), alertNotificationId); if (activeNotification == null) { return; // this was just removed on the previous request } String senderName = activeNotification.getSenderName(); AlertSenderInfo info = alertNotificationManager.getAlertInfoForSender(senderName); if (info != null && info.getUiSnippetUrl() != null) { this.contentUrl = info.getUiSnippetUrl().toString(); } String backingBeanName = alertNotificationManager.getBackingBeanNameForSender(senderName); customBackingBean = alertNotificationManager.getBackingBeanForSender(senderName, alertNotificationId); if (backingBeanName != null && customBackingBean != null) { customBackingBean.setWebUser(getSubject()); customBackingBean.setContext(FacesContextUtility.getRequiredRequestParameter("context")); customBackingBean.setContextId(FacesContextUtility.getRequiredRequestParameter("contextId")); customBackingBean.setContextSubId(FacesContextUtility.getOptionalRequestParameter("contextSubId", (String) null)); customBackingBean.setAlertNotificationId(alertNotificationId); customBackingBean.loadView(); outjectBean(backingBeanName, customBackingBean); } } /** * We are just getting an Object from the plugin manager which acts as our backing bean. * This method is used instead of @Out or @Factory because we need to be able to * dynamically assign the component's name so that the plugin author can define the * name of bean, but this class is not an "official" seam component. */ private void outjectBean(String name, CustomAlertSenderBackingBean bean) { // Context context = Contexts.getPageContext(); // context.set(name, bean); } public String saveConfiguration() { try { customBackingBean.saveView(); int notificationId = customBackingBean.getAlertNotificationId(); AlertNotification notification = alertNotificationManager .getAlertNotification(getSubject(), notificationId); if (customBackingBean.getExtraParameters() != null) { notification.setExtraConfiguration(customBackingBean.getExtraParameters()); } else { notification.setExtraConfiguration(null); } int alertDefinitionId = Integer.parseInt(customBackingBean.getContextId()); alertNotificationManager.updateAlertNotification(getSubject(), alertDefinitionId, notification); // AlertNotificationsUIBean notificationsUIBean = (AlertNotificationsUIBean) Contexts // .lookupInStatefulContexts("alertNotificationsUIBean"); // notificationsUIBean.reselectActiveNotificationUsingDataComparison(notification); } catch (Throwable t) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to save alert notification", t); } return OUTCOME_SUCCESS; } }