[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action ...

Christian Bauer christian at hibernate.org
Wed Apr 4 06:38:13 EDT 2007


  User: cbauer  
  Date: 07/04/04 06:38:13

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki/core/action         
                        Authenticator.java PreferenceEditor.java
                        PluginPreferenceEditor.java DirectoryHome.java
                        NodeBrowser.java WikiIdentity.java NodeHome.java
                        UserHome.java
  Added:       examples/wiki/src/main/org/jboss/seam/wiki/core/action         
                        AdminHome.java
  Log:
  Switched to AJAX forms
  
  Revision  Changes    Path
  1.4       +39 -29    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Authenticator.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- Authenticator.java	22 Mar 2007 12:16:07 -0000	1.3
  +++ Authenticator.java	4 Apr 2007 10:38:13 -0000	1.4
  @@ -6,6 +6,7 @@
   import org.jboss.seam.wiki.core.dao.UserRoleAccessFactory;
   import org.jboss.seam.wiki.core.model.*;
   import org.jboss.seam.wiki.core.model.Role;
  +import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
   import org.jboss.seam.wiki.util.WikiUtil;
   import org.jboss.seam.wiki.util.Hash;
   import org.jboss.seam.ScopeType;
  @@ -20,9 +21,6 @@
       private UserDAO userDAO;
   
       @In
  -    private NodeDAO nodeDAO;
  -
  -    @In
       private Hash hashUtil;
   
       @In
  @@ -61,6 +59,25 @@
           if (user != null) {
               user.setActivated(true);
               user.setActivationCode(null);
  +            Contexts.getEventContext().set("activatedUser", user);
  +
  +            // Optionally, create home directory
  +            UserManagementPreferences userMgmtPrefs =
  +                    (UserManagementPreferences)Component.getInstance("userManagementPreferences");
  +            if ( userMgmtPrefs.isCreateHomeAfterUserActivation() ) {
  +                createHomeDirectory(user);
  +            }
  +
  +            return "activated";
  +        } else {
  +            return "notFound";
  +        }
  +    }
  +
  +    @Transactional
  +    public void createHomeDirectory(User user) {
  +
  +        NodeDAO nodeDAO = (NodeDAO)Component.getInstance("nodeDAO");
   
               // Create home directory
               Directory memberArea = (Directory)Component.getInstance("memberArea");
  @@ -86,13 +103,6 @@
               homeDirectory.addChild(homePage);
               homeDirectory.setDefaultDocument(homePage);
               nodeDAO.makePersistent(homeDirectory);
  -
  -            Contexts.getEventContext().set("activatedUser", user);
  -
  -            return "activated";
  -        } else {
  -            return "notFound";
  -        }
       }
   
       public String logout() {
  
  
  
  1.2       +43 -62    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PreferenceEditor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PreferenceEditor.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PreferenceEditor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- PreferenceEditor.java	2 Apr 2007 18:25:06 -0000	1.1
  +++ PreferenceEditor.java	4 Apr 2007 10:38:13 -0000	1.2
  @@ -1,16 +1,11 @@
   package org.jboss.seam.wiki.core.action;
   
   import org.jboss.seam.annotations.*;
  -import org.jboss.seam.annotations.datamodel.DataModel;
  -import org.jboss.seam.annotations.datamodel.DataModelSelection;
   import org.jboss.seam.ScopeType;
   import org.jboss.seam.Component;
  -import org.jboss.seam.security.Identity;
  -import org.jboss.seam.security.AuthorizationException;
   import org.jboss.seam.core.FacesMessages;
   import org.jboss.seam.wiki.preferences.*;
   import org.jboss.seam.wiki.preferences.PreferenceRegistry;
  -import org.jboss.seam.wiki.core.dao.UserDAO;
   import org.jboss.seam.wiki.core.model.User;
   import org.hibernate.validator.InvalidValue;
   
  @@ -25,80 +20,62 @@
   @Scope(ScopeType.CONVERSATION)
   public class PreferenceEditor implements Serializable {
   
  -    @RequestParameter String visibility;
  -    @RequestParameter Long userId;
  -
       @In
       private FacesMessages facesMessages;
   
  -    @DataModel
  -    private List<PreferenceComponent> preferenceComponents;
  -
  -    @DataModelSelection
  -    private PreferenceComponent selectedPreferenceComponent;
  -
  +    private User user;
       private PreferenceVisibility preferenceVisibility;
  -    private Object user;
   
       private PreferenceComponent preferenceComponent;
       private List<PreferenceValue> preferenceValues;
  +    boolean valuesAreValid = true;
   
  -    @Create
  -    public void create() {
  -        if (PreferenceVisibility.USER.name().equals(visibility)) {
  -            preferenceVisibility = PreferenceVisibility.USER;
  -            loadUser();
  -        } else {
  -            if (!Identity.instance().hasPermission("User", "isAdmin", (User)Component.getInstance("currentUser")) ) {
  -                throw new AuthorizationException("You don't have permission for this operation");
  -            }
  -            preferenceVisibility = PreferenceVisibility.SYSTEM;
  -        }
  -    }
  -
  -    @Factory("preferenceComponents")
  -    public void load() {
  -        PreferenceRegistry registry = (PreferenceRegistry)Component.getInstance("preferenceRegistry");
  -        preferenceComponents =
  -                new ArrayList<PreferenceComponent>(registry.getPreferenceComponents(preferenceVisibility));
  -    }
  -
  -    @Transactional
       public String save() {
  +        if (preferenceComponent == null) return null;
   
  -        boolean validationOk = true;
  -        Map<PreferenceProperty, InvalidValue[]> invalidProperties = preferenceComponent.validate(preferenceValues);
  -        for (Map.Entry<PreferenceProperty, InvalidValue[]> entry : invalidProperties.entrySet()) {
  -            for (InvalidValue validationError : entry.getValue()) {
  -                validationOk = false;
  -
  -                facesMessages.addFromResourceBundleOrDefault(
  -                    FacesMessage.SEVERITY_ERROR,
  -                    "preferenceValueValidationFailed." + preferenceComponent.getName() + "." + entry.getKey().getName(),
  -                    "'" + entry.getKey().getDescription() + "': " + validationError.getMessage());
  -            }
  -        }
  -
  -        if (!validationOk) return null;
  +        validate();
  +        if (!valuesAreValid) return "failed";
   
           PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
           if (preferenceVisibility.equals(PreferenceVisibility.USER)) {
               // Store prefs for a user
  -            preferenceValues = new ArrayList<PreferenceValue>(provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), user, null));
  +            preferenceValues = new ArrayList<PreferenceValue>(
  +                provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), user, null)
  +            );
           } else {
               // Store system prefs
  -            preferenceValues = new ArrayList<PreferenceValue>(provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), null, null));
  +            preferenceValues = new ArrayList<PreferenceValue>(
  +                provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), null, null)
  +            );
           }
           provider.flush();
   
  -        facesMessages.addFromResourceBundleOrDefault(
  +        facesMessages.addToControlFromResourceBundleOrDefault(
  +            "preferenceValidationErrors",
               FacesMessage.SEVERITY_INFO,
  -            "wikiPreferencesSaved",
  +            "preferencesSaved." + preferenceComponent.getName(),
               "Preferences have been saved, continue editing or exit.");
           return null;
       }
   
  -    public void selectPreferenceComponent() {
  +    public void validate() {
  +        if (preferenceComponent == null) return;
  +        valuesAreValid = true;
  +        Map<PreferenceProperty, InvalidValue[]> invalidProperties = preferenceComponent.validate(preferenceValues);
  +        for (Map.Entry<PreferenceProperty, InvalidValue[]> entry : invalidProperties.entrySet()) {
  +            for (InvalidValue validationError : entry.getValue()) {
  +                valuesAreValid = false;
  +
  +                facesMessages.addToControlFromResourceBundleOrDefault(
  +                    "preferenceValidationErrors",
  +                    FacesMessage.SEVERITY_ERROR,
  +                    "preferenceValueValidationFailed." + preferenceComponent.getName() + "." + entry.getKey().getName(),
  +                    preferenceComponent.getDescription() + " - '" + entry.getKey().getDescription() + "': " + validationError.getMessage());
  +            }
  +        }
  +    }
  +
  +    public void selectPreferenceComponent(PreferenceComponent selectedPreferenceComponent) {
           preferenceComponent = selectedPreferenceComponent;
   
           PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
  @@ -112,6 +89,11 @@
           }
       }
   
  +    public List<PreferenceComponent> loadPreferenceComponents() {
  +        PreferenceRegistry registry = (PreferenceRegistry)Component.getInstance("preferenceRegistry");
  +        return new ArrayList<PreferenceComponent>(registry.getPreferenceComponents(preferenceVisibility));
  +    }
  +
       public PreferenceComponent getPreferenceComponent() {
           return preferenceComponent;
       }
  @@ -120,13 +102,12 @@
           return preferenceValues;
       }
   
  -    protected void loadUser() {
  -        if (userId != null) {
  -            UserDAO userDAO = (UserDAO)Component.getInstance("userDAO");
  -            user = userDAO.findUser(userId);
  -        } else {
  -            user = Component.getInstance("currentUser");
  +    public void setUser(User user) {
  +        this.user = user;
           }
  +
  +    public void setPreferenceVisibility(PreferenceVisibility preferenceVisibility) {
  +        this.preferenceVisibility = preferenceVisibility;
       }
   
   }
  
  
  
  1.2       +0 -3      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PluginPreferenceEditor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PluginPreferenceEditor.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PluginPreferenceEditor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- PluginPreferenceEditor.java	2 Apr 2007 18:25:06 -0000	1.1
  +++ PluginPreferenceEditor.java	4 Apr 2007 10:38:13 -0000	1.2
  @@ -22,8 +22,6 @@
       private List<PreferenceValue> preferenceValues = new ArrayList<PreferenceValue>();
   
       public PluginPreferenceEditor(String pluginPreferenceName) {
  -        System.out.println("#### NEW EDITOR FOR PLUGIN: " + pluginPreferenceName);
  -
           this.pluginPreferenceName = pluginPreferenceName;
   
           // Load the preference component
  @@ -43,7 +41,6 @@
       }
   
       public List<PreferenceValue> getPreferenceValues() {
  -        System.out.println("######### GET PREFERENCE VALUES FROM PLUGIN EDITOR");
           return preferenceValues;
       }
   
  
  
  
  1.5       +1 -1      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: DirectoryHome.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- DirectoryHome.java	20 Mar 2007 02:38:15 -0000	1.4
  +++ DirectoryHome.java	4 Apr 2007 10:38:13 -0000	1.5
  @@ -67,7 +67,7 @@
       }
   
       protected boolean prepareRemove() {
  -        return getInstance().getParent() == null; // Can not delete wiki root
  +        return getInstance().getParent() != null; // Can not delete wiki root
       }
   
       /* -------------------------- Internal Methods ------------------------------ */
  
  
  
  1.10      +41 -14    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeBrowser.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NodeBrowser.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeBrowser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- NodeBrowser.java	2 Apr 2007 18:25:06 -0000	1.9
  +++ NodeBrowser.java	4 Apr 2007 10:38:13 -0000	1.10
  @@ -3,11 +3,15 @@
   import org.jboss.seam.annotations.*;
   import org.jboss.seam.ScopeType;
   import org.jboss.seam.Component;
  +import org.jboss.seam.contexts.Contexts;
   import org.jboss.seam.core.Conversation;
   import org.jboss.seam.core.Manager;
  +import org.jboss.seam.core.ConversationEntries;
  +import org.jboss.seam.core.ConversationEntry;
   import org.jboss.seam.security.Identity;
   import org.jboss.seam.wiki.core.dao.NodeDAO;
   import org.jboss.seam.wiki.core.model.*;
  +import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
   import org.jboss.seam.wiki.util.WikiUtil;
   
   import java.util.*;
  @@ -45,6 +49,9 @@
       @RequestParameter
       protected String nodeName;
   
  +    @RequestParameter
  +    protected String lastConversationId;
  +
       protected Long nodeId;
       public Long getNodeId() { return nodeId; }
       public void setNodeId(Long nodeId) { this.nodeId = nodeId; }
  @@ -90,6 +97,9 @@
           // We also don't want to redirect the long-running conversation, the caller has ended it already
           redirect.setConversationPropagationEnabled(false);
   
  +        // This is not needed again
  +        redirect.getParameters().remove("lastConversationId");
  +
           redirect.returnToCapturedView();
       }
   
  @@ -101,32 +111,41 @@
           // If the last browsed page had a conversation identifier (we assume of a temporary conversation), remove it
           redirect.getParameters().remove("cid");
   
  -        redirect.returnToCapturedView();
  -    }
  +        // This is not needed again
  +        redirect.getParameters().remove("lastConversationId");
   
  -    public void redirectToCurrentUserHome() {
  -        User currentUser = (User)Component.getInstance("currentUser");
  -        Map<String, Object> parameters = new HashMap<String, Object>();
  -        parameters.put("nodeId", currentUser.getMemberHome().getId());
  -        Manager.instance().redirect("/display.xhtml", parameters, true);
  +        redirect.returnToCapturedView();
       }
   
  -    // TODO: Typical exit method to get out of a root or nested conversation, JBSEAM-906
  +    // TODO: Typical exit method to get out of a root, nested, or parallel root conversation, JBSEAM-906
       public void exitConversation(Boolean endBeforeRedirect) {
           Conversation currentConversation = Conversation.instance();
           if (currentConversation.isNested()) {
               // End this nested conversation and return to last rendered view-id of parent
               currentConversation.endAndRedirect(endBeforeRedirect);
           } else {
  -            // End this root conversation
  +            // Always end this conversation
               currentConversation.end();
  -            // Return to the view-id that was captured when this conversation started
  +
  +            ConversationEntry entryPoint =
  +                    (ConversationEntry)Contexts.getConversationContext().get("conversationEntryPoint");
  +            if (entryPoint != null) {
  +                // We came here from another conversation
  +                if (entryPoint.isDisplayable()) {
  +                    entryPoint.switchConversation();
  +                } else {
  +                    // The entry point is gone... What now? Go to start page...
  +                    Manager.instance().redirect("/display.xhtml", new HashMap<String,Object>(), true);
  +                }
  +            } else {
  +                // We came here from a non-conversational page
               if (endBeforeRedirect)
                   redirectToLastBrowsedPage();
               else
                   redirectToLastBrowsedPageWithConversation();
           }
       }
  +    }
   
       // Just a convenience method for recursive calling
       protected void addDirectoryToPath(List<Node> path, Node directory) {
  @@ -138,6 +157,14 @@
               addDirectoryToPath(path, directory.getParent());
       }
   
  +    public void captureConversationEntryPoint() {
  +        if (lastConversationId != null) {
  +            ConversationEntries allConversations = ConversationEntries.instance();
  +            Contexts.getConversationContext()
  +                    .set("conversationEntryPoint", allConversations.getConversationEntry(lastConversationId));
  +        }
  +    }
  +
       @Transactional
       public String prepare() {
   
  
  
  
  1.3       +1 -1      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: WikiIdentity.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/WikiIdentity.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- WikiIdentity.java	2 Apr 2007 18:25:06 -0000	1.2
  +++ WikiIdentity.java	4 Apr 2007 10:38:13 -0000	1.3
  @@ -158,7 +158,7 @@
       */
       private boolean checkEditUser(User user) {
           if (currentAccessLevel == UserRoleAccessFactory.ADMINROLE_ACCESSLEVEL) return true;
  -        if (currentUser.getId() == user.getId()) return true;
  +        if (currentUser.getId().equals(user.getId())) return true;
           return false;
       }
   
  
  
  
  1.11      +0 -0      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  
  
  
  1.5       +83 -31    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: UserHome.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserHome.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- UserHome.java	2 Apr 2007 18:25:06 -0000	1.4
  +++ UserHome.java	4 Apr 2007 10:38:13 -0000	1.5
  @@ -1,27 +1,29 @@
   package org.jboss.seam.wiki.core.action;
   
  -
  +import org.jboss.seam.Component;
  +import org.jboss.seam.ScopeType;
   import org.jboss.seam.annotations.*;
  +import org.jboss.seam.annotations.datamodel.DataModel;
   import org.jboss.seam.annotations.security.Restrict;
  +import org.jboss.seam.contexts.Contexts;
   import org.jboss.seam.core.FacesMessages;
   import org.jboss.seam.core.Renderer;
  -import org.jboss.seam.core.Conversation;
   import org.jboss.seam.framework.EntityHome;
  +import org.jboss.seam.security.AuthorizationException;
  +import org.jboss.seam.security.Identity;
  +import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
  +import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
   import org.jboss.seam.wiki.core.dao.UserDAO;
  -import org.jboss.seam.wiki.core.model.*;
   import org.jboss.seam.wiki.core.model.Role;
  -import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
  +import org.jboss.seam.wiki.core.model.User;
  +import org.jboss.seam.wiki.preferences.PreferenceComponent;
  +import org.jboss.seam.wiki.preferences.PreferenceVisibility;
   import org.jboss.seam.wiki.util.Hash;
  -import org.jboss.seam.Component;
  -import org.jboss.seam.ScopeType;
  -import org.jboss.seam.security.Identity;
  -import org.jboss.seam.security.AuthorizationException;
  -import org.jboss.seam.contexts.Contexts;
   
   import javax.faces.application.FacesMessage;
  +import java.util.List;
   import java.util.regex.Matcher;
   import java.util.regex.Pattern;
  -import java.util.List;
   
   @Name("userHome")
   @Scope(ScopeType.CONVERSATION)
  @@ -37,23 +39,26 @@
       private UserDAO userDAO;
   
       @In
  -    private Hash hashUtil;
  +    private UserManagementPreferences userManagementPreferences;
   
       @In
  -    private UserManagementPreferences userManagementPreferences;
  +    NodeBrowser browser;
   
       @In
  -    private Renderer renderer;
  +    private Hash hashUtil;
   
       @In
  -    NodeBrowser browser;
  +    private Renderer renderer;
   
  -    private org.jboss.seam.wiki.core.model.Role defaultRole;
  +    @DataModel
  +    private List<PreferenceComponent> userPreferenceComponents;
  +    PreferenceEditor preferenceEditor;
   
       private String oldUsername;
       private String password;
       private String passwordControl;
       private List<Role> roles;
  +    private org.jboss.seam.wiki.core.model.Role defaultRole;
   
       @Override
       public Object getId() {
  @@ -69,13 +74,19 @@
       public void create() {
           super.create();
   
  -        defaultRole = (Role)Component.getInstance("newUserDefaultRole");
  -        oldUsername = getInstance().getUsername();
           if (isManaged()) {
               if (!Identity.instance().hasPermission("User", "edit", getInstance()) ) {
                   throw new AuthorizationException("You don't have permission for this operation");
               }
               roles = getInstance().getRoles();
  +            oldUsername = getInstance().getUsername();
  +
  +        } else {
  +            UserManagementPreferences userMgmtPrefs =
  +                    (UserManagementPreferences) Component.getInstance("userManagementPreferences");
  +            if (!userMgmtPrefs.isEnableRegistration())
  +                throw new RuntimeException("User registration has been disabled");
  +            defaultRole = (Role)Component.getInstance("newUserDefaultRole");
           }
       }
   
  @@ -110,7 +121,9 @@
               try {
   
                   // Send confirmation email
  -//                renderer.render("/themes/" + wikiPreferences.getThemeName() + "/mailtemplates/confirmationRegistration.xhtml");
  +                renderer.render("/themes/"
  +                        + ((WikiPreferences)Component.getInstance("wikiPreferences")).getThemeName()
  +                        + "/mailtemplates/confirmationRegistration.xhtml");
   
                   // Redirect to last viewed page with message
                   facesMessages.addFromResourceBundleOrDefault(
  @@ -123,13 +136,12 @@
                   facesMessages.addFromResourceBundleOrDefault(
                       FacesMessage.SEVERITY_INFO,
                       getMessageKeyPrefix() + "confirmationEmailSent",
  -                    "Activiate account: confirmRegistration.seam?activationCode=" + getInstance().getActivationCode());
  +                    "Activiate account: /confirmRegistration.seam?activationCode=" + getInstance().getActivationCode());
                   */
   
                   browser.exitConversation(false);
   
               } catch (Exception ex) {
  -                ex.printStackTrace(System.out);
                   facesMessages.add(FacesMessage.SEVERITY_ERROR, "Couldn't send confirmation email: " + ex.getMessage());
                   return "error";
               }
  @@ -149,6 +161,12 @@
           getInstance().getRoles().clear();
           getInstance().getRoles().addAll(roles);
   
  +        // Preferences
  +        if (preferenceEditor != null) {
  +            String editorFailed = preferenceEditor.save();
  +            if (editorFailed != null) return null;
  +        }
  +
           boolean loginCredentialsModified = false;
   
           // User wants to change his password
  @@ -188,9 +206,9 @@
                           getMessageKeyPrefix() + "reloginRequired",
                           "Credentials updated, please logout and authenticate yourself with the new credentials."
                       );
  +                    browser.exitConversation(false);
                   }
               }
  -            browser.exitConversation(false);
           }
   
           return outcome;
  @@ -198,6 +216,8 @@
   
       public String remove() {
   
  +        // TODO: Not fully implemented
  +
           // Remove all role assignments
           getInstance().getRoles().clear();
   
  @@ -217,7 +237,7 @@
       }
   
       public String getUpdatedMessage() {
  -        return "The profile '" + getInstance().getUsername() + "' has been updated.";
  +        return "The user '" + getInstance().getUsername() + "' has been updated.";
       }
   
       public String getPassword() { return password; }
  @@ -230,13 +250,35 @@
       @Restrict("#{s:hasPermission('User', 'editRoles', currentUser)}")
       public void setRoles(List<Role> roles) { this.roles = roles; }
   
  +    @Restrict("#{s:hasPermission('User', 'isAdmin', currentUser)}")
  +    public void createHomeDirectory() {
  +
  +        Authenticator auth = (Authenticator)Component.getInstance("authenticator");
  +        auth.createHomeDirectory(getInstance());
  +
  +        facesMessages.addFromResourceBundleOrDefault(
  +            FacesMessage.SEVERITY_INFO,
  +            getMessageKeyPrefix() + "homeDirectoryCreated",
  +            "New home directory has been queued, update to commit the change"
  +        );
  +    }
  +
  +    @Factory("userPreferenceComponents")
  +    public void loadUserPreferenceComponents() {
  +        preferenceEditor = (PreferenceEditor)Component.getInstance("prefEditor");
  +        preferenceEditor.setPreferenceVisibility(PreferenceVisibility.USER);
  +        preferenceEditor.setUser(getInstance());
  +        userPreferenceComponents = preferenceEditor.loadPreferenceComponents();
  +        Contexts.getConversationContext().set("preferenceEditor", preferenceEditor);
  +    }
  +
       // Validation rules for persist(), update(), and remove();
   
  -    private boolean passwordAndControlNotNull() {
  +    public boolean passwordAndControlNotNull() {
           if (getPassword() == null || getPassword().length() == 0 ||
               getPasswordControl() == null || getPasswordControl().length() == 0) {
               facesMessages.addToControlFromResourceBundleOrDefault(
  -                "password",
  +                "passwordControl",
                   FacesMessage.SEVERITY_ERROR,
                   getMessageKeyPrefix() + "passwordOrPasswordControlEmpty",
                   "Please enter your password twice."
  @@ -246,8 +288,7 @@
           return true;
       }
   
  -
  -    private boolean passwordMatchesRegex() {
  +    public boolean passwordMatchesRegex() {
           Matcher matcher = Pattern.compile(userManagementPreferences.getPasswordRegex()).matcher(getPassword());
           if (!matcher.find()) {
               facesMessages.addToControlFromResourceBundleOrDefault(
  @@ -261,10 +302,10 @@
           return true;
       }
   
  -    private boolean passwordMatchesControl() {
  +    public boolean passwordMatchesControl() {
           if (!password.equals(passwordControl) ) {
               facesMessages.addToControlFromResourceBundleOrDefault(
  -                "password",
  +                "passwordControl",
                   FacesMessage.SEVERITY_ERROR,
                   getMessageKeyPrefix() + "passwordControlNoMatch",
                   "The passwords don't match."
  @@ -274,9 +315,7 @@
           return true;
       }
   
  -    @Transactional
  -    private boolean isUniqueUsername() {
  -        getEntityManager().joinTransaction();
  +    public boolean isUniqueUsername() {
           User foundUser = userDAO.findUser(getInstance().getUsername(), false, false);
           if ( foundUser != null && foundUser != getInstance() ) {
               facesMessages.addToControlFromResourceBundleOrDefault(
  @@ -290,4 +329,17 @@
           return true;
       }
   
  +    public void validateUsername() {
  +        isUniqueUsername();
  +    }
  +
  +    public void validatePassword() {
  +        if (getPassword() != null && getPassword().length() > 0)
  +            passwordMatchesRegex();
  +    }
  +
  +    public void validatePasswordControl() {
  +        passwordMatchesControl();
  +    }
  +
   }
  
  
  
  1.1      date: 2007/04/04 10:38:13;  author: cbauer;  state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/AdminHome.java
  
  Index: AdminHome.java
  ===================================================================
  package org.jboss.seam.wiki.core.action;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.*;
  import org.jboss.seam.annotations.datamodel.DataModel;
  import org.jboss.seam.annotations.security.Restrict;
  import org.jboss.seam.contexts.Contexts;
  import org.jboss.seam.core.FacesMessages;
  import org.jboss.seam.framework.EntityHome;
  import org.jboss.seam.security.AuthorizationException;
  import org.jboss.seam.security.Identity;
  import org.jboss.seam.wiki.core.model.User;
  import org.jboss.seam.wiki.preferences.PreferenceComponent;
  import org.jboss.seam.wiki.preferences.PreferenceVisibility;
  
  import javax.faces.application.FacesMessage;
  import java.util.List;
  
  @Name("adminHome")
  @Scope(ScopeType.CONVERSATION)
  public class AdminHome {
  
      @In
      private FacesMessages facesMessages;
  
      PreferenceEditor preferenceEditor;
  
      @Create
      public void create() {
          if (!Identity.instance().hasPermission("User", "isAdmin", (User)Component.getInstance("currentUser") ) ) {
              throw new AuthorizationException("You don't have permission for this operation");
          }
      }
  
  
      @Restrict("#{s:hasPermission('User', 'isAdmin', currentUser)}")
      public String update() {
  
          // Preferences
          if (preferenceEditor != null) {
              String editorFailed = preferenceEditor.save();
              if (editorFailed != null) return null;
          }
  
          facesMessages.addFromResourceBundleOrDefault(
              FacesMessage.SEVERITY_INFO,
              "systemSettingsUpdated",
              "System settings updated"
          );
          return null;
      }
  
      @DataModel
      private List<PreferenceComponent> systemPreferenceComponents;
  
      @Factory("systemPreferenceComponents")
      public void loadUserPreferenceComponents() {
          preferenceEditor = (PreferenceEditor)Component.getInstance("prefEditor");
          preferenceEditor.setPreferenceVisibility(PreferenceVisibility.SYSTEM);
          systemPreferenceComponents = preferenceEditor.loadPreferenceComponents();
          Contexts.getConversationContext().set("preferenceEditor", preferenceEditor);
      }
  }
  
  
  



More information about the jboss-cvs-commits mailing list