You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/02/17 17:55:24 UTC
syncope git commit: [SYNCOPE-744][SYNCOPE-750] Configuration
completeness widget
Repository: syncope
Updated Branches:
refs/heads/master 3f0f25623 -> 3147ee761
[SYNCOPE-744][SYNCOPE-750] Configuration completeness widget
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/3147ee76
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/3147ee76
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/3147ee76
Branch: refs/heads/master
Commit: 3147ee7610630d22754eda79f575519a9f05c935
Parents: 3f0f256
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Feb 17 17:55:12 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Feb 17 17:55:12 2016 +0100
----------------------------------------------------------------------
.../client/console/annotations/ExtPage.java | 5 +
.../syncope/client/console/pages/BasePage.java | 72 ++++++-----
.../syncope/client/console/pages/Dashboard.java | 2 +
.../console/widgets/CompletenessWidget.java | 123 +++++++++++++++++++
.../syncope/client/console/pages/Dashboard.html | 15 ++-
.../console/widgets/AnyByRealmWidget.html | 18 ++-
.../console/widgets/CompletenessWidget.html | 46 +++++++
.../widgets/CompletenessWidget.properties | 25 ++++
.../widgets/CompletenessWidget_it.properties | 25 ++++
.../widgets/CompletenessWidget_pt_BR.properties | 25 ++++
.../client/console/widgets/LoadWidget.html | 36 +++---
.../console/widgets/UsersByStatusWidget.html | 18 ++-
.../syncope/common/lib/info/NumbersInfo.java | 36 ++++++
.../apache/syncope/core/logic/SyncopeLogic.java | 41 +++++++
.../client/console/pages/CamelRoutes.java | 2 +-
15 files changed, 412 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/java/org/apache/syncope/client/console/annotations/ExtPage.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/annotations/ExtPage.java b/client/console/src/main/java/org/apache/syncope/client/console/annotations/ExtPage.java
index 18ce9f5..f0ed504 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/annotations/ExtPage.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/annotations/ExtPage.java
@@ -41,6 +41,11 @@ public @interface ExtPage {
String icon() default "fa-circle-o";
/**
+ * @return the entitlement required to access this extension page
+ */
+ String listEntitlement();
+
+ /**
* @return the priority used to determine the display order under the "Extensions" menu item, on the left pane; the
* higher value, the higher rank
*/
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/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 bbf4985..79d6e5a 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
@@ -109,7 +109,7 @@ public class BasePage extends WebPage implements NotificationAwareComponent, IAj
todos.setDefaultModelObject(new UserWorkflowRestClient().getForms().size());
}
MetaDataRoleAuthorizationStrategy.authorize(
- todosContainer, WebPage.RENDER, StandardEntitlement.WORKFLOW_FORM_LIST);
+ todosContainer, WebPage.ENABLE, StandardEntitlement.WORKFLOW_FORM_LIST);
// menu
WebMarkupContainer liContainer = new WebMarkupContainer(getLIContainerId("dashboard"));
@@ -118,19 +118,22 @@ public class BasePage extends WebPage implements NotificationAwareComponent, IAj
liContainer = new WebMarkupContainer(getLIContainerId("realms"));
body.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("realms", Realms.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.REALM_LIST);
+ BookmarkablePageLink<Page> link = BookmarkablePageLinkBuilder.build("realms", Realms.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.REALM_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("topology"));
body.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("topology", Topology.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER,
+ link = BookmarkablePageLinkBuilder.build("topology", Topology.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE,
String.format("%s,%s", StandardEntitlement.CONNECTOR_LIST, StandardEntitlement.RESOURCE_LIST));
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("reports"));
body.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("reports", Reports.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.REPORT_LIST);
+ link = BookmarkablePageLinkBuilder.build("reports", Reports.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.REPORT_LIST);
+ liContainer.add(link);
WebMarkupContainer confLIContainer = new WebMarkupContainer(getLIContainerId("configuration"));
body.add(confLIContainer);
@@ -139,54 +142,55 @@ public class BasePage extends WebPage implements NotificationAwareComponent, IAj
liContainer = new WebMarkupContainer(getLIContainerId("workflow"));
confULContainer.add(liContainer);
- BookmarkablePageLink<Page> workflowLink = BookmarkablePageLinkBuilder.build("workflow", Workflow.class);
- MetaDataRoleAuthorizationStrategy.authorize(
- workflowLink, WebPage.ENABLE, StandardEntitlement.WORKFLOW_DEF_READ);
- liContainer.add(workflowLink);
+ link = BookmarkablePageLinkBuilder.build("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 = BookmarkablePageLinkBuilder.build("logs", Logs.class);
- MetaDataRoleAuthorizationStrategy.authorize(logsLink, WebPage.ENABLE, StandardEntitlement.LOG_LIST);
- liContainer.add(logsLink);
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.LOG_LIST);
+ link = BookmarkablePageLinkBuilder.build("logs", Logs.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.LOG_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("securityquestions"));
confULContainer.add(liContainer);
- BookmarkablePageLink<Page> secuityQuestionsLink =
- BookmarkablePageLinkBuilder.build("securityquestions", SecurityQuestions.class);
- liContainer.add(secuityQuestionsLink);
+ liContainer.add(BookmarkablePageLinkBuilder.build("securityquestions", SecurityQuestions.class));
liContainer = new WebMarkupContainer(getLIContainerId("types"));
confULContainer.add(liContainer);
- BookmarkablePageLink<Page> typesLink = BookmarkablePageLinkBuilder.build("types", Types.class);
- MetaDataRoleAuthorizationStrategy.authorize(typesLink, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
- liContainer.add(typesLink);
+ link = BookmarkablePageLinkBuilder.build("types", Types.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("roles"));
confULContainer.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("roles", Roles.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.ROLE_LIST);
+ link = BookmarkablePageLinkBuilder.build("roles", Roles.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.ROLE_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("policies"));
confULContainer.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("policies", Policies.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.POLICY_LIST);
+ link = BookmarkablePageLinkBuilder.build("policies", Policies.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.POLICY_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("layouts"));
confULContainer.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("layouts", Layouts.class));
+ link = BookmarkablePageLinkBuilder.build("layouts", Layouts.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.CONFIGURATION_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("notifications"));
confULContainer.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("notifications", Notifications.class));
- MetaDataRoleAuthorizationStrategy.authorize(liContainer, WebPage.RENDER, StandardEntitlement.NOTIFICATION_LIST);
+ link = BookmarkablePageLinkBuilder.build("notifications", Notifications.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.NOTIFICATION_LIST);
+ liContainer.add(link);
liContainer = new WebMarkupContainer(getLIContainerId("parameters"));
confULContainer.add(liContainer);
- liContainer.add(BookmarkablePageLinkBuilder.build("parameters", Parameters.class));
- MetaDataRoleAuthorizationStrategy.authorize(
- liContainer, WebPage.RENDER, StandardEntitlement.CONFIGURATION_LIST);
+ link = BookmarkablePageLinkBuilder.build("parameters", Parameters.class);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.CONFIGURATION_LIST);
+ liContainer.add(link);
body.add(new AjaxLink<Void>("collapse") {
@@ -279,12 +283,12 @@ public class BasePage extends WebPage implements NotificationAwareComponent, IAj
});
}
- BookmarkablePageLink<Page> link = new BookmarkablePageLink<>("extPage", item.getModelObject());
- containingLI.add(link);
-
ExtPage ann = item.getModelObject().getAnnotation(ExtPage.class);
+ BookmarkablePageLink<Page> link = new BookmarkablePageLink<>("extPage", item.getModelObject());
link.add(new Label("extPageLabel", ann.label()));
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, ann.listEntitlement());
+ containingLI.add(link);
Label extPageIcon = new Label("extPageIcon");
extPageIcon.add(new AttributeModifier("class", "fa " + ann.icon()));
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/java/org/apache/syncope/client/console/pages/Dashboard.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Dashboard.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Dashboard.java
index 6300d0a..396ec2f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Dashboard.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Dashboard.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.pages;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.widgets.NumberWidget;
import org.apache.syncope.client.console.widgets.AnyByRealmWidget;
+import org.apache.syncope.client.console.widgets.CompletenessWidget;
import org.apache.syncope.client.console.widgets.LoadWidget;
import org.apache.syncope.client.console.widgets.UsersByStatusWidget;
import org.apache.syncope.common.lib.info.NumbersInfo;
@@ -67,6 +68,7 @@ public class Dashboard extends BasePage {
body.add(new NumberWidget("totalAny1OrResources", "bg-aqua", number, label, icon));
body.add(new UsersByStatusWidget("usersByStatus", numbers.getUsersByStatus()));
+ body.add(new CompletenessWidget("completeness", numbers.getConfCompleteness()));
body.add(new AnyByRealmWidget(
"anyByRealm",
numbers.getUsersByRealm(),
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
new file mode 100644
index 0000000..972768f
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/CompletenessWidget.java
@@ -0,0 +1,123 @@
+/*
+ * 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.widgets;
+
+import com.pingunaut.wicket.chartjs.chart.impl.Doughnut;
+import com.pingunaut.wicket.chartjs.core.panel.DoughnutChartPanel;
+import java.util.Map;
+import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
+import org.apache.syncope.client.console.pages.Notifications;
+import org.apache.syncope.client.console.pages.Policies;
+import org.apache.syncope.client.console.pages.Roles;
+import org.apache.syncope.client.console.pages.SecurityQuestions;
+import org.apache.syncope.client.console.pages.Types;
+import org.apache.syncope.client.console.topology.Topology;
+import org.apache.syncope.common.lib.info.NumbersInfo;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.Page;
+import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.model.Model;
+
+public class CompletenessWidget extends AbstractWidget {
+
+ private static final long serialVersionUID = 7667120094526529934L;
+
+ public CompletenessWidget(final String id, final Map<NumbersInfo.ConfItem, Boolean> confCompleteness) {
+ super(id);
+
+ Doughnut doughnut = new Doughnut();
+ doughnut.getOptions().setResponsive(true);
+ doughnut.getOptions().setMaintainAspectRatio(true);
+ doughnut.getOptions().setTooltipTemplate("<%= label %>");
+
+ int done = 0;
+ int todo = 0;
+ for (Map.Entry<NumbersInfo.ConfItem, Boolean> entry : confCompleteness.entrySet()) {
+ if (entry.getValue()) {
+ done += entry.getKey().getScore();
+ } else {
+ todo++;
+ }
+ }
+
+ doughnut.getData().add(
+ new LabeledDoughnutChartData(done, "blue", getString("done")));
+ doughnut.getData().add(
+ new LabeledDoughnutChartData(100 - done, "red", getString("todo") + ": " + todo));
+
+ add(new DoughnutChartPanel("chart", Model.of(doughnut)));
+
+ BookmarkablePageLink<Page> link = BookmarkablePageLinkBuilder.build("topology", Topology.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ add(link);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE,
+ String.format("%s,%s", StandardEntitlement.CONNECTOR_LIST, StandardEntitlement.RESOURCE_LIST));
+ if (confCompleteness.get(NumbersInfo.ConfItem.RESOURCE)
+ || confCompleteness.get(NumbersInfo.ConfItem.SYNC_TASK)) {
+
+ link.setVisible(false);
+ }
+
+ link = BookmarkablePageLinkBuilder.build("policies", Policies.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.POLICY_LIST);
+ add(link);
+ if (confCompleteness.get(NumbersInfo.ConfItem.ACCOUNT_POLICY)
+ || confCompleteness.get(NumbersInfo.ConfItem.PASSWORD_POLICY)) {
+
+ link.setVisible(false);
+ }
+
+ link = BookmarkablePageLinkBuilder.build("notifications", Notifications.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.NOTIFICATION_LIST);
+ add(link);
+ if (confCompleteness.get(NumbersInfo.ConfItem.NOTIFICATION)) {
+ link.setVisible(false);
+ }
+
+ link = BookmarkablePageLinkBuilder.build("types", Types.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.SCHEMA_LIST);
+ add(link);
+ if (confCompleteness.get(NumbersInfo.ConfItem.VIR_SCHEMA)
+ || confCompleteness.get(NumbersInfo.ConfItem.ANY_TYPE)) {
+
+ link.setVisible(false);
+ }
+
+ link = BookmarkablePageLinkBuilder.build("securityquestions", SecurityQuestions.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ add(link);
+ if (confCompleteness.get(NumbersInfo.ConfItem.SECURITY_QUESTION)) {
+ link.setVisible(false);
+ }
+
+ link = BookmarkablePageLinkBuilder.build("roles", Roles.class);
+ link.setOutputMarkupPlaceholderTag(true);
+ MetaDataRoleAuthorizationStrategy.authorize(link, WebPage.ENABLE, StandardEntitlement.ROLE_LIST);
+ add(link);
+ if (confCompleteness.get(NumbersInfo.ConfItem.ROLE)) {
+ link.setVisible(false);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/pages/Dashboard.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Dashboard.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Dashboard.html
index 9a694cb..c6eb390 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/Dashboard.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/Dashboard.html
@@ -34,12 +34,21 @@ under the License.
</div>
<div class="row">
- <span wicket:id="usersByStatus"/>
- <span wicket:id="anyByRealm"/>
+ <div class="col-md-4">
+ <span wicket:id="usersByStatus"/>
+ </div>
+ <div class="col-md-4">
+ <span wicket:id="completeness"/>
+ </div>
+ <div class="col-md-4">
+ <span wicket:id="load"/>
+ </div>
</div>
<div class="row">
- <span wicket:id="load"/>
+ <div class="col-md-6">
+ <span wicket:id="anyByRealm"/>
+ </div>
</div>
</section>
</wicket:extend>
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/AnyByRealmWidget.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/AnyByRealmWidget.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/AnyByRealmWidget.html
index 7a8e1f5..c2f9ce3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/AnyByRealmWidget.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/AnyByRealmWidget.html
@@ -18,18 +18,16 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="col-md-6">
- <div class="box">
- <div class="box-header with-border">
- <h3 class="box-title"><wicket:message key="usersGroupsAndAnyObjectsDistribution"/></h3>
- <div class="box-tools pull-right">
- <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
- </div>
- </div>
- <div class="box-body">
- <div class="chart" wicket:id="chart"/>
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title"><wicket:message key="usersGroupsAndAnyObjectsDistribution"/></h3>
+ <div class="box-tools pull-right">
+ <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
+ <div class="box-body">
+ <div class="chart" wicket:id="chart"/>
+ </div>
</div>
</wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.html
new file mode 100644
index 0000000..c57d40b
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.html
@@ -0,0 +1,46 @@
+<!--
+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="box">
+ <div class="box-header with-border">
+ <h3 class="box-title"><wicket:message key="configurationStatus"/></h3>
+ <div class="box-tools pull-right">
+ <div class="btn-group">
+ <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-wrench"></i>
+ </button>
+ <ul class="dropdown-menu" role="menu">
+ <li><a href="#" wicket:id="topology"><wicket:message key="createResourceOrSyncTask"/></a></li>
+ <li><a href="#" wicket:id="policies"><wicket:message key="createPolicy"/></a></li>
+ <li><a href="#" wicket:id="notifications"><wicket:message key="createNotification"/></a></li>
+ <li><a href="#" wicket:id="types"><wicket:message key="createVirSchemaOrAnyType"/></a></li>
+ <li><a href="#" wicket:id="securityquestions"><wicket:message key="createSecurityQuestion"/></a></li>
+ <li><a href="#" wicket:id="roles"><wicket:message key="createRole"/></a></li>
+ </ul>
+ </div>
+ <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+ </div>
+ </div>
+ <div class="box-body">
+ <div class="chart" wicket:id="chart"/>
+ </div>
+ </div>
+ </wicket:panel>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.properties
new file mode 100644
index 0000000..e40cc59
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget.properties
@@ -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.
+configurationStatus=Configuration Status
+createResourceOrSyncTask=Create Resource or SyncTask
+createPolicy=Create Policy
+createVirSchemaOrAnyType=Create Virtual Schema or AnyType
+createSecurityQuestion=Create Security Question
+createRole=Create Role
+createNotification=Create Notification
+done=Done
+todo=To do
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_it.properties
new file mode 100644
index 0000000..641d93e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_it.properties
@@ -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.
+configurationStatus=Stato Configurazione
+createResourceOrSyncTask=Crea Risorsa o SyncTask
+createPolicy=Crea Politica
+createVirSchemaOrAnyType=Crea Virtual Schema o AnyType
+createSecurityQuestion=Crea Domanda di Sicurezza
+createRole=Crea Ruolo
+createNotification=Crea Notifica
+done=Fatto
+todo=Da fare
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_pt_BR.properties
new file mode 100644
index 0000000..d921be0
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/CompletenessWidget_pt_BR.properties
@@ -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.
+configurationStatus=Estado de configura\u00e7\u00e3o
+createResourceOrSyncTask=Criar recursos ou SyncTask
+createPolicy=Criar Politica
+createVirSchemaOrAnyType=Criar Virtual Schema ou AnyType
+createSecurityQuestion=Criar Perguntas de Seguran\u00e7a
+createRole=Criar Fun\u00e7\u00e3o
+createNotification=Criar Notifica\u00e7\u00e3o
+done=Feito
+todo=Fazer
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/LoadWidget.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/LoadWidget.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/LoadWidget.html
index 82aff57..d6a4260 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/LoadWidget.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/LoadWidget.html
@@ -18,27 +18,25 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="col-md-6">
- <div class="box">
- <div class="box-header with-border">
- <h3 class="box-title"><wicket:message key="systemLoad"/></h3>
- <div class="box-tools pull-right">
- <div class="btn-group">
- <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
- <i class="fa fa-info"></i>
- </button>
- <ul class="dropdown-menu" role="menu">
- <li><a href="#"><span wicket:id="hostname"/></a></li>
- <li><a href="#"><span wicket:id="os"/></a></li>
- <li><a href="#"><span wicket:id="jvm"/></a></li>
- </ul>
- </div>
- <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title"><wicket:message key="systemLoad"/></h3>
+ <div class="box-tools pull-right">
+ <div class="btn-group">
+ <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-info"></i>
+ </button>
+ <ul class="dropdown-menu" role="menu">
+ <li><a href="#"><span wicket:id="hostname"/></a></li>
+ <li><a href="#"><span wicket:id="os"/></a></li>
+ <li><a href="#"><span wicket:id="jvm"/></a></li>
+ </ul>
</div>
+ <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
- <div class="box-body">
- <div class="chart" wicket:id="chart"/>
- </div>
+ </div>
+ <div class="box-body">
+ <div class="chart" wicket:id="chart"/>
</div>
</div>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/client/console/src/main/resources/org/apache/syncope/client/console/widgets/UsersByStatusWidget.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/UsersByStatusWidget.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/UsersByStatusWidget.html
index 0cdfd1f..ce24a16 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/UsersByStatusWidget.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/UsersByStatusWidget.html
@@ -18,18 +18,16 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="col-md-6">
- <div class="box">
- <div class="box-header with-border">
- <h3 class="box-title"><wicket:message key="userStatus"/></h3>
- <div class="box-tools pull-right">
- <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
- </div>
- </div>
- <div class="box-body">
- <div class="chart" wicket:id="chart"/>
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title"><wicket:message key="userStatus"/></h3>
+ <div class="box-tools pull-right">
+ <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
+ <div class="box-body">
+ <div class="chart" wicket:id="chart"/>
+ </div>
</div>
</wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/common/lib/src/main/java/org/apache/syncope/common/lib/info/NumbersInfo.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/info/NumbersInfo.java b/common/lib/src/main/java/org/apache/syncope/common/lib/info/NumbersInfo.java
index a831e76..293bb55 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/info/NumbersInfo.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/info/NumbersInfo.java
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.HashMap;
import java.util.Map;
+import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -34,6 +35,32 @@ public class NumbersInfo extends AbstractBaseBean {
private static final long serialVersionUID = 7691187370598649583L;
+ @XmlEnum
+ @XmlType(name = "confItem")
+ public enum ConfItem {
+
+ RESOURCE(20),
+ ACCOUNT_POLICY(10),
+ PASSWORD_POLICY(10),
+ NOTIFICATION(8),
+ SYNC_TASK(10),
+ VIR_SCHEMA(10),
+ ANY_TYPE(5),
+ SECURITY_QUESTION(12),
+ ROLE(15);
+
+ private final int score;
+
+ ConfItem(final int score) {
+ this.score = score;
+ }
+
+ public int getScore() {
+ return score;
+ }
+
+ }
+
private int totalUsers;
@XmlJavaTypeAdapter(XmlGenericMapAdapter.class)
@@ -70,6 +97,10 @@ public class NumbersInfo extends AbstractBaseBean {
private int totalRoles;
+ @XmlJavaTypeAdapter(XmlGenericMapAdapter.class)
+ @JsonIgnore
+ private final Map<ConfItem, Boolean> confCompleteness = new HashMap<>();
+
public int getTotalUsers() {
return totalUsers;
}
@@ -159,4 +190,9 @@ public class NumbersInfo extends AbstractBaseBean {
return any2ByRealm;
}
+ @JsonProperty
+ public Map<ConfItem, Boolean> getConfCompleteness() {
+ return confCompleteness;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index f15167d..f72d6e9 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -33,6 +33,8 @@ import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.syncope.common.lib.info.NumbersInfo;
import org.apache.syncope.common.lib.info.SystemInfo;
import org.apache.syncope.common.lib.info.PlatformInfo;
+import org.apache.syncope.common.lib.types.PolicyType;
+import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.core.misc.security.PasswordGenerator;
import org.apache.syncope.core.persistence.api.ImplementationLookup;
import org.apache.syncope.core.persistence.api.ImplementationLookup.Type;
@@ -40,8 +42,13 @@ import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
+import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
+import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
import org.apache.syncope.core.persistence.api.dao.RoleDAO;
+import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
+import org.apache.syncope.core.persistence.api.dao.TaskDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
+import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.provisioning.api.AnyObjectProvisioningManager;
import org.apache.syncope.core.provisioning.api.ConnIdBundleManager;
@@ -80,9 +87,24 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
private ExternalResourceDAO resourceDAO;
@Autowired
+ private PolicyDAO policyDAO;
+
+ @Autowired
+ private NotificationDAO notificationDAO;
+
+ @Autowired
+ private TaskDAO taskDAO;
+
+ @Autowired
+ private VirSchemaDAO virSchemaDAO;
+
+ @Autowired
private RoleDAO roleDAO;
@Autowired
+ private SecurityQuestionDAO securityQuestionDAO;
+
+ @Autowired
private ConfDAO confDAO;
@Resource(name = "version")
@@ -254,6 +276,25 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
numbersInfo.setTotalRoles(roleDAO.count());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.RESOURCE, numbersInfo.getTotalResources() > 0);
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.ACCOUNT_POLICY, !policyDAO.find(PolicyType.ACCOUNT).isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.PASSWORD_POLICY, !policyDAO.find(PolicyType.PASSWORD).isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.NOTIFICATION, !notificationDAO.findAll().isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.SYNC_TASK, !taskDAO.findAll(TaskType.SYNCHRONIZATION).isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.VIR_SCHEMA, !virSchemaDAO.findAll().isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.ANY_TYPE, !anyObjectNumbers.isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.SECURITY_QUESTION, !securityQuestionDAO.findAll().isEmpty());
+ numbersInfo.getConfCompleteness().put(
+ NumbersInfo.ConfItem.ROLE, numbersInfo.getTotalRoles() > 0);
+
return numbersInfo;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/3147ee76/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRoutes.java
----------------------------------------------------------------------
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRoutes.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRoutes.java
index e8f5e26..b53d162 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRoutes.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRoutes.java
@@ -34,7 +34,7 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-@ExtPage(label = "Camel Routes", icon = "fa-road", priority = 100)
+@ExtPage(label = "Camel Routes", icon = "fa-road", listEntitlement = CamelEntitlement.ROUTE_LIST, priority = 100)
public class CamelRoutes extends AbstractExtPage {
private static final long serialVersionUID = 1965360932245590233L;