package org.activityinfo.legacy.shared.model; /* * #%L * ActivityInfo Server * %% * Copyright (C) 2009 - 2013 UNICEF * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.google.common.collect.Lists; import org.activityinfo.legacy.shared.command.result.*; import org.activityinfo.legacy.shared.reports.util.mapping.Extents; import java.util.*; /** * Predefined DTOs for use in unit tests. */ public class DTOs { public static final AdminLevelDTO PROVINCE = new AdminLevelDTO(1, "Province"); public static final AdminLevelDTO TERRITOIRE = new AdminLevelDTO(2, 1, "Territoire"); public static final AdminLevelDTO SECTEUR = new AdminLevelDTO(3, 2, "Secteur"); private static LocationTypeDTO createLocationType(int id, String name) { LocationTypeDTO type = new LocationTypeDTO(id, name); type.setCountryBounds(Extents.maxGeoBounds()); type.setAdminLevels(Arrays.asList(PROVINCE, TERRITOIRE, SECTEUR)); return type; } public static final LocationTypeDTO ECOLE = createLocationType(2, "Ecole"); public static final LocationTypeDTO LOCALITE = createLocationType(1, "Localite"); public static final AdminEntityDTO NORD_KIVU = rootEntity().atLevel(PROVINCE) .named("North Kivu") .withBounds(Extents.create(0, 0, 100, 100)) .build(); public static final AdminEntityDTO BENI = childOf(NORD_KIVU).atLevel(TERRITOIRE) .named("Beni") .withBounds(Extents.create(0, 0, 25, 25)) .build(); public static final AdminEntityDTO WATALINA = childOf(BENI).atLevel(SECTEUR).named("Watalina").build(); public static final AdminEntityDTO RUIZI = childOf(BENI).atLevel(SECTEUR).named("Ruizi").build(); public static final AdminEntityDTO MASISI = childOf(NORD_KIVU).atLevel(TERRITOIRE) .named("Masisi") .withBounds(Extents.create(0, 25, 25, 50)) .build(); public static final AdminEntityResult NORD_KIVU_TERRITOIRES = new AdminEntityResult(Lists.newArrayList(BENI, MASISI)); public static final AdminEntityDTO SUD_KIVU = rootEntity().atLevel(PROVINCE) .named("Sud Kivu") .withBounds(Extents.create(0, 0, -100, -100)) .build(); public static final AdminEntityDTO SHABUNDA = childOf(SUD_KIVU).atLevel(TERRITOIRE).named("Shabunda").build(); public static final AdminEntityResult SUD_KIVU_TERRITOIRES = new AdminEntityResult(Lists.newArrayList(SHABUNDA)); public static final CountryDTO DRC; public static final PartnerDTO NRC = new PartnerDTO(88, "NRC"); public static final AdminEntityResult PROVINCES = new AdminEntityResult(Lists.newArrayList(NORD_KIVU, SUD_KIVU)); static { DRC = new CountryDTO(1, "RDC"); DRC.setBounds(Extents.create(0, 0, 300, 300)); DRC.setAdminLevels(Arrays.asList(PROVINCE, TERRITOIRE, SECTEUR)); DRC.setLocationTypes(Arrays.asList(LOCALITE, ECOLE)); } private static int nextId = 1; public static class PEAR { public static final SchemaDTO SCHEMA; public static final UserDatabaseDTO DATABASE; public static final ActivityFormDTO NFI_DISTRIBUTION; public static final ActivityDTO SCHOOL_REHAB; public static final AttributeDTO MINOR; public static final AttributeDTO MAJOR; public static final AttributeGroupDTO REHAB_TYPE; public static final SiteDTO WATALINA_CENTER_IN_BENI; public static final SiteDTO SITE_WITH_NO_ADMIN_LEVELS; public static final List<SiteDTO> SITES; static { DATABASE = new UserDatabaseDTO(1, "PEAR"); DATABASE.setFullName("Program of Expanded Assistance to Refugees"); DATABASE.setEditAllAllowed(false); DATABASE.setEditAllowed(true); DATABASE.setManageUsersAllowed(true); DATABASE.setManageAllUsersAllowed(false); DATABASE.setDesignAllowed(true); DATABASE.setMyPartnerId(88); DATABASE.setCountry(DRC); DATABASE.getPartners().add(NRC); NFI_DISTRIBUTION = new ActivityFormDTO(91, "NFI Distributions"); NFI_DISTRIBUTION.setDatabase(DATABASE); NFI_DISTRIBUTION.setLocationType(LOCALITE); NFI_DISTRIBUTION.setClassicView(true); DATABASE.getActivities().add(new ActivityDTO(DATABASE, NFI_DISTRIBUTION)); SCHOOL_REHAB = new ActivityDTO(92, "School Rehab"); SCHOOL_REHAB.setDatabase(DATABASE); SCHOOL_REHAB.setLocationType(ECOLE); SCHOOL_REHAB.setClassicView(true); DATABASE.getActivities().add(SCHOOL_REHAB); REHAB_TYPE = new AttributeGroupDTO(71); REHAB_TYPE.setName("Rehab type"); REHAB_TYPE.setMultipleAllowed(false); // SCHOOL_REHAB.getAttributeGroups().add(REHAB_TYPE); MINOR = new AttributeDTO(711, "Minor"); REHAB_TYPE.getAttributes().add(MINOR); MAJOR = new AttributeDTO(712, "Major"); REHAB_TYPE.getAttributes().add(MAJOR); SCHEMA = new SchemaDTO(); SCHEMA.getDatabases().add(DATABASE); WATALINA_CENTER_IN_BENI = new SiteDTO(4); WATALINA_CENTER_IN_BENI.setActivityId(NFI_DISTRIBUTION.getId()); WATALINA_CENTER_IN_BENI.setPartner(NRC); WATALINA_CENTER_IN_BENI.setLocationName("Watalina Center (in Beni)"); WATALINA_CENTER_IN_BENI.setAdminEntity(1, NORD_KIVU); WATALINA_CENTER_IN_BENI.setAdminEntity(2, BENI); WATALINA_CENTER_IN_BENI.setAdminEntity(3, WATALINA); SITE_WITH_NO_ADMIN_LEVELS = new SiteDTO(5); SITE_WITH_NO_ADMIN_LEVELS.setActivityId(NFI_DISTRIBUTION.getId()); SITE_WITH_NO_ADMIN_LEVELS.setPartner(new PartnerDTO(89, "AVSI")); SITE_WITH_NO_ADMIN_LEVELS.setLocationName("Boise Idahao"); SITES = Lists.newArrayList(); SITES.add(WATALINA_CENTER_IN_BENI); } } /** * @return A schema with one program "PEAR" with two activities (ids=91,92) */ public static SchemaDTO pear() { return PEAR.SCHEMA; } public static UserResult rrmUsers() { List<UserPermissionDTO> users = new ArrayList<UserPermissionDTO>(); UserPermissionDTO typhaine = new UserPermissionDTO(); typhaine.setName("typhaine"); typhaine.setEmail("typhaine@sol.net"); typhaine.setAllowView(true); typhaine.setAllowManageUsers(true); typhaine.setAllowManageAllUsers(false); users.add(typhaine); return new UserResult(users); } /** * @return A schema with two programs, "PEAR" and "RRM" where "PEAR" has no * activities and "RRM" has one activity. */ public static SchemaDTO emptyPEARandRRM() { SchemaDTO schema = new SchemaDTO(); schema.getDatabases().add(new UserDatabaseDTO(1, "PEAR")); UserDatabaseDTO rrm = new UserDatabaseDTO(2, "RRM"); rrm.getActivities().add(new ActivityDTO(1, "NFI Distribution")); schema.getDatabases().add(rrm); return schema; } /** * @return A map of two NFI Distribution sites (activityId=91) sites indexed * by id Site ids = 4, 5 */ public static Map<Integer, SiteDTO> pearSites() { throw new UnsupportedOperationException(); } public static SiteResult pearSitesManyResults(int count) { List<SiteDTO> sites = new ArrayList<SiteDTO>(); for (int i = 0; i != count; ++i) { SiteDTO fargo = new SiteDTO(i); fargo.setActivityId(91); fargo.setPartner(new PartnerDTO(88, "NRC")); fargo.setLocationName("Fargo"); fargo.setAdminEntity(3, WATALINA); fargo.setAdminEntity(2, BENI); fargo.setAdminEntity(1, NORD_KIVU); sites.add(fargo); } return new SiteResult(sites); } public static SiteResult pearSitesResults() { return new SiteResult(new ArrayList<SiteDTO>(pearSites().values())); } public static ListResult<AdminEntityDTO> getProvinces() { List<AdminEntityDTO> list = new ArrayList<AdminEntityDTO>(); list.add(NORD_KIVU); list.add(SUD_KIVU); return new AdminEntityResult(list); } public static ListResult<AdminEntityDTO> getTerritoires(int provinceId) { List<AdminEntityDTO> list = new ArrayList<AdminEntityDTO>(); if (provinceId == 100) { list.add(BENI); list.add(MASISI); } else if (provinceId == 200) { list.add(new AdminEntityDTO(2, 202, 200, "Shabunda")); list.add(new AdminEntityDTO(2, 201, 200, "Walungu")); } return new AdminEntityResult(list); } public static SchemaDTO PEARPlus() { CountryDTO country = new CountryDTO(1, "RDC"); country.getAdminLevels().add(PROVINCE); country.getAdminLevels().add(new AdminLevelDTO(2, 1, "Zone de Sante")); country.getAdminLevels().add(new AdminLevelDTO(3, 2, "Aire de Sante")); LocationTypeDTO aireSante = new LocationTypeDTO(1, "Aire de Sante"); aireSante.setBoundAdminLevelId(3); country.getLocationTypes().add(aireSante); SchemaDTO schema = new SchemaDTO(); UserDatabaseDTO pearPlus = new UserDatabaseDTO(1, "PEAR Plus"); pearPlus.setCountry(country); pearPlus.setEditAllAllowed(true); pearPlus.setEditAllowed(true); schema.getDatabases().add(pearPlus); ActivityDTO activity = new ActivityDTO(11, "Reunificiation des Enfants"); activity.setDatabase(pearPlus); activity.setLocationType(aireSante); activity.setReportingFrequency(ActivityFormDTO.REPORT_MONTHLY); pearPlus.getActivities().add(activity); return schema; } public static AdminEntityResult pearPlusProvinces() { List<AdminEntityDTO> list = new ArrayList<AdminEntityDTO>(); list.add(new AdminEntityDTO(1, 1, "Ituri")); return new AdminEntityResult(list); } public static AdminEntityResult pearPlusZonesSantes() { List<AdminEntityDTO> list = new ArrayList<AdminEntityDTO>(); list.add(new AdminEntityDTO(2, 11, 1, "Banana")); list.add(new AdminEntityDTO(2, 12, 1, "Drodo")); return new AdminEntityResult(list); } public static AdminEntityResult pearPlusAS() { List<AdminEntityDTO> list = new ArrayList<AdminEntityDTO>(); list.add(new AdminEntityDTO(3, 111, 11, "Logo")); list.add(new AdminEntityDTO(3, 112, 11, "Ndikpa")); list.add(new AdminEntityDTO(3, 113, 11, "Zengo")); return new AdminEntityResult(list); } public static BaseMapResult baseMaps() { TileBaseMap map = new TileBaseMap(); map.setName("Administrative Map"); map.setCopyright("Foobar"); map.setId("admin"); map.setMinZoom(0); map.setMaxZoom(16); return new BaseMapResult(Collections.singletonList(map)); } public static EntityBuilder childOf(AdminEntityDTO parent) { return new EntityBuilder(parent); } public static EntityBuilder rootEntity() { return new EntityBuilder(); } private static class EntityBuilder { private AdminEntityDTO entity; public EntityBuilder() { entity = new AdminEntityDTO(); entity.setId(nextId++); } public EntityBuilder(AdminEntityDTO parent) { this(); entity.setParentId(parent.getId()); } public EntityBuilder named(String name) { entity.setName(name); return this; } public EntityBuilder withBounds(Extents bounds) { entity.setBounds(bounds); return this; } public EntityBuilder atLevel(AdminLevelDTO level) { entity.setLevelId(level.getId()); return this; } public AdminEntityDTO build() { return entity; } } }