/* ======================================================================
   Parts Copyright 2006 University of Leeds, Oxford University, University of the Highlands and Islands.

   Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

====================================================================== */

package org.bodington.assessment;

import java.sql.Timestamp;
import java.util.Enumeration;

import org.bodington.server.BuildingServerException;
import org.bodington.sqldatabase.*;
import org.bodington.database.*;
import org.bodington.text.BigString;

public class TextQResult extends org.bodington.sqldatabase.SqlPersistentObject
	{
	public static final int STATUS_UPLOAD_BY_DATE		=0;
	public static final int STATUS_UPLOAD_CHANGEABLE	=1;
	public static final int STATUS_UPLOAD_LOCKED		=2;
	public static final int STATUS_UPLOAD_PROCESSED		=3;
	public static final int STATUS_UPLOAD_MARKED		=4;
	public static final int STATUS_UPLOAD_RETURNED		=5;
	public static final int STATUS_MAX					=5;
	
	public static final String[] status_message=
		{
		"Date dependent submission.",
		"Permitted to change.",
		"Ready to process.",
		"Processed/processing.",
		"Final mark assigned.",
		"Mark/feedback released."
		};


	private PrimaryKey textq_result_id;
	private PrimaryKey resource_id;
	private PrimaryKey user_id;
	private PrimaryKey marker_user_id;
	private PrimaryKey feedback_big_string_id;
	private PrimaryKey comments_big_string_id;
	private int status;
	private Integer general_mark;
	private Integer mark;
	private Integer adjusted_mark;
	private java.sql.Timestamp when_saved;
	private java.sql.Timestamp when_marked;
	
	
	public static TextQResult findTextQResult( PrimaryKey key )
	    throws BuildingServerException
	    {
	    return (TextQResult)findPersistentObject( key, "org.bodington.server.assessment.TextQResult" );
	    }
	
	public static TextQResult findTextQResult( String where )
	    throws BuildingServerException
	    {
	    return (TextQResult)findPersistentObject( where, "org.bodington.assessment.TextQResult" );
	    }
	
	public static Enumeration findTextQResults( String where )
	    throws BuildingServerException
	    {
	    return findPersistentObjects( where, "org.bodington.assessment.TextQResult" );
	    }
	
	public static Enumeration findTextQResults( String where, String order )
	    throws BuildingServerException
	    {
	    return findPersistentObjects( where, order, "org.bodington.assessment.TextQResult" );
	    }
	
	
	
    public PrimaryKey getPrimaryKey()
    	{
        return getTextQResultId();
    	}

    public void setPrimaryKey(PrimaryKey key)
    	{
    	setTextQResultId( key );
    	}


	public PrimaryKey getTextQResultId()
		{
		return textq_result_id;
		}
		
	public void setTextQResultId( PrimaryKey id )
		{
		textq_result_id = id;
		}
		
	public PrimaryKey getResourceId()
		{
		return resource_id;
		}
		
	public void setResourceId( PrimaryKey id )
		{
		resource_id = id;
		setUnsaved();
		}


	public PrimaryKey getUserId()
		{
		return user_id;
		}
		
	public void setUserId( PrimaryKey id )
		{
		user_id = id;
		setUnsaved();
		}


	public PrimaryKey getMarkerUserId()
		{
		return marker_user_id;
		}
		
	public void setMarkerUserId( PrimaryKey id )
		{
		marker_user_id = id;
		setUnsaved();
		}

	public int getStatus()
		{
		return status;
		}
		
	public void setStatus( int i )
		{
		status = i;
		setUnsaved();
		}
		

	public Integer getGeneralMark()
		{
		return general_mark;
		}
		
	public void setGeneralMark( Integer i )
		{
		general_mark = i;
		setUnsaved();
		}
		
	public Integer getMark()
		{
		return mark;
		}
		
	public void setMark( Integer i )
		{
		mark = i;
		setUnsaved();
		}
		

	public Integer getAdjustedMark()
		{
		return adjusted_mark;
		}
		
	public void setAdjustedMark( Integer i )
		{
		adjusted_mark = i;
		setUnsaved();
		}
		
	public PrimaryKey getFeedbackBigStringId()
		{
		return feedback_big_string_id;
		}
		
	public void setFeedbackBigStringId( PrimaryKey s )
		{
		feedback_big_string_id = s;
		setUnsaved();
		}
		
	public String getFeedback()
		throws BuildingServerException
		{
		if ( feedback_big_string_id == null )
			return null;
		BigString bstr = BigString.findBigString( feedback_big_string_id );
		if ( bstr == null )
			return null;
		return bstr.getString();
		}
		
	public void setFeedback( String s )
		throws BuildingServerException
		{
		BigString bstr=null;
		if ( feedback_big_string_id != null )
			bstr = BigString.findBigString( feedback_big_string_id );
		if ( bstr == null )
			{
			bstr = new BigString();
			bstr.setString( s );
			bstr.save();
			feedback_big_string_id = bstr.getBigStringId();
			setUnsaved();
			return;
			}

		bstr.setString( s );
		bstr.save();
		}
	
		
	public PrimaryKey getCommentsBigStringId()
		{
		return comments_big_string_id;
		}
		
	public void setCommentsBigStringId( PrimaryKey s )
		{
		comments_big_string_id = s;
		setUnsaved();
		}
		
	public String getComments()
		throws BuildingServerException
		{
		if ( comments_big_string_id == null )
			return null;
		BigString bstr = BigString.findBigString( comments_big_string_id );
		if ( bstr == null )
			return null;
		return bstr.getString();
		}
		
	public void setComments( String s )
		throws BuildingServerException
		{
		BigString bstr=null;
		if ( comments_big_string_id != null )
			bstr = BigString.findBigString( comments_big_string_id );
		if ( bstr == null )
			{
			bstr = new BigString();
			bstr.setString( s );
			bstr.save();
			comments_big_string_id = bstr.getBigStringId();
			setUnsaved();
			return;
			}

		bstr.setString( s );
		bstr.save();
		}
	
		

		
		
	public Timestamp getWhenSaved()
		{
		return when_saved;
		}
		
	public void setWhenSaved( Timestamp t )
		{
		when_saved = t;
		setUnsaved();
		}
		
	public Timestamp getWhenMarked()
		{
		return when_marked;
		}
		
	public void setWhenMarked( Timestamp t )
		{
		when_marked = t;
		setUnsaved();
		}
		
		
	}
