001/*
002 *  Copyright 2020 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.plugins.calendar.icsreader;
017
018import java.time.ZonedDateTime;
019import java.util.Objects;
020
021import org.ametys.plugins.calendar.events.EventsFilterHelper;
022
023/**
024 * A key class used for the events cache
025 */
026public class CacheKey
027{
028    private String _url;
029    private Long _nbEvents;
030    private ZonedDateTime _fromDate;
031    private ZonedDateTime _untilDate;
032    private Long _maxFileSize;
033    
034    /**
035     * The value needed to create a key (so if there are many services with the same url but different parameters, we will use another cache)
036     * @param url ics url
037     * @param dateRange date range used to return data
038     * @param nbEvents max number of events to fetch
039     * @param maxFileSize max ics file size (in bytes)
040     */
041    public CacheKey(String url, EventsFilterHelper.DateTimeRange dateRange, Long nbEvents, Long maxFileSize)
042    {
043        _url = url;
044        _nbEvents = nbEvents;
045        if (dateRange != null)
046        {
047            _fromDate = dateRange.fromDate();
048            _untilDate = dateRange.untilDate();
049        }
050        _maxFileSize = maxFileSize;
051    }
052
053    @Override
054    public int hashCode()
055    {
056        return Objects.hash(_untilDate, _maxFileSize, _nbEvents, _fromDate, _url);
057    }
058
059    @Override
060    public boolean equals(Object obj)
061    {
062        if (this == obj)
063        {
064            return true;
065        }
066        if (obj == null)
067        {
068            return false;
069        }
070        if (getClass() != obj.getClass())
071        {
072            return false;
073        }
074        CacheKey other = (CacheKey) obj;
075        return Objects.equals(_untilDate, other._untilDate) && Objects.equals(_maxFileSize, other._maxFileSize) && Objects.equals(_nbEvents, other._nbEvents)
076                && Objects.equals(_fromDate, other._fromDate) && Objects.equals(_url, other._url);
077    }
078    
079}