Well, off the top of my head this may require some changes to the MetaMapper
code to get working. Looking at the example PG code that you linked to, they
use setObject on the PreparedStatement to insert CIDR objects. The problem
is that the current MetaMapper code *always* uses the overload of setObject
that takes the type parameter, and as you've discovered, there is no type
for CIDR. We could maybe add a flag or special Type that tells MetaMapper to
use the setObject without the type...

Derek

On Tue, Aug 25, 2009 at 9:18 PM, Franz Bettag <fr...@bett.ag> wrote:

>
> Hey guys,
>
> i've been successfull with lift so far, now i want to do some more in
> depth stuff. anyway, i am missing the postgresql cidr/ip datatypes.
> Since they mostly work like strings i did the following:
>
> import _root_.net.liftweb.mapper._
> import _root_.net.liftweb.http.{S, FieldError}
> import _root_.java.sql.{ResultSet, Types}
> import _root_.java.util.regex._
> import _root_.scala.xml.Text
>
> object MappedCIDR {
>        val ipv4 =
> Pattern.compile("^25[0-5]|2[0-4]\\d|[01]\\d{2}|\\d{1,2})(\
> \.(25[0-5]|2[0-4]\\d|[01]\\d{2}|\\d{1,2})){3}(/(3[012]|[12]\\d|\\d)$")
>        val ipv6 = Pattern.compile("^\\w*\\:\\w*\\:\\w*$")
>        def valid(ip: String): Boolean = ipv4.matcher(ip).matches ||
> ipv6.matcher(ip).matches
>        def validIPAddr_?(ip: String) = valid(ip)
> }
>
>
> class MappedCIDR[T<:Mapper[T]](owner: T, maxLen: Int) extends
> MappedString[T](owner, maxLen) {
>
>        /**
>         * Get the JDBC SQL Type for this field
>         */
>        def targetSQLType = Types.VARCHAR
>
>        override def setFilter = notNull _ :: toLower _ :: trim _ ::
> super.setFilter
>        override def validate =  {
>                (
>                        if (MappedCIDR.ipv4.matcher(i_is_!).matches ||
> MappedCIDR.ipv6.matcher(i_is_!).matches()) Nil
>                        else List(FieldError(this,
> Text(S.??("invalid.ip.address"))))
>                ) ::: super.validate
>        }
>
> }
>
> The question is, how would one go about implementing a type which is
> not in sql.Types? ;)
> I found some jdbc driver extensions for that:
> http://oak.cats.ohiou.edu/~rf358197/jdbc/2/<http://oak.cats.ohiou.edu/%7Erf358197/jdbc/2/>
>
> Patching the current driver is painless, but i am still not sure how
> to go on.
>
> Can anyone gimme some advice at what code i should look which would
> give me the best example for this?
>
> Thanks!
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to