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

Christian Bauer christian at hibernate.org
Mon Apr 2 14:25:06 EDT 2007


  User: cbauer  
  Date: 07/04/02 14:25:06

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki/core/action        
                        NodeBrowser.java NodeHome.java UserHome.java
                        WikiIdentity.java DocumentHome.java
                        NodePermissions.java
  Added:       examples/wiki/src/main/org/jboss/seam/wiki/core/action        
                        PreferenceEditor.java PluginPreferenceEditor.java
  Log:
  Totally overengineered but definitely cool system/user/instance wiki preferences architecture
  
  Revision  Changes    Path
  1.9       +0 -3      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.8
  retrieving revision 1.9
  diff -u -b -r1.8 -r1.9
  --- NodeBrowser.java	22 Mar 2007 12:16:07 -0000	1.8
  +++ NodeBrowser.java	2 Apr 2007 18:25:06 -0000	1.9
  @@ -50,9 +50,6 @@
       public void setNodeId(Long nodeId) { this.nodeId = nodeId; }
   
       @In
  -    private GlobalPreferences globalPrefs;
  -
  -    @In
       protected org.jboss.seam.core.Redirect redirect;
   
       @In
  
  
  
  1.10      +19 -2     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.)
  
  Index: NodeHome.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- NodeHome.java	22 Mar 2007 12:16:07 -0000	1.9
  +++ NodeHome.java	2 Apr 2007 18:25:06 -0000	1.10
  @@ -9,11 +9,13 @@
   import org.jboss.seam.wiki.core.model.Directory;
   import org.jboss.seam.wiki.core.model.Node;
   import org.jboss.seam.wiki.util.WikiUtil;
  +import org.jboss.seam.wiki.preferences.PreferenceProvider;
   import org.jboss.seam.annotations.In;
   import org.jboss.seam.annotations.RequestParameter;
   import org.jboss.seam.annotations.Out;
   import org.jboss.seam.core.Events;
   import org.jboss.seam.ScopeType;
  +import org.jboss.seam.Component;
   import org.jboss.seam.contexts.Contexts;
   import org.jboss.seam.security.AuthorizationException;
   import org.jboss.seam.security.Identity;
  @@ -146,7 +148,12 @@
           if (!isValidModel()) return null;
   
           if (!beforePersist()) return null;
  -        return super.persist();
  +        String outcome = super.persist();
  +
  +        // Notify any plugin preferences editors to also flush
  +        Events.instance().raiseEvent("PreferenceEditor.flushAll");
  +
  +        return outcome;
       }
   
       @Override
  @@ -169,7 +176,12 @@
           if (!isValidModel()) return null;
   
           if (!beforeUpdate()) return null;
  -        return super.update();
  +        String outcome = super.update();
  +
  +        // Notify any plugin preferences editors to also flush
  +        Events.instance().raiseEvent("PreferenceEditor.flushAll");
  +
  +        return outcome;
       }
   
       @Override
  @@ -183,6 +195,11 @@
           refreshMenuItems();
   
           if (!beforeRemove()) return null;
  +
  +        // Delete preferences of this node
  +        PreferenceProvider provider = (PreferenceProvider) Component.getInstance("preferenceProvider");
  +        provider.deleteInstancePreferences(getInstance());
  +
           return super.remove();
       }
   
  
  
  
  1.4       +14 -6     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.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- UserHome.java	21 Mar 2007 17:32:24 -0000	1.3
  +++ UserHome.java	2 Apr 2007 18:25:06 -0000	1.4
  @@ -10,9 +10,12 @@
   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.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;
  @@ -37,7 +40,7 @@
       private Hash hashUtil;
   
       @In
  -    private GlobalPreferences globalPrefs;
  +    private UserManagementPreferences userManagementPreferences;
   
       @In
       private Renderer renderer;
  @@ -68,7 +71,12 @@
   
           defaultRole = (Role)Component.getInstance("newUserDefaultRole");
           oldUsername = getInstance().getUsername();
  -        if (isManaged()) roles = getInstance().getRoles();
  +        if (isManaged()) {
  +            if (!Identity.instance().hasPermission("User", "edit", getInstance()) ) {
  +                throw new AuthorizationException("You don't have permission for this operation");
  +            }
  +            roles = getInstance().getRoles();
  +        }
       }
   
       public String persist() {
  @@ -93,7 +101,7 @@
           getInstance().setPasswordHash(hashUtil.hash(getPassword()));
   
           // Set activation code (unique user in time)
  -        String seed = getInstance().getUsername() + System.currentTimeMillis() + globalPrefs.getActivationCodeSalt();
  +        String seed = getInstance().getUsername() + System.currentTimeMillis() + userManagementPreferences.getActivationCodeSalt();
           getInstance().setActivationCode( ((Hash)Component.getInstance("hashUtil")).hash(seed) );
   
           String outcome = super.persist();
  @@ -102,7 +110,7 @@
               try {
   
                   // Send confirmation email
  -                renderer.render("/themes/" + globalPrefs.getThemeName() + "/mailtemplates/confirmationRegistration.xhtml");
  +//                renderer.render("/themes/" + wikiPreferences.getThemeName() + "/mailtemplates/confirmationRegistration.xhtml");
   
                   // Redirect to last viewed page with message
                   facesMessages.addFromResourceBundleOrDefault(
  @@ -240,13 +248,13 @@
   
   
       private boolean passwordMatchesRegex() {
  -        Matcher matcher = Pattern.compile(globalPrefs.getPasswordRegex()).matcher(getPassword());
  +        Matcher matcher = Pattern.compile(userManagementPreferences.getPasswordRegex()).matcher(getPassword());
           if (!matcher.find()) {
               facesMessages.addToControlFromResourceBundleOrDefault(
                   "password",
                   FacesMessage.SEVERITY_ERROR,
                   getMessageKeyPrefix() + "passwordNoRegexMatch",
  -                "Password does not match the pattern: " + globalPrefs.getPasswordRegex()
  +                "Password does not match the pattern: " + userManagementPreferences.getPasswordRegex()
               );
               return false;
           }
  
  
  
  1.2       +18 -6     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.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- WikiIdentity.java	18 Mar 2007 15:44:37 -0000	1.1
  +++ WikiIdentity.java	2 Apr 2007 18:25:06 -0000	1.2
  @@ -9,8 +9,8 @@
   import org.jboss.seam.wiki.core.model.User;
   import org.jboss.seam.wiki.core.model.Directory;
   import org.jboss.seam.wiki.core.model.Node;
  -import org.jboss.seam.wiki.core.model.GlobalPreferences;
   import org.jboss.seam.wiki.core.dao.UserRoleAccessFactory;
  +import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
   import org.jboss.seam.Component;
   
   /**
  @@ -26,13 +26,13 @@
   
       private User currentUser;
       private Integer currentAccessLevel;
  -    private GlobalPreferences globalPrefs;
  +    private WikiPreferences wikiPrefs;
   
       public boolean hasPermission(String name, String action, Object... args) {
   
           currentUser = (User)Component.getInstance("currentUser");
           currentAccessLevel = (Integer)Component.getInstance("currentAccessLevel");
  -        globalPrefs = (GlobalPreferences)Component.getInstance("globalPrefs");
  +        wikiPrefs = (WikiPreferences) Component.getInstance("wikiPreferences");
   
           if (args == null || args.length == 0) {
               // All the security checks currently need arguments...
  @@ -59,8 +59,12 @@
           } else
           if ("Node".equals(name) && "editMenu".equals(action)) {
               return checkEditMenu((Node)args[0]);
  +        } else
  +        if ("User".equals(name) && "isAdmin".equals(action)) {
  +            return checkIsAdmin((User)args[0]);
           }
   
  +
           return false;
       }
   
  @@ -69,7 +73,7 @@
           or the user is the creator of the parent directory
       */
       private boolean checkCreateAccess(Directory directory) {
  -        if (globalPrefs.getMemberAreaId().equals(directory.getId())) return false; // Member home dir is immutable
  +        if (wikiPrefs.getMemberAreaId().equals(directory.getId())) return false; // Member home dir is immutable
           if (directory.getWriteAccessLevel() == UserRoleAccessFactory.GUESTROLE_ACCESSLEVEL) return true;
           int dirWriteAccessLevel = directory.getWriteAccessLevel();
           User dirCreator = directory.getCreatedBy();
  @@ -104,7 +108,7 @@
           User either needs to have the access level of the edited node or has to be the creator
       */
       private boolean checkEditAccess(Node node) {
  -        if (globalPrefs.getMemberAreaId().equals(node.getId())) return false; // Member home dir is immutable
  +        if (wikiPrefs.getMemberAreaId().equals(node.getId())) return false; // Member home dir is immutable
           if (node.getWriteAccessLevel() == UserRoleAccessFactory.GUESTROLE_ACCESSLEVEL) return true;
           int nodeWriteAccessLevel = node.getWriteAccessLevel();
           User nodeCreator = node.getCreatedBy();
  @@ -123,7 +127,7 @@
           he has, unless he is the creator
       */
       private boolean checkRaiseAccessLevel(Node node) {
  -        if (globalPrefs.getMemberAreaId().equals(node.getId())) return false; // Member home dir is immutable
  +        if (wikiPrefs.getMemberAreaId().equals(node.getId())) return false; // Member home dir is immutable
           int desiredWriteAccessLevel = node.getWriteAccessLevel();
           int desiredReadAccessLevel = node.getReadAccessLevel();
           User nodeCreator = node.getCreatedBy();
  @@ -166,4 +170,12 @@
           return false;
       }
   
  +    /*
  +        Only admins are admins
  +    */
  +    private boolean checkIsAdmin(User user) {
  +        if (currentAccessLevel == UserRoleAccessFactory.ADMINROLE_ACCESSLEVEL) return true;
  +        return false;
  +    }
  +
   }
  
  
  
  1.8       +13 -6     jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: DocumentHome.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -b -r1.7 -r1.8
  --- DocumentHome.java	22 Mar 2007 12:47:50 -0000	1.7
  +++ DocumentHome.java	2 Apr 2007 18:25:06 -0000	1.8
  @@ -5,6 +5,7 @@
   import org.jboss.seam.wiki.core.engine.WikiLinkResolver;
   import org.jboss.seam.Component;
   import org.jboss.seam.ScopeType;
  +import org.jboss.seam.core.Events;
   import org.jboss.seam.contexts.Contexts;
   
   @Name("documentHome")
  @@ -18,7 +19,8 @@
       /* -------------------------- Internal State ------------------------------ */
   
       private Document historicalCopy;
  -    private boolean minorRevision = true;
  +    @In("#{docEditorPreferences.properties['minorRevisionEnabled']}")
  +    private boolean minorRevision;
       private String formContent;
       private boolean enabledPreview = false;
   
  @@ -28,10 +30,6 @@
       public void create() {
           super.create();
   
  -        // Settings
  -        GlobalPreferences globalPrefs = (GlobalPreferences) Component.getInstance("globalPrefs");
  -        minorRevision = !globalPrefs.isDefaultNewRevisionForEditedDocument();
  -
           // Rollback to historical revision?
           if (selectedHistoricalNode != null) getInstance().rollback(selectedHistoricalNode);
   
  @@ -105,7 +103,6 @@
           formContent = wikiLinkResolver.convertFromWikiProtocol(dir.getAreaNumber(), getInstance().getContent());
       }
   
  -
       /* -------------------------- Public Features ------------------------------ */
   
       public String getFormContent() {
  @@ -130,4 +127,14 @@
           syncFormToInstance(getParentDirectory());
           refreshMenuItems();
       }
  +
  +    public void setShowPluginPrefs(boolean showPluginPrefs) {
  +        Contexts.getConversationContext().set("showPluginPreferences", showPluginPrefs);
  +
  +    }
  +
  +    public boolean isShowPluginPrefs() {
  +        Boolean showPluginPrefs = (Boolean)Contexts.getConversationContext().get("showPluginPreferences");
  +        return showPluginPrefs != null ? showPluginPrefs : false;
  +    }
   }
  
  
  
  1.3       +2 -1      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodePermissions.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NodePermissions.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodePermissions.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- NodePermissions.java	18 Mar 2007 15:44:37 -0000	1.2
  +++ NodePermissions.java	2 Apr 2007 18:25:06 -0000	1.3
  @@ -11,10 +11,11 @@
   import org.jboss.seam.Component;
   
   import java.util.List;
  +import java.io.Serializable;
   
   @Name("nodePermissions")
   @Scope(ScopeType.CONVERSATION)
  -public class NodePermissions {
  +public class NodePermissions implements Serializable {
   
       @In
       Node currentNode;
  
  
  
  1.1      date: 2007/04/02 18:25:06;  author: cbauer;  state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PreferenceEditor.java
  
  Index: PreferenceEditor.java
  ===================================================================
  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;
  
  import javax.faces.application.FacesMessage;
  import java.util.List;
  import java.util.ArrayList;
  import java.util.Map;
  import java.util.HashSet;
  import java.io.Serializable;
  
  @Name("prefEditor")
  @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 PreferenceVisibility preferenceVisibility;
      private Object user;
  
      private PreferenceComponent preferenceComponent;
      private List<PreferenceValue> preferenceValues;
  
      @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() {
  
          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;
  
          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));
          } else {
              // Store system prefs
              preferenceValues = new ArrayList<PreferenceValue>(provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), null, null));
          }
          provider.flush();
  
          facesMessages.addFromResourceBundleOrDefault(
              FacesMessage.SEVERITY_INFO,
              "wikiPreferencesSaved",
              "Preferences have been saved, continue editing or exit.");
          return null;
      }
  
      public void selectPreferenceComponent() {
          preferenceComponent = selectedPreferenceComponent;
  
          PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
  
          if (preferenceVisibility.equals(PreferenceVisibility.USER)) {
              // Load prefs for a user
              preferenceValues = new ArrayList<PreferenceValue>(provider.load(preferenceComponent, user, null, false));
          } else {
              // Load system prefs
              preferenceValues = new ArrayList<PreferenceValue>(provider.load(preferenceComponent, null, null, true));
          }
      }
  
      public PreferenceComponent getPreferenceComponent() {
          return preferenceComponent;
      }
  
      public List<PreferenceValue> getPreferenceValues() {
          return preferenceValues;
      }
  
      protected void loadUser() {
          if (userId != null) {
              UserDAO userDAO = (UserDAO)Component.getInstance("userDAO");
              user = userDAO.findUser(userId);
          } else {
              user = Component.getInstance("currentUser");
          }
      }
  
  }
  
  
  
  1.1      date: 2007/04/02 18:25:06;  author: cbauer;  state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/PluginPreferenceEditor.java
  
  Index: PluginPreferenceEditor.java
  ===================================================================
  package org.jboss.seam.wiki.core.action;
  
  import org.jboss.seam.wiki.preferences.*;
  import org.jboss.seam.Component;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.core.Events;
  import org.jboss.seam.core.FacesMessages;
  import org.jboss.seam.annotations.Observer;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.AutoCreate;
  import org.hibernate.validator.InvalidValue;
  
  import javax.faces.application.FacesMessage;
  import java.util.*;
  import java.io.Serializable;
  
  public class PluginPreferenceEditor implements Serializable {
  
      private String pluginPreferenceName;
      private PreferenceComponent preferenceComponent;
      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
          PreferenceRegistry registry = (PreferenceRegistry) Component.getInstance("preferenceRegistry");
          preferenceComponent = registry.getPreferenceComponentsByName().get(pluginPreferenceName);
  
          if (preferenceComponent != null) {
              // Materialize its values
  
              Object user = Component.getInstance("currentUser");
              Object instance = Component.getInstance("currentDocument");
              PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
  
              preferenceValues = new ArrayList<PreferenceValue>(provider.load(preferenceComponent, user, instance, false));
          }
  
      }
  
      public List<PreferenceValue> getPreferenceValues() {
          System.out.println("######### GET PREFERENCE VALUES FROM PLUGIN EDITOR");
          return preferenceValues;
      }
  
      public void apply() {
  
          if (preferenceValues.size() > 0 ) {
  
              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.instance().addToControlFromResourceBundleOrDefault(
                          pluginPreferenceName,
                          FacesMessage.SEVERITY_ERROR,
                          "preferenceValueValidationFailed." + preferenceComponent.getName() + "." + entry.getKey().getName(),
                          "'" + entry.getKey().getDescription() + "': " + validationError.getMessage());
                  }
              }
  
              if (validationOk) {
                  Object user = Component.getInstance("currentUser");
                  Object instance = Component.getInstance("currentDocument");
                  PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
                  preferenceValues = new ArrayList<PreferenceValue>(provider.store(preferenceComponent, new HashSet<PreferenceValue>(preferenceValues), user, instance));
  
                  Events.instance().raiseEvent("PreferenceEditor.refresh." + preferenceComponent.getName());
              }
          }
  
      }
  
      public void flush() {
          PreferenceProvider provider = (PreferenceProvider)Component.getInstance("preferenceProvider");
          provider.flush();
      }
  
      @Name("pluginPreferenceEditorFlushObserver")
      @Scope(ScopeType.CONVERSATION)
      @AutoCreate
      public static class FlushObserver implements Serializable {
  
          Set<PluginPreferenceEditor> editors = new HashSet<PluginPreferenceEditor>();
  
          public void addPluginPreferenceEditor(PluginPreferenceEditor editor) {
              editors.add(editor);
          }
  
          @Observer("PreferenceEditor.flushAll")
          public void flushEditors() {
              for (PluginPreferenceEditor editor : editors) {
                  editor.flush();
              }
          }
      }
  
      
  }
  
  
  



More information about the jboss-cvs-commits mailing list