Skip to content

Instantly share code, notes, and snippets.

@pedrosan7os
Last active August 29, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pedrosan7os/ab498981f31c7199e9af to your computer and use it in GitHub Desktop.
Save pedrosan7os/ab498981f31c7199e9af to your computer and use it in GitHub Desktop.
ImportTeacherAuthorization
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");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment