/* ======================================================================
   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.sqldatabase.*;
import org.bodington.database.*;
import org.bodington.server.BuildingServerException;
import org.bodington.text.BigString;

public class PigeonHoleEntry 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 upload.",
		"Permitted to change.",
		"Ready to process.",
		"Processed/processing.",
		"Final mark assigned.",
		"Mark/feedback released."
		};

	
	private PrimaryKey pigeonhole_entry_id;
	private PrimaryKey resource_id;
	private PrimaryKey user_id;
	private PrimaryKey marker_user_id;
	private PrimaryKey uploaded_file_id;
	private PrimaryKey feedback_big_string_id;
	private PrimaryKey comments_big_string_id;
	private int status;
	private Integer mark;
	private Integer adjusted_mark;
	private java.sql.Timestamp when_saved;
	private java.sql.Timestamp when_marked;
	

	
	public static PigeonHoleEntry findPigeonHoleEntry( PrimaryKey key )
	    throws BuildingServerException
	    {
	    return (PigeonHoleEntry)findPersistentObject( key, "org.bodington.server.assessment.PigeonHoleEntry" );
	    }
	
	public static PigeonHoleEntry findPigeonHoleEntry( String where )
	    throws BuildingServerException
	    {
	    return (PigeonHoleEntry)findPersistentObject( where, "org.bodington.assessment.PigeonHoleEntry" );
	    }
	
	public static Enumeration findPigeonHoleEntries( String where )
	    throws BuildingServerException
	    {
	    return findPersistentObjects( where, "org.bodington.assessment.PigeonHoleEntry" );
	    }
	
	public static Enumeration findPigeonHoleEntries( String where, String order )
	    throws BuildingServerException
	    {
	    return findPersistentObjects( where, order, "org.bodington.assessment.PigeonHoleEntry" );
	    }
	
	
    public PrimaryKey getPrimaryKey()
    	{
        return getPigeonHoleEntryId();
    	}

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


	public PrimaryKey getPigeonHoleEntryId()
		{
		return pigeonhole_entry_id;
		}
		
	public void setPigeonHoleEntryId( PrimaryKey id )
		{
		pigeonhole_entry_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 PrimaryKey getUploadedFileId()
		{
		return uploaded_file_id;
		}
		
	public void setUploadedFileId( PrimaryKey id )
		{
		uploaded_file_id = id;
		setUnsaved();
		}


	public int getStatus()
		{
		return status;
		}
		
	public void setStatus( int i )
		{
		status = 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();
		}
		
		
	}
