/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.console.filter; import java.util.*; public class PropertiesViewFilter implements QueryFilter { protected QueryFilter next; protected Set viewFilter; /** * Creates a filter that will select the properties of a map object to view * * @param next - the next query filter that will return a collection of maps */ public PropertiesViewFilter(QueryFilter next) { this(null, next); } /** * Creates a filter that will select the properties of a map object to view * * @param viewFilter - the properties to view * @param next - the next query filter that will return a collection of maps */ public PropertiesViewFilter(Set viewFilter, QueryFilter next) { this.next = next; this.viewFilter = viewFilter; } /** * Filter the properties to view of the query result * * @param query - the query string * @return list of objects that has been view filtered */ public List<Map<Object, Object>> query(String query) throws Exception { return filterViewCollection(next.query(query), viewFilter); } /** * Filter the properties to view of the query result * * @param queries - the query map * @return list of objects that has been view filtered * @throws Exception */ public List<Map<Object, Object>> query(List queries) throws Exception { return filterViewCollection(next.query(queries), viewFilter); } /** * Filter the view of each element in the collection * * @param result - the lists to filter the view from * @param viewFilter - the views to select * @return list of objects whose view has been filtered */ protected List<Map<Object, Object>> filterViewCollection(Collection<Map<Object, Object>> result, Set viewFilter) { // Use a list to allow duplicate entries List<Map<Object, Object>> newCollection = new ArrayList<Map<Object, Object>>(); for (Iterator<Map<Object, Object>> i = result.iterator(); i.hasNext();) { newCollection.add(filterView(i.next())); } return newCollection; } /** * Select only the attributes to view from the map data * * @param data - data to filter the view from * @return - data with the view filtered */ protected Map<Object, Object> filterView(Map<Object, Object> data) { // If no view specified, display all attributes if (viewFilter == null || viewFilter.isEmpty()) { return data; } Map<Object, Object> newData; try { // Lets try to use the same class as the original newData = new LinkedHashMap(data.getClass().newInstance()); } catch (Exception e) { // Lets use a default HashMap newData = new LinkedHashMap<Object, Object>(); } // Filter the keys to view for (Iterator i = viewFilter.iterator(); i.hasNext();) { Object key = i.next(); Object val = data.get(key); if (val != null) { newData.put(key, val); } } return newData; } }