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 2015/02/05 17:01:19 UTC
[48/52] syncope git commit: [SYNCOPE-620] Console working,
Selenium IT in
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.html
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.html b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.html
index a308eef..b1729c1 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.html
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.html
@@ -29,18 +29,18 @@ under the License.
<span wicket:id="templates">[templates]</span>
</div>
- <div id="attrs">
+ <div id="plainAttrs">
<div id="formtable">
<div class="tablerow">
<div class="tablecolumn_label short_dynamicsize">
- <wicket:message key="inheritAttrs"/>
+ <wicket:message key="inheritPlainAttrs"/>
</div>
<div class="tablecolumn_field medium_dynamicsize">
- <span wicket:id="inheritAttrs" />
+ <span wicket:id="inheritPlainAttrs" />
</div>
</div>
- <span wicket:id="attrs">[role attributes]</span>
+ <span wicket:id="plainAttrs">[role attributes]</span>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.properties
index 38b4584..86aace6 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel.properties
@@ -46,6 +46,6 @@ virAttrValue=Virtual value
addAttributeBtn=Add
-inheritAttrs=Inherit attributes
+inheritPlainAttrs=Inherit plain attributes
inheritDerAttrs=Inherit derived attributes
inheritVirAttrs=Inherit virtual attributes
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_it.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_it.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_it.properties
index 8fc1ccf..068abdc 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_it.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_it.properties
@@ -46,7 +46,7 @@ virAttrValue=Valore virtuale
addAttributeBtn=Aggiungi
-inheritAttrs=Eredita attributi
+inheritPlainAttrs=Eredita attributi normali
inheritDerAttrs=Eredita attributi derivati
inheritVirAttrs=Eredita attributi virtuali
firstEntitlementsList=Entitlement ruolo
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_pt_BR.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_pt_BR.properties
index bf48ab6..e480811 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_pt_BR.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RolePanel_pt_BR.properties
@@ -35,6 +35,6 @@ virAttrValue=Valor Virtual
addAttributeBtn=Adicionar
-inheritAttrs=Atributos Herdados
+inheritPlainAttrs=Atributos Herdados Normal
inheritDerAttrs=Atributos Herdados Derivados
inheritVirAttrs=Atributos Virtuais Herdados
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.html
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.html b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.html
index 113fc12..226c172 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.html
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.html
@@ -20,10 +20,10 @@ under the License.
<wicket:panel>
<div style="float:left; width:70%;">
<script type="text/javascript">
- $(document).ready(function() {
+ $(document).ready(function () {
$("div form #tabs").tabs();
});
- $(document).ready(function() {
+ $(document).ready(function () {
$("div form #tabs #templates").tabs();
});
</script>
@@ -38,7 +38,7 @@ under the License.
<ul>
<li><a href="#details"><span><wicket:message key="details"/></span></a></li>
<li><a href="#templates"><span><wicket:message key="templates"/></span></a></li>
- <li><a href="#attrs"><span><wicket:message key="attrs"/></span></a></li>
+ <li><a href="#plainAttrs"><span><wicket:message key="plainAttrs"/></span></a></li>
<li><a href="#derAttrs"><span><wicket:message key="derAttrs"/></span></a></li>
<li><a href="#virAttrs"><span><wicket:message key="virAttrs"/></span></a></li>
<li><a href="#resources"><span><wicket:message key="resources"/></span></a></li>
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.properties
index 605c289..b49cf51 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel.properties
@@ -16,7 +16,7 @@
# under the License.
title=Role
details=Details
-attrs=Attributes
+plainAttrs=Plain attributes
derAttrs=Derived attributes
virAttrs=Virtual attributes
resources=Resources
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_it.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_it.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_it.properties
index 26ef8a5..727fe69 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_it.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_it.properties
@@ -16,7 +16,7 @@
# under the License.
title=Ruolo
details=Dettagli
-attrs=Attributi
+plainAttrs=Attributi normali
derAttrs=Attributi derivati
virAttrs=Attributi virtuali
resources=Risorse
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_pt_BR.properties b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_pt_BR.properties
index 2ecc202..f01ecac 100644
--- a/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_pt_BR.properties
+++ b/syncope620/client/console/src/main/resources/org/apache/syncope/client/console/panels/RoleTabPanel_pt_BR.properties
@@ -16,7 +16,7 @@
# under the License.
title=Fun\u00e7\u00e3o
details=Detalhes
-attrs=Atributos
+plainAttrs=Atributos Normal
derAttrs=Atributos Derivados
virAttrs=Atributos Virtuais
resources=Recursos
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
index ad5d322..1c53db6 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/AttributableOperations.java
@@ -358,14 +358,14 @@ public final class AttributableOperations {
}
// 5. templates
- Set<String> updatedTemplates = new HashSet<>(updated.getRAttrTemplates());
- Set<String> originalTemplates = new HashSet<>(original.getRAttrTemplates());
+ Set<String> updatedTemplates = new HashSet<>(updated.getRPlainAttrTemplates());
+ Set<String> originalTemplates = new HashSet<>(original.getRPlainAttrTemplates());
if (updatedTemplates.equals(originalTemplates)) {
result.setModRAttrTemplates(false);
result.getRPlainAttrTemplates().clear();
} else {
result.setModRAttrTemplates(true);
- result.getRPlainAttrTemplates().addAll(updated.getRAttrTemplates());
+ result.getRPlainAttrTemplates().addAll(updated.getRPlainAttrTemplates());
}
updatedTemplates = new HashSet<>(updated.getRDerAttrTemplates());
originalTemplates = new HashSet<>(original.getRDerAttrTemplates());
@@ -385,14 +385,14 @@ public final class AttributableOperations {
result.setModRVirAttrTemplates(true);
result.getRVirAttrTemplates().addAll(updated.getRVirAttrTemplates());
}
- updatedTemplates = new HashSet<>(updated.getMAttrTemplates());
- originalTemplates = new HashSet<>(original.getMAttrTemplates());
+ updatedTemplates = new HashSet<>(updated.getMPlainAttrTemplates());
+ originalTemplates = new HashSet<>(original.getMPlainAttrTemplates());
if (updatedTemplates.equals(originalTemplates)) {
result.setModMAttrTemplates(false);
result.getMPlainAttrTemplates().clear();
} else {
result.setModMAttrTemplates(true);
- result.getMPlainAttrTemplates().addAll(updated.getMAttrTemplates());
+ result.getMPlainAttrTemplates().addAll(updated.getMPlainAttrTemplates());
}
updatedTemplates = new HashSet<>(updated.getMDerAttrTemplates());
originalTemplates = new HashSet<>(original.getMDerAttrTemplates());
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
index e91252d..9f73d3d 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/RoleReportletConf.java
@@ -53,7 +53,7 @@ public class RoleReportletConf extends AbstractReportletConf {
private String matchingCond;
@FormAttributeField(schema = IntMappingType.RolePlainSchema)
- private final List<String> attrs = new ArrayList<>();
+ private final List<String> plainAttrs = new ArrayList<>();
@FormAttributeField(schema = IntMappingType.RoleDerivedSchema)
private final List<String> derAttrs = new ArrayList<>();
@@ -75,7 +75,7 @@ public class RoleReportletConf extends AbstractReportletConf {
@XmlElement(name = "plainAttribute")
@JsonProperty("plainAttributes")
public List<String> getPlainAttrs() {
- return attrs;
+ return plainAttrs;
}
@XmlElementWrapper(name = "derivedAttributes")
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
index c82052c..78735eb 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java
@@ -58,7 +58,7 @@ public class UserReportletConf extends AbstractReportletConf {
private String matchingCond;
@FormAttributeField(schema = IntMappingType.UserPlainSchema)
- private final List<String> attrs = new ArrayList<>();
+ private final List<String> plainAttrs = new ArrayList<>();
@FormAttributeField(schema = IntMappingType.UserDerivedSchema)
private final List<String> derAttrs = new ArrayList<>();
@@ -80,7 +80,7 @@ public class UserReportletConf extends AbstractReportletConf {
@XmlElement(name = "plainAttribute")
@JsonProperty("plainAttributes")
public List<String> getPlainAttrs() {
- return attrs;
+ return plainAttrs;
}
@XmlElementWrapper(name = "derivedAttributes")
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
index 5a006f5..4945cca 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
@@ -20,8 +20,10 @@ package org.apache.syncope.common.lib.search;
import java.lang.reflect.Field;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.syncope.common.lib.to.AbstractAttributableTO;
import org.apache.syncope.common.lib.to.RoleTO;
@@ -31,9 +33,7 @@ import org.apache.syncope.common.lib.types.SubjectType;
public class SearchableFields {
protected static final String[] ATTRIBUTES_NOTINCLUDED = {
- "plainAttrs", "derAttrs", "virAttrs",
- "serialVersionUID", "memberships", "entitlements", "resources", "password",
- "propagationTOs", "propagationStatusMap"
+ "serialVersionUID", "password"
};
public static final List<String> get(final SubjectType subjectType) {
@@ -49,7 +49,10 @@ public class SearchableFields {
Class<?> clazz = attributableRef;
while (clazz != null && clazz != Object.class) {
for (Field field : clazz.getDeclaredFields()) {
- if (!ArrayUtils.contains(ATTRIBUTES_NOTINCLUDED, field.getName())) {
+ if (!ArrayUtils.contains(ATTRIBUTES_NOTINCLUDED, field.getName())
+ && !Collection.class.isAssignableFrom(field.getType())
+ && !Map.class.isAssignableFrom(field.getType())) {
+
fieldNames.add(field.getName());
}
}
@@ -58,7 +61,6 @@ public class SearchableFields {
Collections.reverse(fieldNames);
return fieldNames;
-
}
private SearchableFields() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSubjectTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSubjectTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSubjectTO.java
index 5c9fa42..a2e1b3a 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSubjectTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSubjectTO.java
@@ -45,7 +45,7 @@ public abstract class AbstractSubjectTO extends AbstractAttributableTO {
public boolean removePropagationTO(final String resource) {
if (resource != null && getPropagationStatusTOs().isEmpty()) {
- final List<PropagationStatus> toBeRemoved = new ArrayList<PropagationStatus>();
+ final List<PropagationStatus> toBeRemoved = new ArrayList<>();
for (PropagationStatus propagationTO : getPropagationStatusTOs()) {
if (resource.equals(propagationTO.getResource())) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
index b921e53..51feffa 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java
@@ -37,7 +37,7 @@ public class NotificationTO extends AbstractBaseBean {
private Long key;
- private List<String> events = new ArrayList<>();
+ private final List<String> events = new ArrayList<>();
private String userAbout;
@@ -45,7 +45,7 @@ public class NotificationTO extends AbstractBaseBean {
private String recipients;
- private List<String> staticRecipients = new ArrayList<>();
+ private final List<String> staticRecipients = new ArrayList<>();
private IntMappingType recipientAttrType;
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
index 2a353cf..7f0f0af 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/to/RoleTO.java
@@ -59,13 +59,13 @@ public class RoleTO extends AbstractSubjectTO {
private final List<String> entitlements = new ArrayList<>();
- private List<String> rAttrTemplates = new ArrayList<>();
+ private List<String> rPlainAttrTemplates = new ArrayList<>();
private List<String> rDerAttrTemplates = new ArrayList<>();
private List<String> rVirAttrTemplates = new ArrayList<>();
- private List<String> mAttrTemplates = new ArrayList<>();
+ private List<String> mPlainAttrTemplates = new ArrayList<>();
private List<String> mDerAttrTemplates = new ArrayList<>();
@@ -154,11 +154,11 @@ public class RoleTO extends AbstractSubjectTO {
return entitlements;
}
- @XmlElementWrapper(name = "rAttrTemplates")
- @XmlElement(name = "rAttrTemplate")
- @JsonProperty("rAttrTemplates")
- public List<String> getRAttrTemplates() {
- return rAttrTemplates;
+ @XmlElementWrapper(name = "rPlainAttrTemplates")
+ @XmlElement(name = "rPlainAttrTemplate")
+ @JsonProperty("rPlainAttrTemplates")
+ public List<String> getRPlainAttrTemplates() {
+ return rPlainAttrTemplates;
}
@XmlElementWrapper(name = "rDerAttrTemplates")
@@ -175,11 +175,11 @@ public class RoleTO extends AbstractSubjectTO {
return rVirAttrTemplates;
}
- @XmlElementWrapper(name = "mAttrTemplates")
- @XmlElement(name = "mAttrTemplate")
- @JsonProperty("mAttrTemplates")
- public List<String> getMAttrTemplates() {
- return mAttrTemplates;
+ @XmlElementWrapper(name = "mPlainAttrTemplates")
+ @XmlElement(name = "mPlainAttrTemplate")
+ @JsonProperty("mPlainAttrTemplates")
+ public List<String> getMPlainAttrTemplates() {
+ return mPlainAttrTemplates;
}
@XmlElementWrapper(name = "mDerAttrTemplates")
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/PolicySpec.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/PolicySpec.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/PolicySpec.java
index cac7c1c..7de0e48 100644
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/PolicySpec.java
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/types/PolicySpec.java
@@ -18,6 +18,8 @@
*/
package org.apache.syncope.common.lib.types;
-public interface PolicySpec {
+import java.io.Serializable;
+
+public interface PolicySpec extends Serializable {
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectId.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectId.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectId.java
deleted file mode 100644
index d61f1d9..0000000
--- a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectId.java
+++ /dev/null
@@ -1,25 +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.common.lib.wrap;
-
-public class SubjectId extends AbstractWrappable<Long> {
-
- private static final long serialVersionUID = -8664228651057889297L;
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
----------------------------------------------------------------------
diff --git a/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
new file mode 100644
index 0000000..930cf35
--- /dev/null
+++ b/syncope620/common/lib/src/main/java/org/apache/syncope/common/lib/wrap/SubjectKey.java
@@ -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.
+ */
+package org.apache.syncope.common.lib.wrap;
+
+public class SubjectKey extends AbstractWrappable<Long> {
+
+ private static final long serialVersionUID = -8664228651057889297L;
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
----------------------------------------------------------------------
diff --git a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
index b0580c3..9199d37 100644
--- a/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
+++ b/syncope620/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ResourceService.java
@@ -39,7 +39,7 @@ import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ResourceDeassociationActionType;
import org.apache.syncope.common.lib.types.SubjectType;
-import org.apache.syncope.common.lib.wrap.SubjectId;
+import org.apache.syncope.common.lib.wrap.SubjectKey;
/**
* REST operations for external resources.
@@ -133,7 +133,7 @@ public interface ResourceService extends JAXRSService {
* @param resourceKey name of resource
* @param subjectType subject type (user or role)
* @param type resource de-association action type
- * @param subjectIds users or roles against which the bulk action will be performed
+ * @param subjectKeys users or roles against which the bulk action will be performed
* @return <tt>Response</tt> object featuring {@link BulkActionResult} as <tt>Entity</tt>
*/
@Descriptions({
@@ -146,7 +146,7 @@ public interface ResourceService extends JAXRSService {
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
BulkActionResult bulkDeassociation(@NotNull @PathParam("resourceKey") String resourceKey,
@NotNull @PathParam("subjType") SubjectType subjectType,
- @NotNull @PathParam("type") ResourceDeassociationActionType type, @NotNull List<SubjectId> subjectIds);
+ @NotNull @PathParam("type") ResourceDeassociationActionType type, @NotNull List<SubjectKey> subjectKeys);
/**
* Executes the provided bulk action.
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/pom.xml
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/pom.xml b/syncope620/fit/console-reference/pom.xml
new file mode 100644
index 0000000..6d94373
--- /dev/null
+++ b/syncope620/fit/console-reference/pom.xml
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.syncope</groupId>
+ <artifactId>syncope-fit</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </parent>
+
+ <name>Apache Syncope FIT Console Reference</name>
+ <description>Apache Syncope FIT Console Reference</description>
+ <groupId>org.apache.syncope.fit</groupId>
+ <artifactId>syncope-fit-console-reference</artifactId>
+ <packaging>war</packaging>
+
+ <properties>
+ <rootpom.basedir>${basedir}/../..</rootpom.basedir>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet.jsp</groupId>
+ <artifactId>javax.servlet.jsp-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.syncope.client</groupId>
+ <artifactId>syncope-client-console</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.lmax</groupId>
+ <artifactId>disruptor</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.webjars</groupId>
+ <artifactId>jquery-ui</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.webjars</groupId>
+ <artifactId>codemirror</artifactId>
+ </dependency>
+
+ <!-- TEST -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.activiti</groupId>
+ <artifactId>activiti-webapp-explorer2</artifactId>
+ <type>war</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.syncope.fit</groupId>
+ <artifactId>syncope-fit-build-tools</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.tirasa.connid.bundles.soap</groupId>
+ <artifactId>wssample</artifactId>
+ <version>${connid.soap.version}</version>
+ <type>war</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- SELENIUM INTEGRATION TEST -->
+ <dependency>
+ <groupId>org.seleniumhq.selenium</groupId>
+ <artifactId>selenium-java</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.seleniumhq.selenium</groupId>
+ <artifactId>selenium-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <inherited>true</inherited>
+ <executions>
+ <execution>
+ <id>setupActivitiModeler</id>
+ <phase>process-resources</phase>
+ <configuration>
+ <target>
+ <unzip src="${settings.localRepository}/org/activiti/activiti-webapp-explorer2/${activiti.version}/activiti-webapp-explorer2-${activiti.version}.war" dest="${project.build.directory}/activiti-webapp-explorer2" />
+
+ <mkdir dir="${activiti-modeler.directory}" />
+
+ <mkdir dir="${activiti-modeler.directory}/editor" />
+ <copy todir="${activiti-modeler.directory}/editor">
+ <fileset dir="${project.build.directory}/activiti-webapp-explorer2/editor">
+ <exclude name="oryx.js" />
+ </fileset>
+ </copy>
+ <copy file="${project.build.directory}/activiti-webapp-explorer2/WEB-INF/classes/plugins.xml" todir="${activiti-modeler.directory}/editor" />
+ <copy file="${project.build.directory}/activiti-webapp-explorer2/WEB-INF/classes/stencilset.json" todir="${activiti-modeler.directory}/editor" />
+
+ <mkdir dir="${activiti-modeler.directory}/explorer" />
+ <copy todir="${activiti-modeler.directory}/explorer">
+ <fileset dir="${project.build.directory}/activiti-webapp-explorer2/explorer" />
+ </copy>
+
+ <mkdir dir="${activiti-modeler.directory}/libs" />
+ <copy todir="${activiti-modeler.directory}/libs">
+ <fileset dir="${project.build.directory}/activiti-webapp-explorer2/libs" />
+ </copy>
+ </target>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>com.google.code.maven-replacer-plugin</groupId>
+ <artifactId>replacer</artifactId>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>replace</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <file>${activiti-modeler.directory}/editor/oryx.debug.js</file>
+ <tokenValueMap>${basedir}/src/main/resources/oryx.debug.js-tokenValueMap.properties</tokenValueMap>
+ <unescape>true</unescape>
+ <regex>false</regex>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <failOnMissingWebXml>false</failOnMissingWebXml>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-maven2-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <container>
+ <dependencies>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ </dependency>
+ </dependencies>
+ </container>
+ <configuration>
+ <type>standalone</type>
+ <properties>
+ <cargo.servlet.port>${cargo.servlet.port}</cargo.servlet.port>
+ <cargo.tomcat.ajp.port>${cargo.tomcat.ajp.port}</cargo.tomcat.ajp.port>
+ <cargo.rmi.port>${cargo.rmi.port}</cargo.rmi.port>
+
+ <cargo.jvmargs>-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512m</cargo.jvmargs>
+ </properties>
+ <configfiles>
+ <configfile>
+ <file>${project.build.directory}/classes/context.xml</file>
+ <todir>conf/</todir>
+ <tofile>context.xml</tofile>
+ </configfile>
+ </configfiles>
+ </configuration>
+ <deployables>
+ <deployable>
+ <groupId>net.tirasa.connid.bundles.soap</groupId>
+ <artifactId>wssample</artifactId>
+ <type>war</type>
+ <properties>
+ <context>wssample</context>
+ </properties>
+ </deployable>
+ <deployable>
+ <groupId>org.apache.syncope.fit</groupId>
+ <artifactId>syncope-fit-build-tools</artifactId>
+ <type>war</type>
+ <properties>
+ <context>syncope-fit-build-tools</context>
+ </properties>
+ </deployable>
+ <deployable>
+ <location>${basedir}/../server-reference/target/syncope-fit-server-reference-${project.version}</location>
+ <pingURL>http://localhost:${cargo.servlet.port}/syncope/cacheStats.jsp</pingURL>
+ <pingTimeout>60000</pingTimeout>
+ <properties>
+ <context>syncope</context>
+ </properties>
+ </deployable>
+ <deployable>
+ <location>${project.build.directory}/${project.build.finalName}</location>
+ <properties>
+ <context>syncope-console</context>
+ </properties>
+ </deployable>
+ </deployables>
+ </configuration>
+ <executions>
+ <execution>
+ <id>start-container</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>stop-container</id>
+ <phase>post-integration-test</phase>
+ <goals>
+ <goal>stop</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ </plugin>
+ </plugins>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>debug</id>
+
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+
+ <build>
+ <defaultGoal>clean verify cargo:run</defaultGoal>
+
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-maven2-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <configuration>
+ <properties>
+ <cargo.jvmargs>-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
+ -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=512m</cargo.jvmargs>
+ </properties>
+ </configuration>
+ </configuration>
+ <executions>
+ <execution>
+ <id>start-container</id>
+ <phase>none</phase>
+ </execution>
+ <execution>
+ <id>stop-container</id>
+ <phase>none</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>skipTests</id>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-maven2-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <deployables>
+ <deployable>
+ <location>${project.build.directory}/${project.build.finalName}.war</location>
+ </deployable>
+ </deployables>
+ </configuration>
+ <executions>
+ <execution>
+ <id>install-container</id>
+ <phase>package</phase>
+ <goals>
+ <goal>install</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>start-container</id>
+ <phase>none</phase>
+ </execution>
+ <execution>
+ <id>stop-container</id>
+ <phase>none</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>selenium</id>
+
+ <build>
+ <defaultGoal>clean verify</defaultGoal>
+ <plugins>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <inherited>true</inherited>
+ <executions>
+ <execution>
+ <id>verify</id>
+ <goals>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-maven2-plugin</artifactId>
+ <inherited>true</inherited>
+ <executions>
+ <execution>
+ <id>start-container</id>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start</goal>
+ </goals>
+ <configuration>
+ <wait>false</wait>
+ </configuration>
+ </execution>
+ <execution>
+ <id>stop-container</id>
+ <phase>post-integration-test</phase>
+ <goals>
+ <goal>stop</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>jrebel</id>
+
+ <properties>
+ <javaagent>-javaagent:${env.REBEL_HOME}/jrebel.jar</javaagent>
+ </properties>
+
+ <build>
+ <defaultGoal>clean verify cargo:run</defaultGoal>
+
+ <plugins>
+ <plugin>
+ <groupId>org.zeroturnaround</groupId>
+ <artifactId>jrebel-maven-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <classpath>
+ <fallback>default</fallback>
+ <resources>
+ <resource/>
+ <resource>
+ <directory>${basedir}/../../client/console/target/classes</directory>
+ </resource>
+ </resources>
+ </classpath>
+
+ <web>
+ <resources>
+ <resource/>
+ <resource>
+ <target>/</target>
+ <directory>${basedir}/../../client/console/target/classes/META-INF/resources/</directory>
+ </resource>
+ </resources>
+ </web>
+
+ <alwaysGenerate>true</alwaysGenerate>
+ </configuration>
+ <executions>
+ <execution>
+ <id>generate-rebel-xml</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.cargo</groupId>
+ <artifactId>cargo-maven2-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <configuration>
+ <properties>
+ <cargo.jvmargs>-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
+ -noverify ${javaagent} -Drebel.spring_plugin=true
+ -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=256m</cargo.jvmargs>
+ </properties>
+ </configuration>
+ </configuration>
+ <executions>
+ <execution>
+ <id>start-container</id>
+ <phase>none</phase>
+ </execution>
+ <execution>
+ <id>stop-container</id>
+ <phase>none</phase>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/main/resources/console.properties
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/main/resources/console.properties b/syncope620/fit/console-reference/src/main/resources/console.properties
new file mode 100644
index 0000000..cf20f3c
--- /dev/null
+++ b/syncope620/fit/console-reference/src/main/resources/console.properties
@@ -0,0 +1,22 @@
+# 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.
+console.directory=${conf.directory}
+scheme=http
+host=localhost
+port=9080
+rootPath=/syncope/rest/
+activitiModelerDirectory=${activiti-modeler.directory}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/main/resources/context.xml
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/main/resources/context.xml b/syncope620/fit/console-reference/src/main/resources/context.xml
new file mode 100644
index 0000000..471d561
--- /dev/null
+++ b/syncope620/fit/console-reference/src/main/resources/context.xml
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<Context>
+ <!-- Disable session persistence across Tomcat restarts -->
+ <Manager pathname=""/>
+</Context>
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/main/resources/log4j2.xml b/syncope620/fit/console-reference/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..a7c1fa6
--- /dev/null
+++ b/syncope620/fit/console-reference/src/main/resources/log4j2.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<configuration status="WARN">
+
+ <appenders>
+
+ <RollingRandomAccessFile name="main" fileName="${log.directory}/console.log"
+ filePattern="${log.directory}/console-%d{yyyy-MM-dd}.log.gz"
+ immediateFlush="false" append="true">
+ <PatternLayout>
+ <pattern>%d{HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
+ </PatternLayout>
+ <Policies>
+ <TimeBasedTriggeringPolicy/>
+ <SizeBasedTriggeringPolicy size="250 MB"/>
+ </Policies>
+ </RollingRandomAccessFile>
+
+ </appenders>
+
+ <loggers>
+
+ <asyncLogger name="org.apache.syncope.client.lib" additivity="false" level="OFF">
+ <appender-ref ref="main"/>
+ </asyncLogger>
+
+ <asyncLogger name="org.apache.syncope.client.console" additivity="false" level="ERROR">
+ <appender-ref ref="main"/>
+ </asyncLogger>
+
+ <asyncLogger name="org.apache.wicket" additivity="false" level="ERROR">
+ <appender-ref ref="main"/>
+ </asyncLogger>
+
+ <asyncLogger name="org.springframework" additivity="false" level="ERROR">
+ <appender-ref ref="main"/>
+ </asyncLogger>
+
+ <asyncLogger name="org.apache.cxf" additivity="false" level="ERROR">
+ <appender-ref ref="main"/>
+ </asyncLogger>
+
+ <root level="ERROR">
+ <appender-ref ref="main"/>
+ </root>
+
+ </loggers>
+
+</configuration>
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/main/resources/oryx.debug.js-tokenValueMap.properties
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/main/resources/oryx.debug.js-tokenValueMap.properties b/syncope620/fit/console-reference/src/main/resources/oryx.debug.js-tokenValueMap.properties
new file mode 100644
index 0000000..17fdbcc
--- /dev/null
+++ b/syncope620/fit/console-reference/src/main/resources/oryx.debug.js-tokenValueMap.properties
@@ -0,0 +1,35 @@
+# 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.
+ORYX.CONFIG.ROOT_PATH \= "../editor/"; //TODO: Remove last slash!!=BASE_PATH = window.location.toString().substr(0, window.location.toString().indexOf('/wicket'));\nORYX.CONFIG.ROOT_PATH = BASE_PATH + "/activiti-modeler/editor/";
+ORYX.CONFIG.EXPLORER_PATH \= "../explorer";=ORYX.CONFIG.EXPLORER_PATH = BASE_PATH + "/activiti-modeler/explorer";
+ORYX.CONFIG.LIBS_PATH \= "../libs";=ORYX.CONFIG.LIBS_PATH = BASE_PATH + "/activiti-modeler/libs";
+ORYX.CONFIG.SYNTAXCHECKER_URL \==ORYX.CONFIG.PLUGINS_CONFIG = ORYX.CONFIG.ROOT_PATH + "plugins.xml";\nORYX.CONFIG.SYNTAXCHECKER_URL =
+this._baseUrl \= "../editor/stencilsets/bpmn2.0/";=this._baseUrl = ORYX.CONFIG.ROOT_PATH + "stencilsets/bpmn2.0/";
+this._source \= "../stencilsets/bpmn2.0/bpmn2.0.json";=this._source = ORYX.CONFIG.ROOT_PATH + "stencilsets/bpmn2.0/bpmn2.0.json";
+"../service/editor/stencilset"=ORYX.CONFIG.ROOT_PATH + "stencilset.json"
+ORYX.Editor.createByUrl=modelUrl = BASE_PATH + "/workflowDefGET";\nORYX.Editor.createByUrl
+../explorer/src/img/signavio/smoky/logo2.png="+ORYX.CONFIG.EXPLORER_PATH+"/src/img/signavio/smoky/logo2.png
+<a href\=\\""+ORYX.CONFIG.WEB_URL+"\\" target\=\\"_self\\" title\=\\"close modeler\\">=<a href=\\"#\\" title=\\"close modeler\\" onclick=\\"window.close();\\">
+../editor/images/close_button.png="+ORYX.CONFIG.ROOT_PATH+"images/close_button.png
+height:16px;width:16px;margin-bottom:-4px;background: transparent url(../libs/ext-2.0.2/resources/images/default/tree/loading.gif) no-repeat center;=height:16px;width:16px;margin-bottom:-4px;background: transparent url("+ORYX.CONFIG.LIBS_PATH+"/ext-2.0.2/resources/images/default/tree/loading.gif) no-repeat center;
+icon: '../editor/images/add.png',=icon: ORYX.CONFIG.ROOT_PATH + 'images/add.png',
+icon: '../editor/images/delete.png',=icon: ORYX.CONFIG.ROOT_PATH + 'images/delete.png',
+id\="edit_model_title"=id="edit_model_title" readonly="readonly"
+id\="edit_model_summary"=id="edit_model_summary" readonly="readonly"
+"../service/model/" + modelMeta.modelId + "/json"=BASE_PATH + "/workflowDefGET"
+// Send the request to the server.=saveUri = BASE_PATH + "/workflowDefPUT";\n// Send the request to the server.
+'Accept':"application/json", 'Content-Type':'charset\=UTF-8'='Accept':"application/json", 'Content-Type':'application/json'
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AbstractITCase.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AbstractITCase.java b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AbstractITCase.java
new file mode 100644
index 0000000..1bd2027
--- /dev/null
+++ b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AbstractITCase.java
@@ -0,0 +1,70 @@
+/*
+ * 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.fit.console.reference;
+
+import org.junit.After;
+import org.junit.Before;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractITCase {
+
+ /**
+ * Logger.
+ */
+ protected static final Logger LOG = LoggerFactory.getLogger(AbstractITCase.class);
+
+ public static final String ADMIN = "admin";
+
+ public static final String PASSWORD = "password";
+
+ public static final String BASE_URL = "http://localhost:9080/syncope-console/";
+
+ protected WebDriver seleniumDriver;
+
+ protected WebDriverWait wait;
+
+ @Before
+ public void setUp() throws Exception {
+ seleniumDriver = new FirefoxDriver();
+ seleniumDriver.get(BASE_URL);
+ wait = new WebDriverWait(seleniumDriver, 10);
+
+ WebElement element = seleniumDriver.findElement(By.name("userId"));
+ element.sendKeys(ADMIN);
+ element = seleniumDriver.findElement(By.name("password"));
+ element.sendKeys(PASSWORD);
+ seleniumDriver.findElement(By.name("p::submit")).click();
+
+ (new WebDriverWait(seleniumDriver, 10))
+ .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt='Logout']")));
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Logout\"]")).click();
+ seleniumDriver.quit();
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AccessITCase.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AccessITCase.java b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AccessITCase.java
new file mode 100644
index 0000000..557e9af
--- /dev/null
+++ b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/AccessITCase.java
@@ -0,0 +1,80 @@
+/*
+ * 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.fit.console.reference;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+public class AccessITCase extends AbstractITCase {
+
+ @Test
+ public void clickAround() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Schema\"]")).click();
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']/ul/li[2]/a")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[2]/a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//div[@id='uschema']/div/div/span/ul/li[2]/a")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='uschema']/div/div/span/ul/li[2]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='uschema']/div/div/span/ul/li[3]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='mschema']/div/div/span/ul/li[2]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='mschema']/div/div/span/ul/li[3]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[4]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[@id='rschema']/div/div/span/ul/li[2]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='rschema']/div/div/span/ul/li[3]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Users\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[3]/ul/li[2]/a/span")));
+ seleniumDriver.findElement(By.xpath("//div[3]/ul/li[2]/a/span")).click();
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Roles\"]")).click();
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt=\"Resources\"]")));
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Resources\"]")).click();
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt=\"TODO\"]")));
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"TODO\"]")).click();
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt=\"Reports\"]")));
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Reports\"]")).click();
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt=\"Configuration\"]")));
+
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']/ul/li[2]/a/span")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a/span")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Tasks\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']/ul/li[2]/a/span")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[2]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Tasks\"]")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[4]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[5]/a/span")).click();
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/07aa4585/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/ConfigurationITCase.java b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/ConfigurationITCase.java
new file mode 100644
index 0000000..b4a06f5
--- /dev/null
+++ b/syncope620/fit/console-reference/src/test/java/org/apache/syncope/fit/console/reference/ConfigurationITCase.java
@@ -0,0 +1,402 @@
+/*
+ * 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.fit.console.reference;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.Select;
+
+public class ConfigurationITCase extends AbstractITCase {
+
+ @Test
+ public void editParameters() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@title='Parameters']")));
+
+ seleniumDriver.findElement(By.xpath("//img[@title='Parameters']/ancestor::a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
+ seleniumDriver.switchTo().frame(0);
+
+ seleniumDriver.findElement(
+ By.xpath("//span[contains(text(), 'log.lastlogindate')]/../../div[2]/span/input")).click();
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/input[@type='submit']")).click();
+
+ seleniumDriver.switchTo().defaultContent();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("feedback")));
+ assertTrue(
+ seleniumDriver.findElement(By.tagName("body")).getText().contains("Operation executed successfully"));
+ }
+
+ @Test
+ public void browsePasswordPolicy() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[2]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='policies']/ul/li[2]/a")).click();
+ seleniumDriver.findElement(By.xpath("//div[@id='password']/span/div/a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
+ seleniumDriver.switchTo().frame(0);
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='key:textField']")));
+
+ WebElement element = seleniumDriver.findElement(By.name("description:textField"));
+ element.sendKeys("new description");
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/input[@type='submit']")).click();
+ seleniumDriver.switchTo().defaultContent();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("feedback")));
+ assertTrue(
+ seleniumDriver.findElement(By.tagName("body")).getText().contains("Operation executed successfully"));
+ }
+
+ @Test
+ public void browseWorkflowDef() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[5]/a/span")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='workflow']/div/span/img")));
+ }
+
+ @Test
+ public void setLogLevel() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[6]/a")).click();
+
+ final Select select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[@id='core']/div/span/table/tbody/tr/td[2]/select")));
+ select.selectByVisibleText("ERROR");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='workflow']/div/span/img")));
+ wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("feedback")));
+ assertTrue(
+ seleniumDriver.findElement(By.tagName("body")).getText().contains("Operation executed successfully"));
+ }
+
+ @Test
+ public void createNotification() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[@id='notifications']/a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
+ seleniumDriver.switchTo().frame(0);
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[2]/form/div[3]/div/div/div/div/label")));
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='sender:textField']")));
+
+ seleniumDriver.findElement(By.name("sender:textField")).sendKeys("test@syncope.it");
+
+ seleniumDriver.findElement(By.name("subject:textField")).sendKeys("test@syncope.it");
+
+ Select select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[3]/div[2]/span/select")));
+ select.selectByVisibleText("UserPlainSchema");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select/option[2]")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select")));
+ select.selectByVisibleText("fullname");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[5]/div[2]/span/select")));
+ select.selectByVisibleText("optin");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[6]/div[2]/span/select")));
+ select.selectByVisibleText("ALL");
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[3]/a/span")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[2]/a/span")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']"
+ + "/option[text()='PROPAGATION']")));
+
+ select = new Select(seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']")));
+ select.selectByVisibleText("PROPAGATION");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']"
+ + "/option[text()='role']")));
+
+ select = new Select(seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']")));
+ select.selectByVisibleText("role");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='eventSelection:categoryContainer:subcategory:dropDownChoiceField']"
+ + "/option[text()='resource-db-sync']")));
+
+ select = new Select(seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:subcategory:dropDownChoiceField']")));
+ select.selectByVisibleText("resource-db-sync");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//input[@name='eventSelection:eventsContainer:eventsPanel:failureGroup']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@class='eventSelectionWidzard']/div[2]/div[3]/span/div/input")).
+ click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[4]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div[4]/div/div/span/input")).click();
+
+ wait.until(ExpectedConditions.elementToBeClickable(By.name(
+ "staticRecipients:multiValueContainer:view:0:panel:textField")));
+
+ seleniumDriver.findElement(By.name(
+ "staticRecipients:multiValueContainer:view:0:panel:textField")).
+ sendKeys("syncope445@syncope.apache.org");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//div[2]/form/div[3]/div[4]/div/div[2]/label")));
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[4]/input")).click();
+
+ seleniumDriver.switchTo().defaultContent();
+ }
+
+ @Test
+ public void createDisabledNotification() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[@id='notifications']/a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
+ seleniumDriver.switchTo().frame(0);
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[2]/form/div[3]/div/div/div/div/label")));
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='sender:textField']")));
+
+ seleniumDriver.findElement(By.name("sender:textField")).sendKeys("test@syncope.it");
+
+ Select select = new Select(seleniumDriver.findElement(
+ By.xpath("//div[2]/form/div[3]/div/div[1]/div[3]/div[2]/span/select")));
+ select.selectByVisibleText("UserPlainSchema");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select/option[2]")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select")));
+ select.selectByVisibleText("fullname");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[5]/div[2]/span/select")));
+ select.selectByVisibleText("optin");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[6]/div[2]/span/select")));
+ select.selectByVisibleText("ALL");
+
+ // disable notification
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[7]/div[2]/span/input")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[3]/a/span")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[2]/a/span")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']"
+ + "/option[text()='PROPAGATION']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']")));
+ select.selectByVisibleText("PROPAGATION");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']"
+ + "/option[text()='role']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']")));
+ select.selectByVisibleText("role");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:subcategory:dropDownChoiceField']"
+ + "/option[text()='resource-db-sync']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:subcategory:dropDownChoiceField']")));
+ select.selectByVisibleText("resource-db-sync");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//input[@name='eventSelection:eventsContainer:eventsPanel:failureGroup']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@class='eventSelectionWidzard']/div[2]/div[3]/span/div/input")).
+ click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[4]/a/span")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div[4]/div/div/span/input")).click();
+
+ wait.until(ExpectedConditions.elementToBeClickable(By.name(
+ "staticRecipients:multiValueContainer:view:0:panel:textField")));
+
+ seleniumDriver.findElement(
+ By.name("staticRecipients:multiValueContainer:view:0:panel:textField"))
+ .sendKeys("syncope492@syncope.apache.org");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//div[2]/form/div[3]/div[4]/div/div[2]/label")));
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[4]/input")).click();
+
+ seleniumDriver.switchTo().defaultContent();
+ }
+
+ @Test
+ public void issueSYNCOPE446() {
+ seleniumDriver.findElement(By.xpath("//img[@alt=\"Configuration\"]")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='tabs']")));
+
+ seleniumDriver.findElement(By.xpath("//div[@id='tabs']/ul/li[3]/a")).click();
+
+ seleniumDriver.findElement(By.xpath("//div[@id='notifications']/a")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe")));
+ seleniumDriver.switchTo().frame(0);
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[2]/form/div[3]/div/div/div/div/label")));
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@name='sender:textField']")));
+
+ seleniumDriver.findElement(By.name("sender:textField")).sendKeys("syncope446@syncope.it");
+ seleniumDriver.findElement(By.name("subject:textField")).sendKeys("Test issue Syncope 446");
+
+ Select select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[3]/div[2]/span/select")));
+ select.selectByVisibleText("UserPlainSchema");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select/option[2]")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[4]/div[2]/span/select")));
+ select.selectByVisibleText("email");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[5]/div[2]/span/select")));
+ select.selectByVisibleText("optin");
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div/div/div[6]/div[2]/span/select")));
+ select.selectByVisibleText("ALL");
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[3]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[2]/a/span")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']"
+ + "/option[text()='REST']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:type:dropDownChoiceField']")));
+ select.selectByVisibleText("REST");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']"
+ + "/option[text()='RoleLogic']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='eventSelection:categoryContainer:category:dropDownChoiceField']")));
+ select.selectByVisibleText("RoleLogic");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//input[@name='eventSelection:eventsContainer:eventsPanel:successGroup']")));
+
+ seleniumDriver.findElement(
+ By.xpath("//div[@class='eventSelectionWidzard']/div[2]/div[3]/span/div/input")).click();
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[3]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/div[3]/span/div[4]/div/span/input")).click();
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(
+ By.xpath("//select[@name='aboutContainer:roleAbout:searchFormContainer:searchView:0:type']"
+ + "/option[text()='ENTITLEMENT']")));
+
+ wait.until(ExpectedConditions.elementToBeClickable(
+ By.xpath("//select[@name='aboutContainer:roleAbout:searchFormContainer:searchView:0:type']")));
+
+ select = new Select(
+ seleniumDriver.findElement(By.xpath(
+ "//select[@name='aboutContainer:roleAbout:searchFormContainer:searchView:0:type']")));
+ select.selectByVisibleText("ENTITLEMENT");
+
+ wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
+ "//select[@name='aboutContainer:roleAbout:searchFormContainer:searchView:0:property']"
+ + "/option[text()='ROLE_CREATE']")));
+
+ select = new Select(seleniumDriver.findElement(By.xpath(
+ "//select[@name='aboutContainer:roleAbout:searchFormContainer:searchView:0:property']")));
+ select.selectByVisibleText("ROLE_CREATE");
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[3]/ul/li[4]/a/span")).click();
+ seleniumDriver.findElement(By.xpath("//input[@name='recipientsContainer:checkRecipients:checkboxField']")).
+ click();
+
+ wait.until(ExpectedConditions.elementToBeClickable(By.name(
+ "staticRecipients:multiValueContainer:view:0:panel:textField")));
+
+ seleniumDriver.findElement(By.name("staticRecipients:multiValueContainer:view:0:panel:textField")).
+ sendKeys("syncope446@syncope.apache.org");
+
+ seleniumDriver.findElement(By.xpath("//div[2]/form/div[4]/input")).click();
+
+ seleniumDriver.switchTo().defaultContent();
+ }
+}