001 // Copyright 2011 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 015 package org.apache.tapestry5.alerts; 016 017 import org.apache.tapestry5.ioc.internal.util.InternalUtils; 018 import org.apache.tapestry5.json.JSONObject; 019 020 import java.io.Serializable; 021 import java.util.concurrent.atomic.AtomicLong; 022 023 /** 024 * An Alert that may be presented to the user. The Alert has a message, but also includes 025 * a severity (that controls how it is presented to the user), and a duration (that controls how long 026 * it is presented to the user). 027 * 028 * @since 5.3 029 */ 030 public class Alert implements Serializable 031 { 032 private static final AtomicLong idSource = new AtomicLong(System.currentTimeMillis()); 033 034 /** 035 * A unique id (unique within this JVM and execution), used to identify an alert (used primarily 036 * when individually dismissing an alert). 037 */ 038 public final long id = idSource.getAndIncrement(); 039 040 public final Duration duration; 041 042 public final Severity severity; 043 044 public final String message; 045 046 /** 047 * Alert with default duration of {@link Duration#SINGLE} and default severity 048 * of {@link Severity#INFO}. 049 */ 050 public Alert(String message) 051 { 052 this(Severity.INFO, message); 053 } 054 055 /** 056 * Alert with default duration of {@link Duration#SINGLE}. 057 */ 058 public Alert(Severity severity, String message) 059 { 060 this(Duration.SINGLE, severity, message); 061 } 062 063 public Alert(Duration duration, Severity severity, String message) 064 { 065 assert duration != null; 066 assert severity != null; 067 assert InternalUtils.isNonBlank(message); 068 069 this.duration = duration; 070 this.severity = severity; 071 this.message = message; 072 } 073 074 public String toString() 075 { 076 return String.format("Alert[%s %s %s]", 077 duration.name(), 078 severity.name(), 079 message); 080 } 081 082 public JSONObject toJSON() 083 { 084 JSONObject result = new JSONObject("message", message, "class", severity.cssClass); 085 086 if (duration == Duration.TRANSIENT) 087 { 088 result.put("transient", true); 089 } 090 091 if (duration.persistent) 092 { 093 result.put("id", id); 094 } 095 096 return result; 097 } 098 }