bf245fe6966abb9a Geo entities (address, city, country)
authorTomas Zeman <tzeman@volny.cz>
Fri, 10 Feb 2012 09:53:05 +0100
changeset 9 fe20033afdf1
parent 8 828565e7f571
child 10 fc7b6a99deb4
bf245fe6966abb9a Geo entities (address, city, country)
src/main/scala/fis/geo/model/Address.scala
src/main/scala/fis/geo/model/City.scala
src/main/scala/fis/geo/model/Country.scala
src/main/scala/fis/geo/model/GeoSchema.scala
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/scala/fis/geo/model/Address.scala	Fri Feb 10 09:53:05 2012 +0100
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2011 Tomas Zeman <tzeman@volny.cz>
+ *
+ * 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
+ * distributed 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 the specific language governing permissions and
+ * limitations under the License.
+ */
+package fis.geo.model
+
+import net.liftweb.record.{MetaRecord, Record}
+import net.liftweb.record.field._
+import net.liftweb.squerylrecord.KeyedRecord
+import org.squeryl.annotations.Column
+
+class Address private() extends Record[Address] with KeyedRecord[Long] {
+  def meta = Address
+
+  @Column(name="id")
+  val idField = new LongField(this)
+
+  val streetName = new StringField(this, "")
+  val streetNum = new StringField(this, "")
+  val cityId = new LongField(this)
+  val zipCode = new StringField(this, "")
+
+  lazy val city = GeoSchema.cityToAddresses.rightStateful(this)
+}
+
+object Address extends Address with MetaRecord[Address]
+
+// vim: set ts=2 sw=2 et:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/scala/fis/geo/model/City.scala	Fri Feb 10 09:53:05 2012 +0100
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Tomas Zeman <tzeman@volny.cz>
+ *
+ * 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
+ * distributed 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 the specific language governing permissions and
+ * limitations under the License.
+ */
+package fis.geo.model
+
+import fis.base.model.{Entity, MetaEntity}
+import net.liftweb.record.{MetaRecord, Record}
+import net.liftweb.record.field._
+
+class City private() extends Record[City] with Entity[City] {
+  def meta = City
+
+  val countryId = new LongField(this)
+  lazy val country = GeoSchema.countryToCities.rightStateful(this)
+}
+
+object City extends City with MetaRecord[City] with MetaEntity[City] {
+  def getTable = GeoSchema.cities
+}
+
+// vim: set ts=2 sw=2 et:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/scala/fis/geo/model/Country.scala	Fri Feb 10 09:53:05 2012 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2011 Tomas Zeman <tzeman@volny.cz>
+ *
+ * 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
+ * distributed 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 the specific language governing permissions and
+ * limitations under the License.
+ */
+package fis.geo.model
+
+import fis.base.model.{Entity, MetaEntity}
+import net.liftweb.record.{MetaRecord, Record}
+import net.liftweb.record.field._
+
+class Country private() extends Record[Country] with Entity[Country] {
+  def meta = Country
+
+  val iso2 = new StringField(this, 2)
+  val iso3 = new StringField(this, 3)
+  lazy val cities = GeoSchema.countryToCities.left(this)
+}
+
+object Country extends Country with MetaRecord[Country] with
+  MetaEntity[Country] {
+  def getTable = GeoSchema.countries
+}
+
+// vim: set ts=2 sw=2 et:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/scala/fis/geo/model/GeoSchema.scala	Fri Feb 10 09:53:05 2012 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2011 Tomas Zeman <tzeman@volny.cz>
+ *
+ * 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
+ * distributed 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 the specific language governing permissions and
+ * limitations under the License.
+ */
+package fis.geo.model
+
+import fis.base.model.BaseSchema
+import net.liftweb.squerylrecord.RecordTypeMode._
+
+trait GeoSchema extends BaseSchema {
+  val cities = entityTable[City]("city")
+  val addresses = table[Address]("address")
+  val countries = entityTable[Country]("country")
+
+  val cityToAddresses = oneToManyRelation(cities, addresses).
+    via((c, a) => c.id === a.cityId)
+
+  val countryToCities = oneToManyRelation(countries, cities).
+    via((country, city) => country.id === city.countryId)
+}
+
+object GeoSchema extends GeoSchema
+
+// vim: set ts=2 sw=2 et: