001 /* 002 Copyright (C) 2003 Laurent Martelli <laurent@aopsys.com> 003 004 This program is free software; you can redistribute it and/or modify 005 it under the terms of the GNU Lesser General Public License as 006 published by the Free Software Foundation; either version 2 of the 007 License, or (at your option) any later version. 008 009 This program is distributed in the hope that it will be useful, 010 but WITHOUT ANY WARRANTY; without even the implied warranty of 011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 GNU Lesser General Public License for more details. 013 014 You should have received a copy of the GNU Lesser General Public 015 License along with this program; if not, write to the Free Software 016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 017 USA */ 018 019 package org.objectweb.jac.aspects.gui; 020 021 import org.aopalliance.intercept.ConstructorInvocation; 022 import org.aopalliance.intercept.MethodInvocation; 023 import org.apache.log4j.Logger; 024 import org.objectweb.jac.core.AspectComponent; 025 import org.objectweb.jac.core.Display; 026 import org.objectweb.jac.core.Interaction; 027 import org.objectweb.jac.core.Wrapper; 028 029 /** 030 * This wrapper displays a "Please wait message" for slow operations. 031 * @see org.objectweb.jac.aspects.gui.GuiAC#setSlowOperation(AbstractMethodItem,boolean) 032 */ 033 public class WaitWrapper extends Wrapper { 034 static Logger logger = Logger.getLogger("gui.wait"); 035 036 public WaitWrapper(AspectComponent ac) { 037 super(ac); 038 } 039 040 public Object pleaseWait(Interaction interaction) { 041 DialogView page = null; 042 CustomizedDisplay display = null; 043 Object result = null; 044 try { 045 if (GuiAC.isSlowOperation(interaction.method)) { 046 logger.debug("pleaseWait "+interaction); 047 DisplayContext context = 048 (DisplayContext)attr(GuiAC.DISPLAY_CONTEXT); 049 if (context!=null) { 050 display = context.getDisplay(); 051 page = 052 (DialogView)display.showRefreshMessage( 053 "Please wait", 054 "Please wait: "+interaction.method.getName()+" is running..."); 055 } else { 056 logger.error("pleaseWait: no display context available for "+ 057 interaction.method); 058 } 059 } 060 result = interaction.proceed(); 061 } finally { 062 if (page!=null) 063 page.waitForClose(); 064 } 065 return result; 066 } 067 068 public Object invoke(MethodInvocation invocation) throws Throwable { 069 return pleaseWait((Interaction)invocation); 070 } 071 072 public Object construct(ConstructorInvocation invocation) throws Throwable { 073 return pleaseWait((Interaction)invocation); 074 } 075 }