[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

After reading Naftoli's post i checked the way inner object laziness
is implemented. And it appears to be not thread safe.
Following code:

class A { val a = 1 }
class B { object b extends A }

Generates getter for b as follows:

public final B$b$ b();
  Code:
   0:   aload_0
   1:   getfield#18; //Field b$module:LB$b$;
   4:   ifnonnull   19
   7:   aload_0
   8:   new #20; //class B$b$
   11:  dup
   12:  aload_0
   13:  invokespecial   #23; //Method B$b$."":(LB;)V
   16:  putfield#18; //Field b$module:LB$b$;
   19:  aload_0
   20:  getfield#18; //Field b$module:LB$b$;
   23:  areturn

Looks like its not synchronized? I also looked at lazy vals generated
code (when i was thinking on val based Records) and dropped the idea
because of synchronization for every single access to a field.
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread David Pollak
I've got a change on review board that will pick up vals and lazy vals that
are MappedFields.  See http://reviewboard.liftweb.net/r/40/
However, until certain defects in the Scala compiler (
https://lampsvn.epfl.ch/trac/scala/ticket/2463 and
https://lampsvn.epfl.ch/trac/scala/ticket/1006) are fixed, these features
are dangerous and should not be used.

2009/10/12 Oleg G. 

>
> Very interesting reading, Naftoli! Thanks alot for such extensive
> explainations. I'm going to read your message again and again until i
> understand it all :)
>
> On 13 окт, 02:09, Naftoli Gugenheim  wrote:
> >1. Personally I would not take the approach of creating a totally new
> ORM
> >with a completely new paradigm just to eliminate the object syntax.
> >
> > The first step, as with anything in life, is to define our goals. What
> > exactly is it about the object syntax that's problematic? Is
> overridability
> > a problem? Is reflection evil? Let's make a list of our objectives over
> > here.
> > In any case, I would take the following approach.
> > Currently, the way Mapper works is as follows. Every Mapper instance
> > delegates database actions to its MetaMapper instance, which, upon
> > initialization, builds the information about its fields using reflection,
> > including the list of fields and their names.
> > Three reasons for the object approach were mentioned in this thread.
> >
> >1. To allow access to members. It was mentioned that this is now
> possible
> >with anonymous classes (val x = new Y { ... } ). What was not
> mentioned but
> >I read elsewhere IIRC is that the latter is implemented by scalac via
> >reflection. Not that that's the end of the world, especially as we're
> >relying on reflection as it is. Also, at least the argument
> remains--allow
> >one to choose whichever syntax one desires. On the other hand, if
> Mapper
> >would not use reflection, objects, being lazy, would not be known
> about
> >until initialized, thus requiring the user to manually reference them.
> >2. To disambiguate members that reference or return other fields.
> >However, this argument assumes that the list of fields is built via
> >reflection; maybe it should not be.
> >3. To allow the field names to become available via reflection. I
> don't
> >there's any way around this other than a compiler plugin (or maybe
> >scala.reflect.Code?) So my suggestion would require passing the field
> name
> >to a constructor. On the other hand, as I mentioned in a previous post
> and
> >will explain better below, passing "this" to the constructor can be
> >eliminated.
> >
> > So the first reason basically says, "since people may need to use
> 'object,'
> > and objects are lazy and we won't necessarily know about them, we had
> better
> > use reflection." On the other hand, if we use vals most of the time, the
> > constructor itself can inform the MetaMapper of its existence, and if
> > someone wants to use 'object' or 'lazy val' then they will be required to
> > initialize it before using it with Mapper.
> > The second reason is eliminated if we don't use reflection.
> > The third reason remains valid but the question is how important it is,
> at
> > the expense of preventing subclasses from overriding fields.
> >
> > If it is acceptable to eliminate the "this" parameter and instead require
> a
> > field name parameter, then it would seem possible to use a  val based
> system
> > instead of an object + reflection system.
> >
> > Here is how it would work.
> > class Field(name: String)(implicit meta: MetaModel) {
> >   meta.register(this)}
> >
> > class Model {
> >   implicit def meta = getSingleton}
> >
> > 
> > class MyModel extends Model {
> >   val field1 = new Field("firstname")  // meta gets passed automatically
> >   val fieldRef = field1 // doesn't cause duplication because fields are
> > registered on instantiation}
> >
> > val fieldX = new Field("lastname") // compiler error because no implicit
> > MetaModel in scope
> > val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad
> > idea
> >
> > Two points.
> >
> >1. The concept of the meta being passed implicitly could probably be
> >implemented into the current system. The only thing it has to do with
> this
> >discussion is that if you would have to pass 'this' and the field name
> it
> >would be really verbose, so I'm just pointing out that we could have a
> >non-reflection-based system with about the same verbosity that we use
> now,
> >although we could make the current system less verbose too.
> >2. On the surface it would seem impossible to implement this in
> Mapper,
> >because by not using reflection there's no way to get all the object
> members
> >since objects are lazy. However since the reflection system only picks
> up
> >objects and not vals, one could solve this as follows. As long as the
> same
> >field cannot be registered twice, i

[Lift] Re: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread Naftoli Gugenheim

True, I may have to do that at some point, although I'm not super confident 
I'll find such specs.
What do you say to Ross's comment? Why is it multipart?

-
David Pollak wrote:

On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim wrote:

>
> Does this help? It's from GMail / Show original
>

GMail munges things, so I don't know if that's the original message.

You might want to figure out what the specs are for blackberry to convert
messages and see why this kind of message is not being converted.


>
> Delivered-To: naftoli...@gmail.com
> Received: by 10.86.30.11 with SMTP id d11cs12302fgd;
>Wed, 7 Oct 2009 12:28:57 -0700 (PDT)
> Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Return-Path: 
> Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122])
>by mx.google.com with ESMTP id
> 1si71430296yxe.11.2009.10.07.12.28.55;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Received-SPF: neutral (google.com: 174.143.236.122 is neither
> permitted nor denied by best guess record for domain of
> yehu...@lrbcol.org) client-ip=174.143.236.122;
> Authentication-Results: mx.google.com; spf=neutral (google.com:
> 174.143.236.122 is neither permitted nor denied by best guess record
> for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org
> Received: from lrbcol (localhost [127.0.0.1])
>by lrbcol (Postfix) with ESMTP id CDB51A0055
>for ; Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
> From: yehu...@lrbcol.org
> To: naftoli...@gmail.com
> Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol>
> Subject: Detail of Transportation #843
> MIME-Version: 1.0
> Content-Type: multipart/alternative;
>boundary="=_Part_0_1227069312.1254943735894"
> Date: Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
>
> --=_Part_0_1227069312.1254943735894
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 7bit
>
> naftuli gugenheim; 617 6st
> ; M: 7325342893; From : ; To : 39 hearth ct;
> Request URL: [TODO]
> --=_Part_0_1227069312.1254943735894--
>
>
> On Mon, Oct 12, 2009 at 6:15 PM, David Pollak
>  wrote:
> > Please send some test email to an account you can access using
> Thunderbird.
> >  Open the message and look at the message source.  Is it really plain
> text?
> >  What do the headers say it is?
> >
> > On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim  >
> > wrote:
> >>
> >> Hi. I'm sending an email using PlainMailBodyType that contains a URL.
> >> Normally when a BlackBerry receives a plain text email it
> >> automatically hyperlinks URLS and potential phone numbers. For some
> >> reason this email is not being hyperlinked on the BlackBerry. Is it
> >> possible that it's somehow not purely plain text? How would I solve
> >> this? I don't want to send HTML messages because some recipients may
> >> not be able to view it.
> >> Thanks.
> >>
> >>
> >
> >
> >
> > --
> > Lift, the simply functional web framework http://liftweb.net
> > Beginning Scala http://www.apress.com/book/view/1430219890
> > Follow me: http://twitter.com/dpp
> > Surf the harmonics
> >
> > >
> >
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics



--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim wrote:

>
> Does this help? It's from GMail / Show original
>

GMail munges things, so I don't know if that's the original message.

You might want to figure out what the specs are for blackberry to convert
messages and see why this kind of message is not being converted.


>
> Delivered-To: naftoli...@gmail.com
> Received: by 10.86.30.11 with SMTP id d11cs12302fgd;
>Wed, 7 Oct 2009 12:28:57 -0700 (PDT)
> Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Return-Path: 
> Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122])
>by mx.google.com with ESMTP id
> 1si71430296yxe.11.2009.10.07.12.28.55;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Received-SPF: neutral (google.com: 174.143.236.122 is neither
> permitted nor denied by best guess record for domain of
> yehu...@lrbcol.org) client-ip=174.143.236.122;
> Authentication-Results: mx.google.com; spf=neutral (google.com:
> 174.143.236.122 is neither permitted nor denied by best guess record
> for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org
> Received: from lrbcol (localhost [127.0.0.1])
>by lrbcol (Postfix) with ESMTP id CDB51A0055
>for ; Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
> From: yehu...@lrbcol.org
> To: naftoli...@gmail.com
> Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol>
> Subject: Detail of Transportation #843
> MIME-Version: 1.0
> Content-Type: multipart/alternative;
>boundary="=_Part_0_1227069312.1254943735894"
> Date: Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
>
> --=_Part_0_1227069312.1254943735894
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 7bit
>
> naftuli gugenheim; 617 6st
> ; M: 7325342893; From : ; To : 39 hearth ct;
> Request URL: [TODO]
> --=_Part_0_1227069312.1254943735894--
>
>
> On Mon, Oct 12, 2009 at 6:15 PM, David Pollak
>  wrote:
> > Please send some test email to an account you can access using
> Thunderbird.
> >  Open the message and look at the message source.  Is it really plain
> text?
> >  What do the headers say it is?
> >
> > On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim  >
> > wrote:
> >>
> >> Hi. I'm sending an email using PlainMailBodyType that contains a URL.
> >> Normally when a BlackBerry receives a plain text email it
> >> automatically hyperlinks URLS and potential phone numbers. For some
> >> reason this email is not being hyperlinked on the BlackBerry. Is it
> >> possible that it's somehow not purely plain text? How would I solve
> >> this? I don't want to send HTML messages because some recipients may
> >> not be able to view it.
> >> Thanks.
> >>
> >>
> >
> >
> >
> > --
> > Lift, the simply functional web framework http://liftweb.net
> > Beginning Scala http://www.apress.com/book/view/1430219890
> > Follow me: http://twitter.com/dpp
> > Surf the harmonics
> >
> > >
> >
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Extend the tables that like the migration in the Rails ?

2009-10-12 Thread Neil.Lv

Yeah, I see it now,  and it works !

1):
### I add a column in the User model, like this
   class User extends MegaProtoUser[User] {
 ...
 /*  add column dos4 */
 object dos4 extends MappedBoolean(this)
 ...
   }
   result:  INFO - ALTER TABLE users ADD COLUMN do4 SMALLINT
###

2):
### I remove a column in the User model, like this
   class User extends MegaProtoUser[User] {
 ...
 /*  remove column dos4 */
 /*  object dos4 extends MappedBoolean(this) */
 ...
   }
   result:  Don't remove the cloumn dos4.
###

3):
How can i remove the column in the liftweb (change the structure of
the table), just like the execute raw SQL statement.

   execute("SELECT * from users")  # Rails code in Migration


On Oct 13, 10:16 am, David Pollak 
wrote:
> Just add the column to the User model.  Schemifier will add the column to
> the RDBMS.
>
>
>
> On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv  wrote:
>
> > Yeah, I have add this code in the Boot.scala.
>
> > ###
> >Schemifier.schemify(true, Log.infoF _, User)
> > ###
>
> > But i want to add a column into the user table (extend the user table)
> > now, and how can i achieve this purpose.
>
> > Ex:
> > ### Original user table like this
> >  idemail   first_name last_name
> >  1   a...@b.comhelloworld
> > ### But the user table need to extend (add a column, like this)
> >  idemail   first_name last_name   sex
> >  1   a...@b.comhelloworld   0
> > ###
>
> >   I add this code in the User model and restart the server, the table
> > don't change anything !
> >   ###
> >Schemifier.schemify(true, Log.infoF _, User)  # in the Boot.scala
>
> >   class User extends MegaProtoUser[User] {
> > ...
> > object desc extends MappedPoliteString(this, 128)
> > ...
> >   }
> >   ###
>
> >   How the liftweb can do this ?
>
> > Cheers,
> >   Neil
>
> > On Oct 12, 6:10 pm, Peter Robinett  wrote:
> > > Is User added to Schemefier in Boot.scala? It should look something
> > > like: Schemifier.schemify(true, Log.infoF _, User)
>
> > > Peter Robinett
>
> > > On Oct 12, 11:22 am, "Neil.Lv"  wrote:
>
> > > > Hi all,
>
> > > >I don't know whether there is a mechanism that like the migration
> > > > of the Rails in the Liftweb, and how can we
>
> > > > extend the table, such as add a column "desc " into a table users (OR
> > > > user ?).
>
> > > >I add this code in the User model and restart the server, the table
> > > > don't change anything !
> > > >###
> > > >class User extends MegaProtoUser[User] {
> > > >  ...
> > > >  object desc extends MappedPoliteString(this, 128)
> > > >  ...
> > > >}
> > > >###
>
> > > >   How can i do if i want to achieve this purpose ?
>
> > > >   Thanks for any suggestion!
>
> > > > Cheers,
> > > >   Neil
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Extend the tables that like the migration in the Rails ?

2009-10-12 Thread David Pollak
Just add the column to the User model.  Schemifier will add the column to
the RDBMS.

On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv  wrote:

>
> Yeah, I have add this code in the Boot.scala.
>
> ###
>Schemifier.schemify(true, Log.infoF _, User)
> ###
>
> But i want to add a column into the user table (extend the user table)
> now, and how can i achieve this purpose.
>
> Ex:
> ### Original user table like this
>  idemail   first_name last_name
>  1   a...@b.comhelloworld
> ### But the user table need to extend (add a column, like this)
>  idemail   first_name last_name   sex
>  1   a...@b.comhelloworld   0
> ###
>
>   I add this code in the User model and restart the server, the table
> don't change anything !
>   ###
>Schemifier.schemify(true, Log.infoF _, User)  # in the Boot.scala
>
>   class User extends MegaProtoUser[User] {
> ...
> object desc extends MappedPoliteString(this, 128)
> ...
>   }
>   ###
>
>   How the liftweb can do this ?
>
>
> Cheers,
>   Neil
>
>
> On Oct 12, 6:10 pm, Peter Robinett  wrote:
> > Is User added to Schemefier in Boot.scala? It should look something
> > like: Schemifier.schemify(true, Log.infoF _, User)
> >
> > Peter Robinett
> >
> > On Oct 12, 11:22 am, "Neil.Lv"  wrote:
> >
> > > Hi all,
> >
> > >I don't know whether there is a mechanism that like the migration
> > > of the Rails in the Liftweb, and how can we
> >
> > > extend the table, such as add a column "desc " into a table users (OR
> > > user ?).
> >
> > >I add this code in the User model and restart the server, the table
> > > don't change anything !
> > >###
> > >class User extends MegaProtoUser[User] {
> > >  ...
> > >  object desc extends MappedPoliteString(this, 128)
> > >  ...
> > >}
> > >###
> >
> > >   How can i do if i want to achieve this purpose ?
> >
> > >   Thanks for any suggestion!
> >
> > > Cheers,
> > >   Neil
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?

2009-10-12 Thread Neil.Lv

  Yeah, it works now !

  Thanks very much !

Cheers,
  Neil


On Oct 13, 1:32 am, David Pollak 
wrote:
> You have to include -DremoteRepositories=http://scala-tools.org/repo-*
> snapshots*  in the command line.
>
>
>
> On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv  wrote:
>
> > I used this command to create my project and was successfully.
>
> > mvn archetype:generate -U -DarchetypeGroupId=net.liftweb -
> > DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6
> >   -DgroupId=demo.helloworld -DartifactId=helloworld2 -
> > Dversion=1.1-M6
>
> > If i use the 1.1-SNAPSHOT, some errors occur.
>
> >   [INFO] The desired archetype does not exist (net.liftweb:lift-
> > archetype-blank:1.1-SNAPSHOT)
>
> > Cheers,
> >  Neil
>
> > On Oct 9, 9:32 pm, David Pollak  wrote:
> > > I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at
> > 7).
> > >  There's rarely breakage on SNAPSHOT.
>
> > > On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv  wrote:
>
> > > > Hi liftweb,
>
> > > >   Is anyone has used lift to create a stable and large site ? If i
> > > > want to create this site which version that is suit,
>
> > > > lift1.0 or higher version.
>
> > > >   If someone knows the site that develop by lift or has used lift to
> > > > create a site, could you give me some ideas?
>
> > > >   Thanks very much!
>
> > > > Cheers,
> > > >  Neil
>
> > > --
> > > Lift, the simply functional web frameworkhttp://liftweb.net
> > > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > > Follow me:http://twitter.com/dpp
> > > Surf the harmonics
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Extend the tables that like the migration in the Rails ?

2009-10-12 Thread Neil.Lv

