/*
* RHQ Management Platform
* Copyright (C) 2005-2010 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.coregui.client.alert.definitions;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.coregui.client.CoreGUI;
import org.rhq.coregui.client.Messages;
/**
* Convienence class that encapsulates the different configuration properties that a notification
* needs to support the resource operation notification feature.
*
* @author John Mazzitelli
*/
public class ResourceOperationNotificationInfo {
static Messages MSG = CoreGUI.getMessages();
public enum Constants {
SELECTION_MODE("selection-mode"), // self, specific, relative
SPECIFIC_RESOURCE_ID("selection-specific-resource-id"), //
RELATIVE_ANCESTOR_TYPE_ID("selection-relative-ancestor-type-id"), //
RELATIVE_DESCENDANT_TYPE_ID("selection-relative-descendant-type-id"), //
RELATIVE_DESCENDANT_NAME("selection-relative-descendant-name"), //
OPERATION_ID("operation-definition-id");
private final String propertyName; // the actual name of the property stored in the config object - must match server-side expectations
private Constants(String propertyName) {
this.propertyName = propertyName;
}
public String getPropertyName() {
return propertyName;
}
}; // gwt compiler needs this semi
public enum ResourceSelectionMode {
SELF, //
SPECIFIC, //
RELATIVE;
public String getDisplayString() {
switch (ordinal()) {
case 0: {
return MSG.view_alert_definition_notification_operation_editor_mode_this();
}
case 1: {
return MSG.view_alert_definition_notification_operation_editor_mode_specific();
}
case 2: {
return MSG.view_alert_definition_notification_operation_editor_mode_relative();
}
default: {
return MSG.view_alert_definition_notification_operation_editor_mode_unknown(); // should never happen
}
}
}
}; // gwt compiler needs this semi
private ResourceSelectionMode mode; // will never be null
private Integer resourceId;
private Integer ancestorTypeId;
private Integer descendantTypeId;
private String descendantName;
private Integer operationId;
private Configuration operationArguments; // may be null
private ResourceOperationNotificationInfo(String mode, String resourceId, String ancestorTypeId,
String descendantTypeId, String descendantName, String operationId, Configuration opArgs) {
ResourceSelectionMode selectionMode = null;
try {
if (mode != null) {
selectionMode = ResourceSelectionMode.valueOf(mode);
}
} catch (Throwable t) {
}
this.mode = selectionMode;
this.resourceId = getInteger(resourceId);
this.ancestorTypeId = getInteger(ancestorTypeId);
this.descendantTypeId = getInteger(descendantTypeId);
this.descendantName = descendantName;
this.operationId = getInteger(operationId);
this.operationArguments = opArgs;
}
private Integer getInteger(String data) {
if (data == null || data.equals("") || data.equals("none")) {
return null;
}
return Integer.parseInt(data);
}
public static ResourceOperationNotificationInfo load(Configuration configuration, Configuration extraConfiguration) {
String mode = get(configuration, Constants.SELECTION_MODE, ResourceSelectionMode.SELF.name());
String resourceId = get(configuration, Constants.SPECIFIC_RESOURCE_ID, null);
String ancestorTypeId = get(configuration, Constants.RELATIVE_ANCESTOR_TYPE_ID, null);
String descendantTypeId = get(configuration, Constants.RELATIVE_DESCENDANT_TYPE_ID, null);
String descendantName = get(configuration, Constants.RELATIVE_DESCENDANT_NAME, null);
String operationId = get(configuration, Constants.OPERATION_ID, null);
return new ResourceOperationNotificationInfo(mode, resourceId, ancestorTypeId, descendantTypeId,
descendantName, operationId, extraConfiguration);
}
private static String get(Configuration configuration, Constants operationInfoConstants, String defaultValue) {
return configuration.getSimpleValue(operationInfoConstants.propertyName, defaultValue);
}
/**
* Indicates how to interpret the rest of the data in this info object.
* If this is <code>null</code>, there is no info that can be gleened from the rest of this object's data.
*
* @return the operation selection mode - e.g. self, specific or relative
*/
public ResourceSelectionMode getMode() {
return mode;
}
public Integer getResourceId() {
return resourceId;
}
public Integer getAncestorTypeId() {
return ancestorTypeId;
}
public Integer getDescendantTypeId() {
return descendantTypeId;
}
public String getDescendantName() {
return descendantName;
}
public Integer getOperationId() {
return operationId;
}
public Configuration getOperationArguments() {
return operationArguments;
}
}