You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by ma...@apache.org on 2015/12/18 16:50:28 UTC

syncope git commit: Logs page: SYNCOPE-156

Repository: syncope
Updated Branches:
  refs/heads/master c3b1c7e66 -> 82ccd29d8


Logs page: SYNCOPE-156


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/82ccd29d
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/82ccd29d
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/82ccd29d

Branch: refs/heads/master
Commit: 82ccd29d88b787e1749c46bf4701c098147619f6
Parents: c3b1c7e
Author: Massimiliano Perrone <ma...@tirasa.net>
Authored: Fri Dec 18 16:47:10 2015 +0100
Committer: Massimiliano Perrone <ma...@tirasa.net>
Committed: Fri Dec 18 16:50:05 2015 +0100

----------------------------------------------------------------------
 .../syncope/client/console/pages/BasePage.java  |  22 ++--
 .../syncope/client/console/pages/Logs.java      |  84 +++++++++++++++
 .../console/panels/AbstractLogsPanel.java       | 106 +++++++++++++++++++
 .../client/console/panels/ConsoleLogPanel.java  |  79 ++++++++++++++
 .../client/console/panels/CoreLogPanel.java     |  41 +++++++
 .../client/console/panels/ListViewPanel.java    |   2 +-
 .../META-INF/resources/css/syncopeConsole.css   |  19 ++++
 .../syncope/client/console/pages/Logs.html      |  30 +++---
 .../client/console/pages/Logs.properties        |  17 +++
 .../client/console/pages/Logs_it.properties     |  17 +++
 .../client/console/pages/Logs_pt_BR.properties  |  17 +++
 .../client/console/panels/ConsoleLogPanel.html  |  28 +++++
 .../console/panels/ConsoleLogPanel.properties   |  18 ++++
 .../panels/ConsoleLogPanel_it.properties        |  18 ++++
 .../panels/ConsoleLogPanel_pt_BR.properties     |  18 ++++
 .../client/console/panels/CoreLogPanel.html     |  28 +++++
 .../console/panels/CoreLogPanel.properties      |  18 ++++
 .../console/panels/CoreLogPanel_it.properties   |  18 ++++
 .../panels/CoreLogPanel_pt_BR.properties        |  18 ++++
 .../client/console/panels/ListViewPanel.html    |   3 +-
 20 files changed, 574 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
index 191cc0d..3d03ab2 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/BasePage.java
@@ -96,17 +96,23 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware {
         WebMarkupContainer confULContainer = new WebMarkupContainer(getULContainerId("configuration"));
         confLIContainer.add(confULContainer);
 
-        liContainer = new WebMarkupContainer(getLIContainerId("types"));
-        confULContainer.add(liContainer);
-        BookmarkablePageLink<Page> typesLink = new BookmarkablePageLink<>("types", Types.class);
-        MetaDataRoleAuthorizationStrategy.authorize(typesLink, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
-        liContainer.add(typesLink);
-
         liContainer = new WebMarkupContainer(getLIContainerId("workflow"));
         confULContainer.add(liContainer);
         BookmarkablePageLink<Page> link = new BookmarkablePageLink<>("workflow", Workflow.class);
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.WORKFLOW_DEF_READ);
         liContainer.add(link);
+        
+        liContainer = new WebMarkupContainer(getLIContainerId("logs"));
+        confULContainer.add(liContainer);
+        BookmarkablePageLink<Page> logsLink = new BookmarkablePageLink<>("logs", Logs.class);
+        MetaDataRoleAuthorizationStrategy.authorize(logsLink, WebPage.ENABLE, StandardEntitlement.LOG_LIST);
+        liContainer.add(logsLink);
+        
+        liContainer = new WebMarkupContainer(getLIContainerId("types"));
+        confULContainer.add(liContainer);
+        BookmarkablePageLink<Page> typesLink = new BookmarkablePageLink<>("types", Types.class);
+        MetaDataRoleAuthorizationStrategy.authorize(typesLink, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
+        liContainer.add(typesLink);
 
         liContainer = new WebMarkupContainer(getLIContainerId("policies"));
         confULContainer.add(liContainer);
@@ -116,10 +122,6 @@ public class BasePage extends AbstractBasePage implements IAjaxIndicatorAware {
         confULContainer.add(liContainer);
         liContainer.add(new BookmarkablePageLink<>("securityQuestions", SecurityQuestions.class));
 
-        liContainer = new WebMarkupContainer(getLIContainerId("logs"));
-        confULContainer.add(liContainer);
-        liContainer.add(new BookmarkablePageLink<>("logs", Logs.class));
-
         liContainer = new WebMarkupContainer(getLIContainerId("layouts"));
         confULContainer.add(liContainer);
         liContainer.add(new BookmarkablePageLink<>("layouts", Layouts.class));

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java
index 24efe2e..c88044a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Logs.java
@@ -18,13 +18,97 @@
  */
 package org.apache.syncope.client.console.pages;
 
+import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.ConsoleLogPanel;
+import org.apache.syncope.client.console.panels.CoreLogPanel;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.LoggerTO;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 public class Logs extends BasePage {
 
     private static final long serialVersionUID = -1100228004207271271L;
 
+    private final BaseModal<LoggerTO> coreLogModal;
+
+    private final BaseModal<LoggerTO> consoleLogModal;
+
+    private final AjaxBootstrapTabbedPanel<ITab> tabbedPanel;
+
     public Logs(final PageParameters parameters) {
         super(parameters);
+
+        coreLogModal = new BaseModal<>("coreLogModal");
+        consoleLogModal = new BaseModal<>("consoleLogModal");
+
+        final WebMarkupContainer content = new WebMarkupContainer("content");
+        content.add(new Label("header", "Logs"));
+        content.setOutputMarkupId(true);
+        tabbedPanel = new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList());
+        content.add(tabbedPanel);
+
+        add(content);
+        addWindowWindowClosedCallback(coreLogModal);
+        addWindowWindowClosedCallback(consoleLogModal);
+        add(coreLogModal);
+        add(consoleLogModal);
+    }
+
+    private List<ITab> buildTabList() {
+
+        final List<ITab> tabs = new ArrayList<>();
+
+        tabs.add(new AbstractTab(new Model<>("Core")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new CoreLogPanel(panelId, getPageReference(), coreLogModal);
+            }
+        });
+
+        tabs.add(new AbstractTab(new Model<>("Console")) {
+
+            private static final long serialVersionUID = -6815067322125799251L;
+
+            @Override
+            public Panel getPanel(final String panelId) {
+                return new ConsoleLogPanel(panelId, getPageReference(), consoleLogModal);
+            }
+        });
+
+        return tabs;
+    }
+
+    private void addWindowWindowClosedCallback(final BaseModal<?> modal) {
+        modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
+
+            private static final long serialVersionUID = 8804221891699487139L;
+
+            @Override
+            public void onClose(final AjaxRequestTarget target) {
+                tabbedPanel.setSelectedTab(tabbedPanel.getSelectedTab());
+                target.add(tabbedPanel);
+                modal.show(false);
+
+                if (((AbstractBasePage) Logs.this.getPage()).isModalResult()) {
+                    info(getString(Constants.OPERATION_SUCCEEDED));
+                    feedbackPanel.refresh(target);
+                    ((AbstractBasePage) Logs.this.getPage()).setModalResult(false);
+                }
+            }
+        });
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
new file mode 100644
index 0000000..1584c93
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.AbstractBasePage;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.LoggerTO;
+import org.apache.syncope.common.lib.types.LoggerLevel;
+import org.apache.wicket.Component;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractLogsPanel<T extends AbstractBaseBean> extends Panel {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractLogsPanel.class);
+
+    private static final long serialVersionUID = -6313532280206208227L;
+
+    protected final NotificationPanel feedbackPanel;
+
+    public AbstractLogsPanel(
+            final String id, 
+            final PageReference pageRef,
+            final List<LoggerTO> loggerTOs) {
+        super(id);
+        this.feedbackPanel = ((AbstractBasePage) pageRef.getPage()).getFeedbackPanel();
+
+        final WebMarkupContainer container = new WebMarkupContainer("loggerContainer");
+        container.setOutputMarkupId(true);
+        add(container);
+
+        final ListViewPanel.Builder<LoggerTO> builder = new ListViewPanel.Builder<LoggerTO>(
+                LoggerTO.class, pageRef) {
+
+            private static final long serialVersionUID = 6957788356709885298L;
+
+            @Override
+            protected Component getValueComponent(final String key, final LoggerTO loggerTO) {
+                if ("level".equalsIgnoreCase(key)) {
+                    final AjaxDropDownChoicePanel<LoggerLevel> loggerTOs = new AjaxDropDownChoicePanel<>(
+                            "field", getString("level"), Model.of(loggerTO.getLevel()), false);
+                    loggerTOs.hideLabel();
+                    loggerTOs.setChoices(Arrays.asList(LoggerLevel.values()));
+                    loggerTOs.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+                        private static final long serialVersionUID = -1107858522700306810L;
+
+                        @Override
+                        protected void onUpdate(final AjaxRequestTarget target) {
+                            try {
+                                loggerTO.setLevel(loggerTOs.getModelObject());
+                                update(loggerTO);
+                                target.add(loggerTOs);
+                                info(getString(Constants.OPERATION_SUCCEEDED));
+                            } catch (SyncopeClientException e) {
+                                LOG.error("Error updating the logger level", e);
+                                info(getString(Constants.OPERATION_ERROR));
+                            }
+                            feedbackPanel.refresh(target);
+                        }
+                    });
+                    return loggerTOs;
+                } else {
+                    return super.getValueComponent(key, loggerTO);
+                }
+            }
+        };
+
+        builder.setItems(loggerTOs);
+        builder.setModel(new ListModel<>(loggerTOs));
+        builder.includes("key", "level");
+        builder.withChecks(ListViewPanel.CheckAvailability.NONE);
+        builder.setReuseItem(false);
+        container.add(builder.build("logger"));
+    }
+
+    protected abstract void update(final LoggerTO loggerTO);
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
new file mode 100644
index 0000000..09b56d1
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConsoleLogPanel.java
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.to.LoggerTO;
+import org.apache.syncope.common.lib.types.LoggerLevel;
+import org.apache.wicket.PageReference;
+
+public class ConsoleLogPanel extends AbstractLogsPanel<LoggerTO> {
+
+    private static final long serialVersionUID = -9165749229623482717L;
+
+    private static final ConsoleLoggerController CONSOLE_LOGGER_CONTROLLER = new ConsoleLoggerController();
+
+    public ConsoleLogPanel(final String id, final PageReference pageReference, final BaseModal<LoggerTO> modal) {
+        super(id, pageReference, CONSOLE_LOGGER_CONTROLLER.getLoggers());
+    }
+
+    @Override
+    protected void update(final LoggerTO loggerTO) {
+        CONSOLE_LOGGER_CONTROLLER.setLogLevel(loggerTO.getKey(), loggerTO.getLevel());
+    }
+
+    private static class ConsoleLoggerController implements Serializable {
+
+        private static final long serialVersionUID = -1550459341476431714L;
+
+        public List<LoggerTO> getLoggers() {
+            final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+
+            final List<LoggerTO> result = new ArrayList<>();
+            for (final LoggerConfig logger : ctx.getConfiguration().getLoggers().values()) {
+                final String loggerName = LogManager.ROOT_LOGGER_NAME.equals(logger.getName())
+                        ? SyncopeConstants.ROOT_LOGGER : logger.getName();
+                if (logger.getLevel() != null) {
+                    final LoggerTO loggerTO = new LoggerTO();
+                    loggerTO.setKey(loggerName);
+                    loggerTO.setLevel(LoggerLevel.fromLevel(logger.getLevel()));
+                    result.add(loggerTO);
+                }
+            }
+
+            return result;
+        }
+
+        public void setLogLevel(final String name, final LoggerLevel level) {
+            final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+            final LoggerConfig logConf = SyncopeConstants.ROOT_LOGGER.equals(name)
+                    ? ctx.getConfiguration().getLoggerConfig(LogManager.ROOT_LOGGER_NAME)
+                    : ctx.getConfiguration().getLoggerConfig(name);
+            logConf.setLevel(level.getLevel());
+            ctx.updateLoggers();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
new file mode 100644
index 0000000..3732781
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/CoreLogPanel.java
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+package org.apache.syncope.client.console.panels;
+
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.to.LoggerTO;
+import org.apache.syncope.common.lib.types.LoggerType;
+import org.apache.syncope.common.rest.api.service.LoggerService;
+import org.apache.wicket.PageReference;
+
+public class CoreLogPanel extends AbstractLogsPanel<LoggerTO> {
+
+    private static final long serialVersionUID = 3905038169553185171L;
+
+    public CoreLogPanel(final String id, final PageReference pageReference, final BaseModal<LoggerTO> modal) {
+        super(id, pageReference, SyncopeConsoleSession.get().getService(LoggerService.class).list(LoggerType.LOG));
+
+    }
+
+    @Override
+    protected void update(final LoggerTO loggerTO) {
+        SyncopeConsoleSession.get().getService(LoggerService.class).update(LoggerType.LOG, loggerTO);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
index 69e69d7..5aa35de 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
@@ -127,7 +127,7 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
 
         final List<String> toBeIncluded;
         if (includes == null || includes.isEmpty()) {
-            toBeIncluded = new ArrayList<String>();
+            toBeIncluded = new ArrayList<>();
             for (Field field : Arrays.asList(reference.getDeclaredFields())) {
                 toBeIncluded.add(field.getName());
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
index 17863dc..e5b290d 100644
--- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
+++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css
@@ -344,3 +344,22 @@ div.searchResult{
   clear: both;
 }
 
+.box-body {
+  min-height: 550px !important;
+}
+
+.logs .input-group-addon .input-group-btn {
+  width: 130px !important;
+}
+
+.logs .col_width {
+  width: 90% !important;
+}
+
+.logs .box-header {
+  display: none !important;
+}
+
+.logs .box{
+  border-top: 0px !important;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.html
index 1ddd8e3..2d2ac1f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.html
@@ -19,21 +19,23 @@ under the License.
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:extend>
-
-    <section class="content-header">
-      <h1>
-        Log Levels
-        <small>Work in progress</small>
-      </h1>
-    </section>
-
-    <section class="content">
-      <div class="progress progress active" style="margin:100px">
-        <div style="width: 70%" aria-valuemax="100" aria-valuemin="0" aria-valuenow="20" role="progressbar" class="progress-bar progress-bar-success progress-bar-striped">
-          <span class="sr-only">20% Complete</span>
+    <div class="wrapper">
+      <div class="admin-content-page" wicket:id="content">
+        <div class="box box-solid box-primary">
+          <div class="box-header with-border">
+            <h3 class="box-title">
+              <span wicket:id="header"></span>
+            </h3>
+          </div>
+          <div class="box-body">
+            <div class="realms">
+              <div wicket:id="tabbedPanel"></div>
+            </div>
+          </div>
         </div>
       </div>
-    </section>
-
+    </div>
+    <div wicket:id="coreLogModal"></div>
+    <div wicket:id="consoleLogModal"></div>
   </wicket:extend>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties
new file mode 100644
index 0000000..e37b4bc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs.properties
@@ -0,0 +1,17 @@
+# 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.
+logLevel=Log Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties
new file mode 100644
index 0000000..e37b4bc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_it.properties
@@ -0,0 +1,17 @@
+# 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.
+logLevel=Log Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties
new file mode 100644
index 0000000..e37b4bc
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Logs_pt_BR.properties
@@ -0,0 +1,17 @@
+# 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.
+logLevel=Log Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.html
new file mode 100644
index 0000000..ada2f99
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.html
@@ -0,0 +1,28 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://xmlns.jcp.org/jsf/composite">
+  <head><title></title></head>
+  <wicket:panel>
+    <span wicket:id="loggerContainer">
+      <div class="logs">
+        <span wicket:id="logger">[logger]</span>
+      </div>
+    </span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.properties
new file mode 100644
index 0000000..11bf815
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_it.properties
new file mode 100644
index 0000000..8a89715
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_it.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Livello

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_pt_BR.properties
new file mode 100644
index 0000000..11bf815
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConsoleLogPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
new file mode 100644
index 0000000..ada2f99
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.html
@@ -0,0 +1,28 @@
+<!--
+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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://xmlns.jcp.org/jsf/composite">
+  <head><title></title></head>
+  <wicket:panel>
+    <span wicket:id="loggerContainer">
+      <div class="logs">
+        <span wicket:id="logger">[logger]</span>
+      </div>
+    </span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.properties
new file mode 100644
index 0000000..11bf815
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_it.properties
new file mode 100644
index 0000000..8a89715
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_it.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Livello

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_pt_BR.properties
new file mode 100644
index 0000000..11bf815
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/CoreLogPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# 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.
+logger=Logger
+level=Level

http://git-wip-us.apache.org/repos/asf/syncope/blob/82ccd29d/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
index 0c1a727..2d3d7ee 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
@@ -45,7 +45,7 @@ under the License.
                     <td id="check">
                       <input type="checkbox" wicket:id="check"/>
                     </td>
-                    <td wicket:id="fields"><span wicket:id="field"/></td>
+                    <td wicket:id="fields" class="col_width"><span wicket:id="field"/></td>
                     <td>
                       <div class="listview-actions">
                         <span wicket:id="actions">[actions]</span>
@@ -53,7 +53,6 @@ under the License.
                     </td>
                   </tr>
                 </span>
-
               </tbody>
             </table>
           </div><!-- /.box-body -->