@Override public Group build(Object[] arguments) { AcademicOperationType operation = null; Set<AcademicProgram> programs = new HashSet<AcademicProgram>(); Set<AdministrativeOffice> offices = new HashSet<AdministrativeOffice>(); Scope scope = null; for (int i = 0; i < arguments.length; i++) { Object argument = arguments[i]; if (argument instanceof String) { try { scope = Scope.valueOf((String) argument); } catch (IllegalArgumentException e) { operation = (AcademicOperationType.valueOf((String) argument)); } } else if (argument instanceof AcademicProgram) { programs.add((AcademicProgram) argument); } else if (argument instanceof AdministrativeOffice) { offices.add((AdministrativeOffice) argument); } else { throw new WrongTypeOfArgumentException( i, AcademicOperationType.class, arguments[i].getClass()); } } return new AcademicAuthorizationGroup(operation, programs, offices, scope); }
@Override protected Argument[] getExpressionArguments() { List<Argument> arguments = new ArrayList<Argument>(); if (scope != null) { arguments.add(new StaticArgument(scope.name())); } if (operation != null) { arguments.add(new StaticArgument(operation.name())); } for (AcademicProgram program : programs) { arguments.add(new OidOperator(program)); } for (AdministrativeOffice office : offices) { arguments.add(new OidOperator(office)); } return arguments.toArray(new Argument[0]); }