package pt.utl.ist.scripts.runOnce.degreeStructure; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import net.sourceforge.fenixedu.domain.DegreeCurricularPlan; import net.sourceforge.fenixedu.domain.degree.DegreeType; import net.sourceforge.fenixedu.domain.degree.degreeCurricularPlan.DegreeCurricularPlanState; import net.sourceforge.fenixedu.domain.degreeStructure.CycleCourseGroup; import pt.utl.ist.scripts.commons.AtomicScript; public class AddAffinitiesToFirstCycle extends AtomicScript { public static void main(String[] args) { process(new AddAffinitiesToFirstCycle()); // processWriteTransaction(new AddAffinitiesToFirstCycle()); System.exit(0); } @Override protected void run() throws Exception { printAffinities(); // addNewAffinities(); } static private Map> TO_ADD = new HashMap>(); static private Map> TO_REMOVE = new HashMap>(); static { TO_ADD.put(new DCP("LET 2006", "LET"), Arrays.asList(new DCP("MUOT 2009", "MUOT"))); TO_ADD.put(new DCP("MEC 2006", "MEC"), Arrays.asList(new DCP("MUOT 2009", "MUOT"))); TO_REMOVE.put(new DCP("LMAC 2006", "LMAC"), Arrays.asList(new DCP("MBioNano2006", "MBioNano"))); } private void addNewAffinities() { for (final Entry> entry : TO_ADD.entrySet()) { final StringBuilder buffer = new StringBuilder(); final CycleCourseGroup firstCycle = entry.getKey().getFirstCycle(); buffer.append(firstCycle.getParentDegreeCurricularPlan().getName()).append("\t: "); for (final DCP dest : entry.getValue()) { CycleCourseGroup secondCycle = dest.getSecondCycle(); firstCycle.addDestinationAffinities(secondCycle); buffer.append(secondCycle.getParentDegreeCurricularPlan().getName()).append(" | "); } logger.info(buffer.toString()); } for (final Entry> entry : TO_REMOVE.entrySet()) { final StringBuilder buffer = new StringBuilder(); final CycleCourseGroup firstCycle = entry.getKey().getFirstCycle(); buffer.append(firstCycle.getParentDegreeCurricularPlan().getName()).append("\t: "); for (final DCP dest : entry.getValue()) { CycleCourseGroup secondCycle = dest.getSecondCycle(); firstCycle.removeDestinationAffinities(secondCycle); buffer.append(secondCycle.getParentDegreeCurricularPlan().getName()).append(" | "); } logger.info(buffer.toString()); } } protected void printAffinities() { final Set degreeTypes = new HashSet(); degreeTypes.add(DegreeType.BOLONHA_DEGREE); degreeTypes.add(DegreeType.BOLONHA_INTEGRATED_MASTER_DEGREE); for (final DegreeCurricularPlan degreeCurricularPlan : DegreeCurricularPlan.readByDegreeTypesAndState(degreeTypes, DegreeCurricularPlanState.ACTIVE)) { print(degreeCurricularPlan.getFirstCycleCourseGroup()); } } private void print(final CycleCourseGroup firstCycleCourseGroup) { final StringBuilder builder = new StringBuilder(); builder.append(firstCycleCourseGroup.getParentDegreeCurricularPlan().getName()).append("\t -> "); final Iterator iter = firstCycleCourseGroup.getDestinationAffinitiesSet().iterator(); while (iter.hasNext()) { builder.append(iter.next().getParentDegreeCurricularPlan().getName()); if (iter.hasNext()) { builder.append(", "); } } logger.info(builder.toString()); } private static class DCP { private final String dcpName; private final String degreeSigla; public DCP(final String dcpName, final String degreeSigla) { this.dcpName = dcpName; this.degreeSigla = degreeSigla; } public DegreeCurricularPlan getDegreeCurricularPlan() { return DegreeCurricularPlan.readByNameAndDegreeSigla(dcpName, degreeSigla); } public CycleCourseGroup getFirstCycle() { return getDegreeCurricularPlan().getFirstCycleCourseGroup(); } public CycleCourseGroup getSecondCycle() { return getDegreeCurricularPlan().getSecondCycleCourseGroup(); } @Override public boolean equals(Object obj) { return false; } public boolean equals(DCP obj) { return dcpName.equals(obj.dcpName) && degreeSigla.equals(obj.degreeSigla); } } }