Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)

99015: ACE-3703 - Refactor Repository Admin Console framework to allow the basic framework to work in Community version
    - Refactor of admin console core (non JMX) into Community project
    - Enterprise extensions extend core
    - Moved Interpreter consoles into Community Admin Console
    - Moved Node Browser into Community Admin Console


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@99076 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-03-09 21:20:38 +00:00
parent 58d58b2479
commit 48974b90cf
71 changed files with 1829 additions and 7 deletions

View File

@@ -0,0 +1,45 @@
# I18N messages for the Repository Admin Console
admin-console.header=Alfresco Admin Console
admin-console.help=Help
admin-console.success=Successfully saved values.
admin-console.host=Host
admin-console.ipaddress=IP
# Common label messages
admin-console.save=Save
admin-console.cancel=Cancel
admin-console.enabled=Enabled
admin-console.disabled=Disabled
admin-console.true=True
admin-console.false=False
admin-console.yesno.true=Yes
admin-console.yesno.false=No
admin-console.close=Close
admin-console.password.show=Show Password
admin-console.password.hide=Hide Password
admin-console.unavailable=Information is currently unavailable!
admin-console.not.installed=Not Installed
admin-console.requesterror=Request failed due to error.
# Admin Tool Group labels
admin-console.tool.group.general=General
admin-console.tool.group.support-tools=Support Tools
admin-console.tool.group.consoles=Consoles
# Individual Admin Tool labels - format is admin-console.tool.<tool-scriptid>.label/description
admin-console.tool.admin-communitysummary.label=System Summary
admin-console.tool.admin-communitysummary.description=Summary of general Alfresco System information
admin-console.tool.admin-tenantconsole.label=Tenant Console
admin-console.tool.admin-tenantconsole.description=Command console for Tenant admin.
admin-console.tool.admin-repoconsole.label=Model and Messages Console
admin-console.tool.admin-repoconsole.description=Command console for Model and Messages admin.
admin-console.tool.admin-workflowconsole.label=Workflow Console
admin-console.tool.admin-workflowconsole.description=Command console for Workflow admin.
admin-console.tool.admin-nodebrowser.label=Node Browser
admin-console.tool.admin-nodebrowser.description=Repository Node Browser tool.

View File

@@ -10,6 +10,8 @@
* Repository Admin Console
*
* Common JavaScript library functions.
*
* @author Kevin Roast
*/
/* Admin JavaScript namespace - public functions exposed through this namespace. */
@@ -70,6 +72,7 @@ var Admin = Admin || {};
var info =
{
id: scriptName,
uri: tool.URIs[0],
label: msg.get(labelId) != labelId ? msg.get(labelId) : tool.shortName,
group: group,
groupLabel: group != "" ? (msg.get(groupLabelId) != groupLabelId ? msg.get(groupLabelId) : String(group).replace(/_/g, " ")) : "",
@@ -141,6 +144,16 @@ var Admin = Admin || {};
return tool.id;
}
/**
* Return the URI of the default Admin Console tool (first tool indexed in the list)
*/
Admin.getDefaultToolURI = function getDefaultTool()
{
var tools = Admin.getConsoleTools(),
tool = tools[0][0];
return tool.uri;
}
/**
* Return an object containing IP metadata about the server instance.
*/

View File

@@ -7,9 +7,8 @@
*/
function main()
{
var surl = url.service + (url.service.lastIndexOf('/') !== url.service.length() - 1 ? '/' : "");
status.code = 301;
status.location = surl + Admin.getDefaultTool();
status.location = url.serviceContext + Admin.getDefaultToolURI();
status.redirect = true;
}

View File

@@ -0,0 +1,47 @@
<import resource="classpath:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Root page POST method
*/
function main()
{
var returnParams = "m=admin-console.success";
try
{
Admin.persistJMXFormData();
}
catch (e)
{
returnParams = "e=" + e.message;
}
// generate the return URL - using the supplied tool ID or default tool if not specified
// redrawing the appropriate tool page will retrieve the updated attribute values
status.code = 301;
status.location = url.serviceContext + (args.t ? args.t : Admin.getDefaultToolURI()) + "?" + returnParams;
status.redirect = true;
}
function debug()
{
// dump each form field in a name/value pair for easy log output
var params = [];
for each (field in formdata.fields)
{
params.push({
name: field.name,
value: field.value
});
}
model.params = params;
}
if (!args.debug)
{
main();
}
else
{
debug();
}

View File

