001 package org.apache.myfaces.tobago.event; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one or more 005 * contributor license agreements. See the NOTICE file distributed with 006 * this work for additional information regarding copyright ownership. 007 * The ASF licenses this file to You under the Apache License, Version 2.0 008 * (the "License"); you may not use this file except in compliance with 009 * the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 */ 019 020 import org.apache.myfaces.tobago.TobagoConstants; 021 import org.apache.myfaces.tobago.component.UIPopup; 022 import org.apache.myfaces.tobago.component.ComponentUtil; 023 import org.apache.commons.logging.Log; 024 import org.apache.commons.logging.LogFactory; 025 026 import javax.faces.component.UIComponent; 027 import javax.faces.event.ActionListener; 028 import javax.faces.event.ActionEvent; 029 import javax.faces.event.AbortProcessingException; 030 import javax.faces.context.FacesContext; 031 import javax.faces.el.ValueBinding; 032 import javax.faces.webapp.UIComponentTag; 033 import java.io.Serializable; 034 035 /* 036 * Date: Dec 23, 2006 037 * Time: 10:59:53 AM 038 */ 039 // TODO implement StateHolder 040 public class PopupActionListener implements ActionListener, Serializable { 041 042 private static final Log LOG = LogFactory.getLog(PopupActionListener.class); 043 044 private String popupId; 045 046 private ValueBinding popupIdBinding; 047 048 private boolean facet; 049 050 051 public PopupActionListener() { 052 } 053 054 public PopupActionListener(String popupId) { 055 056 if (UIComponentTag.isValueReference(popupId)) { 057 popupIdBinding = ComponentUtil.createValueBinding(popupId); 058 } else { 059 this.popupId = popupId; 060 } 061 if (LOG.isDebugEnabled()) { 062 LOG.debug("Add ActionListener: " + popupId); 063 } 064 } 065 066 public PopupActionListener(UIPopup popup) { 067 facet = true; 068 } 069 070 public void processAction(ActionEvent actionEvent) throws AbortProcessingException { 071 FacesContext facesContext = FacesContext.getCurrentInstance(); 072 UIPopup popup = null; 073 if (facet) { 074 UIComponent component = actionEvent.getComponent().getFacet(TobagoConstants.FACET_POPUP); 075 if (component instanceof UIPopup) { 076 popup = (UIPopup) component; 077 } 078 if (popup == null) { 079 LOG.error("Found no popup facet in component " 080 + actionEvent.getComponent().getClientId(facesContext)); 081 } 082 } else { 083 String id; 084 if (popupIdBinding != null) { 085 id = (String) popupIdBinding.getValue(facesContext); 086 } else { 087 id = popupId; 088 } 089 popup = (UIPopup) ComponentUtil.findComponent(actionEvent.getComponent(), id); 090 if (popup == null) { 091 LOG.error("Found no popup for \"" 092 + (popupIdBinding != null ? popupIdBinding.getExpressionString() + "\" := \"" : "") 093 + id + "\"! Search base componentId : " 094 + actionEvent.getComponent().getClientId(facesContext)); 095 } 096 } 097 if (popup != null) { 098 if (LOG.isDebugEnabled()) { 099 LOG.debug("activated " 100 + actionEvent.getComponent().getClientId(facesContext)); 101 } 102 popup.setActivated(true); 103 } 104 } 105 106 }