diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java index c635faf..146904f 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/MainActivity.java @@ -9,6 +9,7 @@ import java.util.List; import android.os.AsyncTask; import android.os.Bundle; +import fr.romanet.vj.apps.myrealestateagency.Repository.MyRealEstateAgencyRepository; import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithAgents; @@ -25,37 +26,23 @@ public class MainActivity extends AppCompatActivity { } public void insertSingleTodo(View view) { - new Thread(new Runnable() { - @Override - public void run() { - Log.d("MyApp","UNNNNNN GROOOOOOOOOOOOS CAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA"); - Agency test1 = new Agency("AgenceOFParis"); - RealEstateAgencyDatabase.getInstance(getApplicationContext()) - .agencyDao().insertAgency(test1); + Agency test1 = new Agency("AgenceOFParis"); - Agent test = new Agent("Bader", "Guetari", 1); - RealEstateAgencyDatabase.getInstance(getApplicationContext()) - .agentDao() - .insertAgent(test); + Agency test2 = new Agency("AgenceOFMarseille"); - Agency test2 = new Agency("AgenceOFMarseille"); - RealEstateAgencyDatabase.getInstance(getApplicationContext()) - .agencyDao().insertAgency(test2); + Agent test = new Agent("Bader", "Guetari", 1); - Agent test3 = new Agent("Khalil", "Guetari", 2); - RealEstateAgencyDatabase.getInstance(getApplicationContext()) - .agentDao() - .insertAgent(test3); + Agent test3 = new Agent("Khalil", "Guetari", 2); - Agent test10 = new Agent("Achref", "Guetari", 1); - RealEstateAgencyDatabase.getInstance(getApplicationContext()) - .agentDao() - .insertAgent(test10); + Agent test10 = new Agent("Achref", "Guetari", 1); - String query = "SELECT agency_id FROM agency INNER JOIN agent ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; - String query1 = "SELECT agency_id FROM agent INNER JOIN agency ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; + MyRealEstateAgencyRepository.getInstance(this).addAgency(test1); + MyRealEstateAgencyRepository.getInstance(this).addAgency(test2); + MyRealEstateAgencyRepository.getInstance(this).addAgent(test); + MyRealEstateAgencyRepository.getInstance(this).addAgent(test3); + MyRealEstateAgencyRepository.getInstance(this).addAgent(test10); - } - }).start(); + String query = "SELECT agency_id FROM agency INNER JOIN agent ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; + String query1 = "SELECT agency_id FROM agent INNER JOIN agency ON agency.agency_id = agent.agent_id WHERE agency_name =" + "AgenceOFParis" + "GROUP BY agency_name"; } } \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java new file mode 100644 index 0000000..afbecab --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/Repository/MyRealEstateAgencyRepository.java @@ -0,0 +1,39 @@ +package fr.romanet.vj.apps.myrealestateagency.Repository; + +import android.content.Context; + +import androidx.room.Room; + +import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; +import fr.romanet.vj.apps.myrealestateagency.entities.Agent; + +public final class MyRealEstateAgencyRepository { + private static volatile MyRealEstateAgencyRepository instance; + + public static MyRealEstateAgencyRepository getInstance(Context context) + { + if (instance == null) + { + synchronized (MyRealEstateAgencyRepository.class) + { + if (instance == null) + { + instance = new MyRealEstateAgencyRepository(context); + } + } + } + + return instance; + } + + private final RealEstateAgencyDatabase realEstateAgencyDatabaseDatabase; + + private MyRealEstateAgencyRepository(Context context) + { + realEstateAgencyDatabaseDatabase = Room.databaseBuilder(context, RealEstateAgencyDatabase.class, "real_estate_agency_db").allowMainThreadQueries().build(); + } + + public void addAgency(Agency agency){realEstateAgencyDatabaseDatabase.agencyDao().insertAgency(agency);} + public void addAgent(Agent agent){realEstateAgencyDatabaseDatabase.agentDao().insertAgent(agent);} +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java new file mode 100644 index 0000000..d0bb1b9 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithPropertiesDao.java @@ -0,0 +1,16 @@ +package fr.romanet.vj.apps.myrealestateagency.dao; + +import androidx.room.Dao; +import androidx.room.Query; +import androidx.room.Transaction; + +import java.util.List; + +import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithProperties; + +@Dao +public interface AgencyWithPropertiesDao { + @Transaction + @Query("SELECT * FROM agency") + List getAgenciesAndProperties(); +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyStatueDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyStatueDao.java deleted file mode 100644 index 7259807..0000000 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyStatueDao.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.romanet.vj.apps.myrealestateagency.dao; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.Query; - -import java.util.List; - -import fr.romanet.vj.apps.myrealestateagency.entities.PropertyStatue; - - -@Dao -public interface PropertyStatueDao { - @Query("SELECT * FROM property_statue") - List getPropertyStatueList(); - - @Insert - void insertPropertyStatue(PropertyStatue propertyStatue); -} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyTypeDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyTypeDao.java deleted file mode 100644 index e319e33..0000000 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyTypeDao.java +++ /dev/null @@ -1,18 +0,0 @@ -package fr.romanet.vj.apps.myrealestateagency.dao; - -import androidx.room.Dao; -import androidx.room.Insert; -import androidx.room.Query; - -import java.util.List; - -import fr.romanet.vj.apps.myrealestateagency.entities.PropertyType; - -@Dao -public interface PropertyTypeDao { - @Query("SELECT * FROM property_type") - List getPropertyTypeList(); - - @Insert - void insertPropertyType(PropertyType propertyType); -} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java index 9f115c4..1a56156 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java @@ -9,40 +9,21 @@ import androidx.room.TypeConverters; import fr.romanet.vj.apps.myrealestateagency.dao.AgencyDao; import fr.romanet.vj.apps.myrealestateagency.dao.AgencyWithAgentsDao; +import fr.romanet.vj.apps.myrealestateagency.dao.AgencyWithPropertiesDao; import fr.romanet.vj.apps.myrealestateagency.dao.PropertyDao; -import fr.romanet.vj.apps.myrealestateagency.dao.PropertyStatueDao; -import fr.romanet.vj.apps.myrealestateagency.dao.PropertyTypeDao; import fr.romanet.vj.apps.myrealestateagency.entities.Agency; import fr.romanet.vj.apps.myrealestateagency.entities.Agent; import fr.romanet.vj.apps.myrealestateagency.dao.AgentDao; -import fr.romanet.vj.apps.myrealestateagency.entities.PropertyStatue; +import fr.romanet.vj.apps.myrealestateagency.entities.Property; -@Database(entities = {Agency.class, Agent.class}, version = 1) -@TypeConverters({PropertyStatue.Converters.class}) +@Database(entities = {Agency.class, Agent.class, Property.class}, version = 1) +@TypeConverters({Property.Converters.class}) public abstract class RealEstateAgencyDatabase extends RoomDatabase { public abstract AgentDao agentDao(); public abstract AgencyDao agencyDao(); - public abstract AgencyWithAgentsDao agencyWithAgentsDao(); - public abstract PropertyStatueDao statueDao(); - public abstract PropertyTypeDao propertyTypeDao(); public abstract PropertyDao propertyDao(); - private static volatile RealEstateAgencyDatabase INSTANCE; - - public static RealEstateAgencyDatabase getInstance(Context context) { - if(INSTANCE == null){ - synchronized (RealEstateAgencyDatabase.class) { - if(INSTANCE == null) { - INSTANCE = Room - .databaseBuilder(context.getApplicationContext() - , RealEstateAgencyDatabase.class, "real_estate_agency_db") - .build(); - } - } - - } - return INSTANCE; - } - + public abstract AgencyWithAgentsDao agencyWithAgentsDao(); + public abstract AgencyWithPropertiesDao agencyWithPropertiesDaoDao(); } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java new file mode 100644 index 0000000..91cd30c --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithProperties.java @@ -0,0 +1,15 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import androidx.room.Embedded; +import androidx.room.Relation; + +import java.util.List; + +public class AgencyWithProperties { + public int agency_id; + @Relation( + parentColumn = "agency_id", + entityColumn = "belongs_agency_id" + ) + public List agents; +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Property.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Property.java index db2e0a9..d6c4a21 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Property.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Property.java @@ -1,11 +1,23 @@ package fr.romanet.vj.apps.myrealestateagency.entities; import androidx.room.ColumnInfo; +import androidx.room.Embedded; import androidx.room.Entity; +import androidx.room.ForeignKey; import androidx.room.Index; import androidx.room.PrimaryKey; +import androidx.room.TypeConverter; -@Entity(tableName = "property", indices = {@Index(value = {"address","longitude", "latitude"}, unique = true)}) +import java.sql.Date; + +import static androidx.room.ForeignKey.CASCADE; + +@Entity(tableName = "property", + indices = {@Index(value = "property_id") ,@Index(value = {"address","longitude", "latitude"}, unique = true)}, + foreignKeys = @ForeignKey(entity = Agency.class, + parentColumns = "agency_id", + childColumns = "belongs_agency_id", + onDelete = CASCADE)) public class Property { @PrimaryKey(autoGenerate = true) @@ -19,12 +31,18 @@ public class Property { public String address; @ColumnInfo(name = "longitude") - public double longitude; + public long longitude; @ColumnInfo(name = "latitude") - public double latitude; + public long latitude; - public Property(String description, String address, double longitude, double latitude) + //@Embedded + //public PropertyStatue propertyStatue; + + @ColumnInfo(name = "belongs_agency_id") + public int belongsToAgencyId; + + public Property(String description, String address, long longitude, long latitude) { propertyId = 0; this.description = description; @@ -32,4 +50,17 @@ public class Property { this.longitude = longitude; this.latitude = latitude; } + + public static class Converters { + + @TypeConverter + public static Date toDate(Long dateLong){ + return dateLong == null ? null: new Date(dateLong); + } + + @TypeConverter + public static Long fromDate(Date date){ + return date == null ? null : date.getTime(); + } + } } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyStatue.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyStatue.java index 79672f8..a72bfbb 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyStatue.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyStatue.java @@ -2,24 +2,14 @@ package fr.romanet.vj.apps.myrealestateagency.entities; import androidx.annotation.Nullable; import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.ForeignKey; -import androidx.room.PrimaryKey; -import androidx.room.TypeConverter; +import androidx.room.Embedded; import java.sql.Date; -import static androidx.room.ForeignKey.CASCADE; - -@Entity(tableName = "property_statue", foreignKeys = @ForeignKey(entity = Property.class, parentColumns = "property_id", childColumns = "belongs_property_id", onDelete = CASCADE)) public class PropertyStatue{ - @ColumnInfo(name = "statue_id") - @PrimaryKey(autoGenerate = true) - public int statueId; - - @ColumnInfo(name = "statue_description") - public boolean statueDescription; + @ColumnInfo(name = "statue_sale") + public boolean statueSale; @ColumnInfo(name = "sold_date") @Nullable @@ -28,27 +18,7 @@ public class PropertyStatue{ @ColumnInfo(name = "price") public double price; - @ColumnInfo(name = "belongs_property_id") - public int propertyId; + @Embedded + public PropertyType propertyType; - public PropertyStatue(boolean statueDescription, double price, int propertyId) - { - statueId = 0; - this.statueDescription = statueDescription; - this.price = price; - this.propertyId = propertyId; - } - - public static class Converters { - - @TypeConverter - public static Date toDate(Long dateLong){ - return dateLong == null ? null: new Date(dateLong); - } - - @TypeConverter - public static Long fromDate(Date date){ - return date == null ? null : date.getTime(); - } - } } diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyType.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyType.java index 21bc9f6..f0f0899 100644 --- a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyType.java +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyType.java @@ -1,19 +1,9 @@ package fr.romanet.vj.apps.myrealestateagency.entities; import androidx.room.ColumnInfo; -import androidx.room.Entity; -import androidx.room.ForeignKey; -import androidx.room.PrimaryKey; -import static androidx.room.ForeignKey.CASCADE; - -@Entity(tableName = "property_type", foreignKeys = @ForeignKey(entity = Property.class, parentColumns = "property_id", childColumns = "belongs_property_id", onDelete = CASCADE)) public class PropertyType { - @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "type_id") - public int typeId; - @ColumnInfo(name = "type_description") public String typeDescription; @@ -23,15 +13,4 @@ public class PropertyType { @ColumnInfo(name = "surface_area") public float surfaceArea; - @ColumnInfo(name = "belongs_property_id") - public int propertyId; - - public PropertyType(String typeDescription, int numberRooms, float surfaceArea, int propertyId) - { - typeId = 0; - this.typeDescription = typeDescription; - this.numberRooms = numberRooms; - this.surfaceArea = surfaceArea; - this.propertyId = propertyId; - } }