You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by rw...@apache.org on 2010/05/31 10:55:33 UTC
svn commit: r949693 - in
/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main:
i18n-resources/ java/org/apache/geronimo/console/repository/
webapp/WEB-INF/view/repository/
Author: rwonly
Date: Mon May 31 08:55:33 2010
New Revision: 949693
URL: http://svn.apache.org/viewvc?rev=949693&view=rev
Log:
GERONIMO-5177 Removing an entry from the Repository results in NullPointerException(original patch from Ben Liang, Thanks!)
Modified:
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_en.properties
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_zh.properties
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_en.properties
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_zh.properties
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/repository/RepositoryViewPortlet.java
geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/webapp/WEB-INF/view/repository/normal.jsp
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_en.properties
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_en.properties?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_en.properties (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_en.properties Mon May 31 08:55:33 2010
@@ -394,6 +394,9 @@ repository.normal.title
repository.normal.toViewUsage = Click an entry to view usage.
repository.usage.content = To use <b>{0}</b> in an application or a module, add a dependency element under dependencies in environment element in it's deployment plan as shown below:
repository.usage.title = Usage for {0}
+repository.remove.confirm = Are you sure to remove the component
+repository.remove.ok = OK
+repository.remove.cancel = CANCEL
securityrealmmanager.common.add = Add
securityrealmmanager.common.emptyText = The focussed field must not be empty.
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_zh.properties
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_zh.properties?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_zh.properties (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/consolebase_zh.properties Mon May 31 08:55:33 2010
@@ -394,6 +394,9 @@ repository.normal.title
repository.normal.toViewUsage = ç¹å»æ¯ä¸ªæ¡ç®æ¥æ¥çç¨æ³ã
repository.usage.content = è¦å¨ä¸ä¸ªåºç¨ç¨åºæ模åä¸ä½¿ç¨<b>{0}</b>ï¼è¯·å¨é¨ç½²è®¡åä¸çenvironmentå
ç´ ä¸çdependencieså°èä¸æ·»å ä¸ä¸ªdependencyå
ç´ ï¼å¦ä¸æ示:
repository.usage.title = {0}使ç¨æ¹æ³
+repository.remove.confirm = æ¨ç¡®å®å é¤è¿ä¸ªç»ä»¶åï¼
+repository.remove.ok = ç¡®å®
+repository.remove.cancel = åæ¶
securityrealmmanager.common.add = æ·»å
securityrealmmanager.common.emptyText = ç¦ç¹æå¨å段ä¸è½ä¸ºç©ºã
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_en.properties
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_en.properties?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_en.properties (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_en.properties Mon May 31 08:55:33 2010
@@ -133,6 +133,8 @@ consolebase.errorMsg21 = Unable to get n
consolebase.errorMsg22 = Errors in user input while processing a CSR.
consolebase.errorMsg23 = Errors encountered while issuing certificate.
consolebase.errorMsg24 = Default properties-login module does not exist, it might be replaced by a customized login module.
+consolebase.errorMsg25 = An error occure when removing
+consolebase.errorMsg26 = The component is not found in any repository.
consolebase.infoMsg01 = Started application
consolebase.infoMsg02 = Stopped application
consolebase.infoMsg03 = Restarted application
@@ -151,6 +153,8 @@ consolebase.infoMsg15 = CA Setup is suc
consolebase.infoMsg16 = Approved CSR. id = <b>{0}</b>.
consolebase.infoMsg17 = Rejected and deleted CSR. id = <b>{0}</b>.
consolebase.infoMsg18 = Certificate Issued successfully. This Certificate details can also be viewed using the serial number <b>{0}</b> with the 'View Issued Certificate' link provided in the CA home screen.
+consolebase.infoMsg19 = has been successfully removed from repository.
+consolebase.infoMsg20 = The component is a directory which should not be removed.
consolebase.warnMsg01 = Invalid value for changeState:
consolebase.warnMsg02 = No modules found of this type
consolebase.warnMsg03 = Web statistics are not supported for the current web container.
@@ -159,3 +163,9 @@ consolebase.warnMsg05 = CA is not runni
consolebase.warnMsg06 = A certificate with the serial number <b>{0}</b> has already been issued. You might be seeing this message since you have clicked 'Issue Certificate' button a second time.
consolebase.warnMsg07 = <p style='font-size:120%;'><b>A shutdown of the server will disable this Web Console! Proceed only if you are certain you want to terminate the server.</b></p>
consolebase.warnMsg08 = There are no Web Containers defined.
+
+
+repository.remove.successMsg = has been successfully removed from repository.
+repository.remove.errorMsg01 = An error occure when removing
+repository.remove.errorMsg02 = The component is not found in any repository.
+repository.remove.infoMsg01 = The component is a directory which should not be removed.
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_zh.properties
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_zh.properties?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_zh.properties (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/i18n-resources/portletinfo_zh.properties Mon May 31 08:55:33 2010
@@ -135,6 +135,8 @@ consolebase.errorMsg21 = æ æ³ä� consolebase.errorMsg22 = å¤çCSRæ¶ç¨æ·è¾å
¥é误ã
consolebase.errorMsg23 = é¢åè¯ä¹¦æ¶éå°é误ã
consolebase.errorMsg24 = é»è®¤çç»å½æ¨¡åä¸åå¨, å¯è½è¢«èªå®ä¹çç»å½æ¨¡åæ¿æ¢ã
+consolebase.errorMsg25 = å é¤åºç°é误
+consolebase.errorMsg26 = è¿ä¸ªç»ä»¶å¨åå¨åºä¸æªæ¾å°
consolebase.infoMsg01 = å·²å¯å¨åºç¨
consolebase.infoMsg02 = å·²åæ¢åºç¨
consolebase.infoMsg03 = å·²éå¯åºç¨
@@ -153,6 +155,8 @@ consolebase.infoMsg15 = CA设置� consolebase.infoMsg16 = æ¹åäºid为<b>{0}</b>çCSR.
consolebase.infoMsg17 = æç»å¹¶å é¤äºid为<b>{0}</b>çCSR.
consolebase.infoMsg18 = æååå¸è¯ä¹¦ãå¨CAç主页é¢ç¹å»'æ¥çå·²åå¸è¯ä¹¦'é¾æ¥å¹¶ä½¿ç¨åºåå·<b>{0}</b>ï¼ä¹å¯ä»¥æ¥çè¯ä¹¦è¯¦æ
ã
+consolebase.infoMsg19 = å·²æåå é¤
+consolebase.infoMsg20 = æ件ç®å½ä¸è½å é¤
consolebase.warnMsg01 = æ æçæ¹åç¶æå¼ï¼
consolebase.warnMsg02 = æªæ¾å°è¯¥ç±»åç模å
consolebase.warnMsg03 = 该Web容å¨ä¸æ¯æWebç»è®¡æ°æ®
@@ -161,3 +165,7 @@ consolebase.warnMsg05 = CAæªå¤� consolebase.warnMsg06 = åºåå·ä¸º<b>{0}</b>çè¯ä¹¦å
å已被åå¸ï¼å½ä½ ç¹å»äº'åå¸è¯ä¹¦'æé®ä¸¤æ¬¡æ¶ä½ å¯è½ä¼çå°è¿æ¡æ¶æ¯ã
consolebase.warnMsg07 = <p style='font-size:120%;'><b>å
³éæå¡å¨å°ä¼ä½¿Webæ§å¶å°ä¸å¯ç¨ï¼åªæå½ä½ ç¡®å®è¦å
³éæå¡å¨æ¶ï¼æ继ç»ã</b></p>
consolebase.warnMsg08 = æªå®ä¹ä»»ä½Web容å¨ã
+repository.remove.successMsg = å·²æåå é¤
+repository.remove.errorMsg01 = å é¤æ¶åºç°é误
+repository.remove.errorMsg02 = è¿ä¸ªç»ä»¶å¨åå¨åºä¸ä¸åå¨
+repository.remove.infoMsg01 = æ件ç®å½ä¸è½å é¤
\ No newline at end of file
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/repository/RepositoryViewPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/repository/RepositoryViewPortlet.java?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/repository/RepositoryViewPortlet.java (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/java/org/apache/geronimo/console/repository/RepositoryViewPortlet.java Mon May 31 08:55:33 2010
@@ -17,43 +17,49 @@
package org.apache.geronimo.console.repository;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.SortedSet;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.portlet.PortletFileUpload;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.geronimo.console.BasePortlet;
import org.apache.geronimo.console.util.PortletManager;
import org.apache.geronimo.kernel.GBeanNotFoundException;
import org.apache.geronimo.kernel.InternalKernelException;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.KernelRegistry;
+import org.apache.geronimo.kernel.config.Configuration;
+import org.apache.geronimo.kernel.config.ConfigurationManager;
+import org.apache.geronimo.kernel.config.ConfigurationUtil;
import org.apache.geronimo.kernel.repository.Artifact;
import org.apache.geronimo.kernel.repository.FileWriteMonitor;
import org.apache.geronimo.kernel.repository.ListableRepository;
-import org.apache.geronimo.kernel.repository.WriteableRepository;
import org.apache.geronimo.kernel.repository.Maven2Repository;
+import org.apache.geronimo.kernel.repository.WriteableRepository;
import org.apache.geronimo.system.resolver.ExplicitDefaultArtifactResolver;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletContext;
-import javax.portlet.PortletException;
-import javax.portlet.PortletRequestDispatcher;
-import javax.portlet.RenderRequest;
-import javax.portlet.RenderResponse;
-import javax.portlet.WindowState;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.SortedSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @version $Rev$ $Date$
@@ -63,6 +69,12 @@ public class RepositoryViewPortlet exten
private static final Logger log = LoggerFactory.getLogger(RepositoryViewPortlet.class);
private Kernel kernel;
+
+ private ConfigurationManager configrationManager;
+
+ private Map<Artifact,LinkedHashSet> childToParents=new HashMap<Artifact,LinkedHashSet>();
+
+ private Map<Artifact,LinkedHashSet<Artifact>> parentToChildren=new HashMap<Artifact,LinkedHashSet<Artifact>>();
private PortletContext ctx;
@@ -75,6 +87,9 @@ public class RepositoryViewPortlet exten
public void init(PortletConfig portletConfig) throws PortletException {
super.init(portletConfig);
kernel = KernelRegistry.getSingleKernel();
+
+ configrationManager=ConfigurationUtil.getConfigurationManager(kernel);
+
ctx = portletConfig.getPortletContext();
normalView = ctx
.getRequestDispatcher("/WEB-INF/view/repository/normal.jsp");
@@ -87,6 +102,7 @@ public class RepositoryViewPortlet exten
public void processAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws PortletException, IOException {
String action = actionRequest.getParameter("action");
+ actionResponse.setRenderParameter("message", ""); // set to blank first
if(action != null && action.equals("usage")) {
// User clicked on a repository entry to view usage
String res = actionRequest.getParameter("res");
@@ -100,29 +116,39 @@ public class RepositoryViewPortlet exten
String res = actionRequest.getParameter("res");
actionResponse.setRenderParameter("mode", "remove");
actionResponse.setRenderParameter("res", res);
+
Maven2Repository repo = (Maven2Repository) PortletManager.getCurrentServer(actionRequest).getRepositories()[0];
Artifact artifact = Artifact.create(res);
File location = repo.getLocation(artifact);
if (location == null) {
- return;//??
+ addErrorMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.errorMsg26"));
+ return;
}
if (location.isDirectory()) {
- //don't use this to uninstall plugins
- return;//??
+ addInfoMessage(actionRequest,getLocalizedString(actionRequest, "consolebase.infoMsg20"));
+ return;
}
- while (true) {
- location.delete();
- location = location.getParentFile();
- File[] contents = location.listFiles();
- if (contents == null || contents.length == 0) {
- return;
+ boolean result=location.delete();
+ if(!result){//can not delete the file maybe the jar is using in the JVM
+ addErrorMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.errorMsg25")+artifact.toString()+showReason(artifact));
+ return;
+ }else{//delete parent folder
+ File versionDir=location.getParentFile();
+ File[] contents=versionDir.listFiles();
+ for(File content:contents){
+ if(!content.delete()){
+ addErrorMessage(actionRequest, getLocalizedString(actionRequest, "consolebase.errorMsg25")+artifact.toString()+showReason(artifact));
+ return;
+ }
}
+ versionDir.delete();
+ addInfoMessage(actionRequest,artifact.toString()+getLocalizedString(actionRequest,"consolebase.infoMsg19"));
+ return;
+
}
}
try {
-
-
WriteableRepository repo = PortletManager.getCurrentServer(actionRequest).getWritableRepositories()[0];
File uploadFile = null;
@@ -228,13 +254,16 @@ public class RepositoryViewPortlet exten
}
}
- protected void doView(RenderRequest request, RenderResponse response)
+ protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
// i think generic portlet already does this
if (WindowState.MINIMIZED.equals(request.getWindowState())) {
return;
}
-
+ childToParents.clear();
+ parentToChildren.clear();
+
+
String mode = request.getParameter("mode");
if(mode != null && mode.equals("usage")) {
String res = request.getParameter("res");
@@ -247,26 +276,37 @@ public class RepositoryViewPortlet exten
usageView.include(request, response);
return;
}
-
+
try {
- List list = new ArrayList();
- ListableRepository[] repos = PortletManager.getCurrentServer(request).getRepositories();
- for (int i = 0; i < repos.length; i++) {
- ListableRepository repo = repos[i];
- final SortedSet artifacts = repo.list();
+ ListableRepository[] repos = PortletManager.getCurrentServer(request).getRepositories();
+ List moduleList=new ArrayList();
+ for(int i=0;i<repos.length;i++){
+ ListableRepository repo=repos[i];
+
+ final SortedSet artifacts=repo.list();
for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) {
String fileName = iterator.next().toString();
- list.add(fileName);
+ ModuleDetails module=new ModuleDetails(fileName);
+ moduleList.add(module);
+
+ Configuration configration=configrationManager.getConfiguration(Artifact.create(fileName));
+
+ if(configration!=null){
+ Artifact configId=configration.getId();
+ LinkedHashSet<Artifact> dependencies=configration.getDependencies();
+
+ for(Artifact dependency:dependencies){
+ addParent(configId,dependency);
+ addChildren(dependency,configId);
+ }
+ }
}
}
- Collections.sort(list);
-
- request.setAttribute("org.apache.geronimo.console.repo.list", list);
+ request.setAttribute("org.apache.geronimo.console.repo.list", moduleList);
} catch (Exception e) {
throw new PortletException(e);
}
-
normalView.include(request, response);
}
@@ -303,4 +343,71 @@ public class RepositoryViewPortlet exten
return listing;
}
+
+ public void addParent(Artifact child,Artifact parent){
+ if(!childToParents.containsKey(child)){
+ LinkedHashSet <Artifact> parents=new LinkedHashSet<Artifact>();
+ parents.add(parent);
+ childToParents.put(child, parents);
+ }else{
+ childToParents.get(child).add(parent);
+ }
+ }
+
+ public void addChildren(Artifact parent,Artifact child){
+ if(!parentToChildren.containsKey(parent)){
+ LinkedHashSet<Artifact> children=new LinkedHashSet<Artifact>();
+ children.add(child);
+ parentToChildren.put(parent, children);
+ }else{
+ parentToChildren.get(parent).add(child);
+ }
+ }
+
+ private String showReason(Artifact artifact){
+ StringBuffer sb=new StringBuffer();
+ sb.append("<br/><br/>Error Reason:the component is using within the server.<br/><br/>");
+ LinkedHashSet<Artifact> children=parentToChildren.get(artifact);
+ if(children!=null){
+ sb.append("The children of "+artifact+":");
+ for(Iterator<Artifact> it=children.iterator();it.hasNext();){
+ sb.append("<br/><span style='padding-left:20px'/>->");
+ sb.append(it.next());
+ }
+ }
+
+ LinkedHashSet<Artifact> parents=childToParents.get(artifact);
+ if(parents!=null){
+ sb.append("The parents of "+artifact+":<br/>");
+ for(Iterator<Artifact> it=parents.iterator();it.hasNext();){
+ sb.append("<br/><span style='padding-left:20px'/>->");
+ sb.append(it.next());
+ }
+ }
+ return sb.toString();
+ }
+
+ public static class ModuleDetails{
+ private String name;
+ private boolean shouldRemove;
+ public ModuleDetails(String fileName){
+ name=fileName;
+ shouldRemove=checkShouldRemove(name);
+ }
+
+ public boolean checkShouldRemove(String name){
+ if(name.endsWith("jar"))
+ return true;
+ return false;
+ }
+
+ public String getName(){
+ return name;
+ }
+
+ public boolean getShouldRemove(){
+ return shouldRemove;
+ }
+
+ }
}
Modified: geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/webapp/WEB-INF/view/repository/normal.jsp
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/webapp/WEB-INF/view/repository/normal.jsp?rev=949693&r1=949692&r2=949693&view=diff
==============================================================================
--- geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/webapp/WEB-INF/view/repository/normal.jsp (original)
+++ geronimo/server/branches/2.2/plugins/console/console-base-portlets/src/main/webapp/WEB-INF/view/repository/normal.jsp Mon May 31 08:55:33 2010
@@ -20,16 +20,20 @@
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
+<%@ taglib uri="/WEB-INF/CommonMsg.tld" prefix="CommonMsg"%>
+
<fmt:setBundle basename="consolebase"/>
<portlet:defineObjects/>
+<CommonMsg:confirmMsg/>
<c:set var="reslist" value="${requestScope['org.apache.geronimo.console.repo.list']}"/>
+
<style type="text/css">
div.Hidden {
display: none;
}
-
+
div.Shown {
display: block;
font-size: 10px;
@@ -113,8 +117,12 @@ function <portlet:namespace/>parse(local
}
}
+function removePrompt(target,componentName){
+ return showConfirmMessage(target, '<fmt:message key="repository.remove.confirm"/>' + componentName + '?', '<fmt:message key="repository.remove.ok"/>', '<fmt:message key="repository.remove.cancel"/>');
+}
</script>
+<CommonMsg:commonMsg/>
<div id="<portlet:namespace/>CommonMsgContainer"></div><br>
<table width="100%">
@@ -124,7 +132,7 @@ function <portlet:namespace/>parse(local
<input type="hidden" value="deploy" name="action"/>
<table width="80%">
<tr>
- <th colspan="2" align="center"><fmt:message key="repository.normal.addArchiveToRepository"/></th>
+ <td colspan="2" align="center"><b><fmt:message key="repository.normal.addArchiveToRepository"/></b></td>
</tr>
<tr>
<td align="right" width="40%"><label for="<portlet:namespace/>local"><fmt:message key="consolebase.common.file"/></label></td>
@@ -166,30 +174,36 @@ function <portlet:namespace/>parse(local
<b><fmt:message key="repository.normal.currentRepositoryEntries"/></b>
<p><fmt:message key="repository.normal.toViewUsage"/></p>
-<ul>
+
<table width="100%" class="TableLine" summary="Repository Manager">
<tr class="DarkBackground">
<th scope="col" align="left"> <fmt:message key="configmanager.normal.componentName" /></th>
<th scope="col" align="left"> <fmt:message key="consolebase.common.commands"/></th>
</tr>
<c:set var="backgroundClass" value='MediumBackground'/>
- <c:forEach items="${reslist}" var="res">
- <c:choose>
- <c:when test="${backgroundClass == 'MediumBackground'}" >
- <c:set var="backgroundClass" value='LightBackground'/>
- </c:when>
- <c:otherwise>
- <c:set var="backgroundClass" value='MediumBackground'/>
- </c:otherwise>
- </c:choose>
- <tr>
- <td class="${backgroundClass}">
- <a href="<portlet:actionURL portletMode="view"><portlet:param name="action" value="usage"/><portlet:param name="res" value="${res}"/></portlet:actionURL>"><c:out value="${res}"/></a>
- </td>
- <td class="${backgroundClass}">
- <a href="<portlet:actionURL portletMode="view"><portlet:param name="action" value="remove"/><portlet:param name="res" value="${res}"/></portlet:actionURL>"><fmt:message key="consolebase.common.remove"/></a>
- </td>
- </tr>
+ <c:forEach items="${reslist}" var="res">
+ <c:choose>
+ <c:when test="${backgroundClass == 'MediumBackground'}" >
+ <c:set var="backgroundClass" value='LightBackground'/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="backgroundClass" value='MediumBackground'/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td class="${backgroundClass}">
+ <a href="<portlet:actionURL portletMode="view"><portlet:param name="action" value="usage"/><portlet:param name="res" value="${res.name}"/></portlet:actionURL>"><c:out value="${res.name}"/></a>
+ </td>
+ <td class="${backgroundClass}">
+ <c:if test="${res.shouldRemove}">
+ <a href="<portlet:actionURL portletMode="view" ><portlet:param name="action" value="remove"/><portlet:param name="res" value="${res.name}"/></portlet:actionURL>"
+ onClick="return removePrompt(this, '${res.name}');"><fmt:message key="consolebase.common.remove"/></a>
+ </c:if>
+ <c:if test="${!res.shouldRemove}">
+
+ </c:if>
+ </td>
+ </tr>
</c:forEach>
</table>
-</ul>
+