<%@ page import="org.jivesoftware.util.JiveGlobals,
                 org.jivesoftware.util.ParamUtils" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="org.jivesoftware.openfire.ldap.LdapManager" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<%
    // Get parameters
    @SuppressWarnings("unchecked")
    Map<String,String> xmppSettings = (Map<String,String>)session.getAttribute("xmppSettings");

    String serverType = ParamUtils.getParameter(request, "serverType");
    // Server type should never be null, but if it is, assume "other"
    if (serverType == null) {
        serverType = "other";
    }

    LdapManager manager = LdapManager.getInstance();

    // Determine the right default values based on the the server type.
    String defaultGroupNameField = JiveGlobals.getProperty("ldap.groupNameField");
    String defaultGroupMemberField = JiveGlobals.getProperty("ldap.groupMemberField");
    String defaultGroupDescriptionField = JiveGlobals.getProperty("ldap.groupDescriptionField");
    String posixModeString = JiveGlobals.getProperty("ldap.posixMode");
    boolean defaultPosixMode = Boolean.parseBoolean(posixModeString);
    String defaultGroupSearchFilter = JiveGlobals.getProperty("ldap.groupSearchFilter");

    if (serverType.equals("activedirectory")) {
        if (defaultGroupNameField == null) {
            defaultGroupNameField = "cn";
        }
        if (defaultGroupMemberField == null) {
            defaultGroupMemberField = "member";
        }
        if (defaultGroupDescriptionField == null) {
            defaultGroupDescriptionField = "description";
        }
        if (posixModeString == null) {
            defaultPosixMode = false;
        }
        if (defaultGroupSearchFilter == null) {
            defaultGroupSearchFilter = "(objectClass=group)";
        }
    } else {
        if (defaultGroupNameField == null) {
            defaultGroupNameField = "cn";
        }
        if (defaultGroupMemberField == null) {
            defaultGroupMemberField = "member";
        }
        if (defaultGroupDescriptionField == null) {
            defaultGroupDescriptionField = "description";
        }
        if (posixModeString == null) {
            defaultPosixMode = false;
        }
    }

    String groupNameField = ParamUtils.getParameter(request, "groupNameField");
    if (groupNameField == null) {
        groupNameField = defaultGroupNameField;
    }
    String groupMemberField = ParamUtils.getParameter(request, "groupMemberField");
    if (groupMemberField == null) {
        groupMemberField = defaultGroupMemberField;
    }
    String groupDescriptionField = ParamUtils.getParameter(request, "groupDescriptionField");
    if (groupDescriptionField == null) {
        groupDescriptionField = defaultGroupDescriptionField;
    }
    String posixModeParam = ParamUtils.getParameter(request, "posixMode");
    boolean posixMode;
    if (posixModeParam == null) {
        posixMode = defaultPosixMode;
    } else {
        posixMode = Boolean.parseBoolean(posixModeParam);
    }
    String groupSearchFilter = ParamUtils.getParameter(request, "groupSearchFilter");
    if (groupSearchFilter == null) {
        groupSearchFilter = defaultGroupSearchFilter;
    }

    boolean save = request.getParameter("save") != null;
    boolean doTest = request.getParameter("test") != null;
    if (save || doTest) {
        // Save information in the session so we can use it in testing pages during setup
        Map<String, String> settings = new HashMap<String, String>();
        settings.put("ldap.groupNameField", groupNameField);
        settings.put("ldap.groupMemberField", groupMemberField);
        settings.put("ldap.groupDescriptionField", groupDescriptionField);
        settings.put("ldap.posixMode", Boolean.toString(posixMode));
        settings.put("ldap.groupSearchFilter", groupSearchFilter);
        session.setAttribute("ldapGroupSettings", settings);

        if (save) {
            if (groupNameField != null) {
                manager.setGroupNameField(groupNameField);
            }
            if (groupMemberField != null) {
                manager.setGroupMemberField(groupMemberField);
            }
            if (groupDescriptionField != null) {
                manager.setGroupDescriptionField(groupDescriptionField);
            }
            manager.setPosixMode(posixMode);
            if (groupSearchFilter != null) {
                manager.setGroupSearchFilter(groupSearchFilter);
            }

            // Enable the LDAP auth provider. The LDAP user provider will be enabled on the next step.
            JiveGlobals.setProperty("provider.group.className",
                    "org.jivesoftware.openfire.ldap.LdapGroupProvider");

            // Save the settings for later, if we're in setup
            if (xmppSettings != null) {
                xmppSettings.put("provider.group.className",
                        "org.jivesoftware.openfire.ldap.LdapGroupProvider");
                xmppSettings.put("ldap.groupNameField", groupNameField);
                xmppSettings.put("ldap.groupMemberField", groupMemberField);
                xmppSettings.put("ldap.groupDescriptionField", groupDescriptionField);
                xmppSettings.put("ldap.posixMode", Boolean.toString(posixMode));
                xmppSettings.put("ldap.groupSearchFilter", groupSearchFilter);
                session.setAttribute("xmppSettings", xmppSettings);
            }

            // Redirect
            response.sendRedirect(nextPage);
            return;
        }
    }
