use of org.activityinfo.legacy.shared.command.GetSyncRegions in project activityinfo by bedatadriven.
the class GetSyncRegionsHandler method execute.
@Override
public SyncRegions execute(GetSyncRegions cmd, User user) {
Set<Integer> countryIds = Sets.newHashSet();
Set<Integer> visibleDatabaseIds = Sets.newHashSet();
List<SyncRegion> databaseRegions = new ArrayList<>();
List<Database> ownedDatabases = entityManager.createQuery("SELECT db FROM Database db WHERE db.owner = :user", Database.class).setParameter("user", user).getResultList();
for (Database database : ownedDatabases) {
if (!database.isDeleted()) {
visibleDatabaseIds.add(database.getId());
countryIds.add(database.getCountry().getId());
}
databaseRegions.add(new SyncRegion("db/" + database.getId(), database.getVersion()));
}
List<UserPermission> sharedDatabases = entityManager.createQuery("SELECT p FROM UserPermission p LEFT JOIN FETCH p.database WHERE p.user = :user", UserPermission.class).setParameter("user", user).getResultList();
for (UserPermission permission : sharedDatabases) {
if (permission.isAllowView() && !permission.getDatabase().isDeleted()) {
visibleDatabaseIds.add(permission.getDatabase().getId());
countryIds.add(permission.getDatabase().getCountry().getId());
}
long version = Math.max(permission.getVersion(), permission.getDatabase().getVersion());
databaseRegions.add(new SyncRegion("db/" + permission.getDatabase().getId(), version));
}
List<SyncRegion> regions = Lists.newArrayList();
regions.add(new SyncRegion("site-tables", TableDefinitionUpdateBuilder.CURRENT_VERSION));
for (Integer countryId : countryIds) {
regions.add(new SyncRegion("country/" + countryId, "1"));
}
regions.addAll(databaseRegions);
regions.addAll(listAdminRegions(countryIds));
regions.addAll(listLocations(countryIds));
regions.addAll(listSiteRegions(visibleDatabaseIds));
return new SyncRegions(regions);
}
use of org.activityinfo.legacy.shared.command.GetSyncRegions in project activityinfo by bedatadriven.
the class LocationBuilderTest method locationTypeChange.
@Test
@OnDataSet("/dbunit/sites-simple1.db.xml")
public void locationTypeChange() throws Exception {
EntityManager em = emf.createEntityManager();
User user = em.find(User.class, 1);
// Update the location type 1
Map<String, Object> changes = new HashMap<>();
changes.put("name", "Ishamael");
em.getTransaction().begin();
LocationTypePolicy locationTypePolicy = new LocationTypePolicy(em);
locationTypePolicy.update(user, 1, new PropertyMap(changes));
em.getTransaction().commit();
// First update should include this change
String regionId = "location/" + 1;
LocationUpdateBuilder builder = new LocationUpdateBuilder(em);
GetSyncRegionUpdates request = new GetSyncRegionUpdates(regionId, null);
SyncRegionUpdate update = builder.build(user, request);
assertThat(update.isComplete(), equalTo(true));
assertThat(update.getSql(), containsString("Ishamael"));
// We should be up to date now...
GetSyncRegionsHandler getSyncRegionsHandler = new GetSyncRegionsHandler(em);
SyncRegions syncRegions = getSyncRegionsHandler.execute(new GetSyncRegions(), user);
System.out.println(syncRegions.getList());
assertThat(syncRegions, hasItem(new SyncRegion(regionId, update.getVersion())));
}
Aggregations