syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ilgro...@apache.org
Subject [4/5] syncope git commit: [SYNCOPE-745] Audit
Date Fri, 29 Apr 2016 14:24:35 GMT
http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
deleted file mode 100644
index b089631..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationHandler.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * 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.notifications;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.client.console.panels.search.SearchClause;
-import org.apache.syncope.client.console.panels.search.SearchUtils;
-import org.apache.syncope.client.lib.SyncopeClient;
-import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.to.NotificationTO;
-
-public class NotificationHandler implements Serializable {
-
-    private static final long serialVersionUID = 8058288034211558376L;
-
-    private final NotificationTO notificationTO;
-
-    private List<Pair<String, List<SearchClause>>> aboutClauses;
-
-    private List<SearchClause> recipientClauses;
-
-    public NotificationHandler(final NotificationTO notificationTO) {
-        this.notificationTO = notificationTO;
-    }
-
-    public final String getKey() {
-        return this.notificationTO.getKey();
-    }
-
-    public List<Pair<String, List<SearchClause>>> getAboutClauses() {
-        if (this.aboutClauses == null) {
-            this.aboutClauses = new ArrayList<>();
-            for (Map.Entry<String, List<SearchClause>> entry
-                    : SearchUtils.getSearchClauses(this.notificationTO.getAbouts()).entrySet()) {
-                this.aboutClauses.add(Pair.of(entry.getKey(), (entry.getValue())));
-            }
-        }
-
-        return this.aboutClauses;
-    }
-
-    public void setAboutClauses(final List<Pair<String, List<SearchClause>>> dynClauses) {
-        this.aboutClauses = dynClauses;
-    }
-
-    public List<SearchClause> getRecipientClauses() {
-        if (this.recipientClauses == null) {
-            this.recipientClauses = SearchUtils.getSearchClauses(this.notificationTO.getRecipientsFIQL());
-        }
-        return this.recipientClauses;
-    }
-
-    public void setRecipientClauses(final List<SearchClause> dynClauses) {
-        this.recipientClauses = dynClauses;
-    }
-
-    public Map<String, String> getAboutFIQLs() {
-        if (CollectionUtils.isEmpty(this.aboutClauses)) {
-            return this.notificationTO.getAbouts();
-        } else {
-
-            final Map<String, String> res = new HashMap<>();
-            for (Pair<String, List<SearchClause>> pair : this.aboutClauses) {
-                AbstractFiqlSearchConditionBuilder builder;
-                switch (pair.getLeft()) {
-                    case "USER":
-                        builder = SyncopeClient.getUserSearchConditionBuilder();
-                        break;
-                    case "GROUP":
-                        builder = SyncopeClient.getGroupSearchConditionBuilder();
-                        break;
-                    default:
-                        builder = SyncopeClient.getAnyObjectSearchConditionBuilder(pair.getLeft());
-                        break;
-
-                }
-                res.put(pair.getLeft(), getFIQLString(pair.getRight(), builder));
-            }
-            return res;
-        }
-    }
-
-    private String getRecipientsFIQL() {
-        if (CollectionUtils.isEmpty(this.recipientClauses)) {
-            return null;
-        } else {
-            return getFIQLString(this.recipientClauses, SyncopeClient.getUserSearchConditionBuilder());
-        }
-    }
-
-    private String getFIQLString(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder bld) {
-        return SearchUtils.buildFIQL(clauses, bld);
-    }
-
-    public NotificationTO fillAboutConditions() {
-        this.notificationTO.getAbouts().clear();
-        this.notificationTO.getAbouts().putAll(this.getAboutFIQLs());
-        return this.notificationTO;
-    }
-
-    public NotificationTO fillRecipientConditions() {
-        this.notificationTO.setRecipientsFIQL(this.getRecipientsFIQL());
-        return this.notificationTO;
-    }
-
-    public NotificationTO getInnerObject() {
-        return this.notificationTO;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
index fba971e..4bc8478 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWizardBuilder.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.console.notifications;
 
+import org.apache.syncope.client.console.events.EventCategoryPanel;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -69,7 +70,7 @@ import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.util.ListModel;
 import org.apache.wicket.validation.validator.EmailAddressValidator;
 
-public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHandler> {
+public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationWrapper> {
 
     private static final long serialVersionUID = -1975312550059578553L;
 
@@ -86,11 +87,11 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
      * @param pageRef Caller page reference.
      */
     public NotificationWizardBuilder(final NotificationTO notificationTO, final PageReference pageRef) {
-        super(new NotificationHandler(notificationTO), pageRef);
+        super(new NotificationWrapper(notificationTO), pageRef);
     }
 
     @Override
-    protected Serializable onApplyInternal(final NotificationHandler modelObject) {
+    protected Serializable onApplyInternal(final NotificationWrapper modelObject) {
         modelObject.fillRecipientConditions();
         modelObject.fillAboutConditions();
 
@@ -105,7 +106,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
     }
 
     @Override
-    protected WizardModel buildModelSteps(final NotificationHandler modelObject, final WizardModel wizardModel) {
+    protected WizardModel buildModelSteps(final NotificationWrapper modelObject, final WizardModel wizardModel) {
         wizardModel.add(new NotificationWizardBuilder.Details(modelObject));
         wizardModel.add(new NotificationWizardBuilder.Events(modelObject));
         wizardModel.add(new NotificationWizardBuilder.Abouts(modelObject));
@@ -117,7 +118,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         private static final long serialVersionUID = -7709805590497687958L;
 
-        public Details(final NotificationHandler modelObject) {
+        public Details(final NotificationWrapper modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
             final boolean createFlag = notificationTO.getKey() == null;
 
@@ -165,7 +166,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
                     "template", getString("template"),
                     new PropertyModel<String>(notificationTO, "template"));
             template.setChoices(CollectionUtils.collect(
-                    restClient.getAllAvailableTemplates(), new Transformer<MailTemplateTO, String>() {
+                    restClient.listTemplates(), new Transformer<MailTemplateTO, String>() {
 
                 @Override
                 public String transform(final MailTemplateTO input) {
@@ -197,25 +198,22 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         private static final long serialVersionUID = -7709805590497687958L;
 
-        public Events(final NotificationHandler modelObject) {
-            final NotificationTO notificationTO = modelObject.getInnerObject();
-            add(new LoggerCategoryPanel(
+        public Events(final NotificationWrapper modelObject) {
+            add(new EventCategoryPanel(
                     "eventSelection",
                     loggerRestClient.listEvents(),
-                    new PropertyModel<List<String>>(notificationTO, "events"),
-                    pageRef,
-                    "Notification") {
+                    new PropertyModel<List<String>>(modelObject.getInnerObject(), "events")) {
 
                 private static final long serialVersionUID = 6429053774964787735L;
 
                 @Override
-                protected String[] getListRoles() {
-                    return new String[] {};
+                protected List<String> getListAuthRoles() {
+                    return Collections.emptyList();
                 }
 
                 @Override
-                protected String[] getChangeRoles() {
-                    return new String[] {};
+                protected List<String> getChangeAuthRoles() {
+                    return Collections.emptyList();
                 }
             });
         }
@@ -313,7 +311,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         private static final long serialVersionUID = -7709805590497687958L;
 
-        public Abouts(final NotificationHandler modelObject) {
+        public Abouts(final NotificationWrapper modelObject) {
             final WebMarkupContainer aboutContainer = new WebMarkupContainer("about");
             aboutContainer.setOutputMarkupId(true);
             add(aboutContainer);
@@ -361,7 +359,7 @@ public class NotificationWizardBuilder extends AjaxWizardBuilder<NotificationHan
 
         private static final long serialVersionUID = -7709805590497687958L;
 
-        public Recipients(final NotificationHandler modelObject) {
+        public Recipients(final NotificationWrapper modelObject) {
             final NotificationTO notificationTO = modelObject.getInnerObject();
             final boolean createFlag = notificationTO.getKey() == null;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
new file mode 100644
index 0000000..031ebb8
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/notifications/NotificationWrapper.java
@@ -0,0 +1,131 @@
+/*
+ * 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.notifications;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.panels.search.SearchClause;
+import org.apache.syncope.client.console.panels.search.SearchUtils;
+import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.NotificationTO;
+
+public class NotificationWrapper implements Serializable {
+
+    private static final long serialVersionUID = 8058288034211558376L;
+
+    private final NotificationTO notificationTO;
+
+    private List<Pair<String, List<SearchClause>>> aboutClauses;
+
+    private List<SearchClause> recipientClauses;
+
+    public NotificationWrapper(final NotificationTO notificationTO) {
+        this.notificationTO = notificationTO;
+    }
+
+    public final String getKey() {
+        return this.notificationTO.getKey();
+    }
+
+    public List<Pair<String, List<SearchClause>>> getAboutClauses() {
+        if (this.aboutClauses == null) {
+            this.aboutClauses = new ArrayList<>();
+            for (Map.Entry<String, List<SearchClause>> entry
+                    : SearchUtils.getSearchClauses(this.notificationTO.getAbouts()).entrySet()) {
+                this.aboutClauses.add(Pair.of(entry.getKey(), (entry.getValue())));
+            }
+        }
+
+        return this.aboutClauses;
+    }
+
+    public void setAboutClauses(final List<Pair<String, List<SearchClause>>> dynClauses) {
+        this.aboutClauses = dynClauses;
+    }
+
+    public List<SearchClause> getRecipientClauses() {
+        if (this.recipientClauses == null) {
+            this.recipientClauses = SearchUtils.getSearchClauses(this.notificationTO.getRecipientsFIQL());
+        }
+        return this.recipientClauses;
+    }
+
+    public void setRecipientClauses(final List<SearchClause> dynClauses) {
+        this.recipientClauses = dynClauses;
+    }
+
+    public Map<String, String> getAboutFIQLs() {
+        if (CollectionUtils.isEmpty(this.aboutClauses)) {
+            return this.notificationTO.getAbouts();
+        } else {
+
+            final Map<String, String> res = new HashMap<>();
+            for (Pair<String, List<SearchClause>> pair : this.aboutClauses) {
+                AbstractFiqlSearchConditionBuilder builder;
+                switch (pair.getLeft()) {
+                    case "USER":
+                        builder = SyncopeClient.getUserSearchConditionBuilder();
+                        break;
+                    case "GROUP":
+                        builder = SyncopeClient.getGroupSearchConditionBuilder();
+                        break;
+                    default:
+                        builder = SyncopeClient.getAnyObjectSearchConditionBuilder(pair.getLeft());
+                        break;
+
+                }
+                res.put(pair.getLeft(), getFIQLString(pair.getRight(), builder));
+            }
+            return res;
+        }
+    }
+
+    private String getRecipientsFIQL() {
+        if (CollectionUtils.isEmpty(this.recipientClauses)) {
+            return null;
+        } else {
+            return getFIQLString(this.recipientClauses, SyncopeClient.getUserSearchConditionBuilder());
+        }
+    }
+
+    private String getFIQLString(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder bld) {
+        return SearchUtils.buildFIQL(clauses, bld);
+    }
+
+    public NotificationTO fillAboutConditions() {
+        this.notificationTO.getAbouts().clear();
+        this.notificationTO.getAbouts().putAll(this.getAboutFIQLs());
+        return this.notificationTO;
+    }
+
+    public NotificationTO fillRecipientConditions() {
+        this.notificationTO.setRecipientsFIQL(this.getRecipientsFIQL());
+        return this.notificationTO;
+    }
+
+    public NotificationTO getInnerObject() {
+        return this.notificationTO;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/notifications/SelectedEventsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/notifications/SelectedEventsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/notifications/SelectedEventsPanel.java
deleted file mode 100644
index cf396f6..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/notifications/SelectedEventsPanel.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * 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.notifications;
-
-import java.util.List;
-import java.util.Set;
-import org.apache.syncope.client.console.commons.Constants;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.event.Broadcast;
-import org.apache.wicket.event.IEvent;
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.html.form.ListMultipleChoice;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.util.ListModel;
-
-public class SelectedEventsPanel extends Panel {
-
-    private static final long serialVersionUID = -4832450230348213500L;
-
-    private final WebMarkupContainer selectionContainer;
-
-    private ListMultipleChoice<String> selectedEvents;
-
-    private final IModel<List<String>> model;
-
-    public SelectedEventsPanel(final String id, final IModel<List<String>> model) {
-        super(id);
-
-        this.model = model;
-
-        selectionContainer = new WebMarkupContainer("selectionContainer");
-        selectionContainer.setOutputMarkupId(true);
-        add(selectionContainer);
-
-        selectedEvents = new ListMultipleChoice<String>("selectedEvents", new ListModel<String>(), model) {
-
-            private static final long serialVersionUID = 1226677544225737338L;
-
-            @Override
-            protected void onComponentTag(final ComponentTag tag) {
-                super.onComponentTag(tag);
-                tag.remove("size");
-                tag.remove("multiple");
-                tag.put("size", 5);
-            }
-        };
-
-        selectedEvents.setMaxRows(5);
-        selectedEvents.setChoiceRenderer(new IChoiceRenderer<String>() {
-
-            private static final long serialVersionUID = -4288397951948436434L;
-
-            @Override
-            public Object getDisplayValue(final String object) {
-                return object;
-            }
-
-            @Override
-            public String getIdValue(final String object, final int index) {
-                return object;
-            }
-
-            @Override
-            public String getObject(final String id, final IModel<? extends List<? extends String>> choices) {
-                return id;
-            }
-        });
-
-        selectedEvents.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
-
-            private static final long serialVersionUID = -151291731388673682L;
-
-            @Override
-            protected void onUpdate(final AjaxRequestTarget target) {
-                send(SelectedEventsPanel.this.getPage(),
-                        Broadcast.BREADTH,
-                        new InspectSelectedEvent(target, selectedEvents.getModelValue()));
-            }
-        });
-
-        selectionContainer.add(selectedEvents);
-    }
-
-    @Override
-    public void onEvent(final IEvent<?> event) {
-        if (event.getPayload() instanceof EventSelectionChanged) {
-            final EventSelectionChanged eventSelectionChanged = (EventSelectionChanged) event.getPayload();
-
-            for (String toBeRemoved : eventSelectionChanged.getToBeRemoved()) {
-                model.getObject().remove(toBeRemoved);
-            }
-
-            for (String toBeAdded : eventSelectionChanged.getToBeAdded()) {
-                if (!model.getObject().contains(toBeAdded)) {
-                    model.getObject().add(toBeAdded);
-                }
-            }
-
-            eventSelectionChanged.getTarget().add(selectionContainer);
-        }
-    }
-
-    public static class InspectSelectedEvent {
-
-        private final AjaxRequestTarget target;
-
-        private final String event;
-
-        public InspectSelectedEvent(final AjaxRequestTarget target, final String event) {
-            this.target = target;
-            this.event = event;
-        }
-
-        public AjaxRequestTarget getTarget() {
-            return target;
-        }
-
-        public String getEvent() {
-            return event;
-        }
-    }
-
-    public static class EventSelectionChanged {
-
-        private final AjaxRequestTarget target;
-
-        private final Set<String> toBeRemoved;
-
-        private final Set<String> toBeAdded;
-
-        public EventSelectionChanged(
-                final AjaxRequestTarget target,
-                final Set<String> toBeAdded,
-                final Set<String> toBeRemoved) {
-            this.target = target;
-            this.toBeAdded = toBeAdded;
-            this.toBeRemoved = toBeRemoved;
-        }
-
-        public AjaxRequestTarget getTarget() {
-            return target;
-        }
-
-        public Set<String> getToBeRemoved() {
-            return toBeRemoved;
-        }
-
-        public Set<String> getToBeAdded() {
-            return toBeAdded;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
new file mode 100644
index 0000000..9a5fc4a
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
@@ -0,0 +1,127 @@
+/*
+ * 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.pages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.events.EventCategoryPanel;
+import org.apache.syncope.client.console.events.SelectedEventsPanel;
+import org.apache.syncope.client.console.rest.LoggerRestClient;
+import org.apache.syncope.common.lib.to.EventCategoryTO;
+import org.apache.syncope.common.lib.types.AuditElements;
+import org.apache.syncope.common.lib.types.AuditLoggerName;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class Audit extends BasePage {
+
+    private static final long serialVersionUID = -1100228004207271271L;
+
+    public Audit(final PageParameters parameters) {
+        super(parameters);
+
+        body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
+
+        final LoggerRestClient loggerRestClient = new LoggerRestClient();
+
+        List<String> events = new ArrayList<>();
+        for (AuditLoggerName audit : loggerRestClient.listAudits()) {
+            events.add(AuditLoggerName.buildEvent(
+                    audit.getType(),
+                    audit.getCategory(),
+                    audit.getSubcategory(),
+                    audit.getEvent(),
+                    audit.getResult()));
+        }
+
+        WebMarkupContainer content = new WebMarkupContainer("content");
+        content.setOutputMarkupId(true);
+
+        Form<?> form = new Form<>("auditForm");
+        content.add(form);
+
+        form.add(new EventCategoryPanel(
+                "auditPanel",
+                loggerRestClient.listEvents(),
+                new ListModel<>(events)) {
+
+            private static final long serialVersionUID = 6113164334533550277L;
+
+            @Override
+            protected List<String> getListAuthRoles() {
+                return Collections.singletonList(StandardEntitlement.AUDIT_LIST);
+            }
+
+            @Override
+            protected List<String> getChangeAuthRoles() {
+                return Arrays.asList(
+                        new String[] { StandardEntitlement.AUDIT_ENABLE, StandardEntitlement.AUDIT_DISABLE });
+            }
+
+            @Override
+            public void onEventAction(final IEvent<?> event) {
+                if (event.getPayload() instanceof SelectedEventsPanel.EventSelectionChanged) {
+                    final SelectedEventsPanel.EventSelectionChanged eventSelectionChanged =
+                            (SelectedEventsPanel.EventSelectionChanged) event.getPayload();
+
+                    for (String toBeRemoved : eventSelectionChanged.getToBeRemoved()) {
+                        Pair<EventCategoryTO, AuditElements.Result> eventCategory =
+                                AuditLoggerName.parseEventCategory(toBeRemoved);
+
+                        AuditLoggerName auditLoggerName = new AuditLoggerName(
+                                eventCategory.getKey().getType(),
+                                eventCategory.getKey().getCategory(),
+                                eventCategory.getKey().getSubcategory(),
+                                CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
+                                ? null : eventCategory.getKey().getEvents().iterator().next(),
+                                eventCategory.getValue());
+
+                        loggerRestClient.disableAudit(auditLoggerName);
+                    }
+
+                    for (String toBeAdded : eventSelectionChanged.getToBeAdded()) {
+                        Pair<EventCategoryTO, AuditElements.Result> eventCategory =
+                                AuditLoggerName.parseEventCategory(toBeAdded);
+
+                        AuditLoggerName auditLoggerName = new AuditLoggerName(
+                                eventCategory.getKey().getType(),
+                                eventCategory.getKey().getCategory(),
+                                eventCategory.getKey().getSubcategory(),
+                                CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
+                                ? null : eventCategory.getKey().getEvents().iterator().next(),
+                                eventCategory.getValue());
+
+                        loggerRestClient.enableAudit(auditLoggerName);
+                    }
+                }
+            }
+        });
+
+        body.add(content);
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/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 b0425a9..c5797db 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
@@ -160,6 +160,12 @@ public class BasePage extends WebPage implements IAjaxIndicatorAware {
         MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.WORKFLOW_DEF_READ);
         liContainer.add(link);
 
+        liContainer = new WebMarkupContainer(getLIContainerId("audit"));
+        confULContainer.add(liContainer);
+        link = BookmarkablePageLinkBuilder.build("audit", Audit.class);
+        MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.AUDIT_LIST);
+        liContainer.add(link);
+
         liContainer = new WebMarkupContainer(getLIContainerId("logs"));
         confULContainer.add(liContainer);
         link = BookmarkablePageLinkBuilder.build("logs", Logs.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
index 3758258..0f4295c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Roles.java
@@ -21,7 +21,7 @@ package org.apache.syncope.client.console.pages;
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
 import org.apache.syncope.client.console.panels.RoleDirectoryPanel;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
-import org.apache.syncope.client.console.wizards.role.RoleHandler;
+import org.apache.syncope.client.console.wizards.role.RoleWrapper;
 import org.apache.syncope.client.console.wizards.role.RoleWizardBuilder;
 import org.apache.syncope.common.lib.to.RoleTO;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -40,7 +40,7 @@ public class Roles extends BasePage {
         content.setOutputMarkupId(true);
         body.add(content);
 
-        WizardMgtPanel<RoleHandler> rolesPanel = new RoleDirectoryPanel.Builder(getPageReference()) {
+        WizardMgtPanel<RoleWrapper> rolesPanel = new RoleDirectoryPanel.Builder(getPageReference()) {
 
             private static final long serialVersionUID = -5960765294082359003L;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
index 9b02666..b99a323 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDisplayAttributesModalPanel.java
@@ -29,7 +29,7 @@ import org.apache.wicket.PageReference;
  * Modal window with Display any attributes form.
  *
  * @param <T> can be {@link org.apache.syncope.common.lib.to.AnyTO} or
- * {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
+ * {@link org.apache.syncope.client.console.wizards.any.AnyWrapper}
  */
 public class AnyObjectDisplayAttributesModalPanel<T extends Serializable> extends DisplayAttributesModalPanel<T> {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
index f09b59a..764a5e3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/DisplayAttributesModalPanel.java
@@ -41,7 +41,7 @@ import org.apache.wicket.model.util.ListModel;
 /**
  * Modal window with Display attributes form.
  *
- * @param <T> can be {@link AnyTO} or {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
+ * @param <T> can be {@link AnyTO} or {@link org.apache.syncope.client.console.wizards.any.AnyWrapper}
  */
 public abstract class DisplayAttributesModalPanel<T extends Serializable> extends AbstractModalPanel<T> {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
index 30aeb96..43b8b93 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
@@ -29,7 +29,7 @@ import org.apache.wicket.PageReference;
  * Modal window with Display group attributes form.
  *
  * @param <T> can be {@link org.apache.syncope.common.lib.to.AnyTO} or
- * {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
+ * {@link org.apache.syncope.client.console.wizards.any.AnyWrapper}
  */
 public class GroupDisplayAttributesModalPanel<T extends Serializable> extends DisplayAttributesModalPanel<T> {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
index ffccc48..9997e02 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RoleDirectoryPanel.java
@@ -37,7 +37,7 @@ import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.Acti
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
 import org.apache.syncope.client.console.wizards.AjaxWizard;
 import org.apache.syncope.client.console.wizards.WizardMgtPanel;
-import org.apache.syncope.client.console.wizards.role.RoleHandler;
+import org.apache.syncope.client.console.wizards.role.RoleWrapper;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.RoleTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -50,7 +50,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColu
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
-public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, RoleDataProvider, RoleRestClient> {
+public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleWrapper, RoleDataProvider, RoleRestClient> {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
@@ -108,7 +108,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
                     public void onClick(final AjaxRequestTarget target, final RoleTO ignore) {
                         send(RoleDirectoryPanel.this, Broadcast.EXACT,
                                 new AjaxWizard.EditItemActionEvent<>(
-                                        new RoleHandler(new RoleRestClient().read(model.getObject().getKey())),
+                                        new RoleWrapper(new RoleRestClient().read(model.getObject().getKey())),
                                         target));
                     }
                 }, ActionLink.ActionType.EDIT, StandardEntitlement.ROLE_READ).add(new ActionLink<RoleTO>() {
@@ -120,7 +120,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
                         final RoleTO clone = SerializationUtils.clone(model.getObject());
                         clone.setKey(null);
                         send(RoleDirectoryPanel.this, Broadcast.EXACT,
-                                new AjaxWizard.NewItemActionEvent<>(new RoleHandler(clone), target));
+                                new AjaxWizard.NewItemActionEvent<>(new RoleWrapper(clone), target));
                     }
                 }, ActionLink.ActionType.CLONE, StandardEntitlement.ROLE_CREATE).add(new ActionLink<RoleTO>() {
 
@@ -187,7 +187,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
     }
 
     public abstract static class Builder
-            extends DirectoryPanel.Builder<RoleTO, RoleHandler, RoleRestClient> {
+            extends DirectoryPanel.Builder<RoleTO, RoleWrapper, RoleRestClient> {
 
         private static final long serialVersionUID = 5088962796986706805L;
 
@@ -196,7 +196,7 @@ public class RoleDirectoryPanel extends DirectoryPanel<RoleTO, RoleHandler, Role
         }
 
         @Override
-        protected WizardMgtPanel<RoleHandler> newInstance(final String id) {
+        protected WizardMgtPanel<RoleWrapper> newInstance(final String id) {
             return new RoleDirectoryPanel(id, this);
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
index 9c2094f..21a85b6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/SchemaTypePanel.java
@@ -264,9 +264,8 @@ public class SchemaTypePanel extends TypesDirectoryPanel<AbstractSchemaTO, Schem
 
         private SchemaProvider(final int paginatorRows, final SchemaType schemaType) {
             super(paginatorRows);
-            this.schemaType = schemaType;
 
-            // Default sorting
+            this.schemaType = schemaType;
             setSort("key", SortOrder.ASCENDING);
             comparator = new SortableDataProviderComparator<>(this);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
index 17a8535..a010569 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/TypeExtensionDirectoryPanel.java
@@ -179,7 +179,6 @@ public class TypeExtensionDirectoryPanel
         public TypeExtensionDataProvider(final int paginatorRows) {
             super(paginatorRows);
 
-            //Default sorting
             setSort("anyKey", SortOrder.DESCENDING);
         }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
index ff833a8..1ef96ca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
@@ -29,7 +29,7 @@ import org.apache.wicket.PageReference;
  * Modal window with Display user attributes form.
  *
  * @param <T> can be {@link org.apache.syncope.common.lib.to.AnyTO} or
- * {@link org.apache.syncope.client.console.wizards.any.AnyHandler}
+ * {@link org.apache.syncope.client.console.wizards.any.AnyWrapper}
  */
 public class UserDisplayAttributesModalPanel<T extends Serializable> extends DisplayAttributesModalPanel<T> {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
index 062c6eb..1f56083 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportDirectoryPanel.java
@@ -228,27 +228,23 @@ public abstract class ReportDirectoryPanel
 
         private final SortableDataProviderComparator<ReportTO> comparator;
 
-        private final List<ReportTO> reports;
-
         public ReportDataProvider(final int paginatorRows) {
             super(paginatorRows);
-            this.reports = restClient.list();
 
-            //Default sorting
             setSort("key", SortOrder.DESCENDING);
             comparator = new SortableDataProviderComparator<>(this);
-
-            Collections.sort(this.reports, comparator);
         }
 
         @Override
         public Iterator<ReportTO> iterator(final long first, final long count) {
-            return this.reports.subList((int) first, (int) (first + count)).iterator();
+            List<ReportTO> list = restClient.list();
+            Collections.sort(list, comparator);
+            return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return reports.size();
+            return restClient.list().size();
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
index 497a4bd..31e84f1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportTemplateDirectoryPanel.java
@@ -225,14 +225,14 @@ public class ReportTemplateDirectoryPanel
 
         @Override
         public Iterator<ReportTemplateTO> iterator(final long first, final long count) {
-            final List<ReportTemplateTO> list = restClient.getAllAvailableTemplates();
+            final List<ReportTemplateTO> list = restClient.listTemplates();
             Collections.sort(list, comparator);
             return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
         public long size() {
-            return restClient.getAllAvailableTemplates().size();
+            return restClient.listTemplates().size();
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
index 6a12244..6d4922c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/reports/ReportWizardBuilder.java
@@ -78,7 +78,7 @@ public class ReportWizardBuilder extends AjaxWizardBuilder<ReportTO> {
                     "template", getString("template"),
                     new PropertyModel<String>(reportTO, "template"));
             template.setChoices(CollectionUtils.collect(
-                    restClient.getAllAvailableTemplates(), new Transformer<ReportTemplateTO, String>() {
+                    restClient.listTemplates(), new Transformer<ReportTemplateTO, String>() {
 
                 @Override
                 public String transform(final ReportTemplateTO input) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
index eab0a17..1509217 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/NotificationRestClient.java
@@ -34,7 +34,7 @@ public class NotificationRestClient extends BaseRestClient
 
     private static final long serialVersionUID = 6328933265096511690L;
 
-    public List<NotificationTO> getAllNotifications() {
+    public List<NotificationTO> list() {
         return getService(NotificationService.class).list();
     }
 
@@ -55,7 +55,7 @@ public class NotificationRestClient extends BaseRestClient
     }
 
     @Override
-    public List<MailTemplateTO> getAllAvailableTemplates() {
+    public List<MailTemplateTO> listTemplates() {
         return getService(MailTemplateService.class).list();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
index dc72f04..30e2037 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReportRestClient.java
@@ -97,7 +97,7 @@ public class ReportRestClient extends BaseRestClient
     }
 
     @Override
-    public List<ReportTemplateTO> getAllAvailableTemplates() {
+    public List<ReportTemplateTO> listTemplates() {
         return getService(ReportTemplateService.class).list();
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java
index 9bb62b6..d3d5c35 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/TemplateRestClient.java
@@ -22,7 +22,7 @@ import java.util.List;
 
 public interface TemplateRestClient<T, F> extends RestClient {
 
-    List<T> getAllAvailableTemplates();
+    List<T> listTemplates();
 
     void createTemplate(final T templateTO);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 14fc503..3dd4955 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -31,6 +31,7 @@ import org.apache.syncope.client.console.commons.TaskDataProvider;
 import org.apache.syncope.client.console.panels.ModalPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
+import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
@@ -140,7 +141,7 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
         columns.add(new PropertyColumn<T, String>(
                 new StringResourceModel("latestExecStatus", this, null), "latestExecStatus", "latestExecStatus"));
 
-        columns.add(new PropertyColumn<T, String>(
+        columns.add(new BooleanPropertyColumn<T>(
                 new StringResourceModel("active", this, null), "active", "active"));
 
         return columns;

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
index 081d2dd..db58085 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
@@ -76,7 +76,6 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
         public TasksProvider(final int paginatorRows, final TaskType id) {
             super(paginatorRows);
 
-            //Default sorting
             setSort("key", SortOrder.DESCENDING);
             comparator = new SortableDataProviderComparator<>(this);
             this.id = id;

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
index edf9b80..5a6abe9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DynamicMemberships.java
@@ -50,7 +50,7 @@ public class DynamicMemberships extends WizardStep {
 
     private final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient();
 
-    public DynamicMemberships(final GroupWrapper groupHandler) {
+    public DynamicMemberships(final GroupWrapper groupWrapper) {
         super();
 
         final LoadableDetachableModel<List<AnyTypeTO>> types = new LoadableDetachableModel<List<AnyTypeTO>>() {
@@ -79,10 +79,10 @@ public class DynamicMemberships extends WizardStep {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new UserSearchPanel.Builder(new PropertyModel<List<SearchClause>>(groupHandler, "uDynClauses")).
+                return new UserSearchPanel.Builder(new PropertyModel<List<SearchClause>>(groupWrapper, "uDynClauses")).
                         required(false).build(panelId);
             }
-        }), Model.of(StringUtils.isBlank(groupHandler.getUDynMembershipCond()) ? -1 : 0)).setOutputMarkupId(true));
+        }), Model.of(StringUtils.isBlank(groupWrapper.getUDynMembershipCond()) ? -1 : 0)).setOutputMarkupId(true));
         // ------------------------ 
 
         // ------------------------
@@ -104,10 +104,10 @@ public class DynamicMemberships extends WizardStep {
                     @Override
                     public Panel getPanel(final String panelId) {
                         return new AnyObjectSearchPanel.Builder(
-                                key, new MapOfListModel<SearchClause>(groupHandler, "aDynClauses", key)).
+                                key, new MapOfListModel<SearchClause>(groupWrapper, "aDynClauses", key)).
                                 required(false).build(panelId);
                     }
-                }), Model.of(StringUtils.isBlank(groupHandler.getADynMembershipConds().get(key)) ? -1 : 0))
+                }), Model.of(StringUtils.isBlank(groupWrapper.getADynMembershipConds().get(key)) ? -1 : 0))
                         .setOutputMarkupId(true));
             }
         });

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
index f60f3c4..aac95f8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
@@ -91,11 +91,11 @@ public class Ownership extends WizardStep {
 
     private final Model<Boolean> isGroupOwnership;
 
-    public Ownership(final GroupWrapper groupHandler, final PageReference pageRef) {
+    public Ownership(final GroupWrapper groupWrapper, final PageReference pageRef) {
         super();
-        this.wrapper = groupHandler;
+        this.wrapper = groupWrapper;
 
-        isGroupOwnership = Model.of(groupHandler.getInnerObject().getGroupOwner() != null);
+        isGroupOwnership = Model.of(groupWrapper.getInnerObject().getGroupOwner() != null);
 
         final BootstrapToggleConfig config = new BootstrapToggleConfig().
                 withOnStyle(BootstrapToggleConfig.Style.info).
@@ -187,16 +187,16 @@ public class Ownership extends WizardStep {
         }
 
         final AjaxTextFieldPanel userOwner = new AjaxTextFieldPanel(
-                "userOwner", "userOwner", new PropertyModel<String>(groupHandler.getInnerObject(), "userOwner") {
+                "userOwner", "userOwner", new PropertyModel<String>(groupWrapper.getInnerObject(), "userOwner") {
 
             private static final long serialVersionUID = -3743432456095828573L;
 
             @Override
             public String getObject() {
-                if (groupHandler.getInnerObject().getUserOwner() == null) {
+                if (groupWrapper.getInnerObject().getUserOwner() == null) {
                     return StringUtils.EMPTY;
                 } else {
-                    UserTO userTO = userRestClient.read(groupHandler.getInnerObject().getUserOwner());
+                    UserTO userTO = userRestClient.read(groupWrapper.getInnerObject().getUserOwner());
                     if (userTO == null) {
                         return StringUtils.EMPTY;
                     } else {
@@ -208,11 +208,11 @@ public class Ownership extends WizardStep {
             @Override
             public void setObject(final String object) {
                 if (StringUtils.isBlank(object)) {
-                    groupHandler.getInnerObject().setUserOwner(null);
+                    groupWrapper.getInnerObject().setUserOwner(null);
                 } else {
                     final Matcher matcher = owner.matcher(object);
                     if (matcher.matches()) {
-                        groupHandler.getInnerObject().setUserOwner(matcher.group(1));
+                        groupWrapper.getInnerObject().setUserOwner(matcher.group(1));
                     }
                 }
             }
@@ -235,16 +235,16 @@ public class Ownership extends WizardStep {
         userSearchFragment.add(userOwnerReset);
 
         final AjaxTextFieldPanel groupOwner = new AjaxTextFieldPanel(
-                "groupOwner", "groupOwner", new PropertyModel<String>(groupHandler.getInnerObject(), "groupOwner") {
+                "groupOwner", "groupOwner", new PropertyModel<String>(groupWrapper.getInnerObject(), "groupOwner") {
 
             private static final long serialVersionUID = -3743432456095828573L;
 
             @Override
             public String getObject() {
-                if (groupHandler.getInnerObject().getGroupOwner() == null) {
+                if (groupWrapper.getInnerObject().getGroupOwner() == null) {
                     return StringUtils.EMPTY;
                 } else {
-                    GroupTO groupTO = groupRestClient.read(groupHandler.getInnerObject().getGroupOwner());
+                    GroupTO groupTO = groupRestClient.read(groupWrapper.getInnerObject().getGroupOwner());
                     if (groupTO == null) {
                         return StringUtils.EMPTY;
                     } else {
@@ -256,11 +256,11 @@ public class Ownership extends WizardStep {
             @Override
             public void setObject(final String object) {
                 if (StringUtils.isBlank(object)) {
-                    groupHandler.getInnerObject().setGroupOwner(null);
+                    groupWrapper.getInnerObject().setGroupOwner(null);
                 } else {
                     final Matcher matcher = owner.matcher(object);
                     if (matcher.matches()) {
-                        groupHandler.getInnerObject().setGroupOwner(matcher.group(1));
+                        groupWrapper.getInnerObject().setGroupOwner(matcher.group(1));
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleHandler.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleHandler.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleHandler.java
deleted file mode 100644
index f7034b6..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleHandler.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.wizards.role;
-
-import java.io.Serializable;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.syncope.client.console.panels.search.SearchClause;
-import org.apache.syncope.client.console.panels.search.SearchUtils;
-import org.apache.syncope.client.lib.SyncopeClient;
-import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.to.RoleTO;
-
-public class RoleHandler implements Serializable {
-
-    private static final long serialVersionUID = 8058288034211558376L;
-
-    private final RoleTO roleTO;
-
-    private List<SearchClause> dynClauses;
-
-    public RoleHandler(final RoleTO roleTO) {
-        this.roleTO = roleTO;
-        getDynClauses();
-    }
-
-    public final List<SearchClause> getDynClauses() {
-        if (this.dynClauses == null) {
-            this.dynClauses = SearchUtils.getSearchClauses(this.roleTO.getDynMembershipCond());
-        }
-        return this.dynClauses;
-    }
-
-    public void setDynClauses(final List<SearchClause> dynClauses) {
-        this.dynClauses = dynClauses;
-    }
-
-    public String getDynMembershipCond() {
-        if (CollectionUtils.isEmpty(this.dynClauses)) {
-            return null;
-        } else {
-            return getFIQLString(this.dynClauses, SyncopeClient.getUserSearchConditionBuilder());
-        }
-    }
-
-    private String getFIQLString(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder bld) {
-        return SearchUtils.buildFIQL(clauses, bld);
-    }
-
-    public RoleTO fillDynamicConditions() {
-        this.roleTO.setDynMembershipCond(this.getDynMembershipCond());
-        return this.roleTO;
-    }
-
-    public RoleTO getInnerObject() {
-        return this.roleTO;
-    }
-}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
index 9c2bea1..c71d1ca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder.java
@@ -46,7 +46,7 @@ import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.util.ListModel;
 
-public class RoleWizardBuilder extends AjaxWizardBuilder<RoleHandler> {
+public class RoleWizardBuilder extends AjaxWizardBuilder<RoleWrapper> {
 
     private static final long serialVersionUID = 5945391813567245081L;
 
@@ -59,7 +59,7 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleHandler> {
      * @param pageRef Caller page reference.
      */
     public RoleWizardBuilder(final RoleTO roleTO, final PageReference pageRef) {
-        super(new RoleHandler(roleTO), pageRef);
+        super(new RoleWrapper(roleTO), pageRef);
     }
 
     /**
@@ -70,14 +70,14 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleHandler> {
      * @return the current builder.
      */
     @Override
-    public AjaxWizardBuilder<RoleHandler> setItem(final RoleHandler item) {
-        return (AjaxWizardBuilder<RoleHandler>) (item == null
+    public AjaxWizardBuilder<RoleWrapper> setItem(final RoleWrapper item) {
+        return (AjaxWizardBuilder<RoleWrapper>) (item == null
                 ? super.setItem(item)
-                : super.setItem(new RoleHandler(item.getInnerObject())));
+                : super.setItem(new RoleWrapper(item.getInnerObject())));
     }
 
     @Override
-    protected Serializable onApplyInternal(final RoleHandler modelObject) {
+    protected Serializable onApplyInternal(final RoleWrapper modelObject) {
         modelObject.fillDynamicConditions();
         if (getOriginalItem() == null || getOriginalItem().getInnerObject() == null
                 || StringUtils.isBlank(getOriginalItem().getInnerObject().getKey())) {
@@ -89,7 +89,7 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleHandler> {
     }
 
     @Override
-    protected WizardModel buildModelSteps(final RoleHandler modelObject, final WizardModel wizardModel) {
+    protected WizardModel buildModelSteps(final RoleWrapper modelObject, final WizardModel wizardModel) {
         wizardModel.add(new Details(modelObject));
         wizardModel.add(new Entitlements(modelObject.getInnerObject()));
         wizardModel.add(new Realms(modelObject.getInnerObject()));
@@ -100,7 +100,7 @@ public class RoleWizardBuilder extends AjaxWizardBuilder<RoleHandler> {
 
         private static final long serialVersionUID = 5514523040031722255L;
 
-        public Details(final RoleHandler modelObject) {
+        public Details(final RoleWrapper modelObject) {
             add(new AjaxTextFieldPanel(
                     "key", "key", new PropertyModel<String>(modelObject.getInnerObject(), "key"), false));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWrapper.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWrapper.java
new file mode 100644
index 0000000..462ffed
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/role/RoleWrapper.java
@@ -0,0 +1,74 @@
+/*
+ * 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.wizards.role;
+
+import java.io.Serializable;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.syncope.client.console.panels.search.SearchClause;
+import org.apache.syncope.client.console.panels.search.SearchUtils;
+import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.RoleTO;
+
+public class RoleWrapper implements Serializable {
+
+    private static final long serialVersionUID = 8058288034211558376L;
+
+    private final RoleTO roleTO;
+
+    private List<SearchClause> dynClauses;
+
+    public RoleWrapper(final RoleTO roleTO) {
+        this.roleTO = roleTO;
+        getDynClauses();
+    }
+
+    public final List<SearchClause> getDynClauses() {
+        if (this.dynClauses == null) {
+            this.dynClauses = SearchUtils.getSearchClauses(this.roleTO.getDynMembershipCond());
+        }
+        return this.dynClauses;
+    }
+
+    public void setDynClauses(final List<SearchClause> dynClauses) {
+        this.dynClauses = dynClauses;
+    }
+
+    public String getDynMembershipCond() {
+        if (CollectionUtils.isEmpty(this.dynClauses)) {
+            return null;
+        } else {
+            return getFIQLString(this.dynClauses, SyncopeClient.getUserSearchConditionBuilder());
+        }
+    }
+
+    private String getFIQLString(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder bld) {
+        return SearchUtils.buildFIQL(clauses, bld);
+    }
+
+    public RoleTO fillDynamicConditions() {
+        this.roleTO.setDynMembershipCond(this.getDynMembershipCond());
+        return this.roleTO;
+    }
+
+    public RoleTO getInnerObject() {
+        return this.roleTO;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/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 12ed32e..c854b05 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
@@ -839,5 +839,50 @@ div#templates {
   clear: both;
 }
 /**
-END -CRONTAB
+END - CRONTAB
+*/
+
+/**
+START - EVENTS
+*/
+.events {
+  display: table-row;
+  width: 990px;
+}
+
+.selectedEvents {
+  display: inline-block;
+  height: 100px;
+  margin: 10px 10px 0 10px;
+  overflow-y: auto;
+}
+
+.eventSelection {
+  display: inline-table;
+  float: right;
+  width: 380px;
+  min-width: 530px;
+}
+
+.eventSelection div#value {
+  height: auto;
+  overflow: hidden;
+}
+
+.eventSelection div#value div#custom {
+  width: auto;
+  overflow: hidden;
+}
+
+.eventSelection div#value div#customActions {
+  width: 85px;
+  float: right;
+}
+
+div#selectionContainer select {
+  width: 585px;
+  min-width: 585px;
+}
+/**
+END - EVENTS
 */

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/console.properties b/client/console/src/main/resources/console.properties
index b4a0b7c..c7733fd 100644
--- a/client/console/src/main/resources/console.properties
+++ b/client/console/src/main/resources/console.properties
@@ -37,6 +37,7 @@ page.realms=org.apache.syncope.client.console.pages.Realms
 page.topology=org.apache.syncope.client.console.topology.Topology
 page.reports=org.apache.syncope.client.console.pages.Reports
 page.workflow=org.apache.syncope.client.console.pages.Workflow
+page.audit=org.apache.syncope.client.console.pages.Audit
 page.logs=org.apache.syncope.client.console.pages.Logs
 page.securityquestions=org.apache.syncope.client.console.pages.SecurityQuestions
 page.types=org.apache.syncope.client.console.pages.Types

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index 6b583cc..dba9d59 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -71,3 +71,4 @@ OrderByLink.CSS.ascending=sorting_asc
 OrderByLink.CSS.descending=sorting_desc
 OrderByLink.CSS.none=sorting
 entitlements=Entitlements
+audit=Audit

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index 0858a0d..597b625 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -70,3 +70,4 @@ OrderByLink.CSS.ascending=sorting_asc
 OrderByLink.CSS.descending=sorting_desc
 OrderByLink.CSS.none=sorting
 entitlements=Entitlement
+audit=Audit

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 8dd50da..a43dfb6 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -70,3 +70,4 @@ OrderByLink.CSS.ascending=sorting_asc
 OrderByLink.CSS.descending=sorting_desc
 OrderByLink.CSS.none=sorting
 entitlements=Entitlement
+audit=Audit

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index 1bb9e32..799a716 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -121,3 +121,4 @@ OrderByLink.CSS.descending=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043
 OrderByLink.CSS.none=\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430
 # entitlements=\u00d0\u009f\u00d0\u00be\u00d0\u00bb\u00d0\u00bd\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d1\u0087\u00d0\u00b8\u00d1\u008f
 entitlements=\u041f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f
+audit=Audit

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/events/EventCategoryPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/events/EventCategoryPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/events/EventCategoryPanel.html
new file mode 100644
index 0000000..2e3915f
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/events/EventCategoryPanel.html
@@ -0,0 +1,53 @@
+<!--
+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://wicket.apache.org">
+  <wicket:panel>
+    <div class="events">
+      <div class="selectedEvents">
+        <span wicket:id="selectedEventsPanel">[selected events panel]</span>
+      </div>
+
+      <div class="eventSelection">
+        <div wicket:id="categoryContainer">
+          <div>
+            <span wicket:id="type">[type]</span>
+          </div>
+          <div>
+            <span wicket:id="category">[category]</span>
+          </div>
+          <div>
+            <span wicket:id="subcategory">[sub-category]</span>
+          </div>
+          <div>
+            <div id="eventLabel">
+              <eventLabel wicket:id="customLabel"/>
+            </div>
+            <div id="value">
+              <div id="customActions" wicket:id="customActions">[actions]</div>
+              <div id="custom" wicket:id="custom">[custom]</div>
+            </div>
+          </div>
+        </div>
+        <div wicket:id="eventsContainer">
+          <span wicket:id="eventsPanel">[events panel]</span>
+        </div>
+      </div>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/events/EventSelectionPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/events/EventSelectionPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/events/EventSelectionPanel.html
new file mode 100644
index 0000000..8baffa9
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/events/EventSelectionPanel.html
@@ -0,0 +1,125 @@
+<!--
+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://wicket.apache.org">
+  <wicket:head>
+    <style>
+      .container {
+        display: block;
+        width: 100%;
+      }
+
+      .eventLabel {
+        font-size: 12px;
+        vertical-align: middle;
+        font-family: Verdana,Tahoma,sans-serif;
+        display: table-cell;
+        width: 300px;
+        height: 20px;
+      }
+
+      .divtableheadereventLabel {
+        font-weight: bold;
+        float: left;
+        margin-left: 5px;
+        display: table-cell;
+        width: 70px;
+      }
+
+      .divtableheadercell {
+        display: inline-table;
+        vertical-align: top;
+        text-align: right;
+        width: 105px;
+        height: 20px;
+      }
+
+      .divtablecheckcolumn {
+        display: table-cell;
+        vertical-align: top;
+        text-align: right;
+        width: 105px;
+      }
+
+      .divtablecheck {
+        width: 105px;
+        height: 20px;
+      }
+
+    </style>
+  </wicket:head>
+  <wicket:panel>
+    <div class="eventSelectionWidzard">
+      <div class="container">
+        <div style="display:inline-table;">
+          <div class="eventLabel">
+            &nbsp;
+          </div>
+          <div style="display: table-cell">
+            <div class="divtableheadercell">
+              <div class="divtableheadereventLabel">
+                <eventLabel wicket:id="successLabel"/>
+              </div>
+              <div style="display: table-cell">
+                <input type="checkbox" wicket:id="successSelector" style="margin-top: 0px;margin-bottom: 0px;"/>
+              </div>
+            </div>
+          </div>
+          <div style="display: table-cell">
+            <div class="divtableheadercell">
+              <div class="divtableheadereventLabel">
+                <eventLabel wicket:id="failureLabel"/>
+              </div>
+              <div style="display: table-cell">
+                <input type="checkbox" wicket:id="failureSelector" style="margin-top: 0px;margin-bottom: 0px;"/>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="container">
+        <div class="eventLabel">
+          <div id="divtablerow-eventLabel" wicket:id="categoryView">
+            <div class="eventLabel">
+              <span wicket:id="subcategory">[subcategory]</span>
+            </div>
+          </div>
+        </div>
+
+        <div id="divtablerow-success" class="divtablecheckcolumn">
+          <span wicket:id="successGroup">
+            <div wicket:id="successView" class="divtablecheck">
+              <div class="divtableheadereventLabel">&nbsp;</div>
+              <input type="checkbox" wicket:id="successCheck"/>
+            </div>
+          </span>
+        </div>
+
+        <div id="divtablerow-failure" class="divtablecheckcolumn">
+          <span wicket:id="failureGroup">
+            <div wicket:id="failureView" class="divtablecheck">
+              <div class="divtableheadereventLabel">&nbsp;</div>
+              <input type="checkbox" wicket:id="failureCheck"/>
+            </div>
+          </span>
+        </div>
+      </div>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/052cf6b1/client/console/src/main/resources/org/apache/syncope/client/console/events/SelectedEventsPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/events/SelectedEventsPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/events/SelectedEventsPanel.html
new file mode 100644
index 0000000..3a9ff63
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/events/SelectedEventsPanel.html
@@ -0,0 +1,25 @@
+<!--
+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://wicket.apache.org">
+  <wicket:panel>
+    <div id="selectionContainer" wicket:id="selectionContainer">
+      <select wicket:id="selectedEvents"></select>
+    </div>
+  </wicket:panel>
+</html>


Mime
View raw message