Yeah, I have add this code in the Boot.scala.

###
   Schemifier.schemify(true, Log.infoF _, User)
###

But i want to add a column into the user table (extend the user table)
now, and how can i achieve this purpose.

Ex:
### Original user table like this
  idemail   first_name last_name
  1   a...@b.comhelloworld
### But the user table need to extend (add a column, like this)
  idemail   first_name last_name   sex
  1   a...@b.comhelloworld   0
###

   I add this code in the User model and restart the server, the table
don't change anything !
   ###
   Schemifier.schemify(true, Log.infoF _, User)  # in the Boot.scala

   class User extends MegaProtoUser[User] {
 ...
 object desc extends MappedPoliteString(this, 128)
 ...
   }
   ###

  How the liftweb can do this ?


Cheers,
  Neil


On Oct 12, 6:10 pm, Peter Robinett  wrote:
> Is User added to Schemefier in Boot.scala? It should look something
> like: Schemifier.schemify(true, Log.infoF _, User)
>
> Peter Robinett
>
> On Oct 12, 11:22 am, "Neil.Lv"  wrote:
>
> > Hi all,
>
> >I don't know whether there is a mechanism that like the migration
> > of the Rails in the Liftweb, and how can we
>
> > extend the table, such as add a column "desc " into a table users (OR
> > user ?).
>
> >I add this code in the User model and restart the server, the table
> > don't change anything !
> >###
> >class User extends MegaProtoUser[User] {
> >  ...
> >  object desc extends MappedPoliteString(this, 128)
> >  ...
> >}
> >###
>
> >   How can i do if i want to achieve this purpose ?
>
> >   Thanks for any suggestion!
>
> > Cheers,
> >   Neil

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread Ross Mellgren

That looks to be plain text, although it's using multipart encoding  
where it probably does not need to.

-Ross


On Oct 12, 2009, at 9:17 PM, Naftoli Gugenheim wrote:

>
> Does this help? It's from GMail / Show original
>
> Delivered-To: naftoli...@gmail.com
> Received: by 10.86.30.11 with SMTP id d11cs12302fgd;
>Wed, 7 Oct 2009 12:28:57 -0700 (PDT)
> Received: by 10.229.19.149 with SMTP id a21mr391667qcb. 
> 29.1254943736364;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Return-Path: 
> Received: from lrbcol (174-143-236-122.static.slicehost.net  
> [174.143.236.122])
>by mx.google.com with ESMTP id 1si71430296yxe. 
> 11.2009.10.07.12.28.55;
>Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
> Received-SPF: neutral (google.com: 174.143.236.122 is neither
> permitted nor denied by best guess record for domain of
> yehu...@lrbcol.org) client-ip=174.143.236.122;
> Authentication-Results: mx.google.com; spf=neutral (google.com:
> 174.143.236.122 is neither permitted nor denied by best guess record
> for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org
> Received: from lrbcol (localhost [127.0.0.1])
>   by lrbcol (Postfix) with ESMTP id CDB51A0055
>   for ; Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
> From: yehu...@lrbcol.org
> To: naftoli...@gmail.com
> Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol>
> Subject: Detail of Transportation #843
> MIME-Version: 1.0
> Content-Type: multipart/alternative;
>   boundary="=_Part_0_1227069312.1254943735894"
> Date: Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
>
> --=_Part_0_1227069312.1254943735894
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 7bit
>
> naftuli gugenheim; 617 6st
> ; M: 7325342893; From : ; To : 39 hearth ct;
> Request URL: [TODO]
> --=_Part_0_1227069312.1254943735894--
>
>
> On Mon, Oct 12, 2009 at 6:15 PM, David Pollak
>  wrote:
>> Please send some test email to an account you can access using  
>> Thunderbird.
>>  Open the message and look at the message source.  Is it really  
>> plain text?
>>  What do the headers say it is?
>>
>> On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim > >
>> wrote:
>>>
>>> Hi. I'm sending an email using PlainMailBodyType that contains a  
>>> URL.
>>> Normally when a BlackBerry receives a plain text email it
>>> automatically hyperlinks URLS and potential phone numbers. For some
>>> reason this email is not being hyperlinked on the BlackBerry. Is it
>>> possible that it's somehow not purely plain text? How would I solve
>>> this? I don't want to send HTML messages because some recipients may
>>> not be able to view it.
>>> Thanks.
>>>
>>>
>>
>>
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Surf the harmonics
>>
>>>
>>
>
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Ross Mellgren

Before I go barking up the wrong tree, by JWS you mean Java Web Start  
or Java Web Services?

>> I must confess, Im running a fairly specific config.  
>> Essentially I
>> have an executable WAR file that has a jetty launcher class
>> inside -
>> its pretty sweet, and it works from the command line doing:
>>
>> java -jar myapp.war
>>
>> However, when I go to implement it with JWS I get this error.

-Ross

On Oct 12, 2009, at 9:05 PM, Timothy Perrett wrote:

>
> I cant really post the war im afraid, as its calling all manner of
> services on some internal systems.
>
> The strange thing with all of this is that it works when you execute:
>
> java -jar myapp.war
>
> Here's what you should need to just make a similar demo project:
>
> https://gist.github.com/3ad5cd900bbe0012b147 - the first being the
> maven build and the 2nd being the launcher im using for jetty.
>
> Cheers, Tim
>
> On Oct 13, 1:47 am, Ross Mellgren  wrote:
>> Especially since it prints out the valid class name in the log  
>> message.
>>
>> I suppose you can't post the WAR somewhere so I can have a poke?
>>
>> -Ross
>>
>> On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote:
>>
>>
>>
>>
>>
>>> Nope, I've certainly only got 1 javax.servlet in my CP.
>>
>>> Looking at the Jetty source:
>>
>>> http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/ 
>>> FilterHolder
>>
>>> It appears its using isAssignableFrom - the question is, that how  
>>> can
>>> it find the filter class usually, and be fine, but not when its  
>>> being
>>> called by the wrapper?
>>
>>> Cheers, Tim
>>
>>> On Oct 13, 1:26 am, Timothy Perrett  wrote:
 Hey Ross,
>>
 Thanks for the response - I'll just take a look; im using maven- 
 shade
 but thought id been careful about making sure i only had one
 javax.servlet I'll just double check now.
>>
 Cheers, Tim
>>
 On Oct 13, 1:22 am, Ross Mellgren  wrote:
>>
> My top-of-the-brain guess would be that you have two servlet  
> JARs in
> your classpath, and jetty is using one but your WAR is using
> another.
>>
> Really weird error though, for sure.
>>
> -Ross
>>
> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:
>>
>> Hey guys,
>>
>> I've been having a crazy problem all day (and now into the
>> extremely
>> late night). Basically, Jetty is throwing this error:
>>
>> jvm 1| java.lang.IllegalStateException: class
>> net.liftweb.http.LiftFilter is not a javax.servlet.Filter
>> jvm 1|  at org.mortbay.jetty.servlet.FilterHolder.doStart
>> (FilterHolder.java:88)
>> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
>> (AbstractLifeCycle.java:50)
>> jvm 1|  at
>> org.mortbay.jetty.servlet.ServletHandler.initialize
>> (ServletHandler.java:662)
>> jvm 1|  at org.mortbay.jetty.servlet.Context.startContext
>> (Context.java:140)
>> jvm 1|  at
>> org.mortbay.jetty.webapp.WebAppContext.startContext
>> (WebAppContext.java:1250)
>> jvm 1|  at  
>> org.mortbay.jetty.handler.ContextHandler.doStart
>> (ContextHandler.java:517)
>> jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.doStart
>> (WebAppContext.java:467)
>> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
>> (AbstractLifeCycle.java:50)
>> jvm 1|  at  
>> org.mortbay.jetty.handler.HandlerWrapper.doStart
>> (HandlerWrapper.java:130)
>> jvm 1|  at org.mortbay.jetty.Server.doStart(Server.java:
>> 224)
>> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
>> (AbstractLifeCycle.java:50)
>> jvm 1|  at Launcher.main(Launcher.java:53)
>> jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke0
>> (Native
>> Method)
>> jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke
>> (Unknown
>> Source)
>> jvm 1|  at  
>> sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (Unknown Source)
>> jvm 1|  at java.lang.reflect.Method.invoke(Unknown  
>> Source)
>> jvm 1|  at org.tanukisoftware.wrapper.WrapperJarApp.run
>> (WrapperJarApp.java:358)
>> jvm 1|  at java.lang.Thread.run(Unknown Source)
>> jvm 1| 2009-10-13 01:10:12.781::INFO:  Started
>> selectchannelconnec...@0.0.0.0:9090
>>
>> I must confess, Im running a fairly specific config.  
>> Essentially I
>> have an executable WAR file that has a jetty launcher class
>> inside -
>> its pretty sweet, and it works from the command line doing:
>>
>> java -jar myapp.war
>>
>> However, when I go to implement it with JWS I get this error.
>>
>> Any help would be really, really welcome
>>
>> Cheers, Tim
> >


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send 

[Lift] Re: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread Naftoli Gugenheim

Does this help? It's from GMail / Show original

Delivered-To: naftoli...@gmail.com
Received: by 10.86.30.11 with SMTP id d11cs12302fgd;
Wed, 7 Oct 2009 12:28:57 -0700 (PDT)
Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364;
Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
Return-Path: 
Received: from lrbcol (174-143-236-122.static.slicehost.net [174.143.236.122])
by mx.google.com with ESMTP id 1si71430296yxe.11.2009.10.07.12.28.55;
Wed, 07 Oct 2009 12:28:56 -0700 (PDT)
Received-SPF: neutral (google.com: 174.143.236.122 is neither
permitted nor denied by best guess record for domain of
yehu...@lrbcol.org) client-ip=174.143.236.122;
Authentication-Results: mx.google.com; spf=neutral (google.com:
174.143.236.122 is neither permitted nor denied by best guess record
for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org
Received: from lrbcol (localhost [127.0.0.1])
by lrbcol (Postfix) with ESMTP id CDB51A0055
for ; Wed,  7 Oct 2009 15:28:56 -0400 (EDT)
From: yehu...@lrbcol.org
To: naftoli...@gmail.com
Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol>
Subject: Detail of Transportation #843
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="=_Part_0_1227069312.1254943735894"
Date: Wed,  7 Oct 2009 15:28:56 -0400 (EDT)

--=_Part_0_1227069312.1254943735894
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

naftuli gugenheim; 617 6st
; M: 7325342893; From : ; To : 39 hearth ct;
Request URL: [TODO]
--=_Part_0_1227069312.1254943735894--


On Mon, Oct 12, 2009 at 6:15 PM, David Pollak
 wrote:
> Please send some test email to an account you can access using Thunderbird.
>  Open the message and look at the message source.  Is it really plain text?
>  What do the headers say it is?
>
> On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim 
> wrote:
>>
>> Hi. I'm sending an email using PlainMailBodyType that contains a URL.
>> Normally when a BlackBerry receives a plain text email it
>> automatically hyperlinks URLS and potential phone numbers. For some
>> reason this email is not being hyperlinked on the BlackBerry. Is it
>> possible that it's somehow not purely plain text? How would I solve
>> this? I don't want to send HTML messages because some recipients may
>> not be able to view it.
>> Thanks.
>>
>>
>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> >
>

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Naftoli Gugenheim

Wouldn't know, but have you tried looking up the source code that
throws the exception? Is Jetty trying to do anything unusual?

On Mon, Oct 12, 2009 at 8:14 PM, Timothy Perrett
 wrote:
>
> Hey guys,
>
> I've been having a crazy problem all day (and now into the extremely
> late night). Basically, Jetty is throwing this error:
>
> jvm 1    | java.lang.IllegalStateException: class
> net.liftweb.http.LiftFilter is not a javax.servlet.Filter
> jvm 1    |      at org.mortbay.jetty.servlet.FilterHolder.doStart
> (FilterHolder.java:88)
> jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1    |      at org.mortbay.jetty.servlet.ServletHandler.initialize
> (ServletHandler.java:662)
> jvm 1    |      at org.mortbay.jetty.servlet.Context.startContext
> (Context.java:140)
> jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.startContext
> (WebAppContext.java:1250)
> jvm 1    |      at org.mortbay.jetty.handler.ContextHandler.doStart
> (ContextHandler.java:517)
> jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.doStart
> (WebAppContext.java:467)
> jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1    |      at org.mortbay.jetty.handler.HandlerWrapper.doStart
> (HandlerWrapper.java:130)
> jvm 1    |      at org.mortbay.jetty.Server.doStart(Server.java:224)
> jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1    |      at Launcher.main(Launcher.java:53)
> jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source)
> jvm 1    |      at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (Unknown Source)
> jvm 1    |      at java.lang.reflect.Method.invoke(Unknown Source)
> jvm 1    |      at org.tanukisoftware.wrapper.WrapperJarApp.run
> (WrapperJarApp.java:358)
> jvm 1    |      at java.lang.Thread.run(Unknown Source)
> jvm 1    | 2009-10-13 01:10:12.781::INFO:  Started
> selectchannelconnec...@0.0.0.0:9090
>
> I must confess, Im running a fairly specific config. Essentially I
> have an executable WAR file that has a jetty launcher class inside -
> its pretty sweet, and it works from the command line doing:
>
> java -jar myapp.war
>
> However, when I go to implement it with JWS I get this error.
>
> Any help would be really, really welcome
>
> Cheers, Tim
>
> >
>

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Timothy Perrett

I cant really post the war im afraid, as its calling all manner of
services on some internal systems.

The strange thing with all of this is that it works when you execute:

java -jar myapp.war

Here's what you should need to just make a similar demo project:

https://gist.github.com/3ad5cd900bbe0012b147 - the first being the
maven build and the 2nd being the launcher im using for jetty.

Cheers, Tim

On Oct 13, 1:47 am, Ross Mellgren  wrote:
> Especially since it prints out the valid class name in the log message.
>
> I suppose you can't post the WAR somewhere so I can have a poke?
>
> -Ross
>
> On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote:
>
>
>
>
>
> > Nope, I've certainly only got 1 javax.servlet in my CP.
>
> > Looking at the Jetty source:
>
> >http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder
>
> > It appears its using isAssignableFrom - the question is, that how can
> > it find the filter class usually, and be fine, but not when its being
> > called by the wrapper?
>
> > Cheers, Tim
>
> > On Oct 13, 1:26 am, Timothy Perrett  wrote:
> >> Hey Ross,
>
> >> Thanks for the response - I'll just take a look; im using maven-shade
> >> but thought id been careful about making sure i only had one
> >> javax.servlet I'll just double check now.
>
> >> Cheers, Tim
>
> >> On Oct 13, 1:22 am, Ross Mellgren  wrote:
>
> >>> My top-of-the-brain guess would be that you have two servlet JARs in
> >>> your classpath, and jetty is using one but your WAR is using  
> >>> another.
>
> >>> Really weird error though, for sure.
>
> >>> -Ross
>
> >>> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:
>
>  Hey guys,
>
>  I've been having a crazy problem all day (and now into the  
>  extremely
>  late night). Basically, Jetty is throwing this error:
>
>  jvm 1    | java.lang.IllegalStateException: class
>  net.liftweb.http.LiftFilter is not a javax.servlet.Filter
>  jvm 1    |      at org.mortbay.jetty.servlet.FilterHolder.doStart
>  (FilterHolder.java:88)
>  jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
>  (AbstractLifeCycle.java:50)
>  jvm 1    |      at  
>  org.mortbay.jetty.servlet.ServletHandler.initialize
>  (ServletHandler.java:662)
>  jvm 1    |      at org.mortbay.jetty.servlet.Context.startContext
>  (Context.java:140)
>  jvm 1    |      at  
>  org.mortbay.jetty.webapp.WebAppContext.startContext
>  (WebAppContext.java:1250)
>  jvm 1    |      at org.mortbay.jetty.handler.ContextHandler.doStart
>  (ContextHandler.java:517)
>  jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.doStart
>  (WebAppContext.java:467)
>  jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
>  (AbstractLifeCycle.java:50)
>  jvm 1    |      at org.mortbay.jetty.handler.HandlerWrapper.doStart
>  (HandlerWrapper.java:130)
>  jvm 1    |      at org.mortbay.jetty.Server.doStart(Server.java:
>  224)
>  jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
>  (AbstractLifeCycle.java:50)
>  jvm 1    |      at Launcher.main(Launcher.java:53)
>  jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke0
>  (Native
>  Method)
>  jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke
>  (Unknown
>  Source)
>  jvm 1    |      at sun.reflect.DelegatingMethodAccessorImpl.invoke
>  (Unknown Source)
>  jvm 1    |      at java.lang.reflect.Method.invoke(Unknown Source)
>  jvm 1    |      at org.tanukisoftware.wrapper.WrapperJarApp.run
>  (WrapperJarApp.java:358)
>  jvm 1    |      at java.lang.Thread.run(Unknown Source)
>  jvm 1    | 2009-10-13 01:10:12.781::INFO:  Started
>  selectchannelconnec...@0.0.0.0:9090
>
>  I must confess, Im running a fairly specific config. Essentially I
>  have an executable WAR file that has a jetty launcher class  
>  inside -
>  its pretty sweet, and it works from the command line doing:
>
>  java -jar myapp.war
>
>  However, when I go to implement it with JWS I get this error.
>
>  Any help would be really, really welcome
>
>  Cheers, Tim
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Ross Mellgren

