add format version to stepic format
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / stepic / CourseInfo.java
1 package com.jetbrains.edu.learning.stepic;
2
3 import com.google.gson.annotations.SerializedName;
4 import com.jetbrains.edu.learning.courseFormat.Course;
5 import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
6 import org.jetbrains.annotations.NotNull;
7 import org.jetbrains.annotations.Nullable;
8
9 import java.util.ArrayList;
10 import java.util.Date;
11 import java.util.List;
12 import java.util.stream.Collectors;
13
14 /**
15  * Implementation of class which contains information to be shawn in course description in tool window
16  * and when project is being created
17  */
18 public class CourseInfo {
19   public static final CourseInfo INVALID_COURSE = new CourseInfo();
20
21   @SerializedName("title") private String myName;
22   int id;
23   boolean isAdaptive;
24   @SerializedName("is_public") boolean isPublic;
25   List<Integer> sections;
26   List<Integer> instructors = new ArrayList<>();
27
28   List<StepicUser> myAuthors = new ArrayList<>();
29   @SerializedName("summary") private String myDescription;
30   @SerializedName("course_format") private String myType = "pycharm" + EduStepicConnector.CURRENT_VERSION + " Python"; //course type in format "pycharm <language>"
31   @Nullable private String username;
32
33   @SerializedName("update_date") private Date updateDate;
34   @SerializedName("is_idea_compatible") private boolean isCompatible = true;
35
36   public String getName() {
37     return myName;
38   }
39
40   @NotNull
41   public List<StepicUser> getAuthors() {
42     return myAuthors;
43   }
44
45   public String getDescription() {
46     return myDescription;
47   }
48
49   public String getType() {
50     return myType;
51   }
52
53   @Override
54   public String toString() {
55     return getName();
56   }
57
58   @Override
59   public boolean equals(Object o) {
60     if (this == o) return true;
61     if (o == null || getClass() != o.getClass()) return false;
62     CourseInfo that = (CourseInfo)o;
63     if (that.getName() == null || that.getDescription() == null) return false;
64     return that.getName().equals(getName())
65            && that.getDescription().equals(myDescription);
66   }
67
68   @Override
69   public int hashCode() {
70     int result = getName() != null ? getName().hashCode() : 0;
71     result = 31 * result + (myDescription != null ? myDescription.hashCode() : 0);
72     return result;
73   }
74
75   @Nullable
76   public String getUsername() {
77     return username;
78   }
79
80   public void setUsername(@Nullable String username) {
81     this.username = username;
82   }
83
84   public void setName(String name) {
85     myName = name;
86   }
87
88   public void setAuthors(List<StepicUser> authors) {
89     myAuthors = authors;
90     for (StepicUser author : authors) {
91       if (author.getId() > 0) {
92         instructors.add(author.getId());
93       }
94     }
95   }
96
97   public void addAuthor(StepicUser author) {
98     if (myAuthors == null) {
99       myAuthors = new ArrayList<>();
100     }
101     myAuthors.add(author);
102   }
103
104   public void setDescription(String description) {
105     myDescription = description;
106   }
107
108   public void setType(String type) {
109     myType = type;
110   }
111
112   public boolean isAdaptive() {
113     return isAdaptive;
114   }
115
116   public void setAdaptive(boolean adaptive) {
117     isAdaptive = adaptive;
118   }
119
120   public boolean isPublic() {
121     return isPublic;
122   }
123
124   public void setPublic(boolean aPublic) {
125     isPublic = aPublic;
126   }
127
128   public int getId() {
129     return id;
130   }
131
132   public void setId(int id) {
133     this.id = id;
134   }
135
136   public Date getUpdateDate() {
137     return updateDate;
138   }
139
140   public void setUpdateDate(Date updateDate) {
141     this.updateDate = updateDate;
142   }
143
144   public static CourseInfo fromCourse(@Nullable final Course course) {
145     if (course == null) return null;
146     final List<CourseInfo> infos = StudyProjectGenerator.getCoursesFromCache().stream().
147       filter(info -> info.id == course.getId()).collect(Collectors.toList());
148     if (infos.isEmpty()) return null;
149     return infos.get(0);
150   }
151
152   public List<Integer> getSections() {
153     return sections;
154   }
155
156   public boolean isCompatible() {
157     return isCompatible;
158   }
159
160   public void setCompatible(boolean compatible) {
161     isCompatible = compatible;
162   }
163 }