%>
<html>
<head>
    <title><fmt:message key="setup.ldap.title" /></title>
    <% for (Map.Entry<String, String> entry : meta.entrySet()) { %>
    <meta name="<%= entry.getKey()%>" content="<%= entry.getValue()%>"/>
    <% } %>
</head>

<body>
    <% if (doTest) {
        StringBuilder sb = new StringBuilder();
        sb.append(testPage);
        sb.append("?serverType=").append(serverType);
    %>
        <a href="<%= sb.toString()%>" id="lbmessage" title="<fmt:message key="global.test" />" style="display:none;"></a>
        <script type="text/javascript">
            function loadMsg() {
                var lb = new lightbox(document.getElementById('lbmessage'));
                lb.activate();
            }
            setTimeout('loadMsg()', 500);
        </script>

    <% } %>

    <% if (initialSetup) { %>
	<h1><fmt:message key="setup.ldap.profile" />: <span><fmt:message key="setup.ldap.group_mapping" /></span></h1>
    <% } %>

	<!-- BEGIN jive-contentBox_stepbar -->
	<div id="jive-contentBox_stepbar">
		<span class="jive-stepbar_step"><em>1. <fmt:message key="setup.ldap.connection_settings" /></em></span>
		<span class="jive-stepbar_step"><em>2. <fmt:message key="setup.ldap.user_mapping" /></em></span>
		<span class="jive-stepbar_step"><strong>3. <fmt:message key="setup.ldap.group_mapping" /></strong></span>
	</div>
	<!-- END jive-contentBox-stepbar -->

	<!-- BEGIN jive-contentBox -->
	<div class="jive-contentBox jive-contentBox_for-stepbar">

	<h2><fmt:message key="setup.ldap.step_three" />: <span><fmt:message key="setup.ldap.group_mapping" /></span></h2>
	<p><fmt:message key="setup.ldap.group.description" /></p>

	<form action="" method="get">
		<!-- BEGIN jive-contentBox_bluebox -->
		<div class="jive-contentBox_bluebox">

			<table border="0" cellpadding="0" cellspacing="2">
			<tr>
			<td colspan="2"><strong><fmt:message key="setup.ldap.group_mapping" /></strong></td>
			</tr>
			<tr>
			<td align="right"><fmt:message key="setup.ldap.group.name_field" />:</td>
			<td><input type="text" name="groupNameField" id="jiveLDAPgroupname" size="22" maxlength="50" value="<%= groupNameField!=null?groupNameField:""%>"><span class="jive-setup-helpicon" onmouseover="domTT_activate(this, event, 'content', '<fmt:message key="setup.ldap.group.name_field_description" />', 'styleClass', 'jiveTooltip', 'trail', true, 'delay', 300, 'lifetime', -1);"></span></td>
			</tr>
			<tr>
			<td align="right"><fmt:message key="setup.ldap.group.member_field" />:</td>
			<td><input type="text" name="groupMemberField" id="jiveLDAPgroupmember" size="22" maxlength="50" value="<%= groupMemberField!=null?groupMemberField:""%>"><span class="jive-setup-helpicon" onmouseover="domTT_activate(this, event, 'content', '<fmt:message key="setup.ldap.group.member_field_description" />', 'styleClass', 'jiveTooltip', 'trail', true, 'delay', 300, 'lifetime', -1);"></span></td>
			</tr>
			<tr>
			<td align="right"><fmt:message key="setup.ldap.group.description_field" />:</td>
			<td><input type="text" name="groupDescriptionField" id="jiveLDAPgroupdesc" size="22" maxlength="50" value="<%= groupDescriptionField!=null?groupDescriptionField:""%>"><span class="jive-setup-helpicon" onmouseover="domTT_activate(this, event, 'content', '<fmt:message key="setup.ldap.group.description_field_description" />', 'styleClass', 'jiveTooltip', 'trail', true, 'delay', 300, 'lifetime', -1);"></span></td>
			</tr>
			</table>

			<!-- BEGIN jiveAdvancedButton -->
			<div class="jiveAdvancedButton jiveAdvancedButtonTopPad">
				<a href="#" onclick="togglePanel(jiveAdvanced); return false;" id="jiveAdvancedLink"><fmt:message key="setup.ldap.advanced" /></a>
			</div>
			<!-- END jiveAdvancedButton -->

			<!-- BEGIN jiveAdvancedPanelu (advanced user mapping settings) -->
				<div class="jiveadvancedPanelu" id="jiveAdvanced" style="display: none;">
					<div>
						<table border="0" cellpadding="0" cellspacing="2">
						<tr>
						<td align="right"><fmt:message key="setup.ldap.group.posix" />:</td>
						<td><span style="float: left;">
							<input type="radio" name="posixMode" value="true" style="float: none;" id="posix1" <% if(posixMode) {%>checked<% } %>><label for="posix1"> <fmt:message key="global.yes" />  </label>
							<input type="radio" name="posixMode" value="false" style="float: none;" id="posix2" <% if(!posixMode) {%>checked<% } %>><label for="posix2"> <fmt:message key="global.no" />  </label>
							</span>
							<span class="jive-setup-helpicon" onmouseover="domTT_activate(this, event, 'content', '<fmt:message key="setup.ldap.group.posix_description" />', 'styleClass', 'jiveTooltip', 'trail', true, 'delay', 300, 'lifetime', -1);"></span></td>
						</tr>
						<tr>
						<td align="right"><fmt:message key="setup.ldap.group.filter" /></td>
						<td><input type="text" name="groupSearchFilter" value="<%= groupSearchFilter!=null?groupSearchFilter:""%>" id="jiveLDAPgroupsearchfilter" size="22" maxlength="250"><span class="jive-setup-helpicon" onmouseover="domTT_activate(this, event, 'content', '<fmt:message key="setup.ldap.group.filter_description" />', 'styleClass', 'jiveTooltip', 'trail', true, 'delay', 300, 'lifetime', -1);"></span></td>
						</tr>
						</table>
					</div>
				</div>
			<!-- END jiveAdvancedPanelu (advanced user mapping settings) -->

		</div>
		<!-- END jive-contentBox_bluebox -->



		<!-- BEGIN jive-buttons -->
		<div class="jive-buttons">

			<!-- BEGIN right-aligned buttons -->
			<div align="right">
                <input type="Submit" name="test" value="<fmt:message key="setup.ldap.test" />" id="jive-setup-test" border="0">

                <% if (initialSetup) { %>
                <input type="Submit" name="save" value="<fmt:message key="setup.ldap.continue"/>" id="jive-setup-save" border="0">
                <% } else { %>
                <input type="Submit" name="save" value=".j<fmt:message key="global.save_settings"/>" id="jive-setup-save" border="0">
                <% } %>
			</div>
			<!-- END right-aligned buttons -->

		</div>
		<!-- END jive-buttons -->

	</form>

	</div>
	<!-- END jive-contentBox -->



</body>
</html>
