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