Jörn Nettingsmeier wrote:
Andreas Hartmann wrote:
Jörn Nettingsmeier wrote:
as a java exercise, i hacked together an alternate version that uses an abstract class AbstractChangePassword that has all the common features, and two derived classes ChangePassword and ChangePasswordAdmin that each add their own extensions. (i chose to do it this way because each of these classes has features that the other hasn't, so there was no obvious way to do it with inheritance.)

This sounds reasonable, and at the first glance your patch looks
very good. Maybe it would make sense to make

  AbstractChangePassword.getUser()

abstract. ChangePassword.getUser() would just return the currently
logged-in user, and AdminChangePassword() would return the user
determined by the userId parameter. WDYT?

i tried it, but then it seemed better to have a variable
  private User user
that defaults to null in AbstractChangePassword, and to set it to the current user in the constuctor of ChangePassword. otherwise the code to determine the current user would be called many times...

That can be solved by lazy loading. But communication between classes
should happen over methods, not fields - even in class hierarchies.


a patch is attached, but it does not work, since i'm still stuck with another problem: i want the AbstractChangePassword to initialize "user" with the userId of the currently logged in user, but i can't seem to find out where to get that kind of information... i tried
  Map objectModel = ContextHelper.getObjectModel(getContext());
  Request request = ObjectModelHelper.getRequest(objectModel);
  this.user = Identity.getIdentity(request.getSession(true)).getUser();
but that gives an npe since getContext returns null.

Strange, the same code is used in other usecases ...

BTW, an easier way to get the currently logged-in user from a usecase is:

  User user = getSession().getIdentity().getUser();

the same problem. there seems to be a clash:

compile-src:
Compiling 2 source files to /build/lenya-1_4_X/build/lenya/api
/build/lenya-1_4_X/src/java/org/apache/lenya/cms/ac/usecases/ChangePassword.java:32: incompatible types
found   : org.apache.lenya.cms.repository.Session
required: org.apache.cocoon.environment.Session
       Session session = getSession();

You have to use explicit naming (incl. package) for one session object.

                                   ^
however, the session interface does not define a getSession method. i'm confused....

You need the o.a.l.cms.repository.Session for this purpose.

-- Andreas


--
Andreas Hartmann
Wyona Inc.  -   Open Source Content Management   -   Apache Lenya
http://www.wyona.com                      http://lenya.apache.org
[EMAIL PROTECTED]                     [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to