head	1.5;
access;
symbols
	TIGRIS_NOV_12_2000:1.4
	OLDHELM:1.4.0.4
	TIGRIS_NOV_11_2000:1.4
	TIGRIS_SEP_13_2000:1.4.0.2
	TIGRIS_BASELINE:1.4;
locks; strict;
comment	@# @;


1.5
date	2000.11.12.23.10.06;	author dlr;	state dead;
branches;
next	1.4;

1.4
date	2000.09.20.03.13.14;	author brian;	state Exp;
branches;
next	1.3;

1.3
date	2000.04.18.00.10.33;	author jrobbins;	state Exp;
branches;
next	1.2;

1.2
date	2000.02.03.04.21.31;	author jrobbins;	state Exp;
branches;
next	1.1;

1.1
date	2000.01.30.01.59.36;	author jrobbins;	state Exp;
branches;
next	;


desc
@@


1.5
log
@Does not exist--possibly only WRT this location--in newhelm.
@
text
@/* ================================================================
 * Copyright (c) 2000 Collab.Net.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. The end-user documentation included with the redistribution, if
 * any, must include the following acknowlegement: "This product includes
 * software developed by Collab.Net (http://www.Collab.Net/)."
 * Alternately, this acknowlegement may appear in the software itself, if
 * and wherever such third-party acknowlegements normally appear.
 * 
 * 4. The hosted project names must not be used to endorse or promote
 * products derived from this software without prior written
 * permission. For written permission, please contact info@@collab.net.
 * 
 * 5. Products derived from this software may not use the "Tigris" name
 * nor may "Tigris" appear in their names without prior written
 * permission of Collab.Net.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by many
 * individuals on behalf of Collab.Net.
 */


package org.tigris.helm.admin;

import org.webmacro.util.*;
import org.webmacro.servlet.*;
import org.webmacro.engine.*;
import org.webmacro.broker.*;

import javax.servlet.*;
import javax.servlet.http.*;

import java.sql.*;
import java.io.IOException;
import com.sun.java.util.collections.ArrayList;
import com.sun.java.util.collections.Iterator;

import org.joist.security.PermissionSet;
import org.joist.security.RedirectException;
import org.joist.security.SecureServlet;
import org.joist.database.DataManager;
import org.joist.database.JoistDatabaseException;

import org.tigris.helm.database.TUserManager;
import org.tigris.helm.tool.UpdateException;

/**
 * Display a list of the current domain configuration, and allow
 * it to be changed. This is currently done by directly querying the
 * database and then changes it. Currently no attempt to actively
 * implement those changes is made. It is assumed that the user will
 * then go on to restart the entire Tigris system. It's even possible
 * that some things may stop working entirely or at the least will be
 * greatly disrupted (e.g., changing the CVSROOT without moving it on
 * the filesystem too would be disasterous, and changing the DNS name
 * of the domain would cause ezmlm to stop serving mailing lists).
 *
 * <p>Also note that this class has no knowledge of what parameters are
 * "supposed" to exist. It assumes that the ones that exist are all
 * there are. When Tigris is set up, the whole configuration should
 * be initialized to a default state, so this should be valid. This
 * servlet should not be used to reconstruct a damaged or deleted
 * configuration table.
 */

public class DomainConfig extends SecureServlet {
    static private Log log = new Log("DomConf", "DomainConfig");
    static private boolean debug = true;
    
    public class ParamEntry {
	public String param, value;
	ParamEntry(String param, String value) {
	    this.param = param;
	    this.value = value;
	}
    }

  protected String processRequest(Connection connection, WebContext context)
    throws HandlerException, RedirectException
  {
      String templateName = super.processRequest(connection, context);
      PermissionSet userPerms = (PermissionSet)context.get("UserPermissions");
      
      // Determine which button was pushed
      String action = (String) context.get("action");
      if (debug) log.debug("DomainConfig: action="+ action);
      try {
	  if (action != null && "Change Params".equals(action) &&
	      userPerms.accessAllowed("Domain - Change"))
	      processUpdateButton(connection, context);
	  else
	      displayPage(connection, context);
      }
      catch (SQLException e) {
          log.exception(e);
          if (debug) log.debug(e.getMessage());
          context.put("message", "UserAdd got an SQLException");
      }
	  
      return templateName;
  }

  protected void processUpdateButton(Connection connection,
				     WebContext context)
      throws HandlerException, RedirectException, SQLException
    {
	//TODO: check permissions
	if (debug) log.debug("DomainConfig: processUpdateButton");
	
	// Obtain the current configuration from the server - don't
	// trust the TigrisContext list, it might be out of date or
	// wrong or something.  Plus we want them sorted, and it's
	// faster to have the database do it (it should keep them
	// sorted) than for us to.

	ArrayList params = new ArrayList();
	ArrayList changed = new ArrayList();
	
	Statement s = connection.createStatement();
	ResultSet r = s.executeQuery("SELECT param,value FROM domain_config "
				     + "ORDER BY param");
	while (r.next()) {
	    ParamEntry entry = new ParamEntry(r.getString(1), r.getString(2));
	    String newValue = context.getForm(entry.param);
	    if (newValue != null && !newValue.equals(entry.value)) {
		entry.value = newValue;
		changed.add(entry);
	    }
	    params.add(entry);
	}
      
	context.put("params", params);
	
	// Make any necessary changes to the database
	Iterator i = changed.iterator();
	while (i.hasNext()) {
	    ParamEntry entry = (ParamEntry)i.next();
	    s.executeUpdate("UPDATE domain_config SET value = '"
			    + entry.value + "' WHERE param = '"
			    + entry.param + "'");
	}
	if (debug) log.debug("DomainConfig: processUpdateButton done");
  }

  protected void displayPage(Connection connection,
					 WebContext context)
    throws HandlerException, RedirectException, SQLException
  {
      if (debug) log.debug("DomainConfig: processInitialRequest");
      ArrayList params = new ArrayList();

      Statement s = connection.createStatement();
      ResultSet r = s.executeQuery("SELECT param,value FROM domain_config "
				   + "ORDER BY param");
      while (r.next()) {
	  ParamEntry entry = new ParamEntry(r.getString(1), r.getString(2));
	  params.add(entry);
      }
      
      context.put("params", params);
      if (debug) log.debug("DomainConfig: params=" + params);
  }

} /* end class DomainConfig */
@


1.4
log
@
Obtained from:
Submitted by:
Reviewed by:

Moved from org.helm to org.tigris.helm
Moved from org/helm to org/tigris/helm

perl -pi.bak -e, how I love thee

note: this update was done POST-CVS-REPOSITORY surgury.  In order to
get this right, you may need to remove the directories

$CVSROOT/helm/java/org/helm
$CVSROOT/helm/data/htdoc/look/www/org/helm
$CVSROOT/helm/templates/org/helm

before doing the "CVS update" call, since those directories don't
exist anymore and CVS will try to create lockfiles for you in them,
giving you an error.
@
text
@@


1.3
log
@switched from collections2.jar to collections.jar
@
text
@d48 1
a48 1
package org.helm.admin;
d69 2
a70 2
import org.helm.database.TUserManager;
import org.helm.tool.UpdateException;
@


1.2
log
@Added tigris.org license
PR:
Obtained from:
Submitted by:
Reviewed by:
@
text
@d60 2
a61 2
import java.util.ArrayList;
import java.util.Iterator;
@


1.1
log
@initial checking
@
text
@d1 46
a46 1
// Copyright (c) 2000 Collab.Net, Inc. All Rights Reserved.
@

