/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * 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 the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>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.apereo.portal.events.aggr; import java.io.Serializable; import java.util.Set; import org.apereo.portal.utils.IncludeExcludeUtils; /** * Describes common Include/Exclude configuration of aggregation dimensions * */ public interface BaseAggregatedDimensionConfig<D> extends Serializable { /** @return The aggregator the includes/excludes are for */ Class<? extends IPortalEventAggregator> getAggregatorType(); /** @return The revision number of the config object, can be used to detect changes */ long getVersion(); /** * If no dimensions are included or excluded false will be returned. If at least one dimension * is in the {@link #getIncluded()} or {@link #getExcluded()} sets then {@link * IncludeExcludeUtils#included(Object, java.util.Collection, java.util.Collection)} is used. * * @param dimension The dimension to test * @return true if it is included */ boolean isIncluded(D dimension); /** Dimensions listed in this set will be excluded from aggregation. */ Set<D> getIncluded(); /** If not empty only dimensions listed in this set will included in aggregation. */ Set<D> getExcluded(); /** * @return If this dimension equals another, equality is based solely on {@link * #getAggregatorType()} */ @Override boolean equals(Object o); /** * @return The hash code of this dimension, the hash is based solely on {@link * #getAggregatorType()} */ @Override int hashCode(); }