--- /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: