cziegeler 01/07/16 03:54:37
Added: src/org/apache/cocoon/acting ScriptAction.java
webapp/docs/samples/script-action addknowncourse.js
addunknowncse.js addunknownte.js createuser.js
deleteknown.js deleteunknown.js login.js
updateinfo.js
Log:
Added script action. The source for an action can written with any
supported scripting language!
Submitted by: Jason Foster ([EMAIL PROTECTED])
Revision Changes Path
1.1 xml-cocoon2/src/org/apache/cocoon/acting/ScriptAction.java
Index: ScriptAction.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.cocoon.acting;
// Cocoon imports
import org.apache.cocoon.Constants;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Roles;
// Avalon imports
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.parameters.Parameters;
// Java runtime imports
import java.io.Reader;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
// BSF imports
import com.ibm.bsf.BSFManager;
import com.ibm.bsf.util.IOUtils;
import com.ibm.bsf.BSFException;
// SAX imports
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* A simple action that executes any script that can be run by the BSF
*/
public class ScriptAction extends ComposerAction implements Roles {
public Map act( Redirector redirector, SourceResolver resolver, Map objectModel,
String source, Parameters par ) throws Exception
{
try {
// Figure out what script to open. A missing script name is caught
// by the resolver/SystemId grouping later on and causes an exception
String scriptName = source;
getLogger().debug("script source [" + scriptName + "]");
// Locate the appropriate file on the filesytem
Source src = resolver.resolve(scriptName);
String systemID = src.getSystemId();
getLogger().debug("script resolved to [" + systemID + "]");
// TODO: why doesn't this work?
// Reader in = src.getCharacterStream();
Reader in = new InputStreamReader(src.getInputStream());
// Set up the BSF manager and register relevant helper "beans"
BSFManager mgr = new BSFManager();
HashMap actionMap = new HashMap();
// parameters to act(...)
mgr.registerBean("resolver", resolver);
mgr.registerBean("objectModel", objectModel);
mgr.registerBean("parameters", par);
// ScriptAction housekeeping
mgr.registerBean("actionMap", actionMap);
// helpers
// TODO: should we check for a null request object here or let the
script handle it?
mgr.registerBean("logger", getLogger());
mgr.registerBean("request", ( (Request)
objectModel.get(Constants.REQUEST_OBJECT) ) );
mgr.registerBean("scriptaction", this );
mgr.registerBean("manager", this.manager );
getLogger().debug("BSFManager execution begining");
// Execute the script
mgr.exec(BSFManager.getLangFromFilename(systemID), systemID, 0, 0,
IOUtils.getStringFromReader(in));
getLogger().debug("BSFManager execution complete");
// Figure out what to return
// TODO: decide on a more robust communication method
if ( actionMap.containsKey( "scriptaction-continue" ) )
{
return ( Collections.unmodifiableMap(actionMap) );
}
else
{
return ( null );
}
} catch (FileNotFoundException e) {
throw new ProcessingException(
"Exception in ScriptAction.act()", e);
} catch (BSFException e) {
throw new ProcessingException(
"Exception in ScriptAction.act()", e);
} catch (Exception e) {
throw new ProcessingException(
"Exception in ScriptAction.act()", e);
} // try/catch
} // public Map act(...)
} // public class ScriptAction
1.1 xml-cocoon2/webapp/docs/samples/script-action/addknowncourse.js
Index: addknowncourse.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START addknowncourse.js" )
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
term = request.getParameter( "term" )
course = request.getParameter( "course" )
distanceEd = request.getParameter( "distanceEd" )
extra = request.getParameter( "extra" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " course [" + course + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
// Cook things a little to make them palatable to the database
if ( term == "0" ) { term = "" }
if ( course == "0" ) { course = "" }
if ( distanceEd == "on" ) { distanceEd = 2 } else { distanceEd = 1 }
if ( extra == "on" ) { extra = 2 } else { extra = 1 }
logger.debug( "Cooked" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " course [" + course + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
// Actually do the database work
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
addStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
addStatement = conn.prepareStatement(
"INSERT INTO studentKnownCourseList ( STUDENT, KNOWN_COURSE, TERM_TAKEN,
DISTANCE_ED, COURSE_EXTRA)" +
"VALUES ( ( SELECT id FROM students WHERE uw_userid = ? ), ?, ?, ?, ? )"
)
addStatement.setString( 1, uwid );
addStatement.setString( 2, course );
addStatement.setString( 3, term );
addStatement.setString( 4, distanceEd );
addStatement.setString( 5, extra );
result = addStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
session.setAttribute( "results", "<SUCCESS>Course added at " + Date() +
"</SUCCESS>" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != addStatement ) { addStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END addknown.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/addunknowncse.js
Index: addunknowncse.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START addunknown.js" )
lectureHrs = 3
labHrs = 0
tutorialHrs = 0
numWeeks = 12
courseWeight = 1
cseweight = 0
math = 0
sci = 0
engsci = 0
engdes = 0
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
term = request.getParameter( "term" )
dept = request.getParameter( "dept" )
number = request.getParameter( "number" )
letter = request.getParameter( "letter" )
name = request.getParameter( "name" )
lectures = request.getParameter( "lectures" )
labs = request.getParameter( "labs" )
tutorials = request.getParameter( "tutorials" )
weeks = request.getParameter( "weeks" )
csetype = request.getParameter( "csetype" )
weight = request.getParameter( "weight" )
distanceEd = request.getParameter( "distanceEd" )
extra = request.getParameter( "extra" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " dept [" + dept + "]" )
logger.debug( " number [" + number + "]" )
logger.debug( " letter [" + letter + "]" )
logger.debug( " name [" + name + "]" )
logger.debug( " lectures [" + lectures + "]" )
logger.debug( " labs [" + labs + "]" )
logger.debug( " tutorials [" + tutorials + "]" )
logger.debug( " weeks [" + weeks + "]" )
logger.debug( " math [" + math + "]" )
logger.debug( " sci [" + sci + "]" )
logger.debug( " engsci [" + engsci + "]" )
logger.debug( " engdes [" + engdes + "]" )
logger.debug( " csetype [" + csetype + "]" )
logger.debug( " weight [" + weight + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
logger.debug( " lectureHrs [" + lectureHrs + "]" )
logger.debug( " labHrs [" + labHrs + "]" )
logger.debug( " tutorialHrs [" + tutorialHrs + "]" )
logger.debug( " numWeeks [" + numWeeks + "]" )
logger.debug( " courseWeight [" + courseWeight + "]" )
logger.debug( " cseweight [" + cseweight + "]" )
// Cook things a little to make them palatable to the database
if (lectures != null) { lectureHrs = ( lectures + "" ) }
if (labs != null) { labHrs = ( labs + "" ) }
if (tutorials != null) { tutorialHrs = ( tutorials + "" ) }
if (weeks != null) { numWeeks = ( weeks + "" ) }
if (weight != null) { courseWeight = ( weight + "" ) }
// The "/1" is vital to ensure a numeric context
cseweight=(((lectureHrs/1)+(labHrs/2)+(tutorialHrs/2))*numWeeks*courseWeight)
if ( distanceEd == "on" ) { distanceEd = 2 } else { distanceEd = 1 }
if ( extra == "on" ) { extra = 2 } else { extra = 1 }
logger.debug( "Cooked" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " dept [" + dept + "]" )
logger.debug( " number [" + number + "]" )
logger.debug( " letter [" + letter + "]" )
logger.debug( " name [" + name + "]" )
logger.debug( " lectures [" + lectures + "]" )
logger.debug( " labs [" + labs + "]" )
logger.debug( " tutorials [" + tutorials + "]" )
logger.debug( " weeks [" + weeks + "]" )
logger.debug( " math [" + math + "]" )
logger.debug( " sci [" + sci + "]" )
logger.debug( " engsci [" + engsci + "]" )
logger.debug( " engdes [" + engdes + "]" )
logger.debug( " csetype [" + csetype + "]" )
logger.debug( " weight [" + weight + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
logger.debug( " lectureHrs [" + lectureHrs + "]" )
logger.debug( " labHrs [" + labHrs + "]" )
logger.debug( " tutorialHrs [" + tutorialHrs + "]" )
logger.debug( " numWeeks [" + numWeeks + "]" )
logger.debug( " courseWeight [" + courseWeight + "]" )
logger.debug( " cseweight [" + cseweight + "]" )
// Actually do the database work
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
addStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
addStatement = conn.prepareStatement(
"INSERT INTO otherCourses( ID, STUDENT, DEPARTMENT, COURSENUMBER,
COURSELETTER, COURSENAME, MATH, SCI, ENGSCI, ENGDES, CSETYPE, CSEWEIGHT, TERM_TAKEN,
DISTANCE_ED, COURSE_EXTRA) VALUES ( otherCourses_seq.nextval, ( SELECT id FROM
students WHERE uw_userid = ? ), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"
)
addStatement.setString( 1, uwid );
addStatement.setString( 2, dept );
addStatement.setString( 3, number );
addStatement.setString( 4, letter );
addStatement.setString( 5, name );
addStatement.setString( 6, math );
addStatement.setString( 7, sci );
addStatement.setString( 8, engsci );
addStatement.setString( 9, engdes );
addStatement.setString( 10, csetype );
addStatement.setString( 11, cseweight );
addStatement.setString( 12, term );
addStatement.setString( 13, distanceEd );
addStatement.setString( 14, extra );
result = addStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
session.setAttribute( "results", "<SUCCESS>Unknown Complementary Studies course
added at " + Date() + "</SUCCESS>" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != addStatement ) { addStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END addunknown.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/addunknownte.js
Index: addunknownte.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START addunknownte.js" )
csetype = ""
weight = 0
lectureHrs = 3
labHrs = 0
tutorialHrs = 0
numWeeks = 12
courseWeight = 0
mathWeight = 0
sciWeight = 0
engsciWeight = 0
engdesWeight = 0
mathWt = 0
sciWt = 0
engsciWt = 0
engdesWt = 0
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
term = request.getParameter( "term" )
dept = request.getParameter( "dept" )
number = request.getParameter( "number" )
letter = request.getParameter( "letter" )
name = request.getParameter( "name" )
lectures = request.getParameter( "lectures" )
labs = request.getParameter( "labs" )
tutorials = request.getParameter( "tutorials" )
weeks = request.getParameter( "weeks" )
math = request.getParameter( "math" )
sci = request.getParameter( "sci" )
engsci = request.getParameter( "engsci" )
engdes = request.getParameter( "engdes" )
distanceEd = request.getParameter( "distanceEd" )
extra = request.getParameter( "extra" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " dept [" + dept + "]" )
logger.debug( " number [" + number + "]" )
logger.debug( " letter [" + letter + "]" )
logger.debug( " name [" + name + "]" )
logger.debug( " lectures [" + lectures + "]" )
logger.debug( " labs [" + labs + "]" )
logger.debug( " tutorials [" + tutorials + "]" )
logger.debug( " weeks [" + weeks + "]" )
logger.debug( " math [" + math + "]" )
logger.debug( " sci [" + sci + "]" )
logger.debug( " engsci [" + engsci + "]" )
logger.debug( " engdes [" + engdes + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
logger.debug( " courseWeight [" + courseWeight + "]" )
logger.debug( " mathWt [" + mathWt + "]" )
logger.debug( " sciWt [" + sciWt + "]" )
logger.debug( " engsciWt [" + engsciWt + "]" )
logger.debug( " engdesWt [" + engdesWt + "]" )
// Cook things a little to make them palatable to the database
if (lectures != null) { lectureHrs = ( lectures + "" ) }
if (labs != null) { labHrs = ( labs + "" ) }
if (tutorials != null) { tutorialHrs = ( tutorials + "" ) }
if (weeks != null) { numWeeks = ( weeks + "" ) }
if (math != null) { mathWeight = ( math + "" ) }
if (sci != null) { sciWeight = ( sci + "" ) }
if (engsci != null) { engsciWeight = ( engsci + "" ) }
if (engdes != null) { engdesWeight = ( engdes + "" ) }
// The "/1" is vital to ensure a numeric context
courseWeight=(((lectureHrs/1)+(labHrs/2)+(tutorialHrs/2))*numWeeks)
mathWt = courseWeight*mathWeight
sciWt = courseWeight*sciWeight
engsciWt = courseWeight*engsciWeight
engdesWt = courseWeight*engdesWeight
if ( distanceEd == "on" ) { distanceEd = 2 } else { distanceEd = 1 }
if ( extra == "on" ) { extra = 2 } else { extra = 1 }
logger.debug( "Cooked" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " term [" + term + "]" )
logger.debug( " dept [" + dept + "]" )
logger.debug( " number [" + number + "]" )
logger.debug( " letter [" + letter + "]" )
logger.debug( " name [" + name + "]" )
logger.debug( " lectures [" + lectures + "]" )
logger.debug( " labs [" + labs + "]" )
logger.debug( " tutorials [" + tutorials + "]" )
logger.debug( " weeks [" + weeks + "]" )
logger.debug( " math [" + math + "]" )
logger.debug( " sci [" + sci + "]" )
logger.debug( " engsci [" + engsci + "]" )
logger.debug( " engdes [" + engdes + "]" )
logger.debug( " distanceEd [" + distanceEd + "]" )
logger.debug( " extra [" + extra + "]" )
logger.debug( " courseWeight [" + courseWeight + "]" )
logger.debug( " mathWt [" + mathWt + "]" )
logger.debug( " sciWt [" + sciWt + "]" )
logger.debug( " engsciWt [" + engsciWt + "]" )
logger.debug( " engdesWt [" + engdesWt + "]" )
// Actually do the database work
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
addStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
addStatement = conn.prepareStatement(
"INSERT INTO otherCourses( " +
"ID, STUDENT, DEPARTMENT, COURSENUMBER, COURSELETTER, COURSENAME, MATH,
SCI, ENGSCI, ENGDES, TERM_TAKEN, DISTANCE_ED, COURSE_EXTRA, CSEWEIGHT)" +
"VALUES ( " +
"otherCourses_seq.nextval, ( SELECT id FROM students WHERE uw_userid = ? ),
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)"
)
addStatement.setString( 1, uwid );
addStatement.setString( 2, dept );
addStatement.setString( 3, number );
addStatement.setString( 4, letter );
addStatement.setString( 5, name );
addStatement.setString( 6, mathWt );
addStatement.setString( 7, sciWt );
addStatement.setString( 8, engsciWt );
addStatement.setString( 9, engdesWt );
addStatement.setString( 10, term );
addStatement.setString( 11, distanceEd );
addStatement.setString( 12, extra );
result = addStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
session.setAttribute( "results", "<SUCCESS>Unknown Technical Elective added at "
+ Date() + "</SUCCESS>" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != addStatement ) { addStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END addunknownte.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/createuser.js
Index: createuser.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START createuser.js" )
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
queryStatement = null
insertStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
// Check that the student exists
queryStatement = conn.prepareStatement(
"select count(*) here from students where uw_userid=? "
)
queryStatement.setString( 1, uwid )
resultSet = queryStatement.executeQuery()
resultSet.next()
userExists = resultSet.getInt("here")
logger.debug( "Result #1 [" + userExists + "]" )
if (!userExists)
{
logger.debug( "User does not exist...creating and initializing" )
insertStatement = conn.prepareStatement(
"INSERT INTO students (id, uw_userid, name, uw_id, current_term)
values (students_seq.nextval, ?, '','', (SELECT id FROM terms WHERE description =
'1A'))"
)
insertStatement.setString( 1, uwid );
result = insertStatement.executeUpdate()
logger.debug( "Result #2 [" + result + "]" )
insertStatement = conn.prepareStatement(
"insert into studentNotes (student,note) values ( ( SELECT id FROM
students WHERE uw_userid = ? ),'')"
)
insertStatement.setString( 1, uwid );
result = insertStatement.executeUpdate()
logger.debug( "Result #3 [" + result + "]" )
insertStatement = conn.prepareStatement(
"INSERT INTO studentKnownCourseList (student, known_course,
term_taken, distance_ed, course_extra) ( SELECT ( SELECT id FROM students WHERE
uw_userid = ? ), course, term, '1', '1' FROM corecourses )"
)
insertStatement.setString( 1, uwid );
result = insertStatement.executeUpdate()
logger.debug( "Result #4 [" + result + "]" )
conn.commit()
}
else
{
logger.debug( "User exists" )
}
actionMap.put( "scriptaction-continue", "" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != queryStatement ) { queryStatement.close() }
if ( null != insertStatement ) { insertStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END createuser.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/deleteknown.js
Index: deleteknown.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START deleteknown.js" )
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
id = request.getParameter( "id" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " id [" + id + "]" )
// Actually do the database work
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
addStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
deleteStatement = conn.prepareStatement(
"DELETE FROM studentknowncourselist WHERE student = ( SELECT id FROM
students WHERE uw_userid = ? ) AND known_course = ?"
)
deleteStatement.setString( 1, uwid );
deleteStatement.setString( 2, id );
result = deleteStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
session.setAttribute( "results", "<SUCCESS>Course deleted at " + Date() +
"</SUCCESS>" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != addStatement ) { addStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END deleteknown.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/deleteunknown.js
Index: deleteunknown.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START deleteunknown.js" )
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
id = request.getParameter( "id" )
logger.debug( "Raw" )
logger.debug( " id [" + id + "]" )
// Actually do the database work
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
addStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
deleteStatement = conn.prepareStatement(
"DELETE FROM otherCourses WHERE id = ?"
)
deleteStatement.setString( 1, id );
result = deleteStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != addStatement ) { addStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END deleteunknown.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/login.js
Index: login.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START login.js" )
// Retrieve things from the request
// NOTE: they are all of type java.lang.String
uwid = request.getParameter( "uwid" )
password = request.getParameter( "password" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
//logger.debug( " password [" + password + "]" )
// Hack since either the guy we stole the code from or
// Bruce has made an implementation error
password = password + "\0\0\0\0\0\0\0\0\0"
//logger.debug( "Cooked" )
//logger.debug( " password [" + password + "]" )
try
{
session = request.getSession(true)
radius = new Packages.RadiusClient( "engine.uwaterloo.ca","1812","7sjU2xbHa31s2"
)
result = radius.Authenticate( uwid, password )
if ( radius.ACCESS_ACCEPT == result )
{
logger.debug( "Authentication succeeded" )
// Get (and optionally create) and populate the session
session.setAttribute( "uwid", uwid )
actionMap.put( "scriptaction-continue", "" )
}
else
{
logger.debug( "Authentication failed" )
session.setAttribute( "results", "<FAILURE>Incorrect User ID or
Password</FAILURE>" )
}
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
logger.debug( "END login.js" )
1.1 xml-cocoon2/webapp/docs/samples/script-action/updateinfo.js
Index: updateinfo.js
===================================================================
// Step 1 -- Retrieve helper "beans" from the BSF framework
scriptaction = bsf.lookupBean( "scriptaction" )
manager = bsf.lookupBean( "manager" )
request = bsf.lookupBean( "request" )
logger = bsf.lookupBean( "logger" )
actionMap = bsf.lookupBean( "actionMap" )
// Step 2 -- Perform the action
logger.debug( "START updateinfo.js" )
// Retrieve things from the session and request
// NOTE: they are all of type java.lang.String
session = request.getSession( false )
uwid = session.getAttribute( "uwid" )
studentname = request.getParameter( "studentname" )
studentnumber = request.getParameter( "studentnumber" )
current_term = request.getParameter( "current_term" )
note = request.getParameter( "note" )
logger.debug( "Raw" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " studentname [" + studentname + "]" )
logger.debug( " studentnumber [" + studentnumber + "]" )
logger.debug( " current_term [" + current_term + "]" )
logger.debug( " note [" + note + "]" )
// Cook things to make them more palatable to the database
note = ( note + "" ) // convert to a JS string
if (note == " ") { note="" }
if ( note.length > 255 )
{
note = note.substring( 0, 255 ); // take the leading 255 characters
}
logger.debug( "Cooked" )
logger.debug( " uwid [" + uwid + "]" )
logger.debug( " studentname [" + studentname + "]" )
logger.debug( " studentnumber [" + studentnumber + "]" )
logger.debug( " current_term [" + current_term + "]" )
logger.debug( " note [" + note + "]" )
// We have the choice of declaring things out here and making them explicitly
// null, or we have to use a different comparison in the "finally" block (defined?)
dbselector = null
datasource = null
conn = null
updateStatement = null
try
{
dbselector = manager.lookup( scriptaction.DB_CONNECTION )
datasource = dbselector.select( "ceabplanner" )
conn = datasource.getConnection()
updateStatement = conn.prepareStatement(
"UPDATE students SET name = ?, current_term = ?, uw_id = ? WHERE uw_userid =
? "
)
updateStatement.setString( 1, studentname );
updateStatement.setString( 2, current_term );
updateStatement.setString( 3, studentnumber );
updateStatement.setString( 4, uwid );
result = updateStatement.executeUpdate()
logger.debug( "Result #1 [" + result + "]" )
updateStatement = conn.prepareStatement(
"UPDATE studentnotes SET note = ? WHERE student = ( SELECT id FROM students
WHERE uw_userid = ? )"
)
updateStatement.setString( 1, note );
updateStatement.setString( 2, uwid );
result = updateStatement.executeUpdate()
logger.debug( "Result #2 [" + result + "]" )
conn.commit()
actionMap.put( "scriptaction-continue", "" )
session.setAttribute( "results", "<SUCCESS>Information Saved at " + Date() +
"</SUCCESS>" )
}
catch( ex )
{
logger.debug( "Caught Exception" )
logger.debug( " " + ex )
}
finally
{
if ( null != updateStatement ) { updateStatement.close() }
if ( null != conn ) { conn.close() }
if ( null != datasource ) { dbselector.release( datasource ) }
if ( null != dbselector ) { manager.release( dbselector ) }
}
logger.debug( "END updateinfo.js" )
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]