/*==========================================================================*\ | $Id: EditSubmissionProfilePage.java,v 1.2 2010/09/27 04:19:54 stedwar2 Exp $ |*-------------------------------------------------------------------------*| | Copyright (C) 2006-2010 Virginia Tech | | This file is part of Web-CAT. | | Web-CAT is free software; you can redistribute it and/or modify | it under the terms of the GNU Affero General Public License as published | by the Free Software Foundation; either version 3 of the License, or | (at your option) any later version. | | Web-CAT is distributed in the hope that it will be useful, | but WITHOUT ANY WARRANTY; without even the implied warranty of | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | GNU General Public License for more details. | | You should have received a copy of the GNU Affero General Public License | along with Web-CAT; if not, see <http://www.gnu.org/licenses/>. \*==========================================================================*/ package org.webcat.grader; import java.text.DecimalFormat; import java.text.Format; import com.webobjects.appserver.*; import org.apache.log4j.Logger; // ------------------------------------------------------------------------- /** * This class presents the list of current submission profiles that * are available for selection. * * @author Stephen Edwards * @author Last changed by $Author: stedwar2 $ * @version $Revision: 1.2 $ $Date: 2010/09/27 04:19:54 $ */ public class EditSubmissionProfilePage extends GraderComponent { //~ Constructors .......................................................... // ---------------------------------------------------------- /** * This is the default constructor * * @param context The page's context */ public EditSubmissionProfilePage( WOContext context ) { super( context ); } //~ KVC Attributes (must be public) ....................................... public SubmissionProfile submissionProfile; public Long availableTimeDelta; // null for no limit public Long deadTimeDelta; // null for no late submissions public Long earlyBonusUnitTime; public Long latePenaltyUnitTime; public SubmissionProfile.TimeUnit unit; public SubmissionProfile.TimeUnit availableTimeDeltaUnit; public SubmissionProfile.TimeUnit deadTimeDeltaUnit; public SubmissionProfile.TimeUnit earlyUnitTimeUnit; public SubmissionProfile.TimeUnit lateUnitTimeUnit; public double correctnessPoints; public String submissionMethod; //~ Methods ............................................................... // ---------------------------------------------------------- protected void beforeAppendToResponse( WOResponse response, WOContext context) { log.debug( "starting appendToResponse()" ); submissionProfile = prefs().assignmentOffering().assignment().submissionProfile(); correctnessPoints = submissionProfile.availablePoints() - submissionProfile.taPoints() - submissionProfile.toolPoints(); initializeTimeFields(); super.beforeAppendToResponse( response, context ); } // ---------------------------------------------------------- public void initializeTimeFields() { // First, fill availableTimeDelta data members if ( submissionProfile.availableTimeDeltaRaw() == null ) { availableTimeDelta = null; availableTimeDeltaUnit = SubmissionProfile.timeUnits[ 2 ]; // Days } else { long storedAvailableTimeDelta = submissionProfile.availableTimeDelta(); for ( int i = SubmissionProfile.timeUnits.length - 1; i >= 0; i-- ) { availableTimeDeltaUnit = SubmissionProfile.timeUnits[ i ]; if ( availableTimeDeltaUnit.isUnitFor( storedAvailableTimeDelta ) || i == 0 ) { availableTimeDelta = availableTimeDeltaUnit.unitsFromRaw( storedAvailableTimeDelta); break; } } } // Next, fill deadTimeDelta data members if ( submissionProfile.deadTimeDeltaRaw() == null ) { deadTimeDelta = new Long( 0L ); deadTimeDeltaUnit = SubmissionProfile.timeUnits[ 2 ]; // Days } else { long storedDeadTimeDelta = submissionProfile.deadTimeDelta(); for ( int i = SubmissionProfile.timeUnits.length - 1; i >= 0; i-- ) { deadTimeDeltaUnit = SubmissionProfile.timeUnits[ i ]; if ( deadTimeDeltaUnit.isUnitFor( storedDeadTimeDelta ) || i == 0 ) { deadTimeDelta = deadTimeDeltaUnit.unitsFromRaw( storedDeadTimeDelta ); break; } } } // Next, fill earlyBonusTimeUnit data members if ( submissionProfile.earlyBonusUnitTimeRaw() == null ) { earlyBonusUnitTime = 0L; earlyUnitTimeUnit = SubmissionProfile.timeUnits[ 2 ]; // Days } else { long storedEarlyBonusUnitTime = submissionProfile.earlyBonusUnitTime(); for ( int i = SubmissionProfile.timeUnits.length - 1; i >= 0; i-- ) { earlyUnitTimeUnit = SubmissionProfile.timeUnits[ i ]; if ( earlyUnitTimeUnit.isUnitFor( storedEarlyBonusUnitTime ) || i == 0 ) { earlyBonusUnitTime = earlyUnitTimeUnit.unitsFromRaw( storedEarlyBonusUnitTime ); break; } } } // Finally, fill latePenaltyTimeUnit data members if ( submissionProfile.latePenaltyUnitTimeRaw() == null ) { latePenaltyUnitTime = 0L; lateUnitTimeUnit = SubmissionProfile.timeUnits[ 2 ]; // Days } else { long storedLatePenaltyUnitTime = submissionProfile.latePenaltyUnitTime(); for ( int i = SubmissionProfile.timeUnits.length - 1; i >= 0; i-- ) { lateUnitTimeUnit = SubmissionProfile.timeUnits[ i ]; if ( lateUnitTimeUnit.isUnitFor( storedLatePenaltyUnitTime ) || i == 0 ) { latePenaltyUnitTime = lateUnitTimeUnit.unitsFromRaw( storedLatePenaltyUnitTime ); break; } } } } // ---------------------------------------------------------- public void saveTimeFields() { submissionProfile.setAvailableTimeDeltaRaw( availableTimeDeltaUnit.rawFromUnits(availableTimeDelta) ); submissionProfile.setDeadTimeDeltaRaw( deadTimeDeltaUnit.rawFromUnits(deadTimeDelta) ); submissionProfile.setEarlyBonusUnitTimeRaw( earlyUnitTimeUnit.rawFromUnits(earlyBonusUnitTime) ); submissionProfile.setLatePenaltyUnitTimeRaw( lateUnitTimeUnit.rawFromUnits(latePenaltyUnitTime) ); } // ---------------------------------------------------------- public WOComponent next() { applyLocalChanges(); return super.next(); } // ---------------------------------------------------------- public WOComponent cancel() { cancelLocalChanges(); return super.next(); } // ---------------------------------------------------------- public boolean applyLocalChanges() { saveTimeFields(); return super.applyLocalChanges(); } // ---------------------------------------------------------- public String maxFileUploadSize() { return SubmissionProfile.formatSizeValue( submissionProfile.maxFileUploadSizeRaw()); } // ---------------------------------------------------------- public String maxMaxFileUploadSize() { return SubmissionProfile.formatSizeValue( SubmissionProfile.maxMaxFileUploadSize()); } // ---------------------------------------------------------- public String defaultMaxFileUploadSize() { return SubmissionProfile.formatSizeValue( SubmissionProfile.defaultMaxFileUploadSize()); } // ---------------------------------------------------------- public void setMaxFileUploadSize( String valueAsString ) { Long value = null; if (valueAsString != null) { try { value = new Long( SubmissionProfile.parseFormattedLong(valueAsString)); } catch (NumberFormatException e) { // set error message if size is out of range error( "Unable to interpret \"" + valueAsString + "\" as a " + "number for the max upload size.", "formatMaxSize" ); } } clearMessage( "formatMaxSize" ); if ( value != null && value.longValue() > SubmissionProfile.maxMaxFileUploadSize() ) { // set error message if size is out of range error( "The maximum upload size allowed is " + SubmissionProfile.maxMaxFileUploadSize() + ". Contact the administrator for higher limits.", "tooLarge" ); } else { clearMessage( "tooLarge" ); } // This will automatically restrict to the max value anyway submissionProfile.setMaxFileUploadSizeRaw(value); } // ---------------------------------------------------------- /* (non-Javadoc) * @see com.webobjects.appserver.WOComponent#takeValuesFromRequest(com.webobjects.appserver.WORequest, com.webobjects.appserver.WOContext) */ public void takeValuesFromRequest( WORequest arg0, WOContext arg1 ) { super.takeValuesFromRequest( arg0, arg1 ); log.debug( "taking values" ); if ( submissionProfile != null ) { submissionProfile.setAvailablePoints( correctnessPoints + submissionProfile.taPoints() + submissionProfile.toolPoints() ); } } // ---------------------------------------------------------- public String inlineJavaScript() { return INLINE_JAVASCRIPT; } // ---------------------------------------------------------- public Format doubleFormatter() { return doubleFormatter; } //~ Instance/static variables ............................................. private static final String INLINE_JAVASCRIPT = "<script type=\"text/javascript\">\n" + "<!-- Begin\n" + "function startCalc(){\n" + " interval = setInterval(\"calc()\",1);\n" + "}\n" + "function calc(){\n" + " document.WizardForm.total.value =\n" + " ( document.WizardForm.taPoints.value * 1 )\n" + " + ( document.WizardForm.toolPoints.value * 1 )\n" + " + ( document.WizardForm.correctnessPoints.value * 1 );\n" + "}\n" + "function stopCalc(){\n" + " clearInterval(interval);\n" + "}\n" + "// End -->\n" + "</script>"; private static final Format doubleFormatter = new DecimalFormat("0.######"); static Logger log = Logger.getLogger( EditSubmissionProfilePage.class ); }