001// Copyright 2010, 2013 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. 014 015package org.apache.tapestry5.internal; 016 017import java.util.Optional; 018 019import org.apache.tapestry5.EventContext; 020 021public abstract class AbstractEventContext implements EventContext 022{ 023 public String[] toStrings() 024 { 025 int count = getCount(); 026 027 String[] result = new String[count]; 028 029 for (int i = 0; i < count; i++) 030 { 031 result[i] = get(String.class, i); 032 } 033 034 return result; 035 } 036 037 @Override 038 public String toString() 039 { 040 StringBuilder builder = new StringBuilder("<EventContext"); 041 042 String[] values = toStrings(); 043 044 String sep = ": "; 045 046 for (int i = 0; i < values.length; i++) 047 { 048 builder.append(sep).append(values[i]); 049 sep = ", "; 050 } 051 052 return builder.append('>').toString(); 053 } 054 055 056 @Override 057 public boolean isEmpty() 058 { 059 return getCount() == 0; 060 } 061 062 @Override 063 public <T> Optional<T> tryGet(Class<T> desiredType, int index) 064 { 065 if (index >= getCount()) 066 { 067 return Optional.empty(); 068 } 069 070 try 071 { 072 T value = get(desiredType, index); 073 return Optional.ofNullable(value); 074 } catch (RuntimeException e) 075 { 076 // Ignore any RuntimeException 077 } 078 079 return Optional.empty(); 080 } 081 082}