package com.dragonsoft.tryapp.common;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

public class ActivityObj implements Serializable {

    /*---- NON-OPTIONAL FIELDS ----*/

    /**
     * Unique identifier of this activity.
     */
    private String strActivityID;

    private String strActivityName;

    private String strActivityDesc;

    /**
     * Inputed as a string, so passed as a string to EJB layer.
     */
    private List strRequiredFiles;

    /**
     * Inputed as a string, so passed as a string to EJB layer.
     */
    private List strOptionalFiles;

    /**
     * Inputed as a string, so passed as a string to EJB layer.
     */
    private List strIgnoredFiles;

    // more fields needed - dates, etc - why is this in assignment?

    private boolean activityIsActive;

    /*---- OPTIONAL FIELDS (none at the moment) ----*/

    /**
     * The ID of the assignment that this activity is part of.
     */
    private String strAssignmentID;

    public ActivityObj(String activityID, String activityName,
            String activityDesc, String requiredFiles, String optionalFiles,
            String ignoredFiles) {

        strActivityID = activityID;
        strActivityName = activityName;
        strActivityDesc = activityDesc;

        String[] strRequiredFilesArray = requiredFiles.split(",");
        strRequiredFiles = new LinkedList();
        for (int rf = 0; rf < strRequiredFilesArray.length; rf++) {
            strRequiredFiles.add(strRequiredFilesArray[rf].trim());
        }

        String[] strOptionalFilesArray = optionalFiles.split(",");
        strOptionalFiles = new LinkedList();
        for (int of = 0; of < strOptionalFilesArray.length; of++) {
            strOptionalFiles.add(strOptionalFilesArray[of].trim());
        }

        String[] strIgnoredFilesArray = ignoredFiles.split(",");
        strIgnoredFiles = new LinkedList();
        for (int gf = 0; gf < strIgnoredFilesArray.length; gf++) {
            strIgnoredFiles.add(strIgnoredFilesArray[gf].trim());
        }

        // assume activity is active unless specified
        activityIsActive = true;

        strAssignmentID = null;
    }

    public String getActivityID() {
        return (strActivityID);
    }

    public void setActivityName(String activityName) {
        strActivityName = activityName;
    }

    public String getActivityName() {
        return (strActivityName);
    }

    public void setActivityDesc(String activityDesc) {
        strActivityDesc = activityDesc;
    }

    public String getActivityDesc() {
        return (strActivityDesc);
    }

    public String[] getAllRequiredFiles() {
        return (convert2StringArray(strRequiredFiles));
    }

    public String getRequiredFiles() {

        return (convert2String(getAllRequiredFiles()));
    }

    public String[] getAllOptionalFiles() {
        return (convert2StringArray(this.strOptionalFiles));
    }

    public String getOptionalFiles() {
        return (convert2String(getAllOptionalFiles()));
    }

    public String[] getAllIgnoredFiles() {
        return (convert2StringArray(strIgnoredFiles));
    }

    public String getIgnoredFiles() {
        return (convert2String(getAllIgnoredFiles()));
    }

    public boolean isActive() {
        return (activityIsActive);
    }

    public void setAssignmentID(String assignmentID) {
        strAssignmentID = assignmentID;
    }

    public String getAssignmentID() {
        return (strAssignmentID);
    }

    private String[] convert2StringArray(List list) {
        String[] rtVal = new String[list.size()];
        list.toArray(rtVal);

        return (rtVal);
    }

    private String convert2String(String[] str) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < buffer.length() - 1; i++) {
            buffer.append(str[i]);
            buffer.append(",");
        }
        if (str.length > 0) {
            buffer.append(str[str.length - 1]);
        }

        return (buffer.toString());
    }

    public String toString() {

        StringBuffer buffer = new StringBuffer();
        buffer.append("ActivityName = ").append(strActivityName);
        return (buffer.toString());
    }

    public void addRequiredFile(String strRequiredFile) {
        this.strRequiredFiles.add(strRequiredFile);
    }

    public void addOptionalFile(String strOptionalFile) {
        this.strOptionalFiles.add(strOptionalFile);
    }

    public void addIgnoredFile(String strIgnoredFile) {
        this.strIgnoredFiles.add(strIgnoredFile);
    }

    public boolean equals(Object o) {

        try {
            ActivityObj act = (ActivityObj) o;
            return (this.strActivityID.equals(act.strActivityID));
        } catch (Exception e) {
            return (false);
        }
    }

} // ActivityObj