All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.tool.assessment.facade.QuestionPoolFacade Maven / Gradle / Ivy

The newest version!
/**********************************************************************************
 * $URL$
 * $Id$
 ***********************************************************************************
 *
 * Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 The Sakai Foundation
 *
 * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.tool.assessment.facade;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Set;

import lombok.extern.slf4j.Slf4j;
import org.osid.shared.Id;
import org.osid.shared.SharedException;

import org.sakaiproject.tool.assessment.business.questionpool.QuestionPool;
import org.sakaiproject.tool.assessment.business.questionpool.QuestionPoolException;
import org.sakaiproject.tool.assessment.data.dao.questionpool.QuestionPoolData;
import org.sakaiproject.tool.assessment.data.ifc.questionpool.QuestionPoolDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.questionpool.QuestionPoolItemIfc;
import org.sakaiproject.tool.assessment.data.ifc.shared.AgentDataIfc;
import org.sakaiproject.tool.assessment.data.ifc.shared.TypeIfc;
import org.sakaiproject.tool.assessment.osid.questionpool.impl.QuestionPoolImpl;
import org.sakaiproject.tool.assessment.services.PersistenceService;

/**
 * @author Ed Smiley 
 */
@Slf4j
public class QuestionPoolFacade
    implements java.io.Serializable, QuestionPoolDataIfc, Cloneable
{
  private static final long serialVersionUID = 7526471155622776147L;

  public static final Long ACCESS_DENIED =  Long.valueOf(30);
  public static final Long READ_ONLY = Long.valueOf(31);
  public static final Long READ_COPY = Long.valueOf(32);
  public static final Long READ_WRITE = Long.valueOf(33);
  public static final Long ADMIN = Long.valueOf(34);
  public static final Long DEFAULT_TYPEID = Long.valueOf(0);
  public static final Long DEFAULT_INTELLECTUAL_PROPERTYID = Long.valueOf(0);
  public static final Long ROOT_POOL = Long.valueOf(0);

  private QuestionPool questionPool;
  // We have 2 sets of properties:
  // #1) properties according to
  // org.sakaiproject.tool.assessment.business.entity.questionpool.QuestionPool.
  private String displayName;
  private String description;
  private QuestionPoolDataIfc data;
  private Id id;
  private TypeIfc questionPoolType;
  private Id parentId;
  // remove parentPool and the code to set it. It isn't actually
  // used, and building it involves an unnecessary database
  // transaction.
  //  private QuestionPoolFacade parentPool;
  // #2) set of properties of QuestionPoolDataIfc
  private Long questionPoolId;
  private Long parentPoolId;
  private String ownerId;
  private AgentDataIfc owner;
  private String title; // same as displayName
  private Date dateCreated;
  private Date lastModified;
  private String lastModifiedById;
  private AgentDataIfc lastModifiedBy;
  private Long accessTypeId;
  private TypeIfc accessType;
  private String objectives;
  private String keywords;
  private String rubric;
  private Long typeId;
  private TypeIfc type;
  private Long intellectualPropertyId;
  private String organizationName;
  private Set questionPoolItems;
  private Collection items = new ArrayList();
  private Long subPoolSize;

  /**
   * Creates a new QuestionPoolFacade object.
   */
  public QuestionPoolFacade(){
    // need to hook QuestionPoolFacade.data to QuestionPoolData,
    // our POJO for Hibernate persistence
    this.data = new QuestionPoolData();
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); //<-- place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
 }

  /**
   * Constructor.
   * Each question pool has a unique Id object and owns the Id of
   * its parent. See getId(), getParentId()
   *
   * @param newId the id
   * @param newParentId the id of its parent
   */
  public QuestionPoolFacade(Id id, Id parentId)
  {
    this.id = id;
    this.parentId = parentId;
    this.data = new QuestionPoolData();
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); //<-- place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
      setQuestionPoolId(new Long(id.getIdString()));
      setParentPoolId(new Long(parentId.getIdString()));
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    catch (SharedException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    catch (NumberFormatException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
  }

  /**
   * Constructor.
   * Each question pool has a unique Id object and owns the Id of
   * its parent. See getId(), getParentId()
   *
   * @param newId the id
   * @param newParentId the id of its parent
   */
  public QuestionPoolFacade(Long id, Long parentId)
  {
    QuestionPoolFacadeQueriesAPI questionPoolFacadeQueries =
      PersistenceService.getInstance().getQuestionPoolFacadeQueries();
    this.id = questionPoolFacadeQueries.getQuestionPoolId(id);
    this.parentId = questionPoolFacadeQueries.getQuestionPoolId(parentId);
    this.data = new QuestionPoolData();
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); //<-- place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    setQuestionPoolId(id);
    setParentPoolId(parentId);
  }

  public QuestionPoolFacade(QuestionPoolDataIfc data){
    this.data = data;
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); // place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    this.id = getId();
    this.displayName = getTitle();
    this.description = getDescription();
    this.questionPoolType = getType();
    this.ownerId = getOwnerId();
    this.owner = getOwner();
    this.dateCreated = getDateCreated();
    this.lastModified = getLastModified();
    this.lastModifiedBy = getLastModifiedBy();
    this.lastModifiedById = getLastModifiedById();
    this.accessTypeId = getAccessTypeId();
    this.accessType = getAccessType();
    this.objectives = getObjectives();
    this.keywords = getKeywords();
    this.rubric = getRubric();
    this.typeId = getTypeId();
    this.type = getType();
    this.intellectualPropertyId = getIntellectualPropertyId();
    this.organizationName = getOrganizationName();
    this.questionPoolItems = getQuestionPoolItems();
    this.items = getQuestions();
    try {
    	// parentPool isn't actually need
    	// this.parentPool = findParentPool();
    	// if (this.parentPool != null)  // => ROOT POOL
        this.parentId = getParentId();
    }
    catch (Exception ex1) {
      throw new DataFacadeException(ex1.getMessage());
    }
  }

  /**
   * IMPORTANT: this constructor do not have "data", this constructor is
   * merely used for holding questionPoolId, Title
   * for displaying purpose (used by the pulldown list in authoring).
   * This constructor does not persist data (which it has none) to DB
   * @param id
   * @param title
   */
    public QuestionPoolFacade(Long id, String title) {
    this.questionPoolId = id;
    this.title= title;
    this.data = new QuestionPoolData();
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); //<-- place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
      setQuestionPoolId(id);
      setTitle(title);
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }

  }

 /**
   * IMPORTANT: this constructor do not have "data", this constructor is
   * merely used for holding questionPoolId, Title, parentId
   * for validation question pool
   * This constructor does not persist data (which it has none) to DB
   * @param id
   * @param title
   * @param parentid
   */
    public QuestionPoolFacade(Long id, String title, Long parentId) {
    this.questionPoolId = id;
    this.title= title;
    this.parentPoolId=parentId;
    this.data = new QuestionPoolData();
    QuestionPoolImpl questionPoolImpl = new QuestionPoolImpl(); //<-- place holder
    questionPool = (QuestionPool)questionPoolImpl;
    try {
      questionPool.updateData(this.data);
      setParentPoolId(parentId);
      setQuestionPoolId(id);
      setTitle(title);
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }

  }




  /**
   * Get the Id for this QuestionPoolFacade.
   * @return org.osid.shared.Id
   */
  org.osid.shared.Id getId(){
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    QuestionPoolFacadeQueriesAPI questionPoolFacadeQueries =
      PersistenceService.getInstance().getQuestionPoolFacadeQueries();
    return questionPoolFacadeQueries.getQuestionPoolId(this.data.getQuestionPoolId());
  }

  /**
   *
   * @return the display name for the question pool
   * @throws DataFacadeException
   */
  public String getDisplayName()
    throws DataFacadeException
  {
    return getTitle();
  }

  /**
   *
   * @param pdisplayName the display name for the question pool
   * @throws DataFacadeException
   */
  public void updateDisplayName(String displayName)
    throws DataFacadeException
  {
    setDisplayName(displayName);
  }

  private void setDisplayName(String displayName)
    throws DataFacadeException
  {
    this.displayName = displayName;
    this.data.setTitle(displayName);
  }

  public String getDescription()
  {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getDescription();
  }

  /**
   *
   * @param pdescription the description for the question pool
   * @throws DataFacadeException
   */
  public void updateDescription(String description)
    throws DataFacadeException
  {
    setDescription(description);
  }

  public void setDescription(String description)
  {
    this.description = description;
    this.data.setDescription(description);
  }

  /**
   * Get the data for this QuestionPoolFacade.
   * @return QuestionPoolDataIfc
   */
  public QuestionPoolDataIfc getData(){
    return this.data;
  }

  /**
   * Call setDate() to update data in ItemFacade
   * @param data
   */
  public void updateData(QuestionPoolDataIfc data) {
      setData(data);
  }

  /**
   * Set data for ItemFacade
   * @param data
   */
  public void setData(QuestionPoolDataIfc data) {
      this.data = data;
  }

  /**
   *
   * @return the type of pool for the question pool
   * @throws DataFacadeException
   */
  public TypeIfc getQuestionPoolType()
    throws DataFacadeException
  {
    return getType();
  }

  public void updateQuestionPoolType(TypeIfc questionPoolType)
    throws DataFacadeException
  {
    setQuestionPoolType(questionPoolType);
  }
  private void setQuestionPoolType(TypeIfc questionPoolType)
    throws DataFacadeException
  {
    this.questionPoolType = questionPoolType;
    setType(questionPoolType);
  }

  /**
   *
   * @return the id object for the question pool
   * @throws QuestionPoolException
   */
  public Id getParentId()
    throws DataFacadeException
  {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
      if (this.data != null){
        QuestionPoolFacadeQueriesAPI questionPoolFacadeQueries =
          PersistenceService.getInstance().getQuestionPoolFacadeQueries();
        return questionPoolFacadeQueries.getQuestionPoolId(this.data.getParentPoolId());
      }
      else  // implies ROOT_POOL
        return null;
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
  }

  /**
   *
   * Sets the parent id object for the question pool
   * @throws DataFacadeException
   */
  public void setParentId(Id parentId)
    throws DataFacadeException
  {
    this.parentId = parentId;
    try {
      setParentPoolId(new Long(parentId.getIdString()));
    }
    catch (SharedException ex) {
      log.warn(ex.getMessage());
    }
    catch (NumberFormatException ex) {
      log.warn(ex.getMessage());
    }
  }

  // no longer needed
  /*
  public QuestionPoolFacade getParentPool()
    throws DataFacadeException
  {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
      if (this.data != null){
        QuestionPoolFacadeQueriesAPI questionPoolFacadeQueries = PersistenceService.getInstance().getQuestionPoolFacadeQueries();
        return questionPoolFacadeQueries.getPoolById(this.data.getParentPoolId());
      }
      else // implies ROOT_ROOL
        return null;
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
  }
  */

  // the following methods implements
  // org.sakaiproject.tool.assessment.ifc.questionpool.QuestionPoolDataIfc
  public Long getQuestionPoolId() throws DataFacadeException {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getQuestionPoolId();
  }

  /**
   * Set itemId for ItemFacade
   * @param itemId
   */
  public void setQuestionPoolId(Long questionPoolId) {
    this.questionPoolId = questionPoolId;
    this.data.setQuestionPoolId(questionPoolId);
  }


  public String getTitle() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getTitle();
  }

  public void setTitle(String title) {
    this.title = title;
    this.data.setTitle(title);
  }

  public Long getParentPoolId() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    if (this.data != null )
      return this.data.getParentPoolId();
    else  // implies ROOT_POOL
      return null;
  }

  public void setParentPoolId(Long parentPoolId) {
    this.parentPoolId = parentPoolId;
    this.data.setParentPoolId(parentPoolId);
  }

  public String getOwnerId() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getOwnerId();
  }

  public void setOwnerId(String ownerId) {
    this.ownerId = ownerId;
    this.data.setOwnerId(ownerId);
  }

  public AgentDataIfc getOwner() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getOwner();
  }

  public void setOwner(AgentDataIfc owner) {
    this.owner = owner;
    this.data.setOwner(owner);
  }

  public Date getDateCreated() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getDateCreated();
  }

  public void setDateCreated(Date dateCreated) {
    this.dateCreated = dateCreated;
    this.data.setDateCreated(dateCreated);
  }

  public Date getLastModified() {
    //this.lastModified = lastModified;
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getLastModified();
  }

  public void setLastModified(Date lastModified) {
    this.lastModified = lastModified;
    this.data.setLastModified(lastModified);
  }

  public String getLastModifiedById() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getLastModifiedById();
  }

  public void setLastModifiedById(String lastModifiedById) {
    this.lastModifiedById = lastModifiedById;
    this.data.setLastModifiedById(lastModifiedById);
  }

  public AgentDataIfc getLastModifiedBy() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getLastModifiedBy();
  }

  public void setLastModifiedBy(AgentDataIfc lastModifiedBy) {
    this.lastModifiedBy = lastModifiedBy;
    this.data.setLastModifiedBy(lastModifiedBy);
  }

  public Long getAccessTypeId() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getAccessTypeId();
  }

  public void setAccessTypeId(Long accessTypeId) {
    this.accessTypeId = accessTypeId;
    this.data.setAccessTypeId(accessTypeId);
  }

  public TypeIfc getAccessType() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getAccessType();
  }

  public void setAccessType(TypeIfc accessType) {
    this.accessType = accessType;
    this.data.setAccessType(accessType);
  }

  public String getObjectives() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getObjectives();
  }

  public void setObjectives(String objectives) {
    this.objectives = objectives;
    this.data.setObjectives(objectives);
  }

  public String getKeywords() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getKeywords();
  }

  public void setKeywords(String keywords) {
    this.keywords = keywords;
    this.data.setKeywords(keywords);
  }

  public String getRubric() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getRubric();
  }

  public void setRubric(String rubric) {
    this.rubric = rubric;
    this.data.setRubric(rubric);
  }

  public Long getTypeId() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getTypeId();
  }

  public void setTypeId(Long typeId) {
    this.typeId = typeId;
    this.data.setTypeId(typeId);
  }

  public TypeIfc getType() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getType();
  }

  public void setType(TypeIfc type) {
    this.type = type;
    this.data.setType(type);
  }

  public Long getIntellectualPropertyId() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getIntellectualPropertyId();
  }

  public void setIntellectualPropertyId(Long intellectualPropertyId) {
    this.intellectualPropertyId = intellectualPropertyId;
    this.data.setIntellectualPropertyId(intellectualPropertyId);
  }

  public String getOrganizationName() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getOrganizationName();
  }

  public void setOrganizationName(String organizationName) {
    this.organizationName = organizationName;
    this.data.setOrganizationName(organizationName);
  }

  /**
   * This is a list of association between an item (question) and a pool.
   * This does not represent a list of items. use getQuestions()
   * to get a list of items
   */
  public Set getQuestionPoolItems() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getQuestionPoolItems();
  }

  /*
  public void setQuestionPoolItems(Set questionPoolItems) {
    this.questionPoolItems = questionPoolItems;
    this.data.setQuestions(questionPoolItems);
    this.data.setQuestionPoolItems(questionPoolItems);
  }
  */
  
  public void setQuestionPoolItems(Set questionPoolItems) {
	this.questionPoolItems = questionPoolItems;
	this.data.setQuestionPoolItems(questionPoolItems);
  }

  public void addQuestionPoolItem(QuestionPoolItemIfc queestionPoolItem){
    Set questionPoolItemSet = getQuestionPoolItems();
    questionPoolItemSet.add(queestionPoolItem);
    setQuestionPoolItems(questionPoolItemSet);
  }

  public Collection getQuestions() {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getQuestions();
  }

  public void setQuestions(Collection items) {
    this.items = items;
    this.data.setQuestions(items);
  }

  public Integer getQuestionSize()
  {
    return  Integer.valueOf(items.size());
  }

  public void setSubPoolSize(Long subPoolSize)
  {
    this.subPoolSize = subPoolSize;
    this.data.setSubPoolSize(subPoolSize);
  }

  public Long getSubPoolSize()
  {
    try {
      this.data = (QuestionPoolDataIfc) questionPool.getData();
    }
    catch (QuestionPoolException ex) {
      throw new DataFacadeException(ex.getMessage());
    }
    return this.data.getSubPoolSize();
  }

  /* this was not used. 
  private ItemIteratorFacade getItemIterator() {
    return new ItemIteratorFacade(items);
  }
  */

  public Object clone(){
    QuestionPoolFacade newPool = new QuestionPoolFacade((QuestionPoolData)data.clone());
    return newPool;
  }

  
  public String getOwnerDisplayName() {
    String ownerIdString = this.getOwnerId();
    String ownerDisplayName= AgentFacade.getDisplayName(ownerIdString);
    return ownerDisplayName;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy