blob: 4f0a413fcd9fb01b2cca621cf0c768ff56f368d7 [file] [log] [blame]
/*
* Copyright 2002,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.tags.swing;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import org.apache.commons.jelly.JellyTagException;
import org.apache.commons.jelly.Script;
import org.apache.commons.jelly.TagSupport;
import org.apache.commons.jelly.XMLOutput;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Creates a WindowListener which is attached to its parent window control which will invoke
* named Jelly scripts as window events are fired, or will invoke its body if there is no script
* specified for the named event type.
*
* @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
* @version $Revision: 1.7 $
*/
public class WindowListenerTag extends TagSupport {
/** The Log to which logging calls will be made. */
private static final Log log = LogFactory.getLog(WindowListenerTag.class);
private String var;
private Script activated;
private Script closed;
private Script closing;
private Script deactivated;
private Script deiconified;
private Script iconified;
private Script opened;
public WindowListenerTag() {
}
// Tag interface
//-------------------------------------------------------------------------
public void doTag(final XMLOutput output) throws JellyTagException {
// now lets add this action to its parent if we have one
ComponentTag tag = (ComponentTag) findAncestorWithClass( ComponentTag.class );
if ( tag != null ) {
WindowListener listener = new WindowListener() {
public void windowActivated(WindowEvent e) {
invokeScript( output, e, activated );
}
public void windowClosed(WindowEvent e) {
invokeScript( output, e, closed );
}
public void windowClosing(WindowEvent e) {
invokeScript( output, e, closing );
}
public void windowDeactivated(WindowEvent e) {
invokeScript( output, e, deactivated );
}
public void windowDeiconified(WindowEvent e) {
invokeScript( output, e, deiconified );
}
public void windowIconified(WindowEvent e) {
invokeScript( output, e, iconified );
}
public void windowOpened(WindowEvent e) {
invokeScript( output, e, opened );
}
};
tag.addWindowListener(listener);
}
}
// Properties
//-------------------------------------------------------------------------
/**
* Sets the name of the variable to use to expose the Event object
*/
public void setVar(String var) {
this.var = var;
}
/**
* Sets the Script to be executed when the window is activated.
*/
public void setActivated(Script activated) {
this.activated = activated;
}
/**
* Sets the Script to be executed when the window is closed.
*/
public void setClosed(Script closed) {
this.closed = closed;
}
/**
* Sets the Script to be executed when the window is closing.
*/
public void setClosing(Script closing) {
this.closing = closing;
}
/**
* Sets the Script to be executed when the window is deactivated.
*/
public void setDeactivated(Script deactivated) {
this.deactivated = deactivated;
}
/**
* Sets the Script to be executed when the window is deiconified.
*/
public void setDeiconified(Script deiconified) {
this.deiconified = deiconified;
}
/**
* Sets the Script to be executed when the window is iconified.
*/
public void setIconified(Script iconified) {
this.iconified = iconified;
}
/**
* Sets the Script to be executed when the window is opened.
*/
public void setOpened(Script opened) {
this.opened = opened;
}
// Implementation methods
//-------------------------------------------------------------------------
protected void invokeScript(XMLOutput output, WindowEvent event, Script script) {
if ( var != null ) {
// define a variable of the event
context.setVariable(var, event);
}
try {
if ( script != null ) {
script.run(context, output );
}
else {
// invoke the body
invokeBody(output);
}
}
catch (Exception e) {
log.error( "Caught exception processing window event: " + event, e );
}
}
}