Package com.webobjects.monitor.rest

Source Code of com.webobjects.monitor.rest.MSiteConfigController

package com.webobjects.monitor.rest;

import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WORequest;
import com.webobjects.foundation.NSMutableDictionary;
import com.webobjects.monitor._private.MSiteConfig;

import er.extensions.eof.ERXKeyFilter;
import er.extensions.foundation.ERXStringUtilities;


public class MSiteConfigController extends JavaMonitorController {

  public MSiteConfigController(WORequest request) {
    super(request);
  }
 
  @Override
  public WOActionResults updateAction() throws Throwable {
    checkPassword();
    if (siteConfig().hostArray().count() == 0) {
      throw new IllegalStateException("You cannot update the SiteConfig before adding a host.");
    }
    MSiteConfig siteConfig = (MSiteConfig) object(ERXKeyFilter.filterWithAttributes());
        update(siteConfig, ERXKeyFilter.filterWithAttributes());
        pushValues(siteConfig);
    return response(siteConfig, ERXKeyFilter.filterWithAttributes());
  }
 
  private void pushValues(MSiteConfig newSiteConfig) {
    // Grab the new and current hashed passwords. Any new password coming in has already been hashed
    // and if we don't have a new password we need the old hashed one to put back into the SiteConfig
    // once we've blatted the values with the new incoming values.
    String newHashedPassword = newSiteConfig.password();
    String currentHashedPassword = siteConfig().password();
   
    if (!ERXStringUtilities.stringIsNullOrEmpty(newHashedPassword)) {
      // This is needed to populate the passwordDictionary in the request posted to wotaskd.
      siteConfig()._setOldPassword();
    }
   
    // Now we've cached the new value remove it from the newSiteConfig.
    newSiteConfig.values().removeObjectForKey("password");
   
    // Build a dictionary of new values. Because we might only be updating a few  values (and not the whole
    // SiteConfig) we'll start with all the current values, less the password which we've already cached.
    NSMutableDictionary newValues = siteConfig().values();
    newValues.removeObjectForKey("password");
   
    // Overwrite and/or add the new incoming values.
    newValues.addEntriesFromDictionary(newSiteConfig.values());
   
    // Push the complete set of new values into the current SiteConfig object.
    siteConfig().updateValues(newValues);
   
    // OK, let's check what needs to be done with the password. If we've got a new one set that, otherwise
    // if we've got an old one put that back into the SiteConfig.
    if (!ERXStringUtilities.stringIsNullOrEmpty(newHashedPassword)) {
      siteConfig().values().takeValueForKey(newHashedPassword, "password");
    } else if (!ERXStringUtilities.stringIsNullOrEmpty(currentHashedPassword)) {
      siteConfig().values().takeValueForKey(currentHashedPassword, "password");
    }
   
    // Phew! That's it. Pipe the update out to the wotaskds.
    handler().sendUpdateSiteToWotaskds();
   
    if (!ERXStringUtilities.stringIsNullOrEmpty(newHashedPassword)) {
      siteConfig()._resetOldPassword();
    }
    }

}
TOP

Related Classes of com.webobjects.monitor.rest.MSiteConfigController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.