001// Copyright 2023 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014package org.apache.tapestry5.services.pageload; 015 016import java.lang.ref.SoftReference; 017import java.util.Arrays; 018import java.util.Collections; 019import java.util.Set; 020import java.util.stream.Collectors; 021 022/** 023 * Defines the types of reference the page cache can use. 024 * @see PageCachingReferenceTypeService 025 * @since 5.8.3 026 */ 027public enum ReferenceType 028{ 029 /** 030 * Use a soft reference ({@linkplain SoftReference}) to cached page instances. 031 */ 032 SOFT, 033 034 /** 035 * Use a strong (normal) reference to cached page instances. 036 */ 037 STRONG; 038 039 /** 040 * Utility method that returns {@linkplain PageCachingReferenceTypeService} 041 * matching page names in a case-insensitive way. 042 * @return a {@linkplain PageCachingReferenceTypeService} instance. 043 */ 044 public PageCachingReferenceTypeService forPages(String... canonicalPageNames) 045 { 046 final Set<String> pageNames = Collections.unmodifiableSet( 047 Arrays.stream(canonicalPageNames). 048 map(String::toLowerCase). 049 collect(Collectors.toSet())); 050 return (p) -> pageNames.contains(p.toLowerCase()) ? this : null; 051 } 052 053}