001package co.codewizards.cloudstore.core.repo.sync;
002
003import static co.codewizards.cloudstore.core.util.Util.assertNotNull;
004
005import java.util.Collection;
006import java.util.HashMap;
007import java.util.LinkedList;
008import java.util.List;
009import java.util.Map;
010
011import co.codewizards.cloudstore.core.dto.CopyModificationDTO;
012import co.codewizards.cloudstore.core.dto.DeleteModificationDTO;
013import co.codewizards.cloudstore.core.dto.ModificationDTO;
014
015public class ModificationDTOSet {
016
017        private final Map<String, List<DeleteModificationDTO>> path2DeleteModificationDTOs;
018        private final Map<String, List<CopyModificationDTO>> fromPath2CopyModificationDTOs;
019
020        public ModificationDTOSet(Collection<ModificationDTO> modificationDTOs) {
021                assertNotNull("modificationDTOs", modificationDTOs);
022                path2DeleteModificationDTOs = new HashMap<String, List<DeleteModificationDTO>>();
023                fromPath2CopyModificationDTOs = new HashMap<String, List<CopyModificationDTO>>();
024                for (ModificationDTO modificationDTO : modificationDTOs) {
025                        if (modificationDTO instanceof CopyModificationDTO) {
026                                CopyModificationDTO copyModificationDTO = (CopyModificationDTO) modificationDTO;
027                                String fromPath = copyModificationDTO.getFromPath();
028                                List<CopyModificationDTO> list = fromPath2CopyModificationDTOs.get(fromPath);
029                                if (list == null) {
030                                        list = new LinkedList<CopyModificationDTO>();
031                                        fromPath2CopyModificationDTOs.put(fromPath, list);
032                                }
033                                list.add(copyModificationDTO);
034                        }
035                        else if (modificationDTO instanceof DeleteModificationDTO) {
036                                DeleteModificationDTO deleteModificationDTO = (DeleteModificationDTO) modificationDTO;
037                                String path = deleteModificationDTO.getPath();
038                                List<DeleteModificationDTO> list = path2DeleteModificationDTOs.get(path);
039                                if (list == null) {
040                                        list = new LinkedList<DeleteModificationDTO>();
041                                        path2DeleteModificationDTOs.put(path, list);
042                                }
043                                list.add(deleteModificationDTO);
044                        }
045                        else
046                                throw new UnsupportedOperationException("Unknown ModificationDTO type: " + modificationDTO);
047                }
048        }
049
050        public Map<String, List<CopyModificationDTO>> getFromPath2CopyModificationDTOs() {
051                return fromPath2CopyModificationDTOs;
052        }
053
054        public Map<String, List<DeleteModificationDTO>> getPath2DeleteModificationDTOs() {
055                return path2DeleteModificationDTOs;
056        }
057
058}