/* * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * "The contents of this file are subject to the Mozilla Public License * Version 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations under * the License. * * The Original Code is ICEfaces 1.5 open source software code, released * November 5, 2006. The Initial Developer of the Original Code is ICEsoft * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C) * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved. * * Contributor(s): _____________________. * * Alternatively, the contents of this file may be used under the terms of * the GNU Lesser General Public License Version 2.1 or later (the "LGPL" * License), in which case the provisions of the LGPL License are * applicable instead of those above. If you wish to allow use of your * version of this file only under the terms of the LGPL License and not to * allow others to use your version of this file under the MPL, indicate * your decision by deleting the provisions above and replace them with * the notice and other provisions required by the LGPL License. If you do * not delete the provisions above, a recipient may use your version of * this file under either the MPL or the LGPL License." * */ package @actionPackage@; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.In; import org.jboss.seam.ScopeType; import org.jboss.seam.core.Manager; import javax.faces.context.FacesContext; import javax.ejb.Stateful; import javax.ejb.Remove; import java.util.Date; import java.text.DateFormat; import java.io.Serializable; import javax.faces.event.ActionEvent; import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState; import com.icesoft.faces.webapp.xmlhttp.RenderingException; import com.icesoft.faces.async.render.RenderManager; import com.icesoft.faces.async.render.IntervalRenderer; import com.icesoft.faces.async.render.Renderable; import com.icesoft.faces.context.effects.Effect; import com.icesoft.faces.context.effects.BlindDown; import com.icesoft.faces.context.effects.BlindUp; import org.jboss.seam.annotations.Logger; import org.jboss.seam.log.Log; /** * @author ICEsoft Technologies, Inc. * */ @Name("timer") @Scope(ScopeType.PAGE) public class TimerBeanImpl implements Renderable, Serializable { @Logger private Log log; // expand/contract effects to take place of panelCollapsible private Effect currentEffect=new BlindUp(); private boolean visibility=false; private boolean toggledEffect; private boolean expanded = false; private DateFormat dateFormatter; @In private RenderManager renderManager; private boolean doneSetup; private IntervalRenderer ir; private PersistentFacesState state = PersistentFacesState.getInstance(); private String synchronous; private int myId; private static int id; public PersistentFacesState getState() { return state; } public void renderingException( RenderingException re) { if(log.isTraceEnabled() ) { log.trace("*** View obsoleted: " + myId ); } cleanup(); } public TimerBeanImpl() { dateFormatter = DateFormat.getDateTimeInstance(); myId = ++id; } /** to simulate panelCollapsible */ private void buildEffect() { if (expanded) { currentEffect = new BlindDown(); } else { currentEffect = new BlindUp(); } currentEffect.setSubmit(true); currentEffect.setTransitory(false); currentEffect.setDuration(.2f); } public boolean getExpanded() { return expanded; } public void setExpanded(boolean expanded) { this.expanded = expanded; visibility = expanded; buildEffect(); currentEffect.setFired(true); } public boolean isVisibility() { return visibility; } public void setVisibility(boolean visibility) { this.visibility = visibility; } /** * Method used to toggle the expanded status of this item This would be * called from the front end pages * * @return "toggleExpanded" for use with faces-config navigation */ public String toggleExpanded() { expanded = !expanded; buildEffect(); toggledEffect = true; currentEffect.setFired(false); currentEffect.setSubmit(true); return null; } /** * Gets the effect used when a cell is expanded or contracted * * @return effect */ public Effect getExpandEffect() { if (!toggledEffect) { currentEffect.setSubmit(false); } toggledEffect = false; return currentEffect; } public String getCurrentTime() { state = PersistentFacesState.getInstance(); if (!doneSetup) { if(log.isTraceEnabled() ) { log.trace("*** new TimerBean renderable... " + myId ); } FacesContext fc = FacesContext.getCurrentInstance(); synchronous = (String) fc.getExternalContext().getInitParameterMap(). get( "com.icesoft.faces.synchronousUpdate" ); boolean timed = Boolean.valueOf( (String) fc.getExternalContext().getInitParameterMap(). get("org.icesoft.examples.serverClock")); if (timed) { ir = renderManager.getIntervalRenderer("org.icesoft.clock.clockRenderer"); ir.setInterval(5000); ir.add(this); ir.requestRender(); } } doneSetup = true; return dateFormatter.format( new Date( System.currentTimeMillis() ) ); } public String getRenderMode() { return synchronous + " " + myId; } // Don't make this begin a conversation as this class is // intended to be used in a footer. // If this method starts a conversation // it can't be added to the foot of applications that don't // expect conversations to already be in progress public String getCurrentConversation() { Manager m = Manager.instance(); return m.getCurrentConversationId(); } public String getLongRunning() { Manager m = Manager.instance(); return Boolean.toString( m.isLongRunningConversation() ); } @Remove @Destroy public void remove() { if(log.isTraceEnabled() ) { log.trace("*** View removed: " + myId ); } cleanup(); } private void cleanup() { if (ir != null) { ir.remove(this); if (ir.isEmpty() ) { if(log.isTraceEnabled() ) { log.trace("*** IntervalRenderer Stopped " ); } ir.requestStop(); } } } }