diff --git a/app/src/androidTest/java/fr/romanet/vj/apps/myrealestateagency/ExampleInstrumentedTest.java b/app/src/androidTest/java/fr/romanet/vj/apps/myrealestateagency/ExampleInstrumentedTest.java index d24043f..80e7c3a 100644 --- a/app/src/androidTest/java/fr/romanet/vj/apps/myrealestateagency/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/fr/romanet/vj/apps/myrealestateagency/ExampleInstrumentedTest.java @@ -2,13 +2,13 @@ package fr.romanet.vj.apps.myrealestateagency; import android.content.Context; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Instrumented test, which will execute on an Android device. 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 9c16239..c635faf 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 @@ -1,14 +1,61 @@ package fr.romanet.vj.apps.myrealestateagency; import androidx.appcompat.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import java.util.ArrayList; +import java.util.List; +import android.os.AsyncTask; import android.os.Bundle; +import fr.romanet.vj.apps.myrealestateagency.database.RealEstateAgencyDatabase; +import fr.romanet.vj.apps.myrealestateagency.entities.Agency; +import fr.romanet.vj.apps.myrealestateagency.entities.AgencyWithAgents; +import fr.romanet.vj.apps.myrealestateagency.entities.Agent; + public class MainActivity extends AppCompatActivity { + private static final String TAG = "MyActivity"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } + + 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); + + Agent test = new Agent("Bader", "Guetari", 1); + RealEstateAgencyDatabase.getInstance(getApplicationContext()) + .agentDao() + .insertAgent(test); + + Agency test2 = new Agency("AgenceOFMarseille"); + RealEstateAgencyDatabase.getInstance(getApplicationContext()) + .agencyDao().insertAgency(test2); + + Agent test3 = new Agent("Khalil", "Guetari", 2); + RealEstateAgencyDatabase.getInstance(getApplicationContext()) + .agentDao() + .insertAgent(test3); + + Agent test10 = new Agent("Achref", "Guetari", 1); + RealEstateAgencyDatabase.getInstance(getApplicationContext()) + .agentDao() + .insertAgent(test10); + + 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"; + + } + }).start(); + } } \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyDao.java new file mode 100644 index 0000000..aef7f2d --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyDao.java @@ -0,0 +1,19 @@ +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.Agency; + +@Dao +public interface AgencyDao { + + @Query("SELECT * FROM agency") + List getAgencyList(); + + @Insert + void insertAgency(Agency agency); +} \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithAgentsDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithAgentsDao.java new file mode 100644 index 0000000..1127ce0 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgencyWithAgentsDao.java @@ -0,0 +1,17 @@ +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.AgencyWithAgents; + +@Dao +public interface AgencyWithAgentsDao { + + @Transaction + @Query("SELECT * FROM agency") + List getAgenciesAndAgent(); +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgentDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgentDao.java new file mode 100644 index 0000000..c8f6211 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/AgentDao.java @@ -0,0 +1,19 @@ +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.Agent; + +@Dao +public interface AgentDao { + + @Query("SELECT * FROM agent") + List getAgentList(); + + @Insert + void insertAgent(Agent agent); +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java new file mode 100644 index 0000000..52cdc4f --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyDao.java @@ -0,0 +1,18 @@ +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.Property; + +@Dao +public interface PropertyDao { + @Query("SELECT * FROM property") + List getPropertyList(); + + @Insert + void insertProperty(Property property); +} 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 new file mode 100644 index 0000000..7259807 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyStatueDao.java @@ -0,0 +1,19 @@ +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 new file mode 100644 index 0000000..e319e33 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/dao/PropertyTypeDao.java @@ -0,0 +1,18 @@ +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 new file mode 100644 index 0000000..9f115c4 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/database/RealEstateAgencyDatabase.java @@ -0,0 +1,48 @@ +package fr.romanet.vj.apps.myrealestateagency.database; + +import android.content.Context; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; +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.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; + +@Database(entities = {Agency.class, Agent.class}, version = 1) +@TypeConverters({PropertyStatue.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; + } + + +} diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agency.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agency.java new file mode 100644 index 0000000..47f2c77 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agency.java @@ -0,0 +1,30 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +//Parent class of agent (indeed, zero or many agents can work in an agency) +@Entity(tableName = "agency", + indices = {@Index("agency_id"), + @Index(value = {"agency_name"}, unique = true)}) +public class Agency { + + @ColumnInfo(name = "agency_id") + @PrimaryKey(autoGenerate = true) + public int agencyId; + + @ColumnInfo(name = "agency_name") + public String agencyName; + + public Agency(String agencyName) + { + agencyId = 0; + this.agencyName = agencyName; + } + + public int getAgencyId() { + return agencyId; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithAgents.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithAgents.java new file mode 100644 index 0000000..387dfea --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/AgencyWithAgents.java @@ -0,0 +1,23 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import androidx.room.Embedded; +import androidx.room.Relation; + +import java.util.List; + +public class AgencyWithAgents { + @Embedded public Agency agency; + @Relation( + parentColumn = "agency_id", + entityColumn = "agency_employer_id" + ) + public List agents; + + public Agency getAgency() { + return agency; + } + + public List getAgents() { + return agents; + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agent.java b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agent.java new file mode 100644 index 0000000..daead8a --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Agent.java @@ -0,0 +1,45 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.ForeignKey; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +import static androidx.room.ForeignKey.CASCADE; + +//Child class of Agency (indeed, an agent work only in one agency) +@Entity(tableName = "agent", + indices = {@Index(value = {"agent_first_name", "agent_last_name"}, unique = true)}, + foreignKeys = @ForeignKey(entity = Agency.class, + parentColumns = "agency_id", + childColumns = "agency_employer_id", + onDelete = CASCADE)) +public class Agent { + + @ColumnInfo(name = "agent_id") + @PrimaryKey(autoGenerate = true) + public int agentId; + + @ColumnInfo(name = "agent_first_name") + public String agentFirstName; + + @ColumnInfo(name = "agent_last_name") + public String agentLastName; + + @ColumnInfo(name = "agency_employer_id", index = true) + public int agencyEmployerId; + + public Agent(String agentFirstName, String agentLastName, int agencyEmployerId) + { + agentId = 0; + this.agentFirstName = agentFirstName; + this.agentLastName = agentLastName; + this.agencyEmployerId = agencyEmployerId; + } + + public String getAgentName() + { + return agentFirstName; + } +} 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 new file mode 100644 index 0000000..db2e0a9 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/Property.java @@ -0,0 +1,35 @@ +package fr.romanet.vj.apps.myrealestateagency.entities; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +@Entity(tableName = "property", indices = {@Index(value = {"address","longitude", "latitude"}, unique = true)}) +public class Property { + + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "property_id") + public int propertyId; + + @ColumnInfo(name = "description") + public String description; + + @ColumnInfo(name = "address") + public String address; + + @ColumnInfo(name = "longitude") + public double longitude; + + @ColumnInfo(name = "latitude") + public double latitude; + + public Property(String description, String address, double longitude, double latitude) + { + propertyId = 0; + this.description = description; + this.address = address; + this.longitude = longitude; + this.latitude = latitude; + } +} 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 new file mode 100644 index 0000000..79672f8 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyStatue.java @@ -0,0 +1,54 @@ +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 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 = "sold_date") + @Nullable + public Date soldDate; + + @ColumnInfo(name = "price") + public double price; + + @ColumnInfo(name = "belongs_property_id") + public int propertyId; + + 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 new file mode 100644 index 0000000..21bc9f6 --- /dev/null +++ b/app/src/main/java/fr/romanet/vj/apps/myrealestateagency/entities/PropertyType.java @@ -0,0 +1,37 @@ +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; + + @ColumnInfo(name = "number_rooms") + public int numberRooms; + + @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; + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc2444..2c36633 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,6 +7,7 @@ tools:context=".MainActivity"> +