@@ -6,10 +6,10 @@
@param title - Title msg for the page
@param readonly (default:false) - boolean read only flag, if true will not display the Submit buttons.
@param controller (default:"/enterprise/admin") - optionally override the Form controller
@param controller (default:"/admin") - optionally override the Form controller
@param params (default:"") - url encoded params to be added to the HTML form URL
-->
<#macro page title readonly=false controller="/enterprise/admin" params="" dialog=false>
<#macro page title readonly=false controller=DEFAULT_CONTROLLER!"/admin" params="" dialog=false>
<#assign FORM_ID="admin-jmx-form" />
<#if metadata??>
<#assign HOSTNAME>${msg("admin-console.host")}: ${metadata.hostname}</#assign>
@@ -465,7 +465,7 @@ Admin.addEventListener(window, 'load', function() {
<div class="sticky-wrapper">
<div class="header">
<span><a href="${url.serviceContext}/enterprise/admin">${msg("admin-console.header")}</a></span><#if metadata??><span class="meta">${HOSTNAME}</span><span class="meta">${HOSTADDR}</span></#if>
<span><a href="${url.serviceContext}${DEFAULT_CONTROLLER!"/admin"}">${msg("admin-console.header")}</a></span><#if metadata??><span class="meta">${HOSTNAME}</span><span class="meta">${HOSTADDR}</span></#if>
<div style="float:right"><a href="http://docs.alfresco.com/5.0/concepts/ch-administering.html" target="_blank">${msg("admin-console.help")}</a></div>
</div>
@@ -479,7 +479,7 @@ Admin.addEventListener(window, 'load', function() {
<#list tools as group>
<#list group as tool>
<#if tool_index = 0 && tool.group != ""></ul><h3>${tool.groupLabel}</h3><ul></#if>
<li class="<#if tool.selected><#local tool=tool.id/>selected</#if>"><a href="${tool.id}" class="tool-link" title="${tool.description?html}">${tool.label?html}</a></li>
<li class="<#if tool.selected><#local tool=tool.uri/>selected</#if>"><a href="${url.serviceContext}${tool.uri}" class="tool-link" title="${tool.description?html}">${tool.label?html}</a></li>
</#list>
</#list>
</#if>
@@ -507,7 +507,7 @@ Admin.addEventListener(window, 'load', function() {
</div>
</#if>
<div class="main">
<form id="${FORM_ID}" action="${url.serviceContext}${controller}?t=${tool}<#if params!="">&${params}</#if>" enctype="multipart/form-data" accept-charset="utf-8" method="post">
<form id="${FORM_ID}" action="${url.serviceContext}${controller}?t=${tool?url}<#if params!="">&${params}</#if>" enctype="multipart/form-data" accept-charset="utf-8" method="post">
<#-- Template-specific markup -->
<#nested>

View File

@@ -0,0 +1,10 @@
<webscript>
<shortname>Admin Console - Repo Model and Messages Admin Console</shortname>
<description><![CDATA[Admin Console WebScript that displays the Repo Model and Messages Console.]]></description>
<url>/admin/admin-repoconsole</url>
<family>AdminConsole</family>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction allow="readonly">required</transaction>
</webscript>

View File

@@ -0,0 +1,35 @@
<#include "../admin-template.ftl" />
<@page title=msg("repoconsole.title") controller="/admin/admin-repoconsole" readonly=true>
<div class="column-full">
<@section label=msg("repoconsole.command") />
<@text id="cmd" name="repo-cmd" label="" description="${cmd.description}" value="" controlStyle="width:55em" escape=false />
<@button label=msg("repoconsole.execute") onclick="AdminConsole_execute()" style="" />
</div>
<div class="column-full">
<@section label=msg("repoconsole.result") />
<pre>${cmd.output}</pre>
</div>
<script type="text/javascript">//<![CDATA[
/* Page load handler */
Admin.addEventListener(window, 'load', function() {
// bind Enter key press to call the Add button event handler
Admin.addEventListener(el("cmd"), 'keypress', function(e) {
if (e.keyCode === 13) AdminConsole_execute();
return true;
});
});
function AdminConsole_execute()
{
el("${FORM_ID}").submit();
return false;
}
//]]></script>
</@page>

View File

@@ -0,0 +1,24 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Repo Admin Console GET method
*/
function main()
{
model.attributes = [];
// cmd info
model.cmd = {
description: "Last command: " + Admin.encodeHtml(repoInterpreter.command) + "<br>" + "Duration: " + repoInterpreter.duration + "ms",
output: repoInterpreter.result
};
// mandatory model values for UI
model.tools = Admin.getConsoleTools("admin-repoconsole");
model.metadata = Admin.getServerMetaData();
}
main();

View File

@@ -0,0 +1,4 @@
repoconsole.title=Model and Messages Console
repoconsole.command=Command (type 'help' for help)
repoconsole.execute=Execute
repoconsole.result=Result

View File

@@ -0,0 +1,4 @@
repoconsole.title=Modell- und Nachrichtenkonsole
repoconsole.command=Befehl ('help' eingeben, um Hilfe aufzurufen)
repoconsole.execute=Ausf\u00fchren
repoconsole.result=Ergebnis

View File

@@ -0,0 +1,4 @@
repoconsole.title=Consola de mensajes y modelo
repoconsole.command=Comando (escriba 'help' para obtener ayuda)
repoconsole.execute=Ejecutar
repoconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
repoconsole.title=Console des mod\u00e8les et messages
repoconsole.command=Commande (saisissez 'help' pour obtenir de l'aide)
repoconsole.execute=Ex\u00e9cuter
repoconsole.result=R\u00e9sultat

View File

@@ -0,0 +1,4 @@
repoconsole.title=Console di modelli e messaggi
repoconsole.command=Comando (digitare 'help' per la guida)
repoconsole.execute=Esegui
repoconsole.result=Risultato

View File

@@ -0,0 +1,4 @@
repoconsole.title=\u30e2\u30c7\u30eb\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u30b3\u30f3\u30bd\u30fc\u30eb
repoconsole.command=\u30b3\u30de\u30f3\u30c9 \uff08\u30d8\u30eb\u30d7\u3092\u51fa\u3059\u306b\u306f 'help' \u3068\u5165\u529b\u3057\u307e\u3059\uff09
repoconsole.execute=\u5b9f\u884c
repoconsole.result=\u7d50\u679c

View File

@@ -0,0 +1,4 @@
repoconsole.title=Modell- og meldingskonsoll
repoconsole.command=Kommando (skriv 'help' for \u00e5 f\u00e5 hjelp)
repoconsole.execute=Utf\u00f8r
repoconsole.result=Resultat

View File

@@ -0,0 +1,4 @@
repoconsole.title=Model- en berichtenconsole
repoconsole.command=Opdracht (typ 'help' voor hulp)
repoconsole.execute=Uitvoeren
repoconsole.result=Resultaat

View File

@@ -0,0 +1,4 @@
repoconsole.title=Console de modelo e mensagens
repoconsole.command=Comando (digite 'help' para obter ajuda)
repoconsole.execute=Executar
repoconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
repoconsole.title=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439
repoconsole.command=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 (\u0432\u0432\u0435\u0434\u0438\u0442\u0435 help, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443)
repoconsole.execute=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c
repoconsole.result=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442

View File

@@ -0,0 +1,4 @@
repoconsole.title=\u6a21\u578b\u548c\u6d88\u606f\u63a7\u5236\u53f0
repoconsole.command=\u547d\u4ee4\uff08\u8f93\u5165 'help' \u83b7\u53d6\u5e2e\u52a9\uff09
repoconsole.execute=\u6267\u884c
repoconsole.result=\u7ed3\u679c

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Admin Console - Repo Admin Console</shortname>
<description><![CDATA[Repo Admin Console POST method for executing commands.]]></description>
<url>/admin/admin-repoconsole</url>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,20 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Repo Console POST method
*/
function main()
{
// execute supplied command
var cmd = args["repo-cmd"];
repoInterpreter.executeCmd(cmd);
// generate the return URL
status.code = 301;
status.location = url.service;
status.redirect = true;
}
main();

View File

@@ -0,0 +1,10 @@
<webscript>
<shortname>Admin Console - Tenant Admin Console</shortname>
<description><![CDATA[Admin Console WebScript that displays the Tenant Admin Console.]]></description>
<url>/admin/admin-tenantconsole</url>
<family>AdminConsole</family>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction allow="readonly">required</transaction>
</webscript>

View File

@@ -0,0 +1,35 @@
<#include "../admin-template.ftl" />
<@page title=msg("tenantconsole.title") controller="/admin/admin-tenantconsole" readonly=true>
<div class="column-full">
<@section label=msg("tenantconsole.command") />
<@text id="cmd" name="tenant-cmd" label="" description="${cmd.description}" value="" controlStyle="width:55em" escape=false />
<@button label=msg("tenantconsole.execute") onclick="AdminConsole_execute()" style="" />
</div>
<div class="column-full">
<@section label=msg("tenantconsole.result") />
<pre>${cmd.output}</pre>
</div>
<script type="text/javascript">//<![CDATA[
/* Page load handler */
Admin.addEventListener(window, 'load', function() {
// bind Enter key press to call the Add button event handler
Admin.addEventListener(el("cmd"), 'keypress', function(e) {
if (e.keyCode === 13) AdminConsole_execute();
return true;
});
});
function AdminConsole_execute()
{
el("${FORM_ID}").submit();
return false;
}
//]]></script>
</@page>

View File

@@ -0,0 +1,24 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Tenant Admin Console GET method
*/
function main()
{
model.attributes = [];
// cmd info
model.cmd = {
description: "Last command: " + Admin.encodeHtml(tenantInterpreter.command) + "<br>" + "Duration: " + tenantInterpreter.duration + "ms",
output: tenantInterpreter.result
};
// mandatory model values for UI
model.tools = Admin.getConsoleTools("admin-tenantconsole");
model.metadata = Admin.getServerMetaData();
}
main();

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Tenant Admin Console
tenantconsole.command=Command (type 'help' for help)
tenantconsole.execute=Execute
tenantconsole.result=Result

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Mandanten Admin Konsole
tenantconsole.command=Befehl ('help' eingeben, um Hilfe aufzurufen)
tenantconsole.execute=Ausf\u00fchren
tenantconsole.result=Ergebnis

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Consola Admin de Inquilino
tenantconsole.command=Comando (escriba 'help' para obtener ayuda)
tenantconsole.execute=Ejecutar
tenantconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Console d'administration de la gestion des entrep\u00f4ts en colocation
tenantconsole.command=Commande (saisissez 'help' pour obtenir de l'aide)
tenantconsole.execute=Ex\u00e9cuter
tenantconsole.result=R\u00e9sultat

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Console di amministrazione dei tenant
tenantconsole.command=Comando (digitare 'help' per la guida)
tenantconsole.execute=Esegui
tenantconsole.result=Risultato

View File

@@ -0,0 +1,4 @@
tenantconsole.title=\u30c6\u30ca\u30f3\u30c8\u7ba1\u7406\u8005\u30b3\u30f3\u30bd\u30fc\u30eb
tenantconsole.command=\u30b3\u30de\u30f3\u30c9 \uff08\u30d8\u30eb\u30d7\u3092\u51fa\u3059\u306b\u306f 'help' \u3068\u5165\u529b\u3057\u307e\u3059\uff09
tenantconsole.execute=\u5b9f\u884c
tenantconsole.result=\u7d50\u679c

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Leietakeradmin.konsoll
tenantconsole.command=Kommando (skriv 'help' for \u00e5 f\u00e5 hjelp)
tenantconsole.execute=Utf\u00f8r
tenantconsole.result=Resultat

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Tenant-beheerconsole
tenantconsole.command=Opdracht (typ 'help' voor hulp)
tenantconsole.execute=Uitvoeren
tenantconsole.result=Resultaat

View File

@@ -0,0 +1,4 @@
tenantconsole.title=Console de Administra\u00e7\u00e3o do Tenant
tenantconsole.command=Comando (digite 'help' para obter ajuda)
tenantconsole.execute=Executar
tenantconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
tenantconsole.title=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439
tenantconsole.command=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 (\u0432\u0432\u0435\u0434\u0438\u0442\u0435 help, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443)
tenantconsole.execute=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c
tenantconsole.result=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442

View File

@@ -0,0 +1,4 @@
tenantconsole.title=\u79df\u6237\u7ba1\u7406\u63a7\u5236\u53f0
tenantconsole.command=\u547d\u4ee4\uff08\u8f93\u5165 'help' \u83b7\u53d6\u5e2e\u52a9\uff09
tenantconsole.execute=\u6267\u884c
tenantconsole.result=\u7ed3\u679c

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Admin Console - Tenant Admin Console</shortname>
<description><![CDATA[Tenant Admin Console POST method for executing commands.]]></description>
<url>/admin/admin-tenantconsole</url>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,20 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Tenant Console POST method
*/
function main()
{
// execute supplied command
var cmd = args["tenant-cmd"];
tenantInterpreter.executeCmd(cmd);
// generate the return URL
status.code = 301;
status.location = url.service;
status.redirect = true;
}
main();

View File

@@ -0,0 +1,10 @@
<webscript>
<shortname>Admin Console - Workflow Admin Console</shortname>
<description><![CDATA[Admin Console WebScript that displays the Workflow Admin Console.]]></description>
<url>/admin/admin-workflowconsole</url>
<family>AdminConsole</family>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction allow="readonly">required</transaction>
</webscript>

View File

@@ -0,0 +1,35 @@
<#include "../admin-template.ftl" />
<@page title=msg("workflowconsole.title") controller="/admin/admin-workflowconsole" readonly=true>
<div class="column-full">
<@section label=msg("workflowconsole.command") />
<@text id="cmd" name="workflow-cmd" label="" description="${cmd.description}" value="" controlStyle="width:55em" escape=false />
<@button label=msg("workflowconsole.execute") onclick="AdminConsole_execute()" style="" />
</div>
<div class="column-full">
<@section label=msg("workflowconsole.result") />
<pre>${cmd.output}</pre>
</div>
<script type="text/javascript">//<![CDATA[
/* Page load handler */
Admin.addEventListener(window, 'load', function() {
// bind Enter key press to call the Add button event handler
Admin.addEventListener(el("cmd"), 'keypress', function(e) {
if (e.keyCode === 13) AdminConsole_execute();
return true;
});
});
function AdminConsole_execute()
{
el("${FORM_ID}").submit();
return false;
}
//]]></script>
</@page>

View File

@@ -0,0 +1,24 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Workflow Admin Console GET method
*/
function main()
{
model.attributes = [];
// cmd info
model.cmd = {
description: "Last command: " + Admin.encodeHtml(workflowInterpreter.command) + "<br>" + "Duration: " + workflowInterpreter.duration + "ms",
output: workflowInterpreter.result
};
// mandatory model values for UI
model.tools = Admin.getConsoleTools("admin-workflowconsole");
model.metadata = Admin.getServerMetaData();
}
main();

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Workflow Admin Console
workflowconsole.command=Command (type 'help' for help)
workflowconsole.execute=Execute
workflowconsole.result=Result

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Konsole f\u00fcr Arbeitsablauf-Admin
workflowconsole.command=Befehl ('help' eingeben, um Hilfe aufzurufen)
workflowconsole.execute=Ausf\u00fchren
workflowconsole.result=Ergebnis

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Consola de administraci\u00f3n de flujo de trabajo
workflowconsole.command=Comando (escriba 'help' para obtener ayuda)
workflowconsole.execute=Ejecutar
workflowconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Console d'administration du workflow
workflowconsole.command=Commande (saisissez 'help' pour obtenir de l'aide)
workflowconsole.execute=Ex\u00e9cuter
workflowconsole.result=R\u00e9sultat

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Console di amministazione dei workflow
workflowconsole.command=Comando (digitare 'help' per la guida)
workflowconsole.execute=Esegui
workflowconsole.result=Risultato

View File

@@ -0,0 +1,4 @@
workflowconsole.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb
workflowconsole.command=\u30b3\u30de\u30f3\u30c9 \uff08\u30d8\u30eb\u30d7\u3092\u51fa\u3059\u306b\u306f 'help' \u3068\u5165\u529b\u3057\u307e\u3059\uff09
workflowconsole.execute=\u5b9f\u884c
workflowconsole.result=\u7d50\u679c

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Arbeidsflyt admin-konsoll
workflowconsole.command=Kommando (skriv 'help' for \u00e5 f\u00e5 hjelp)
workflowconsole.execute=Utf\u00f8r
workflowconsole.result=Resultat

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Werkstroombeheerconsole
workflowconsole.command=Opdracht (typ 'help' voor hulp)
workflowconsole.execute=Uitvoeren
workflowconsole.result=Resultaat

View File

@@ -0,0 +1,4 @@
workflowconsole.title=Console de admin do fluxo de trabalho
workflowconsole.command=Comando (digite 'help' para obter ajuda)
workflowconsole.execute=Executar
workflowconsole.result=Resultado

View File

@@ -0,0 +1,4 @@
workflowconsole.title=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432
workflowconsole.command=\u041a\u043e\u043c\u0430\u043d\u0434\u0430 (\u0432\u0432\u0435\u0434\u0438\u0442\u0435 help, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443)
workflowconsole.execute=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c
workflowconsole.result=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442

View File

@@ -0,0 +1,4 @@
workflowconsole.title=\u5de5\u4f5c\u6d41\u7a0b\u7ba1\u7406\u63a7\u5236\u53f0
workflowconsole.command=\u547d\u4ee4\uff08\u8f93\u5165 'help' \u83b7\u53d6\u5e2e\u52a9\uff09
workflowconsole.execute=\u6267\u884c
workflowconsole.result=\u7ed3\u679c

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Admin Console - Workflow Admin Console</shortname>
<description><![CDATA[Workflow Admin Console POST method for executing commands.]]></description>
<url>/admin/admin-workflowconsole</url>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,20 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Workflow Console POST method
*/
function main()
{
// execute supplied command
var cmd = args["workflow-cmd"];
workflowInterpreter.executeCmd(cmd);
// generate the return URL
status.code = 301;
status.location = url.service;
status.redirect = true;
}
main();

View File

@@ -0,0 +1,10 @@
<webscript>
<shortname>Admin Console - Node Browser</shortname>
<description><![CDATA[Admin Console WebScript that displays the Node Browser.]]></description>
<url>/admin/admin-nodebrowser</url>
<family>AdminConsole</family>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction allow="readonly">required</transaction>
</webscript>

View File

@@ -0,0 +1,283 @@
<#assign null><span style="color:red">${msg("nodebrowser.null")?html}</span></#assign>
<#assign none><span style="color:red">${msg("nodebrowser.none")?html}</span></#assign>
<#assign collection>${msg("nodebrowser.collection")?html}</#assign>
<#macro dateFormat date>${date?string("dd MMM yyyy HH:mm:ss 'GMT'Z '('zzz')'")}</#macro>
<#macro propValue p>
<#if p.value??>
<#if p.value?is_date>
<@dateFormat p.value />
<#elseif p.value?is_boolean>
${p.value?string}
<#elseif p.value?is_number>
${p.value?c}
<#elseif p.value?is_string>
${p.value?html}
<#elseif p.value?is_hash>
<#assign result = "{"/>
<#assign first = true />
<#list p.value?keys as key>
<#if first = false>
<#assign result = result + ", "/>
</#if>
<#assign result = result + "${key}=${p.value[key]?html}" />
<#assign first = false/>
</#list>
<#assign result = result + "}"/>
${result}
</#if>
<#else>
${null}
</#if>
</#macro>
<#macro contentUrl nodeRef prop>
${url.serviceContext}/api/node/${nodeRef?replace("://","/")}/content;${prop?url}
</#macro>
<#include "../admin-template.ftl" />
<@page title=msg("nodebrowser.title") controller="/admin/admin-nodebrowser" readonly=true>
<div class="column-full">
<@section label=msg("nodebrowser.store") />
<@options name="nodebrowser-store" style="display:inline" valueStyle="display:inline" onchange="AdminConsole_execute('root')" value="${args.store!'workspace://SpacesStore'}">
<#list stores as s>
<@option label=s value=s />
</#list>
</@options>
<@button label=msg("nodebrowser.root") onclick="AdminConsole_execute('root')" />
<#if action??><@button label=msg("nodebrowser.refresh") onclick="AdminConsole_execute('${action?html}')" class="input" style="position:absolute;top:60px;left:1042px" /></#if>
<@section label=msg("nodebrowser.query") />
<@options name="nodebrowser-search" style="display:inline" valueStyle="display:inline" value="${args.searcher!''}">
<@option label="noderef" value="noderef" />
<@option label="fts-alfresco" value="fts-alfresco" />
<@option label="lucene" value="lucene" />
<@option label="xpath" value="xpath" />
<@option label="selectnodes" value="selectnodes" />
<@option label="cmis-strict" value="cmis-strict" />
<@option label="cmis-alfresco" value="cmis-alfresco" />
<@option label="db-afts" value="db-afts" />
<@option label="db-cmis" value="db-cmis" />
</@options>
<@text id="query" name="nodebrowser-query" label="" value="${query!''}" style="display:inline" valueStyle="display:inline" controlStyle="width:50em" />
<@button label=msg("nodebrowser.execute") onclick="AdminConsole_execute('search')" />
<@tsection label=msg("nodebrowser.search-settings")>
<div class="column-left">
<@text name="nodebrowser-query-maxresults" label=msg("nodebrowser.maxresults") value="${args.maxResults!''}" />
</div>
<div class="column-right">
<@text name="nodebrowser-query-skipcount" label=msg("nodebrowser.skipcount") value="${args.skipCount!''}" />
</div>
</@tsection>
<!-- hidden values set by button and key events to provide action ID to the Form POST -->
<@hidden name="nodebrowser-action" id="action" />
<@hidden name="nodebrowser-action-value" id="action-value" value="${actionValue!''}" />
</div>
<#if result??>
<#if result.info??>
<div class="column-full">
<a name="parent"></a><a name="children"></a>
<@section label=msg("nodebrowser.node-info") />
<table id="info-table" class="node">
<tr><td class="node-info">${msg("nodebrowser.reference")}</td><td>${result.info.nodeRef}</td></tr>
<tr><td class="node-info">${msg("nodebrowser.path")}</td><td style="word-break:break-all">${result.info.path!""}</td></tr>
<tr><td class="node-info">${msg("nodebrowser.type")}</td><td>${result.info.type}</td></tr>
<tr><td class="node-info">${msg("nodebrowser.parent")}</td><td><a href="#" onclick="AdminConsole_parentClick('${result.info.parent}');return false;">${result.info.parent}</a></td></tr>
</table>
</div>
</#if>
<#if result.properties??>
<div class="column-full">
<#assign propsMsg>${msg("nodebrowser.properties")} (<#if result.properties??>${result.properties?size?c}<#else>0</#if>)</#assign>
<@section label=propsMsg />
<table id="properties-table" class="node grid">
<tr>
<th>${msg("nodebrowser.name")}</th>
<th>${msg("nodebrowser.type")}</th>
<th>${msg("nodebrowser.value")}</th>
<th>${msg("nodebrowser.residual")}</th>
</tr>
<#list result.properties as p>
<tr>
<td>${p.name.prefixedName}</td>
<td><#if p.typeName??>${p.typeName.prefixedName}<#else>${none}</#if></td>
<td><#if (p.values?size > 1)><span style="color:red">${collection} (${p.values?size?c})</span><br></#if><#list p.values as v><#if v.content><a target="new" href="<@contentUrl result.info.nodeRef p.name.prefixedName/>"></#if><@propValue v/><#if v.content></a></#if><#if v_has_next><br></#if></#list></td>
<td>${p.residual?string}</td>
</tr>
</#list>
</table>
</div>
</#if>
<#if result.aspects??>
<div class="column-full">
<#assign aspectMsg>${msg("nodebrowser.aspects")} (<#if result.aspects??>${result.aspects?size?c}<#else>0</#if>)</#assign>
<@section label=aspectMsg />
<table id="aspects-table" class="node">
<#list result.aspects as a>
<tr><td>${a.prefixedName}</td></tr>
</#list>
</table>
</div>
</#if>
<div class="column-full">
<#assign childMsg><#if action?? && action="search">${msg("nodebrowser.results")}<#else>${msg("nodebrowser.children")}</#if> (${result.children?size?c})</#assign>
<@section label=childMsg />
<table id="child-table" class="node grid">
<tr>
<th>${msg("nodebrowser.name")}</th>
<th>${msg("nodebrowser.child-node")}</th>
<th>${msg("nodebrowser.primary")}</th>
<th>${msg("nodebrowser.association-type")}</th>
<th>${msg("nodebrowser.index")}</th>
</tr>
<#list result.children as n>
<tr>
<td><a href="#" onclick="AdminConsole_childClick('${n.childRef}');return false;">${n.QName}</a></td>
<td><a href="#" onclick="AdminConsole_childClick('${n.childRef}');return false;">${n.childRef}</a></td>
<td>${n.primary?string}</td>
<td>${n.typeQName}</td>
<td>${n_index}</td>
</tr>
</#list>
</table>
</div>
<#if result.parents??>
<div class="column-full">
<#assign parentMsg>${msg("nodebrowser.parents")} (<#if result.parents??>${result.parents?size?c}<#else>0</#if>)</#assign>
<@section label=parentMsg />
<table id="parents-table" class="node grid">
<tr>
<th>${msg("nodebrowser.name")}</th>
<th>${msg("nodebrowser.parent-type")}</th>
<th>${msg("nodebrowser.parent-reference")}</th>
<th>${msg("nodebrowser.primary")}</th>
<th>${msg("nodebrowser.association-type")}</th>
</tr>
<#list result.parents as p>
<tr>
<td>${p.name.prefixedName}</td>
<td>${p.parentTypeName.prefixedName}</td>
<td><a href="#" onclick="AdminConsole_parentClick('${p.parentRef}');return false;">${p.parentRef}</a></td></td>
<td>${p.primary?string}</td>
<td><#if p.typeName??>${p.typeName.prefixedName}<#else>${none}</#if></td>
</tr>
</#list>
</table>
</div>
</#if>
<#if result.assocs??>
<div class="column-full">
<#assign assocsMsg>${msg("nodebrowser.associations")} (<#if result.assocs??>${result.assocs?size?c}<#else>0</#if>)</#assign>
<@section label=assocsMsg />
<table id="assocs-table" class="node grid">
<tr>
<th>${msg("nodebrowser.type")}</th>
<th>${msg("nodebrowser.target-reference")}</th>
<th>${msg("nodebrowser.association-type")}</th>
</tr>
<#list result.assocs as a>
<tr>
<td>${a.targetTypeName.prefixedName}</td>
<td><a href="#" onclick="AdminConsole_parentClick('${a.targetRef}');return false;">${a.targetRef}</a></td></td>
<td><#if a.typeName??>${a.typeName.prefixedName}<#else>${none}</#if></td>
</tr>
</#list>
</table>
</div>
</#if>
<#if result.sourceAssocs??>
<div class="column-full">
<#assign sassocsMsg>${msg("nodebrowser.source-assocs")} (<#if result.sourceAssocs??>${result.sourceAssocs?size?c}<#else>0</#if>)</#assign>
<@section label=sassocsMsg />
<table id="sourceassocs-table" class="node grid">
<tr>
<th>${msg("nodebrowser.type")}</th>
<th>${msg("nodebrowser.source-reference")}</th>
<th>${msg("nodebrowser.association-type")}</th>
</tr>
<#list result.sourceAssocs as a>
<tr>
<td>${a.sourceTypeName.prefixedName}</td>
<td><a href="#" onclick="AdminConsole_parentClick('${a.sourceRef}');return false;">${a.sourceRef}</a></td></td>
<td><#if a.typeName??>${a.typeName.prefixedName}<#else>${none}</#if></td>
</tr>
</#list>
</table>
</div>
</#if>
<#if result.permissions??>
<div class="column-full">
<@section label=msg("nodebrowser.permissions") />
<table id="perminfo-table" class="node">
<tr><td>${msg("nodebrowser.inherits")}: ${result.permissions.inherit?string}</td></tr>
<tr><td>${msg("nodebrowser.owner")}: ${result.permissions.owner!""}</td></tr>
</table>
<table id="permissions-table" class="node grid">
<tr>
<th>${msg("nodebrowser.permission")}</th>
<th>${msg("nodebrowser.authority")}</th>
<th>${msg("nodebrowser.access")}</th>
</tr>
<#list result.permissions.entries as p>
<tr>
<td>${p.permission}</td>
<td>${p.authority}</td>
<td>${p.accessStatus}</td>
</tr>
</#list>
</table>
</div>
</#if>
</#if>
<#if args.in??><br><p>Processed in ${args.in?html}ms</p></#if>
<script type="text/javascript">//<![CDATA[
/* Page load handler */
Admin.addEventListener(window, 'load', function() {
// bind Enter key press to call the Execute search button event handler
Admin.addEventListener(el("query"), 'keypress', function(e) {
if (e.keyCode === 13) AdminConsole_execute('search');
return true;
});
<#if args.nodeRef??>
AdminConsole_execute('search');
</#if>
});
function AdminConsole_execute(action)
{
el("action").value = action;
el("${FORM_ID}").submit();
return false;
}
function AdminConsole_childClick(ref)
{
el("action-value").value = ref;
AdminConsole_execute("children");
}
function AdminConsole_parentClick(ref)
{
el("action-value").value = ref;
AdminConsole_execute("parent");
}
//]]></script>
</@page>

View File

@@ -0,0 +1,38 @@
<import resource="classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js">
/**
* Repository Admin Console
*
* Node Browser GET method
*/
function main()
{
// available repository stores
model.stores = utils.getStores();
// action persisted values
model.action = args.action;
model.actionValue = args.actionValue;
// special case for "nodeRef" argument
// support URL driven NodeRef argument to the Node Browser page e.g. /admin-nodebrowser?nodeRef=workspace://SpacesStore/...
model.query = args.query;
if (args.nodeRef)
{
model.query = args.nodeRef;
}
// result info from session
if (args.resultId)
{
model.result = session.getValue(args.resultId);
}
// mandatory model values for UI
model.attributes = [];
model.tools = Admin.getConsoleTools("admin-nodebrowser");
model.metadata = Admin.getServerMetaData();
}
main();

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Node Browser
nodebrowser.query=Query
nodebrowser.execute=Execute
nodebrowser.store=Store
nodebrowser.refresh=Refresh
nodebrowser.root=Root List
nodebrowser.search-settings=Search Advanced Settings
nodebrowser.maxresults=Max Results
nodebrowser.skipcount=Skip Count
nodebrowser.null=null
nodebrowser.none=<none>
nodebrowser.collection=<collection>
nodebrowser.results=Results
nodebrowser.children=Children
nodebrowser.node-info=Node Information
nodebrowser.child-name=Child Name
nodebrowser.child-node=Child Reference
nodebrowser.primary=Primary
nodebrowser.association-type=Association Type
nodebrowser.index=Index
nodebrowser.reference=Reference
nodebrowser.path=Primary Path
nodebrowser.name=Name
nodebrowser.type=Type
nodebrowser.value=Value
nodebrowser.residual=Residual
nodebrowser.parent=Parent
nodebrowser.parents=Parents
nodebrowser.parent-type=Parent Type
nodebrowser.parent-reference=Parent Reference
nodebrowser.properties=Properties
nodebrowser.aspects=Aspects
nodebrowser.associations=Associations
nodebrowser.source-assocs=Source Associations
nodebrowser.source-reference=Source Reference
nodebrowser.target-reference=Target Reference
nodebrowser.permissions=Permissions
nodebrowser.permission=Permission
nodebrowser.authority=Authority
nodebrowser.access=Access
nodebrowser.inherits=Inherits
nodebrowser.owner=Owner

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Node Browser
nodebrowser.query=Anfrage
nodebrowser.execute=Ausf\u00fchren
nodebrowser.store=Speichern
nodebrowser.refresh=Aktualisieren
nodebrowser.root=Root-Liste
nodebrowser.search-settings=Erweiterte Sucheinstellungen
nodebrowser.maxresults=Max. Ergebnisse
nodebrowser.skipcount=Anzahl \u00fcberspringen
nodebrowser.null=Null
nodebrowser.none=<keine>
nodebrowser.collection=<Sammlung>
nodebrowser.results=Ergebnisse
nodebrowser.children=Kinder
nodebrowser.node-info=Node-Information
nodebrowser.child-name=Kindname
nodebrowser.child-node=Kindreferenz
nodebrowser.primary=Prim\u00e4r
nodebrowser.association-type=Zuordnungstyp
nodebrowser.index=Index
nodebrowser.reference=Referenz
nodebrowser.path=Prim\u00e4rer Pfad
nodebrowser.name=Name
nodebrowser.type=Typ
nodebrowser.value=Wert
nodebrowser.residual=Rest
nodebrowser.parent=Eltern
nodebrowser.parents=Eltern
nodebrowser.parent-type=Elterntyp
nodebrowser.parent-reference=Elternreferenz
nodebrowser.properties=Eigenschaften
nodebrowser.aspects=Aspekte
nodebrowser.associations=Zuordnungen
nodebrowser.source-assocs=Quellzuordnungen
nodebrowser.source-reference=Quellreferenz
nodebrowser.target-reference=Zielreferenz
nodebrowser.permissions=Berechtigungen
nodebrowser.permission=Berechtigung
nodebrowser.authority=Authority
nodebrowser.access=Zugriff
nodebrowser.inherits=Erbt
nodebrowser.owner=Eigent\u00fcmer

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Navegador de nodos
nodebrowser.query=Consulta
nodebrowser.execute=Ejecutar
nodebrowser.store=Almacenar
nodebrowser.refresh=Actualizar
nodebrowser.root=Lista ra\u00edz
nodebrowser.search-settings=Buscar ajustes avanzados
nodebrowser.maxresults=Resultados m\u00e1ximos
nodebrowser.skipcount=Saltar recuento
nodebrowser.null=nulo
nodebrowser.none=<ninguno>
nodebrowser.collection=<colecci\u00f3n>
nodebrowser.results=Resultados
nodebrowser.children=Hijos
nodebrowser.node-info=Informaci\u00f3n de nodo
nodebrowser.child-name=Nombre de hijo
nodebrowser.child-node=Referencia de hijo
nodebrowser.primary=Primario
nodebrowser.association-type=Tipo de asociaci\u00f3n
nodebrowser.index=\u00cdndice
nodebrowser.reference=Referencia
nodebrowser.path=Ruta primaria
nodebrowser.name=Nombre
nodebrowser.type=Tipo
nodebrowser.value=Valor
nodebrowser.residual=Residual
nodebrowser.parent=Padre
nodebrowser.parents=Padres
nodebrowser.parent-type=Tipo de padre
nodebrowser.parent-reference=Referencia de padre
nodebrowser.properties=Propiedades
nodebrowser.aspects=Contenidos
nodebrowser.associations=Asociaciones
nodebrowser.source-assocs=Asociaciones de origen
nodebrowser.source-reference=Referencia de origen
nodebrowser.target-reference=Referencia de destino
nodebrowser.permissions=Permisos
nodebrowser.permission=Permiso
nodebrowser.authority=Autoridad
nodebrowser.access=Acceso
nodebrowser.inherits=Herencias
nodebrowser.owner=Propietario

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Navigateur de noeuds
nodebrowser.query=Requ\u00eate
nodebrowser.execute=Ex\u00e9cuter
nodebrowser.store=Entrep\u00f4t
nodebrowser.refresh=Rafra\u00eechir
nodebrowser.root=Liste racine
nodebrowser.search-settings=Param\u00e8tres avanc\u00e9s de recherche
nodebrowser.maxresults=R\u00e9sultats max.
nodebrowser.skipcount=Ignorer le nombre
nodebrowser.null=nulle
nodebrowser.none=<aucun>
nodebrowser.collection=<collection>
nodebrowser.results=R\u00e9sultats
nodebrowser.children=Fils
nodebrowser.node-info=Informations de noeud
nodebrowser.child-name=Nom de l'enfant
nodebrowser.child-node=R\u00e9f\u00e9rence de l'enfant
nodebrowser.primary=Primaire
nodebrowser.association-type=Type d'association
nodebrowser.index=Index
nodebrowser.reference=R\u00e9f\u00e9rence
nodebrowser.path=Chemin primaire
nodebrowser.name=Nom
nodebrowser.type=Type
nodebrowser.value=Valeur
nodebrowser.residual=R\u00e9siduelle
nodebrowser.parent=Parent
nodebrowser.parents=Parents
nodebrowser.parent-type=Type de parent
nodebrowser.parent-reference=R\u00e9f\u00e9rence du parent
nodebrowser.properties=Propri\u00e9t\u00e9s
nodebrowser.aspects=Aspects
nodebrowser.associations=Associations
nodebrowser.source-assocs=Associations source
nodebrowser.source-reference=R\u00e9f\u00e9rence de la source
nodebrowser.target-reference=R\u00e9f\u00e9rence de la cible
nodebrowser.permissions=Permissions
nodebrowser.permission=Droit d'acc\u00e8s
nodebrowser.authority=Autorit\u00e9s
nodebrowser.access=Acc\u00e8s
nodebrowser.inherits=H\u00e9rite
nodebrowser.owner=Propri\u00e9taire

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Browser nodi
nodebrowser.query=Query
nodebrowser.execute=Esegui
nodebrowser.store=Deposito
nodebrowser.refresh=Aggiorna
nodebrowser.root=Elenco principale
nodebrowser.search-settings=Impostazioni avanzate ricerca
nodebrowser.maxresults=Risultati max
nodebrowser.skipcount=Salta conteggio
nodebrowser.null=nullo
nodebrowser.none=<nessuno>
nodebrowser.collection=<raccolta>
nodebrowser.results=Risultati
nodebrowser.children=Figli
nodebrowser.node-info=Informazioni nodo
nodebrowser.child-name=Nome figlio
nodebrowser.child-node=Riferimento figlio
nodebrowser.primary=Primario
nodebrowser.association-type=Tipo di associazione
nodebrowser.index=Indice
nodebrowser.reference=Riferimento
nodebrowser.path=Percorso principale
nodebrowser.name=Nome
nodebrowser.type=Tipo
nodebrowser.value=Valore
nodebrowser.residual=Residuo
nodebrowser.parent=Genitore
nodebrowser.parents=Genitori
nodebrowser.parent-type=Tipo di genitore
nodebrowser.parent-reference=Riferimento genitore
nodebrowser.properties=Propriet\u00e0
nodebrowser.aspects=Aspetti
nodebrowser.associations=Associazioni
nodebrowser.source-assocs=Associazione della fonte
nodebrowser.source-reference=Riferimento fonte
nodebrowser.target-reference=Riferimento destinazione
nodebrowser.permissions=Permessi
nodebrowser.permission=Permesso
nodebrowser.authority=Autorit\u00e0
nodebrowser.access=Accesso
nodebrowser.inherits=Eredit\u00e0
nodebrowser.owner=Proprietario

View File

@@ -0,0 +1,43 @@
nodebrowser.title=\u30ce\u30fc\u30c9\u30d6\u30e9\u30a6\u30b6
nodebrowser.query=\u554f\u5408\u305b
nodebrowser.execute=\u5b9f\u884c
nodebrowser.store=\u30b9\u30c8\u30a2
nodebrowser.refresh=\u518d\u8aad\u307f\u8fbc\u307f
nodebrowser.root=\u30eb\u30fc\u30c8\u30ea\u30b9\u30c8
nodebrowser.search-settings=\u691c\u7d22\u306e\u8a73\u7d30\u8a2d\u5b9a
nodebrowser.maxresults=\u7d50\u679c\u306e\u6700\u5927\u8868\u793a\u4ef6\u6570
nodebrowser.skipcount=\u30b9\u30ad\u30c3\u30d7\u56de\u6570
nodebrowser.null=\u30cc\u30eb
nodebrowser.none=<\u306a\u3057>
nodebrowser.collection=<\u30b3\u30ec\u30af\u30b7\u30e7\u30f3>
nodebrowser.results=\u7d50\u679c
nodebrowser.children=\u5b50
nodebrowser.node-info=\u30ce\u30fc\u30c9\u60c5\u5831
nodebrowser.child-name=\u5b50\u306e\u540d\u524d
nodebrowser.child-node=\u5b50\u306e\u53c2\u7167
nodebrowser.primary=\u30d7\u30e9\u30a4\u30de\u30ea
nodebrowser.association-type=\u95a2\u9023\u30bf\u30a4\u30d7
nodebrowser.index=\u30a4\u30f3\u30c7\u30c3\u30af\u30b9
nodebrowser.reference=\u53c2\u7167
nodebrowser.path=\u30d7\u30e9\u30a4\u30de\u30ea\u30d1\u30b9
nodebrowser.name=\u540d\u524d
nodebrowser.type=\u30bf\u30a4\u30d7
nodebrowser.value=\u5024
nodebrowser.residual=\u672a\u51e6\u7406
nodebrowser.parent=\u89aa
nodebrowser.parents=\u89aa
nodebrowser.parent-type=\u89aa\u306e\u30bf\u30a4\u30d7
nodebrowser.parent-reference=\u89aa\u306e\u53c2\u7167
nodebrowser.properties=\u30d7\u30ed\u30d1\u30c6\u30a3
nodebrowser.aspects=\u30a2\u30b9\u30da\u30af\u30c8
nodebrowser.associations=\u95a2\u9023
nodebrowser.source-assocs=\u30bd\u30fc\u30b9\u306e\u95a2\u9023
nodebrowser.source-reference=\u30bd\u30fc\u30b9\u306e\u53c2\u7167
nodebrowser.target-reference=\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u53c2\u7167
nodebrowser.permissions=\u6a29\u9650
nodebrowser.permission=\u6a29\u9650
nodebrowser.authority=\u627f\u8a8d\u8005
nodebrowser.access=\u30a2\u30af\u30bb\u30b9
nodebrowser.inherits=\u7d99\u627f
nodebrowser.owner=\u6240\u6709\u8005

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Nodeleser
nodebrowser.query=Sp\u00f8rring
nodebrowser.execute=Utf\u00f8r
nodebrowser.store=Lagre
nodebrowser.refresh=Oppdater
nodebrowser.root=Rotliste
nodebrowser.search-settings=S\u00f8k avanserte innstillinger
nodebrowser.maxresults=Maks. resultater
nodebrowser.skipcount=Hopp over telling
nodebrowser.null=null
nodebrowser.none=<none>
nodebrowser.collection=<collection>
nodebrowser.results=Resultater
nodebrowser.children=Underordnede
nodebrowser.node-info=Nodeinformasjon
nodebrowser.child-name=Underordnedes navn
nodebrowser.child-node=Referanse for underordnet
nodebrowser.primary=Prim\u00e6r
nodebrowser.association-type=Type tilknytning
nodebrowser.index=Indeks
nodebrowser.reference=Referanse
nodebrowser.path=Prim\u00e6rbane
nodebrowser.name=Navn
nodebrowser.type=Type
nodebrowser.value=Verdi
nodebrowser.residual=Rest
nodebrowser.parent=Overordnet
nodebrowser.parents=Overordnede
nodebrowser.parent-type=Type overordnet
nodebrowser.parent-reference=Referanse for overordnet
nodebrowser.properties=Egenskaper
nodebrowser.aspects=Aspekter
nodebrowser.associations=Tilknytninger
nodebrowser.source-assocs=Kildetilknytninger
nodebrowser.source-reference=Referanse for kilde
nodebrowser.target-reference=Referanse for m\u00e5l
nodebrowser.permissions=Tillatelser
nodebrowser.permission=Tillatelse
nodebrowser.authority=Autoritet
nodebrowser.access=Tilgang
nodebrowser.inherits=Arver
nodebrowser.owner=Eier

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Nodebrowser
nodebrowser.query=Query
nodebrowser.execute=Uitvoeren
nodebrowser.store=Opslaan
nodebrowser.refresh=Vernieuwen
nodebrowser.root=Hoofdlijst
nodebrowser.search-settings=Geavanceerde instellingen voor zoeken
nodebrowser.maxresults=Max. aantal resultaten
nodebrowser.skipcount=Aantal overgeslagen
nodebrowser.null=leeg
nodebrowser.none=<geen>
nodebrowser.collection=<verzameling>
nodebrowser.results=Resultaten
nodebrowser.children=Onderliggende elementen
nodebrowser.node-info=Nodegegevens
nodebrowser.child-name=Naam onderliggend element
nodebrowser.child-node=Verwijzing naar onderliggend element
nodebrowser.primary=Primair
nodebrowser.association-type=Type koppeling
nodebrowser.index=Index
nodebrowser.reference=Verwijzing
nodebrowser.path=Primair pad
nodebrowser.name=Naam
nodebrowser.type=Type
nodebrowser.value=Waarde
nodebrowser.residual=Restwaarde
nodebrowser.parent=Bovenliggend element
nodebrowser.parents=Bovenliggende elementen
nodebrowser.parent-type=Type bovenliggend element
nodebrowser.parent-reference=Verwijzing naar bovenliggend element
nodebrowser.properties=Eigenschappen
nodebrowser.aspects=Aspecten
nodebrowser.associations=Koppelingen
nodebrowser.source-assocs=Koppelingen naar bron
nodebrowser.source-reference=Verwijzing naar bron
nodebrowser.target-reference=Verwijzing naar bestemming
nodebrowser.permissions=Rechten
nodebrowser.permission=Recht
nodebrowser.authority=Autoriteit
nodebrowser.access=Toegang
nodebrowser.inherits=Neemt over
nodebrowser.owner=Eigenaar

View File

@@ -0,0 +1,43 @@
nodebrowser.title=Navegador de n\u00f3s
nodebrowser.query=Consulta
nodebrowser.execute=Executar
nodebrowser.store=Armazenar
nodebrowser.refresh=Atualizar
nodebrowser.root=Lista raiz
nodebrowser.search-settings=Pesquisar configura\u00e7\u00f5es avan\u00e7adas
nodebrowser.maxresults=Resultados m\u00e1x.
nodebrowser.skipcount=Ignorar contagem
nodebrowser.null=nulo
nodebrowser.none=<none>
nodebrowser.collection=<collection>
nodebrowser.results=Resultados
nodebrowser.children=Secund\u00e1rios
nodebrowser.node-info=Informa\u00e7\u00f5es do n\u00f3
nodebrowser.child-name=Nome do secund\u00e1rio
nodebrowser.child-node=Refer\u00eancia do secund\u00e1rio
nodebrowser.primary=Prim\u00e1rio
nodebrowser.association-type=Tipo de associa\u00e7\u00e3o
nodebrowser.index=\u00cdndice
nodebrowser.reference=Refer\u00eancia
nodebrowser.path=Caminho prim\u00e1rio
nodebrowser.name=Nome
nodebrowser.type=Tipo
nodebrowser.value=Valor
nodebrowser.residual=Residual
nodebrowser.parent=Prim\u00e1rio
nodebrowser.parents=Prim\u00e1rios
nodebrowser.parent-type=Tipo de prim\u00e1rio
nodebrowser.parent-reference=Refer\u00eancia de prim\u00e1rio
nodebrowser.properties=Propriedades
nodebrowser.aspects=Aspectos
nodebrowser.associations=Associa\u00e7\u00f5es
nodebrowser.source-assocs=Associa\u00e7\u00f5es da fonte
nodebrowser.source-reference=Refer\u00eancia da fonte
nodebrowser.target-reference=Refer\u00eancia de destino
nodebrowser.permissions=Permiss\u00f5es
nodebrowser.permission=Permiss\u00e3o
nodebrowser.authority=Autoridade
nodebrowser.access=Acessar
nodebrowser.inherits=Herda
nodebrowser.owner=Propriet\u00e1rio

View File

@@ -0,0 +1,43 @@
nodebrowser.title=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432
nodebrowser.query=\u0417\u0430\u043f\u0440\u043e\u0441
nodebrowser.execute=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c
nodebrowser.store=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435
nodebrowser.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
nodebrowser.root=\u041a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
nodebrowser.search-settings=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430
nodebrowser.maxresults=\u041c\u0430\u043a\u0441. \u043a\u043e\u043b-\u0432\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432
nodebrowser.skipcount=\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0447\u0435\u0442
nodebrowser.null=\u043f\u0443\u0441\u0442\u043e
nodebrowser.none=<\u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e>
nodebrowser.collection=<\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f>
nodebrowser.results=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b
nodebrowser.children=\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b
nodebrowser.node-info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0435
nodebrowser.child-name=\u0418\u043c\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430
nodebrowser.child-node=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442
nodebrowser.primary=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439
nodebrowser.association-type=\u0422\u0438\u043f \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438
nodebrowser.index=\u0418\u043d\u0434\u0435\u043a\u0441
nodebrowser.reference=\u0421\u0441\u044b\u043b\u043a\u0430
nodebrowser.path=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0443\u0442\u044c
nodebrowser.name=\u0418\u043c\u044f
nodebrowser.type=\u0422\u0438\u043f
nodebrowser.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435
nodebrowser.residual=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438
nodebrowser.parent=\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442
nodebrowser.parents=\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b
nodebrowser.parent-type=\u0422\u0438\u043f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430
nodebrowser.parent-reference=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442
nodebrowser.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
nodebrowser.aspects=\u0410\u0441\u043f\u0435\u043a\u0442\u044b
nodebrowser.associations=\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438
nodebrowser.source-assocs=\u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430
nodebrowser.source-reference=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a
nodebrowser.target-reference=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0446\u0435\u043b\u044c
nodebrowser.permissions=\u041f\u0440\u0430\u0432\u0430
nodebrowser.permission=\u041f\u0440\u0430\u0432\u043e
nodebrowser.authority=\u041f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f
nodebrowser.access=\u0414\u043e\u0441\u0442\u0443\u043f
nodebrowser.inherits=\u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442
nodebrowser.owner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446

View File

@@ -0,0 +1,43 @@
nodebrowser.title=\u8282\u70b9\u6d4f\u89c8\u5668
nodebrowser.query=\u67e5\u8be2
nodebrowser.execute=\u6267\u884c
nodebrowser.store=\u5e93
nodebrowser.refresh=\u5237\u65b0
nodebrowser.root=\u6839\u5217\u8868
nodebrowser.search-settings=\u641c\u7d22\u9ad8\u7ea7\u8bbe\u7f6e
nodebrowser.maxresults=\u6700\u5927\u7ed3\u679c\u6570
nodebrowser.skipcount=\u8df3\u8fc7\u8ba1\u6570
nodebrowser.null=\u7a7a
nodebrowser.none=<\u65e0>
nodebrowser.collection=<\u6536\u96c6>
nodebrowser.results=\u7ed3\u679c
nodebrowser.children=\u5b50\u7ea7
nodebrowser.node-info=\u8282\u70b9\u4fe1\u606f
nodebrowser.child-name=\u5b50\u540d\u79f0
nodebrowser.child-node=\u5b50\u5f15\u7528
nodebrowser.primary=\u4e3b
nodebrowser.association-type=\u5173\u8054\u7c7b\u578b
nodebrowser.index=\u7d22\u5f15
nodebrowser.reference=\u5f15\u7528
nodebrowser.path=\u4e3b\u8def\u5f84
nodebrowser.name=\u540d\u79f0
nodebrowser.type=\u7c7b\u578b
nodebrowser.value=\u503c
nodebrowser.residual=\u6b8b\u7559
nodebrowser.parent=\u7236\u7ea7
nodebrowser.parents=\u7236\u7ea7
nodebrowser.parent-type=\u7236\u7c7b\u578b
nodebrowser.parent-reference=\u7236\u5f15\u7528
nodebrowser.properties=\u5c5e\u6027
nodebrowser.aspects=\u5207\u9762
nodebrowser.associations=\u5173\u8054
nodebrowser.source-assocs=\u6e90\u5173\u8054
nodebrowser.source-reference=\u6e90\u5f15\u7528
nodebrowser.target-reference=\u76ee\u6807\u5f15\u7528
nodebrowser.permissions=\u6743\u9650
nodebrowser.permission=\u6743\u9650
nodebrowser.authority=\u6388\u6743
nodebrowser.access=\u8bbf\u95ee
nodebrowser.inherits=\u7ee7\u627f
nodebrowser.owner=\u6240\u6709\u8005

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Admin Console - Node Browser</shortname>
<description><![CDATA[Admin Console POST method for the Node Browser.]]></description>
<url>/admin/admin-nodebrowser</url>
<format default="html">argument</format>
<authentication>admin</authentication>
<lifecycle>internal</lifecycle>
<transaction allow="readonly">required</transaction>
</webscript>

View File

@@ -1932,4 +1932,51 @@
</property>
</bean>
<!-- Repository Admin Console messages -->
<bean id="communityAdminConsoleResourceBundle" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.messages.admin-console</value>
</list>
</property>
</bean>
<!-- Repository Admin Console Node Browser -->
<bean id="webscript.org.alfresco.repository.admin.support-tools.admin-nodebrowser.post"
class="org.alfresco.repo.web.scripts.admin.NodeBrowserPost"
parent="webscript">
<property name="nodeService" ref="NodeService"/>
<property name="dictionaryService" ref="DictionaryService"/>
<property name="searchService" ref="SearchService"/>
<property name="namespaceService" ref="NamespaceService"/>
<property name="permissionService" ref="PermissionService"/>
<property name="ownableService" ref="OwnableService" />
</bean>
<!-- Repository Admin Console script extensions -->
<bean id="scriptRepoInterpreter" parent="baseJavaScriptExtension" class="org.alfresco.repo.web.scripts.admin.DynamicInterpreterExtension">
<property name="extensionName">
<value>repoInterpreter</value>
</property>
<property name="interpreter">
<ref bean="repoAdminInterpreter" />
</property>
</bean>
<bean id="scriptTenantInterpreter" parent="baseJavaScriptExtension" class="org.alfresco.repo.web.scripts.admin.DynamicInterpreterExtension">
<property name="extensionName">
<value>tenantInterpreter</value>
</property>
<property name="interpreter">
<ref bean="tenantInterpreter" />
</property>
</bean>
<bean id="scriptWorkflowInterpreter" parent="baseJavaScriptExtension" class="org.alfresco.repo.web.scripts.admin.DynamicInterpreterExtension">
<property name="extensionName">
<value>workflowInterpreter</value>
</property>
<property name="interpreter">
<ref bean="workflowInterpreter" />
</property>
</bean>
</beans>

View File

@@ -0,0 +1,114 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.web.scripts.admin;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.alfresco.repo.admin.BaseInterpreter;
import org.alfresco.repo.processor.BaseProcessorExtension;
/**
* Console Interpeter script extension - dynamically binds to the configured BaseInterpreter instance.
* This avoids the need for a specific bean class per script interpreter.
*
* @see org.alfresco.repo.admin.BaseInterpreter
* See script beans configured in 'web-scripts-application-context.xml'.
*
* @author Kevin Roast
* @since 5.1
*/
public class DynamicInterpreterExtension extends BaseProcessorExtension
{
private BaseInterpreter interpreter;
private long duration;
private String result = "";
private String command = "";
/**
* Set the BaseInterpreter to use when executing commands and retrieving the command result.
*
* @param interpreter For example, repoAdminInterpreter
*/
public void setInterpreter(BaseInterpreter interpreter)
{
this.interpreter = interpreter;
}
private BaseInterpreter getInterpreter()
{
return this.interpreter;
}
/**
* Script execute command gateway.
*
* @param command string to execute
*/
public void executeCmd(String command)
{
this.command = command;
this.interpretCommand(command);
}
/**
* @return the command duration
*/
public long getDuration()
{
return this.duration;
}
/**
* @return the command result
*/
public String getResult()
{
return this.result;
}
/**
* @return the command last executed
*/
public String getCommand()
{
return this.command;
}
/**
* Interpret console command using the configured Interpreter
*
* @param command command
*/
private void interpretCommand(String command)
{
try
{
long startms = System.currentTimeMillis();
this.result = getInterpreter().interpretCommand(command);
this.duration = System.currentTimeMillis() - startms;
}
catch (Throwable e)
{
StringWriter stackTrace = new StringWriter();
e.printStackTrace(new PrintWriter(stackTrace));
this.result = stackTrace.toString();
}
}
}

View File

@@ -0,0 +1,318 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.web.scripts.admin;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.slingshot.web.scripts.NodeBrowserScript;
import org.alfresco.util.GUID;
import org.springframework.extensions.surf.util.URLEncoder;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest;
/**
* Admin Console NodeBrowser WebScript POST controller.
* <p>
* Implements a low-level node browser client for the Admin Console tool. Extends
* the slingshot NodeBrowserScript WebScript to share the useful value wrapper classes.
*
* @author Kevin Roast
* @since 5.1
*/
public class NodeBrowserPost extends NodeBrowserScript implements Serializable
{
private static final long serialVersionUID = 8464392337270665212L;
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
Map<String, Object> result = new HashMap<>(16);
// gather inputs
Map<String, String> returnParams = new HashMap<>(16);
String store = req.getParameter("nodebrowser-store");
String searcher = req.getParameter("nodebrowser-search");
String query = req.getParameter("nodebrowser-query");
String maxResults = req.getParameter("nodebrowser-query-maxresults");
String skipCount = req.getParameter("nodebrowser-query-skipcount");
String error = null;
StoreRef storeRef = new StoreRef(store);
// always a list of assoc refs from some result
List<ChildAssociationRef> assocRefs = Collections.<ChildAssociationRef>emptyList();
NodeRef currentNode = null;
// what action should be processed?
long timeStart = System.currentTimeMillis();
String actionValue = req.getParameter("nodebrowser-action-value");
String action = req.getParameter("nodebrowser-action");
try
{
switch (action)
{
// on Execute btn press and query present, perform search
case "search":
{
if (query != null && query.trim().length() != 0)
{
switch (searcher)
{
case "noderef":
{
// ensure node exists - or throw error
NodeRef nodeRef = new NodeRef(query);
boolean exists = getNodeService().exists(nodeRef);
if (!exists)
{
throw new AlfrescoRuntimeException("Node " + nodeRef + " does not exist.");
}
currentNode = nodeRef;
// this is not really a search for results, it is a direct node reference
// so gather the child assocs as usual and update the action value for the UI location
assocRefs = getNodeService().getChildAssocs(currentNode);
actionValue = query;
action = "parent";
break;
}
case "selectnodes":
{
List<NodeRef> nodes = getSearchService().selectNodes(
getNodeService().getRootNode(storeRef), query, null, getNamespaceService(), false);
assocRefs = new ArrayList<>(nodes.size());
for (NodeRef node: nodes)
{
assocRefs.add(getNodeService().getPrimaryParent(node));
}
break;
}
default:
{
// perform search
SearchParameters params = new SearchParameters();
params.setQuery(query);
params.addStore(storeRef);
params.setLanguage(searcher);
if (maxResults != null && maxResults.length() != 0)
{
params.setMaxItems(Integer.parseInt(maxResults));
params.setLimit(Integer.parseInt(maxResults));
}
if (skipCount != null && skipCount.length() != 0)
{
params.setSkipCount(Integer.parseInt(skipCount));
}
ResultSet rs = getSearchService().query(params);
assocRefs = rs.getChildAssocRefs();
break;
}
}
}
break;
}
case "root":
{
// iterate the properties and children of a store root node
currentNode = getNodeService().getRootNode(storeRef);
assocRefs = getNodeService().getChildAssocs(currentNode);
break;
}
case "parent":
case "children":
{
currentNode = new NodeRef(actionValue);
assocRefs = getNodeService().getChildAssocs(currentNode);
break;
}
}
// get the required information from the assocRefs list and wrap objects
List<ChildAssocRefWrapper> wrappers = new ArrayList<>(assocRefs.size());
for (ChildAssociationRef ref : assocRefs)
{
wrappers.add(new ChildAssocRefWrapper(ref));
}
result.put("children", wrappers);
}
catch (Throwable e)
{
// empty child list on error - current node will still be null
result.put("children", new ArrayList<>(0));
error = e.getMessage();
}
// current node info if any
if (currentNode != null)
{
// node info
Map<String, Object> info = new HashMap<>(8);
info.put("nodeRef", currentNode.toString());
info.put("path", getNodeService().getPath(currentNode).toPrefixString(getNamespaceService()));
info.put("type", getNodeService().getType(currentNode).toPrefixString(getNamespaceService()));
ChildAssociationRef parent = getNodeService().getPrimaryParent(currentNode);
info.put("parent", parent.getParentRef() != null ? parent.getParentRef().toString() : "");
result.put("info", info);
// node properties
result.put("properties", getProperties(currentNode));
// parents
List<ChildAssociationRef> parents = getNodeService().getParentAssocs(currentNode);
List<ChildAssociation> assocs = new ArrayList<ChildAssociation>(parents.size());
for (ChildAssociationRef ref : parents)
{
assocs.add(new ChildAssociation(ref));
}
result.put("parents", assocs);
// aspects
List<Aspect> aspects = getAspects(currentNode);
result.put("aspects", aspects);
// target assocs
List<PeerAssociation> targetAssocs = getAssocs(currentNode);
result.put("assocs", targetAssocs);
// source assocs
List<PeerAssociation> sourceAssocs = getSourceAssocs(currentNode);
result.put("sourceAssocs", sourceAssocs);
// permissions
Map<String, Object> permissionInfo = new HashMap<String, Object>();
permissionInfo.put("entries", getPermissions(currentNode));
permissionInfo.put("owner", getOwnableService().getOwner(currentNode));
permissionInfo.put("inherit", getInheritPermissions(currentNode));
result.put("permissions", permissionInfo);
}
// store result in session for the resulting GET request webscript
final String resultId = GUID.generate();
HttpServletRequest request = ((WebScriptServletRequest)req).getHttpServletRequest();
HttpSession session = request.getSession();
session.putValue(resultId, result);
// return params
returnParams.put("resultId", resultId);
returnParams.put("action", action);
returnParams.put("actionValue", actionValue);
returnParams.put("query", query);
returnParams.put("store", store);
returnParams.put("searcher", searcher);
returnParams.put("maxResults", maxResults);
returnParams.put("skipCount", skipCount);
returnParams.put("in", Long.toString(System.currentTimeMillis()-timeStart));
returnParams.put("e", error);
// redirect as all admin console pages do (follow standard pattern)
// The logic to generate the navigation section and server meta-data is all tied into alfresco-common.lib.js
// which is great for writing JS based JMX surfaced pages, but not so great for Java backed WebScripts.
status.setCode(301);
status.setRedirect(true);
status.setLocation(buildUrl(req, returnParams, action));
return null;
}
private static String buildUrl(WebScriptRequest req, Map<String, String> params, String hash)
{
StringBuilder url = new StringBuilder(256);
url.append(req.getServicePath());
if (!params.isEmpty())
{
boolean first = true;
for (String key: params.keySet())
{
String val = params.get(key);
if (val != null && val.length() != 0)
{
url.append(first ? '?' : '&');
url.append(key);
url.append('=');
url.append(URLEncoder.encode(val));
first = false;
}
}
}
if (hash != null && hash.length() != 0)
{
url.append('#').append(hash);
}
return url.toString();
}
/**
* Wrapper to resolve Assoc Type and QName to short form with resolved prefix
*/
public class ChildAssocRefWrapper implements Serializable
{
private static final long serialVersionUID = 4321292337846270665L;
final private ChildAssociationRef ref;
private String qname = null;
private String typeqname = null;
public ChildAssocRefWrapper(ChildAssociationRef r)
{
ref = r;
}
public String getTypeQName()
{
return typeqname != null ? typeqname : (typeqname = ref.getTypeQName().toPrefixString(getNamespaceService()));
}
public String getQName()
{
return qname != null ? qname : (qname = ref.getQName().toPrefixString(getNamespaceService()));
}
public NodeRef getChildRef()
{
return ref.getChildRef();
}
public NodeRef getParentRef()
{
return ref.getParentRef();
}
public boolean isPrimary()
{
return ref.isPrimary();
}
}
}