001/* 002 * Copyright (C) Photon Vision. 003 * 004 * This program is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package org.photonvision.common.dataflow; 019 020import java.util.List; 021import java.util.Objects; 022import org.photonvision.common.dataflow.events.DataChangeEvent; 023 024public abstract class DataChangeSubscriber { 025 public final List<DataChangeSource> wantedSources; 026 public final List<DataChangeDestination> wantedDestinations; 027 028 private final int hash; 029 030 public DataChangeSubscriber( 031 List<DataChangeSource> wantedSources, List<DataChangeDestination> wantedDestinations) { 032 this.wantedSources = wantedSources; 033 this.wantedDestinations = wantedDestinations; 034 hash = Objects.hash(wantedSources, wantedDestinations); 035 } 036 037 public DataChangeSubscriber() { 038 this(DataChangeSource.AllSources, DataChangeDestination.AllDestinations); 039 } 040 041 public DataChangeSubscriber(DataChangeSource.DataChangeSourceList wantedSources) { 042 this(wantedSources, DataChangeDestination.AllDestinations); 043 } 044 045 public DataChangeSubscriber(DataChangeDestination.DataChangeDestinationList wantedDestinations) { 046 this(DataChangeSource.AllSources, wantedDestinations); 047 } 048 049 public abstract void onDataChangeEvent(DataChangeEvent<?> event); 050 051 @Override 052 public int hashCode() { 053 return hash; 054 } 055}