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 }