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 2012/02/27 12:46:51 UTC
svn commit: r1294122 - in /incubator/syncope/trunk/core/src:
main/java/org/syncope/core/persistence/beans/
main/java/org/syncope/core/rest/data/ main/resources/META-INF/
test/java/org/syncope/core/rest/ test/resources/
Author: ilgrosso
Date: Mon Feb 27 11:46:50 2012
New Revision: 1294122
URL: http://svn.apache.org/viewvc?rev=1294122&view=rev
Log:
[SYNCOPE-8] Adding an explicit ReportletConfInstance entity in order to avoid @ElementCollection / CLOB confusion with other DBMS than H2
Added:
incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java (with props)
Modified:
incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Policy.java
incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Report.java
incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportExec.java
incubator/syncope/trunk/core/src/main/java/org/syncope/core/rest/data/ReportDataBinder.java
incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml
incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml.oracle
incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/ReportTestITCase.java
incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/TaskTestITCase.java
incubator/syncope/trunk/core/src/test/resources/content.xml
Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Policy.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Policy.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Policy.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Policy.java Mon Feb 27 11:46:50 2012
@@ -24,8 +24,8 @@ import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.validation.constraints.NotNull;
-import org.syncope.core.persistence.validation.entity.PolicyCheck;
import org.syncope.client.util.XMLSerializer;
+import org.syncope.core.persistence.validation.entity.PolicyCheck;
import org.syncope.types.AbstractPolicySpec;
import org.syncope.types.PolicyType;
Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Report.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Report.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Report.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/Report.java Mon Feb 27 11:46:50 2012
@@ -22,17 +22,12 @@ import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
-import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.Lob;
import javax.persistence.OneToMany;
import org.syncope.client.report.ReportletConf;
import org.syncope.core.persistence.validation.entity.ReportCheck;
-import org.syncope.client.util.XMLSerializer;
@Entity
@ReportCheck
@@ -41,16 +36,14 @@ public class Report extends AbstractBase
private static final long serialVersionUID = -587652654964285834L;
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String name;
- @Lob
- @ElementCollection(fetch = FetchType.EAGER)
- @Column(name = "reportletConfs", columnDefinition = "CLOB")
- private List<String> reportletConfs;
+ @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,
+ fetch = FetchType.EAGER, mappedBy = "report")
+ private List<ReportletConfInstance> reportletConfs;
private String cronExpression;
@@ -61,7 +54,7 @@ public class Report extends AbstractBase
public Report() {
super();
- reportletConfs = new ArrayList<String>();
+ reportletConfs = new ArrayList<ReportletConfInstance>();
executions = new ArrayList<ReportExec>();
}
@@ -102,9 +95,11 @@ public class Report extends AbstractBase
return false;
}
- String xmlReportlet = XMLSerializer.serialize(reportletConf);
- return !reportletConfs.contains(xmlReportlet)
- && reportletConfs.add(xmlReportlet);
+ ReportletConfInstance instance = new ReportletConfInstance();
+ instance.setReport(this);
+ instance.setInstance(reportletConf);
+
+ return reportletConfs.add(instance);
}
public boolean removeReportletConf(ReportletConf reportletConf) {
@@ -112,22 +107,28 @@ public class Report extends AbstractBase
return false;
}
- String xmlReportlet = XMLSerializer.serialize(reportletConf);
- return reportletConfs.remove(xmlReportlet);
+ ReportletConfInstance found = null;
+ for (ReportletConfInstance instance : reportletConfs) {
+ if (reportletConf.equals(instance.getInstance())) {
+ found = instance;
+ }
+ }
+
+ return found == null ? false : reportletConfs.remove(found);
}
public List<ReportletConf> getReportletConfs() {
List<ReportletConf> result =
new ArrayList<ReportletConf>(reportletConfs.size());
- for (String xmlReportletConf : reportletConfs) {
- result.add(
- XMLSerializer.<ReportletConf>deserialize(xmlReportletConf));
+
+ for (ReportletConfInstance instance : reportletConfs) {
+ result.add(instance.getInstance());
}
return result;
}
- public void setReportlets(List<ReportletConf> reportletConfs) {
+ public void setReportletConfs(final List<ReportletConf> reportletConfs) {
this.reportletConfs.clear();
if (reportletConfs != null && !reportletConfs.isEmpty()) {
for (ReportletConf reportlet : reportletConfs) {
Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportExec.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportExec.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportExec.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportExec.java Mon Feb 27 11:46:50 2012
@@ -21,8 +21,6 @@ package org.syncope.core.persistence.bea
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.syncope.types.ReportExecStatus;
@@ -33,7 +31,6 @@ public class ReportExec extends Abstract
private static final long serialVersionUID = -6178274296037547769L;
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
Added: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java?rev=1294122&view=auto
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java (added)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java Mon Feb 27 11:46:50 2012
@@ -0,0 +1,65 @@
+/*
+ * 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.syncope.core.persistence.beans;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import org.syncope.client.report.ReportletConf;
+import org.syncope.client.util.XMLSerializer;
+
+@Entity
+public class ReportletConfInstance extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -2436055132955674610L;
+
+ @Id
+ private Long id;
+
+ @Lob
+ private String serializedInstance;
+
+ @ManyToOne
+ private Report report;
+
+ public Long getId() {
+ return id;
+ }
+
+ public Report getReport() {
+ return report;
+ }
+
+ public void setReport(final Report report) {
+ this.report = report;
+ }
+
+ public ReportletConf getInstance() {
+ return serializedInstance == null
+ ? null
+ : XMLSerializer.<ReportletConf>deserialize(serializedInstance);
+ }
+
+ public void setInstance(final ReportletConf instance) {
+ serializedInstance = instance == null
+ ? null
+ : XMLSerializer.serialize(instance);
+ }
+}
Propchange: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: incubator/syncope/trunk/core/src/main/java/org/syncope/core/persistence/beans/ReportletConfInstance.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/syncope/trunk/core/src/main/java/org/syncope/core/rest/data/ReportDataBinder.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/syncope/core/rest/data/ReportDataBinder.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/syncope/core/rest/data/ReportDataBinder.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/syncope/core/rest/data/ReportDataBinder.java Mon Feb 27 11:46:50 2012
@@ -58,7 +58,7 @@ public class ReportDataBinder {
public void getReport(final Report report, final ReportTO reportTO) {
BeanUtils.copyProperties(reportTO, report, IGNORE_REPORT_PROPERTIES);
- report.getReportletConfs().clear();
+ report.setReportletConfs(null);
for (ReportletConf conf : reportTO.getReportletConfs()) {
report.addReportletConf(conf);
}
Modified: incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml (original)
+++ incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml Mon Feb 27 11:46:50 2012
@@ -13,11 +13,11 @@
limitations under the License.
-->
<entity-mappings
- xmlns="http://java.sun.com/xml/ns/persistence/orm"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
+ xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
- version="2.0">
+ version="2.0">
<table-generator name="SEQ_UAttrValue" pk-column-value="SEQ_UAttrValue" initial-value="100"/>
<table-generator name="SEQ_RAttrValue" pk-column-value="SEQ_RAttrValue" initial-value="100"/>
@@ -227,4 +227,29 @@
</id>
</attributes>
</entity>
+
+ <entity class="org.syncope.core.persistence.beans.Report">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_Report" strategy="TABLE"/>
+ <table-generator name="SEQ_Report" pk-column-value="SEQ_Report" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
+ <entity class="org.syncope.core.persistence.beans.ReportExec">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_ReportExec" strategy="TABLE"/>
+ <table-generator name="SEQ_ReportExec" pk-column-value="SEQ_ReportExec" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
+ <entity class="org.syncope.core.persistence.beans.ReportletConfInstance">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_ReportletConfInstance" strategy="TABLE"/>
+ <table-generator name="SEQ_ReportletConfInstance" pk-column-value="SEQ_ReportletConfInstance" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
</entity-mappings>
Modified: incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml.oracle
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml.oracle?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml.oracle (original)
+++ incubator/syncope/trunk/core/src/main/resources/META-INF/orm.xml.oracle Mon Feb 27 11:46:50 2012
@@ -13,11 +13,11 @@
limitations under the License.
-->
<entity-mappings
- xmlns="http://java.sun.com/xml/ns/persistence/orm"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
+ xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
- version="2.0">
+ version="2.0">
<table-generator name="SEQ_UAttrValue" pk-column-value="SEQ_UAttrValue" initial-value="100"/>
<table-generator name="SEQ_RAttrValue" pk-column-value="SEQ_RAttrValue" initial-value="100"/>
@@ -191,4 +191,29 @@
</id>
</attributes>
</entity>
+
+ <entity class="org.syncope.core.persistence.beans.Report">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_Report" strategy="TABLE"/>
+ <table-generator name="SEQ_Report" pk-column-value="SEQ_Report" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
+ <entity class="org.syncope.core.persistence.beans.ReportExec">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_ReportExec" strategy="TABLE"/>
+ <table-generator name="SEQ_ReportExec" pk-column-value="SEQ_ReportExec" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
+ <entity class="org.syncope.core.persistence.beans.ReportletConfInstance">
+ <attributes>
+ <id name="id">
+ <generated-value generator="SEQ_ReportletConfInstance" strategy="TABLE"/>
+ <table-generator name="SEQ_ReportletConfInstance" pk-column-value="SEQ_ReportletConfInstance" initial-value="100"/>
+ </id>
+ </attributes>
+ </entity>
</entity-mappings>
Modified: incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/ReportTestITCase.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/ReportTestITCase.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/ReportTestITCase.java (original)
+++ incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/ReportTestITCase.java Mon Feb 27 11:46:50 2012
@@ -176,7 +176,7 @@ public class ReportTestITCase extends Ab
assertNotNull(execution);
int i = 0;
- int maxit = 20;
+ int maxit = 50;
do {
try {
Thread.sleep(1000);
Modified: incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/TaskTestITCase.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/TaskTestITCase.java?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/TaskTestITCase.java (original)
+++ incubator/syncope/trunk/core/src/test/java/org/syncope/core/rest/TaskTestITCase.java Mon Feb 27 11:46:50 2012
@@ -323,7 +323,7 @@ public class TaskTestITCase extends Abst
assertEquals("JOB_FIRED", execution.getStatus());
int i = 0;
- int maxit = 20;
+ int maxit = 50;
// wait for sync completion (executions incremented)
do {
Modified: incubator/syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/test/resources/content.xml?rev=1294122&r1=1294121&r2=1294122&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/test/resources/content.xml (original)
+++ incubator/syncope/trunk/core/src/test/resources/content.xml Mon Feb 27 11:46:50 2012
@@ -600,6 +600,6 @@ under the License.
<Notification_events Notification_id="101" events="unexisting2"/>
<Report id="1" name="test"/>
- <Report_reportletConfs Report_id="1" reportletConfs="%3Corg.syncope.client.report.UserReportletConf%3E%0A++%3Cname%3EtestUserReportlet%3C%2Fname%3E%0A++%3Cattrs%3E%0A++++%3Cstring%3Efullname%3C%2Fstring%3E%0A++++%3Cstring%3Egender%3C%2Fstring%3E%0A++%3C%2Fattrs%3E%0A++%3CderAttrs+class%3D%22singleton-list%22%3E%0A++++%3Cstring%3Ecn%3C%2Fstring%3E%0A++%3C%2FderAttrs%3E%0A++%3CvirAttrs+class%3D%22singleton-list%22%3E%0A++++%3Cstring%3Evirtualdata%3C%2Fstring%3E%0A++%3C%2FvirAttrs%3E%0A++%3Cfeatures+class%3D%22java.util.Arrays%24ArrayList%22%3E%0A++++%3Ca+class%3D%22org.syncope.client.report.UserReportletConf%24Feature-array%22%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eid%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eusername%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EworkflowId%3C%2Fo
rg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Estatus%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EcreationDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3ElastLoginDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EchangePwdDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EpasswordHistorySize%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EfailedLoginCount%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Ememberships%3C%2Forg.
syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eresources%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++%3C%2Fa%3E%0A++%3C%2Ffeatures%3E%0A%3C%2Forg.syncope.client.report.UserReportletConf%3E"/>
+ <ReportletConfInstance id="1" Report_id="1" serializedInstance="%3Corg.syncope.client.report.UserReportletConf%3E%0A++%3Cname%3EtestUserReportlet%3C%2Fname%3E%0A++%3Cattrs%3E%0A++++%3Cstring%3Efullname%3C%2Fstring%3E%0A++++%3Cstring%3Egender%3C%2Fstring%3E%0A++%3C%2Fattrs%3E%0A++%3CderAttrs+class%3D%22singleton-list%22%3E%0A++++%3Cstring%3Ecn%3C%2Fstring%3E%0A++%3C%2FderAttrs%3E%0A++%3CvirAttrs+class%3D%22singleton-list%22%3E%0A++++%3Cstring%3Evirtualdata%3C%2Fstring%3E%0A++%3C%2FvirAttrs%3E%0A++%3Cfeatures+class%3D%22java.util.Arrays%24ArrayList%22%3E%0A++++%3Ca+class%3D%22org.syncope.client.report.UserReportletConf%24Feature-array%22%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eid%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eusername%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eworkfl
owId%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Estatus%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EcreationDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3ElastLoginDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EchangePwdDate%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EpasswordHistorySize%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3EfailedLoginCount%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Emembership
s%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++++%3Corg.syncope.client.report.UserReportletConf_-Feature%3Eresources%3C%2Forg.syncope.client.report.UserReportletConf_-Feature%3E%0A++++%3C%2Fa%3E%0A++%3C%2Ffeatures%3E%0A%3C%2Forg.syncope.client.report.UserReportletConf%3E"/>
<ReportExec Report_id="1" id="1" status="SUCCESS" startDate="2012-02-26 15:40:04" endDate="2012-02-26 15:41:04"/>
</dataset>