001 // Copyright 2008, 2009, 2010 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.services;
016
017 import org.apache.tapestry5.EventContext;
018 import org.apache.tapestry5.internal.TapestryInternalUtils;
019 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
020
021 /**
022 * Encapsulates all the information that may be provided in a component event request URL.
023 */
024 public final class ComponentEventRequestParameters
025 {
026 private final String activePageName, containingPageName, nestedComponentId, eventType;
027 private final EventContext pageActivationContext, eventContext;
028
029 public ComponentEventRequestParameters(String activePageName, String containingPageName, String nestedComponentId,
030 String eventType, EventContext pageActivationContext,
031 EventContext eventContext)
032 {
033 assert InternalUtils.isNonBlank(activePageName);
034 assert InternalUtils.isNonBlank(containingPageName);
035 assert nestedComponentId != null;
036 assert InternalUtils.isNonBlank(eventType);
037 assert pageActivationContext != null;
038 assert eventContext != null;
039 this.activePageName = activePageName;
040 this.containingPageName = containingPageName;
041 this.nestedComponentId = nestedComponentId;
042 this.eventType = eventType;
043 this.pageActivationContext = pageActivationContext;
044 this.eventContext = eventContext;
045 }
046
047 @Override
048 public String toString()
049 {
050 return String.format("ComponentEventParameters[page=%s component=%s:%s event=%s]",
051 activePageName,
052 containingPageName, nestedComponentId,
053 eventType);
054 }
055
056 // Implements equals() as a convienience for testing.
057
058 public boolean equals(Object o)
059 {
060 if (this == o) return true;
061 if (o == null || getClass() != o.getClass()) return false;
062
063 ComponentEventRequestParameters that = (ComponentEventRequestParameters) o;
064
065 if (!activePageName.equals(that.activePageName)) return false;
066 if (!containingPageName.equals(that.containingPageName)) return false;
067 if (!eventType.equals(that.eventType)) return false;
068 if (!nestedComponentId.equals(that.nestedComponentId)) return false;
069
070 if (!TapestryInternalUtils.isEqual(eventContext, that.eventContext)) return false;
071
072 return TapestryInternalUtils.isEqual(pageActivationContext, that.pageActivationContext);
073 }
074
075
076 /**
077 * The name of the active page which rendered the link. This is usually, but not always, the page which contains
078 * the component.
079 *
080 * @return {@link ComponentClassResolver#canonicalizePageName(String) canonicalized} page name
081 */
082 public String getActivePageName()
083 {
084 return activePageName;
085 }
086
087 /**
088 * The name of the page containing the component that was triggered. Usually this is the same as the active page,
089 * but because of {@link org.apache.tapestry5.Block} and similar constructs, a component from other than the active
090 * page may be rendered with the active page.
091 *
092 * @return {@link ComponentClassResolver#canonicalizePageName(String) canonicalized} page name
093 */
094 public String getContainingPageName()
095 {
096 return containingPageName;
097 }
098
099 /**
100 * The path from the containing page down to the component in question. This may be the empty string if the action
101 * request is routed directly to the page rather than a component.
102 */
103 public String getNestedComponentId()
104 {
105 return nestedComponentId;
106 }
107
108 /**
109 * The type of event. When not specified in the URL, a default type of "action" ({@link
110 * org.apache.tapestry5.EventConstants#ACTION}) is provided.
111 */
112 public String getEventType()
113 {
114 return eventType;
115 }
116
117 /**
118 * The activation context for the <em>active page</em>, possibly empty (but not null).
119 *
120 * @see org.apache.tapestry5.ComponentResourcesCommon#triggerContextEvent(String, org.apache.tapestry5.EventContext,
121 * org.apache.tapestry5.ComponentEventCallback)
122 */
123 public EventContext getPageActivationContext()
124 {
125 return pageActivationContext;
126 }
127
128 /**
129 * The event context information passed in the URL. Possibly empty (not not null).
130 *
131 * @see org.apache.tapestry5.ComponentResourcesCommon#triggerContextEvent(String, org.apache.tapestry5.EventContext,
132 * org.apache.tapestry5.ComponentEventCallback)
133 */
134 public EventContext getEventContext()
135 {
136 return eventContext;
137 }
138 }