# HG changeset patch # User Tomas Zeman # Date 1328863985 -3600 # Node ID fe20033afdf13d57536635fffa70b460c20f6e71 # Parent 828565e7f57147eabcee24e685fa7d6947cf4aab bf245fe6966abb9a Geo entities (address, city, country) diff -r 828565e7f571 -r fe20033afdf1 src/main/scala/fis/geo/model/Address.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 + * + * 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: diff -r 828565e7f571 -r fe20033afdf1 src/main/scala/fis/geo/model/City.scala --- /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 + * + * 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: diff -r 828565e7f571 -r fe20033afdf1 src/main/scala/fis/geo/model/Country.scala --- /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 + * + * 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: diff -r 828565e7f571 -r fe20033afdf1 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/GeoSchema.scala Fri Feb 10 09:53:05 2012 +0100 @@ -0,0 +1,35 @@ +/* + * Copyright 2011 Tomas Zeman + * + * 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: