in.andres.kandroid.kanboard.KanboardProject.java Source code

Java tutorial

Introduction

Here is the source code for in.andres.kandroid.kanboard.KanboardProject.java

Source

/*
 * Copyright 2017 Thomas Andres
 *
 * This file is part of Kandroid.
 *
 * Kandroid is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Kandroid 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 General Public License
 * along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 */

package in.andres.kandroid.kanboard;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;

@SuppressWarnings("unused")
public class KanboardProject implements Comparable<KanboardProject>, Serializable {
    private int Id;
    private String Name;
    private int OwnerId;
    private String Description;
    private String Identifier;
    private String Token;
    private boolean IsActive;
    private boolean IsPublic;
    private boolean IsPrivate;
    private boolean IsEverybodyAllowed;
    private Date StartDate;
    private Date EndDate;
    private Date LastModified;
    private int NumberActiveTasks;
    private URL ListURL;
    private URL BoardURL;
    private URL CalendarURL;
    private List<KanboardColumn> Columns;
    private List<KanboardCategory> Categories;
    private List<KanboardSwimlane> Swimlanes;
    private List<KanboardTask> ActiveTasks;
    private Dictionary<Integer, Dictionary<Integer, List<KanboardTask>>> GroupedActiveTasks;
    private List<KanboardTask> InactiveTasks;
    private Dictionary<Integer, List<KanboardTask>> GroupedInactiveTasks;
    private List<KanboardTask> OverdueTasks;
    private Dictionary<Integer, List<KanboardTask>> GroupedOverdueTasks;
    private Dictionary<Integer, KanboardTask> TaskHashtable;
    private Dictionary<Integer, KanboardCategory> CategoryHashtable;
    private Dictionary<Integer, String> ProjectUsers;
    // TODO: add priority values to project details

    public KanboardProject(@NonNull JSONObject project) throws MalformedURLException {
        this(project, null, null, null, null, null, null, null);
    }

    public KanboardProject(@NonNull JSONObject project, @Nullable JSONArray columns, @Nullable JSONArray swimlanes,
            @Nullable JSONArray categories, @Nullable JSONArray activetasks, @Nullable JSONArray inactivetasks,
            @Nullable JSONArray overduetasks, @Nullable JSONObject projectusers) throws MalformedURLException {
        Id = project.optInt("id");
        Name = project.optString("name");
        OwnerId = project.optInt("owner_id");
        Object desc = project.opt("description");
        Description = desc == null ? "" : desc.toString();
        Identifier = project.optString("identifier");
        Token = project.optString("token");
        IsActive = KanboardAPI.StringToBoolean(project.optString("is_active"));
        IsPublic = KanboardAPI.StringToBoolean(project.optString("is_public"));
        IsPrivate = KanboardAPI.StringToBoolean(project.optString("is_private"));
        IsEverybodyAllowed = KanboardAPI.StringToBoolean(project.optString("is_everybody_allowed"));
        long tmpDate = project.optLong("start_date");
        if (tmpDate > 0)
            StartDate = new Date(tmpDate * 1000);
        else
            StartDate = null;
        tmpDate = project.optLong("end_date");
        if (tmpDate > 0)
            EndDate = new Date(tmpDate * 1000);
        else
            EndDate = null;
        tmpDate = project.optLong("last_modified");
        if (tmpDate > 0)
            LastModified = new Date(tmpDate * 1000);
        else
            LastModified = null;
        NumberActiveTasks = project.optInt("nb_active_tasks");
        JSONObject urls = project.optJSONObject("url");
        if (urls != null) {
            ListURL = new URL(urls.optString("list"));
            BoardURL = new URL(urls.optString("board"));
            CalendarURL = new URL(urls.optString("calendar"));
        } else {
            ListURL = null;
            BoardURL = null;
            CalendarURL = null;
        }

        GroupedActiveTasks = new Hashtable<>();
        GroupedInactiveTasks = new Hashtable<>();
        GroupedOverdueTasks = new Hashtable<>();
        TaskHashtable = new Hashtable<>();
        CategoryHashtable = new Hashtable<>();

        Columns = new ArrayList<>();
        JSONArray cols = project.optJSONArray("columns");
        if (columns != null) {
            for (int i = 0; i < columns.length(); i++) {
                KanboardColumn tmpCol = new KanboardColumn(columns.optJSONObject(i));
                Columns.add(tmpCol);
                GroupedActiveTasks.put(tmpCol.getId(), new Hashtable<Integer, List<KanboardTask>>());
            }
        } else if (cols != null) {
            for (int i = 0; i < cols.length(); i++)
                Columns.add(new KanboardColumn(cols.optJSONObject(i)));
        }

        Swimlanes = new ArrayList<>();
        if (swimlanes != null) {
            for (int i = 0; i < swimlanes.length(); i++) {
                KanboardSwimlane tmpSwim = new KanboardSwimlane(swimlanes.optJSONObject(i));
                Swimlanes.add(tmpSwim);
                for (KanboardColumn c : Columns) {
                    GroupedActiveTasks.get(c.getId()).put(tmpSwim.getId(), new ArrayList<KanboardTask>());

                    GroupedInactiveTasks.put(tmpSwim.getId(), new ArrayList<KanboardTask>());
                    GroupedOverdueTasks.put(tmpSwim.getId(), new ArrayList<KanboardTask>());
                }
            }
        }

        Categories = new ArrayList<>();
        if (categories != null) {
            for (int i = 0; i < categories.length(); i++) {
                KanboardCategory tmpCategory = new KanboardCategory(categories.optJSONObject(i));
                Categories.add(tmpCategory);
                CategoryHashtable.put(tmpCategory.getId(), tmpCategory);
            }
        }

        ActiveTasks = new ArrayList<>();
        if (activetasks != null)
            for (int i = 0; i < activetasks.length(); i++) {
                KanboardTask tmpActiveTask = new KanboardTask(activetasks.optJSONObject(i));
                TaskHashtable.put(tmpActiveTask.getId(), tmpActiveTask);
                ActiveTasks.add(tmpActiveTask);
                GroupedActiveTasks.get(tmpActiveTask.getColumnId()).get(tmpActiveTask.getSwimlaneId())
                        .add(tmpActiveTask);
            }

        InactiveTasks = new ArrayList<>();
        if (inactivetasks != null)
            for (int i = 0; i < inactivetasks.length(); i++) {
                KanboardTask tmpInactiveTask = new KanboardTask(inactivetasks.optJSONObject(i));
                TaskHashtable.put(tmpInactiveTask.getId(), tmpInactiveTask);
                InactiveTasks.add(tmpInactiveTask);
                GroupedInactiveTasks.get(tmpInactiveTask.getSwimlaneId()).add(tmpInactiveTask);
            }

        OverdueTasks = new ArrayList<>();
        if (overduetasks != null)
            for (int i = 0; i < overduetasks.length(); i++) {
                KanboardTask tmpOverdueTask = new KanboardTask(overduetasks.optJSONObject(i));
                OverdueTasks.add(TaskHashtable.get(tmpOverdueTask.getId()));
                GroupedOverdueTasks.get(TaskHashtable.get(tmpOverdueTask.getId()).getSwimlaneId())
                        .add(TaskHashtable.get(tmpOverdueTask.getId()));
            }

        ProjectUsers = new Hashtable<>();
        if (projectusers != null) {
            for (Iterator<String> iter = projectusers.keys(); iter.hasNext();) {
                String key = iter.next();
                ProjectUsers.put(Integer.parseInt(key), projectusers.optString(key));
            }
        }
    }

    public void setExtra(@NonNull List<KanboardColumn> columns, @NonNull List<KanboardSwimlane> swimlanes,
            @NonNull List<KanboardCategory> categories, @NonNull List<KanboardTask> activetasks,
            @NonNull List<KanboardTask> inactivetasks, @NonNull List<KanboardTask> overduetasks,
            @NonNull Dictionary<Integer, String> projectusers) {
        Columns = columns;
        Swimlanes = swimlanes;
        for (KanboardColumn col : Columns) {
            Dictionary<Integer, List<KanboardTask>> tmpTable = new Hashtable<>();
            for (KanboardSwimlane swim : Swimlanes) {
                tmpTable.put(swim.getId(), new ArrayList<KanboardTask>());
                GroupedInactiveTasks.put(swim.getId(), new ArrayList<KanboardTask>());
                GroupedOverdueTasks.put(swim.getId(), new ArrayList<KanboardTask>());
            }
            GroupedActiveTasks.put(col.getId(), tmpTable);
        }
        Categories = categories;
        for (KanboardCategory cat : Categories)
            CategoryHashtable.put(cat.getId(), cat);
        ActiveTasks = activetasks;
        for (KanboardTask task : ActiveTasks) {
            GroupedActiveTasks.get(task.getColumnId()).get(task.getSwimlaneId()).add(task);
            TaskHashtable.put(task.getId(), task);
        }
        InactiveTasks = inactivetasks;
        for (KanboardTask task : InactiveTasks) {
            GroupedInactiveTasks.get(task.getSwimlaneId()).add(task);
            TaskHashtable.put(task.getId(), task);
        }
        for (KanboardTask task : overduetasks) {
            OverdueTasks.add(TaskHashtable.get(task.getId()));
            GroupedOverdueTasks.get(TaskHashtable.get(task.getId()).getSwimlaneId())
                    .add(TaskHashtable.get(task.getId()));
        }
        ProjectUsers = projectusers;
    }

    public int getId() {
        return Id;
    }

    @Nullable
    public String getName() {
        return Name;
    }

    public int getOwnerId() {
        return OwnerId;
    }

    @NonNull
    public String getDescription() {
        return Description;
    }

    @Nullable
    public String getIdentifier() {
        return Identifier;
    }

    @Nullable
    public String getToken() {
        return Token;
    }

    public boolean getIsActive() {
        return IsActive;
    }

    public boolean getIsPublic() {
        return IsPublic;
    }

    public boolean getIsPrivate() {
        return IsPrivate;
    }

    public boolean getIsEverybodyAllowed() {
        return IsEverybodyAllowed;
    }

    @Nullable
    public Date getStartDate() {
        return StartDate;
    }

    @Nullable
    public Date getEndDate() {
        return EndDate;
    }

    @Nullable
    public Date getLastModified() {
        return LastModified;
    }

    public int getNumberActiveTasks() {
        return NumberActiveTasks;
    }

    @Nullable
    public URL getListURL() {
        return ListURL;
    }

    @Nullable
    public URL getBoardURL() {
        return BoardURL;
    }

    @Nullable
    public URL getCalendarURL() {
        return CalendarURL;
    }

    @NonNull
    public List<KanboardColumn> getColumns() {
        return Columns;
    }

    @NonNull
    public List<KanboardCategory> getCategories() {
        return Categories;
    }

    @NonNull
    public List<KanboardSwimlane> getSwimlanes() {
        return Swimlanes;
    }

    @NonNull
    public List<KanboardTask> getActiveTasks() {
        return ActiveTasks;
    }

    @NonNull
    public Dictionary<Integer, Dictionary<Integer, List<KanboardTask>>> getGroupedActiveTasks() {
        return GroupedActiveTasks;
    }

    @NonNull
    public List<KanboardTask> getInactiveTasks() {
        return InactiveTasks;
    }

    @NonNull
    public Dictionary<Integer, List<KanboardTask>> getGroupedInactiveTasks() {
        return GroupedInactiveTasks;
    }

    @NonNull
    public List<KanboardTask> getOverdueTasks() {
        return OverdueTasks;
    }

    @NonNull
    public Dictionary<Integer, List<KanboardTask>> getGroupedOverdueTasks() {
        return GroupedOverdueTasks;
    }

    @NonNull
    public Dictionary<Integer, KanboardTask> getTaskHashtable() {
        return TaskHashtable;
    }

    @NonNull
    public Dictionary<Integer, KanboardCategory> getCategoryHashtable() {
        return CategoryHashtable;
    }

    @NonNull
    public Dictionary<Integer, String> getProjectUsers() {
        return ProjectUsers;
    }

    @Override
    public int compareTo(@NonNull KanboardProject o) {
        return this.Name.compareTo(o.Name);
    }

    @Override
    public String toString() {
        return this.Name;
    }
}