[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 davidtgoldb...@gmail.com 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. marius.dan...@gmail.com 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 davidtgoldb...@gmail.com 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. marius.dan...@gmail.com 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 davidtgoldb...@gmail.com 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. marius.dan...@gmail.com wrote:

  Well SiteMap is per LiftRules which means it's per application
  runtime. One approach would 

[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 rick.richard...@gmail.com 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 
 timo...@getintheloop.euwrote:


 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 Jeppe Nejsum Madsen

marius d. marius.dan...@gmail.com 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: Dynamic SiteMap

2009-10-12 Thread Jeppe Nejsum Madsen

Dave davidtgoldb...@gmail.com 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: 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 timo...@getintheloop.eu 
  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: 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 Viktor Klang
On Mon, Oct 12, 2009 at 11:06 AM, Timothy Perrett
timo...@getintheloop.euwrote:


 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] 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] 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'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 feeder.of.the.be...@gmail.com wrote:
 On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. ojo...@gmail.com 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 feeder.of.the.be...@gmail.com
  wrote:
   On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. ojo...@gmail.com 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: 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 anim...@gmail.com 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: 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 timo...@getintheloop.eu 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 timo...@getintheloop.eu 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 donahu...@gmail.com 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 donahu...@gmail.com  
  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  
  timo...@getintheloop.euwrote:

  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 donahu...@gmail.com 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 timo...@getintheloop.eu  
  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 donahu...@gmail.com  
  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
  timo...@getintheloop.eu
  wrote:
  Im not married to the current API, so breaking changes are OK  
  as
  there are only a handful of people using this code right now.

  To be honest, this whole situation just underlines the need for
  mocking in this module of lift... i've been meaning to do it  
  since
  the beginning but just never got round to it and lack of  
  general
  demand.

  Just about why they have a different signature... if memory  
  serves
  that would be because PaypalTransactionStatus is not supplied  
  for
  PDT. So whilst I see your point about them being consistent,  
  im not

  

[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 my_li...@me.com 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 my_li...@me.com 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 my_li...@me.com 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] 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] 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 Klangviktor.kl...@gmail.com 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
timo...@getintheloop.euwrote:


 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: beyond widgets: plugins (modular architecture)

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 1:31 AM, opyate opy...@gmail.com wrote:


 Hey guys,

 I had a look at this thread:


 http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gstq=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 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 timo...@getintheloop.eu 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 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. marius.dan...@gmail.com 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 davidtgoldb...@gmail.com 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. marius.dan...@gmail.com 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 

[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 anim...@gmail.com 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 feeder.of.the.be...@gmail.com 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 anim...@gmail.com 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: 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 naftoli...@gmail.comwrote:

 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 har...@gmail.com 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 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: 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
timo...@getintheloop.euwrote:


 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 timo...@getintheloop.eu 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.

On 13 окт, 00:08, naf g naftoli...@gmail.com 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 Naftoli Gugenheim
So Model represents the database connection?

2009/10/12 Oleg G. ojo...@gmail.com


 On 13 окт, 00:08, naf g naftoli...@gmail.com 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: 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 feeder.of.the.be...@gmail.com
 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 
 naftoli...@gmail.comwrote:

 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 har...@gmail.com 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 David Pollak
On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. ojo...@gmail.com 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: 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 feeder.of.the.be...@gmail.com wrote:
 On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. ojo...@gmail.com 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: 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: 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 dri...@gmail.com 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 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 dri...@gmail.com  
 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 dri...@gmail.com 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 dri...@gmail.com
 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 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 dri...@gmail.com  
 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 dri...@gmail.com
 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: 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 naftoli...@gmail.comwrote:


 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] 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: 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] 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 dri...@gmail.com 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 lift:bind

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 lift:bind: content
20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values  
for lift:bind: 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 lift:bind:  +
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

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 timo...@getintheloop.eu 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 dri...@gmail.com 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 timo...@getintheloop.eu 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 dri...@gmail.com 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

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 dri...@gmail.com 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 timo...@getintheloop.eu 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 dri...@gmail.com 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 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
timo...@getintheloop.eu 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: 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: yehu...@lrbcol.org
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 naftoli...@gmail.com; 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
feeder.of.the.be...@gmail.com 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 naftoli...@gmail.com
 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 dri...@gmail.com 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 timo...@getintheloop.eu 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 dri...@gmail.com 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: 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 pe...@bubblefoundry.com 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 anim...@gmail.com 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: yehu...@lrbcol.org
 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 naftoli...@gmail.com; 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
 feeder.of.the.be...@gmail.com 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 naftoli...@gmail.com 
 
 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: 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 feeder.of.the.be...@gmail.com
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 anim...@gmail.com 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 feeder.of.the.be...@gmail.com 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 anim...@gmail.com 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 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 anim...@gmail.com 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 pe...@bubblefoundry.com 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 anim...@gmail.com 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: 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 feeder.of.the.be...@gmail.com
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 anim...@gmail.com 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 pe...@bubblefoundry.com 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 anim...@gmail.com 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: URL in PlainMailBodyType to BlackBerry

2009-10-12 Thread David Pollak
On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 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: yehu...@lrbcol.org
 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 naftoli...@gmail.com; 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
 feeder.of.the.be...@gmail.com 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 naftoli...@gmail.com
 
  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 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 Pollakfeeder.of.the.be...@gmail.com wrote:

On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim naftoli...@gmail.comwrote:


 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: yehu...@lrbcol.org
 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 naftoli...@gmail.com; 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
 feeder.of.the.be...@gmail.com 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 naftoli...@gmail.com
 
  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: 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. ojo...@gmail.com


 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 naftoli...@gmail.com 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 

[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$.init:(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
-~--~~~~--~~--~--~---