Especially since it prints out the valid class name in the log message.

I suppose you can't post the WAR somewhere so I can have a poke?

-Ross

On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote:

>
> Nope, I've certainly only got 1 javax.servlet in my CP.
>
> Looking at the Jetty source:
>
> http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86
>
> It appears its using isAssignableFrom - the question is, that how can
> it find the filter class usually, and be fine, but not when its being
> called by the wrapper?
>
> Cheers, Tim
>
> On Oct 13, 1:26 am, Timothy Perrett  wrote:
>> Hey Ross,
>>
>> Thanks for the response - I'll just take a look; im using maven-shade
>> but thought id been careful about making sure i only had one
>> javax.servlet I'll just double check now.
>>
>> Cheers, Tim
>>
>> On Oct 13, 1:22 am, Ross Mellgren  wrote:
>>
>>
>>
>>> My top-of-the-brain guess would be that you have two servlet JARs in
>>> your classpath, and jetty is using one but your WAR is using  
>>> another.
>>
>>> Really weird error though, for sure.
>>
>>> -Ross
>>
>>> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:
>>
 Hey guys,
>>
 I've been having a crazy problem all day (and now into the  
 extremely
 late night). Basically, Jetty is throwing this error:
>>
 jvm 1| java.lang.IllegalStateException: class
 net.liftweb.http.LiftFilter is not a javax.servlet.Filter
 jvm 1|  at org.mortbay.jetty.servlet.FilterHolder.doStart
 (FilterHolder.java:88)
 jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
 (AbstractLifeCycle.java:50)
 jvm 1|  at  
 org.mortbay.jetty.servlet.ServletHandler.initialize
 (ServletHandler.java:662)
 jvm 1|  at org.mortbay.jetty.servlet.Context.startContext
 (Context.java:140)
 jvm 1|  at  
 org.mortbay.jetty.webapp.WebAppContext.startContext
 (WebAppContext.java:1250)
 jvm 1|  at org.mortbay.jetty.handler.ContextHandler.doStart
 (ContextHandler.java:517)
 jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.doStart
 (WebAppContext.java:467)
 jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
 (AbstractLifeCycle.java:50)
 jvm 1|  at org.mortbay.jetty.handler.HandlerWrapper.doStart
 (HandlerWrapper.java:130)
 jvm 1|  at org.mortbay.jetty.Server.doStart(Server.java: 
 224)
 jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
 (AbstractLifeCycle.java:50)
 jvm 1|  at Launcher.main(Launcher.java:53)
 jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke0 
 (Native
 Method)
 jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke 
 (Unknown
 Source)
 jvm 1|  at sun.reflect.DelegatingMethodAccessorImpl.invoke
 (Unknown Source)
 jvm 1|  at java.lang.reflect.Method.invoke(Unknown Source)
 jvm 1|  at org.tanukisoftware.wrapper.WrapperJarApp.run
 (WrapperJarApp.java:358)
 jvm 1|  at java.lang.Thread.run(Unknown Source)
 jvm 1| 2009-10-13 01:10:12.781::INFO:  Started
 selectchannelconnec...@0.0.0.0:9090
>>
 I must confess, Im running a fairly specific config. Essentially I
 have an executable WAR file that has a jetty launcher class  
 inside -
 its pretty sweet, and it works from the command line doing:
>>
 java -jar myapp.war
>>
 However, when I go to implement it with JWS I get this error.
>>
 Any help would be really, really welcome
>>
 Cheers, Tim
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Timothy Perrett

Nope, I've certainly only got 1 javax.servlet in my CP.

Looking at the Jetty source:

http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86

It appears its using isAssignableFrom - the question is, that how can
it find the filter class usually, and be fine, but not when its being
called by the wrapper?

Cheers, Tim

On Oct 13, 1:26 am, Timothy Perrett  wrote:
> Hey Ross,
>
> Thanks for the response - I'll just take a look; im using maven-shade
> but thought id been careful about making sure i only had one
> javax.servlet I'll just double check now.
>
> Cheers, Tim
>
> On Oct 13, 1:22 am, Ross Mellgren  wrote:
>
>
>
> > My top-of-the-brain guess would be that you have two servlet JARs in  
> > your classpath, and jetty is using one but your WAR is using another.
>
> > Really weird error though, for sure.
>
> > -Ross
>
> > On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:
>
> > > Hey guys,
>
> > > I've been having a crazy problem all day (and now into the extremely
> > > late night). Basically, Jetty is throwing this error:
>
> > > jvm 1    | java.lang.IllegalStateException: class
> > > net.liftweb.http.LiftFilter is not a javax.servlet.Filter
> > > jvm 1    |      at org.mortbay.jetty.servlet.FilterHolder.doStart
> > > (FilterHolder.java:88)
> > > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > > jvm 1    |      at org.mortbay.jetty.servlet.ServletHandler.initialize
> > > (ServletHandler.java:662)
> > > jvm 1    |      at org.mortbay.jetty.servlet.Context.startContext
> > > (Context.java:140)
> > > jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.startContext
> > > (WebAppContext.java:1250)
> > > jvm 1    |      at org.mortbay.jetty.handler.ContextHandler.doStart
> > > (ContextHandler.java:517)
> > > jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.doStart
> > > (WebAppContext.java:467)
> > > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > > jvm 1    |      at org.mortbay.jetty.handler.HandlerWrapper.doStart
> > > (HandlerWrapper.java:130)
> > > jvm 1    |      at org.mortbay.jetty.Server.doStart(Server.java:224)
> > > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > > (AbstractLifeCycle.java:50)
> > > jvm 1    |      at Launcher.main(Launcher.java:53)
> > > jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > Method)
> > > jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> > > Source)
> > > jvm 1    |      at sun.reflect.DelegatingMethodAccessorImpl.invoke
> > > (Unknown Source)
> > > jvm 1    |      at java.lang.reflect.Method.invoke(Unknown Source)
> > > jvm 1    |      at org.tanukisoftware.wrapper.WrapperJarApp.run
> > > (WrapperJarApp.java:358)
> > > jvm 1    |      at java.lang.Thread.run(Unknown Source)
> > > jvm 1    | 2009-10-13 01:10:12.781::INFO:  Started
> > > selectchannelconnec...@0.0.0.0:9090
>
> > > I must confess, Im running a fairly specific config. Essentially I
> > > have an executable WAR file that has a jetty launcher class inside -
> > > its pretty sweet, and it works from the command line doing:
>
> > > java -jar myapp.war
>
> > > However, when I go to implement it with JWS I get this error.
>
> > > Any help would be really, really welcome
>
> > > Cheers, Tim
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] "Unused binding values for "

2009-10-12 Thread Ross Mellgren
I recently started getting this warning my log, after I started using  
more than one bind position in my default template. Looking at the  
code, it looks like it will (erroneously?) warn any time there is more  
than one bind point and you are in dev mode:

20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values  
for : content
20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values  
for : title

This is the branch of BindHelpers that looks to be causing it:

 case Some(nodes) => {
 if (Props.devMode && vals.size > 1) {
   warnOnUnused()
 }
 nodes
   }

There is another place where warnOnUnused is used in the same one, but  
it gives an adjacent log message I'm not seeing. This is the  
definition of warnOnUnused:

   def warnOnUnused() =
   Log.warn("Unused binding values for : " +
vals.keySet.filter(key => key !=  
ns.text).mkString(", "))

This seems incorrect -- any time it hits a lift:bind node, I think  
it'll log this warning for every other bound value that isn't the  
current one.

Should I file a ticket? Is this an actual warning and I'm misreading?  
The template is working correctly.

-Ross


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Timothy Perrett

Hey Ross,

Thanks for the response - I'll just take a look; im using maven-shade
but thought id been careful about making sure i only had one
javax.servlet I'll just double check now.

Cheers, Tim

On Oct 13, 1:22 am, Ross Mellgren  wrote:
> My top-of-the-brain guess would be that you have two servlet JARs in  
> your classpath, and jetty is using one but your WAR is using another.
>
> Really weird error though, for sure.
>
> -Ross
>
> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:
>
>
>
>
>
> > Hey guys,
>
> > I've been having a crazy problem all day (and now into the extremely
> > late night). Basically, Jetty is throwing this error:
>
> > jvm 1    | java.lang.IllegalStateException: class
> > net.liftweb.http.LiftFilter is not a javax.servlet.Filter
> > jvm 1    |      at org.mortbay.jetty.servlet.FilterHolder.doStart
> > (FilterHolder.java:88)
> > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> > jvm 1    |      at org.mortbay.jetty.servlet.ServletHandler.initialize
> > (ServletHandler.java:662)
> > jvm 1    |      at org.mortbay.jetty.servlet.Context.startContext
> > (Context.java:140)
> > jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.startContext
> > (WebAppContext.java:1250)
> > jvm 1    |      at org.mortbay.jetty.handler.ContextHandler.doStart
> > (ContextHandler.java:517)
> > jvm 1    |      at org.mortbay.jetty.webapp.WebAppContext.doStart
> > (WebAppContext.java:467)
> > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> > jvm 1    |      at org.mortbay.jetty.handler.HandlerWrapper.doStart
> > (HandlerWrapper.java:130)
> > jvm 1    |      at org.mortbay.jetty.Server.doStart(Server.java:224)
> > jvm 1    |      at org.mortbay.component.AbstractLifeCycle.start
> > (AbstractLifeCycle.java:50)
> > jvm 1    |      at Launcher.main(Launcher.java:53)
> > jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> > jvm 1    |      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> > Source)
> > jvm 1    |      at sun.reflect.DelegatingMethodAccessorImpl.invoke
> > (Unknown Source)
> > jvm 1    |      at java.lang.reflect.Method.invoke(Unknown Source)
> > jvm 1    |      at org.tanukisoftware.wrapper.WrapperJarApp.run
> > (WrapperJarApp.java:358)
> > jvm 1    |      at java.lang.Thread.run(Unknown Source)
> > jvm 1    | 2009-10-13 01:10:12.781::INFO:  Started
> > selectchannelconnec...@0.0.0.0:9090
>
> > I must confess, Im running a fairly specific config. Essentially I
> > have an executable WAR file that has a jetty launcher class inside -
> > its pretty sweet, and it works from the command line doing:
>
> > java -jar myapp.war
>
> > However, when I go to implement it with JWS I get this error.
>
> > Any help would be really, really welcome
>
> > Cheers, Tim
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Ross Mellgren

My top-of-the-brain guess would be that you have two servlet JARs in  
your classpath, and jetty is using one but your WAR is using another.

Really weird error though, for sure.

-Ross

On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote:

>
> Hey guys,
>
> I've been having a crazy problem all day (and now into the extremely
> late night). Basically, Jetty is throwing this error:
>
> jvm 1| java.lang.IllegalStateException: class
> net.liftweb.http.LiftFilter is not a javax.servlet.Filter
> jvm 1|  at org.mortbay.jetty.servlet.FilterHolder.doStart
> (FilterHolder.java:88)
> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1|  at org.mortbay.jetty.servlet.ServletHandler.initialize
> (ServletHandler.java:662)
> jvm 1|  at org.mortbay.jetty.servlet.Context.startContext
> (Context.java:140)
> jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.startContext
> (WebAppContext.java:1250)
> jvm 1|  at org.mortbay.jetty.handler.ContextHandler.doStart
> (ContextHandler.java:517)
> jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.doStart
> (WebAppContext.java:467)
> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1|  at org.mortbay.jetty.handler.HandlerWrapper.doStart
> (HandlerWrapper.java:130)
> jvm 1|  at org.mortbay.jetty.Server.doStart(Server.java:224)
> jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
> (AbstractLifeCycle.java:50)
> jvm 1|  at Launcher.main(Launcher.java:53)
> jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
> Source)
> jvm 1|  at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (Unknown Source)
> jvm 1|  at java.lang.reflect.Method.invoke(Unknown Source)
> jvm 1|  at org.tanukisoftware.wrapper.WrapperJarApp.run
> (WrapperJarApp.java:358)
> jvm 1|  at java.lang.Thread.run(Unknown Source)
> jvm 1| 2009-10-13 01:10:12.781::INFO:  Started
> selectchannelconnec...@0.0.0.0:9090
>
> I must confess, Im running a fairly specific config. Essentially I
> have an executable WAR file that has a jetty launcher class inside -
> its pretty sweet, and it works from the command line doing:
>
> java -jar myapp.war
>
> However, when I go to implement it with JWS I get this error.
>
> Any help would be really, really welcome
>
> Cheers, Tim
>
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] net.liftweb.http.LiftFilter is not a javax.servlet.Filter

2009-10-12 Thread Timothy Perrett

Hey guys,

I've been having a crazy problem all day (and now into the extremely
late night). Basically, Jetty is throwing this error:

jvm 1| java.lang.IllegalStateException: class
net.liftweb.http.LiftFilter is not a javax.servlet.Filter
jvm 1|  at org.mortbay.jetty.servlet.FilterHolder.doStart
(FilterHolder.java:88)
jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
jvm 1|  at org.mortbay.jetty.servlet.ServletHandler.initialize
(ServletHandler.java:662)
jvm 1|  at org.mortbay.jetty.servlet.Context.startContext
(Context.java:140)
jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.startContext
(WebAppContext.java:1250)
jvm 1|  at org.mortbay.jetty.handler.ContextHandler.doStart
(ContextHandler.java:517)
jvm 1|  at org.mortbay.jetty.webapp.WebAppContext.doStart
(WebAppContext.java:467)
jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
jvm 1|  at org.mortbay.jetty.handler.HandlerWrapper.doStart
(HandlerWrapper.java:130)
jvm 1|  at org.mortbay.jetty.Server.doStart(Server.java:224)
jvm 1|  at org.mortbay.component.AbstractLifeCycle.start
(AbstractLifeCycle.java:50)
jvm 1|  at Launcher.main(Launcher.java:53)
jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
jvm 1|  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
jvm 1|  at sun.reflect.DelegatingMethodAccessorImpl.invoke
(Unknown Source)
jvm 1|  at java.lang.reflect.Method.invoke(Unknown Source)
jvm 1|  at org.tanukisoftware.wrapper.WrapperJarApp.run
(WrapperJarApp.java:358)
jvm 1|  at java.lang.Thread.run(Unknown Source)
jvm 1| 2009-10-13 01:10:12.781::INFO:  Started
selectchannelconnec...@0.0.0.0:9090

I must confess, Im running a fairly specific config. Essentially I
have an executable WAR file that has a jetty launcher class inside -
its pretty sweet, and it works from the command line doing:

java -jar myapp.war

However, when I go to implement it with JWS I get this error.

Any help would be really, really welcome

Cheers, Tim

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread David Pollak
Please send some test email to an account you can access using Thunderbird.
 Open the message and look at the message source.  Is it really plain text?
 What do the headers say it is?

On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim wrote:

>
> Hi. I'm sending an email using PlainMailBodyType that contains a URL.
> Normally when a BlackBerry receives a plain text email it
> automatically hyperlinks URLS and potential phone numbers. For some
> reason this email is not being hyperlinked on the BlackBerry. Is it
> possible that it's somehow not purely plain text? How would I solve
> this? I don't want to send HTML messages because some recipients may
> not be able to view it.
> Thanks.
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Debug cookies

2009-10-12 Thread Ross Mellgren

I don't know if it increases compile time but I avoid wildcard imports  
like the plague because I think they're perhaps the most confusing  
thing reading scala code. Thinking to yourself that two types don't  
match, but you can't be sure if you're reading it wrong or if there's  
an implicit in scope, with explicit imports at least you can look at  
the import list to see if there are any applicable implicits in scope,  
whereas with wildcard imports you're left searching through a perhaps  
large list of perhaps large modules looking for implicits. And then  
there's the somewhat simpler pain of "where the heck is this name  
imported from" even where it's explicit.

-Ross

On Oct 12, 2009, at 4:27 PM, Naftoli Gugenheim wrote:

>
> Thanks. I actually looked at the source code of HTTPCookie but I
> didn't put two and two together reading my code in Boot.
> I think the reason I did the math manually is because I was trying to
> minimize the number of imports. Do you think a lot of wildcard imports
> increase compile time, or not significantly (for clean build of what's
> currently 17 files / 70+ kb)?
>
>
> On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren   
> wrote:
>>
>> setMaxAge is unfortunately named -- looking at the code it appears
>> that HTTPCookies are actually immutable, and what setMaxAge does is
>> returns you a new cookie with the new settings.
>>
>> Try:
>> val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, 
>> user.uniqueId.is
>> ).setMaxAge(2 weeks)
>> S.addCookie(cookie)
>>
>> (I took the liberty of rewriting your manual date arithmetic to
>> TimeSpan syntax)
>>
>> -Ross
>>
>> On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote:
>>
>>>
>>> Firecookie (a Firebug extension) says the cookie's Expires is  
>>> Session.
>>> When I log in Firebug's Net panel shows the following response  
>>> header
>>> (I changed the cookie name):
>>> Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN
>>>
>>> My code in Boot looks like this:
>>> User.autologinFunc = Full(()=>{
>>>   for(uid <- S.findCookie(cookieName);
>>>   userId <- uid.value;
>>>   user <- User.find(net.liftweb.mapper.By(User.uniqueId,
>>> userId))
>>>   ) {
>>>   User.logUserIn(user)
>>>   S.redirectTo(User.homePage)
>>> }
>>>   }
>>> )
>>> User.onLogIn ::= {
>>>   case user =>
>>> val cookie = net.liftweb.http.provider.HTTPCookie 
>>> (cookieName,
>>> user.uniqueId.is)
>>> cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds
>>> S.addCookie(cookie)
>>> }
>>> User.onLogOut ::= {
>>>   case _ =>
>>> S.deleteCookie(cookieName)
>>> }
>>> What am I doing wrong? Why is the max-age not getting set?
>>>
>>>
>>> On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren 
>>> wrote:

 I usually use FireBug or Safari Web Inspector to look at the Set-
 Cookie / Cookie headers going back and forth, or use the browser's
 built in cookie index (usually buried in preferences). You could  
 also
 use something like Wireshark or tcpdump to watch the headers go  
 by if
 you're using a browser that doesn't have debugging extensions.

 -Ross

 On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote:

> I'm writing an app in Lift that uses cookies to remember the  
> user as
> logged in. When I run it from my local computer, and when I run it
> from the server and view it from my local computer, it works fine.
> But from my client's computer it doesn't work (it seems to expire
> with the session). How can I debug 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
-~--~~~~--~~--~--~---



[Lift] Re: Debug cookies

2009-10-12 Thread Naftoli Gugenheim

Thanks. I actually looked at the source code of HTTPCookie but I
didn't put two and two together reading my code in Boot.
I think the reason I did the math manually is because I was trying to
minimize the number of imports. Do you think a lot of wildcard imports
increase compile time, or not significantly (for clean build of what's
currently 17 files / 70+ kb)?


On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren  wrote:
>
> setMaxAge is unfortunately named -- looking at the code it appears
> that HTTPCookies are actually immutable, and what setMaxAge does is
> returns you a new cookie with the new settings.
>
> Try:
> val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is
> ).setMaxAge(2 weeks)
> S.addCookie(cookie)
>
> (I took the liberty of rewriting your manual date arithmetic to
> TimeSpan syntax)
>
> -Ross
>
> On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote:
>
>>
>> Firecookie (a Firebug extension) says the cookie's Expires is Session.
>> When I log in Firebug's Net panel shows the following response header
>> (I changed the cookie name):
>> Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN
>>
>> My code in Boot looks like this:
>>     User.autologinFunc = Full(()=>{
>>       for(uid <- S.findCookie(cookieName);
>>           userId <- uid.value;
>>           user <- User.find(net.liftweb.mapper.By(User.uniqueId,
>> userId))
>>       ) {
>>           User.logUserIn(user)
>>           S.redirectTo(User.homePage)
>>         }
>>       }
>>     )
>>     User.onLogIn ::= {
>>       case user =>
>>         val cookie = net.liftweb.http.provider.HTTPCookie(cookieName,
>> user.uniqueId.is)
>>         cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds
>>         S.addCookie(cookie)
>>     }
>>     User.onLogOut ::= {
>>       case _ =>
>>         S.deleteCookie(cookieName)
>>     }
>> What am I doing wrong? Why is the max-age not getting set?
>>
>>
>> On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren 
>> wrote:
>>>
>>> I usually use FireBug or Safari Web Inspector to look at the Set-
>>> Cookie / Cookie headers going back and forth, or use the browser's
>>> built in cookie index (usually buried in preferences). You could also
>>> use something like Wireshark or tcpdump to watch the headers go by if
>>> you're using a browser that doesn't have debugging extensions.
>>>
>>> -Ross
>>>
>>> On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote:
>>>
 I'm writing an app in Lift that uses cookies to remember the user as
 logged in. When I run it from my local computer, and when I run it
 from the server and view it from my local computer, it works fine.
 But from my client's computer it doesn't work (it seems to expire
 with the session). How can I debug 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
-~--~~~~--~~--~--~---



[Lift] Re: Debug cookies

2009-10-12 Thread Ross Mellgren

setMaxAge is unfortunately named -- looking at the code it appears  
that HTTPCookies are actually immutable, and what setMaxAge does is  
returns you a new cookie with the new settings.

Try:
val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is 
).setMaxAge(2 weeks)
S.addCookie(cookie)

(I took the liberty of rewriting your manual date arithmetic to  
TimeSpan syntax)

-Ross

On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote:

>
> Firecookie (a Firebug extension) says the cookie's Expires is Session.
> When I log in Firebug's Net panel shows the following response header
> (I changed the cookie name):
> Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN
>
> My code in Boot looks like this:
> User.autologinFunc = Full(()=>{
>   for(uid <- S.findCookie(cookieName);
>   userId <- uid.value;
>   user <- User.find(net.liftweb.mapper.By(User.uniqueId,  
> userId))
>   ) {
>   User.logUserIn(user)
>   S.redirectTo(User.homePage)
> }
>   }
> )
> User.onLogIn ::= {
>   case user =>
> val cookie = net.liftweb.http.provider.HTTPCookie(cookieName,
> user.uniqueId.is)
> cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds
> S.addCookie(cookie)
> }
> User.onLogOut ::= {
>   case _ =>
> S.deleteCookie(cookieName)
> }
> What am I doing wrong? Why is the max-age not getting set?
>
>
> On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren   
> wrote:
>>
>> I usually use FireBug or Safari Web Inspector to look at the Set-
>> Cookie / Cookie headers going back and forth, or use the browser's
>> built in cookie index (usually buried in preferences). You could also
>> use something like Wireshark or tcpdump to watch the headers go by if
>> you're using a browser that doesn't have debugging extensions.
>>
>> -Ross
>>
>> On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote:
>>
>>> I'm writing an app in Lift that uses cookies to remember the user as
>>> logged in. When I run it from my local computer, and when I run it
>>> from the server and view it from my local computer, it works fine.
>>> But from my client's computer it doesn't work (it seems to expire
>>> with the session). How can I debug 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
-~--~~~~--~~--~--~---



[Lift] URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread Naftoli Gugenheim

Hi. I'm sending an email using PlainMailBodyType that contains a URL.
Normally when a BlackBerry receives a plain text email it
automatically hyperlinks URLS and potential phone numbers. For some
reason this email is not being hyperlinked on the BlackBerry. Is it
possible that it's somehow not purely plain text? How would I solve
this? I don't want to send HTML messages because some recipients may
not be able to view it.
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
-~--~~~~--~~--~--~---



[Lift] Re: Debug cookies

2009-10-12 Thread Naftoli Gugenheim

Firecookie (a Firebug extension) says the cookie's Expires is Session.
When I log in Firebug's Net panel shows the following response header
(I changed the cookie name):
Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN

My code in Boot looks like this:
    User.autologinFunc = Full(()=>{
      for(uid <- S.findCookie(cookieName);
          userId <- uid.value;
          user <- User.find(net.liftweb.mapper.By(User.uniqueId, userId))
      ) {
          User.logUserIn(user)
          S.redirectTo(User.homePage)
        }
      }
    )
    User.onLogIn ::= {
      case user =>
        val cookie = net.liftweb.http.provider.HTTPCookie(cookieName,
user.uniqueId.is)
        cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds
        S.addCookie(cookie)
    }
    User.onLogOut ::= {
      case _ =>
        S.deleteCookie(cookieName)
    }
What am I doing wrong? Why is the max-age not getting set?


On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren  wrote:
>
> I usually use FireBug or Safari Web Inspector to look at the Set-
> Cookie / Cookie headers going back and forth, or use the browser's
> built in cookie index (usually buried in preferences). You could also
> use something like Wireshark or tcpdump to watch the headers go by if
> you're using a browser that doesn't have debugging extensions.
>
> -Ross
>
> On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote:
>
> > I'm writing an app in Lift that uses cookies to remember the user as
> > logged in. When I run it from my local computer, and when I run it
> > from the server and view it from my local computer, it works fine.
> > But from my client's computer it doesn't work (it seems to expire
> > with the session). How can I debug 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
-~--~~~~--~~--~--~---



[Lift] Re: Debug cookies

2009-10-12 Thread Ross Mellgren

I usually use FireBug or Safari Web Inspector to look at the Set- 
Cookie / Cookie headers going back and forth, or use the browser's  
built in cookie index (usually buried in preferences). You could also  
use something like Wireshark or tcpdump to watch the headers go by if  
you're using a browser that doesn't have debugging extensions.

-Ross

On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote:

> I'm writing an app in Lift that uses cookies to remember the user as  
> logged in. When I run it from my local computer, and when I run it  
> from the server and view it from my local computer, it works fine.  
> But from my client's computer it doesn't work (it seems to expire  
> with the session). How can I debug 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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

Very interesting reading, Naftoli! Thanks alot for such extensive
explainations. I'm going to read your message again and again until i
understand it all :)

On 13 окт, 02:09, Naftoli Gugenheim  wrote:
>    1. Personally I would not take the approach of creating a totally new ORM
>    with a completely new paradigm just to eliminate the object syntax.
>
> The first step, as with anything in life, is to define our goals. What
> exactly is it about the object syntax that's problematic? Is overridability
> a problem? Is reflection evil? Let's make a list of our objectives over
> here.
> In any case, I would take the following approach.
> Currently, the way Mapper works is as follows. Every Mapper instance
> delegates database actions to its MetaMapper instance, which, upon
> initialization, builds the information about its fields using reflection,
> including the list of fields and their names.
> Three reasons for the object approach were mentioned in this thread.
>
>    1. To allow access to members. It was mentioned that this is now possible
>    with anonymous classes (val x = new Y { ... } ). What was not mentioned but
>    I read elsewhere IIRC is that the latter is implemented by scalac via
>    reflection. Not that that's the end of the world, especially as we're
>    relying on reflection as it is. Also, at least the argument remains--allow
>    one to choose whichever syntax one desires. On the other hand, if Mapper
>    would not use reflection, objects, being lazy, would not be known about
>    until initialized, thus requiring the user to manually reference them.
>    2. To disambiguate members that reference or return other fields.
>    However, this argument assumes that the list of fields is built via
>    reflection; maybe it should not be.
>    3. To allow the field names to become available via reflection. I don't
>    there's any way around this other than a compiler plugin (or maybe
>    scala.reflect.Code?) So my suggestion would require passing the field name
>    to a constructor. On the other hand, as I mentioned in a previous post and
>    will explain better below, passing "this" to the constructor can be
>    eliminated.
>
> So the first reason basically says, "since people may need to use 'object,'
> and objects are lazy and we won't necessarily know about them, we had better
> use reflection." On the other hand, if we use vals most of the time, the
> constructor itself can inform the MetaMapper of its existence, and if
> someone wants to use 'object' or 'lazy val' then they will be required to
> initialize it before using it with Mapper.
> The second reason is eliminated if we don't use reflection.
> The third reason remains valid but the question is how important it is, at
> the expense of preventing subclasses from overriding fields.
>
> If it is acceptable to eliminate the "this" parameter and instead require a
> field name parameter, then it would seem possible to use a  val based system
> instead of an object + reflection system.
>
> Here is how it would work.
> class Field(name: String)(implicit meta: MetaModel) {
>   meta.register(this)}
>
> class Model {
>   implicit def meta = getSingleton}
>
> 
> class MyModel extends Model {
>   val field1 = new Field("firstname")  // meta gets passed automatically
>   val fieldRef = field1 // doesn't cause duplication because fields are
> registered on instantiation}
>
> val fieldX = new Field("lastname") // compiler error because no implicit
> MetaModel in scope
> val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad
> idea
>
> Two points.
>
>    1. The concept of the meta being passed implicitly could probably be
>    implemented into the current system. The only thing it has to do with this
>    discussion is that if you would have to pass 'this' and the field name it
>    would be really verbose, so I'm just pointing out that we could have a
>    non-reflection-based system with about the same verbosity that we use now,
>    although we could make the current system less verbose too.
>    2. On the surface it would seem impossible to implement this in Mapper,
>    because by not using reflection there's no way to get all the object 
> members
>    since objects are lazy. However since the reflection system only picks up
>    objects and not vals, one could solve this as follows. As long as the same
>    field cannot be registered twice, i.e., registration of a field skips it if
>    it's already registered, there's no problem with allowing both methods to
>    exist side by side. Let MappedField or some class or trait high in the
>    hierarchy call a register method on the MetaMapper upon its initialization.
>    This will register all val fields, as well as any object fields initialized
>    early. Then, when the MetaMapper goes through its reflection process, any
>    previously register fields will be skipped.
>
> However a basic problem with my approach may be the following. Say we have
> instances a an

[Lift] Debug cookies

2009-10-12 Thread Naftoli Gugenheim
I'm writing an app in Lift that uses cookies to remember the user as logged
in. When I run it from my local computer, and when I run it from the server
and view it from my local computer, it works fine. But from my client's
computer it doesn't work (it seems to expire with the session). How can I
debug 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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Naftoli Gugenheim
   1. Personally I would not take the approach of creating a totally new ORM
   with a completely new paradigm just to eliminate the object syntax.

The first step, as with anything in life, is to define our goals. What
exactly is it about the object syntax that's problematic? Is overridability
a problem? Is reflection evil? Let's make a list of our objectives over
here.
In any case, I would take the following approach.
Currently, the way Mapper works is as follows. Every Mapper instance
delegates database actions to its MetaMapper instance, which, upon
initialization, builds the information about its fields using reflection,
including the list of fields and their names.
Three reasons for the object approach were mentioned in this thread.

   1. To allow access to members. It was mentioned that this is now possible
   with anonymous classes (val x = new Y { ... } ). What was not mentioned but
   I read elsewhere IIRC is that the latter is implemented by scalac via
   reflection. Not that that's the end of the world, especially as we're
   relying on reflection as it is. Also, at least the argument remains--allow
   one to choose whichever syntax one desires. On the other hand, if Mapper
   would not use reflection, objects, being lazy, would not be known about
   until initialized, thus requiring the user to manually reference them.
   2. To disambiguate members that reference or return other fields.
   However, this argument assumes that the list of fields is built via
   reflection; maybe it should not be.
   3. To allow the field names to become available via reflection. I don't
   there's any way around this other than a compiler plugin (or maybe
   scala.reflect.Code?) So my suggestion would require passing the field name
   to a constructor. On the other hand, as I mentioned in a previous post and
   will explain better below, passing "this" to the constructor can be
   eliminated.

So the first reason basically says, "since people may need to use 'object,'
and objects are lazy and we won't necessarily know about them, we had better
use reflection." On the other hand, if we use vals most of the time, the
constructor itself can inform the MetaMapper of its existence, and if
someone wants to use 'object' or 'lazy val' then they will be required to
initialize it before using it with Mapper.
The second reason is eliminated if we don't use reflection.
The third reason remains valid but the question is how important it is, at
the expense of preventing subclasses from overriding fields.

If it is acceptable to eliminate the "this" parameter and instead require a
field name parameter, then it would seem possible to use a  val based system
instead of an object + reflection system.

Here is how it would work.
class Field(name: String)(implicit meta: MetaModel) {
  meta.register(this)
}
class Model {
  implicit def meta = getSingleton
}

class MyModel extends Model {
  val field1 = new Field("firstname")  // meta gets passed automatically
  val fieldRef = field1 // doesn't cause duplication because fields are
registered on instantiation
}
val fieldX = new Field("lastname") // compiler error because no implicit
MetaModel in scope
val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad
idea



Two points.

   1. The concept of the meta being passed implicitly could probably be
   implemented into the current system. The only thing it has to do with this
   discussion is that if you would have to pass 'this' and the field name it
   would be really verbose, so I'm just pointing out that we could have a
   non-reflection-based system with about the same verbosity that we use now,
   although we could make the current system less verbose too.
   2. On the surface it would seem impossible to implement this in Mapper,
   because by not using reflection there's no way to get all the object members
   since objects are lazy. However since the reflection system only picks up
   objects and not vals, one could solve this as follows. As long as the same
   field cannot be registered twice, i.e., registration of a field skips it if
   it's already registered, there's no problem with allowing both methods to
   exist side by side. Let MappedField or some class or trait high in the
   hierarchy call a register method on the MetaMapper upon its initialization.
   This will register all val fields, as well as any object fields initialized
   early. Then, when the MetaMapper goes through its reflection process, any
   previously register fields will be skipped.

However a basic problem with my approach may be the following. Say we have
instances a and b of model C, if a field is a val, not a new class, what
prevents that field from being registered twice? In other words, how can
fields in multiple instances of a given model be recognized as being the
same field? One answer, though maybe not the best, is through the field's
field name.


2009/10/12 Naftoli Gugenheim 

> So Model represents the database connec

[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

Thanks again for your answers, David. I've got your point and it all
looks much more clear to me now.

On 13 окт, 01:19, David Pollak  wrote:
> On Mon, Oct 12, 2009 at 10:38 AM, Oleg G.  wrote:
>
> > Well i don't think its a lot of complexity.
>
> You asked for feedback, I gave you my opinion.
>
>
>
> > Yes its 4 declarations instead of 1 for each field. But 3 of those are
> > generatable by IDE same way as any Java IDE generates setters and
> > getters.
>
> And this is a failure on its face.  Anything that requires an IDE to
> generate code represents a failure.  It represents failure because the code
> is (1) much less maintainable, (2) depends on IDE vendors to support it, and
> (3) is harder for non-IDE users (me included... emacs is my tool for a lot
> of my Lift-based development).
>
> > All the rest is spring-style instantiations/injections. And
> > usage is even simplier and readable (i mean syntax
> > record.field=value). The field list method can be implemented via
> > reflection to reduce amount of code required from users.
>
> Calculating what fields are to be included in the List is what originally
> led to using object.
>
>
>
> > Anyway thanks for your feedback, David, i really appreciate it. I'll
> > try to see if i can integrate my model with Lift and implement it for
> > Google Datastore. Then i'll report back. I understand that i still
> > need to do more work before any serious conclusions can be made.
>
> While I appreciate your effort, it is is not in line with the goals of Lift.
>  The default is not to keep the meaning with the bytes (having _name implies
> to me "don't use this, use name instead").  The complexity is significant...
> so significant that it requires IDE support to use effectively.  The problem
> that it addresses is the "overriding definitions of fields in subclasses"
> issue which is important, but in this case the cure is much, much worse than
> disease.
>
> Thanks,
>
> David
>
>
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Surf the harmonics
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

On 13 окт, 01:00, Naftoli Gugenheim  wrote:
> So Model represents the database connection?
I tried to keep my thoughts at quite high abstraction level for the
sake of flexibility. And i don't have rich enough experience in
implementing object-database mapping to give you good full answer -
also that's what i meant when i said 'i still need to do more work
before any serious conclusions can be made' in reply to David.

But... I thought of a following possible usage: a Model implementation
gets instantiated and reads existing database tables structure, it
also receives a set of 'register' events from Record prototypes. Then
it can decide if the database structure is consistent with registered
Records and maybe even alter it. The code might look like:

val m = new DatabaseModel(params).validate

Lift looks very good for quick start but i'm not sure about its
strength in evolving/changing projects and overall code reusability.
That's why i asked about extensibility/customizability and that's what
i'm trying to express with my code.

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 10:38 AM, Oleg G.  wrote:

>
> Well i don't think its a lot of complexity.
>

You asked for feedback, I gave you my opinion.


>
> Yes its 4 declarations instead of 1 for each field. But 3 of those are
> generatable by IDE same way as any Java IDE generates setters and
> getters.


And this is a failure on its face.  Anything that requires an IDE to
generate code represents a failure.  It represents failure because the code
is (1) much less maintainable, (2) depends on IDE vendors to support it, and
(3) is harder for non-IDE users (me included... emacs is my tool for a lot
of my Lift-based development).


> All the rest is spring-style instantiations/injections. And
> usage is even simplier and readable (i mean syntax
> record.field=value). The field list method can be implemented via
> reflection to reduce amount of code required from users.
>

Calculating what fields are to be included in the List is what originally
led to using object.


>
> Anyway thanks for your feedback, David, i really appreciate it. I'll
> try to see if i can integrate my model with Lift and implement it for
> Google Datastore. Then i'll report back. I understand that i still
> need to do more work before any serious conclusions can be made.
>

While I appreciate your effort, it is is not in line with the goals of Lift.
 The default is not to keep the meaning with the bytes (having _name implies
to me "don't use this, use name instead").  The complexity is significant...
so significant that it requires IDE support to use effectively.  The problem
that it addresses is the "overriding definitions of fields in subclasses"
issue which is important, but in this case the cure is much, much worse than
disease.

Thanks,

David


>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: MappedLong & null values

2009-10-12 Thread Naftoli Gugenheim
Not offhand, maybe some discussion will generate an good plan.The easiest
and worst way would be to have a marker trait or a flag, and test in each
MappedXXX. Obviously not a good idea.
What may work is to delegate all the code that makes decisions which depend
on optionality to a method in MappedField, and override that method in a
trait that can be mixed in. I haven't actually looked at the relevant Mapper
code; just saying a thought.


On Mon, Oct 12, 2009 at 1:31 PM, David Pollak  wrote:

> If you've got a good way to do this, feel encouraged to develop it on a
> branch.
>
>
> On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim 
> wrote:
>
>> It would be nice if there could be a generalized way of specifying
>> optionality for fields.(The first though question is whether the default
>> behavior is consistent -- do all field types equate NULL with their
>> default?)
>> I pasted the names of all the field types (by listing all Mapped*.class
>> files in target/classes/net/liftweb/mapper). For which of them does it make
>> sense to have optionality, which of them do, and would it make sense to have
>> a trait to mix in or some other consistent way to allow nullablility?
>>
>>
>> MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, 
>> MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, 
>> MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, 
>> MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, 
>> MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, 
>> MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, 
>> MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId
>>
>>
>> On Wed, Oct 7, 2009 at 4:36 PM, David Pollak <
>> feeder.of.the.be...@gmail.com> wrote:
>>
>>>
>>>
>>> On Wed, Oct 7, 2009 at 12:55 PM, harryh  wrote:
>>>

 I have a long field in my database that I want to have a unique index
 (enforced by the database).  Sometimes this field will be empty, in
 which case I'd like to set it to NULL.  0 won't work because that
 won't work with the unique index.

 MappedLong appears to be converting null to 0 internally.
 Additionally overriding defaultValue for the field and returning null
 does not appear to work.

 Is this by design?
>>>
>>>
>>> Yes.
>>>
>>>
 Is it possible that I am misunderstanding something
 here?

>>>
>>> I think you're looking for a MappedOptLong which will treat None (or
>>> Empty) as NULL and Some(Long) as the value.
>>>
>>> Please open a ticket and I'll add the code.
>>>

 -harryh



>>>
>>>
>>> --
>>> Lift, the simply functional web framework http://liftweb.net
>>> Beginning Scala http://www.apress.com/book/view/1430219890
>>> Follow me: http://twitter.com/dpp
>>> Surf the harmonics
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> >
>

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Naftoli Gugenheim
So Model represents the database connection?

2009/10/12 Oleg G. 

>
> On 13 окт, 00:08, naf g  wrote:
> > Why do you have two classes, Model and Record? What are they and why are
> they interdependent?
> I thought about Model being a place for metainformation (like database
> structure, options/properties etc), or maybe it can be described as
> global context for Record-related activity. They are dependant to
> allow Field operations to reach the context.
>
>
> >
>

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

On 13 окт, 00:08, naf g  wrote:
> Why do you have two classes, Model and Record? What are they and why are they 
> interdependent?
I thought about Model being a place for metainformation (like database
structure, options/properties etc), or maybe it can be described as
global context for Record-related activity. They are dependant to
allow Field operations to reach the context.


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread David Pollak
Tim,
Two things I stress about Lift that tends to resonate well:

   - Lift abstracts away the HTTP request/response cycle.  You as the
   developer do not need to worry about setting up something to receive form
   posts, ajax events, or to do the whole Comet stuff.  It's plumbing and
   plumbing should work.  Every developer should not have to be a plumber...
   developers should focus on the sinks, toilets and bathtubs (the stuff the
   users see), not the pipes in the wall.
   - (nearly) everything in Lift is represented in Scala.  This means that
   we don't have 17 different dialects of annotations to worry about.  This
   means that developers can express JavaScript in Scala.  This means things
   are generally more type-safe and developers don't have to context switch as
   much.

My 2 cents (or points).

Thanks,

David

On Mon, Oct 12, 2009 at 10:21 AM, Timothy Perrett
wrote:

>
> Yeah it should pretty much be solid Java devs and architects :-)
>
> Cheers, Tim
>
> On 12 Oct 2009, at 18:04, marius d. wrote:
>
> >
> > Is the audience mostly Java based or from different other fields
> > including FP?
> >
> > I would insist in how Lift leverages functional programming idioms
> > offered by Scala. Personally I believe this gives Lift a pretty unique
> > position.
> >
> > Br's,
> > Marius
> >
> > On Oct 12, 12:37 am, Timothy Perrett  wrote:
> >> Guys,
> >>
> >> In about a month im speaking at a fairly sizeable event in Belgium
> >> and
> >> wanted to ask a few questions about what users see at Lift's unique
> >> value proposition. I did a talk about lift at a bar-camp recently and
> >> whilst they were fairly well received, I think i still assumed too
> >> much information. To that end, I thought by focusing on some of lifts
> >> super cool features in a broad way I would then aim to give people a
> >> better overview / warm fuzzy feeling about Lift in the allotted hour.
> >>
> >> So what are Lift's UVP's? My list looks a little like:
> >>
> >> - OOTB Comet (probably what draws most people to lift)
> >> - View first / code free templating
> >> - Utilisation of existing JEE infrastructure (WARs, JPA etc)
> >> - Non-perscriptive but highly configurable framework
> >>
> >> Then we also have some stuff that we inherit from scala:
> >>
> >> - traits
> >> - concise but type safe code
> >> - etc etc etc
> >>
> >> What do people think? I have an hour to make people feel good about
> >> Lift and hopefully give them enough of a taste to go away and try it
> >> later - am i missing anything blindingly obvious? This isnt a hard
> >> and
> >> fast outline of my preso, just trying to kick around some thoughts
> >> and
> >> ideas :-)
> >>
> >> Cheers, Tim
> > >
> >
>
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

Well i don't think its a lot of complexity.

Yes its 4 declarations instead of 1 for each field. But 3 of those are
generatable by IDE same way as any Java IDE generates setters and
getters. All the rest is spring-style instantiations/injections. And
usage is even simplier and readable (i mean syntax
record.field=value). The field list method can be implemented via
reflection to reduce amount of code required from users.

Anyway thanks for your feedback, David, i really appreciate it. I'll
try to see if i can integrate my model with Lift and implement it for
Google Datastore. Then i'll report back. I understand that i still
need to do more work before any serious conclusions can be made.

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: MappedLong & null values

2009-10-12 Thread David Pollak
If you've got a good way to do this, feel encouraged to develop it on a
branch.

On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim wrote:

> It would be nice if there could be a generalized way of specifying
> optionality for fields.(The first though question is whether the default
> behavior is consistent -- do all field types equate NULL with their
> default?)
> I pasted the names of all the field types (by listing all Mapped*.class
> files in target/classes/net/liftweb/mapper). For which of them does it make
> sense to have optionality, which of them do, and would it make sense to have
> a trait to mix in or some other consistent way to allow nullablility?
>
>
> MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, 
> MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, 
> MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, 
> MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, 
> MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, 
> MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, 
> MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId
>
>
> On Wed, Oct 7, 2009 at 4:36 PM, David Pollak <
> feeder.of.the.be...@gmail.com> wrote:
>
>>
>>
>> On Wed, Oct 7, 2009 at 12:55 PM, harryh  wrote:
>>
>>>
>>> I have a long field in my database that I want to have a unique index
>>> (enforced by the database).  Sometimes this field will be empty, in
>>> which case I'd like to set it to NULL.  0 won't work because that
>>> won't work with the unique index.
>>>
>>> MappedLong appears to be converting null to 0 internally.
>>> Additionally overriding defaultValue for the field and returning null
>>> does not appear to work.
>>>
>>> Is this by design?
>>
>>
>> Yes.
>>
>>
>>> Is it possible that I am misunderstanding something
>>> here?
>>>
>>
>> I think you're looking for a MappedOptLong which will treat None (or
>> Empty) as NULL and Some(Long) as the value.
>>
>> Please open a ticket and I'll add the code.
>>
>>>
>>> -harryh
>>>
>>>
>>>
>>
>>
>> --
>> Lift, the simply functional web framework http://liftweb.net
>> Beginning Scala http://www.apress.com/book/view/1430219890
>> Follow me: http://twitter.com/dpp
>> Surf the harmonics
>>
>>
>>
>>
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?

2009-10-12 Thread David Pollak
You have to include -DremoteRepositories=http://scala-tools.org/repo-*
snapshots*  in the command line.

On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv  wrote:

>
> I used this command to create my project and was successfully.
>
> mvn archetype:generate -U -DarchetypeGroupId=net.liftweb -
> DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6
>   -DgroupId=demo.helloworld -DartifactId=helloworld2 -
> Dversion=1.1-M6
>
>
> If i use the 1.1-SNAPSHOT, some errors occur.
>
>   [INFO] The desired archetype does not exist (net.liftweb:lift-
> archetype-blank:1.1-SNAPSHOT)
>
>
>
> Cheers,
>  Neil
>
> On Oct 9, 9:32 pm, David Pollak  wrote:
> > I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at
> 7).
> >  There's rarely breakage on SNAPSHOT.
> >
> >
> >
> > On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv  wrote:
> >
> > > Hi liftweb,
> >
> > >   Is anyone has used lift to create a stable and large site ? If i
> > > want to create this site which version that is suit,
> >
> > > lift1.0 or higher version.
> >
> > >   If someone knows the site that develop by lift or has used lift to
> > > create a site, could you give me some ideas?
> >
> > >   Thanks very much!
> >
> > > Cheers,
> > >  Neil
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Surf the harmonics
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Dynamic SiteMap

2009-10-12 Thread David Pollak
To address the specific issue of CondHidden/IfHidden, if a Loc (menu
location) fails the If() or Unless() test, it will not be
displayed/rendered/visible to the user.  So, there's no need for a IfHidden
or a CondHidden LocParam.

More broadly, SiteMap represents all the pages in your site and the
visibility/access rules for each of those pages.

All the pages for which you have templates should also have a SiteMap entry
(a Loc).  The Loc will contain a set (0 or more) of If/Unless rules
governing access.  If there are no If/Unless rules, then the page will be
accessible no matter the state of the application.

If you want pages that are accessible in a particular application state
(Anyone logged in, Teacher logged in, Student logged in, Teach with
root privileges logged in, etc.), you define a method that calculates a
Boolean based on the current application state:

(assuming that User.currentUser returns a Box[User] and the User class has
isTeacher, isStudent, isRootTeacher methods)

def anyoneLoggedIn = User.currentUser.isDefined
def teacherLoggedIn = User.currentUser.map(_.isTeacher) openOr false

def studentLoggedIn = User.currentUser.map(_.isStudent) openOr false

def rootTeacherLoggedIn = User.currentUser.map(_.isRootTeacher) openOr false

def studentOrRootTeacher = studentLoggedIn || rootTeacherLoggedIn


Now, you can define some conditionals:

lazy val ifLoggedIn = If(anyoneLoggedIn _, S ?? "You must be logged in to
view this page")
lazy val ifTeacher = If(teacherLoggedIn _, S ?? "You must be a teacher to
view this page")

lazy val ifStudentOrRootTeacher = if(studentOrRootTeacher _, S ?? "You must
be a student to view this page")


And you can create locations (Loc) in your SiteMap that contain the
ifLoggedIn, etc. LocParams.  What you see is that how you calculate a given
permission is not important to the If/Unless LocParam.  It's all about the
current app state and nothing more.  Pages guarded by If/Unless will not
load if the required conditions are not met nor will they be displayed in
the menu hierarchy.

Does this resolve the questions/issues raised in this thread?

Thanks,

David



On Mon, Oct 12, 2009 at 12:05 AM, marius d.  wrote:

>
> First of all I'm not reinventing anything. I don't think that If
> LocParam semantic is giving you the hidden functionality as well. User
> type 2 should not even see the menus for user type 1, not only to not
> be able to access those locations.
>
> The way I see it this functionality should be totally irrespective of
> Mappers or any persistence store. It is just a matter of how you
> implement the function passed to If and other LocParams.
>
> You can also implement your own Loc and override the calcHidden
> function and you can decide what to render there. I still think that a
> conditional hidden LocParam would be helpful.
>
> Br's,
> Marius.
>
> On Oct 12, 2:27 am, Dave  wrote:
> > Marius-
> >
> > Thanks for your help on this.  I guess I'm not sure how this differs
> > from the current conception of the If LocParam. As I understand it, it
> > is checked when determining what to display on the Menu as well as
> > when a User attempts to access the page (or its subdirectory if
> > passing a pair).  If this is true, then I think there is no need to
> > reinvent the wheel per se. Assuming I'm right and we can use If's to
> > accomplish this functionality, I can follow up this query with an
> > implementation based question.  Specifically, since both of my user
> > types extend MegaProtoUser, I end up with loggedIn_? function that
> > tells if some user is logged in, but is confused about which.  So if a
> > user of type 1 logs in and I call UserType2.loggedIn_?, it will also
> > return true.  Is there a way to check for this in If statements?  Or
> > is it necessary to override loggedIn_? (which I've been trying, but
> > has been pretty slow going so far).
> >
> > Thanks
> > Dave
> >
> > On Oct 11, 12:36 pm, "marius d."  wrote:
> >
> > > Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test
> > > would be used in conjunction with CondHidden to also provide
> > > accessibility constraints.
> >
> > > Here is the definition
> >
> > > case object CondHidden(test: () => Boolean) extends LocParam
> >
> > > but we also have case class If(test: () => Boolean, failMsg: FailMsg)
> > > extends LocParam
> >
> > > So the test function is the same which means that you essentially
> > > implement one function and provide it to both LocParam's. We could
> > > probably combine the two LocParams in a:
> >
> > > IfHidden(test: () => Boolean, failMsg: FailMsg)  // if you have a
> > > better name please let me know :)
> >
> > > The test function would be called in two cases:
> >
> > > 1. When rendering the Menu to see is the Menu should be rendered or
> > > not
> > > 2. When try to access the location to as a security check
> >
> > > I could probably add it this week and point you to my branch to check
> > > it out. If I runt into something weird that I cannot

[Lift] Re: Lift UVP's

2009-10-12 Thread Timothy Perrett

Yeah it should pretty much be solid Java devs and architects :-)

Cheers, Tim

On 12 Oct 2009, at 18:04, marius d. wrote:

>
> Is the audience mostly Java based or from different other fields
> including FP?
>
> I would insist in how Lift leverages functional programming idioms
> offered by Scala. Personally I believe this gives Lift a pretty unique
> position.
>
> Br's,
> Marius
>
> On Oct 12, 12:37 am, Timothy Perrett  wrote:
>> Guys,
>>
>> In about a month im speaking at a fairly sizeable event in Belgium  
>> and
>> wanted to ask a few questions about what users see at Lift's unique
>> value proposition. I did a talk about lift at a bar-camp recently and
>> whilst they were fairly well received, I think i still assumed too
>> much information. To that end, I thought by focusing on some of lifts
>> super cool features in a broad way I would then aim to give people a
>> better overview / warm fuzzy feeling about Lift in the allotted hour.
>>
>> So what are Lift's UVP's? My list looks a little like:
>>
>> - OOTB Comet (probably what draws most people to lift)
>> - View first / code free templating
>> - Utilisation of existing JEE infrastructure (WARs, JPA etc)
>> - Non-perscriptive but highly configurable framework
>>
>> Then we also have some stuff that we inherit from scala:
>>
>> - traits
>> - concise but type safe code
>> - etc etc etc
>>
>> What do people think? I have an hour to make people feel good about
>> Lift and hopefully give them enough of a taste to go away and try it
>> later - am i missing anything blindingly obvious? This isnt a hard  
>> and
>> fast outline of my preso, just trying to kick around some thoughts  
>> and
>> ideas :-)
>>
>> Cheers, Tim
> >
>


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread naf g

Why do you have two classes, Model and Record? What are they and why are they 
interdependent?

-
David Pollak wrote:

On Mon, Oct 12, 2009 at 1:55 AM, Oleg G.  wrote:

>
> I spent some time and came up with this code:
> http://github.com/ojow/Random-code/blob/master/Test.scala
> I think it should allow all the needed stuff, it keeps meaning with
> the bytes and also:
> * its reusable and extensible in many directions
> * looks like generated .class files don't have any additional hidden
> fields or heavy methods, so it's technically light-weight
> * it doesn't need reflection (not sure if its good or bad :)
>
> Would be nice to hear some feedback on that.
>
> P.S. I'm still a newbie in Scala so please excuse me if this code is
> worthless and if i'm just wasting your time.
>

Oleg,

I wrote the existing Mapper code when I was 2-3 weeks into Scala.  It's very
Javaesque.

Your code is interesting, but the complexity of what the developer has to
type would make it pretty difficult to use in practice.  Sorry.

David


>
> On Oct 7, 3:54 am, David Pollak  wrote:
> > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G.  wrote:
> >
> > > As i said before i'm not sure that i'm getting the whole picture and
> > > maybe my initial question is incorrect in its root. Still:
> >
> > > Suppose i have a Person class declared with Mapper/Record and i want
> > > to reuse the class and all the code associated with it in another
> > > module/project. My first thought was to extend the Person class and
> > > override some of its fields by mixing in some additional traits (see
> > > my simplified example code in the initial message). But i noticed that
> > > inner objects cannot be overriden (its not obvious for me but i can
> > > get it if i dig it).
> >
> > You can't do this.  There was a Scala language feature that would have
> > allowed this (overriding an object) but it hasn't made the cut for 2.7 or
> > 2.8.
> >
> >
> >
> > > So how do i reuse Mapper/Record based code if i need to extend/
> > > customize the data structures?
> >
> > Unfortunately, you can't.  Once you've got a field defined, there's
> nothing
> > you can do to change it in a subclass.
> >
> >
> >
> >
> >
> >
> >
> > > On Oct 6, 11:59 pm, David Pollak 
> > > wrote:
> > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G.  wrote:
> >
> > > > > Thanks for all the answers and especially for David's
> clarification.
> > > > > It would be really cool to upgrade the 'keeping the meaning with
> the
> > > > > bytes' thing (
> http://blog.lostlake.org/index.php?/archives/19-Keeping-
> > > > > the-meaning-with-the-bytes.html) to allow extension/customization.
> >
> > > > What kind of extensions/customizations?
> >
> > > > MappedXXX can all be subclassed, extended and customized.
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Surf the harmonics
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics



--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread marius d.

Is the audience mostly Java based or from different other fields
including FP?

I would insist in how Lift leverages functional programming idioms
offered by Scala. Personally I believe this gives Lift a pretty unique
position.

Br's,
Marius

On Oct 12, 12:37 am, Timothy Perrett  wrote:
> Guys,
>
> In about a month im speaking at a fairly sizeable event in Belgium and
> wanted to ask a few questions about what users see at Lift's unique
> value proposition. I did a talk about lift at a bar-camp recently and
> whilst they were fairly well received, I think i still assumed too
> much information. To that end, I thought by focusing on some of lifts
> super cool features in a broad way I would then aim to give people a
> better overview / warm fuzzy feeling about Lift in the allotted hour.
>
> So what are Lift's UVP's? My list looks a little like:
>
> - OOTB Comet (probably what draws most people to lift)
> - View first / code free templating
> - Utilisation of existing JEE infrastructure (WARs, JPA etc)
> - Non-perscriptive but highly configurable framework
>
> Then we also have some stuff that we inherit from scala:
>
> - traits
> - concise but type safe code
> - etc etc etc
>
> What do people think? I have an hour to make people feel good about
> Lift and hopefully give them enough of a taste to go away and try it
> later - am i missing anything blindingly obvious? This isnt a hard and
> fast outline of my preso, just trying to kick around some thoughts and
> ideas :-)
>
> Cheers, Tim
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 1:55 AM, Oleg G.  wrote:

>
> I spent some time and came up with this code:
> http://github.com/ojow/Random-code/blob/master/Test.scala
> I think it should allow all the needed stuff, it keeps meaning with
> the bytes and also:
> * its reusable and extensible in many directions
> * looks like generated .class files don't have any additional hidden
> fields or heavy methods, so it's technically light-weight
> * it doesn't need reflection (not sure if its good or bad :)
>
> Would be nice to hear some feedback on that.
>
> P.S. I'm still a newbie in Scala so please excuse me if this code is
> worthless and if i'm just wasting your time.
>

Oleg,

I wrote the existing Mapper code when I was 2-3 weeks into Scala.  It's very
Javaesque.

Your code is interesting, but the complexity of what the developer has to
type would make it pretty difficult to use in practice.  Sorry.

David


>
> On Oct 7, 3:54 am, David Pollak  wrote:
> > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G.  wrote:
> >
> > > As i said before i'm not sure that i'm getting the whole picture and
> > > maybe my initial question is incorrect in its root. Still:
> >
> > > Suppose i have a Person class declared with Mapper/Record and i want
> > > to reuse the class and all the code associated with it in another
> > > module/project. My first thought was to extend the Person class and
> > > override some of its fields by mixing in some additional traits (see
> > > my simplified example code in the initial message). But i noticed that
> > > inner objects cannot be overriden (its not obvious for me but i can
> > > get it if i dig it).
> >
> > You can't do this.  There was a Scala language feature that would have
> > allowed this (overriding an object) but it hasn't made the cut for 2.7 or
> > 2.8.
> >
> >
> >
> > > So how do i reuse Mapper/Record based code if i need to extend/
> > > customize the data structures?
> >
> > Unfortunately, you can't.  Once you've got a field defined, there's
> nothing
> > you can do to change it in a subclass.
> >
> >
> >
> >
> >
> >
> >
> > > On Oct 6, 11:59 pm, David Pollak 
> > > wrote:
> > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G.  wrote:
> >
> > > > > Thanks for all the answers and especially for David's
> clarification.
> > > > > It would be really cool to upgrade the 'keeping the meaning with
> the
> > > > > bytes' thing (
> http://blog.lostlake.org/index.php?/archives/19-Keeping-
> > > > > the-meaning-with-the-bytes.html) to allow extension/customization.
> >
> > > > What kind of extensions/customizations?
> >
> > > > MappedXXX can all be subclassed, extended and customized.
> >
> > --
> > Lift, the simply functional web frameworkhttp://liftweb.net
> > Beginning Scalahttp://www.apress.com/book/view/1430219890
> > Follow me:http://twitter.com/dpp
> > Surf the harmonics
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Sharing a RequestVar Across CometActors

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 7:04 AM, Peter Robinett wrote:

>
> Hi all,
>
> I have a question about whether it's possible to access RequestVars in
> CometActors (specifically, to access them in localSetup). I believe it
> is, based upon a recent thread about sharing them among snippets[1]
> and an older thread about Actors accessing S[2]. But first, some
> background, as I may be going around this in totally the wrong way and
> would appreciate your thoughts.
>
> I am making a dashboard to display a bunch of data that will be coming
> in (near) real-time and I want to use Comet to make sure the user
> always sees the most update-to-date information in their dashboard. I
> have a variety of different aggregate values to display that fall into
> several categories together, so I can group the calculations together.
> I think this sectioning will prove useful in the future, as I can
> imagine wanting to display some but not all of these sections on
> another page.
>
> Because the CometActors all will need to know the dashboard to which
> they belong, my thought was to share this Mapper instance via a
> RequestVar.
>

You can create messages to be sent to a CometActor upon setup:

for {
  session <- S.session
 } session.setupComet("Dashboard", Empty, ABunchOfInfo(sessionInfo))

When the "Dashboard" comet actor is created, it will be sent the
ABunchOfInfo message.  In this way you can send current request state info
to a CometActor.

Does this help?


>
> I call my snippet like so:
> 
> 
>
> The snippet defines a RequestVar called myDashboard and then returns a
> NodeSeq:
> 
>  
>  
> // 
>  
>  
> 
>
> While I can get this all to compile, myDashboard is empty in the
> CometActors. I understand that CometActors basically exist outside of
> the normal request cycle, so would this be the reason why my
> RequestVar is always empty? I was hoping that it would still be in the
> request cycle when localSetup is called, but I can see why that would
> be unrealistic.
>
> I just tried using SessionVar instead of a RequestVar and this works.
> However, I'm worried about having to be more careful about emptying
> the SessionVar if requesting a different dashboard than if I would if
> I were using a RequestVar. Is this an unrealistic fear?
>
> What do you think is the best way to proceed?
>
> Thanks for your help,
> Peter Robinett
>
> [1]:
> http://groups.google.com/group/liftweb/browse_thread/thread/5cf4ae2ecd0d56b5
> [2]:
> http://groups.google.com/group/liftweb/browse_thread/thread/274cfc9d25a1ab0b
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: beyond widgets: plugins (modular architecture)

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 1:31 AM, opyate  wrote:

>
> Hey guys,
>
> I had a look at this thread:
>
>
> http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gst&q=plugin+modular#f6719565f6550513
>
> I'm about to attempt the same. The base app (BASE) will provide a
> basic workflow system based on roles. The rest of the functionality
> will be implemented via plugins (PLUGIN).
>
> I do have a couple of issues, though:
>
> 1) Is this correct?: PLUGIN is NOT necessarily generated with lift-
> archetype-blank but follows a similar folder structure:
> src/main/scala/bootstrap/liftweb
> src/main/scala/my/app/plugins/pluginX
> src/main/webapp (no WEB-INF, and referenced in BASE's classpath)
>

Correct.  A plugin is something that does not have a Boot.scala file.  It is
something that is in a separate JAR file.


>
> 2) BASE needs to "load" PLUGIN by calling
> LiftRules.addToPackages("my.app.plugins.pluginX")
> ...but PLUGIN also needs to know about BASE's roles to utilise the
> workflow functionality.
> Will this cause a circular dependency issue?
>

No.  I initialize my non-core app stuff by calling a method on an object in
my external dependency.  I pass whatever dependent information is needed to
the plugin.


>
> A solution to this may be factoring out the roles model component and
> workflow interface into a separate dependency:
> BASE ref {PLUGIN,ROLE}
> PLUGIN ref ROLE
>
> For the time being I'll put all my functionality into a monolithic
> app, but it would be cool to hear everyone's thoughts on this, and
> hopefully make it more modular soon.
>
> Thanks,
> Juan
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread naf g

I would put more emphasis on the benefits of Scala than you implied, mentioning 
also the value of first class functions and partial functions and how lift ues 
them. (And maybe that Map is a partial function which can be used e.g. in a 
DispatchSnippet/StatefulSnippet.)

-
Viktor Klang wrote:

Also, a demo of working with maven + jRebel to get easy to test development

On Mon, Oct 12, 2009 at 12:27 PM, Timothy Perrett
wrote:

>
> Agreed - the security stuff is pretty cool and adds value for sure.
> Thanks for the thoughts - I need to get writing!
>
> Cheers, Tim
>
> On 12 Oct 2009, at 10:14, Viktor Klang wrote:
>
> > :-)
> > Perhaps something like
> >
> > The Lift philosophy
> > View-first - Pros and Cons
> > Comet OOTB (the 30 line chat example is always a crowd-pleaser)
> > The security model (random uids, SiteMap, Http Auth etc)
> > Performance and scaling
> >
> > That's what's on top of my head...
>
>
> >
>


-- 
Viktor Klang

Blog: klangism.blogspot.com
Twttr: viktorklang

Lift Committer - liftweb.com
AKKA Committer - akkasource.org
Cassidy - github.com/viktorklang/Cassidy.git
SoftPub founder: http://groups.google.com/group/softpub



--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Complex primary key

2009-10-12 Thread my_lists

Hello guys,

How can I create a mapper with two or more fields as primary key?

For instance if we have a table of "people" with a Long primary key  
called ID generated by "IdPK", and also we have a table of addresses  
also with a Long primary key called ID generated by "IdPK". The idea  
is to create an association table with both IDs to represent people  
with many addresses and addresses with multiple people. So both IDs  
will be primary key of the new table.

Thanks in advance,

GA


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Sharing a RequestVar Across CometActors

2009-10-12 Thread Peter Robinett

Hi all,

I have a question about whether it's possible to access RequestVars in
CometActors (specifically, to access them in localSetup). I believe it
is, based upon a recent thread about sharing them among snippets[1]
and an older thread about Actors accessing S[2]. But first, some
background, as I may be going around this in totally the wrong way and
would appreciate your thoughts.

I am making a dashboard to display a bunch of data that will be coming
in (near) real-time and I want to use Comet to make sure the user
always sees the most update-to-date information in their dashboard. I
have a variety of different aggregate values to display that fall into
several categories together, so I can group the calculations together.
I think this sectioning will prove useful in the future, as I can
imagine wanting to display some but not all of these sections on
another page.

Because the CometActors all will need to know the dashboard to which
they belong, my thought was to share this Mapper instance via a
RequestVar.

I call my snippet like so:



The snippet defines a RequestVar called myDashboard and then returns a
NodeSeq:

  
  
// 
  
  


While I can get this all to compile, myDashboard is empty in the
CometActors. I understand that CometActors basically exist outside of
the normal request cycle, so would this be the reason why my
RequestVar is always empty? I was hoping that it would still be in the
request cycle when localSetup is called, but I can see why that would
be unrealistic.

I just tried using SessionVar instead of a RequestVar and this works.
However, I'm worried about having to be more careful about emptying
the SessionVar if requesting a different dashboard than if I would if
I were using a RequestVar. Is this an unrealistic fear?

What do you think is the best way to proceed?

Thanks for your help,
Peter Robinett

[1]: 
http://groups.google.com/group/liftweb/browse_thread/thread/5cf4ae2ecd0d56b5
[2]: 
http://groups.google.com/group/liftweb/browse_thread/thread/274cfc9d25a1ab0b
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Props file example

2009-10-12 Thread my_lists

And how do I switch runtimes? within the boot.scala?


On Oct 12, 2009, at 3:52 PM, Timothy Perrett wrote:

>
>
> Note that you can also intermix this with runtimes:
>
> default.props
> default.pilot.props
>
> Doing something like that can let you automatically load different
> properties based on the run mode lift is in (production vs dev etc)
>
> Your code will still look like:
>
> Props.get("some.key") //=> Box[String]
>
> HTH
>
> Cheers, Tim
>
> On 12 Oct 2009, at 14:36, Peter Robinett wrote:
>
>>
>> It's a simple java.properties file. You should place it in src/main/
>> resources/props. There is a search order but, off the top of my head,
>> the last two options are the username running the app (e.g.
>> peter.props) and default.props.
>>
>> My peter.props looks like this:
>> db.driver=com.mysql.jdbc.Driver
>> db.url=jdbc:mysql://localhost/myDB
>> db.user=myUser
>> db.password=myPassword
>> isPeter=true
>>
>> Notice that you can define your own properties.
>>
>> Peter Robinett
>>
>> On Oct 12, 2:42 pm, Guillermo Acilu  wrote:
>>> Hello guys,
>>>
>>> I am starting to learn Lift and I have a very silly question.
>>>
>>> I am using postgresql and I have seen that the file boot.scala reads
>>> the configuration parameters like connect string, user name and
>>> password, from a properties file called Props. I could not find an
>>> example of such a file in any document or in google. Is it a XML  
>>> file
>>> or a simple java.properties file? Could you please send me an small
>>> example?
>>>
>>> Thanks in advance,
>>>
>>> GA
>>>
>>
>
>
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Props file example

2009-10-12 Thread my_lists

Thanks for the information


On Oct 12, 2009, at 3:36 PM, Peter Robinett wrote:

>
> It's a simple java.properties file. You should place it in src/main/
> resources/props. There is a search order but, off the top of my head,
> the last two options are the username running the app (e.g.
> peter.props) and default.props.
>
> My peter.props looks like this:
> db.driver=com.mysql.jdbc.Driver
> db.url=jdbc:mysql://localhost/myDB
> db.user=myUser
> db.password=myPassword
> isPeter=true
>
> Notice that you can define your own properties.
>
> Peter Robinett
>
> On Oct 12, 2:42 pm, Guillermo Acilu  wrote:
>> Hello guys,
>>
>> I am starting to learn Lift and I have a very silly question.
>>
>> I am using postgresql and I have seen that the file boot.scala reads
>> the configuration parameters like connect string, user name and
>> password, from a properties file called Props. I could not find an
>> example of such a file in any document or in google. Is it a XML file
>> or a simple java.properties file? Could you please send me an small
>> example?
>>
>> Thanks in advance,
>>
>> GA
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Props file example

2009-10-12 Thread Timothy Perrett


Note that you can also intermix this with runtimes:

default.props
default.pilot.props

Doing something like that can let you automatically load different  
properties based on the run mode lift is in (production vs dev etc)

Your code will still look like:

Props.get("some.key") //=> Box[String]

HTH

Cheers, Tim

On 12 Oct 2009, at 14:36, Peter Robinett wrote:

>
> It's a simple java.properties file. You should place it in src/main/
> resources/props. There is a search order but, off the top of my head,
> the last two options are the username running the app (e.g.
> peter.props) and default.props.
>
> My peter.props looks like this:
> db.driver=com.mysql.jdbc.Driver
> db.url=jdbc:mysql://localhost/myDB
> db.user=myUser
> db.password=myPassword
> isPeter=true
>
> Notice that you can define your own properties.
>
> Peter Robinett
>
> On Oct 12, 2:42 pm, Guillermo Acilu  wrote:
>> Hello guys,
>>
>> I am starting to learn Lift and I have a very silly question.
>>
>> I am using postgresql and I have seen that the file boot.scala reads
>> the configuration parameters like connect string, user name and
>> password, from a properties file called Props. I could not find an
>> example of such a file in any document or in google. Is it a XML file
>> or a simple java.properties file? Could you please send me an small
>> example?
>>
>> Thanks in advance,
>>
>> GA
> >
>


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Props file example

2009-10-12 Thread Peter Robinett

It's a simple java.properties file. You should place it in src/main/
resources/props. There is a search order but, off the top of my head,
the last two options are the username running the app (e.g.
peter.props) and default.props.

My peter.props looks like this:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.user=myUser
db.password=myPassword
isPeter=true

Notice that you can define your own properties.

Peter Robinett

On Oct 12, 2:42 pm, Guillermo Acilu  wrote:
> Hello guys,
>
> I am starting to learn Lift and I have a very silly question.
>
> I am using postgresql and I have seen that the file boot.scala reads  
> the configuration parameters like connect string, user name and  
> password, from a properties file called Props. I could not find an  
> example of such a file in any document or in google. Is it a XML file  
> or a simple java.properties file? Could you please send me an small  
> example?
>
> Thanks in advance,
>
> GA
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: PayPal Subscriptions

2009-10-12 Thread Ryan Donahue

Just tested with paypal sandbox and it works, thanks.

On Oct 11, 5:59 pm, Timothy Perrett  wrote:
> Ryan,
>
> I have pushed the code to master so give it a couple of hours and  
> Hudson should automatically start pulling those changes into 1.1-
> SNAPSHOT JARs for you. Alternatively do a pull and build locally.
>
> Cheers, Tim
>
> On 10 Oct 2009, at 01:38, Timothy Perrett wrote:
>
>
>
> > Ryan,
>
> > Ignore my last email please - i've just tested the change using the
> > IPN simulator and it now handles the Cancel message properly by
> > passing Empty.
>
> > The change is on my branch here:
>
> >http://github.com/dpp/liftweb/commit/451dd3cb97e562a063da5cfe046badf1...
>
> > Cheers, Tim
>
> > On Oct 10, 1:05 am, Timothy Perrett  wrote:
> >> Ryan,
>
> >> Looking at it, the strange thing is actually why it compiles now, not
> >> why it doesn't compile with the change you suggested.
>
> >> Given:
>
> >> for (info <-  buildInfo(resp, r);
> >>   // stat is going to be a Box[PaypalTransactionStatus.Value] anyway
> >>   // because of L489.
> >>   stat <- info.paymentStatus) yield {
> >>   actions((stat, info, r))
> >>   true
>
> >> }
>
> >> So, it appears that adding the Box[] to the partial function
> >> definition would just make the type exactly right. Im starting to
> >> write some mock tests etc as this is going to need testing
> >> programatically.
>
> >> More to come soon.
>
> >> Cheers, Tim
>
> >> On Oct 9, 7:03 pm, Ryan Donahue  wrote:
>
> >>> Here's a diff showing the changes I made.  Notice I added a case  
> >>> to the
> >>> SimplePaypal.actions method that I'd think would fail compilation  
> >>> but does
> >>> not.
>
> >>> On Fri, Oct 9, 2009 at 1:08 PM, Ryan Donahue   
> >>> wrote:
>  Well, I am a scala newb, but I know maven all too well.  I ran  
>  "mvn clean
>  install" from the lift-paypal dir to install lift-paypal-1.1-
>  SNAPSHOT.jar to
>  my local repo.
>
>  To be sure, I changed the signature as follows which does cause  
>  errors:
>  def actions: PartialFunction[(PayPalInfo, Req), Unit]
>
>  Change back to def actions:
>  PartialFunction[(Box[PaypalTransactionStatus.value], PayPalInfo,  
>  Req), Unit]
>  and no errors.
>
>  On Fri, Oct 9, 2009 at 12:35 PM, Timothy Perrett  
>  wrote:
>
> > Hey Ryan,
>
> > How *exactly* did you locally do the build? If you had done the
> > install of your altered lift-paypal then you would certainly get a
> > compile error because the signature has changed. The new syntax  
> > should
> > be:
>
> > object MyIPN extends PaypalIPN {
> >  def actions = {
> >    case (Full(CompletedPayment), info, req) => // do something
> >  }
> > }
>
> > The only exclusion would be if you had a implicit conversion to  
> > Box
> > PaypalTransactionStatus types that were unboxed.
>
> > Cheers, Tim
>
> > On Oct 9, 3:46 pm, Ryan Donahue  wrote:
> >> Tim,
>
> >> I locally changed the PaypalIPN.actions method return type to
> >> trait PaypalIPN {
> >>   def actions: PartialFunction[(Box
> >> [PaypalTransactionStatus.Value],
> >> PayPalInfo, Req), Unit]
>
> >> }
>
> >> Apparently this does not cause any compilation errors for user
> >> implementing their own IPN handler as follows
> >> object MyIPN extends PaypalIPN {
> >>   import PaypalTransactionStatus._
> >>   def actions = {
> >>     case (CompletedPayment, info, req) => // do something
> >>   }
>
> >> }
>
> >> This is not good since I assume the result is that the case won't
> >> match anymore but we won't have a compilation error to tell us to
> >> change our code.  Maybe I missed something, I am a scala  
> >> newbie :)
>
> >> -Ryan
>
> >> On Oct 8, 3:57 pm, Timothy Perrett   
> >> wrote:
>
> >>> Ok cool, I'll take a look at this tomrrow all being well.
>
> >>> Thanks for the feedback
>
> >>> Cheers, Tim
>
> >>> Sent from my iPhone
>
> >>> On 8 Oct 2009, at 20:43, Ryan Donahue   
> >>> wrote:
>
>  I created the ticket:http://github.com/dpp/liftweb/issues/
>  #issue/88
>
>  I do receive the payment_status field for PDT.  I bet in  
>  practice
>  you will never receive a payment_status value other than  
>  Completed,
>
>  because if the payment was not completed PayPal would not  
>  redirect
>  the user's browser back to your PDT URL.  However, I have not
>  verified this and do check the payment status in my PDT code  
>  anyway
>
>  (how could I verify that it will never happen?).  So I would  
>  prefer
>
>  that both were consistent, but just boxing the IPN payment  
>  status
>  will be fine too :)
>
>  On Thu, Oct 8, 2009 at 2:49 PM, Timothy Perrett
> >  > wrote:
>  Im not married to the current API, so breaking changes are OK  
> 

[Lift] Props file example

2009-10-12 Thread Guillermo Acilu

Hello guys,

I am starting to learn Lift and I have a very silly question.

I am using postgresql and I have seen that the file boot.scala reads  
the configuration parameters like connect string, user name and  
password, from a properties file called Props. I could not find an  
example of such a file in any document or in google. Is it a XML file  
or a simple java.properties file? Could you please send me an small  
example?

Thanks in advance,

GA


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Viktor Klang
Also, a demo of working with maven + jRebel to get easy to test development

On Mon, Oct 12, 2009 at 12:27 PM, Timothy Perrett
wrote:

>
> Agreed - the security stuff is pretty cool and adds value for sure.
> Thanks for the thoughts - I need to get writing!
>
> Cheers, Tim
>
> On 12 Oct 2009, at 10:14, Viktor Klang wrote:
>
> > :-)
> > Perhaps something like
> >
> > The Lift philosophy
> > View-first - Pros and Cons
> > Comet OOTB (the 30 line chat example is always a crowd-pleaser)
> > The security model (random uids, SiteMap, Http Auth etc)
> > Performance and scaling
> >
> > That's what's on top of my head...
>
>
> >
>


-- 
Viktor Klang

Blog: klangism.blogspot.com
Twttr: viktorklang

Lift Committer - liftweb.com
AKKA Committer - akkasource.org
Cassidy - github.com/viktorklang/Cassidy.git
SoftPub founder: http://groups.google.com/group/softpub

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Timothy Perrett

Agreed - the security stuff is pretty cool and adds value for sure.
Thanks for the thoughts - I need to get writing!

Cheers, Tim

On 12 Oct 2009, at 10:14, Viktor Klang wrote:

> :-)
> Perhaps something like
>
> The Lift philosophy
> View-first - Pros and Cons
> Comet OOTB (the 30 line chat example is always a crowd-pleaser)
> The security model (random uids, SiteMap, Http Auth etc)
> Performance and scaling
>
> That's what's on top of my head...


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Extend the tables that like the migration in the Rails ?

2009-10-12 Thread Peter Robinett

Is User added to Schemefier in Boot.scala? It should look something
like: Schemifier.schemify(true, Log.infoF _, User)

Peter Robinett

On Oct 12, 11:22 am, "Neil.Lv"  wrote:
> Hi all,
>
>    I don't know whether there is a mechanism that like the migration
> of the Rails in the Liftweb, and how can we
>
> extend the table, such as add a column "desc " into a table users (OR
> user ?).
>
>    I add this code in the User model and restart the server, the table
> don't change anything !
>    ###
>    class User extends MegaProtoUser[User] {
>      ...
>      object desc extends MappedPoliteString(this, 128)
>      ...
>    }
>    ###
>
>   How can i do if i want to achieve this purpose ?
>
>   Thanks for any suggestion!
>
> Cheers,
>   Neil
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

I've spent some time and came up with this code:
http://github.com/ojow/Random-code/blob/master/Test.scala
I think it should allow all the needed stuff, it keeps meaning with
the bytes and also:
* its reusable/extensible in many directions, no static stuff
* i checked generated .class files and looks like no extra hidden
fields or heave methods are generated, so its technically light-weight
* it doesn't use/need reflection (not sure if its good or bad)

Would be nice to hear some feedback on that.

P.S. I'm still a newbie in Scala so excuse me if this code is
worthless and if i'm just stealing your time.

On Oct 7, 3:54 am, David Pollak  wrote:
> On Tue, Oct 6, 2009 at 10:16 AM, Oleg G.  wrote:
>
> > As i said before i'm not sure that i'm getting the whole picture and
> > maybe my initial question is incorrect in its root. Still:
>
> > Suppose i have a Person class declared with Mapper/Record and i want
> > to reuse the class and all the code associated with it in another
> > module/project. My first thought was to extend the Person class and
> > override some of its fields by mixing in some additional traits (see
> > my simplified example code in the initial message). But i noticed that
> > inner objects cannot be overriden (its not obvious for me but i can
> > get it if i dig it).
>
> You can't do this.  There was a Scala language feature that would have
> allowed this (overriding an object) but it hasn't made the cut for 2.7 or
> 2.8.
>
>
>
> > So how do i reuse Mapper/Record based code if i need to extend/
> > customize the data structures?
>
> Unfortunately, you can't.  Once you've got a field defined, there's nothing
> you can do to change it in a subclass.
>
>
>
>
>
>
>
> > On Oct 6, 11:59 pm, David Pollak 
> > wrote:
> > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G.  wrote:
>
> > > > Thanks for all the answers and especially for David's clarification.
> > > > It would be really cool to upgrade the 'keeping the meaning with the
> > > > bytes' thing (http://blog.lostlake.org/index.php?/archives/19-Keeping-
> > > > the-meaning-with-the-bytes.html) to allow extension/customization.
>
> > > What kind of extensions/customizations?
>
> > > MappedXXX can all be subclassed, extended and customized.
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Basic Theory Question: User Management and Access Controls

2009-10-12 Thread opyate

Hi Dave,

Have a look at the Lift book:
http://groups.google.com/group/the-lift-book
Master PDF here: http://build.schuerrer.org/liftbook/master.pdf

There's a section on AuthRole (see p.122 or there-abouts)

Regards,
Juan

On Oct 10, 9:18 pm, Dave  wrote:
> Hi all-
>
> I am creating a site which has two types of users, of which many of
> you have probably read about before.  This is more of a theory
> question:  What is the proper (standard, best, easiest whatever) way
> to manage user types.  Right now I'm doing most of this through the
> SiteMapper, using If objects to determine what type of user is logged
> in and then send them on their merry way. For instance, I do something
> like this to make sure logged in users are sent to the right places:
>
> val anyLoggedIn  = If(() => !(Student.loggedIn_? ||
> Provider.loggedIn_?),
>                 if (sessionLoginType.is map {_ == StudentLogin} openOr false)
>                 {
>                         println("student")
>                         RedirectResponse("studentHome")
>
>                 }
>                 else
>                 {
>                         println("provider")
>                         RedirectResponse("providerHome")
>                 }
>     )
>
>     // Build SiteMap
>     val entries = ...
>     Menu(Loc("loginBase", ("login"::""::Nil)->true, "Login Base",
> Hidden, anyLoggedIn))::
>
> What say you assembled lifters?
>
> Thanks,
>
> Dave

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] beyond widgets: plugins (modular architecture)

2009-10-12 Thread opyate

Hey guys,

I had a look at this thread:

http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gst&q=plugin+modular#f6719565f6550513

I'm about to attempt the same. The base app (BASE) will provide a
basic workflow system based on roles. The rest of the functionality
will be implemented via plugins (PLUGIN).

I do have a couple of issues, though:

1) Is this correct?: PLUGIN is NOT necessarily generated with lift-
archetype-blank but follows a similar folder structure:
src/main/scala/bootstrap/liftweb
src/main/scala/my/app/plugins/pluginX
src/main/webapp (no WEB-INF, and referenced in BASE's classpath)

2) BASE needs to "load" PLUGIN by calling
LiftRules.addToPackages("my.app.plugins.pluginX")
...but PLUGIN also needs to know about BASE's roles to utilise the
workflow functionality.
Will this cause a circular dependency issue?

A solution to this may be factoring out the roles model component and
workflow interface into a separate dependency:
BASE ref {PLUGIN,ROLE}
PLUGIN ref ROLE

For the time being I'll put all my functionality into a monolithic
app, but it would be cool to hear everyone's thoughts on this, and
hopefully make it more modular soon.

Thanks,
Juan

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Question about the TreeViewDemo in the lift widgets section of the Exploring LIft pdf

2009-10-12 Thread Jim Barrows

I've interpreted the demo as the code below.  However, I get this
exception when I compile:
/snippet/TreeViewDemo.scala:14: error: not found: value JsObj
TreeView("example", JsObj("animated"->90))

I'm not sure what I'm doing wrong I'd appreciate any help.

Here's the code:
package com.nsfw.bmp.businesssetup.snippet

import _root_.net.liftweb.http._
import S._
import _root_.net.liftweb.http.js.JsObj
import _root_.net.liftweb.util._
import Helpers._
import _root_.net.liftweb.widgets.tree._
import _root_.scala.xml._

class TreeViewDemo {

  def render(xhtml:Group):NodeSeq={
TreeView("example", JsObj(("animated"->90)))
  }

  def loadTree() = {
Tree("No Children")::
  Tree("one static child", Tree("Lone child") :: Nil) ::
 Tree("Dynamic node", "myDynamic", true) :: Nil
  }

  def loadNode(id:String) : List[Tree] = id match {
case "myDyanmic" =>
  Tree("Child one") ::
Tree("Child two") ::Nil
case _ => Nil
}

}

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Why fields are declared as 'object' with Mapper/Record?

2009-10-12 Thread Oleg G.

I spent some time and came up with this code:
http://github.com/ojow/Random-code/blob/master/Test.scala
I think it should allow all the needed stuff, it keeps meaning with
the bytes and also:
* its reusable and extensible in many directions
* looks like generated .class files don't have any additional hidden
fields or heavy methods, so it's technically light-weight
* it doesn't need reflection (not sure if its good or bad :)

Would be nice to hear some feedback on that.

P.S. I'm still a newbie in Scala so please excuse me if this code is
worthless and if i'm just wasting your time.

On Oct 7, 3:54 am, David Pollak  wrote:
> On Tue, Oct 6, 2009 at 10:16 AM, Oleg G.  wrote:
>
> > As i said before i'm not sure that i'm getting the whole picture and
> > maybe my initial question is incorrect in its root. Still:
>
> > Suppose i have a Person class declared with Mapper/Record and i want
> > to reuse the class and all the code associated with it in another
> > module/project. My first thought was to extend the Person class and
> > override some of its fields by mixing in some additional traits (see
> > my simplified example code in the initial message). But i noticed that
> > inner objects cannot be overriden (its not obvious for me but i can
> > get it if i dig it).
>
> You can't do this.  There was a Scala language feature that would have
> allowed this (overriding an object) but it hasn't made the cut for 2.7 or
> 2.8.
>
>
>
> > So how do i reuse Mapper/Record based code if i need to extend/
> > customize the data structures?
>
> Unfortunately, you can't.  Once you've got a field defined, there's nothing
> you can do to change it in a subclass.
>
>
>
>
>
>
>
> > On Oct 6, 11:59 pm, David Pollak 
> > wrote:
> > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G.  wrote:
>
> > > > Thanks for all the answers and especially for David's clarification.
> > > > It would be really cool to upgrade the 'keeping the meaning with the
> > > > bytes' thing (http://blog.lostlake.org/index.php?/archives/19-Keeping-
> > > > the-meaning-with-the-bytes.html) to allow extension/customization.
>
> > > What kind of extensions/customizations?
>
> > > MappedXXX can all be subclassed, extended and customized.
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Surf the harmonics

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Extend the tables that like the migration in the Rails ?

2009-10-12 Thread Neil.Lv

Hi all,

   I don't know whether there is a mechanism that like the migration
of the Rails in the Liftweb, and how can we

extend the table, such as add a column "desc " into a table users (OR
user ?).

   I add this code in the User model and restart the server, the table
don't change anything !
   ###
   class User extends MegaProtoUser[User] {
 ...
 object desc extends MappedPoliteString(this, 128)
 ...
   }
   ###

  How can i do if i want to achieve this purpose ?

  Thanks for any suggestion!

Cheers,
  Neil

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Viktor Klang
On Mon, Oct 12, 2009 at 11:06 AM, Timothy Perrett
wrote:

>
> Completly :-)
>
> Thats why i just want to present a strong case of features and get
> away from code on slides. I might do a few slides showing some code,
> perhaps for things like template binding or comet. But generally id
> like to think about features.
>
> So, what might you suggest mate?
>

:-)
Perhaps something like

The Lift philosophy
View-first - Pros and Cons
Comet OOTB (the 30 line chat example is always a crowd-pleaser)
The security model (random uids, SiteMap, Http Auth etc)
Performance and scaling

That's what's on top of my head...


>
> Cheers, Tim
>
> On 12 Oct 2009, at 08:27, Viktor Klang wrote:
>
> > I think that focusing on the selling points is a good strategy,
> > people cannot and will not learn the code in the preso, so
> > demonstrating _why_ Lift is a good choice if you value the things
> > that Lift brings to the table, and then start lining up things on
> > the table.
>
>
> >
>


-- 
Viktor Klang

Blog: klangism.blogspot.com
Twttr: viktorklang

Lift Committer - liftweb.com
AKKA Committer - akkasource.org
Cassidy - github.com/viktorklang/Cassidy.git
SoftPub founder: http://groups.google.com/group/softpub

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Timothy Perrett

Completly :-)

Thats why i just want to present a strong case of features and get  
away from code on slides. I might do a few slides showing some code,  
perhaps for things like template binding or comet. But generally id  
like to think about features.

So, what might you suggest mate?

Cheers, Tim

On 12 Oct 2009, at 08:27, Viktor Klang wrote:

> I think that focusing on the selling points is a good strategy,  
> people cannot and will not learn the code in the preso, so  
> demonstrating _why_ Lift is a good choice if you value the things  
> that Lift brings to the table, and then start lining up things on  
> the table.


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Timothy Perrett

Hey Rick,

Thanks for your feedback - its often helpful to get an outsiders  
perspective!

Making note about the session granularity is an interesting one - if  
you had to give a simple message to someone else like yourself who was  
coming to lift about this, what would you say to them?

Cheers, Tim



On 11 Oct 2009, at 23:09, Rick R wrote:

> From an outsider: Comet/Actors was a big draw for me to Lift. As I  
> learned more, the view-first philosophy began becoming very helpful.
>
> In addition, it offers an insanely powerful session state API.
> It is also secure by default, offering many features that would be a  
> pain to retrofit into a system.
> The component oriented views/templates and no-single-controller  
> philosophy is also a major win. IMO it, along with Nitrogen may be  
> the only major framework to actually offer true modularization.
>
> It was these and other benefits that lured me despite its  
> integration with the existing JEE infrastructure. Coming from a  
> functional and c++ background, Lift's association with Java was a  
> detriment in my eyes. I am know that there are others like me, and,  
> depending on the audience, it may need to be addressed.
>
> Just my two cents. Good luck with your talk!
>
> On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett  > wrote:
>
> Guys,
>
> In about a month im speaking at a fairly sizeable event in Belgium and
> wanted to ask a few questions about what users see at Lift's unique
> value proposition. I did a talk about lift at a bar-camp recently and
> whilst they were fairly well received, I think i still assumed too
> much information. To that end, I thought by focusing on some of lifts
> super cool features in a broad way I would then aim to give people a
> better overview / warm fuzzy feeling about Lift in the allotted hour.
>
> So what are Lift's UVP's? My list looks a little like:
>
> - OOTB Comet (probably what draws most people to lift)
> - View first / code free templating
> - Utilisation of existing JEE infrastructure (WARs, JPA etc)
> - Non-perscriptive but highly configurable framework
>
> Then we also have some stuff that we inherit from scala:
>
> - traits
> - concise but type safe code
> - etc etc etc
>
> What do people think? I have an hour to make people feel good about
> Lift and hopefully give them enough of a taste to go away and try it
> later - am i missing anything blindingly obvious? This isnt a hard and
> fast outline of my preso, just trying to kick around some thoughts and
> ideas :-)
>
> Cheers, Tim
>
>
>
> >


--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Dynamic SiteMap

2009-10-12 Thread Jeppe Nejsum Madsen

Dave  writes:

[...]

> Specifically, since both of my user types extend MegaProtoUser, I end
> up with loggedIn_? function that tells if some user is logged in, but
> is confused about which.  So if a user of type 1 logs in and I call
> UserType2.loggedIn_?, it will also return true.  Is there a way to
> check for this in If statements?  Or is it necessary to override
> loggedIn_? (which I've been trying, but has been pretty slow going so
> far).

Is there a reason you need two user _types_? It sounds like this could
be accomplished by adding a role to the user.

Then you could easily do If(User.loggedIn_?  && User.role1_?)

/Jeppe

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Dynamic SiteMap

2009-10-12 Thread Jeppe Nejsum Madsen

"marius d."  writes:

> First of all I'm not reinventing anything. I don't think that If
> LocParam semantic is giving you the hidden functionality as well.

I haven't checked closely, but the scaladoc seem to indicate that it
does. And in my own menu snippets (which is based on the original menu
snippet), inaccessible items doesn't show either

  /**
   * If the test returns True, the page can be accessed, otherwise,
   * the result of FailMsg will be sent as a response to the browser.
   * If the Loc cannot be accessed, it will not be displayed in menus.
   *
   * @param test -- the function that tests access to the page
   * @param failMsg -- what to return the the browser (e.g., 304, etc.) if
   * the page is accessed.
   */
  case class If(test: () => Boolean, failMsg: FailMsg) extends LocParam

/Jeppe

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Lift UVP's

2009-10-12 Thread Viktor Klang
I think that focusing on the selling points is a good strategy, people
cannot and will not learn the code in the preso, so demonstrating _why_ Lift
is a good choice if you value the things that Lift brings to the table, and
then start lining up things on the table.



On Mon, Oct 12, 2009 at 12:09 AM, Rick R  wrote:

> From an outsider: Comet/Actors was a big draw for me to Lift. As I learned
> more, the view-first philosophy began becoming very helpful.
>
> In addition, it offers an insanely powerful session state API.
> It is also secure by default, offering many features that would be a pain
> to retrofit into a system.
> The component oriented views/templates and no-single-controller philosophy
> is also a major win. IMO it, along with Nitrogen may be the only major
> framework to actually offer true modularization.
>
> It was these and other benefits that lured me *despite* its integration
> with the existing JEE infrastructure. Coming from a functional and c++
> background, Lift's association with Java was a detriment in my eyes. I am
> know that there are others like me, and, depending on the audience, it may
> need to be addressed.
>
> Just my two cents. Good luck with your talk!
>
>
> On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett 
> wrote:
>
>>
>> Guys,
>>
>> In about a month im speaking at a fairly sizeable event in Belgium and
>> wanted to ask a few questions about what users see at Lift's unique
>> value proposition. I did a talk about lift at a bar-camp recently and
>> whilst they were fairly well received, I think i still assumed too
>> much information. To that end, I thought by focusing on some of lifts
>> super cool features in a broad way I would then aim to give people a
>> better overview / warm fuzzy feeling about Lift in the allotted hour.
>>
>> So what are Lift's UVP's? My list looks a little like:
>>
>> - OOTB Comet (probably what draws most people to lift)
>> - View first / code free templating
>> - Utilisation of existing JEE infrastructure (WARs, JPA etc)
>> - Non-perscriptive but highly configurable framework
>>
>> Then we also have some stuff that we inherit from scala:
>>
>> - traits
>> - concise but type safe code
>> - etc etc etc
>>
>> What do people think? I have an hour to make people feel good about
>> Lift and hopefully give them enough of a taste to go away and try it
>> later - am i missing anything blindingly obvious? This isnt a hard and
>> fast outline of my preso, just trying to kick around some thoughts and
>> ideas :-)
>>
>> Cheers, Tim
>>
>>
>
> >
>


-- 
Viktor Klang

Blog: klangism.blogspot.com
Twttr: viktorklang

Lift Committer - liftweb.com
AKKA Committer - akkasource.org
Cassidy - github.com/viktorklang/Cassidy.git
SoftPub founder: http://groups.google.com/group/softpub

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



[Lift] Re: Dynamic SiteMap

2009-10-12 Thread marius d.

First of all I'm not reinventing anything. I don't think that If
LocParam semantic is giving you the hidden functionality as well. User
type 2 should not even see the menus for user type 1, not only to not
be able to access those locations.

The way I see it this functionality should be totally irrespective of
Mappers or any persistence store. It is just a matter of how you
implement the function passed to If and other LocParams.

You can also implement your own Loc and override the calcHidden
function and you can decide what to render there. I still think that a
conditional hidden LocParam would be helpful.

Br's,
Marius.

On Oct 12, 2:27 am, Dave  wrote:
> Marius-
>
> Thanks for your help on this.  I guess I'm not sure how this differs
> from the current conception of the If LocParam. As I understand it, it
> is checked when determining what to display on the Menu as well as
> when a User attempts to access the page (or its subdirectory if
> passing a pair).  If this is true, then I think there is no need to
> reinvent the wheel per se. Assuming I'm right and we can use If's to
> accomplish this functionality, I can follow up this query with an
> implementation based question.  Specifically, since both of my user
> types extend MegaProtoUser, I end up with loggedIn_? function that
> tells if some user is logged in, but is confused about which.  So if a
> user of type 1 logs in and I call UserType2.loggedIn_?, it will also
> return true.  Is there a way to check for this in If statements?  Or
> is it necessary to override loggedIn_? (which I've been trying, but
> has been pretty slow going so far).
>
> Thanks
> Dave
>
> On Oct 11, 12:36 pm, "marius d."  wrote:
>
> > Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test
> > would be used in conjunction with CondHidden to also provide
> > accessibility constraints.
>
> > Here is the definition
>
> > case object CondHidden(test: () => Boolean) extends LocParam
>
> > but we also have case class If(test: () => Boolean, failMsg: FailMsg)
> > extends LocParam
>
> > So the test function is the same which means that you essentially
> > implement one function and provide it to both LocParam's. We could
> > probably combine the two LocParams in a:
>
> > IfHidden(test: () => Boolean, failMsg: FailMsg)  // if you have a
> > better name please let me know :)
>
> > The test function would be called in two cases:
>
> > 1. When rendering the Menu to see is the Menu should be rendered or
> > not
> > 2. When try to access the location to as a security check
>
> > I could probably add it this week and point you to my branch to check
> > it out. If I runt into something weird that I cannot foresee I'll let
> > you know.
>
> > Would this work for you?
>
> > Other people are welcome to comment as well ...
>
> > Br's,
> > Marius
>
> > On Oct 11, 7:06 pm, Dave  wrote:
>
> > > Hi Marius,
>
> > > Thanks for the response.  The LocParam is a good idea, but here is the
> > > attendant problem.  No only do I have to hide options A,B,C from user
> > > type 2, I have to make sure user type 2 does not access those pages/
> > > areas.  Can I include that in the locParam as well?  Right now, I'm
> > > using an If() val to determine what type of user it is, and then
> > > funnel accordingly. I assume i can just include both the if (to
> > > determine access/where to send) and then the conditional hider
> > > LocParam if necessary. But can I bundle both into a more DRY solution?
>
> > > Thanks,
>
> > > Dave
>
> > > On Oct 11, 2:54 am, "marius d."  wrote:
>
> > > > So doesn't what I described about help you? ... a conditional Hidden
> > > > LocParam? ...thus the SiteMap contains all A, B, C, D, E, F menus but
> > > > for user type 1 D, E,, F are hidden, and for user type 2 A, B, C are
> > > > hidden. The decision would done in the function that you provide to
> > > > CondHidden.
>
> > > > If this helps the new LocParam could be added with not much problems.
>
> > > > If this doesn't work for you, please elaborate.
>
> > > > Br's,
> > > > Marius
>
> > > > On Oct 11, 2:09 am, Dave  wrote:
>
> > > > > Hi all-
>
> > > > > I am interested in a similar question.  I have two types of users and
> > > > > once logged in, I'd like to provide them with distinct menu options.
> > > > > For instance User type one would have a menu with A / B / C and User
> > > > > Type Two would have D / E / F.  I have tried a variety of approaches
> > > > > including storing a session variable when the user first logs in, but
> > > > > because the sitemap is already built, its tough to modify
> > > > > dynamically.  Further, unfortunately, User1.sitemap and User2.sitemap
> > > > > don't play well together, and only one should be shown at one time
> > > > > depending on the user type.  Not to take away from Markus' question,
> > > > > but if someone could address this more concrete scenario, it would be
> > > > > much appreciated.
>
> > > > > Thanks,
> > > > > Dave
>
> > > > > On Oct 10, 5:09 pm, "marius d.