// Copyright 2015 The Project Buendia Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at: http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software distrib- // uted under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES // OR CONDITIONS OF ANY KIND, either express or implied. See the License for // specific language governing permissions and limitations under the License. package org.projectbuendia.client.providers; import org.projectbuendia.client.sync.Database; import org.projectbuendia.client.providers.Contracts.Table; /** A {@link DelegatingProvider} for MSF record info such as patients and locations. */ public class BuendiaProvider extends DelegatingProvider<Database> { /** * Provides an {@link SQLiteDatabaseTransactionHelper} for beginning and ending savepoints * (nested transactions). */ public SQLiteDatabaseTransactionHelper getDbTransactionHelper() { return new SQLiteDatabaseTransactionHelper(getDatabaseHelper()); } @Override protected Database getDatabaseHelper() { return new Database(getContext()); } @Override protected ProviderDelegateRegistry<Database> getRegistry() { ProviderDelegateRegistry<Database> registry = new ProviderDelegateRegistry<>(); // TODO/cleanup: Factor out all the repetitive code below. // Providers for groups of things (e.g., all charts). registry.registerDelegate( Contracts.ChartItems.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.ChartItems.GROUP_CONTENT_TYPE, Table.CHART_ITEMS)); registry.registerDelegate( Contracts.Concepts.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Concepts.GROUP_CONTENT_TYPE, Table.CONCEPTS)); registry.registerDelegate( Contracts.ConceptNames.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.ConceptNames.GROUP_CONTENT_TYPE, Table.CONCEPT_NAMES)); registry.registerDelegate( Contracts.Forms.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Forms.GROUP_CONTENT_TYPE, Table.FORMS)); registry.registerDelegate( Contracts.Locations.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Locations.GROUP_CONTENT_TYPE, Table.LOCATIONS)); registry.registerDelegate( Contracts.LocationNames.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.LocationNames.GROUP_CONTENT_TYPE, Table.LOCATION_NAMES)); registry.registerDelegate( Contracts.Observations.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Observations.GROUP_CONTENT_TYPE, Table.OBSERVATIONS)); registry.registerDelegate( Contracts.Orders.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Orders.GROUP_CONTENT_TYPE, Table.ORDERS)); registry.registerDelegate( Contracts.Patients.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Patients.GROUP_CONTENT_TYPE, Table.PATIENTS)); registry.registerDelegate( Contracts.Users.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.Users.GROUP_CONTENT_TYPE, Table.USERS)); // Providers for individual things (e.g., user with a specific ID). registry.registerDelegate( Contracts.Concepts.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Forms.GROUP_CONTENT_TYPE, Table.CONCEPTS, Contracts.Concepts.UUID)); registry.registerDelegate( Contracts.Forms.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Forms.GROUP_CONTENT_TYPE, Table.FORMS, Contracts.Forms.UUID)); registry.registerDelegate( Contracts.Locations.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Locations.ITEM_CONTENT_TYPE, Table.LOCATIONS, Contracts.Locations.UUID)); registry.registerDelegate( Contracts.LocationNames.CONTENT_URI.getPath() + "/*", new InsertableItemProviderDelegate( Contracts.LocationNames.ITEM_CONTENT_TYPE, Table.LOCATION_NAMES, null)); registry.registerDelegate( Contracts.Observations.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Observations.ITEM_CONTENT_TYPE, Table.OBSERVATIONS, Contracts.Observations.UUID)); registry.registerDelegate( Contracts.Orders.CONTENT_URI.getPath() + "/*", new InsertableItemProviderDelegate( Contracts.Orders.ITEM_CONTENT_TYPE, Table.ORDERS, Contracts.Orders.UUID)); registry.registerDelegate( Contracts.Patients.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Patients.ITEM_CONTENT_TYPE, Table.PATIENTS, Contracts.Patients.UUID)); registry.registerDelegate( Contracts.Users.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.Users.ITEM_CONTENT_TYPE, Table.USERS, Contracts.Users.UUID)); // Custom providers, usually with special logic. registry.registerDelegate( Contracts.PatientCounts.CONTENT_URI.getPath(), new PatientCountsDelegate()); registry.registerDelegate( Contracts.LocalizedLocations.CONTENT_URI.getPath() + "/*", new LocalizedLocationsDelegate()); // Content provider for our single item table for storing miscellaneous values. registry.registerDelegate( Contracts.Misc.CONTENT_URI.getPath(), new InsertableItemProviderDelegate( Contracts.Misc.ITEM_CONTENT_TYPE, Table.MISC, "rowid")); registry.registerDelegate( Contracts.SyncTokens.CONTENT_URI.getPath(), new GroupProviderDelegate( Contracts.SyncTokens.ITEM_CONTENT_TYPE, Table.SYNC_TOKENS)); registry.registerDelegate( Contracts.SyncTokens.CONTENT_URI.getPath() + "/*", new ItemProviderDelegate( Contracts.SyncTokens.ITEM_CONTENT_TYPE, Table.SYNC_TOKENS, Contracts.SyncTokens.TABLE_NAME)); return registry; } }