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/d7a339cd56abe0e214ce to your computer and use it in GitHub Desktop.
Save pedrosan7os/d7a339cd56abe0e214ce to your computer and use it in GitHub Desktop.
ImportAcademicAuthorizationRules
package pt.ist.fenix.webapp;
import java.io.FileReader;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.fenixedu.academic.domain.accessControl.academicAdministration.AcademicAccessRule;
import org.fenixedu.academic.domain.accessControl.academicAdministration.AcademicAccessRule.AcademicAccessTarget;
import org.fenixedu.academic.domain.accessControl.academicAdministration.AcademicAccessRule.AcademicProgramAccessTarget;
import org.fenixedu.academic.domain.accessControl.academicAdministration.AcademicAccessRule.AdministrativeOfficeAccessTarget;
import org.fenixedu.academic.domain.accessControl.academicAdministration.AcademicOperationType;
import org.fenixedu.academic.domain.accessControl.rules.AccessRuleSystem;
import org.fenixedu.academic.domain.accessControl.rules.AccessRule_Base;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.groups.Group;
import org.fenixedu.bennu.scheduler.custom.CustomTask;
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 ImportAcademicAuthorizationRules extends CustomTask {
@Override
public void runTask() throws Exception {
JsonArray rules = new JsonParser().parse(new FileReader("/Users/pedro/rules.json")).getAsJsonArray();
Method createdSetter = AccessRule_Base.class.getDeclaredMethod("setCreated", DateTime.class);
createdSetter.setAccessible(true);
Method revokedSetter = AccessRule_Base.class.getDeclaredMethod("setRevoked", DateTime.class);
revokedSetter.setAccessible(true);
Method creatorSetter = AccessRule_Base.class.getDeclaredMethod("setCreator", User.class);
creatorSetter.setAccessible(true);
Method deletedFromRuleSystemSetter =
AccessRule_Base.class.getDeclaredMethod("setDeletedFromRuleSystem", AccessRuleSystem.class);
deletedFromRuleSystemSetter.setAccessible(true);
Method ruleSystemSetter = AccessRule_Base.class.getDeclaredMethod("setRuleSystem", AccessRuleSystem.class);
ruleSystemSetter.setAccessible(true);
for (JsonElement element : rules) {
JsonObject rule = element.getAsJsonObject();
AcademicOperationType operation = AcademicOperationType.valueOf(rule.get("operation").getAsString());
DateTime created = DateTime.parse(rule.get("created").getAsString());
DateTime revoked = null;
if (rule.has("revoked")) {
revoked = DateTime.parse(rule.get("revoked").getAsString());
}
User creator = User.findByUsername(rule.get("creator").getAsString());
Group group = Group.parse(rule.get("group").getAsString());
Set<AcademicAccessTarget> targets = new HashSet<>();
if (rule.has("programs")) {
for (JsonElement program : rule.get("programs").getAsJsonArray()) {
targets.add(new AcademicProgramAccessTarget(FenixFramework.getDomainObject(program.getAsString())));
}
}
if (rule.has("offices")) {
for (JsonElement office : rule.get("offices").getAsJsonArray()) {
targets.add(new AdministrativeOfficeAccessTarget(FenixFramework.getDomainObject(office.getAsString())));
}
}
AcademicAccessRule newRule = new AcademicAccessRule(operation, group, targets);
createdSetter.invoke(newRule, created);
if (revoked != null) {
revokedSetter.invoke(newRule, revoked);
ruleSystemSetter.invoke(newRule, (AccessRuleSystem) null);
deletedFromRuleSystemSetter.invoke(newRule, AccessRuleSystem.getInstance());
}
creatorSetter.invoke(newRule, creator);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment