/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2006-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) 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, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) 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 OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.web.outage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.opennms.core.utils.WebSecurityUtils;
import org.opennms.web.api.Util;
import org.opennms.web.filter.Filter;
import org.opennms.web.outage.filter.InterfaceFilter;
import org.opennms.web.outage.filter.LostServiceDateAfterFilter;
import org.opennms.web.outage.filter.LostServiceDateBeforeFilter;
import org.opennms.web.outage.filter.NegativeInterfaceFilter;
import org.opennms.web.outage.filter.NegativeNodeFilter;
import org.opennms.web.outage.filter.NegativeServiceFilter;
import org.opennms.web.outage.filter.NodeFilter;
import org.opennms.web.outage.filter.OutageIdFilter;
import org.opennms.web.outage.filter.RegainedServiceDateAfterFilter;
import org.opennms.web.outage.filter.RegainedServiceDateBeforeFilter;
import org.opennms.web.outage.filter.ServiceFilter;
/**
* <p>Abstract OutageUtil class.</p>
*
* @author ranger
* @version $Id: $
* @since 1.8.1
*/
public abstract class OutageUtil extends Object {
/** Constant <code>DOWN_COLOR="red"</code> */
protected static final String DOWN_COLOR = "red";
/** Constant <code>FILTER_SERVLET_URL_BASE="outage/list.htm"</code> */
public static final String FILTER_SERVLET_URL_BASE = "outage/list.htm";
/**
* <p>getFilter</p>
*
* @param filterString a {@link java.lang.String} object.
* @return a org$opennms$web$filter$Filter object.
*/
public static Filter getFilter(String filterString, ServletContext servletContext) {
if (filterString == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
Filter filter = null;
StringTokenizer tokens = new StringTokenizer(filterString, "=");
String type;
String value;
try {
type = tokens.nextToken();
value = tokens.nextToken();
} catch (NoSuchElementException e) {
throw new IllegalArgumentException("Could not tokenize filter string: " + filterString);
}
if (type.equals(NodeFilter.TYPE)) {
filter = new NodeFilter(WebSecurityUtils.safeParseInt(value), servletContext);
} else if (type.equals(InterfaceFilter.TYPE)) {
filter = new InterfaceFilter(value);
} else if (type.equals(ServiceFilter.TYPE)) {
filter = new ServiceFilter(WebSecurityUtils.safeParseInt(value));
} else if (type.equals(OutageIdFilter.TYPE)) {
filter = new OutageIdFilter(WebSecurityUtils.safeParseInt(value));
} else if (type.equals(NegativeNodeFilter.TYPE)) {
filter = new NegativeNodeFilter(WebSecurityUtils.safeParseInt(value), servletContext);
} else if (type.equals(NegativeInterfaceFilter.TYPE)) {
filter = new NegativeInterfaceFilter(value);
} else if (type.equals(NegativeServiceFilter.TYPE)) {
filter = new NegativeServiceFilter(WebSecurityUtils.safeParseInt(value));
} else if (type.equals(LostServiceDateBeforeFilter.TYPE)) {
filter = new LostServiceDateBeforeFilter(WebSecurityUtils.safeParseLong(value));
} else if (type.equals(LostServiceDateAfterFilter.TYPE)) {
filter = new LostServiceDateAfterFilter(WebSecurityUtils.safeParseLong(value));
} else if (type.equals(RegainedServiceDateBeforeFilter.TYPE)) {
filter = new RegainedServiceDateBeforeFilter(WebSecurityUtils.safeParseLong(value));
} else if (type.equals(RegainedServiceDateAfterFilter.TYPE)) {
filter = new RegainedServiceDateAfterFilter(WebSecurityUtils.safeParseLong(value));
}
return filter;
}
/**
* <p>getFilterString</p>
*
* @param filter a org$opennms$web$filter$Filter object.
* @return a {@link java.lang.String} object.
*/
public static String getFilterString(Filter filter) {
if (filter == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return filter.getDescription();
}
/**
* Returns the color to use for an outage, if no color then it returns null.
*
* @param outage a {@link org.opennms.web.outage.Outage} object.
* @return a {@link java.lang.String} object.
*/
public static String getStatusColor(Outage outage) {
if (outage == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
String color = null;
if (outage.getRegainedServiceTime() == null) {
color = DOWN_COLOR;
}
return color;
}
/**
* Returns the icon to use for an outage, if no icon then it returns null.
*
* @param outage a {@link org.opennms.web.outage.Outage} object.
* @return a {@link java.lang.String} object.
*/
public static String getStatusLabel(Outage outage) {
if (outage == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
String label = null;
if (outage.getRegainedServiceTime() == null) {
label = "DOWN";
}
return label;
}
/** Constant <code>LINK_IGNORES="new String[] { sortby, outtype, limit, "{trunked}</code> */
protected static final String[] LINK_IGNORES = new String[] { "sortby", "outtype", "limit", "multiple", "filter" };
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param sortStyle a {@link org.opennms.web.outage.SortStyle} object.
* @param outageType a {@link org.opennms.web.outage.OutageType} object.
* @param filters a {@link java.util.List} object.
* @param limit a int.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, SortStyle sortStyle, OutageType outageType, List<Filter> filters, int limit) {
if (request == null || sortStyle == null || outageType == null || filters == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
if (limit < 1) {
throw new IllegalArgumentException("Cannot take a zero or negative limit value.");
}
Map<String, Object> additions = new HashMap<String, Object>();
additions.put("sortby", sortStyle.getShortName());
additions.put("outtype", outageType.getShortName());
additions.put("limit", Integer.toString(limit));
if (filters != null) {
String[] filterStrings = new String[filters.size()];
for (int i = 0; i < filters.size(); i++) {
filterStrings[i] = OutageUtil.getFilterString(filters.get(i));
}
additions.put("filter", filterStrings);
}
return FILTER_SERVLET_URL_BASE + "?" + Util.makeQueryString(request, additions, LINK_IGNORES, Util.IgnoreType.REQUEST_ONLY);
}
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, OutageQueryParms parms) {
if (request == null || parms == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeLink(request, parms.sortStyle, parms.outageType, parms.filters, parms.limit);
}
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param sortStyle a {@link org.opennms.web.outage.SortStyle} object.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, OutageQueryParms parms, SortStyle sortStyle) {
if (request == null || parms == null || sortStyle == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeLink(request, sortStyle, parms.outageType, parms.filters, parms.limit);
}
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param outageType a {@link org.opennms.web.outage.OutageType} object.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, OutageQueryParms parms, OutageType outageType) {
if (request == null || parms == null || outageType == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeLink(request, parms.sortStyle, outageType, parms.filters, parms.limit);
}
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param filters a {@link java.util.List} object.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, OutageQueryParms parms, List<Filter> filters) {
if (request == null || parms == null || filters == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeLink(request, parms.sortStyle, parms.outageType, filters, parms.limit);
}
/**
* <p>makeLink</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param filter a org$opennms$web$filter$Filter object.
* @param add a boolean.
* @return a {@link java.lang.String} object.
*/
public static String makeLink(HttpServletRequest request, OutageQueryParms parms, Filter filter, boolean add) {
if (request == null || parms == null || filter == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
List<Filter> newList = new ArrayList<Filter>(parms.filters);
if (add) {
newList.add(filter);
} else {
newList.remove(filter);
}
return makeLink(request, parms.sortStyle, parms.outageType, newList, parms.limit);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param sortStyle a {@link org.opennms.web.outage.SortStyle} object.
* @param outageType a {@link org.opennms.web.outage.OutageType} object.
* @param filters a {@link java.util.List} object.
* @param limit a int.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, SortStyle sortStyle, OutageType outageType, List<Filter> filters, int limit) {
if (request == null || sortStyle == null || outageType == null || filters == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
if (limit < 1) {
throw new IllegalArgumentException("Cannot take a zero or negative limit value.");
}
Map<String, Object> additions = new HashMap<String, Object>();
additions.put("sortby", sortStyle.getShortName());
additions.put("outtype", outageType.getShortName());
additions.put("limit", Integer.toString(limit));
if (filters != null) {
String[] filterStrings = new String[filters.size()];
for (int i = 0; i < filters.size(); i++) {
filterStrings[i] = OutageUtil.getFilterString(filters.get(i));
}
additions.put("filter", filterStrings);
}
return Util.makeHiddenTags(request, additions, LINK_IGNORES, Util.IgnoreType.REQUEST_ONLY);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, OutageQueryParms parms) {
if (request == null || parms == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeHiddenTags(request, parms.sortStyle, parms.outageType, parms.filters, parms.limit);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param sortStyle a {@link org.opennms.web.outage.SortStyle} object.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, OutageQueryParms parms, SortStyle sortStyle) {
if (request == null || parms == null || sortStyle == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeHiddenTags(request, sortStyle, parms.outageType, parms.filters, parms.limit);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param outageType a {@link org.opennms.web.outage.OutageType} object.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, OutageQueryParms parms, OutageType outageType) {
if (request == null || parms == null || outageType == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeHiddenTags(request, parms.sortStyle, outageType, parms.filters, parms.limit);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param filters a {@link java.util.List} object.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, OutageQueryParms parms, List<Filter> filters) {
if (request == null || parms == null || filters == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
return makeHiddenTags(request, parms.sortStyle, parms.outageType, filters, parms.limit);
}
/**
* <p>makeHiddenTags</p>
*
* @param request a {@link javax.servlet.http.HttpServletRequest} object.
* @param parms a {@link org.opennms.web.outage.OutageQueryParms} object.
* @param filter a org$opennms$web$filter$Filter object.
* @param add a boolean.
* @return a {@link java.lang.String} object.
*/
public static String makeHiddenTags(HttpServletRequest request, OutageQueryParms parms, Filter filter, boolean add) {
if (request == null || parms == null || filter == null) {
throw new IllegalArgumentException("Cannot take null parameters.");
}
List<Filter> newList = new ArrayList<Filter>(parms.filters);
if (add) {
newList.add(filter);
} else {
newList.remove(filter);
}
return makeHiddenTags(request, parms.sortStyle, parms.outageType, newList, parms.limit);
}
}