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}