001: /**********************************************************************************
002: * $URL: https://source.sakaiproject.org/svn/jsf/tags/sakai_2-4-1/widgets/src/java/org/sakaiproject/jsf/renderer/TimerBarRenderer.java $
003: * $Id: TimerBarRenderer.java 9278 2006-05-10 23:29:21Z ray@media.berkeley.edu $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2003, 2004 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.sakaiproject.jsf.renderer;
021:
022: import java.io.IOException;
023: import java.util.Map;
024: import javax.faces.component.UIComponent;
025: import javax.faces.component.UIOutput;
026: import javax.faces.component.UIViewRoot;
027: import javax.faces.context.FacesContext;
028: import javax.faces.context.ResponseWriter;
029: import javax.faces.render.Renderer;
030: import org.sakaiproject.jsf.util.ConfigurationResource;
031:
032: /**
033: * <p>Description:<br />
034: * This class is the class that renders the <code>timerBar</code>
035: * custom tag.</p>
036: * <p>Copyright: Copyright (c) 2004</p>
037: * <p>Organization: Sakai Project</p>
038: * @author Ed Smiley
039: * @author (JavaScript) Brian Gosselin of http://scriptasylum.com
040: * @version $Id: TimerBarRenderer.java 9278 2006-05-10 23:29:21Z ray@media.berkeley.edu $
041: */
042:
043: public class TimerBarRenderer extends Renderer {
044: private static final String SCRIPT_PATH;
045: private static final String RESOURCE_PATH;
046:
047: // we have static resources for our script path
048: static {
049: ConfigurationResource cr = new ConfigurationResource();
050: SCRIPT_PATH = cr.get("timerBarScript");
051: RESOURCE_PATH = cr.get("resources");
052: }
053:
054: public boolean supportsComponentType(UIComponent component) {
055: return (component instanceof UIOutput);
056: }
057:
058: public void decode(FacesContext context, UIComponent component) {
059: }
060:
061: public void encodeChildren(FacesContext context,
062: UIComponent component) throws IOException {
063: ;
064: }
065:
066: /**
067: * <p>Faces render output method .</p>
068: * <p>Method Generator: org.sakaiproject.tool.assessment.devtools.RenderMaker</p>
069: *
070: * @param context <code>FacesContext</code> for the current request
071: * @param component <code>UIComponent</code> being rendered
072: *
073: * @throws IOException if an input/output error occurs
074: */
075: public void encodeEnd(FacesContext context, UIComponent component)
076: throws IOException {
077:
078: if (!component.isRendered()) {
079: return;
080: }
081:
082: ResponseWriter writer = context.getResponseWriter();
083:
084: String clientId = null;
085:
086: if (component.getId() != null
087: && !component.getId().startsWith(
088: UIViewRoot.UNIQUE_ID_PREFIX)) {
089: clientId = component.getClientId(context);
090: }
091:
092: if (clientId != null) {
093: writer.startElement("span", component);
094: writer.writeAttribute("id", clientId, "id");
095: }
096:
097: Map attrMap = component.getAttributes();
098:
099: writer.write("\n");
100: writer.write("\n<script language=\"javascript\">");
101: writer.write("\n// Timer Bar - Version 1.0");
102: writer
103: .write("\n// Based on Script by Brian Gosselin of http://scriptasylum.com");
104: writer
105: .write("\n var loadedcolor='gray' ; // PROGRESS BAR COLOR");
106:
107: writer
108: .write("\n var unloadedcolor='green'; // COLOR OF UNLOADED AREA");
109:
110: writer
111: .write("\n var bordercolor='navy'; // COLOR OF THE BORDER");
112: writer.write("\n var barheight = " + attrMap.get("height")
113: + "; // HEIGHT OF PROGRESS BAR IN PIXELS");
114: writer.write("\n var barwidth = " + attrMap.get("width")
115: + "; // WIDTH OF THE BAR IN PIXELS");
116: writer.write("\n var waitTime = " + attrMap.get("wait")
117: + "; // NUMBER OF SECONDS FOR PROGRESSBAR");
118: writer.write("\n var loaded = " + attrMap.get("elapsed")
119: + "*10; // TENTHS OF A SECOND ELAPSED");
120: writer
121: .write("\n// THE FUNCTION BELOW CONTAINS THE ACTION(S) TAKEN ONCE BAR REACHES 100.");
122: writer.write("\n");
123: writer.write("\n var action = function()");
124: writer.write("\n {");
125: writer.write("\n " + attrMap.get("expireScript") + ";");
126: writer.write("\n alert(\"" + attrMap.get("expireMessage")
127: + "\");");
128: writer.write("\n }");
129: writer.write("\n");
130: writer.write("\n</script>");
131: writer.write("\n<script language=\"javascript\" src=\"" + "/"
132: + RESOURCE_PATH + "/" + SCRIPT_PATH + "\"></script>");
133: writer.write("\n");
134:
135: if (clientId != null) {
136: writer.endElement("span");
137: }
138: }
139:
140: }
|