001/* 002 * Copyright 2024-2025 Revetware LLC. 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 */ 016 017package com.soklet.servlet.javax; 018 019import javax.annotation.Nonnull; 020import javax.annotation.Nullable; 021import java.util.Locale; 022 023import static java.util.Objects.requireNonNull; 024 025/** 026 * The set of all possible event payloads emittable by {@link SokletServletPrintWriter}. 027 * 028 * @author <a href="https://www.revetkn.com">Mark Allen</a> 029 */ 030public sealed interface SokletServletPrintWriterEvent permits 031 SokletServletPrintWriterEvent.CharsWritten, 032 SokletServletPrintWriterEvent.CharWritten, 033 SokletServletPrintWriterEvent.StringWritten, 034 SokletServletPrintWriterEvent.ValuePrinted, 035 SokletServletPrintWriterEvent.ValueWithNewlinePrinted, 036 SokletServletPrintWriterEvent.NewlinePrinted, 037 SokletServletPrintWriterEvent.PrintfPerformed, 038 SokletServletPrintWriterEvent.FormatPerformed, 039 SokletServletPrintWriterEvent.CharSequenceAppended, 040 SokletServletPrintWriterEvent.CharAppended { 041 042 /** 043 * Event emitted when a {@code char[]} is written to the {@link SokletServletPrintWriter}. 044 */ 045 record CharsWritten( 046 @Nonnull char[] chars, 047 int offset, 048 int length 049 ) implements SokletServletPrintWriterEvent { 050 public CharsWritten { 051 requireNonNull(chars); 052 } 053 } 054 055 /** 056 * Event emitted when an {@code int} (character) is written to the {@link SokletServletPrintWriter}. 057 */ 058 record CharWritten( 059 int ch 060 ) implements SokletServletPrintWriterEvent {} 061 062 /** 063 * Event emitted when a {@link String} is written to the {@link SokletServletPrintWriter}. 064 */ 065 record StringWritten( 066 @Nonnull String string, 067 int offset, 068 int length 069 ) implements SokletServletPrintWriterEvent { 070 public StringWritten { 071 requireNonNull(string); 072 } 073 } 074 075 /** 076 * Event emitted when an {@link Object} value is written to the {@link SokletServletPrintWriter}. 077 */ 078 record ValuePrinted( 079 @Nullable Object value 080 ) implements SokletServletPrintWriterEvent {} 081 082 /** 083 * Event emitted when an {@link Object} value with a newline is written to the {@link SokletServletPrintWriter}. 084 */ 085 record ValueWithNewlinePrinted( 086 @Nullable Object value 087 ) implements SokletServletPrintWriterEvent {} 088 089 /** 090 * Event emitted when a newline is written to the {@link SokletServletPrintWriter}. 091 */ 092 record NewlinePrinted() implements SokletServletPrintWriterEvent {} 093 094 /** 095 * Event emitted when the result of a "printf" operation is written to the {@link SokletServletPrintWriter}. 096 */ 097 record PrintfPerformed( 098 @Nullable Locale locale, 099 @Nonnull String format, 100 @Nonnull Object[] args 101 ) implements SokletServletPrintWriterEvent { 102 public PrintfPerformed { 103 requireNonNull(format); 104 requireNonNull(args); 105 } 106 } 107 108 /** 109 * Event emitted when the result of a "format" operation is written to the {@link SokletServletPrintWriter}. 110 */ 111 record FormatPerformed( 112 @Nullable Locale locale, 113 @Nonnull String format, 114 @Nonnull Object[] args 115 ) implements SokletServletPrintWriterEvent { 116 public FormatPerformed { 117 requireNonNull(format); 118 requireNonNull(args); 119 } 120 } 121 122 /** 123 * Event emitted when a {@link CharSequence} is appended to the {@link SokletServletPrintWriter}. 124 */ 125 record CharSequenceAppended( 126 @Nonnull CharSequence charSequence, 127 int start, 128 int end 129 ) implements SokletServletPrintWriterEvent { 130 public CharSequenceAppended { 131 requireNonNull(charSequence); 132 } 133 } 134 135 /** 136 * Event emitted when a {@code char} is appended to the {@link SokletServletPrintWriter}. 137 */ 138 record CharAppended( 139 char ch 140 ) implements SokletServletPrintWriterEvent { 141 public CharAppended {} 142 } 143}