|
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); |
|
} |
|
} |
|
} |