package pt.utl.ist.scripts.runOnce.space; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sourceforge.fenixedu.domain.space.AllocatableSpace; import net.sourceforge.fenixedu.domain.space.Room; import pt.utl.ist.fenix.tools.spreadsheet.CsvReader; import pt.utl.ist.scripts.commons.AtomicScript; public class FixRoomCapacities extends AtomicScript { public Map rooms = new HashMap(); class RoomInfo { public String sala; public String edificio; public Integer normalCapacity; public Integer examCapacity; public boolean done; public RoomInfo(String sala, String edificio, Integer normalCapacity, Integer examCapacity) { this.sala = sala; this.edificio = edificio; this.normalCapacity = normalCapacity; this.examCapacity = examCapacity; this.done = false; } @Override public boolean equals(Object obj) { if (obj instanceof String) { return sala.equals(obj); } return false; } public void setDone(boolean done) { this.done = done; } } public FixRoomCapacities(String filename) { try { populateRoomsMap(filename); } catch (IOException e) { throw new RuntimeException(e); } } private void validate() { for (String roomID : rooms.keySet()) { final RoomInfo roomInfo = rooms.get(roomID); System.out.printf("%s,%s,%s,%s\n", roomInfo.sala, roomInfo.edificio, roomInfo.normalCapacity, roomInfo.examCapacity); } } private void populateRoomsMap(String filename) throws IOException { List> lines = CsvReader.readCsvFile(new File(filename), ",", "UTF-8"); for (Map line : lines) { String sala = line.get("SALAS").trim(); String edificio = line.get("LOCALIZACAO"); String normal = line.get("CAP.NORMAL"); String exame = line.get("CAP.EXAME"); if (sala != null && !sala.isEmpty()) { RoomInfo roomInfo = rooms.get(sala); if (roomInfo != null) { System.out.printf("WARN: A sala %s ja tem informação associada\n", sala); } rooms.put(sala, new RoomInfo(sala, edificio, Integer.parseInt(normal), Integer.parseInt(exame))); } } } @Override protected void run() throws Exception { // TODO Auto-generated method stub validate(); for (Room room : AllocatableSpace.getAllRoomsForAlameda()) { fixIt(room); } listNotFoundRooms(); } private void fixIt(Room room) { final String roomID = room.getIdentification() != null ? room.getIdentification().trim() : null; final Integer oldExamCapacity = room.getExamCapacity(); final RoomInfo roomInfo = rooms.get(roomID); if (roomID == null) { return; } if (roomInfo == null) { if (oldExamCapacity != 0) { room.setExamCapacity(0); System.out.printf("A sala %s foi alterada de %d para 0\n", roomID, oldExamCapacity); } } else { room.setExamCapacity(roomInfo.examCapacity); roomInfo.setDone(true); System.out.printf("A sala %s foi alterada de %d para %d\n", roomID, oldExamCapacity, roomInfo.examCapacity); } } private void listNotFoundRooms() { for (String roomID : rooms.keySet()) { final RoomInfo roomInfo = rooms.get(roomID); if (!roomInfo.done) { System.out.printf("A sala %s não foi encontrada no sistema\n", roomID); } } } public static void main(String[] args) { processWriteTransaction(new FixRoomCapacities("salas_gop.csv")); } }