<?xml version="1.0" encoding="UTF-8"?>

<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<ui:composition template="/main.xhtml"
                xmlns:tc="http://myfaces.apache.org/tobago/component"
                xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core">

  <ui:param name="title" value="Server Info"/>

  <tc:panel rendered="#{serverInfo.enabled}">

    <tc:section label="Main Properties">

      <tc:in value="#{serverInfo.version}" readonly="true" label="Tobago Version"/>

      <tc:in value="#{manifestReader.buildTime}" readonly="true" label="Tobago Build Time">
        <f:convertDateTime type="both"/>
      </tc:in>

      <tc:in value="#{serverInfo.jsfTitle}" readonly="true" label="JSF Implementation"/>

      <tc:in value="#{serverInfo.jsfVersion}" readonly="true" label="JSF Version"/>

      <tc:in value="#{serverInfo.cdiTitle}" readonly="true" label="CDI Implementation"/>

      <tc:in value="#{serverInfo.cdiVersion}" readonly="true" label="CDI Version"/>

      <tc:in value="#{serverInfo.serverInfo}" readonly="true" label="Server Info"/>

      <tc:in value="#{serverInfo.systemProperties['java.runtime.version']} - #{serverInfo.systemProperties['java.vm.vendor']}"
             readonly="true" label="Java"/>

      <tc:in
          value="#{serverInfo.systemProperties['os.name']} - #{serverInfo.systemProperties['os.version']} - #{serverInfo.systemProperties['os.arch']}"
          readonly="true" label="Operating System"/>

      <tc:segmentLayout medium="6seg 6seg" large="4seg 4seg 4seg" extraLarge="3seg 3seg 3seg">
        <tc:selectBooleanCheckbox value="#{version.version20}" readonly="true" label="Version 2.0"/>
        <tc:selectBooleanCheckbox value="#{version.version21}" readonly="true" label="Version 2.1"/>
        <tc:selectBooleanCheckbox value="#{version.version22}" readonly="true" label="Version 2.2"/>
        <tc:selectBooleanCheckbox value="#{version.version23}" readonly="true" label="Version 2.3"/>
      </tc:segmentLayout>

      <tc:segmentLayout medium="6seg 6seg" large="4seg 4seg 4seg" extraLarge="3seg 3seg 3seg">
        <tc:selectBooleanCheckbox value="#{version.mojarra}" readonly="true" label="Mojarra"/>
        <tc:selectBooleanCheckbox value="#{version.myfaces}" readonly="true" label="MyFaces"/>
      </tc:segmentLayout>

      <tc:segmentLayout medium="6seg 6seg" large="4seg 4seg 4seg" extraLarge="3seg 3seg 3seg">
        <tc:selectBooleanCheckbox value="#{version.cdiVersion10}" readonly="true" label="CDI 1.0"/>
        <tc:selectBooleanCheckbox value="#{version.cdiVersion1112}" readonly="true" label="CDI 1.1 or 1.2"/>
        <tc:selectBooleanCheckbox value="#{version.cdiVersion20}" readonly="true" label="CDI 2.0"/>
      </tc:segmentLayout>

      <tc:segmentLayout medium="6seg 6seg" large="4seg 4seg 4seg" extraLarge="3seg 3seg 3seg">
        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('Production')}" readonly="true" label="Production"/>
        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('Development')}" readonly="true" label="Development"/>
        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('SystemTest')}" readonly="true" label="SystemTest"/>
        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('UnitTest')}" readonly="true" label="UnitTest"/>
      </tc:segmentLayout>

    </tc:section>

    <tc:section label="System Properties">
      <tc:sheet var="entry" value="#{serverInfo.systemPropertiesAsList}" rows="1000">
        <tc:column label="Key">
          <tc:out value="#{entry.key}" labelLayout="skip"/>
        </tc:column>
        <tc:column label="Value">
          <tc:out value="#{entry.value}" labelLayout="skip"/>
        </tc:column>
      </tc:sheet>
    </tc:section>

    <tc:section label="Sessions">
      <tc:sheet value="#{activityList.values}" var="activity"
                showRowRange="left" showPageRange="right" showDirectLinks="center">
        <tc:column label="Session Id">
          <tc:out value="#{activity.sessionId}" labelLayout="skip"/>
        </tc:column>
        <tc:column label="Creation Date">
          <tc:out value="#{activity.creationDate}" labelLayout="skip"/>
        </tc:column>
        <tc:column label="Jsf Request Count">
          <tc:out value="#{activity.jsfRequest}" labelLayout="skip"/>
        </tc:column>
        <tc:column label="Ajax Request Count">
          <tc:out value="#{activity.ajaxRequest}" labelLayout="skip"/>
        </tc:column>
      </tc:sheet>
    </tc:section>

    <tc:section label="Manifest">
      <tc:sheet value="#{manifestReader.manifestTree}" state="#{manifestReader.state}" var="manifest">
        <tc:columnNode label="Library/Key">
          <tc:treeIndent/>
          <tc:treeLabel value="#{manifest.name}"/>
        </tc:columnNode>
        <tc:column label="Value">
          <tc:out value="#{manifest.value}"/>
        </tc:column>
      </tc:sheet>
    </tc:section>

  </tc:panel>
</ui:composition>
