mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
- Added update status button to status area of links management report which now does an incremental report
- Re-Run report button now runs fresh report - Generated files are now in a collapsable panel (closed by default) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5935 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -76,7 +76,6 @@ public class LinkValidationReportDialog extends BaseDialogBean
|
|||||||
|
|
||||||
Map<String, String> params = new HashMap<String, String>(1);
|
Map<String, String> params = new HashMap<String, String>(1);
|
||||||
params.put("store", this.store);
|
params.put("store", this.store);
|
||||||
params.put("rerun", "true");
|
|
||||||
Application.getDialogManager().setupParameters(params);
|
Application.getDialogManager().setupParameters(params);
|
||||||
|
|
||||||
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME +
|
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME +
|
||||||
@@ -110,6 +109,24 @@ public class LinkValidationReportDialog extends BaseDialogBean
|
|||||||
"browseWebsite";
|
"browseWebsite";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
// Event handlers
|
||||||
|
|
||||||
|
public String updateStatus()
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("Updating status for link validation report for store '" + store + "'");
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<String, String>(1);
|
||||||
|
params.put("store", this.store);
|
||||||
|
params.put("rerun", "true");
|
||||||
|
Application.getDialogManager().setupParameters(params);
|
||||||
|
|
||||||
|
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME +
|
||||||
|
AlfrescoNavigationHandler.OUTCOME_SEPARATOR +
|
||||||
|
"dialog:runLinkValidation";
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
// Bean getters and setters
|
// Bean getters and setters
|
||||||
|
|
||||||
|
@@ -79,6 +79,10 @@ public class UILinkValidationBrokenForms extends AbstractLinkValidationReportCom
|
|||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("Rendering broken forms from state object: " + linkState);
|
logger.debug("Rendering broken forms from state object: " + linkState);
|
||||||
|
|
||||||
|
out.write("<script type='text/javascript' src='");
|
||||||
|
out.write(context.getExternalContext().getRequestContextPath());
|
||||||
|
out.write("/scripts/ajax/link-validation-report.js'></script>\n");
|
||||||
|
|
||||||
// render the list of broken files and their contained links
|
// render the list of broken files and their contained links
|
||||||
out.write("<div class='linkValidationBrokenFormsPanel'><div class='linkValidationReportTitle'>");
|
out.write("<div class='linkValidationBrokenFormsPanel'><div class='linkValidationReportTitle'>");
|
||||||
out.write(Application.getMessage(context, "forms_with_broken_links"));
|
out.write(Application.getMessage(context, "forms_with_broken_links"));
|
||||||
@@ -115,6 +119,14 @@ public class UILinkValidationBrokenForms extends AbstractLinkValidationReportCom
|
|||||||
String formName = formNamePath[0];
|
String formName = formNamePath[0];
|
||||||
String formPath = formNamePath[1];
|
String formPath = formNamePath[1];
|
||||||
|
|
||||||
|
// setup the context for the actions
|
||||||
|
AVMNodeDescriptor desc = avmService.lookup(-1, file);
|
||||||
|
AVMNode node = new AVMNode(desc);
|
||||||
|
actions.setContext(node);
|
||||||
|
|
||||||
|
// generate a unique id for this form
|
||||||
|
String formId = this.getId() + "_" + desc.getId();
|
||||||
|
|
||||||
// render the row with the appropriate background style
|
// render the row with the appropriate background style
|
||||||
out.write("<tr class='");
|
out.write("<tr class='");
|
||||||
|
|
||||||
@@ -138,9 +150,14 @@ public class UILinkValidationBrokenForms extends AbstractLinkValidationReportCom
|
|||||||
out.write(formName);
|
out.write(formName);
|
||||||
out.write("</div><div style='padding-top: 2px;'>");
|
out.write("</div><div style='padding-top: 2px;'>");
|
||||||
out.write(formPath);
|
out.write(formPath);
|
||||||
out.write("</div><div style='padding-top: 4px; color: #888;'>");
|
out.write("</div><div style='padding-top: 4px; color: #888;'><img src='/alfresco/images/icons/arrow_closed.gif' ");
|
||||||
|
out.write("onclick='Alfresco.toggleGeneratedFiles(this, \"");
|
||||||
|
out.write(formId);
|
||||||
|
out.write("\");return false;' style='vertical-align: -6px; padding-right: 2px;' class='collapsed' />");
|
||||||
out.write(Application.getMessage(context, "generated_files"));
|
out.write(Application.getMessage(context, "generated_files"));
|
||||||
out.write(":</div><div style='padding-top: 2px;'>");
|
out.write(":</div><div style='padding-top: 2px; display: none;' id='");
|
||||||
|
out.write(formId);
|
||||||
|
out.write("'>");
|
||||||
|
|
||||||
for (String brokenFile : linkState.getBrokenFilesByForm(file))
|
for (String brokenFile : linkState.getBrokenFilesByForm(file))
|
||||||
{
|
{
|
||||||
@@ -158,10 +175,7 @@ public class UILinkValidationBrokenForms extends AbstractLinkValidationReportCom
|
|||||||
out.write("</td><td align='right' valign='top'><div style='white-space: nowrap; padding-top: 10px; padding-right: 20px;'>");
|
out.write("</td><td align='right' valign='top'><div style='white-space: nowrap; padding-top: 10px; padding-right: 20px;'>");
|
||||||
out.write(" ");
|
out.write(" ");
|
||||||
|
|
||||||
// setup the context for the actions
|
|
||||||
AVMNodeDescriptor desc = avmService.lookup(-1, file);
|
|
||||||
AVMNode node = new AVMNode(desc);
|
|
||||||
actions.setContext(node);
|
|
||||||
|
|
||||||
// render the actions
|
// render the actions
|
||||||
Utils.encodeRecursive(context, actions);
|
Utils.encodeRecursive(context, actions);
|
||||||
|
@@ -27,14 +27,19 @@ package org.alfresco.web.ui.wcm.component;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
import javax.faces.component.UICommand;
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
import javax.faces.context.FacesContext;
|
import javax.faces.context.FacesContext;
|
||||||
import javax.faces.context.ResponseWriter;
|
import javax.faces.context.ResponseWriter;
|
||||||
|
import javax.faces.el.MethodBinding;
|
||||||
|
|
||||||
import org.alfresco.web.app.Application;
|
import org.alfresco.web.app.Application;
|
||||||
import org.alfresco.web.bean.wcm.LinkValidationState;
|
import org.alfresco.web.bean.wcm.LinkValidationState;
|
||||||
import org.alfresco.web.ui.common.Utils;
|
import org.alfresco.web.ui.common.Utils;
|
||||||
|
import org.alfresco.web.ui.common.component.UIActionLink;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
@@ -91,6 +96,9 @@ public class UILinkValidationSummary extends AbstractLinkValidationReportCompone
|
|||||||
String linksFixed = MessageFormat.format(pattern,
|
String linksFixed = MessageFormat.format(pattern,
|
||||||
new Object[] {linkState.getNumberFixedLinks()});
|
new Object[] {linkState.getNumberFixedLinks()});
|
||||||
|
|
||||||
|
// get the action to update the current status
|
||||||
|
UICommand updateStatusAction = aquireAction(context, "update_status_" + linkState.getStore());
|
||||||
|
|
||||||
// render the summary area
|
// render the summary area
|
||||||
out.write("<div class='linkValidationSummaryPanel'><div class='linkValidationReportTitle'>");
|
out.write("<div class='linkValidationSummaryPanel'><div class='linkValidationReportTitle'>");
|
||||||
out.write(bundle.getString("summary"));
|
out.write(bundle.getString("summary"));
|
||||||
@@ -114,7 +122,40 @@ public class UILinkValidationSummary extends AbstractLinkValidationReportCompone
|
|||||||
out.write(context.getExternalContext().getRequestContextPath());
|
out.write(context.getExternalContext().getRequestContextPath());
|
||||||
out.write("/images/icons/fixed_link.gif' style='vertical-align: -4px; padding-left: 6px; padding-right: 4px;' >");
|
out.write("/images/icons/fixed_link.gif' style='vertical-align: -4px; padding-left: 6px; padding-right: 4px;' >");
|
||||||
out.write(linksFixed);
|
out.write(linksFixed);
|
||||||
|
out.write(" ");
|
||||||
|
Utils.encodeRecursive(context, updateStatusAction);
|
||||||
out.write("</div></td></tr>");
|
out.write("</div></td></tr>");
|
||||||
out.write("</table></div>");
|
out.write("</table></div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private UICommand aquireAction(FacesContext context, String actionId)
|
||||||
|
{
|
||||||
|
UICommand action = null;
|
||||||
|
|
||||||
|
// try find the action as a child of this component
|
||||||
|
for (UIComponent component : (List<UIComponent>)getChildren())
|
||||||
|
{
|
||||||
|
if (actionId.equals(component.getId()))
|
||||||
|
{
|
||||||
|
action = (UIActionLink)component;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == null)
|
||||||
|
{
|
||||||
|
// create the action and add as a child component
|
||||||
|
javax.faces.application.Application facesApp = context.getApplication();
|
||||||
|
action = (UICommand)facesApp.createComponent(UICommand.COMPONENT_TYPE);
|
||||||
|
action.setId(actionId);
|
||||||
|
action.setValue(Application.getMessage(context, "update_status"));
|
||||||
|
MethodBinding binding = facesApp.createMethodBinding("#{DialogManager.bean.updateStatus}",
|
||||||
|
new Class[] {});
|
||||||
|
action.setAction(binding);
|
||||||
|
this.getChildren().add(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
return action;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -788,7 +788,7 @@ a.sidebarButtonLink, a.sidebarButtonLink:link, a.sidebarButtonLink:visited
|
|||||||
.linkValidationList
|
.linkValidationList
|
||||||
{
|
{
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
height: 130px;
|
height: 132px;
|
||||||
border: 1px solid #aaa;
|
border: 1px solid #aaa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,11 +5,13 @@ Alfresco.LinkValidationMonitor = function()
|
|||||||
this.successMsg = '';
|
this.successMsg = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
Alfresco.LinkValidationMonitor.prototype = {
|
Alfresco.LinkValidationMonitor.prototype =
|
||||||
|
{
|
||||||
url: null,
|
url: null,
|
||||||
failedMsg: null,
|
failedMsg: null,
|
||||||
successMsg: null,
|
successMsg: null,
|
||||||
retrieveLinkValidationStatus: function() {
|
retrieveLinkValidationStatus: function()
|
||||||
|
{
|
||||||
YAHOO.util.Connect.asyncRequest('GET', this.url,
|
YAHOO.util.Connect.asyncRequest('GET', this.url,
|
||||||
{
|
{
|
||||||
success: this.processResults,
|
success: this.processResults,
|
||||||
@@ -18,34 +20,42 @@ Alfresco.LinkValidationMonitor.prototype = {
|
|||||||
},
|
},
|
||||||
null);
|
null);
|
||||||
},
|
},
|
||||||
processResults: function(ajaxResponse) {
|
processResults: function(ajaxResponse)
|
||||||
|
{
|
||||||
var xml = ajaxResponse.responseXML.documentElement;
|
var xml = ajaxResponse.responseXML.documentElement;
|
||||||
var finished = xml.getAttribute('finished');
|
var finished = xml.getAttribute('finished');
|
||||||
var fileCount = xml.getAttribute('file-count');
|
var fileCount = xml.getAttribute('file-count');
|
||||||
var linkCount = xml.getAttribute('link-count');
|
var linkCount = xml.getAttribute('link-count');
|
||||||
|
|
||||||
var fileCountElem = document.getElementById('file-count');
|
var fileCountElem = document.getElementById('file-count');
|
||||||
if (fileCountElem != null) {
|
if (fileCountElem != null)
|
||||||
|
{
|
||||||
fileCountElem.innerHTML = fileCount;
|
fileCountElem.innerHTML = fileCount;
|
||||||
}
|
}
|
||||||
var linkCountElem = document.getElementById('link-count');
|
var linkCountElem = document.getElementById('link-count');
|
||||||
if (linkCountElem != null) {
|
if (linkCountElem != null)
|
||||||
|
{
|
||||||
linkCountElem.innerHTML = linkCount;
|
linkCountElem.innerHTML = linkCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finished == 'true') {
|
if (finished == 'true')
|
||||||
|
{
|
||||||
var linkOnclick = document.getElementById('validation-callback-link').onclick;
|
var linkOnclick = document.getElementById('validation-callback-link').onclick;
|
||||||
linkOnclick();
|
linkOnclick();
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
setTimeout('Alfresco.linkMonitor.retrieveLinkValidationStatus()', 2000);
|
setTimeout('Alfresco.linkMonitor.retrieveLinkValidationStatus()', 2000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleError: function(ajaxResponse) {
|
handleError: function(ajaxResponse)
|
||||||
|
{
|
||||||
handleErrorYahoo(ajaxResponse.status + ' ' + ajaxResponse.statusText);
|
handleErrorYahoo(ajaxResponse.status + ' ' + ajaxResponse.statusText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Alfresco.initLinkValidationMonitor = function() {
|
Alfresco.initLinkValidationMonitor = function()
|
||||||
|
{
|
||||||
Alfresco.linkMonitor = new Alfresco.LinkValidationMonitor();
|
Alfresco.linkMonitor = new Alfresco.LinkValidationMonitor();
|
||||||
Alfresco.linkMonitor.retrieveLinkValidationStatus();
|
Alfresco.linkMonitor.retrieveLinkValidationStatus();
|
||||||
}
|
}
|
||||||
|
28
source/web/scripts/ajax/link-validation-report.js
Normal file
28
source/web/scripts/ajax/link-validation-report.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
Alfresco.toggleGeneratedFiles = function(icon, genFilesId)
|
||||||
|
{
|
||||||
|
var currentState = icon.className;
|
||||||
|
var genFilesDiv = document.getElementById(genFilesId);
|
||||||
|
|
||||||
|
if (currentState == "collapsed")
|
||||||
|
{
|
||||||
|
icon.src = getContextPath() + "/images/icons/arrow_open.gif";
|
||||||
|
icon.className = "expanded";
|
||||||
|
|
||||||
|
// show the div holding the generated files
|
||||||
|
if (genFilesDiv != null)
|
||||||
|
{
|
||||||
|
genFilesDiv.style.display = "block";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
icon.src = getContextPath() + "/images/icons/arrow_closed.gif";
|
||||||
|
icon.className = "collapsed";
|
||||||
|
|
||||||
|
// hide the div holding the generated files
|
||||||
|
if (genFilesDiv != null)
|
||||||
|
{
|
||||||
|
genFilesDiv.style.display = "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user