[prev in list] [next in list] [prev in thread] [next in thread] 

List:       forgerock-openidm-commit
Subject:    [CommitOpenIDM] [5370] trunk: OPENIDM-3292
From:       anonymous () forgerock ! org
Date:       2015-05-28 19:17:22
Message-ID: 20150528191722.7E3353F8DD () sources ! internal ! forgerock ! com
[Download RAW message or body]

[Attachment #2 (text/html)]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[5370] trunk: OPENIDM-3292</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: \
verdana,arial,helvetica,sans-serif; font-size: 10pt;  } #msg dl a { font-weight: \
bold} #msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: \
bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: \
6px; } #logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em \
0; } #logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg \
h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; } \
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; \
} #logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: \
-1.5em; padding-left: 1.5em; } #logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em \
1em 0 1em; background: white;} #logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid \
#fa0; border-bottom: 1px solid #fa0; background: #fff; } #logmsg table th { \
text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted \
#fa0; } #logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: \
0.2em 0.5em; } #logmsg table thead th { text-align: center; border-bottom: 1px solid \
#fa0; } #logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: \
6px; } #patch { width: 100%; }
#patch h4 {font-family: \
verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
 #patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, \
#patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins \
{background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del \
{background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, \
                .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a \
href="http://sources.forgerock.org/changelog/openidm/?cs=5370">5370</a></dd> \
<dt>Author</dt> <dd>huck.elliott</dd> <dt>Date</dt> <dd>2015-05-28 20:17:22 +0100 \
(Thu, 28 May 2015)</dd> </dl>

<h3>Log Message</h3>
<pre><a href="https://bugster.forgerock.org/jira/browse/OPENIDM-3292">OPENIDM-3292</a>
 reviewed at CR-7011
-handle resourceCollection datatype with autocomplete selections 
-add Linked Systems tab 
-add tabs for arrays of resourceCollections 
-add tabs for relationships where the resourceCollection path is the same as the \
parent object (i.e. managed/user parent object and managed/user resourceCollection \
                property) 
-bring SearchDelegate into common idm space 
-make CSS changes to generic list grid to get closer to matching mockups</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkopenidmuiopenidmuiadminpomxml">trunk/openidm-ui/openidm-ui-admin/pom.xml</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsconfigroutesAdminRoutesConfigjs">t \
runk/openidm-ui/openidm-ui-admin/src/main/js/config/routes/AdminRoutesConfig.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsmainjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/main.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmainjs"> \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/main.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmanagedA \
ddEditManagedViewjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/managed/AddEditManagedView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmappingM \
appingRoleEntitlementsViewjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/MappingRoleEntitlementsView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmappingP \
ropertiesViewjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/PropertiesView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncChan \
geAssociationDialogjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/ChangeAssociationDialog.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTest \
SyncDialogjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncDialog.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTest \
SyncGridViewjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncGridView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTest \
SyncViewjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminutilMapp \
ingUtilsjs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/util/MappingUtils.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainresourcescssconfigadminStyleless">tr \
unk/openidm-ui/openidm-ui-admin/src/main/resources/css/config/adminStyle.less</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrcmainresourceslocalesentranslationjson">t \
runk/openidm-ui/openidm-ui-admin/src/main/resources/locales/en/translation.json</a></li>
 <li><a href="#trunkopenidmuiopenidmuiadminsrctestqunitmanagedobjectsmanagedObjectsTes \
tjs">trunk/openidm-ui/openidm-ui-admin/src/test/qunit/managedobjects/managedObjectsTest.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommondelega \
tesResourceDelegatejs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/ResourceDelegate.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonmainjs \
">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/main.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresour \
ceGenericEditResourceViewjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/GenericEditResourceView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresour \
ceListResourceViewjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ListResourceView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonutilJS \
ONEditorSetupUtilsjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/JSONEditorSetupUtils.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceEdit \
ResourceViewTemplatehtml">trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/EditResourceViewTemplate.html</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceList \
ResourceViewTemplatehtml">trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ListResourceViewTemplate.html</a></li>
 <li><a href="#trunkopenidmuiopenidmuiendusersrcmainjsconfigroutesAdminRoutesConfigjs" \
>trunk/openidm-ui/openidm-ui-enduser/src/main/js/config/routes/AdminRoutesConfig.js</a></li>
> 
<li><a href="#trunkopenidmuiopenidmuiendusersrcmainresourcescssuserless">trunk/openidm-ui/openidm-ui-enduser/src/main/resources/css/user.less</a></li>
 <li><a href="#trunkopenidmuiopenidmuiendusersrcmainresourceslocalesentranslationjson" \
>trunk/openidm-ui/openidm-ui-enduser/src/main/resources/locales/en/translation.json</a></li>
> 
<li><a href="#trunkopenidmzipsrcmainresourcesconfmanagedjson">trunk/openidm-zip/src/main/resources/conf/managed.json</a></li>
 </ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommondelegat \
esSearchDelegatejs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/SearchDelegate.js</a></li>
 <li>trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/linkedView/</li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonlinked \
ViewLinkedViewjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/linkedView/LinkedView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresour \
ceResourceCollectionArrayViewjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresour \
ceResourceCollectionRelationshipsViewjs">trunk/openidm-ui/openidm-ui-common/src/main/j \
s/org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView.js</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonutilRe \
sourceCollectionUtilsjs">trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/ResourceCollectionUtils.js</a></li>
 <li>trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/linkedView/</li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminlinkedViewLi \
nkedViewhtml">trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/linkedView/LinkedView.html</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceReso \
urceCollectionArrayViewTemplatehtml">trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionArrayViewTemplate.html</a></li>
 <li><a href="#trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceReso \
urceCollectionRelationshipsViewTemplatehtml">trunk/openidm-ui/openidm-ui-common/src/ma \
in/resources/templates/admin/resource/ResourceCollectionRelationshipsViewTemplate.html</a></li>
 </ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadmindelegates \
SearchDelegatejs">trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/delegates/SearchDelegate.js</a></li>
 </ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkopenidmuiopenidmuiadminpomxml"></a>
<div class="modfile"><h4>Modified: trunk/openidm-ui/openidm-ui-admin/pom.xml (5369 => \
5370)</h4> <pre class="diff"><span>
<span class="info">--- trunk/openidm-ui/openidm-ui-admin/pom.xml	2015-05-28 07:41:05 \
                UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/pom.xml	2015-05-28 19:17:22 UTC (rev 5370)
</span><span class="lines">@@ -121,6 +121,14 @@
</span><span class="cx">             &lt;type&gt;js&lt;/type&gt;
</span><span class="cx">         &lt;/dependency&gt;
</span><span class="cx"> 
</span><ins>+        &lt;dependency&gt;
+            &lt;groupId&gt;org.forgerock.commons.ui.libs&lt;/groupId&gt;
+            &lt;artifactId&gt;d3&lt;/artifactId&gt;
+            &lt;version&gt;3.5.5&lt;/version&gt;
+            &lt;classifier&gt;min&lt;/classifier&gt;
+            &lt;type&gt;js&lt;/type&gt;
+        &lt;/dependency&gt;
+
</ins><span class="cx">     &lt;/dependencies&gt;
</span><span class="cx"> 
</span><span class="cx">     &lt;profiles&gt;
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsconfigroutesAdminRoutesConfigjs"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/config/routes/AdminRoutesConfig.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/config/routes/AdminRoutesConfig.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/config/routes/AdminRoutesConfig.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -138,7 +138,8 @@
</span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, </span><span \
class="cx">             role: &quot;ui-admin&quot;, </span><span class="cx">          \
url: /^resource\/(system)\/(.+)\/(.+)\/edit\/(.+)$/,  </span><del>-            \
pattern: &quot;resource/?/?/?/edit/?&quot; </del><ins>+            pattern: \
&quot;resource/?/?/?/edit/?&quot;, +            forceUpdate: true
</ins><span class="cx">         },
</span><span class="cx">         &quot;adminNewSystemObjectView&quot; : {
</span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, </span><span \
class="lines">@@ -156,7 +157,8 @@ </span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, </span><span \
class="cx">             role: &quot;ui-admin&quot;, </span><span class="cx">          \
url: /^resource\/(managed)\/(.+)\/edit\/(.+)$/,  </span><del>-            pattern: \
&quot;resource/?/?/edit/?&quot; </del><ins>+            pattern: \
&quot;resource/?/?/edit/?&quot;, +            forceUpdate: true
</ins><span class="cx">         },
</span><span class="cx">         &quot;adminNewManagedObjectView&quot; : {
</span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, \
</span></span></pre></div> <a id="trunkopenidmuiopenidmuiadminsrcmainjsmainjs"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/main.js (5369 => 5370)</h4> <pre \
class="diff"><span> <span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/main.js	2015-05-28 07:41:05 UTC (rev \
                5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/main.js	2015-05-28 19:17:22 UTC \
(rev 5370) </span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx">         &quot;bootstrap-dialog&quot;: \
&quot;libs/bootstrap-dialog-1.34.4-min&quot;, </span><span class="cx">         \
placeholder: &quot;libs/jquery.placeholder-2.0.8&quot;, </span><span class="cx">      \
selectize : &quot;libs/selectize-0.12.1-min&quot;, </span><ins>+        d3 : \
&quot;libs/d3-3.5.5-min&quot;, </ins><span class="cx">         moment: \
&quot;libs/moment-2.8.1-min&quot;, </span><span class="cx">         AuthnDelegate: \
&quot;org/forgerock/openidm/ui/common/delegates/AuthnDelegate&quot;, </span><span \
class="cx">         jsonEditor: &quot;libs/jsoneditor-0.7.9-min&quot;, </span><span \
class="lines">@@ -110,6 +111,9 @@ </span><span class="cx">         selectize: {
</span><span class="cx">             deps: [&quot;jquery&quot;]
</span><span class="cx">         },
</span><ins>+        d3: {
+            exports: &quot;d3&quot;
+        },
</ins><span class="cx">         bootstrap: {
</span><span class="cx">             deps: [&quot;jquery&quot;]
</span><span class="cx">         },
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadmindelegatesSearchDelegatejs"></a>
 <div class="delfile"><h4>Deleted: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/delegates/SearchDelegate.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/delegates/SearchDelegate.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/delegates/SearchDelegate.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -1,50 +0,0 @@
</span><del>-/**
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright (c) 2013 ForgeRock AS. All rights reserved.
- */
-
-/*global $, define, _ */
-
-define(&quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, [
-    &quot;org/forgerock/commons/ui/common/util/Constants&quot;,
-    &quot;org/forgerock/commons/ui/common/main/AbstractDelegate&quot;
-], function(constants, AbstractDelegate) {
-
-    var obj = new AbstractDelegate(constants.host + &quot;/openidm&quot;);
-    
-    obj.searchResults = function (resource, props, searchString, comparisonOperator) \
                {
-        var operator = (comparisonOperator) ? comparisonOperator : &quot;sw&quot;,
-            maxPageSize = 10,
-            conditions = _(props)
-                            .reject(function(p){ return !p; })
-                            .map(function(p){
-                                var op = operator;
-                                
-                                if(p === &quot;_id&quot; &amp;&amp; op !== \
                &quot;neq&quot;){
-                                    op = &quot;eq&quot;;
-                                }
-                                
-                                if(op !== &quot;pr&quot;) {
-                                    return p + ' ' + op + ' &quot;' + \
                encodeURIComponent(searchString) + '&quot;';
-                                } else {
-                                    return p + ' pr';
-                                }
-                            })
-                            .value();
-            
-        return this.serviceCall({
-            &quot;type&quot;: &quot;GET&quot;,
-            &quot;url&quot;:  &quot;/&quot; + resource + &quot;?_pageSize=&quot; + \
maxPageSize + &quot;&amp;_queryFilter=&quot; + conditions.join(&quot; or (&quot;) + \
new Array(conditions.length).join(&quot;)&quot;)// [a,b] =&gt; &quot;a or (b)&quot;; \
                [a,b,c] =&gt; &quot;a or (b or (c))&quot;
-        }).then(
-            function (qry) {
-                return _.first(qry.result,maxPageSize);//we never want more than 10 \
                results from search in case _pageSize does not work
-            },
-            function (error){
-                console.log(error);
-            }
-        );
-    };
-    
-    return obj;
-});
</del></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmainjs"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/main.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/main.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/main.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx">     &quot;./delegates/SyncDelegate&quot;,
</span><span class="cx">     &quot;./delegates/BrowserStorageDelegate&quot;,
</span><span class="cx">     &quot;./delegates/ExternalAccessDelegate&quot;,
</span><del>-    &quot;./delegates/SearchDelegate&quot;,
</del><span class="cx">     &quot;./delegates/ReconDelegate&quot;,
</span><span class="cx">     &quot;./delegates/SecurityDelegate&quot;,
</span><span class="cx">     &quot;./delegates/WorkflowDelegate&quot;,
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmanagedAddEditManagedViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/managed/AddEditManagedView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/managed/AddEditManagedView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/managed/AddEditManagedView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -205,6 +205,11 @@
</span><span class="cx">                                             \
&quot;type&quot;: &quot;string&quot;, </span><span class="cx">                        \
&quot;title&quot;: &quot;Path&quot; </span><span class="cx">                          \
}, </span><ins>+                                        &quot;label&quot;: {
+                                            &quot;type&quot;: &quot;string&quot;,
+                                            &quot;title&quot;: &quot;Label&quot;,
+                                            &quot;description&quot;: \
$.t(&quot;templates.managed.resourceCollectionRelationshipDescription&quot;) +        \
}, </ins><span class="cx">                                         &quot;query&quot;: \
{ </span><span class="cx">                                             \
&quot;type&quot;: &quot;object&quot;, </span><span class="cx">                        \
&quot;title&quot;: &quot;Query&quot;, </span><span class="lines">@@ -268,7 +273,7 @@
</span><span class="cx">                                         &quot;title&quot;: \
&quot;Searchable&quot;, </span><span class="cx">                                      \
&quot;type&quot;: &quot;boolean&quot;, </span><span class="cx">                       \
&quot;required&quot;: true, </span><del>-                                        \
&quot;default&quot;: true </del><ins>+                                        \
&quot;default&quot;: false </ins><span class="cx">                                    \
}, </span><span class="cx">                                     &quot;required&quot;: \
{ </span><span class="cx">                                         &quot;title&quot;: \
&quot;Required&quot;, </span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmappingMappingRoleEntitlementsViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/MappingRoleEntitlementsView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/MappingRoleEntitlementsView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/MappingRoleEntitlementsView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> \
define(&quot;org/forgerock/openidm/ui/admin/mapping/MappingRoleEntitlementsView&quot;, \
[ </span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/main/AbstractView&quot;, </span><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/mapping/MappingBaseView&quot;, \
</span><del>-    &quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot; \
</del><ins>+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot; \
</ins><span class="cx"> ], function(AbstractView, </span><span class="cx">            \
MappingBaseView, </span><span class="cx">             searchDelegate) {
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminmappingPropertiesViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/PropertiesView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/PropertiesView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/mapping/PropertiesView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/util/UIUtils&quot;, </span><span class="cx">    \
&quot;org/forgerock/commons/ui/common/util/Constants&quot;, </span><span class="cx">  \
&quot;org/forgerock/openidm/ui/admin/delegates/BrowserStorageDelegate&quot;, \
</span><del>-    &quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, \
</del><ins>+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, \
</ins><span class="cx">     \
&quot;org/forgerock/openidm/ui/admin/delegates/ConnectorDelegate&quot;, </span><span \
class="cx">     &quot;org/forgerock/openidm/ui/common/delegates/ConfigDelegate&quot;, \
</span><span class="cx">     \
&quot;org/forgerock/openidm/ui/admin/util/MappingUtils&quot;, \
</span></span></pre></div> <a \
id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncChangeAssociationDialogjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/ChangeAssociationDialog.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/ChangeAssociationDialog.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/ChangeAssociationDialog.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx">     \
&quot;org/forgerock/openidm/ui/admin/mapping/MappingBaseView&quot;, </span><span \
class="cx">     &quot;org/forgerock/commons/ui/common/main/Configuration&quot;, \
</span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/util/UIUtils&quot;, </span><del>-    \
&quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, </del><ins>+    \
&quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, </ins><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/util/MappingUtils&quot;, \
</span><span class="cx">     \
&quot;org/forgerock/openidm/ui/admin/delegates/SyncDelegate&quot;, </span><span \
class="cx">     &quot;bootstrap-dialog&quot;, </span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTestSyncDialogjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncDialog.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncDialog.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncDialog.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> 
</span><span class="cx"> \
define(&quot;org/forgerock/openidm/ui/admin/sync/TestSyncDialog&quot;, [ </span><span \
class="cx">     &quot;org/forgerock/commons/ui/common/main/AbstractView&quot;, \
</span><del>-    &quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, \
</del><ins>+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, \
</ins><span class="cx">     \
&quot;org/forgerock/commons/ui/common/main/Configuration&quot;, </span><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/sync/TestSyncGridView&quot;, \
</span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/util/UIUtils&quot;, </span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTestSyncGridViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncGridView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncGridView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncGridView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> \
define(&quot;org/forgerock/openidm/ui/admin/sync/TestSyncGridView&quot;, [ \
</span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/main/AbstractView&quot;, </span><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/delegates/ReconDelegate&quot;, \
</span><del>-    &quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, \
</del><ins>+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, \
</ins><span class="cx">     \
&quot;org/forgerock/commons/ui/common/main/Configuration&quot;, </span><span \
class="cx">     &quot;org/forgerock/commons/ui/common/components/Messages&quot; \
</span><span class="cx"> ], function (AbstractView, reconDelegate, searchDelegate, \
conf, messagesManager) { </span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminsyncTestSyncViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/sync/TestSyncView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> 
</span><span class="cx"> \
define(&quot;org/forgerock/openidm/ui/admin/sync/TestSyncView&quot;, [ </span><span \
class="cx">     &quot;org/forgerock/commons/ui/common/main/AbstractView&quot;, \
</span><del>-    &quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, \
</del><ins>+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, \
</ins><span class="cx">     \
&quot;org/forgerock/commons/ui/common/main/Configuration&quot;, </span><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/util/MappingUtils&quot;, \
</span><span class="cx">     \
&quot;org/forgerock/openidm/ui/admin/sync/TestSyncGridView&quot; \
</span></span></pre></div> <a \
id="trunkopenidmuiopenidmuiadminsrcmainjsorgforgerockopenidmuiadminutilMappingUtilsjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/util/MappingUtils.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/util/MappingUtils.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/js/org/forgerock/openidm/ui/admin/util/MappingUtils.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx">  * @author huck.elliott
</span><span class="cx">  */
</span><span class="cx"> \
define(&quot;org/forgerock/openidm/ui/admin/util/MappingUtils&quot;, [ </span><del>-  \
&quot;org/forgerock/openidm/ui/admin/delegates/SearchDelegate&quot;, </del><ins>+    \
&quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, </ins><span \
class="cx">     &quot;org/forgerock/openidm/ui/admin/delegates/BrowserStorageDelegate&quot;
 </span><span class="cx"> ],
</span><span class="cx">   function(searchDelegate, browserStorageDelegate) {
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainresourcescssconfigadminStyleless"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/resources/css/config/adminStyle.less (5369 \
=> 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/resources/css/config/adminStyle.less	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/resources/css/config/adminStyle.less	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -149,8 +149,37 @@
</span><span class="cx">   }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+
+/*
+  Graph Display
+*/
+
+
+.reportsGraphBody {
+  overflow:hidden;
+  .node circle {
+    fill: #fff;
+    stroke: @base-theme-color;
+    stroke-width: 3px;
+  }
+
+  .node text { font: 12px; }
+
+  .link {
+    fill: none;
+    stroke: #2a2f32;
+    stroke-width: 2px;
+  }
+}
+
+
+/*
+  generic resource Display
+*/
+
</ins><span class="cx"> .resourcesContainer {
</span><span class="cx">   margin-bottom:25px;
</span><ins>+  padding-top: 10px;
</ins><span class="cx"> 
</span><span class="cx">   .btn-toolbar,  {
</span><span class="cx">     border-bottom: none;
</span><span class="lines">@@ -158,13 +187,126 @@
</span><span class="cx">     margin-bottom: 0px;
</span><span class="cx">     margin-top: 0px;
</span><span class="cx">   }
</span><ins>+  
+        
+  td.noData {
+      padding: 10px;
+  }
+  
+  .ui-widget-content {
+      border-color:transparent !important;
+  }
</ins><span class="cx"> 
</span><span class="cx">   .ui-jqgrid {
</span><span class="cx">     margin: auto;
</span><span class="cx">     margin-top: 10px;
</span><ins>+    border: 1px solid #eee;
+    
+    .ui-state-default {
+        border-color:transparent;
+    }
+    tr.ui-row-ltr td {
+        padding: 14px;
+    }
+    tr.ui-row-ltr :first-child {
+        padding: 12px;
+    }
+    .ui-jqgrid-sortable {
+        text-transform: uppercase;
+    }
+    .ui-jqgrid-pager {
+        background-color: #fff;
+    }
+    thead {
+        border-bottom: 2px solid #ddd;
+        tr td {
+            padding-bottom: 10px;
+        }
+    }
</ins><span class="cx">   }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+.editResourceViewContainer {
+        .resource-avatar {
+          display: table;
+          background: @base-theme-color;
+          color: #fff;
+          text-align: center;
+        }
+    
+        .profile-header .resource-avatar {
+          width: 70px;
+          height: 70px;
+          border-radius: 70px;
+          line-height: 70px;
+          font-size: 36px;
+        }
+    
+        .panel-footer {
+          padding: 10px 15px;
+          border-radius: 0;
+          background-color: transparent;
+          overflow: auto;
+        }
+    
+        .page-header h4.page-type {
+          text-transform: uppercase;
+          font-size: 14px;
+          letter-spacing: 1px;
+          margin-bottom: 10px;
+          color: #666;
+          font-weight: 600;
+          margin-top: 0;
+        }
+    
+        .page-header .meta {
+          margin: -10px 0 10px;
+          color: #777;
+          text-transform: none;
+          letter-spacing: 0;
+          border-left: 1px solid #ddd;
+          padding-left: 5px;
+          margin-left: 4px;
+          font-weight: 400;
+          display: inline-block;
+          margin-bottom: 0;
+        }
+    
+        .tab-content {
+          background-color: #fff;
+          margin-bottom: 50px;
+        }
+        
+        .fa-search {
+           margin-top: 10px;
+        }
+        
+        .resourceCollectionTab {
+           padding-top: 10px;
+        }
+        
+        #resource&gt;div&gt;h3, .tabHeaderTemplate, .tabContentTemplate  {
+            display: none !important;
+        }
+        
+        .back-bar a {
+            color: #777;
+        }
+        
+        #linkToResource span{
+            margin-top: 10px;
+        }
+        
+        .well {
+            background-color: transparent;
+            border-color: transparent;
+        }
+        
+        li.resourceListItem:hover {
+            background-color: #ededed;
+        }
+}
+
</ins><span class="cx"> .list-table {
</span><span class="cx">   .list-group {
</span><span class="cx">     .list-group-item {
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrcmainresourceslocalesentranslationjson"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/main/resources/locales/en/translation.json \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/main/resources/locales/en/translation.json	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/main/resources/locales/en/translation.json	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -224,17 +224,28 @@
</span><span class="cx">             &quot;UsersTemplate&quot; : {
</span><span class="cx">                 &quot;remainingUsers&quot; : &quot;Remaining \
users&quot; </span><span class="cx">             },
</span><ins>+            &quot;LinkedTemplate&quot; : {
+                &quot;linkedResource&quot; : &quot;Linked Resource&quot;,
+                &quot;linkedSystems&quot; : &quot;Linked Systems&quot;,
+                &quot;noLinkedSystems&quot; : &quot;No Linked Systems \
Available.&quot;, +                &quot;recordMissing&quot; : &quot;Linked record \
missing.&quot; +            },
</ins><span class="cx">             &quot;ResourceEdit&quot;:
</span><span class="cx">             {
</span><span class="cx">                 &quot;confirmDelete&quot;: &quot;Are you \
sure you want to delete this __objectTitle__?&quot;, </span><span class="cx">         \
&quot;confirmDeleteSelected&quot;: &quot;Are you sure you want to delete the selected \
__objectTitle__s?&quot;, </span><del>-                &quot;backToList&quot;: \
&quot;Back to List&quot;, </del><ins>+                &quot;backToList&quot;: \
&quot;Back to __objectTitle__ List&quot;, </ins><span class="cx">                 \
&quot;addSuccess&quot;: &quot;Successfully added __objectTitle__&quot;, </span><span \
class="cx">                 &quot;editSuccess&quot;: &quot;Successfully updated \
__objectTitle__&quot;, </span><span class="cx">                 \
&quot;deleteSuccess&quot;: &quot;Successfully deleted __objectTitle__&quot;, \
</span><span class="cx">                 &quot;deleteSelectedSuccess&quot;: \
&quot;Successfully deleted selected __objectTitle__s&quot;, </span><ins>+             \
&quot;details&quot;: &quot;Details&quot;, </ins><span class="cx">                 \
&quot;noData&quot;: &quot;No Data&quot;, </span><del>-                \
&quot;data&quot;: &quot;Data&quot; </del><ins>+                &quot;data&quot;: \
&quot;Data&quot;, +                &quot;search&quot;: &quot;Enter search terms to \
find __objectTitle__ ...&quot;, +                &quot;noPendingChanges&quot;: \
&quot;No pending changes&quot;, +                &quot;new&quot;: &quot;New&quot;,
+                &quot;linkedSystems&quot;: &quot;Linked Systems&quot;
</ins><span class="cx">             },
</span><span class="cx">             &quot;ResourceList&quot;:
</span><span class="cx">             {
</span><span class="lines">@@ -309,7 +320,8 @@
</span><span class="cx">             &quot;duplicateNameError&quot; : &quot;Duplicate \
name detected. Please provide a unique name.&quot;, </span><span class="cx">          \
&quot;managedSchema&quot;: &quot;Schema&quot;, </span><span class="cx">             \
&quot;addPropertyScript&quot;: &quot;Add script for property events.&quot;, \
</span><del>-            &quot;addManagedScript&quot;: &quot;Add script for managed \
events.&quot; </del><ins>+            &quot;addManagedScript&quot;: &quot;Add script \
for managed events.&quot;, +            \
&quot;resourceCollectionRelationshipDescription&quot;: &quot;The Label setting \
defines how the UI refers to this relationship. *Note: It is only used when the path \
to this resourceCollection is the same a the parent object's path.&quot; </ins><span \
class="cx">         }, </span><span class="cx">         &quot;scriptEditor&quot;: {
</span><span class="cx">             &quot;scriptDelete&quot; : &quot;Are you sure \
you want to delete this script?&quot;, </span></span></pre></div>
<a id="trunkopenidmuiopenidmuiadminsrctestqunitmanagedobjectsmanagedObjectsTestjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-admin/src/test/qunit/managedobjects/managedObjectsTest.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-admin/src/test/qunit/managedobjects/managedObjectsTest.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-admin/src/test/qunit/managedobjects/managedObjectsTest.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -77,8 +77,8 @@
</span><span class="cx">                             \
QUnit.ok(addEditManagedView.$el.find(&quot;#addEditManaged&quot;).is(&quot;:disabled&quot;) \
=== false, &quot;Submit button enabled after new name&quot;); </span><span \
class="cx">  </span><span class="cx">                             // Create a complex \
Schema with nested values and set that to the JSONEditor instance </span><del>-       \
var jsonEditorFormat = \
{&quot;title&quot;:&quot;testTitle&quot;,&quot;description&quot;:&quot;Test \
Description&quot;,&quot;properties&quot;:[{&quot;propertyName&quot;:&quot;stringString&quot;,&quot;title&quot;:&quot;Test \
String&quot;,&quot;description&quot;:&quot;Test string \
desciption&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;require \
d&quot;:true,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testArrayOfStrings&quot;,&quot;title&quot;:&quot;Test \
Array of String&quot;,&quot;description&quot;:&quot;Description of the test array of \
strings&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:true,&quot;required&quo \
t;:true,&quot;type&quot;:{&quot;itemType&quot;:&quot;&quot;}},{&quot;propertyName&quot;:&quot;testBoolean&quot;,&quot;title&quot;:&quot;Test \
Boolean&quot;,&quot;description&quot;:&quot;Test boolean \
description&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:true,&quot;required&
  quot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testInteger&quot;,&quot;title&quot;:&quot;Test \
Integer&quot;,&quot;description&quot;:&quot;Description of the test \
integer&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;required&q \
uot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testNumber&quot;,&quot;title&quot;:&quot;Test \
Number&quot;,&quot;description&quot;:&quot;Test Number \
description&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:false,&quot;require \
d&quot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testObjectWithComplexProperties&quot;,&quot;title&quot;:&quot;Test \
Object with Complex Properties&quot;,&quot;description&quot;:&quot;The description \
for the test object containing complex \
properties&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;require \
d&quot;:false,&quot;type&quot;:[{&quot;propertyName&quot;:&quot;simpleProp&quot;,&quot;title&quot;:&
  quot;&quot;,&quot;description&quot;:&quot;&quot;,&quot;viewable&quot;:false,&quot;se \
archable&quot;:false,&quot;required&quot;:false,&quot;type&quot;:&quot;&quot;},{&quot; \
propertyName&quot;:&quot;complexArrayProp&quot;,&quot;title&quot;:&quot;&quot;,&quot;description&quot;:&quot;An \
array with an array of \
strings&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;required&q \
uot;:false,&quot;type&quot;:{&quot;itemType&quot;:{&quot;itemType&quot;:&quot;&quot;}} \
}]},{&quot;propertyName&quot;:&quot;testResourceCollection&quot;,&quot;title&quot;:&quot;Test \
Resource Collection&quot;,&quot;description&quot;:&quot;Description of the test \
resource collection&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quo \
t;required&quot;:false,&quot;type&quot;:{&quot;path&quot;:&quot;test/path&quot;,&quot; \
query&quot;:{&quot;queryFilter&quot;:&quot;testQueryFilter&quot;,&quot;fields&quot;:[&quot;testField&quot;],&quot;sortKeys&quot;:[&quot;testKey&quot;,&quot;testKey2&q
  uot;]}}}]};
-                            var jsonSchema = \
{&quot;$schema&quot;:&quot;http://forgerock.org/json-schema#&quot;,&quot;type&quot;:&q \
uot;object&quot;,&quot;title&quot;:&quot;testTitle&quot;,&quot;description&quot;:&quot;Test \
Description&quot;,&quot;properties&quot;:{&quot;stringString&quot;:{&quot;description&quot;:&quot;Test \
string desciption&quot;,&quot;title&quot;:&quot;Test \
String&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&quot;: \
&quot;string&quot;},&quot;testArrayOfStrings&quot;:{&quot;description&quot;:&quot;Description \
of the test array of strings&quot;,&quot;title&quot;:&quot;Test Array of \
String&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:true,&quot;type&quot;:&quot;string&quot;},&quot;testBoolean&quot;:{&quot;description&quot;:&quot;Test \
boolean description&quot;,&quot;title&quot;:&quot;Test \
Boolean&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:true,&quot;type&quot;:&quot;string&quot;},&quot;testInteger&quot;:{&quot;d
  escription&quot;:&quot;Description of the test \
integer&quot;,&quot;title&quot;:&quot;Test \
Integer&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&quot;:&quot;string&quot;},&quot;testNumber&quot;:{&quot;description&quot;:&quot;Test \
Number description&quot;,&quot;title&quot;:&quot;Test \
Number&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:false,&quot;type&quot;:& \
quot;string&quot;},&quot;testObjectWithComplexProperties&quot;:{&quot;description&quot;:&quot;The \
description for the test object containing complex \
properties&quot;,&quot;title&quot;:&quot;Test Object with Complex \
Properties&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&qu \
ot;:&quot;string&quot;},&quot;testResourceCollection&quot;:{&quot;description&quot;:&quot;Description \
of the test resource collection&quot;,&quot;title&quot;:&quot;Test Resource \
Collection&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;resourceCollection&quot;:{&quot;pat
  h&quot;:&quot;test/path&quot;,&quot;query&quot;:{&quot;queryFilter&quot;:&quot;testQ \
ueryFilter&quot;,&quot;fields&quot;:[&quot;testField&quot;],&quot;sortKeys&quot;:[&quo \
t;testKey&quot;,&quot;testKey2&quot;]}},&quot;type&quot;:&quot;string&quot;}},&quot;re \
quired&quot;:[&quot;stringString&quot;,&quot;testArrayOfStrings&quot;],&quot;order&quo \
t;:[&quot;stringString&quot;,&quot;testArrayOfStrings&quot;,&quot;testBoolean&quot;,&q \
uot;testInteger&quot;,&quot;testNumber&quot;,&quot;testObjectWithComplexProperties&quot;,&quot;testResourceCollection&quot;]};
 </del><ins>+                            var jsonEditorFormat = \
{&quot;title&quot;:&quot;testTitle&quot;,&quot;description&quot;:&quot;Test \
Description&quot;,&quot;properties&quot;:[{&quot;propertyName&quot;:&quot;stringString&quot;,&quot;title&quot;:&quot;Test \
String&quot;,&quot;description&quot;:&quot;Test string \
desciption&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;require \
d&quot;:true,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testArrayOfStrings&quot;,&quot;title&quot;:&quot;Test \
Array of String&quot;,&quot;description&quot;:&quot;Description of the test array of \
strings&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:true,&quot;required&quo \
t;:true,&quot;type&quot;:{&quot;itemType&quot;:&quot;&quot;}},{&quot;propertyName&quot;:&quot;testBoolean&quot;,&quot;title&quot;:&quot;Test \
Boolean&quot;,&quot;description&quot;:&quot;Test boolean \
description&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:true,&quot;required&q
  uot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testInteger&quot;,&quot;title&quot;:&quot;Test \
Integer&quot;,&quot;description&quot;:&quot;Description of the test \
integer&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;required&q \
uot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testNumber&quot;,&quot;title&quot;:&quot;Test \
Number&quot;,&quot;description&quot;:&quot;Test Number \
description&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:false,&quot;require \
d&quot;:false,&quot;type&quot;:&quot;&quot;},{&quot;propertyName&quot;:&quot;testObjectWithComplexProperties&quot;,&quot;title&quot;:&quot;Test \
Object with Complex Properties&quot;,&quot;description&quot;:&quot;The description \
for the test object containing complex \
properties&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;require \
d&quot;:false,&quot;type&quot;:[{&quot;propertyName&quot;:&quot;simpleProp&quot;,&quot;title&quot;:&q
  uot;&quot;,&quot;description&quot;:&quot;&quot;,&quot;viewable&quot;:false,&quot;sea \
rchable&quot;:false,&quot;required&quot;:false,&quot;type&quot;:&quot;&quot;},{&quot;p \
ropertyName&quot;:&quot;complexArrayProp&quot;,&quot;title&quot;:&quot;&quot;,&quot;description&quot;:&quot;An \
array with an array of \
strings&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;required&q \
uot;:false,&quot;type&quot;:{&quot;itemType&quot;:{&quot;itemType&quot;:&quot;&quot;}} \
}]},{&quot;propertyName&quot;:&quot;testResourceCollection&quot;,&quot;title&quot;:&quot;Test \
Resource Collection&quot;,&quot;description&quot;:&quot;Description of the test \
resource collection&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quo \
t;required&quot;:false,&quot;type&quot;:{&quot;path&quot;:&quot;test/path&quot;,&quot; \
label&quot;:&quot;&quot;,&quot;query&quot;:{&quot;queryFilter&quot;:&quot;testQueryFil \
ter&quot;,&quot;fields&quot;:[&quot;testField&quot;],&quot;sortKeys&quot;:[&quot;  \
testKey&quot;,&quot;testKey2&quot;]}}}]}; +                            var jsonSchema \
= {&quot;$schema&quot;:&quot;http://forgerock.org/json-schema#&quot;,&quot;type&quot;: \
&quot;object&quot;,&quot;title&quot;:&quot;testTitle&quot;,&quot;description&quot;:&quot;Test \
Description&quot;,&quot;properties&quot;:{&quot;stringString&quot;:{&quot;description&quot;:&quot;Test \
string desciption&quot;,&quot;title&quot;:&quot;Test \
String&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&quot;: \
&quot;string&quot;},&quot;testArrayOfStrings&quot;:{&quot;description&quot;:&quot;Description \
of the test array of strings&quot;,&quot;title&quot;:&quot;Test Array of \
String&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:true,&quot;type&quot;:&quot;string&quot;},&quot;testBoolean&quot;:{&quot;description&quot;:&quot;Test \
boolean description&quot;,&quot;title&quot;:&quot;Test \
Boolean&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:true,&quot;type&quot;:&quot;string&quot;},&quot;testInteger&quot;:{&quot;d
  escription&quot;:&quot;Description of the test \
integer&quot;,&quot;title&quot;:&quot;Test \
Integer&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&quot;:&quot;string&quot;},&quot;testNumber&quot;:{&quot;description&quot;:&quot;Test \
Number description&quot;,&quot;title&quot;:&quot;Test \
Number&quot;,&quot;viewable&quot;:true,&quot;searchable&quot;:false,&quot;type&quot;:& \
quot;string&quot;},&quot;testObjectWithComplexProperties&quot;:{&quot;description&quot;:&quot;The \
description for the test object containing complex \
properties&quot;,&quot;title&quot;:&quot;Test Object with Complex \
Properties&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;type&qu \
ot;:&quot;string&quot;},&quot;testResourceCollection&quot;:{&quot;description&quot;:&quot;Description \
of the test resource collection&quot;,&quot;title&quot;:&quot;Test Resource \
Collection&quot;,&quot;viewable&quot;:false,&quot;searchable&quot;:false,&quot;resourceCollection&quot;:{&quot;pat
  h&quot;:&quot;test/path&quot;,&quot;label&quot;:&quot;&quot;,&quot;query&quot;:{&quo \
t;queryFilter&quot;:&quot;testQueryFilter&quot;,&quot;fields&quot;:[&quot;testField&qu \
ot;],&quot;sortKeys&quot;:[&quot;testKey&quot;,&quot;testKey2&quot;]}},&quot;type&quot \
;:&quot;string&quot;}},&quot;required&quot;:[&quot;stringString&quot;,&quot;testArrayO \
fStrings&quot;],&quot;order&quot;:[&quot;stringString&quot;,&quot;testArrayOfStrings&q \
uot;,&quot;testBoolean&quot;,&quot;testInteger&quot;,&quot;testNumber&quot;,&quot;testObjectWithComplexProperties&quot;,&quot;testResourceCollection&quot;]};
 </ins><span class="cx"> 
</span><span class="cx">                             \
addEditManagedView.data.managedObjectSchema.setValue(jsonEditorFormat); </span><span \
class="cx">  </span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommondelegatesResourceDelegatejs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/ResourceDelegate.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/ResourceDelegate.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/ResourceDelegate.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -137,6 +137,14 @@
</span><span class="cx">             return configDelegate.readEntity(config);
</span><span class="cx">         });
</span><span class="cx">     };
</span><ins>+    
+    obj.linkedView = function(id, resourcePath) {
+        return obj.serviceCall({
+            serviceUrl: constants.host + &quot;/openidm/endpoint/linkedView/&quot; + \
resourcePath, +            url: id,
+            type: &quot;GET&quot;
+        });
+    };
</ins><span class="cx"> 
</span><span class="cx">     return obj;
</span><span class="cx"> });
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommondelegatesSearchDelegatejs"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/SearchDelegate.js \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/SearchDelegate.js	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/delegates/SearchDelegate.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015 ForgeRock AS. All rights reserved.
+ */
+
+/*global $, define, _ */
+
+define(&quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, [
+    &quot;org/forgerock/commons/ui/common/util/Constants&quot;,
+    &quot;org/forgerock/commons/ui/common/main/AbstractDelegate&quot;
+], function(constants, AbstractDelegate) {
+
+    var obj = new AbstractDelegate(constants.host + &quot;/openidm&quot;);
+    
+    obj.searchResults = function (resource, props, searchString, comparisonOperator) \
{ +        var operator = (comparisonOperator) ? comparisonOperator : &quot;sw&quot;,
+            maxPageSize = 10,
+            conditions = _(props)
+                            .reject(function(p){ return !p; })
+                            .map(function(p){
+                                var op = operator;
+                                
+                                if(p === &quot;_id&quot; &amp;&amp; op !== \
&quot;neq&quot;){ +                                    op = &quot;eq&quot;;
+                                }
+                                
+                                if(op !== &quot;pr&quot;) {
+                                    return p + ' ' + op + ' &quot;' + \
encodeURIComponent(searchString) + '&quot;'; +                                } else \
{ +                                    return p + ' pr';
+                                }
+                            })
+                            .value();
+            
+        return this.serviceCall({
+            &quot;type&quot;: &quot;GET&quot;,
+            &quot;url&quot;:  &quot;/&quot; + resource + &quot;?_sortKeys=&quot; + \
props[0] + &quot;&amp;_pageSize=&quot; + maxPageSize + &quot;&amp;_queryFilter=&quot; \
+ conditions.join(&quot; or (&quot;) + new \
Array(conditions.length).join(&quot;)&quot;)// [a,b] =&gt; &quot;a or (b)&quot;; \
[a,b,c] =&gt; &quot;a or (b or (c))&quot; +        }).then(
+            function (qry) {
+                return _.first(qry.result,maxPageSize);//we never want more than 10 \
results from search in case _pageSize does not work +            },
+            function (error){
+                console.error(error);
+            }
+        );
+    };
+    
+    return obj;
+});
</ins></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonlinkedViewLinkedViewjs"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/linkedView/LinkedView.js \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/linkedView/LinkedView.js	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/linkedView/LinkedView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,150 @@
</span><ins>+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015 ForgeRock AS. All rights reserved.
+ *
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the License at
+ * http://forgerock.org/license/CDDLv1.0.html
+ * See the License for the specific language governing
+ * permission and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at http://forgerock.org/license/CDDLv1.0.html
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * &quot;Portions Copyrighted [year] [name of copyright owner]&quot;
+ */
+
+/*global define, $, _, JSONEditor */
+
+define(&quot;org/forgerock/openidm/ui/common/linkedView/LinkedView&quot;, [
+    &quot;org/forgerock/commons/ui/common/main/AbstractView&quot;,
+    &quot;org/forgerock/openidm/ui/common/delegates/ResourceDelegate&quot;
+], function(AbstractView, resourceDelegate) {
+
+    var LinkedView = AbstractView.extend({
+        template: &quot;templates/admin/linkedView/LinkedView.html&quot;,
+        events: {
+            &quot;change #linkedViewSelect&quot;: &quot;changeResource&quot;
+        },
+
+        render: function(args, callback) {
+            resourceDelegate.linkedView(args.id, \
args.resourcePath).then(_.bind(function(linkedData){ +
+                this.data.linkedData = linkedData;
+                this.data.linkedResources = [];
+
+                _.each(this.data.linkedData.linkedTo, function(resource, index){
+                    \
this.data.linkedResources.push(this.cleanLinkName(resource.resourceName, \
resource.linkQualifier)); +
+                    //This second loop is to ensure that null returned first level \
values actually display in JSON editor +                    //Without this it will \
not display the textfields +                    _.each(resource.content, \
function(attribute, key){ +                        if(attribute === null) {
+                            this.data.linkedData.linkedTo[index].content[key] = \
&quot;&quot;; +                        }
+                    }, this);
+
+                }, this);
+
+                this.parentRender(_.bind(function() {
+                    this.loadEditor(0);
+
+                    if(callback) {
+                        callback();
+                    }
+                }, this));
+            }, this));
+        },
+
+        cleanLinkName: function(name, linkQualifier){
+            var cleanName = name.split(&quot;/&quot;);
+
+            if(cleanName[0] === &quot;system&quot; || cleanName[0] === \
&quot;managed&quot;) { +                cleanName.splice(0 ,1);
+            }
+
+            cleanName.pop();
+
+            cleanName = cleanName.join(&quot; &quot;);
+
+            if(linkQualifier) {
+                cleanName = cleanName +&quot; - &quot; +linkQualifier;
+            }
+
+            return cleanName;
+        },
+
+        changeResource: function(event) {
+            event.preventDefault();
+
+            this.loadEditor($(event.target).val());
+        },
+
+        loadEditor: function(selection) {
+            var linkToResource = &quot;#resource/&quot;,
+                resourceId;
+            
+            if(this.editor) {
+                this.editor.destroy();
+            }
+
+            if(this.data.linkedData.linkedTo.length &gt; 0) {
+                
+                this.$el.closest(&quot;.container&quot;).find(&quot;#linkedSystemsTabHeader&quot;).show();
 +                
+                if (this.data.linkedData.linkedTo[selection].content !== null) {
+                    resourceId = \
_.last(this.data.linkedData.linkedTo[selection].resourceName.split(&quot;/&quot;)); + \
linkToResource += this.data.linkedData.linkedTo[selection].resourceName.replace(resourceId, \
&quot;edit/&quot; + resourceId); +                    
+                    \
this.$el.find(&quot;#linkToResource&quot;).attr(&quot;href&quot;,linkToResource); +   \
 +                    \
resourceDelegate.getSchema(this.data.linkedData.linkedTo[selection].resourceName.split(&quot;/&quot;)).then(_.bind(function(schema) \
{ +                        var propCount = 0;
+                        if(schema.order) {
+                            _.each(schema.order, function(prop) {
+                                schema.properties[prop].propertyOrder = propCount++;
+                            });
+                        }
+                        
+                        this.editor = new JSONEditor(
+                                this.$el.find(&quot;#linkedViewContent&quot;)[0],
+                                {
+                                    theme: &quot;bootstrap3&quot;,
+                                    iconlib: &quot;fontawesome4&quot;,
+                                    disable_edit_json: true,
+                                    disable_properties: true,
+                                    disable_array_delete: true,
+                                    disable_array_reorder: true,
+                                    disable_array_add: true,
+                                    schema: schema,
+                                    horizontalForm: true
+                                }
+                            );
+
+                            if \
(this.data.linkedData.linkedTo[selection].content._id) { +                            \
delete this.data.linkedData.linkedTo[selection].content._id; +                        \
} +
+                            \
this.editor.setValue(this.data.linkedData.linkedTo[selection].content); +
+                            this.$el.find(&quot;#linkedViewContent \
h3:first&quot;).hide(); +                            this.$el.find(&quot;.row \
select&quot;).hide(); +                            this.$el.find(&quot;.row \
input&quot;).attr(&quot;disabled&quot;, true); +                    }, this));
+                } else {
+                    \
this.$el.find(&quot;#linkedViewContent&quot;).text($.t(&quot;templates.admin.LinkedTemplate.recordMissing&quot;) \
+ ': ' + this.data.linkedData.linkedTo[selection].resourceName); +                }
+            }
+        }
+    });
+
+    return LinkedView;
+});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonmainjs"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/main.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/main.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/main.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx">     &quot;./resource/EditResourceView&quot;,
</span><span class="cx">     &quot;./resource/GenericEditResourceView&quot;,
</span><span class="cx">     &quot;./resource/ResourceEditViewRegistry&quot;,
</span><ins>+    &quot;./resource/ResourceCollectionArrayView&quot;,
</ins><span class="cx">     
</span><span class="cx">     &quot;./delegates/ConfigDelegate&quot;,
</span><span class="cx">     &quot;./delegates/InternalUserDelegate&quot;,
</span><span class="lines">@@ -38,7 +39,6 @@
</span><span class="cx">     &quot;./delegates/SiteConfigurationDelegate&quot;,
</span><span class="cx">     &quot;./delegates/OpenAMProxyDelegate&quot;,
</span><span class="cx">     &quot;./delegates/ResourceDelegate&quot;,
</span><del>-    &quot;./delegates/SystemHealthDelegate&quot;,
</del><span class="cx"> 
</span><span class="cx">     &quot;./login/InternalLoginHelper&quot;,
</span><span class="cx">     &quot;./login/AuthenticationUnavailable&quot;,
</span><span class="lines">@@ -46,9 +46,11 @@
</span><span class="cx">     &quot;./util/Constants&quot;,
</span><span class="cx">     &quot;./util/AMLoginUtils&quot;,
</span><span class="cx">     &quot;./util/JSONEditorSetupUtils&quot;,
</span><del>-
</del><ins>+    
</ins><span class="cx">     &quot;./dashboard/DashboardWidgetLoader&quot;,
</span><span class="cx">     &quot;./dashboard/widgets/MemoryUsageWidget&quot;,
</span><span class="cx">     &quot;./dashboard/widgets/ReconProcessesWidget&quot;,
</span><del>-    &quot;./dashboard/widgets/CPUUsageWidget&quot;
</del><ins>+    &quot;./dashboard/widgets/CPUUsageWidget&quot;,
+    
+    &quot;./linkedView/LinkedView&quot;
</ins><span class="cx"> ]);
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresourceGenericEditResourceViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/GenericEditResourceView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/GenericEditResourceView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/GenericEditResourceView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -33,8 +33,27 @@
</span><span class="cx">     \
&quot;org/forgerock/commons/ui/common/util/Constants&quot;, </span><span class="cx">  \
&quot;org/forgerock/commons/ui/common/util/UIUtils&quot;, </span><span class="cx">    \
&quot;org/forgerock/openidm/ui/common/delegates/ResourceDelegate&quot;, </span><del>- \
                &quot;org/forgerock/commons/ui/common/components/Messages&quot;
-], function(AbstractView, eventManager, constants, uiUtils, resourceDelegate, \
messagesManager) { </del><ins>+    \
&quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;, +    \
&quot;org/forgerock/commons/ui/common/components/Messages&quot;, +    \
&quot;org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView&quot;, +   \
&quot;org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView&quot;,
 +    &quot;org/forgerock/openidm/ui/common/util/ResourceCollectionUtils&quot;,
+    &quot;org/forgerock/openidm/ui/common/linkedView/LinkedView&quot;,
+    &quot;org/forgerock/commons/ui/common/main/Router&quot;
+], function(
+        AbstractView, 
+        eventManager, 
+        constants, 
+        uiUtils, 
+        resourceDelegate, 
+        searchDelegate, 
+        messagesManager, 
+        ResourceCollectionArrayView, 
+        ResourceCollectionRelationshipsView, 
+        resourceCollectionUtils, 
+        LinkedView, 
+        router
+    ) {
</ins><span class="cx">     var EditResourceView = AbstractView.extend({
</span><span class="cx">         template: \
&quot;templates/admin/resource/EditResourceViewTemplate.html&quot;, </span><span \
class="cx">          </span><span class="lines">@@ -47,7 +66,8 @@
</span><span class="cx">         render: function(args, callback) {
</span><span class="cx">             var resourceReadPromise,
</span><span class="cx">                 schemaPromise = \
resourceDelegate.getSchema(args), </span><del>-                objectId = (args[0] \
=== &quot;managed&quot;) ? args[2] : args[3]; </del><ins>+                objectId = \
(args[0] === &quot;managed&quot;) ? args[2] : args[3], +                displayField;
</ins><span class="cx">             
</span><span class="cx">             this.data.args = args;
</span><span class="cx">             
</span><span class="lines">@@ -73,12 +93,46 @@
</span><span class="cx">             $.when(resourceReadPromise, \
schemaPromise).then(_.bind(function(resource, schema){ </span><span class="cx">       \
this.data.objectTitle = schema.title || this.objectName; </span><span class="cx">     \
 </span><ins>+                this.data.schema = schema;
+                
</ins><span class="cx">                 if(this.isSystemResource) {
</span><span class="cx">                     this.data.objectTitle = this.objectName;
</span><span class="cx">                 }
</span><span class="cx">                 
</span><ins>+                if(!this.data.newObject) {
+                    if(this.isSystemResource) {
+                        displayField = _.chain(schema.properties)
+                                        .map(function(val, key) { val.name = key; \
return val; }) +                                        .where({ nativeName: \
&quot;__NAME__&quot; }) +                                        .value();
+                        
+                        if(displayField) {
+                            displayField = displayField[0].name;
+                        } else {
+                            displayField = _.keys(schema.properties)[0];
+                        }
+                    } else {
+                        displayField = schema.order[0];
+                    }
+                    
+                    this.data.objectDisplayText = resource[0][displayField];
+                }
+                
+                this.data.backBtnText = \
$.t(&quot;templates.admin.ResourceEdit.backToList&quot;,{ objectTitle: \
this.data.objectTitle }); +                
</ins><span class="cx">                 this.parentRender(function(){
</span><span class="cx">                     this.setupEditor(resource, schema);
</span><ins>+                    
+                    if(!this.data.newObject) {
+                        this.linkedView = new LinkedView();
+                        this.linkedView.element = &quot;#linkedView&quot;;
+
+                        this.linkedView.render({id: resource[0]._id, resourcePath: \
this.data.objectType + &quot;/&quot; + this.objectName + &quot;/&quot; }); +          \
} +                    
+                    if(callback) {
+                        callback();
+                    }
</ins><span class="cx">                 });
</span><span class="cx">             },this));
</span><span class="cx">         },
</span><span class="lines">@@ -87,7 +141,7 @@
</span><span class="cx">                 filteredProperties,
</span><span class="cx">                 filteredObject = resource[0];
</span><span class="cx">             
</span><del>-            this.oldObject = filteredObject;
</del><ins>+            this.oldObject = $.extend(true, {}, filteredObject);
</ins><span class="cx">             
</span><span class="cx">             filteredProperties = \
_.omit(schema.properties,function(p) { return !p.viewable; }); </span><span \
class="cx">              </span><span class="lines">@@ -102,7 +156,8 @@
</span><span class="cx">                     disable_array_reorder: true,
</span><span class="cx">                     disable_collapse: true,
</span><span class="cx">                     disable_properties: true,
</span><del>-                    show_errors: &quot;never&quot;
</del><ins>+                    show_errors: &quot;never&quot;,
+                    formHorizontal: true
</ins><span class="cx">             };
</span><span class="cx">             
</span><span class="cx">             if(schema.order){
</span><span class="lines">@@ -122,11 +177,53 @@
</span><span class="cx">                     });
</span><span class="cx">                 }
</span><span class="cx">             }
</span><del>-            
</del><ins>+
</ins><span class="cx">             this.editor = new \
JSONEditor(document.getElementById(&quot;resource&quot;), { schema: schema }); \
</span><span class="cx">             this.editor.setValue(filteredObject); \
</span><span class="cx">             this.addTooltips(); </span><ins>+            \
this.convertResourceCollectionFields(filteredObject,schema); +            
+            this.editor.on('change', _.bind(function() {
+                this.showPendingChanges();
+            }, this));
</ins><span class="cx">         },
</span><ins>+        showPendingChanges : function() {
+            var changedFields = [],
+                newValue = _.extend({},this.oldObject, this.getFormValue());
+            
+            if(_.isEqual(newValue, this.oldObject)) {
+                this.$el.find(&quot;#saveBtn&quot;).attr(&quot;disabled&quot;, \
true); +                \
this.$el.find(&quot;#resetBtn&quot;).attr(&quot;disabled&quot;, true); +              \
this.$el.find(&quot;#resourceChangesPending&quot;).hide(); +            } else {
+                if(!this.data.newObject) {
+                    _.each(newValue, _.bind(function(val,key) {
+                        if((!this.oldObject[key] &amp;&amp; val.length) || \
(this.oldObject[key] &amp;&amp; !_.isEqual(this.oldObject[key], val))) { +            \
if(this.data.schema.properties &amp;&amp; this.data.schema.properties[key] &amp;&amp; \
this.data.schema.properties[key].title &amp;&amp; \
this.data.schema.properties[key].title.length) { +                                \
changedFields.push(this.data.schema.properties[key].title); +                         \
} else { +                                changedFields.push(key);
+                            }
+                        }
+                    }, this));
+                    
+                    if(changedFields.length) {
+                        \
this.$el.find(&quot;#changedFields&quot;).html(&quot;&lt;br/&gt;- &quot; + \
changedFields.join(&quot;&lt;br/&gt;- &quot;)); +
+                        \
this.$el.find(&quot;#saveBtn&quot;).removeAttr(&quot;disabled&quot;); +               \
this.$el.find(&quot;#resetBtn&quot;).removeAttr(&quot;disabled&quot;); +              \
 +                        this.$el.find(&quot;#resourceChangesPending&quot;).show();
+                    } else {
+                        this.$el.find(&quot;#resourceChangesPending&quot;).hide();
+                    }
+                } else {
+                    \
this.$el.find(&quot;#saveBtn&quot;).removeAttr(&quot;disabled&quot;); +               \
this.$el.find(&quot;#resetBtn&quot;).removeAttr(&quot;disabled&quot;); +              \
 +                }
+            }
+        },
</ins><span class="cx">         /* To accommodate a popover the addTooltips function \
transforms the following html: </span><span class="cx">          * 
</span><span class="cx">          * &lt;div class=&quot; form-group&quot;&gt;
</span><span class="lines">@@ -168,19 +265,10 @@
</span><span class="cx">                 template: '&lt;div class=&quot;popover \
popover-info&quot; role=&quot;tooltip&quot;&gt;&lt;div \
class=&quot;popover-content&quot;&gt;&lt;/div&gt;&lt;/div&gt;' </span><span \
class="cx">             }); </span><span class="cx">         },
</span><del>-        save: function(e){
-            var formVal = this.editor.getValue(),
-                successCallback = _.bind(function(){
-                    var msg = (this.data.newObject) ? \
&quot;templates.admin.ResourceEdit.addSuccess&quot; : \
                &quot;templates.admin.ResourceEdit.editSuccess&quot;;
-                    messagesManager.messages.addMessage({&quot;message&quot;: \
                $.t(msg,{ objectTitle: this.data.objectTitle })});
-                    this.backToList();
-                }, this);
</del><ins>+        getFormValue : function() {
+            var formVal = this.editor.getValue();
</ins><span class="cx">             
</span><del>-            e.preventDefault();
-            
-            if(this.data.newObject){
-                resourceDelegate.createResource(this.data.serviceUrl, formVal._id, \
                formVal, successCallback);
-            } else {
</del><ins>+            if(!this.data.newObject){
</ins><span class="cx">                 /*
</span><span class="cx">                 The following _.each() was placed here to \
account for JSONEditor.setValue()  </span><span class="cx">                 turning a \
property that exists but has a null value into an empty text field.  </span><span \
class="lines">@@ -189,11 +277,46 @@ </span><span class="cx">                 This \
loop filters out previously null values that have not been changed. </span><span \
class="cx">                 */ </span><span class="cx">                 \
_.each(_.keys(formVal), function(key){ </span><del>-                    \
if(!_.has(this.oldObject, key) &amp;&amp; !formVal[key].length){ </del><ins>+         \
if(!_.has(this.oldObject, key) &amp;&amp; (!formVal[key] || !formVal[key].length)){ \
</ins><span class="cx">                         delete formVal[key]; </span><span \
class="cx">                     } </span><span class="cx">                 }, this);
</span><span class="cx">                 
</span><ins>+                \
_.each(this.$el.find(&quot;.resourceCollectionArrayValue&quot;), function(element) { \
+                    var propName = $(element).attr(&quot;propName&quot;), +          \
propVal = $(element).val().split(&quot;,&quot;); +                    
+                    if($(element).val().length) {
+                        formVal[propName] = propVal;
+                    } else {
+                        formVal[propName] = [];
+                    }
+                }); 
+            }
+            
+            return formVal;
+        },
+        save: function(e){
+            var formVal = this.getFormValue(),
+                successCallback = _.bind(function(newObj){
+                    var msg = (this.data.newObject) ? \
&quot;templates.admin.ResourceEdit.addSuccess&quot; : \
&quot;templates.admin.ResourceEdit.editSuccess&quot;, +                        \
editRouteName = (!this.isSystemResource) ? &quot;adminEditManagedObjectView&quot; : \
&quot;adminEditSystemObjectView&quot;; +                    
+                    messagesManager.messages.addMessage({&quot;message&quot;: \
$.t(msg,{ objectTitle: this.data.objectTitle })}); +                    
+                    if(this.data.newObject) {
+                        this.data.args.push(newObj._id);
+                        eventManager.sendEvent(constants.EVENT_CHANGE_VIEW, {route: \
router.configuration.routes[editRouteName], args: this.data.args}); +                 \
} else { +                        this.backToList();
+                    }
+                }, this);
+            
+            e.preventDefault();
+            
+            if(this.data.newObject){
+                resourceDelegate.createResource(this.data.serviceUrl, formVal._id, \
formVal, successCallback); +            } else { 
</ins><span class="cx">                 if (!this.isSystemResource) {
</span><span class="cx">                     \
resourceDelegate.patchResourceDifferences(this.data.serviceUrl, {id: \
this.oldObject._id, rev: this.oldObject._rev}, this.oldObject, formVal, \
successCallback); </span><span class="cx">                 } else {
</span><span class="lines">@@ -212,7 +335,7 @@
</span><span class="cx">         },
</span><span class="cx">         reset: function(e){
</span><span class="cx">             e.preventDefault();
</span><del>-            
</del><ins>+
</ins><span class="cx">             this.render(this.data.args);
</span><span class="cx">         },
</span><span class="cx">         deleteObject: function(e){
</span><span class="lines">@@ -224,6 +347,115 @@
</span><span class="cx">                     this.backToList();
</span><span class="cx">                 }, this));
</span><span class="cx">             }, this));
</span><ins>+        },
+        convertResourceCollectionFields: function(filteredObject,schema){
+                var _this = this,
+                    getFields,
+                    convertField,
+                    convertArrayField,
+                    showRelationships,
+                    addTab;
+                
+                getFields = function(properties, parent){
+                    _.each(properties,function(prop,key){
+                        prop.propName = key;
+                        if(prop.type === &quot;object&quot;){
+                            if(parent){
+                                parent += &quot;\\.&quot; + key;
+                            } else {
+                                parent = &quot;\\.&quot; + key;
+                            }
+                            getFields(prop.properties, parent);
+                        }
+                        
+                        if(parent){
+                            prop.selector =  parent + &quot;\\.&quot; + key;
+                        } else {
+                            prop.selector = &quot;\\.&quot; + key;
+                        }
+                        
+                        if(prop.type === &quot;array&quot;) {
+                            if(prop.items.resourceCollection &amp;&amp; \
_.has(filteredObject,key)) { +                                prop.value = \
filteredObject[key]; +                                convertArrayField(prop);
+                            }
+                        }
+                        if(prop.resourceCollection){
+                            convertField(prop);
+                            
+                            if(_this.data.objectType + &quot;/&quot; + \
_this.objectName === prop.resourceCollection.path &amp;&amp; \
prop.resourceCollection.label &amp;&amp; prop.resourceCollection.label.length) { +    \
prop.parentId = prop.resourceCollection.path + &quot;/&quot; + _this.objectId; +      \
prop.parentValue = _this.oldObject; +                                \
showRelationships(prop); +                            }
+                        }
+                    });
+                };
+                
+                convertField = function(field){
+                    var el = $(&quot;#0\\.root&quot; + field.selector),
+                        autocompleteID = &quot;JSONEditorAutocomplete_&quot; + \
field.selector.replace(&quot;\\&quot;,&quot;&quot;), +                        \
autocompleteField = $('&lt;select class=&quot;form-control selectize&quot; \
type=&quot;text&quot; style=&quot;display:none !important;&quot; id=&quot;' + \
autocompleteID + '&quot;&gt;&lt;/select&gt;'), +                        onChange = \
function (value) { +                            var readPath = \
field.resourceCollection.path + &quot;/&quot; + value; +                            \
_this.editor.getEditor(&quot;root&quot; + \
field.selector.replace(&quot;\\&quot;,&quot;&quot;)).setValue(readPath); +            \
}; +                    
+                    el.attr(&quot;style&quot;,&quot;display: none \
!important&quot;).after(autocompleteField); +                    
+                    \
resourceCollectionUtils.setupAutocompleteField(autocompleteField, field, { onChange: \
onChange }); +                    
+                    if(!_this.data.newObject &amp;&amp; el.val().length){
+                        resourceDelegate.readResource(&quot;/&quot; + \
constants.context,el.val()).then(function(result){ +                            \
autocompleteField[0].selectize.addOption(result); +                            \
autocompleteField[0].selectize.setValue(result._id); +                        });
+                    }
+                };
+                
+                convertArrayField = function(prop) {
+                    _this.editor.getEditor('root' + \
prop.selector.replace(&quot;\\&quot;,&quot;&quot;)).destroy(); +                    \
addTab(prop, { +                        templateId : &quot;tabContentTemplate&quot;,
+                        tabView: new ResourceCollectionArrayView(),
+                        viewId: &quot;resourceCollectionArray-&quot; + \
prop.propName, +                        contentId: &quot;resource-&quot; + \
prop.propName, +                        contentClass: \
&quot;resourceCollectionArray&quot;, +                        headerText: prop.title,
+                        onChange: _.bind(_this.showPendingChanges, _this)
+                    });
+                };
+                
+                showRelationships = function(prop) {
+                    addTab(prop, {
+                        templateId : &quot;relationshipsTemplate&quot;,
+                        tabView: new ResourceCollectionRelationshipsView(),
+                        viewId: &quot;resourceCollectionRelationship-&quot; + \
prop.propName, +                        contentId: &quot;relationship-&quot; + \
prop.propName, +                        contentClass: \
&quot;resourceCollectionRelationships&quot;, +                        headerText: \
prop.resourceCollection.label +                    });
+                };
+                
+                addTab = function(prop, opts) {
+                    var tabHeader = \
_this.$el.find(&quot;#tabHeaderTemplate&quot;).clone(), +                        \
tabContent = _this.$el.find(&quot;#&quot; + opts.templateId).clone(); +               \
 +                    if(!_this.data.newObject) {
+                        tabHeader.attr(&quot;id&quot;, &quot;tabHeader_&quot; + \
opts.contentId); +                        \
tabHeader.find(&quot;a&quot;).attr(&quot;href&quot;,&quot;#&quot; + \
opts.contentId).text(opts.headerText); +                        
+                        tabContent.attr(&quot;id&quot;,opts.contentId);
+                        tabContent.find(&quot;.&quot; + \
opts.contentClass).attr(&quot;id&quot;, opts.viewId); +                        
+                        \
_this.$el.find(&quot;#linkedSystemsTabHeader&quot;).before(tabHeader); +              \
_this.$el.find(&quot;#resource-linkedSystems&quot;).before(tabContent); +             \
 +                        opts.tabView.render({ element: &quot;#&quot; + opts.viewId, \
prop: prop, schema: schema, onChange: opts.onChange }); +                    }
+                };
+                
+                getFields(schema.properties);
</ins><span class="cx">         }
</span><span class="cx">     }); 
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresourceListResourceViewjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ListResourceView.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ListResourceView.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ListResourceView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -291,7 +291,7 @@
</span><span class="cx">                         
</span><span class="cx">                         uiUtils.buildJQGrid(this, \
this.data.grid_id, { </span><span class="cx">                             url: \
this.getURL(), </span><del>-                            width: 920,
</del><ins>+                            width: \
this.$el.find(&quot;.resourcesContainer&quot;).width() - 40, </ins><span class="cx">  \
shrinkToFit: cols.length &lt;= 6 || false, </span><span class="cx">                   \
rowList: [10,20,50], </span><span class="cx">                             rowNum: \
(rowNum) ? parseInt(rowNum, 10) : 10, </span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresourceResourceCollectionArrayViewjs"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView.js \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView.js	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015 ForgeRock AS. All rights reserved.
+ *
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the License at
+ * http://forgerock.org/license/CDDLv1.0.html
+ * See the License for the specific language governing
+ * permission and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at http://forgerock.org/license/CDDLv1.0.html
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * &quot;Portions Copyrighted [year] [name of copyright owner]&quot;
+ */
+
+/*global define, $, _, Handlebars, form2js */
+
+define(&quot;org/forgerock/openidm/ui/common/resource/ResourceCollectionArrayView&quot;, \
[ +    &quot;org/forgerock/commons/ui/common/main/AbstractView&quot;,
+    &quot;org/forgerock/commons/ui/common/util/Constants&quot;,
+    &quot;org/forgerock/openidm/ui/common/delegates/ResourceDelegate&quot;,
+    &quot;org/forgerock/openidm/ui/common/util/ResourceCollectionUtils&quot;,
+    &quot;org/forgerock/openidm/ui/common/resource/GenericEditResourceView&quot;
+], function(AbstractView, constants, resourceDelegate, resourceCollectionUtils) {
+    var ResourceCollectionArrayView = AbstractView.extend({
+            template: \
&quot;templates/admin/resource/ResourceCollectionArrayViewTemplate.html&quot;, +      \
noBaseTemplate: true, +            events: {
+                &quot;click .add-array-item&quot;: &quot;addArrayItem&quot;,
+                &quot;click .remove-array-item&quot;: &quot;removeArrayItem&quot;,
+                &quot;click .resourceListItem&quot;: &quot;showResource&quot;
+            },
+            render: function (args, callback) {
+                var parentRender = _.bind(function() {
+                        this.parentRender(_.bind(function() {
+                            this.setupAutocomplete(this.data.prop, this.onChange);
+                            this.convertToHuman();
+                            
+                            if(callback) {
+                                callback();
+                            }
+                        }, this));
+                    }, this);
+                
+                if(args) {
+                    this.element = args.element;
+                    this.data.prop = args.prop;
+                    this.onChange = args.onChange;
+                    
+                    \
resourceDelegate.getSchema(this.data.prop.items.resourceCollection.path.split(&quot;/&quot;)).then(_.bind(function(schema) \
{ +                        this.data.propTitle = schema.title || \
this.data.prop.title; +                        
+                        this.data.headerValues = \
resourceCollectionUtils.getHeaderValues(this.data.prop.items.resourceCollection.query.fields, \
schema.properties); +
+                        parentRender();
+                    }, this));
+                } else {
+                    parentRender();
+                }
+            },
+            setupAutocomplete: function(prop) {
+                var autocompleteField = \
this.$el.parent().find(&quot;#autoCompleteResourceCollection_&quot; + prop.propName), \
+                    onChange = _.bind(function(value) { +                        var \
newVal = this.data.prop.items.resourceCollection.path + &quot;/&quot; + value; +      \
 +                        if(!_.contains(this.data.prop.value, newVal)) {
+                            if(!this.data.prop.value) {
+                                this.data.prop.value = [];
+                            }
+                            this.data.prop.value.push(newVal);
+                        }
+                    }, this);
+                
+                    \
resourceCollectionUtils.setupAutocompleteField(autocompleteField, prop, { onChange: \
onChange }); +            },
+            convertToHuman: function() {
+                var listElements = this.$el.find(&quot;.resourceListItem&quot;);
+                
+                _.each(listElements, _.bind(function(element) {
+                    var path = $(element).attr(&quot;resourcePath&quot;),
+                        getRowContents = function(txt) {
+                            return \
_.map(txt.split(resourceCollectionUtils.displayTextDelimiter), function(val) { +      \
return '&lt;div class=&quot;col-xs-2&quot;&gt;' +  val + '&lt;/div&gt;'; +            \
}).join(&quot;&quot;); +                        };
+                    if(path.indexOf(this.data.prop.items.resourceCollection.path) \
=== 0) { +                        \
if(resourceCollectionUtils.resourceCollectionCache[path]) { +                         \
$(element).find(&quot;.deleteArrayItem&quot;).before(getRowContents(resourceCollectionUtils.resourceCollectionCache[path]));
 +                        } else {
+                            resourceDelegate.readResource(&quot;/&quot; + \
constants.context, path).then(_.bind(function(result){ +                              \
var txt = resourceCollectionUtils.getDisplayText(this.data.prop, result); +           \
$(element).find(&quot;.deleteArrayItem&quot;).before(getRowContents(txt)); +          \
}, this)); +                        }
+                    } else {
+                        \
$(element).find(&quot;.deleteArrayItem&quot;).before(getRowContents(path)); +         \
} +                }, this));
+            },
+            addArrayItem: function(e) {
+                if(e) {
+                    e.preventDefault();
+                }
+                
+                this.render();
+                this.onChange();
+            },
+            removeArrayItem: function(e) {
+                var path = \
$(e.target).closest(&quot;.list-group-item&quot;).attr(&quot;resourcePath&quot;); +   \
 +                if(e) {
+                    e.preventDefault();
+                }
+                
+                this.data.prop.value = _.reject(this.data.prop.value, function(val) \
{ return val === path; }); +                
+                this.render();
+                this.onChange();
+            },
+            showResource: function(e) {
+                if(!$(e.target).hasClass(&quot;fa-times&quot;)){
+                    \
resourceCollectionUtils.showResource($(e.target).closest(&quot;.resourceListItem&quot;).attr(&quot;resourcePath&quot;));
 +                }
+            }
+        });
+
+    return ResourceCollectionArrayView;
+});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonresourceResourceCollectionRelationshipsViewjs"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView.js \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView.js	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,184 @@
</span><ins>+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2015 ForgeRock AS. All rights reserved.
+ *
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the License at
+ * http://forgerock.org/license/CDDLv1.0.html
+ * See the License for the specific language governing
+ * permission and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at http://forgerock.org/license/CDDLv1.0.html
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * &quot;Portions Copyrighted [year] [name of copyright owner]&quot;
+ */
+
+/*global define, $, _ */
+
+define(&quot;org/forgerock/openidm/ui/common/resource/ResourceCollectionRelationshipsView&quot;, \
[ +    &quot;org/forgerock/commons/ui/common/main/AbstractView&quot;,
+    &quot;org/forgerock/commons/ui/common/util/Constants&quot;,
+    &quot;org/forgerock/openidm/ui/common/delegates/ResourceDelegate&quot;,
+    &quot;org/forgerock/openidm/ui/common/util/ResourceCollectionUtils&quot;,
+    &quot;org/forgerock/commons/ui/common/util/ModuleLoader&quot;
+], function(AbstractView, constants, resourceDelegate, resourceCollectionUtils, \
ModuleLoader) { +    var ResourceCollectionRelationshipsView = AbstractView.extend({
+            template: \
&quot;templates/admin/resource/ResourceCollectionRelationshipsViewTemplate.html&quot;,
 +            noBaseTemplate: true,
+            events: {
+                &quot;change [name=viewType]&quot;: &quot;toggleView&quot;,
+                &quot;click .resourceListItem&quot;: &quot;showResource&quot;
+            },
+            toggleView: function(e) {
+                this.$el.find(&quot;.listTab&quot;).toggle();
+                this.$el.find(&quot;.graphTab&quot;).toggle();
+            },
+            render: function (args, callback) {
+                this.element = args.element;
+                this.data.prop = args.prop;
+                this.data.schema = args.schema;
+                
+                $.when(
+                    resourceDelegate.searchResource(
+                            args.prop.propName + ' eq &quot;' + args.prop.parentId + \
'&quot;&amp;_pageSize=100&amp;_sortKeys=' + \
args.prop.resourceCollection.query.fields[0], +                            \
args.prop.resourceCollection.path +                    ),
+                    ModuleLoader.load(&quot;d3&quot;)
+                ).then(_.bind(function(qry, d3) {
+                    var schema = this.data.schema.properties;
+                    
+                    this.d3 = d3;
+                    this.data.headerValues = \
resourceCollectionUtils.getHeaderValues(this.data.prop.resourceCollection.query.fields, \
schema); +
+                    this.data.relatedTo = _.map(qry[0].result, \
_.bind(function(relationship) { +                        return _.pick(relationship, \
&quot;_id&quot;, this.data.prop.resourceCollection.query.fields); +                   \
}, this)); +                    
+                    this.parentRender(_.bind(function() {
+                        if(this.data.relatedTo.length) {
+                            this.parentRender(_.bind(function() {
+                                this.loadTree();
+                                if(callback) {
+                                    callback();
+                                }
+                            }, this));
+                        } else {
+                            \
this.$el.closest(&quot;.container&quot;).find(&quot;.tab-menu&quot;).find(&quot;#tabHeader_relationship-&quot; \
+ this.data.prop.propName).hide(); +                        }
+                        if(callback) {
+                            callback();
+                        }
+                    }, this));
+                }, this));
+            },
+            showResource: function(e) {
+                resourceCollectionUtils.showResource($(e.target).closest(&quot;.resourceListItem&quot;).attr(&quot;resourcePath&quot;));
 +            },
+            loadTree: function() {
+                var treeData = {
+                        &quot;name&quot; : \
resourceCollectionUtils.getDisplayText(this.data.prop, this.data.prop.parentValue), + \
&quot;parent&quot; : &quot;null&quot;, +                        &quot;children&quot; \
: [ +
+                        ]
+                    },
+                    margin = {
+                        top: 20,
+                        right: 120,
+                        bottom: 20,
+                        left: 350
+                    },
+                    width = 1024 - margin.right - margin.left,
+                    height = 500 - margin.top - margin.bottom,
+                    i = 0,
+                    tree = this.d3.layout.tree().size([height, width]),
+                    diagonal = this.d3.svg.diagonal().projection(function(d) {
+                        return [d.y, d.x];
+                    }),
+                    svg = this.d3.select(&quot;#reportsGraphBody-&quot; + \
this.data.prop.propName ).append(&quot;svg&quot;) +                        \
.attr(&quot;width&quot;, width + margin.right + margin.left) +                        \
.attr(&quot;height&quot;, height + margin.top + margin.bottom) +                      \
.append(&quot;g&quot;) +                        .attr(&quot;transform&quot;, \
&quot;translate(&quot; + margin.left + &quot;,&quot; + margin.top + &quot;)&quot;), + \
root = null, +                    update = function(source) {
+                        var nodes = tree.nodes(root).reverse(),
+                            links = tree.links(nodes),
+                            nodeEnter,
+                            node,
+                            link;
+
+                        //Normalize for fixed-depth.
+                        nodes.forEach(function(data) { data.y = data.depth * 180; \
}); +
+                        //Declare the nodes
+                        node = svg.selectAll(&quot;g.node&quot;).data(nodes, \
function(data) { +                            if(!data.id) {
+                                data.id = ++i;
+                            }
+
+                            return data.id;
+                        });
+
+                        //Enter the nodes.
+                        nodeEnter = node.enter().append(&quot;g&quot;)
+                            .attr(&quot;class&quot;, &quot;node&quot;)
+                            .attr(&quot;transform&quot;, function(data) {
+                                return &quot;translate(&quot; + data.y + \
&quot;,&quot; + data.x + &quot;)&quot;; +                            });
+
+                        //Add Circles
+                        nodeEnter.append(&quot;circle&quot;)
+                            .attr(&quot;r&quot;, 10)
+                            .style(&quot;fill&quot;, &quot;#fff&quot;);
+
+                        //Add Text
+                        nodeEnter.append(&quot;svg:a&quot;)
+                            .attr(&quot;xlink:href&quot;, function(data){return \
data.url;}) +                            .append(&quot;text&quot;)
+                            .attr(&quot;x&quot;, function(data) {
+                                return data.children || data._children ? -13 : 13;
+                            })
+                            .attr(&quot;dy&quot;, &quot;.35em&quot;)
+                            .attr(&quot;text-anchor&quot;, function(data) {
+                                return data.children || data._children ? \
&quot;end&quot; : &quot;start&quot;; +                            })
+                            .html(function(data) { return data.name; })
+                            .style(&quot;fill-opacity&quot;, 1);
+
+                        //Generate the paths
+                        link = svg.selectAll(&quot;path.link&quot;).data(links, \
function(d) { +                            return d.target.id;
+                        });
+
+                        //Add the paths
+                        link.enter().insert(&quot;path&quot;, &quot;g&quot;)
+                            .attr(&quot;class&quot;, &quot;link&quot;)
+                            .attr(&quot;d&quot;, diagonal);
+                    };
+
+                _.each(this.data.relatedTo, _.bind(function(item){
+                    treeData.children.push({
+                        &quot;name&quot; : \
resourceCollectionUtils.getDisplayText(this.data.prop, item), +                       \
&quot;parent&quot; : &quot;null&quot;, +                        &quot;url&quot; : \
&quot;#resource/&quot; + this.data.prop.resourceCollection.path + &quot;/edit/&quot; \
+ item._id +&quot;/&quot; +                    });
+                }, this));
+
+                root = treeData;
+
+                update(root);
+            }
+        });
+
+    return ResourceCollectionRelationshipsView;
+});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonutilJSONEditorSetupUtilsjs"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/JSONEditorSetupUtils.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/JSONEditorSetupUtils.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/JSONEditorSetupUtils.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -36,6 +36,12 @@
</span><span class="cx">             if (this.path &amp;&amp; this.input &amp;&amp; \
this.label &amp;&amp; !this.input.id &amp;&amp; !this.label.htmlFor) { </span><span \
class="cx">                 this.input.id = (this.jsoneditor.options.uuid || \
this.jsoneditor.uuid) + &quot;.&quot; + this.path; </span><span class="cx">           \
this.label.htmlFor = (this.jsoneditor.options.uuid || this.jsoneditor.uuid) + \
&quot;.&quot; + this.path; </span><ins>+                
+                if(this.jsoneditor.options.formHorizontal) {
+                    \
$(this.jsoneditor.element).addClass(&quot;form-horizontal&quot;); +                   \
$(this.label).addClass(&quot;col-sm-2&quot;); +                    \
$(this.input).wrap(&quot;&lt;div class='col-sm-10'&gt;&lt;/div&gt;&quot;); +          \
} </ins><span class="cx">             }
</span><span class="cx">             return ret;
</span><span class="cx">         };
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainjsorgforgerockopenidmuicommonutilResourceCollectionUtilsjs"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/ResourceCollectionUtils.js \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/ResourceCollectionUtils.js	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/js/org/forgerock/openidm/ui/common/util/ResourceCollectionUtils.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,143 @@
</span><ins>+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright (c) 2011-2015 ForgeRock AS. All rights reserved.
+ *
+ * The contents of this file are subject to the terms
+ * of the Common Development and Distribution License
+ * (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the License at
+ * http://forgerock.org/license/CDDLv1.0.html
+ * See the License for the specific language governing
+ * permission and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL
+ * Header Notice in each file and include the License file
+ * at http://forgerock.org/license/CDDLv1.0.html
+ * If applicable, add the following below the CDDL Header,
+ * with the fields enclosed by brackets [] replaced by
+ * your own identifying information:
+ * &quot;Portions Copyrighted [year] [name of copyright owner]&quot;
+ */
+
+/*global define , _, $, Handlebars */
+/*jslint evil:true */
+
+/**
+ * @author huck.elliott
+ */
+define(&quot;org/forgerock/openidm/ui/common/util/ResourceCollectionUtils&quot;, [
+    &quot;org/forgerock/commons/ui/common/util/Constants&quot;,
+    &quot;org/forgerock/commons/ui/common/main/EventManager&quot;,
+    &quot;org/forgerock/openidm/ui/common/delegates/SearchDelegate&quot;
+], function (constants, eventManager, searchDelegate) {
+    var obj = {};
+    
+    obj.resourceCollectionCache = {};
+    
+    obj.displayTextDelimiter = &quot;, &quot;;
+        
+    obj.getDisplayText = function(prop, item){
+        var pathToResource = (prop.items) ? prop.items.resourceCollection.path : \
prop.resourceCollection.path, +            resourceKey = pathToResource + \
&quot;/&quot; + item._id, +            validDisplayProps = \
_.reject(obj.autocompleteProps(prop),function(p){  +                return (p \
&amp;&amp; !p.length) || !eval(&quot;item.&quot; + p);  +            }),
+            txt = _.map(validDisplayProps, function(p){
+                return eval(&quot;item.&quot; + p);
+            }).join(obj.displayTextDelimiter);
+        
+        if(!obj.resourceCollectionCache[resourceKey]) {
+            obj.resourceCollectionCache[resourceKey] = txt;
+        }
+        
+        return txt;
+    };
+    
+    obj.autocompleteProps = function(prop, showRaw) {
+        var fields = (prop.items) ? prop.items.resourceCollection.query.fields : \
prop.resourceCollection.query.fields; +        
+        if(showRaw) {
+            return fields;
+        } else {
+            return _.map(fields, function(field) { 
+                return field.replace(&quot;/&quot;,&quot;.&quot;);
+            });
+        }
+    };
+    
+    obj.setupAutocompleteField = function(autocompleteField, prop, opts) {
+        var pathToResource = (prop.items) ? prop.items.resourceCollection.path : \
prop.resourceCollection.path, +            defaultOpts = {
+                valueField: '_id',
+                searchField: obj.autocompleteProps(prop),
+                create: false,
+                preload: true,
+                placeholder: $.t(&quot;templates.admin.ResourceEdit.search&quot;,{ \
objectTitle: prop.title || prop.name }), +                render: {
+                    item: function(item, escape) {
+                        var txt = obj.getDisplayText(prop, item);
+                        return &quot;&lt;div&gt;&quot; + txt + \
&quot;&lt;/div&gt;&quot;; +                    },
+                    option: function(item, escape) {
+                        var txt = obj.getDisplayText(prop, item);
+                        return &quot;&lt;div&gt;&quot; + txt + \
&quot;&lt;/div&gt;&quot;; +                    }
+                },
+                load: _.bind(function(query, callback) {
+                    searchDelegate.searchResults(pathToResource, \
obj.autocompleteProps(prop, true), query).then(function(result) { +                   \
var convertNestedProps = function(item) { +                                    \
_.each(obj.autocompleteProps(prop), function(propName) { +                            \
if(propName.indexOf(&quot;.&quot;) &gt; -1) { +                                       \
item[propName] = eval(&quot;item.&quot; + propName); +                                \
} +                                    });
+                                    return item;
+                                },
+                                modifiedResult = _.map(result, function(item){
+                                    return convertNestedProps(item);
+                                });
+                                
+                            callback(modifiedResult);
+                        },
+                        function(){
+                            callback();
+                        }
+                    );
+                }, this)
+            };
+        
+        autocompleteField.selectize(_.extend({}, defaultOpts, opts || {}));
+    };
+    
+    obj.getHeaderValues = function(fields, schema) {
+        return _.map(fields, function(field) {
+            var propField = function() {
+                return eval(&quot;schema.&quot; + \
field.replace(&quot;/&quot;,&quot;.properties.&quot;)); +            };
+            
+            if(schema &amp;&amp; propField() &amp;&amp; propField().title &amp;&amp; \
propField().title.length) { +                return propField().title;
+            } else {
+                return field;
+            }
+        });
+    };
+    
+    obj.showResource = function(resourcePath) {
+        var args = resourcePath.split(&quot;/&quot;),
+            routeName = (args[0] !== &quot;system&quot;) ? \
&quot;adminEditManagedObjectView&quot; : &quot;adminEditSystemObjectView&quot;; +     \
 +        if(args.length &gt;= 3) {
+            eventManager.sendEvent(constants.ROUTE_REQUEST, {routeName: routeName, \
args: args}); +        }
+    };
+
+    Handlebars.registerHelper('nestedLookup', function(property,key) {
+        return property[key];
+    });
+    
+    return obj;
+});
</ins></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminlinkedViewLinkedViewhtml"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/linkedView/LinkedView.html \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/linkedView/LinkedView.html	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/linkedView/LinkedView.html	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+{{#if linkedResources}}
+&lt;form role=&quot;form&quot; class=&quot;form-horizontal&quot;&gt;
+    &lt;div class=&quot;form-group&quot;&gt;
+        &lt;label style=&quot;margin-left:15px;&quot; class=&quot;pull-left \
control-label&quot; for=&quot;linkedViewSelect&quot;&gt;{{t \
&quot;templates.admin.LinkedTemplate.linkedResource&quot;}}&lt;/label&gt; +        \
&lt;div class=&quot;col-sm-6&quot;&gt; +            &lt;select \
class=&quot;form-control&quot; id=&quot;linkedViewSelect&quot; \
name=&quot;linkedViewSelect&quot;&gt; +                {{#each_with_index \
linkedResources}} +                &lt;option \
value=&quot;{{index}}&quot;&gt;{{value}}&lt;/option&gt; +                \
{{/each_with_index}} +            &lt;/select&gt;
+            &lt;div class=&quot;validation-message&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;col-sm-1&quot;&gt;
+            &lt;a href=&quot;#&quot; id=&quot;linkToResource&quot; title=&quot;View \
Resource&quot;&gt;&lt;span class=&quot;fa \
fa-external-link&quot;&gt;&lt;/span&gt;&lt;/a&gt; +        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/form&gt;
+&lt;div style=&quot;clear:both;&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;linkedViewContent&quot;&gt;&lt;/div&gt;
+{{else}}
+&lt;h4 class=&quot;no-details&quot;&gt;
+    {{t &quot;templates.admin.LinkedTemplate.noLinkedSystems&quot;}}
+&lt;/h4&gt;
+{{/if}}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceEditResourceViewTemplatehtml"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/EditResourceViewTemplate.html \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/EditResourceViewTemplate.html	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/EditResourceViewTemplate.html	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -1,22 +1,95 @@
</span><del>-&lt;div class=&quot;container&quot;&gt;
-    &lt;div class=&quot;page-header resourcesContainer&quot;&gt;
-        &lt;div class='btn-toolbar pull-right'&gt;
-            &lt;div class='btn-group'&gt;
-                &lt;a href=&quot;#&quot;&gt;&lt;button class=&quot;btn \
btn-primary&quot; id=&quot;saveBtn&quot;&gt;{{t \
                &quot;common.form.save&quot;}}&lt;/button&gt;&lt;/a&gt;
-                {{#unless newObject}}
-                    &lt;a href=&quot;#&quot;&gt;&lt;button class=&quot;btn \
btn-primary&quot; id=&quot;resetBtn&quot;&gt;{{t \
                &quot;common.form.reset&quot;}}&lt;/button&gt;&lt;/a&gt;
-                    &lt;a href=&quot;#&quot;&gt;&lt;button class=&quot;btn \
btn-primary&quot; id=&quot;deleteBtn&quot;&gt;{{t \
                &quot;common.form.delete&quot;}}&lt;/button&gt;&lt;/a&gt;
-                {{/unless}}
-                &lt;a href=&quot;#&quot;&gt;&lt;button class=&quot;btn \
btn-primary&quot; id=&quot;backBtn&quot;&gt;{{t \
                &quot;templates.admin.ResourceEdit.backToList&quot;}}&lt;/button&gt;&lt;/a&gt;
                
-            &lt;/div&gt;
</del><ins>+&lt;div class=&quot;editResourceViewContainer&quot;&gt;
+    &lt;div class=&quot;back-bar&quot;&gt;
+        &lt;div class=&quot;container&quot;&gt;
+            &lt;a href=&quot;#&quot; \
id=&quot;backBtn&quot;&gt;{{backBtnText}}&lt;/a&gt; </ins><span class="cx">         \
&lt;/div&gt; </span><del>-        &lt;h3&gt;
-        {{#if newObject}}
-            {{t &quot;common.form.add&quot;}}
-        {{else}}
-            {{t &quot;common.form.edit&quot;}}
-        {{/if}}
-        &lt;/h3&gt;
</del><span class="cx">     &lt;/div&gt;
</span><del>-    &lt;div id=&quot;resource&quot; \
class=&quot;jsonEditor&quot;&gt;&lt;/div&gt; </del><ins>+    &lt;div \
class=&quot;container&quot;&gt; +        &lt;div class=&quot;page-header no-border \
profile-header&quot;&gt; +           &lt;div class=&quot;media &quot;&gt;
+              &lt;div class=&quot;media-left media-top&quot;&gt;
+                 &lt;span class=&quot;resource-avatar&quot;&gt;&lt;i class=&quot;fa \
{{#if newObject}}fa-plus{{else}}fa-cube{{/if}}&quot;&gt;&lt;/i&gt;&lt;/span&gt; +     \
&lt;/div&gt; +              &lt;div class=&quot;media-body  media-top&quot;&gt;
+                 &lt;h4 class=&quot;page-type&quot;&gt;{{objectTitle}}&lt;/h4&gt;
+                 &lt;h1 class=&quot;media-heading&quot;&gt;
+                    {{#if newObject}}{{t \
&quot;templates.admin.ResourceEdit.new&quot;}} \
{{objectTitle}}{{else}}{{objectDisplayText}}{{/if}} +                 &lt;/h1&gt;
+              &lt;/div&gt;
+           &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+	&lt;div class=&quot;container&quot;&gt;
+        &lt;div class=&quot; tab-menu&quot;&gt;
+           &lt;ul class=&quot;nav nav-tabs&quot; role=&quot;tablist&quot;&gt;
+              &lt;li class=&quot;dropdown pull-right tabdrop hide&quot;&gt;
+                 &lt;a class=&quot;dropdown-toggle&quot; \
data-toggle=&quot;dropdown&quot; href=&quot;#&quot;&gt;&lt;i \
class=&quot;icon-align-justify&quot;&gt;&lt;/i&gt; &lt;i class=&quot;fa \
fa-ellipsis-v&quot;&gt;&lt;/i&gt;&lt;/a&gt; +                 &lt;ul \
class=&quot;dropdown-menu&quot;&gt;&lt;/ul&gt; +              &lt;/li&gt;
+              &lt;li class=&quot;active&quot;&gt;&lt;a \
href=&quot;#resource-details&quot; role=&quot;tab&quot; data-toggle=&quot;tab&quot; \
aria-expanded=&quot;true&quot;&gt;&lt;span class=&quot;fa \
fa-list&quot;&gt;&lt;/span&gt; {{t \
&quot;templates.admin.ResourceEdit.details&quot;}}&lt;/a&gt;&lt;/li&gt; +             \
&lt;li id=&quot;linkedSystemsTabHeader&quot; style=&quot;display:none;&quot; {{#if \
newObject}}style=&quot;display:none;&quot;{{/if}}&gt;&lt;a \
href=&quot;#resource-linkedSystems&quot; role=&quot;tab&quot; \
data-toggle=&quot;tab&quot; aria-expanded=&quot;false&quot;&gt;{{t \
&quot;templates.admin.ResourceEdit.linkedSystems&quot;}}&lt;/a&gt;&lt;/li&gt; +       \
&lt;li id=&quot;tabHeaderTemplate&quot;&gt;&lt;a href=&quot;&quot; \
role=&quot;tab&quot; data-toggle=&quot;tab&quot; \
aria-expanded=&quot;false&quot;&gt;&lt;/a&gt;&lt;/li&gt; +           &lt;/ul&gt;
+        &lt;/div&gt;
+        &lt;!-- Tab panes --&gt;
+        &lt;div class=&quot;tab-content&quot;&gt;
+           &lt;div role=&quot;tabpanel&quot; class=&quot;tab-pane active&quot; \
id=&quot;resource-details&quot;&gt; +              &lt;div \
class=&quot;tab-pane-body&quot;&gt; +                 &lt;div \
class=&quot;panel-body&quot;&gt; +                    &lt;div class=&quot;panel \
panel-default panel-collapse&quot;&gt; +                       &lt;div \
class=&quot;panel-body&quot;&gt; +                          &lt;div \
id=&quot;resource&quot; class=&quot;jsonEditor&quot;&gt;&lt;/div&gt; +                \
&lt;/div&gt; +                    &lt;/div&gt;
+                 &lt;/div&gt;
+              &lt;/div&gt;
+           &lt;/div&gt;
+           &lt;div role=&quot;tabpanel&quot; class=&quot;tab-pane&quot; \
id=&quot;tabContentTemplate&quot;&gt; +              &lt;div \
class=&quot;tab-pane-body&quot;&gt; +                 &lt;div \
class=&quot;panel-body&quot;&gt; +                    &lt;div class=&quot;panel \
panel-default panel-collapse&quot;&gt; +                       &lt;div \
class=&quot;panel-body&quot;&gt; +                          &lt;div \
class=&quot;resourceCollectionArray&quot;&gt;&lt;/div&gt; +                       \
&lt;/div&gt; +                    &lt;/div&gt;
+                 &lt;/div&gt;
+              &lt;/div&gt;
+           &lt;/div&gt;
+           &lt;div role=&quot;tabpanel&quot; class=&quot;tab-pane&quot; \
id=&quot;relationshipsTemplate&quot;&gt; +              &lt;div \
class=&quot;tab-pane-body&quot;&gt; +                 &lt;div \
class=&quot;panel-body&quot;&gt; +                    &lt;div class=&quot;panel \
panel-default panel-collapse&quot;&gt; +                       &lt;div \
class=&quot;panel-body&quot;&gt; +                          &lt;div \
class=&quot;resourceCollectionRelationships&quot;&gt;&lt;/div&gt; +                   \
&lt;/div&gt; +                    &lt;/div&gt;
+                 &lt;/div&gt;
+              &lt;/div&gt;
+           &lt;/div&gt;
+           &lt;div role=&quot;tabpanel&quot; class=&quot;tab-pane&quot; \
id=&quot;resource-linkedSystems&quot;&gt; +              &lt;div \
class=&quot;tab-pane-body&quot;&gt; +                 &lt;div \
class=&quot;panel-body&quot;&gt; +                    &lt;div class=&quot;panel \
panel-default panel-collapse&quot;&gt; +                       &lt;div \
class=&quot;panel-body&quot;&gt; +                          &lt;div \
id=&quot;linkedView&quot;&gt;&lt;/div&gt; +                       &lt;/div&gt;
+                    &lt;/div&gt;
+                 &lt;/div&gt;
+              &lt;/div&gt;
+           &lt;/div&gt;
+           &lt;div class=&quot;panel-footer&quot;&gt;
+              &lt;div id=&quot;resourceChangesPending&quot; class=&quot;alert \
alert-warning&quot; style=&quot;display: none;&quot;&gt; +                  &lt;i \
class=&quot;fa fa-exclamation-circle&quot;&gt;&lt;/i&gt;&lt;strong&gt; {{t \
&quot;templates.mapping.changesPending&quot;}}&lt;/strong&gt; +                  \
&lt;span id=&quot;changedFields&quot;&gt;&lt;/span&gt; +              &lt;/div&gt;
+              &lt;div class=&quot;pull-right&quot;&gt;
+                 {{#unless newObject}}
+	               &lt;a href=&quot;#&quot; class=&quot;btn btn-default&quot; \
id=&quot;deleteBtn&quot;&gt;{{t &quot;common.form.delete&quot;}}&lt;/a&gt; +	         \
&lt;a href=&quot;#&quot; class=&quot;btn btn-default&quot; id=&quot;resetBtn&quot; \
disabled&gt;{{t &quot;common.form.reset&quot;}}&lt;/a&gt; +	            {{/unless}}
+	            &lt;a href=&quot;#&quot; class=&quot;btn btn-primary&quot; \
id=&quot;saveBtn&quot; disabled&gt;{{t &quot;common.form.save&quot;}}&lt;/a&gt; +     \
&lt;/div&gt; +           &lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
</ins><span class="cx"> &lt;/div&gt;
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceListResourceViewTemplatehtml"></a>
 <div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ListResourceViewTemplate.html \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ListResourceViewTemplate.html	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ListResourceViewTemplate.html	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -6,17 +6,17 @@
</span><span class="cx"> 
</span><span class="cx">         &lt;div class=&quot;btn-toolbar&quot; \
role=&quot;toolbar&quot; aria-label=&quot;toolbar&quot;&gt; </span><span class="cx">  \
&lt;div class=&quot;btn-group&quot; role=&quot;group&quot; aria-label=&quot;add \
resource&quot;&gt; </span><del>-                &lt;a \
href=&quot;{{addLinkHref}}&quot; title=&quot;{{t &quot;common.form.add&quot;}} \
{{pageTitle}}&quot;&gt;&lt;button class=&quot;btn btn-primary&quot; \
type=&quot;button&quot;&gt;{{t &quot;common.form.add&quot;}} \
{{pageTitle}}&lt;/button&gt;&lt;/a&gt; </del><ins>+                &lt;a \
href=&quot;{{addLinkHref}}&quot; title=&quot;{{t \
&quot;templates.admin.ResourceEdit.new&quot;}} {{pageTitle}}&quot;&gt;&lt;button \
class=&quot;btn btn-primary&quot; type=&quot;button&quot;&gt;&lt;span class=&quot;fa \
fa-plus&quot;&gt;&lt;/span&gt; {{t &quot;templates.admin.ResourceEdit.new&quot;}} \
{{pageTitle}}&lt;/button&gt;&lt;/a&gt; </ins><span class="cx">             \
&lt;/div&gt; </span><span class="cx">             {{#if hasData}}
</span><del>-                &lt;div class=&quot;btn-group&quot; \
                role=&quot;group&quot; aria-label=&quot;reload grid&quot;&gt;
-                   &lt;a href=&quot;#&quot;&gt;&lt;button type=&quot;button&quot;  \
class=&quot;btn btn-primary&quot;  id=&quot;reloadGridBtn&quot;&gt;{{t \
'common.form.reloadGrid'}}&lt;/button&gt;&lt;/a&gt; </del><ins>+                \
&lt;div class=&quot;btn-group pull-right&quot; role=&quot;group&quot; \
aria-label=&quot;delete selected&quot;&gt; +                    &lt;button \
type=&quot;button&quot;  class=&quot;btn btn-default&quot;  \
id=&quot;deleteSelected&quot; disabled&gt;&lt;span class=&quot;fa \
fa-trash&quot;&gt;&lt;/span&gt;{{t 'common.form.deleteSelected'}}&lt;/button&gt; \
</ins><span class="cx">                 &lt;/div&gt; </span><del>-                \
&lt;div class=&quot;btn-group&quot; role=&quot;group&quot; aria-label=&quot;clear \
                filters&quot;&gt;
-                    &lt;button type=&quot;button&quot;  class=&quot;btn \
btn-primary&quot;  id=&quot;clearFiltersBtn&quot;&gt;{{t \
'common.form.clearFilters'}}&lt;/button&gt; </del><ins>+                &lt;div \
class=&quot;btn-group pull-right&quot; role=&quot;group&quot; aria-label=&quot;clear \
filters&quot;&gt; +                    &lt;button type=&quot;button&quot;  \
class=&quot;btn btn-default&quot;  id=&quot;clearFiltersBtn&quot;&gt;&lt;span \
class=&quot;fa fa-times&quot;&gt;&lt;/span&gt;{{t \
'common.form.clearFilters'}}&lt;/button&gt; </ins><span class="cx">                 \
&lt;/div&gt; </span><del>-                &lt;div class=&quot;btn-group&quot; \
                role=&quot;group&quot; aria-label=&quot;delete selected&quot;&gt;
-                    &lt;button type=&quot;button&quot;  class=&quot;btn \
btn-primary&quot;  id=&quot;deleteSelected&quot; disabled&gt;{{t \
'common.form.deleteSelected'}}&lt;/button&gt; </del><ins>+                &lt;div \
class=&quot;btn-group pull-right&quot; role=&quot;group&quot; aria-label=&quot;reload \
grid&quot;&gt; +                   &lt;a href=&quot;#&quot;&gt;&lt;button \
type=&quot;button&quot;  class=&quot;btn btn-default&quot;  \
id=&quot;reloadGridBtn&quot;&gt;&lt;span class=&quot;fa \
fa-refresh&quot;&gt;&lt;/span&gt;{{t \
'common.form.reloadGrid'}}&lt;/button&gt;&lt;/a&gt; </ins><span class="cx">           \
&lt;/div&gt; </span><span class="cx">             {{/if}}
</span><span class="cx">         &lt;/div&gt;
</span><span class="lines">@@ -26,9 +26,9 @@
</span><span class="cx">         &lt;/div&gt;
</span><span class="cx">     {{/if}}
</span><span class="cx"> 
</span><del>-    &lt;div class=&quot;resourcesContainer&quot;&gt;
</del><ins>+    &lt;div class=&quot;resourcesContainer panel panel-default&quot;&gt;
</ins><span class="cx">         &lt;table id=&quot;{{grid_id}}&quot;&gt;
</span><del>-            &lt;tr&gt;&lt;td&gt;{{t \
&quot;templates.admin.ResourceList.noData&quot;}}&lt;/td&gt;&lt;/tr&gt; </del><ins>+  \
&lt;tr&gt;&lt;td class=&quot;noData&quot;&gt;{{t \
&quot;templates.admin.ResourceList.noData&quot;}}&lt;/td&gt;&lt;/tr&gt; </ins><span \
class="cx">         &lt;/table&gt; </span><span class="cx">         &lt;div \
id=&quot;{{grid_id}}_pager&quot;&gt;&lt;/div&gt; </span><span class="cx">     \
&lt;/div&gt; </span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceResourceCollectionArrayViewTemplatehtml"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionArrayViewTemplate.html \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionArrayViewTemplate.html	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionArrayViewTemplate.html	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+&lt;input type=&quot;hidden&quot; \
class=&quot;resourceCollectionArrayValue&quot; propName=&quot;{{prop.propName}}&quot; \
value=&quot;{{prop.value}}&quot;/&gt; +&lt;div class=&quot;list-table&quot;&gt;
+   &lt;ul class=&quot;list-group&quot; id=&quot;assignments-list&quot;&gt;
+      &lt;li class=&quot;list-group-header&quot;&gt;
+         &lt;div class=&quot;row&quot;&gt;
+            {{#each headerValues}}
+            &lt;div class=&quot;col-xs-2&quot;&gt;
+               {{this}}
+            &lt;/div&gt;
+            {{/each}}
+            &lt;div class=&quot;col-xs-1&quot;&gt; &lt;/div&gt;
+         &lt;/div&gt;
+      &lt;/li&gt;
+      {{#each prop.value}}
+      &lt;li class=&quot;list-group-item resourceListItem&quot; \
resourcePath=&quot;{{this}}&quot;&gt; +         &lt;div class=&quot;row&quot;&gt;
+            &lt;div class=&quot;col-xs-1  pull-right deleteArrayItem&quot;&gt;
+               &lt;div class=&quot;btn-group pull-right&quot;&gt;
+                  &lt;button class=&quot;btn btn-link \
remove-array-item&quot;&gt;&lt;i class=&quot;fa \
fa-times&quot;&gt;&lt;/i&gt;&lt;/button&gt; +               &lt;/div&gt;
+            &lt;/div&gt;
+         &lt;/div&gt;
+      &lt;/li&gt;
+      {{/each}}
+   &lt;/ul&gt;
+   &lt;div class=&quot;add-item-inline&quot;&gt;
+      &lt;div class=&quot;row&quot;&gt;
+         &lt;div class=&quot;col-sm-5&quot;&gt;
+            &lt;div class=&quot;form-group&quot;&gt;
+               &lt;select class=&quot;form-control selectize&quot; \
type=&quot;text&quot; style=&quot;display:none !important;&quot; \
id=&quot;autoCompleteResourceCollection_{{prop.propName}}&quot;&gt;&lt;/select&gt; +  \
&lt;/div&gt; +         &lt;/div&gt;
+         &lt;div class=&quot;col-sm-5&quot;&gt;
+               &lt;button class=&quot;btn btn-primary add-array-item&quot;&gt;&lt;i \
class=&quot;fa fa-plus&quot;&gt;&lt;/i&gt; {{t &quot;common.form.add&quot;}} \
{{propTitle}} &lt;/button&gt; +         &lt;/div&gt;
+      &lt;/div&gt;
+   &lt;/div&gt;
+&lt;/div&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuicommonsrcmainresourcestemplatesadminresourceResourceCollectionRelationshipsViewTemplatehtml"></a>
 <div class="addfile"><h4>Added: \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionRelationshipsViewTemplate.html \
(0 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionRelationshipsViewTemplate.html	 \
                (rev 0)
+++ trunk/openidm-ui/openidm-ui-common/src/main/resources/templates/admin/resource/ResourceCollectionRelationshipsViewTemplate.html	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;div class=&quot;btn-group btn-group-tabs&quot; \
data-toggle=&quot;buttons&quot; role=&quot;tablist&quot;&gt; +    &lt;label \
class=&quot;btn btn-default active&quot;&gt; +        &lt;input \
value=&quot;graphTab&quot; name=&quot;viewType&quot; type=&quot;radio&quot; \
role=&quot;tab&quot; data-toggle=&quot;tab&quot; \
aria-expanded=&quot;true&quot;&gt;&lt;span class=&quot;fa \
fa-line-chart&quot;&gt;&lt;/span&gt; +    &lt;/label&gt;
+    &lt;label class=&quot;btn btn-default&quot;&gt;
+        &lt;input value=&quot;listTab&quot; name=&quot;viewType&quot; \
type=&quot;radio&quot; role=&quot;tab&quot; data-toggle=&quot;tab&quot;&gt;&lt;span \
class=&quot;fa fa-list&quot;&gt;&lt;/span&gt; +    &lt;/label&gt;
+&lt;/div&gt;
+&lt;div class=&quot;graphTab&quot;&gt;
+    &lt;div class=&quot;reportsGraphBody&quot; \
id=&quot;reportsGraphBody-{{prop.propName}}&quot;&gt;&lt;/div&gt; +&lt;/div&gt;
+&lt;div  style=&quot;display:none;&quot; class=&quot;listTab&quot;&gt;
+   &lt;div class=&quot;list-table&quot;&gt;
+       &lt;ul class=&quot;list-group&quot;&gt;
+          &lt;li class=&quot;list-group-header&quot;&gt;
+             &lt;div class=&quot;row&quot;&gt;
+                {{#each headerValues}}
+                &lt;div class=&quot;col-xs-3&quot;&gt;
+                   {{this}}
+                &lt;/div&gt;
+                {{/each}}
+             &lt;/div&gt;
+          &lt;/li&gt;
+          {{#each relatedTo}}
+          &lt;li class=&quot;list-group-item resourceListItem&quot; \
resourcePath=&quot;{{../prop.resourceCollection.path}}/{{this._id}}&quot;&gt; +       \
&lt;div class=&quot;row&quot;&gt; +                {{#each \
../prop.resourceCollection.query.fields}} +                &lt;div \
class=&quot;col-xs-3&quot;&gt; +                       {{nestedLookup ../this this}}
+                &lt;/div&gt;
+                {{/each}}
+             &lt;/div&gt;
+          &lt;/li&gt;
+          {{/each}}
+       &lt;/ul&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkopenidmuiopenidmuiendusersrcmainjsconfigroutesAdminRoutesConfigjs"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-enduser/src/main/js/config/routes/AdminRoutesConfig.js \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-enduser/src/main/js/config/routes/AdminRoutesConfig.js	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-enduser/src/main/js/config/routes/AdminRoutesConfig.js	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -91,7 +91,8 @@
</span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, </span><span \
class="cx">             role: &quot;ui-admin&quot;, </span><span class="cx">          \
url: /^resource\/(managed)\/(.+)\/edit\/(.+)$/,  </span><del>-            pattern: \
&quot;resource/?/?/edit/?&quot; </del><ins>+            pattern: \
&quot;resource/?/?/edit/?&quot;, +            forceUpdate: true
</ins><span class="cx">         },
</span><span class="cx">         &quot;adminNewManagedObjectView&quot; : {
</span><span class="cx">             view: \
&quot;org/forgerock/openidm/ui/common/resource/EditResourceView&quot;, \
</span></span></pre></div> <a \
id="trunkopenidmuiopenidmuiendusersrcmainresourcescssuserless"></a> <div \
class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-enduser/src/main/resources/css/user.less (5369 => \
5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-enduser/src/main/resources/css/user.less	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-enduser/src/main/resources/css/user.less	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -1,22 +1,7 @@
</span><span class="cx"> /*
</span><span class="cx">   Clean up CSS
</span><span class="cx"> */
</span><del>-.resourcesContainer {
-  margin-bottom:25px;
</del><span class="cx"> 
</span><del>-  .btn-toolbar,  {
-    border-bottom: none;
-    padding-bottom: 0px;
-    margin-bottom: 0px;
-    margin-top: 0px;
-  }
-
-  .ui-jqgrid {
-    margin: auto;
-    margin-top: 10px;
-  }
-}
-
</del><span class="cx"> .checkboxList ol {
</span><span class="cx">   padding-left:20px;
</span><span class="cx">   margin-bottom:0px;
</span><span class="lines">@@ -118,7 +103,7 @@
</span><span class="cx"> */
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-#reportsGraphBody {
</del><ins>+#reportsGraphBody, .reportsGraphBody {
</ins><span class="cx">   overflow:hidden;
</span><span class="cx">   .node circle {
</span><span class="cx">     fill: #fff;
</span><span class="lines">@@ -141,4 +126,138 @@
</span><span class="cx"> 
</span><span class="cx"> .dialogInner .modal-header {
</span><span class="cx">   padding-bottom:15px;
</span><ins>+}
+/*
+
+  generic resource Display
+*/
+
+.resourcesContainer {
+  margin-bottom:25px;
+  padding-top: 10px;
+
+  .btn-toolbar,  {
+    border-bottom: none;
+    padding-bottom: 0px;
+    margin-bottom: 0px;
+    margin-top: 0px;
+  }
+  
+        
+  td.noData {
+      padding: 10px;
+  }
+  
+  .ui-widget-content {
+      border-color:transparent !important;
+  }
+
+  .ui-jqgrid {
+    margin: auto;
+    margin-top: 10px;
+    border: 1px solid #eee;
+    
+    .ui-state-default {
+        border-color:transparent;
+    }
+    tr.ui-row-ltr td {
+        padding: 14px;
+    }
+    tr.ui-row-ltr :first-child {
+        padding: 12px;
+    }
+    .ui-jqgrid-sortable {
+        text-transform: uppercase;
+    }
+    .ui-jqgrid-pager {
+        background-color: #fff;
+    }
+    thead {
+        border-bottom: 2px solid #ddd;
+        tr td {
+            padding-bottom: 10px;
+        }
+    }
+  }
+}
+
+.editResourceViewContainer {
+        .resource-avatar {
+          display: table;
+          background: @base-theme-color;
+          color: #fff;
+          text-align: center;
+        }
+    
+        .profile-header .resource-avatar {
+          width: 70px;
+          height: 70px;
+          border-radius: 70px;
+          line-height: 70px;
+          font-size: 36px;
+        }
+    
+        .panel-footer {
+          padding: 10px 15px;
+          border-radius: 0;
+          background-color: transparent;
+          overflow: auto;
+        }
+    
+        .page-header h4.page-type {
+          text-transform: uppercase;
+          font-size: 14px;
+          letter-spacing: 1px;
+          margin-bottom: 10px;
+          color: #666;
+          font-weight: 600;
+          margin-top: 0;
+        }
+    
+        .page-header .meta {
+          margin: -10px 0 10px;
+          color: #777;
+          text-transform: none;
+          letter-spacing: 0;
+          border-left: 1px solid #ddd;
+          padding-left: 5px;
+          margin-left: 4px;
+          font-weight: 400;
+          display: inline-block;
+          margin-bottom: 0;
+        }
+    
+        .tab-content {
+          background-color: #fff;
+          margin-bottom: 50px;
+        }
+        
+        .fa-search {
+           margin-top: 10px;
+        }
+        
+        .resourceCollectionTab {
+           padding-top: 10px;
+        }
+        
+        #resource&gt;div&gt;h3, .tabHeaderTemplate, .tabContentTemplate  {
+            display: none !important;
+        }
+        
+        .back-bar a {
+            color: #777;
+        }
+        
+        #linkToResource span{
+            margin-top: 10px;
+        }
+        
+        .well {
+            background-color: transparent;
+            border-color: transparent;
+        }
+        
+        li.resourceListItem:hover {
+            background-color: #ededed;
+        }
</ins><span class="cx"> }
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkopenidmuiopenidmuiendusersrcmainresourceslocalesentranslationjson"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-ui/openidm-ui-enduser/src/main/resources/locales/en/translation.json \
(5369 => 5370)</h4> <pre class="diff"><span>
<span class="info">--- \
trunk/openidm-ui/openidm-ui-enduser/src/main/resources/locales/en/translation.json	2015-05-28 \
                07:41:05 UTC (rev 5369)
+++ trunk/openidm-ui/openidm-ui-enduser/src/main/resources/locales/en/translation.json	2015-05-28 \
19:17:22 UTC (rev 5370) </span><span class="lines">@@ -167,12 +167,18 @@
</span><span class="cx">             {
</span><span class="cx">                 &quot;confirmDelete&quot;: &quot;Are you \
sure you want to delete this __objectTitle__?&quot;, </span><span class="cx">         \
&quot;confirmDeleteSelected&quot;: &quot;Are you sure you want to delete the selected \
__objectTitle__s?&quot;, </span><del>-                &quot;backToList&quot;: \
&quot;Back to List&quot;, </del><ins>+                &quot;backToList&quot;: \
&quot;Back to __objectTitle__ List&quot;, </ins><span class="cx">                 \
&quot;addSuccess&quot;: &quot;Successfully added __objectTitle__&quot;, </span><span \
class="cx">                 &quot;editSuccess&quot;: &quot;Successfully updated \
__objectTitle__&quot;, </span><span class="cx">                 \
&quot;deleteSuccess&quot;: &quot;Successfully deleted __objectTitle__&quot;, \
</span><span class="cx">                 &quot;deleteSelectedSuccess&quot;: \
&quot;Successfully deleted selected __objectTitle__s&quot;, </span><del>-             \
&quot;noData&quot;: &quot;No Data&quot; </del><ins>+                \
&quot;details&quot;: &quot;Details&quot;, +                &quot;noData&quot;: \
&quot;No Data&quot;, +                &quot;data&quot;: &quot;Data&quot;,
+                &quot;search&quot;: &quot;Enter search terms to find __objectTitle__ \
...&quot;, +                &quot;noPendingChanges&quot;: &quot;No pending \
changes&quot;, +                &quot;new&quot;: &quot;New&quot;,
+                &quot;linkedSystems&quot;: &quot;Linked Systems&quot;
</ins><span class="cx">             },
</span><span class="cx">             &quot;ResourceList&quot;:
</span><span class="cx">             {
</span></span></pre></div>
<a id="trunkopenidmzipsrcmainresourcesconfmanagedjson"></a>
<div class="modfile"><h4>Modified: \
trunk/openidm-zip/src/main/resources/conf/managed.json (5369 => 5370)</h4> <pre \
class="diff"><span> <span class="info">--- \
trunk/openidm-zip/src/main/resources/conf/managed.json	2015-05-28 07:41:05 UTC (rev \
                5369)
+++ trunk/openidm-zip/src/main/resources/conf/managed.json	2015-05-28 19:17:22 UTC \
(rev 5370) </span><span class="lines">@@ -62,7 +62,8 @@
</span><span class="cx">                     &quot;postalCode&quot;,
</span><span class="cx">                     &quot;country&quot;,
</span><span class="cx">                     &quot;stateProvince&quot;,
</span><del>-                    &quot;roles&quot;
</del><ins>+                    &quot;roles&quot;,
+                    &quot;manager&quot;
</ins><span class="cx">                 ],
</span><span class="cx">                 &quot;properties&quot; : {
</span><span class="cx">                     &quot;mail&quot; : {
</span><span class="lines">@@ -117,11 +118,11 @@
</span><span class="cx">                         &quot;items&quot; : {
</span><span class="cx">                             &quot;type&quot; : \
&quot;string&quot;, </span><span class="cx">                             \
&quot;resourceCollection&quot; : { </span><del>-                                \
&quot;path&quot; : &quot;managed/roles&quot;, </del><ins>+                            \
&quot;path&quot; : &quot;managed/role&quot;, </ins><span class="cx">                  \
&quot;query&quot; : { </span><del>-                                    \
                &quot;queryFilter&quot; : &quot;&quot;,
-                                    &quot;fields&quot; : [ ],
-                                    &quot;sortKeys&quot; : [ ]
</del><ins>+                                    &quot;queryFilter&quot; : \
&quot;true&quot;, +                                    &quot;fields&quot; : \
[&quot;properties/name&quot;], +                                    \
&quot;sortKeys&quot; : [&quot;properties/name&quot;] </ins><span class="cx">          \
} </span><span class="cx">                             }
</span><span class="cx">                         }
</span><span class="lines">@@ -154,11 +155,13 @@
</span><span class="cx">                         &quot;searchable&quot; : false,
</span><span class="cx">                         &quot;resourceCollection&quot; : {
</span><span class="cx">                             &quot;path&quot; : \
&quot;managed/user&quot;, </span><ins>+                            &quot;label&quot; \
: &quot;Reports&quot;, </ins><span class="cx">                             \
&quot;query&quot; : { </span><span class="cx">                                 \
&quot;queryFilter&quot; : &quot;true&quot;, </span><span class="cx">                  \
&quot;fields&quot; : [ </span><span class="cx">                                     \
&quot;userName&quot;, </span><del>-                                    \
&quot;mail&quot; </del><ins>+                                    \
&quot;givenName&quot;, +                                    &quot;sn&quot;
</ins><span class="cx">                                 ],
</span><span class="cx">                                 &quot;sortKeys&quot; : [
</span><span class="cx">                                     &quot;userName&quot;
</span></span></pre>
</div>
</div>
<div id="footer">Copyright (c) by ForgeRock. All rights reserved.</div>

</body>
</html>



_______________________________________________
CommitOpenIDM mailing list
CommitOpenIDM@forgerock.org
https://lists.forgerock.org/mailman/listinfo/commitopenidm


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic