Resolve conflicts
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / courseFormat / Course.java
1 package com.jetbrains.edu.learning.courseFormat;
2
3 import com.google.gson.annotations.Expose;
4 import com.google.gson.annotations.SerializedName;
5 import com.intellij.lang.Language;
6 import com.intellij.openapi.util.text.StringUtil;
7 import com.intellij.util.Function;
8 import com.jetbrains.edu.learning.core.EduNames;
9 import com.jetbrains.edu.learning.core.EduUtils;
10 import com.jetbrains.edu.learning.stepic.StepicUser;
11 import org.jetbrains.annotations.NotNull;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 public class Course {
17   @Expose
18   private List<Lesson> lessons = new ArrayList<Lesson>();
19
20   @Expose private String description;
21   @Expose private String name;
22   private String myCourseDirectory = "";
23   @Expose private List<StepicUser> authors = new ArrayList<StepicUser>();
24   private boolean myUpToDate;
25
26   @Expose @SerializedName("language")
27   private String myLanguage = "Python";
28
29   //this field is used to distinguish ordinary and CheckIO projects
30   //"PyCharm" is used here for historical reasons
31   private String courseType = EduNames.PYCHARM;
32
33   //this field is used to distinguish study and course creator modes
34   private String courseMode = EduNames.STUDY;
35   
36   @Expose private boolean isAdaptive;
37   
38   @Expose
39   private int id;
40
41   /**
42    * Initializes state of course
43    */
44   public void initCourse(boolean isRestarted) {
45     for (Lesson lesson : getLessons()) {
46       lesson.initLesson(this, isRestarted);
47     }
48   }
49
50   public List<Lesson> getLessons() {
51     return lessons;
52   }
53
54   public void setLessons(List<Lesson> lessons) {
55     this.lessons = lessons;
56   }
57   public void addLessons(List<Lesson> lessons) {
58     this.lessons.addAll(lessons);
59   }
60
61   public void addLesson(@NotNull final Lesson lesson) {
62     lessons.add(lesson);
63   }
64
65   public Lesson getLesson(@NotNull final String name) {
66     int lessonIndex = EduUtils.getIndex(name, EduNames.LESSON);
67     List<Lesson> lessons = getLessons();
68     if (!EduUtils.indexIsValid(lessonIndex, lessons)) {
69       return null;
70     }
71     for (Lesson lesson : lessons) {
72       if (lesson.getIndex() - 1 == lessonIndex) {
73         return lesson;
74       }
75     }
76     return null;
77   }
78
79   @NotNull
80   public List<StepicUser> getAuthors() {
81     return authors;
82   }
83
84   public static String getAuthorsString(@NotNull List<StepicUser> authors) {
85     return StringUtil.join(authors, new Function<StepicUser, String>() {
86       @Override
87       public String fun(StepicUser author) {
88         return author.getName();
89       }
90     }, ", ");
91   }
92
93   public void setAuthors(String[] authors) {
94     this.authors = new ArrayList<StepicUser>();
95     for (String name : authors) {
96       final List<String> pair = StringUtil.split(name, " ");
97       if (!pair.isEmpty())
98         this.authors.add(new StepicUser(pair.get(0), pair.size() > 1 ? pair.get(1) : ""));
99     }
100   }
101
102   public String getName() {
103     return name;
104   }
105
106   public void setName(String name) {
107     this.name = name;
108   }
109
110   public String getCourseDirectory() {
111     return myCourseDirectory;
112   }
113
114   public void setCourseDirectory(@NotNull final String courseDirectory) {
115     myCourseDirectory = courseDirectory;
116   }
117
118   public String getDescription() {
119     return description;
120   }
121
122   public void setDescription(String description) {
123     this.description = description;
124   }
125
126   public boolean isUpToDate() {
127     return myUpToDate;
128   }
129
130   public void setUpToDate(boolean upToDate) {
131     myUpToDate = upToDate;
132   }
133
134   public Language getLanguageById() {
135     return Language.findLanguageByID(myLanguage);
136   }
137
138   public String getLanguage() {
139     return myLanguage;
140   }
141
142   public void setLanguage(@NotNull final String language) {
143     myLanguage = language;
144   }
145
146   public void setAuthors(List<StepicUser> authors) {
147     this.authors = authors;
148   }
149
150   @NotNull
151   public String getCourseType() {
152     return courseType;
153   }
154
155   public void setCourseType(String courseType) {
156     this.courseType = courseType;
157   }
158
159   public boolean isAdaptive() {
160     return isAdaptive;
161   }
162
163   public void setAdaptive(boolean adaptive) {
164     isAdaptive = adaptive;
165   }
166
167   public int getId() {
168     return id;
169   }
170
171   public void setId(int id) {
172     this.id = id;
173   }
174
175   public String getCourseMode() {
176     return courseMode;
177   }
178
179   public void setCourseMode(String courseMode) {
180     this.courseMode = courseMode;
181   }
182 }