|
package pt.ist.fenix.webapp; |
|
|
|
import java.io.FileReader; |
|
import java.lang.reflect.Method; |
|
import java.util.Locale; |
|
|
|
import org.fenixedu.academic.domain.Department; |
|
import org.fenixedu.academic.domain.ExecutionSemester; |
|
import org.fenixedu.academic.domain.Person; |
|
import org.fenixedu.academic.domain.Teacher; |
|
import org.fenixedu.academic.domain.TeacherAuthorization; |
|
import org.fenixedu.academic.domain.TeacherAuthorization_Base; |
|
import org.fenixedu.academic.domain.TeacherCategory; |
|
import org.fenixedu.bennu.core.domain.User; |
|
import org.fenixedu.bennu.core.util.CoreConfiguration; |
|
import org.fenixedu.bennu.scheduler.custom.CustomTask; |
|
import org.fenixedu.commons.StringNormalizer; |
|
import org.fenixedu.commons.i18n.LocalizedString; |
|
import org.joda.time.DateTime; |
|
|
|
import pt.ist.fenixframework.FenixFramework; |
|
|
|
import com.google.gson.JsonArray; |
|
import com.google.gson.JsonElement; |
|
import com.google.gson.JsonObject; |
|
import com.google.gson.JsonParser; |
|
|
|
public class ImportTeacherAuthorization extends CustomTask { |
|
@Override |
|
public void runTask() throws Exception { |
|
JsonArray auths = new JsonParser().parse(new FileReader("/Users/pedro/auths.json")).getAsJsonArray(); |
|
Method authorizerSetter = TeacherAuthorization_Base.class.getDeclaredMethod("setAuthorizer", User.class); |
|
authorizerSetter.setAccessible(true); |
|
Method revokerSetter = TeacherAuthorization_Base.class.getDeclaredMethod("setRevoker", User.class); |
|
revokerSetter.setAccessible(true); |
|
Method revokeTimeSetter = TeacherAuthorization_Base.class.getDeclaredMethod("setRevokeTime", DateTime.class); |
|
revokeTimeSetter.setAccessible(true); |
|
|
|
for (JsonElement element : auths) { |
|
JsonObject auth = element.getAsJsonObject(); |
|
boolean contracted = auth.get("contracted").getAsBoolean(); |
|
Person person = User.findByUsername(auth.get("teacher").getAsString()).getPerson(); |
|
Teacher teacher = person.getTeacher(); |
|
if (teacher == null) { |
|
teacher = new Teacher(person); |
|
} |
|
Department department = FenixFramework.getDomainObject(auth.get("department").getAsString()); |
|
ExecutionSemester semester = FenixFramework.getDomainObject(auth.get("semester").getAsString()); |
|
TeacherCategory category = category(auth.get("category")); |
|
Double lessonHours = auth.get("lessonHours").getAsDouble(); |
|
TeacherAuthorization teacherAuthorization = |
|
TeacherAuthorization.createOrUpdate(teacher, department, semester, category, contracted, lessonHours); |
|
if (auth.has("authorizer")) { |
|
User authorizer = User.findByUsername(auth.get("authorizer").getAsString()); |
|
authorizerSetter.invoke(teacherAuthorization, authorizer); |
|
} |
|
if (auth.has("revokeTime")) { |
|
teacherAuthorization.revoke(); |
|
DateTime revokeTime = DateTime.parse(auth.get("revokeTime").getAsString()); |
|
revokeTimeSetter.invoke(teacherAuthorization, revokeTime); |
|
User revoker = null; |
|
if (auth.has("revoker")) { |
|
revoker = User.findByUsername(auth.get("revoker").getAsString()); |
|
} |
|
revokerSetter.invoke(teacherAuthorization, revoker); |
|
} |
|
} |
|
} |
|
|
|
private TeacherCategory category(JsonElement json) { |
|
JsonObject jsonObject = json.getAsJsonObject(); |
|
LocalizedString name = LocalizedString.fromJson(jsonObject.get("name")); |
|
int weight = jsonObject.get("weight").getAsInt(); |
|
TeacherCategory category = TeacherCategory.find(name.getContent()); |
|
if (category != null) { |
|
return category; |
|
} |
|
return new TeacherCategory(StringNormalizer.slugify(name.getContent(english())), name, weight); |
|
} |
|
|
|
private Locale english() { |
|
for (Locale locale : CoreConfiguration.supportedLocales()) { |
|
if (locale.getLanguage().equals("en")) { |
|
return locale; |
|
} |
|
} |
|
return Locale.forLanguageTag("en-GB"); |
|
} |
|
} |