[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java | 4 ++++
1 file changed, 4 insertions(+)
New commits:
commit f68be0be9b6e91823b44ebd2b3bf84310592c21b
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 25 16:04:17 2010 -0400
get the summary page's list of files to look right
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
index 45002c1..3822718 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.bundle.create;
import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.HLayout;
@@ -110,6 +111,7 @@ public class BundleSummaryStep implements WizardStep {
Label filesLabel = new Label("Files:");
filesLabel.setWidth("10%");
filesLabel.setAlign(Alignment.LEFT);
+ filesLabel.setValign(VerticalAlignment.TOP);
filesLabel.setWrap(false);
VLayout filesValues = new VLayout();
filesValues.setWidth("90%");
@@ -117,7 +119,9 @@ public class BundleSummaryStep implements WizardStep {
for (String filename : wizard.getAllBundleFilesStatus().keySet()) {
Label fileNameValue = new Label(filename);
fileNameValue.setAlign(Alignment.LEFT);
+ fileNameValue.setValign(VerticalAlignment.TOP);
fileNameValue.setWrap(false);
+ fileNameValue.setHeight(10);
filesValues.addMember(fileNameValue);
}
filesBox.addMember(filesLabel);
14 years, 2 months
[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 45b2d2862527df40a6480432d3f8c6ca4a21a45c
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 25 12:32:38 2010 -0400
forgot to pass in the name in the log message
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java
index 5e812c2..bf2fef0 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java
@@ -315,7 +315,7 @@ public class PluginUpdate {
}
}
}
- LOG.info(AgentI18NResourceKeys.DOWNLOADING_PLUGIN_COMPLETE, plugin.getPath());
+ LOG.info(AgentI18NResourceKeys.DOWNLOADING_PLUGIN_COMPLETE, plugin.getName(), plugin.getPath());
}
/**
14 years, 2 months
[rhq] Branch 'bugfixes' - modules/enterprise
by ips
modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java | 22 ++++++++--
modules/enterprise/server/plugins/jboss-software/src/test/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtilityTest.java | 15 ++++++
2 files changed, 33 insertions(+), 4 deletions(-)
New commits:
commit 6345fd47ccfd12a3729d773f64b07f4613e64ede
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Thu Mar 25 11:31:48 2010 -0400
add unit test and bug fix for HtmlUtility.unescapeHtml()
diff --git a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java
index b3ae50a..bc1ec97 100644
--- a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java
+++ b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java
@@ -72,18 +72,22 @@ public class HtmlUtility {
if (ampersandIndex >= 0 && ampersandIndex < (string.length() - 3)) {
int semicolonIndex = string.indexOf(";", ampersandIndex + 1);
if (semicolonIndex >= 0) {
- // Found an entity - see if it's one we grok.
+ // Found an entity.
+
+ // Append the substring from the index up to but not including the ampersand.
+ unescapedString.append(string.substring(index, ampersandIndex));
+
String entity = string.substring(ampersandIndex, semicolonIndex + 1);
+ // See if the entity is one we grok.
Character c = ENTITY_TO_CHAR_MAP.get(entity);
if (c != null) {
- // If we were able to map the entity, append the unescaped character.
+ // If we were able to map the entity to a character, append the character.
unescapedString.append(c);
} else {
// Otherwise, append the unknown entity as is.
unescapedString.append(entity);
}
- // Append the substring from the index up to but not including the ampersand.
- unescapedString.append(string.substring(index, ampersandIndex));
+
index = semicolonIndex + 1;
} else {
// No semicolon found - not an entity. Append the substring from the index up to and including the
@@ -100,4 +104,14 @@ public class HtmlUtility {
return unescapedString.toString();
}
+
+ public static void main(String[] args) {
+ if (args.length != 1) {
+ System.err.println("Usage: java " + HtmlUtility.class.getName() + " html");
+ System.exit(1);
+ }
+ String html = args[0];
+ String unescapedHtml = unescapeHTML(html);
+ System.out.println(unescapedHtml);
+ }
}
diff --git a/modules/enterprise/server/plugins/jboss-software/src/test/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtilityTest.java b/modules/enterprise/server/plugins/jboss-software/src/test/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtilityTest.java
new file mode 100644
index 0000000..5333080
--- /dev/null
+++ b/modules/enterprise/server/plugins/jboss-software/src/test/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtilityTest.java
@@ -0,0 +1,15 @@
+package org.rhq.enterprise.server.plugins.jboss.software;
+
+import org.testng.annotations.Test;
+
+/**
+ * @author Ian Springer
+ */
+public class HtmlUtilityTest {
+ @Test
+ public void testUnescapeHTML() throws Exception {
+ String result = HtmlUtility.unescapeHTML(" <html>\nblah \n</html>&foo&bleh;");
+ System.out.println("result=[" + result + "]");
+ assert result.equals(" <html>\nblah \n</html>&foo&bleh;");
+ }
+}
14 years, 2 months
[rhq] Branch 'bugfixes' - 17 commits - modules/core modules/enterprise modules/plugins pom.xml
by ips
modules/core/domain/src/main/java/org/rhq/core/domain/content/Repo.java | 25
modules/core/native-system/src/main/java/org/rhq/core/system/SystemInfoFactory.java | 23
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentMain.java | 25
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/i18n/AgentI18NResourceKeys.java | 9
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/ListAlertHistoryUIBean.java | 2
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/NotificationTemplatesUIBean.java | 3
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentProviderDetailsUIBean.java | 32
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceCandidateReposUIBean.java | 50 +
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceReposUIBean.java | 2
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoPackageVersionsUIBean.java | 2
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/browse/BrowseGroupsUIBean.java | 8
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/subsystem/SubsystemAlertHistoryUIBean.java | 9
modules/enterprise/gui/portal-war/src/main/webapp-filtered/WEB-INF/classes/ApplicationResources.properties | 2
modules/enterprise/gui/portal-war/src/main/webapp/css/win.css | 9
modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/contentProvider.xhtml | 139 +--
modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/listRepos.xhtml | 6
modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/repo.xhtml | 39
modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml | 2
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/alert/viewAlert.xhtml | 8
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/subscription.xhtml | 444 +++++-----
modules/enterprise/gui/portal-war/src/main/webapp/rhq/subsystem/alertHistory.xhtml | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java | 13
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerLocal.java | 3
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java | 3
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java | 3
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java | 125 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java | 141 +--
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentServerPluginContainer.java | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoDetails.java | 13
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoGroupDetails.java | 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/AdvisorySourceSynchronizer.java | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/DistributionSourceSynchronizer.java | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/PackageSourceSynchronizer.java | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java | 38
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/RepoSyncJob.java | 1
modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java | 103 ++
modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java | 14
modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/RssFeedParser.java | 44
modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/util/DeploymentUtility.java | 2
modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java | 35
modules/plugins/jmx/src/main/resources/META-INF/rhq-plugin.xml | 2
pom.xml | 10
43 files changed, 873 insertions(+), 544 deletions(-)
New commits:
commit 0ece93f48fe89488acd1ee8a319da9ec329ebf75
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Wed Mar 24 19:22:49 2010 -0400
misc minor bugfixes and improvements of content GUI, geared toward making installation of patches from JBoss CSP more intuitive
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/content/Repo.java b/modules/core/domain/src/main/java/org/rhq/core/domain/content/Repo.java
index 9f810bc..93aef39 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/Repo.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/Repo.java
@@ -48,6 +48,7 @@ import javax.persistence.Table;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlTransient;
+import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.common.Tag;
import org.rhq.core.domain.common.Taggable;
import org.rhq.core.domain.resource.Resource;
@@ -88,7 +89,8 @@ import org.rhq.core.domain.resource.Resource;
+ ") "
+ "FROM Repo AS c "
+ "WHERE c.id NOT IN ( SELECT rc.repo.id FROM ResourceRepo rc WHERE rc.resource.id = :resourceId ) "
- + "AND c.candidate is false " + "GROUP BY c, c.name, c.description, c.creationDate, c.lastModifiedDate"),
+ + "AND c.candidate = false "
+ + "GROUP BY c, c.name, c.description, c.creationDate, c.lastModifiedDate"),
@NamedQuery(name = Repo.QUERY_FIND_AVAILABLE_REPO_COMPOSITES_BY_RESOURCE_ID_COUNT, query = "SELECT COUNT( c ) "
+ "FROM Repo AS c "
+ "WHERE c.id NOT IN ( SELECT rc.repo.id FROM ResourceRepo rc WHERE rc.resource.id = :resourceId ) "
@@ -797,7 +799,7 @@ public class Repo implements Serializable, Taggable {
/**
* Add a tag association with this repo.
*
- * @param tag
+ * @param tag
*/
public void addTag(Tag tag) {
if (this.repoTags == null) {
@@ -811,7 +813,7 @@ public class Repo implements Serializable, Taggable {
/**
* Set tag associations with this repo.
*
- * @param tag
+ * @param tags
*/
public void setTags(Set<Tag> tags) {
if (this.repoTags == null) {
@@ -870,23 +872,20 @@ public class Repo implements Serializable, Taggable {
/**
* The list of sync results - order ENSURED by the incrementing ID of this object
*/
+ @NotNull
public List<RepoSyncResults> getSyncResults() {
- if (syncResults == null) {
- return null;
+ if (this.syncResults == null) {
+ this.syncResults = new ArrayList<RepoSyncResults>();
+ return this.syncResults;
}
- Comparator dc = new Comparator() {
- public int compare(Object arg0, Object arg1) {
- RepoSyncResults c1 = (RepoSyncResults) arg0;
- RepoSyncResults c2 = (RepoSyncResults) arg1;
-
+ Collections.sort(syncResults, new Comparator<RepoSyncResults>() {
+ public int compare(RepoSyncResults c1, RepoSyncResults c2) {
Integer id1 = c1.getId();
Integer id2 = c2.getId();
-
return id1.compareTo(id2);
}
- };
- Collections.sort(syncResults, dc);
+ });
return syncResults;
}
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentProviderDetailsUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentProviderDetailsUIBean.java
index b80763d..52b011f 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentProviderDetailsUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentProviderDetailsUIBean.java
@@ -66,34 +66,36 @@ public class ContentProviderDetailsUIBean {
public String test() {
ContentSourceManagerLocal manager = LookupUtil.getContentSourceManager();
- try {
- if (manager.testContentSourceConnection(contentSource.getId())) {
- FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO,
- "The test passed - the remote repository for [" + contentSource.getName() + "] is available.");
- } else {
- FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,
- "Failed the attempt to connect to the remote repository for [" + contentSource.getName()
- + "] Check the configuration and make sure the remote repository is up.");
- }
- } catch (Exception e) {
+ if (manager.testContentSourceConnection(contentSource.getId())) {
+ FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO,
+ "Test passed - the remote repository for [" + contentSource.getName() + "] is available.");
+ } else {
FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,
- "Unable to make a connection to the remote repository for [" + contentSource.getName() + "]", e);
+ "Test failed - failed to connect to the remote repository for [" + contentSource.getName()
+ + "] - check the configuration and make sure the remote repository is up and reachable.");
}
return "success";
}
public String sync() {
- Subject subject = EnterpriseFacesContextUtility.getSubject();
- ContentSourceManagerLocal manager = LookupUtil.getContentSourceManager();
+ // Test the content provider connection before proceeding.
+ ContentSourceManagerLocal contentSourceManager = LookupUtil.getContentSourceManager();
+ if (!contentSourceManager.testContentSourceConnection(contentSource.getId())) {
+ FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR,
+ "Failed to connect to the remote repository for [" + contentSource.getName()
+ + "] - check the configuration and make sure the remote repository is up and reachable.");
+ return "success";
+ }
+ Subject subject = EnterpriseFacesContextUtility.getSubject();
try {
- manager.synchronizeAndLoadContentSource(subject, contentSource.getId());
+ contentSourceManager.synchronizeAndLoadContentSource(subject, contentSource.getId());
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Synchronizing content provider ["
+ contentSource.getName() + "] now.");
} catch (Exception e) {
FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,
- "Failed to start the sychronization process for [" + contentSource.getName() + "]", e);
+ "Failed to start the synchronization process for [" + contentSource.getName() + "]", e);
}
return "success";
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceCandidateReposUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceCandidateReposUIBean.java
index 5f3ea5a..cf94b98 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceCandidateReposUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceCandidateReposUIBean.java
@@ -18,8 +18,10 @@
*/
package org.rhq.enterprise.gui.content;
+import javax.faces.application.FacesMessage;
import javax.faces.model.DataModel;
+import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.util.PageControl;
@@ -30,8 +32,12 @@ import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
+import org.rhq.enterprise.server.content.RepoManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
+import java.util.ArrayList;
+import java.util.List;
+
public class ContentSourceCandidateReposUIBean extends PagedDataTableUIBean {
public static final String MANAGED_BEAN_NAME = ContentSourceCandidateReposUIBean.class.getSimpleName();
@@ -39,6 +45,32 @@ public class ContentSourceCandidateReposUIBean extends PagedDataTableUIBean {
public ContentSourceCandidateReposUIBean() {
}
+ public String importSelectedRepos() {
+ Subject subject = EnterpriseFacesContextUtility.getSubject();
+ String[] selected = getSelectedContentSourceRepos();
+ int contentProviderId = Integer.valueOf(FacesContextUtility.getRequiredRequestParameter("id"));
+ int[] repoIds = getIntegerArray(selected);
+
+ if (repoIds.length > 0) {
+ try {
+ RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
+ List<Integer> ids = new ArrayList<Integer>(repoIds.length);
+ for (int repoId : repoIds) {
+ ids.add(repoId);
+ }
+ repoManager.importCandidateRepo(subject, ids);
+
+ FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Imported " + repoIds.length
+ + " repositories from content provider.");
+ } catch (Exception e) {
+ FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR,
+ "Failed to import one or more repositories from content provider.", e);
+ }
+ }
+
+ return "success";
+ }
+
@Override
public DataModel getDataModel() {
if (dataModel == null) {
@@ -66,4 +98,22 @@ public class ContentSourceCandidateReposUIBean extends PagedDataTableUIBean {
return results;
}
}
+
+ private String[] getSelectedContentSourceRepos() {
+ return FacesContextUtility.getRequest().getParameterValues("selectedCandidateRepos");
+ }
+
+ @NotNull
+ private int[] getIntegerArray(String[] input) {
+ if (input == null) {
+ return new int[0];
+ }
+
+ int[] output = new int[input.length];
+ for (int i = 0; i < output.length; i++) {
+ output[i] = Integer.valueOf(input[i]).intValue(); // force it to parse to make sure its valid
+ }
+
+ return output;
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceReposUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceReposUIBean.java
index 455be12..bfe2483 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceReposUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/ContentSourceReposUIBean.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.content;
import javax.faces.application.FacesMessage;
import javax.faces.model.DataModel;
+import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.util.PageControl;
@@ -94,6 +95,7 @@ public class ContentSourceReposUIBean extends PagedDataTableUIBean {
return FacesContextUtility.getRequest().getParameterValues("selectedContentSourceRepos");
}
+ @NotNull
private int[] getIntegerArray(String[] input) {
if (input == null) {
return new int[0];
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoPackageVersionsUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoPackageVersionsUIBean.java
index b738e02..5d1305d 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoPackageVersionsUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/content/RepoPackageVersionsUIBean.java
@@ -71,7 +71,7 @@ public class RepoPackageVersionsUIBean extends PagedDataTableUIBean {
contentManager.deployPackages(subject, resourceIds, packageIds);
} catch (Exception e) {
FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to deploy packages: " + packageIds
- + " to resources subscribed to repo: " + repoId + " Error: " + e.getMessage());
+ + " to Resources subscribed to repository: " + repoId + " Error: " + e.getMessage());
}
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp-filtered/WEB-INF/classes/ApplicationResources.properties b/modules/enterprise/gui/portal-war/src/main/webapp-filtered/WEB-INF/classes/ApplicationResources.properties
index 8132311..1ce62b1 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp-filtered/WEB-INF/classes/ApplicationResources.properties
+++ b/modules/enterprise/gui/portal-war/src/main/webapp-filtered/WEB-INF/classes/ApplicationResources.properties
@@ -2956,7 +2956,7 @@ largeenv.breadcrumb=Large Environment Preparation
resource.inventory.view.deleteResourceConfirm = Deleting this resource will delete the actual resource being managed on the agent machine. Are you sure you want to proceed?
# Content Provider
-contentprovider.list.breadcrumb=Content Provider
+contentprovider.list.breadcrumb=Content Providers
contentprovider.new.breadcrumb=New
# Repo
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/css/win.css b/modules/enterprise/gui/portal-war/src/main/webapp/css/win.css
index 01fd46c..76d051e 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/css/win.css
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/css/win.css
@@ -23,6 +23,15 @@ IMG {
border-style: none;
}
+PRE {
+ /* Wrap lines longer than the containing block. */
+ white-space: pre-wrap; /* css-3 */
+ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+}
+
HR {
width: 100%;
height: 1px;
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/contentProvider.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/contentProvider.xhtml
index 373507b..ea760cd 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/contentProvider.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/contentProvider.xhtml
@@ -11,7 +11,8 @@
xmlns:c="http://java.sun.com/jstl/core"
xmlns:onc="http://jboss.org/on/component"
xmlns:onf="http://jboss.org/on/function"
- xmlns:rich="http://richfaces.ajax4jsf.org/rich">
+ xmlns:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich">
<ui:composition template="/rhq/layout/main.xhtml">
@@ -34,6 +35,16 @@
<ui:define name="body">
+ <a4j:region>
+ <h:form id="pollerForm">
+ <input type="hidden" name="id" value="#{param.id}"/>
+ <input type="hidden" name="mode" value="#{param.mode}"/>
+
+ <!-- TODO: Only update if a sync is in progress. -->
+ <a4j:poll id="poller" interval="7000" enabled="true" reRender="poller,bodyPanel"/>
+ </h:form>
+ </a4j:region>
+
<h:messages showSummary="true"
showDetail="true"
infoClass="InfoBlock"
@@ -42,7 +53,9 @@
fatalClass="FatalBlock"
globalOnly="true"
layout="table"
- width="100%"/>
+ style="width: 100%"/>
+
+ <h:panelGroup id="bodyPanel" layout="block">
<h:form id="contentProviderDetailsForm">
<input type="hidden" name="id" value="${param.id}"/>
@@ -72,7 +85,7 @@
</td>
</tr>
<tr>
- <td align="right"><b>Sync Schedule:</b></td>
+ <td align="right"><b>Synchronization Schedule:</b></td>
<td align="left">
<h:inputText rendered="${mode eq 'edit'}" value="#{ContentProviderDetailsUIBean.contentSource.syncSchedule}" />
<h:outputText rendered="${mode ne 'edit'}" value="#{ContentProviderDetailsUIBean.contentSource.syncSchedule}" />
@@ -143,21 +156,16 @@
</rich:panel>
<rich:panel>
- <table>
- <tr>
- <td>
- <onc:config configurationDefinition="#{ContentProviderDetailsUIBean.contentSourceTypeConfigurationDefinition}"
- configuration="#{ContentProviderDetailsUIBean.contentSource.configuration}"
- readOnly="#{mode ne 'edit'}"
- nullConfigurationDefinitionMessage="This content provider type does not require a configuration."
- nullConfigurationMessage="Configuration is empty."
- nullConfigurationStyle="InfoBlock"/>
- </td>
- </tr>
- </table>
+ <onc:config configurationDefinition="#{ContentProviderDetailsUIBean.contentSourceTypeConfigurationDefinition}"
+ configuration="#{ContentProviderDetailsUIBean.contentSource.configuration}"
+ readOnly="#{mode ne 'edit'}"
+ nullConfigurationDefinitionMessage="This content provider type does not require a configuration."
+ nullConfigurationMessage="Configuration is empty."
+ nullConfigurationStyle="InfoBlock"/>
</rich:panel>
<h:panelGrid columns="3" styleClass="buttons-table" columnClasses="button-cell">
+ <ui:remove><!-- view mode buttons --></ui:remove>
<h:commandButton rendered="${mode ne 'edit'}"
value="EDIT" action="#{ContentProviderDetailsUIBean.edit}"
alt="Edit" styleClass="buttonmed" id="editButton"/>
@@ -167,6 +175,8 @@
<h:commandButton rendered="${mode ne 'edit'}"
value="SYNCHRONIZE" action="#{ContentProviderDetailsUIBean.sync}"
alt="Synchronize" styleClass="buttonmed" id="syncButton"/>
+
+ <ui:remove><!-- edit mode buttons --></ui:remove>
<h:commandButton rendered="${mode eq 'edit'}"
value="SAVE" action="#{ContentProviderDetailsUIBean.save}"
alt="Save" styleClass="buttonmed" id="saveButton"/>
@@ -177,7 +187,9 @@
</h:form>
- <!-- REPOS LIST -->
+
+
+ <!-- IMPORTED (NOT CANDIDATE) REPOS LIST -->
<h:form id="contentProviderReposListForm">
<input type="hidden" name="id" value="${param.id}"/>
@@ -185,7 +197,7 @@
<rich:panel>
<f:facet name="header">
- <h:outputText value="Repositories Associated With This Content Provider"/>
+ <h:outputText value="Repositories"/>
</f:facet>
<h:panelGrid columns="1" width="100%">
@@ -193,8 +205,8 @@
<ui:param name="contentProviderReposDataModel" value="#{ContentSourceReposUIBean.dataModel}"/>
<rich:dataTable id="contentProviderReposDataTable"
rows="#{PageControl.ContentSourceReposList.pageSize}"
- value="contentProviderReposDataModel"
- var="repolitem"
+ value="#{contentProviderReposDataModel}"
+ var="repo"
width="100%"
columnsWidth="1%, 20%, 20%, 20%"
headerClass="tableRowHeader"
@@ -202,7 +214,6 @@
onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
-
<f:facet name="PageControlView">
<onc:paginationControl id="ContentSourceReposList" />
</f:facet>
@@ -212,7 +223,7 @@
<onc:allSelect target="selectedContentSourceRepos" />
</f:facet>
- <onc:select name="selectedContentSourceRepos" value="#{repoitem.id}" />
+ <onc:select name="selectedContentSourceRepos" value="#{repo.id}" />
</rich:column>
<rich:column rendered="#{param.debug}">
@@ -222,7 +233,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{repoitem.id}"/>
+ <h:outputText value="#{repo.id}"/>
</rich:column>
<rich:column>
@@ -234,8 +245,8 @@
<h:outputLink value="repo.xhtml">
<f:param name="mode" value="view"/>
- <f:param name="id" value="#{repoitem.id}"/>
- <h:outputText value="#{repoitem.name}" />
+ <f:param name="id" value="#{repo.id}"/>
+ <h:outputText value="#{repo.name}" />
</h:outputLink>
</rich:column>
@@ -246,7 +257,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{repoitem.creationDate}">
+ <h:outputText value="#{repo.creationDate}">
<f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
</h:outputText>
</rich:column>
@@ -258,7 +269,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{repoitem.lastModifiedDate}">
+ <h:outputText value="#{repo.lastModifiedDate}">
<f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
</h:outputText>
</rich:column>
@@ -270,16 +281,20 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{repoitem.description}"/>
+ <h:outputText value="#{repo.description}"/>
</rich:column>
<f:facet name="footer">
<rich:columnGroup>
<!-- colspan 6:5 for the debug 'id' column -->
<rich:column colspan="#{param.debug ? 6 : 5}" width="100%">
+ <ui:remove>
+ <!--
<onc:selectCommandButton action="#{ContentSourceReposUIBean.deleteSelectedContentSourceRepos}"
- value="DISASSOCIATE SELECTED" target="selectedContentSourceRepos" styleClass="on-pager-button buttonsmall"/>
-
+ value="DISASSOCIATE SELECTED" target="selectedContentSourceRepos"
+ styleClass="on-pager-button buttonsmall"/>
+ -->
+ </ui:remove>
<ui:param name="paginationDataTableName" value="contentProviderReposDataTable"/>
<ui:param name="paginationDataModel" value="#{contentProviderReposDataModel}"/>
<ui:param name="paginationPageControl" value="#{PageControl.ContentSourceReposList}"/>
@@ -294,8 +309,9 @@
</rich:panel>
</h:form>
-
- <!-- SYNCHRONIZATION RESULTS LIST -->
+
+
+ <!-- REPO IMPORT RESULTS LIST -->
<h:form id="contentSourceSyncResultsListForm">
<input type="hidden" name="id" value="${param.id}"/>
@@ -303,7 +319,7 @@
<rich:panel>
<f:facet name="header">
- <h:outputText value="Synchronization Results"/>
+ <h:outputText value="Repository Import Results"/>
</f:facet>
<h:panelGrid columns="1" width="100%">
@@ -386,10 +402,12 @@
<rich:componentControl for="resultsModalPanel" attachTo="resultsLink" operation="show" event="onclick"/>
</h:outputLink>
<h:outputText rendered="#{syncitem.results eq null}" value=""/>
- <rich:modalPanel id="resultsModalPanel" width="350" height="300" style="overflow: auto;">
+
+ <rich:modalPanel id="resultsModalPanel" width="640" height="480" moveable="false" resizeable="false"
+ style="overflow: auto;">
<f:facet name="header">
- <h:panelGroup>
- <h:outputText value="Results" />
+ <h:panelGroup layout="block">
+ Results for synchronization request with id #{syncitem.id}
</h:panelGroup>
</f:facet>
<f:facet name="controls">
@@ -398,7 +416,9 @@
<rich:componentControl for="resultsModalPanel" attachTo="resultsModelPanelHideLink" operation="hide" event="onclick"/>
</h:panelGroup>
</f:facet>
- <PRE><h:outputText value="#{syncitem.results}" /></PRE>
+ <h:panelGroup layout="block">
+ <pre>#{syncitem.results}</pre>
+ </h:panelGroup>
</rich:modalPanel>
</rich:column>
@@ -424,15 +444,17 @@
</h:form>
- <!-- REPO LIST -->
- <h:form id="contentSourceRepoListForm">
+
+ <!-- CANDIDATE (NOT IMPORTED) REPOS LIST -->
+
+ <h:form id="contentSourceRepoListForm" rendered="#{ContentSourceCandidateReposUIBean.dataModel.rowCount gt 0}">
<input type="hidden" name="id" value="${param.id}"/>
<input type="hidden" name="mode" value="${param.mode}"/>
<rich:panel>
<f:facet name="header">
- <h:outputText value="Repositories you can synchronize from this Content Provider"/>
+ <h:outputText value="Candidate Repositories"/>
</f:facet>
<h:panelGrid columns="2" width="100%">
@@ -441,42 +463,43 @@
<rich:dataTable id="contentSourceReposDataTable"
rows="#{PageControl.ContentSourceCandidateReposList.pageSize}"
value="#{contentSourceReposDataModel}"
- var="repoitem"
+ var="repo"
width="100%"
- columnsWidth="100%"
+ columnsWidth="1%,99%"
headerClass="tableRowHeader"
footerClass="on-pager-footer"
onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
-
<f:facet name="PageControlView">
<onc:paginationControl id="ContentSourceCandidateReposList" />
</f:facet>
- <rich:column rendered="#{param.debug}">
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.id">
- <h:outputText styleClass="headerText" value="ID" />
- </onc:sortableColumnHeader>
- </f:facet>
- <h:outputText value="#{repoitem.id}"/>
- </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:allSelect target="selectedCandidateRepos" />
+ </f:facet>
+
+ <onc:select name="selectedCandidateRepos" value="#{repo.id}" />
+ </rich:column>
+
<rich:column>
<f:facet name="header">
<onc:sortableColumnHeader sort="c.name">
<h:outputText styleClass="headerText" value="Name" />
</onc:sortableColumnHeader>
</f:facet>
- <h:outputLink value="repo.xhtml">
- <f:param name="mode" value="view"/>
- <f:param name="id" value="#{repoitem.id}"/>
- <h:outputText value="#{repoitem.name}" />
- </h:outputLink>
+
+ <h:outputText value="#{repo.name}" />
+ <h:outputText value="(id=#{repo.id})" rendered="#{param.debug}" />
</rich:column>
+
<f:facet name="footer">
<rich:columnGroup>
- <!-- colspan 6:5 for the debug 'id' column -->
- <rich:column colspan="#{param.debug ? 6 : 5}" width="100%">
+ <!-- colspan 7:6 for the debug 'id' column -->
+ <rich:column colspan="2" width="100%">
+ <onc:selectCommandButton action="#{ContentSourceCandidateReposUIBean.importSelectedRepos}"
+ value="IMPORT SELECTED" target="selectedCandidateRepos" styleClass="on-pager-button buttonsmall"/>
<ui:param name="paginationDataTableName" value="contentSourceReposDataTable"/>
<ui:param name="paginationDataModel" value="#{contentSourceReposDataModel}"/>
<ui:param name="paginationPageControl" value="#{PageControl.ContentSourceCandidateReposList}"/>
@@ -492,6 +515,8 @@
</rich:panel>
</h:form>
+ </h:panelGroup>
+
</ui:define>
</ui:composition>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/listRepos.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/listRepos.xhtml
index 284dd88..3561655 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/listRepos.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/listRepos.xhtml
@@ -114,10 +114,8 @@
</f:facet>
<a4j:region>
- <a4j:poll id="poll" interval="5000"
- reRender="statusid" />
- <h:outputText style="font-size:16px"
- value="#{item.syncStatus}" />
+ <a4j:poll id="poll" interval="5000" reRender="statusid" />
+ <h:outputText styleClass="headerText" value="#{item.syncStatus}" />
</a4j:region>
</rich:column>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/repo.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/repo.xhtml
index 1a12dd0..91a35b4 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/repo.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/content/repo.xhtml
@@ -109,14 +109,14 @@
</c:choose></td>
</tr>
<tr>
- <td align="right"><b>Raw Percentage :</b></td>
+ <td align="right"><b>Raw Percentage:</b></td>
<td align="left">
<h:outputText id="syncPercent"
value="#{RepoDetailsUIBean.percentComplete}" />
</td>
</tr>
<tr>
- <td align="right"><b>Synchronization Progress :</b></td>
+ <td align="right"><b>Synchronization Progress:</b></td>
<td align="left">
<c:choose>
<c:when
@@ -493,7 +493,9 @@
</rich:panel>
</h:form>
- <!-- PACKAGE VERSION LIST -->
+
+
+ <!-- PACKAGE LIST -->
<h:form id="repoPackageVersionsListForm">
<a4j:region id="packageList">
@@ -503,7 +505,7 @@
<rich:panel>
<f:facet name="header">
<h:outputText
- value="Package Versions Accessible To This Repository" />
+ value="Packages" />
</f:facet>
<h:panelGrid columns="1" width="100%">
@@ -531,18 +533,16 @@
</h:panelGroup>
-
<ui:param name="repoPackageVersionsDataModel"
value="#{RepoPackageVersionsUIBean.dataModel}" />
<rich:dataTable id="repoPackageVersionsDataTable"
rows="#{PageControl.RepoPackageVersionsList.pageSize}"
- value="#{repoPackageVersionsDataModel}" var="pvitem"
+ value="#{repoPackageVersionsDataModel}" var="package"
width="100%" columnsWidth="5%,20%, 10%, 5%, 60%"
headerClass="tableRowHeader" footerClass="on-pager-footer"
onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
-
<f:facet name="PageControlView">
<onc:paginationControl id="RepoPackageVersionsList" />
</f:facet>
@@ -552,10 +552,9 @@
<onc:allSelect target="selectedPackages" />
</f:facet>
- <onc:select name="selectedPackages" value="#{pvitem.id}" />
+ <onc:select name="selectedPackages" value="#{package.id}" />
</rich:column>
-
<rich:column rendered="#{param.debug}">
<f:facet name="header">
<onc:sortableColumnHeader sort="pv.id">
@@ -563,7 +562,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{pvitem.id}" />
+ <h:outputText value="#{package.id}" />
</rich:column>
<rich:column>
@@ -574,8 +573,8 @@
</f:facet>
<h:outputLink value="packageVersion.xhtml">
- <f:param name="id" value="#{pvitem.id}" />
- <h:outputText value="#{pvitem.displayName}" />
+ <f:param name="id" value="#{package.id}" />
+ <h:outputText value="#{package.displayName}" />
</h:outputLink>
</rich:column>
@@ -587,7 +586,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{pvitem.displayVersion}" />
+ <h:outputText value="#{package.displayVersion}" />
</rich:column>
<rich:column>
@@ -597,7 +596,7 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{pvitem.architecture.name}" />
+ <h:outputText value="#{package.architecture.name}" />
</rich:column>
<rich:column>
@@ -608,7 +607,9 @@
</onc:sortableColumnHeader>
</f:facet>
- <h:outputText value="#{pvitem.shortDescription}" />
+ <h:panelGroup layout="block">
+ <h:outputText value="#{package.shortDescription}" escape="false" />
+ </h:panelGroup>
</rich:column>
<f:facet name="footer">
@@ -650,7 +651,7 @@
</a4j:region>
</h:form>
- <h:form id="repoDistributionListForm">
+ <h:form id="repoDistributionListForm" rendered="#{RepoDistributionUIBean.dataModel.rowCount gt 0}">
<a4j:region id="distributionList">
<input type="hidden" name="id" value="${param.id}" />
<input type="hidden" name="mode" value="${param.mode}" />
@@ -658,7 +659,7 @@
<rich:panel>
<f:facet name="header">
<h:outputText
- value="Distribution Trees Associated To This Repository" />
+ value="Distribution Trees" />
</f:facet>
<h:panelGrid columns="1" width="100%">
@@ -745,14 +746,14 @@
</a4j:region>
</h:form>
- <h:form id="repoAdvisoryListForm">
+ <h:form id="repoAdvisoryListForm" rendered="#{RepoAdvisoryUIBean.dataModel.rowCount gt 0}">
<a4j:region id="advisoryList">
<input type="hidden" name="id" value="${param.id}" />
<input type="hidden" name="mode" value="${param.mode}" />
<rich:panel>
<f:facet name="header">
- <h:outputText value="Advisory Associated To This Repository" />
+ <h:outputText value="Advisories" />
</f:facet>
<h:panelGrid columns="1" width="100%">
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/subscription.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/subscription.xhtml
index 01ef108..b2f1380 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/subscription.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/content/subscription.xhtml
@@ -1,263 +1,265 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:c="http://java.sun.com/jstl/core"
- xmlns:onc="http://jboss.org/on/component"
- xmlns:onf="http://jboss.org/on/function"
- xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
- xmlns:rich="http://richfaces.ajax4jsf.org/rich">
-
-<ui:composition template="/rhq/resource/layout/main.xhtml">
-
+<?xml version="1.0"?>
+
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:c="http://java.sun.com/jstl/core"
+ xmlns:onc="http://jboss.org/on/component"
+ xmlns:onf="http://jboss.org/on/function"
+ xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
+ xmlns:rich="http://richfaces.ajax4jsf.org/rich">
+
+<ui:composition template="/rhq/resource/layout/main.xhtml">
+
<ui:param name="pageTitle" value="View Repo Subscriptions for Resource '#{ResourceUIBean.name}'"/>
- <ui:param name="selectedTabName" value="Content.Subscriptions"/>
-
- <ui:define name="content">
-
- <!-- CURRENT REPOS -->
+ <ui:param name="selectedTabName" value="Content.Subscriptions"/>
+
+ <ui:define name="content">
+
+ <!-- CURRENT REPOS -->
<h:form id="currentRepoForm">
- <input type="hidden" name="id" value="${param.id}"/>
-
- <rich:panel styleClass="BlockContent">
- <f:facet name="header"><h:outputText value="Current Resource Subscriptions"/></f:facet>
+ <input type="hidden" name="id" value="${param.id}"/>
+
+ <rich:panel styleClass="BlockContent">
+ <f:facet name="header"><h:outputText value="Current Resource Subscriptions"/></f:facet>
<a4j:keepAlive beanName="ResourceReposUIBean"/>
-
+
<ui:param name="resourceReposDataModel" value="#{ResourceReposUIBean.dataModel}"/>
<rich:dataTable id="resourceReposDataTable"
rows="#{PageControl.ResourceReposList.pageSize}"
value="#{resourceReposDataModel}"
- var="item"
- width="100%"
- columnsWidth="1%, 25%, 40%, 5%, 15%, 15%"
- headerClass="tableRowHeader"
- footerClass="on-pager-footer"
- onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
- onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
-
- <f:facet name="PageControlView">
+ var="item"
+ width="100%"
+ columnsWidth="1%, 25%, 40%, 5%, 15%, 15%"
+ headerClass="tableRowHeader"
+ footerClass="on-pager-footer"
+ onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
+ onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
+
+ <f:facet name="PageControlView">
<onc:paginationControl id="ResourceReposList" />
- </f:facet>
-
- <rich:column>
- <f:facet name="header">
+ </f:facet>
+
+ <rich:column>
+ <f:facet name="header">
<onc:allSelect target="selectedResourceRepos" />
- </f:facet>
-
+ </f:facet>
+
<onc:select name="selectedResourceRepos" value="#{item.repo.id}"/>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.name">
- <h:outputText styleClass="headerText" value="Name" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.name">
+ <h:outputText styleClass="headerText" value="Name" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputLink value="/rhq/content/repo.xhtml">
- <f:param name="mode" value="view"/>
+ <f:param name="mode" value="view"/>
<f:param name="id" value="#{item.repo.id}"/>
<h:outputText value="#{item.repo.name}" />
- </h:outputLink>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <h:outputText styleClass="headerText" value="Description" />
- </f:facet>
-
+ </h:outputLink>
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <h:outputText styleClass="headerText" value="Description" />
+ </f:facet>
+
<h:outputText value="#{item.repo.description}"/>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="COUNT(pv)">
- <h:outputText styleClass="headerText" value="Package Count" />
- </onc:sortableColumnHeader>
- </f:facet>
-
- <h:outputText value="#{item.packageVersionCount}" />
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.creationDate">
- <h:outputText styleClass="headerText" value="Created" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="COUNT(pv)">
+ <h:outputText styleClass="headerText" value="Package Count" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
+ <h:outputText value="#{item.packageVersionCount}" />
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.creationDate">
+ <h:outputText styleClass="headerText" value="Created" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputText value="#{item.repo.creationDate}">
- <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
- </h:outputText>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.lastModifiedDate">
- <h:outputText styleClass="headerText" value="Last Modified" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
+ </h:outputText>
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.lastModifiedDate">
+ <h:outputText styleClass="headerText" value="Last Modified" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputText value="#{item.repo.lastModifiedDate}">
- <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
- </h:outputText>
- </rich:column>
-
- <f:facet name="footer">
- <rich:columnGroup>
- <rich:column colspan="6" width="100%">
+ <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
+ </h:outputText>
+ </rich:column>
+
+ <f:facet name="footer">
+ <rich:columnGroup>
+ <rich:column colspan="6" width="100%">
<onc:selectCommandButton action="#{ResourceReposUIBean.deleteSelectedResourceRepos}"
- value="REMOVE SUBSCRIPTIONS"
+ value="UNSUBSCRIBE"
+ alt="Unsubscribe"
target="selectedResourceRepos"
- styleClass="on-pager-button buttonsmall"
- rendered="${GlobalPermissionsUIBean.inventory}"/>
-
- <ui:include src="/rhq/resource/include/pagination.xhtml">
+ styleClass="on-pager-button buttonsmall"
+ rendered="${GlobalPermissionsUIBean.inventory}"/>
+
+ <ui:include src="/rhq/resource/include/pagination.xhtml">
<ui:param name="paginationDataTableName" value="resourceReposDataTable"/>
<ui:param name="paginationDataModel" value="#{resourceReposDataModel}"/>
<ui:param name="paginationPageControl" value="#{PageControl.ResourceReposList}"/>
- </ui:include>
- </rich:column>
- </rich:columnGroup>
- </f:facet>
-
- </rich:dataTable>
-
- </rich:panel>
- </h:form>
-
-
- <!-- AVAILABLE REPOS -->
+ </ui:include>
+ </rich:column>
+ </rich:columnGroup>
+ </f:facet>
+
+ </rich:dataTable>
+
+ </rich:panel>
+ </h:form>
+
+
+ <!-- AVAILABLE REPOS -->
<h:form id="availableRepoForm"
- rendered="${GlobalPermissionsUIBean.inventory}">
- <input type="hidden" name="id" value="${param.id}"/>
- <rich:panel styleClass="BlockContent">
+ rendered="${GlobalPermissionsUIBean.inventory}">
+ <input type="hidden" name="id" value="${param.id}"/>
+ <rich:panel styleClass="BlockContent">
<f:facet name="header"><h:outputText value="Available Repositories"/></f:facet>
-
+
<a4j:keepAlive beanName="AvailableResourceReposUIBean"/>
-
+
<ui:param name="availableResourceReposDataModel" value="#{AvailableResourceReposUIBean.dataModel}"/>
<rich:dataTable id="availableResourceReposDataTable"
rows="#{PageControl.AvailableResourceReposList.pageSize}"
value="#{availableResourceReposDataModel}"
- var="item"
- width="100%"
- columnsWidth="1%, 25%, 40%, 5%, 15%, 15%"
- headerClass="tableRowHeader"
- footerClass="on-pager-footer"
- onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
- onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
-
- <f:facet name="PageControlView">
+ var="item"
+ width="100%"
+ columnsWidth="1%, 25%, 40%, 5%, 15%, 15%"
+ headerClass="tableRowHeader"
+ footerClass="on-pager-footer"
+ onRowMouseOver="this.style.backgroundColor='#E7E7E7'"
+ onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">
+
+ <f:facet name="PageControlView">
<onc:paginationControl id="AvailableResourceReposList" />
- </f:facet>
-
- <rich:column>
- <f:facet name="header">
+ </f:facet>
+
+ <rich:column>
+ <f:facet name="header">
<onc:allSelect target="selectedAvailableResourceRepos" />
- </f:facet>
-
+ </f:facet>
+
<onc:select name="selectedAvailableResourceRepos" value="#{item.repo.id}"/>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.name">
- <h:outputText styleClass="headerText" value="Name" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.name">
+ <h:outputText styleClass="headerText" value="Name" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputLink value="/rhq/content/repo.xhtml">
- <f:param name="mode" value="view"/>
+ <f:param name="mode" value="view"/>
<f:param name="id" value="#{item.repo.id}"/>
<h:outputText value="#{item.repo.name}" />
- </h:outputLink>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <h:outputText styleClass="headerText" value="Description" />
- </f:facet>
-
+ </h:outputLink>
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <h:outputText styleClass="headerText" value="Description" />
+ </f:facet>
+
<h:outputText value="#{item.repo.description}"/>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="COUNT(pv)">
- <h:outputText styleClass="headerText" value="Package Count" />
- </onc:sortableColumnHeader>
- </f:facet>
-
- <h:outputText value="#{item.packageVersionCount}" />
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.creationDate">
- <h:outputText styleClass="headerText" value="Created" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="COUNT(pv)">
+ <h:outputText styleClass="headerText" value="Package Count" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
+ <h:outputText value="#{item.packageVersionCount}" />
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.creationDate">
+ <h:outputText styleClass="headerText" value="Created" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputText value="#{item.repo.creationDate}">
- <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
- </h:outputText>
- </rich:column>
-
- <rich:column>
- <f:facet name="header">
- <onc:sortableColumnHeader sort="c.lastModifiedDate">
- <h:outputText styleClass="headerText" value="Last Modified" />
- </onc:sortableColumnHeader>
- </f:facet>
-
+ <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
+ </h:outputText>
+ </rich:column>
+
+ <rich:column>
+ <f:facet name="header">
+ <onc:sortableColumnHeader sort="c.lastModifiedDate">
+ <h:outputText styleClass="headerText" value="Last Modified" />
+ </onc:sortableColumnHeader>
+ </f:facet>
+
<h:outputText value="#{item.repo.lastModifiedDate}">
- <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
- </h:outputText>
- </rich:column>
-
- <f:facet name="footer">
- <rich:columnGroup>
- <rich:column colspan="6" width="100%">
+ <f:convertDateTime pattern="M/d/yy, h:mm:ss aa, zzz" timeZone="#{ServerInfoUIBean.timeZone}"/>
+ </h:outputText>
+ </rich:column>
+
+ <f:facet name="footer">
+ <rich:columnGroup>
+ <rich:column colspan="6" width="100%">
<onc:selectCommandButton action="#{AvailableResourceReposUIBean.subscribeSelectedResourceRepos}"
- value="ADD SUBSCRIPTIONS"
+ value="SUBSCRIBE"
+ alt="Subscribe"
target="selectedAvailableResourceRepos"
- styleClass="on-pager-button buttonsmall"
- rendered="${GlobalPermissionsUIBean.inventory}"/>
-
- <ui:include src="/rhq/resource/include/pagination.xhtml">
+ styleClass="on-pager-button buttonsmall"
+ rendered="${GlobalPermissionsUIBean.inventory}"/>
+
+ <ui:include src="/rhq/resource/include/pagination.xhtml">
<ui:param name="paginationDataTableName" value="availableResourceReposDataTable"/>
<ui:param name="paginationDataModel" value="#{availableResourceReposDataModel}"/>
<ui:param name="paginationPageControl" value="#{PageControl.AvailableResourceReposList}"/>
- </ui:include>
- </rich:column>
- </rich:columnGroup>
- </f:facet>
-
- </rich:dataTable>
-
- </rich:panel>
-
- <ui:remove><!-- The package mode isn't returning enough data to differentiate it from the new subtab, so
- disabling it for now until we decide if this is needed. --></ui:remove>
- <!--
- <p align="center">
- <h:outputLink value="/rhq/resource/content/subscription_packages.xhtml">
- <f:param name="id" value="${param.id}"/>
- <h:outputText value="Switch To Package Mode" />
- </h:outputLink>
- </p>
- -->
-
- </h:form>
-
- </ui:define>
-</ui:composition>
-
-</html>
+ </ui:include>
+ </rich:column>
+ </rich:columnGroup>
+ </f:facet>
+
+ </rich:dataTable>
+
+ </rich:panel>
+
+ <ui:remove><!-- The package mode isn't returning enough data to differentiate it from the new subtab, so
+ disabling it for now until we decide if this is needed. --></ui:remove>
+ <!--
+ <p align="center">
+ <h:outputLink value="/rhq/resource/content/subscription_packages.xhtml">
+ <f:param name="id" value="${param.id}"/>
+ <h:outputText value="Switch To Package Mode" />
+ </h:outputLink>
+ </p>
+ -->
+
+ </h:form>
+
+ </ui:define>
+</ui:composition>
+
+</html>
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
index 317656b..7b35cad 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java
@@ -915,7 +915,8 @@ public class ContentSourceManagerBean implements ContentSourceManagerLocal {
@TransactionAttribute(TransactionAttributeType.NEVER)
public boolean internalSynchronizeContentSource(int contentSourceId) throws Exception {
ContentServerPluginContainer pc = ContentManagerHelper.getPluginContainer();
- return pc.getAdapterManager().synchronizeContentProvider(contentSourceId);
+ ContentProviderManager contentProviderManager = pc.getAdapterManager();
+ return contentProviderManager.synchronizeContentProvider(contentSourceId);
}
@SuppressWarnings("unchecked")
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
index 4e078aa..b7e13c7 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
@@ -115,7 +115,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
@RequiredPermission(Permission.MANAGE_INVENTORY)
public void deleteRepo(Subject subject, int repoId) {
- log.debug("User [" + subject + "] is deleting repo [" + repoId + "]");
+ log.debug("User [" + subject + "] is deleting repository with id [" + repoId + "]...");
// bulk delete m-2-m mappings to the doomed repo
// get ready for bulk delete by clearing entity manager
@@ -133,9 +133,9 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
Repo repo = entityManager.find(Repo.class, repoId);
if (repo != null) {
entityManager.remove(repo);
- log.debug("User [" + subject + "] deleted repo [" + repo + "]");
+ log.debug("User [" + subject + "] deleted repository [" + repo + "]");
} else {
- log.debug("Repo ID [" + repoId + "] doesn't exist - nothing to delete");
+ log.debug("Repository with id [" + repoId + "] doesn't exist - nothing to delete");
}
// remove any unused, orphaned package versions
@@ -326,16 +326,16 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
getRepo(subject, repo.getId());
// should we check non-null repo relationships and warn that we aren't changing them?
- log.debug("User [" + subject + "] is updating repo [" + repo + "]");
+ log.debug("User [" + subject + "] is updating [" + repo + "]...");
repo = entityManager.merge(repo);
- log.debug("User [" + subject + "] updated repo [" + repo + "]");
+ log.debug("User [" + subject + "] updated [" + repo + "].");
try {
ContentServerPluginContainer pc = ContentManagerHelper.getPluginContainer();
pc.unscheduleRepoSyncJob(repo);
pc.scheduleRepoSyncJob(repo);
} catch (Exception e) {
- log.warn("Failed to reschedule for [" + repo + "]", e);
+ log.warn("Failed to reschedule repository synchronization job for [" + repo + "].", e);
}
return repo;
@@ -346,9 +346,9 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
validateRepo(repo);
repo.setCandidate(false);
- log.debug("User [" + subject + "] is creating repo [" + repo + "]");
+ log.debug("User [" + subject + "] is creating [" + repo + "]...");
entityManager.persist(repo);
- log.debug("User [" + subject + "] created repo [" + repo + "]");
+ log.debug("User [" + subject + "] created [" + repo + "]");
// Schedule the repo sync job.
try {
@@ -356,7 +356,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// Schedule a job for the future
pc.scheduleRepoSyncJob(repo);
} catch (Exception e) {
- log.error("error trying to schedule RepoSync", e);
+ log.error("Failed to schedule repository synchronization job for [" + repo + "].", e);
throw new RuntimeException(e);
}
@@ -366,11 +366,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
@RequiredPermission(Permission.MANAGE_INVENTORY)
public Repo createCandidateRepo(Subject subject, Repo repo) throws RepoException {
validateRepo(repo);
-
- repo.setCandidate(true);
-
entityManager.persist(repo);
-
return repo;
}
@@ -408,17 +404,17 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
existingGroup.setRepoGroupType(groupType);
// Don't let the whole report blow up if one of these fails,
- // but be sure to mention it to the report
+ // but be sure to mention it in the report.
try {
createRepoGroup(subject, existingGroup);
importedRepoGroups.add(createMe);
} catch (RepoException e) {
if (e.getType() == RepoException.RepoExceptionType.NAME_ALREADY_EXISTS) {
- result.append("Skipping existing repo group [").append(name).append("]").append('\n');
+ result.append("Skipping existing repository group [").append(name).append("]").append('\n');
} else {
- log.error("Error adding repo group [" + name + "]", e);
- result.append("Could not add repo group [").append(name).append(
+ log.error("Error adding repository group [" + name + "]", e);
+ result.append("Could not add repository group [").append(name).append(
"]. See log for more information.").append('\n');
}
}
@@ -426,9 +422,9 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
}
if (importedRepoGroups.isEmpty()) {
- result.append("There are new repo groups since the last time this content source was synchronized.\n");
+ result.append("There are no new repository groups since the last time this content source was synchronized.\n");
} else {
- result.append("Imported the following [").append(importedRepoGroups.size()).append("] repo group(s): ").
+ result.append("Imported the following [").append(importedRepoGroups.size()).append("] repository group(s): ").
append(importedRepoGroups).append('\n');
}
@@ -457,11 +453,11 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
} catch (Exception e) {
if (e instanceof RepoException
&& ((RepoException) e).getType() == RepoException.RepoExceptionType.NAME_ALREADY_EXISTS) {
- result.append("Skipping addition of existing repo [").append(createMe.getName()).append("]")
+ result.append("Skipping addition of existing repository [").append(createMe.getName()).append("]")
.append('\n');
} else {
- log.error("Error processing repo [" + createMe + "]", e);
- result.append("Could not add repo [").append(createMe.getName()).append(
+ log.error("Error processing repository [" + createMe + "]", e);
+ result.append("Could not add repository [").append(createMe.getName()).append(
"]. See log for more information.").append('\n');
}
}
@@ -478,39 +474,42 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
}
removeRepoFromList(createMe.getName(), candidatesForThisProvider);
} catch (Exception e) {
- log.error("Error processing repo [" + createMe + "]", e);
- result.append("Could not add repo [").append(createMe.getName()).append(
+ log.error("Error processing repository [" + createMe + "]", e);
+ result.append("Could not add repository [").append(createMe.getName()).append(
"]. See log for more information.").append('\n');
}
}
}
if (importedRepos.isEmpty()) {
- result.append("There are new repos since the last time this content source was synchronized.\n");
+ result.append("There are no new repositories since the last time this content source was synchronized.\n");
} else {
- result.append("Imported the following ").append(importedRepos.size()).append(" repo(s): ").
+ result.append("Imported the following ").append(importedRepos.size()).append(" repository(s): ").
append(importedRepos).append('\n');
}
// Any repos that haven't been removed from candidatesForThisProvider were not returned in this
// report, so remove them from the database.
- for (Repo deleteMe : candidatesForThisProvider) {
- deleteRepo(subject, deleteMe.getId());
+ if (!candidatesForThisProvider.isEmpty()) {
+ for (Repo deleteMe : candidatesForThisProvider) {
+ deleteRepo(subject, deleteMe.getId());
+ }
+ result.append("Deleted the following ").append(candidatesForThisProvider.size()).append("obsolete repository(s): ").
+ append(candidatesForThisProvider).append('\n');
}
}
@RequiredPermission(Permission.MANAGE_INVENTORY)
public void importCandidateRepo(Subject subject, List<Integer> repoIds) throws RepoException {
-
for (Integer repoId : repoIds) {
Repo repo = entityManager.find(Repo.class, repoId);
if (repo == null) {
- throw new RepoException("Unable to find candidate repo for import. ID: " + repoId);
+ throw new RepoException("Unable to find candidate repository with id " + repoId + " for import.");
}
if (!repo.isCandidate()) {
- throw new RepoException("Unable to import repo - repo is already imported. ID: " + repoId);
+ throw new RepoException("Unable to import repository with id " + repoId + ", because it is already imported.");
}
repo.setCandidate(false);
@@ -585,8 +584,8 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
throw new Exception("There is no content source with id [" + id + "]");
}
- RepoContentSource ccsmapping = repo.addContentSource(cs);
- entityManager.persist(ccsmapping);
+ RepoContentSource repoContentSourceMapping = repo.addContentSource(cs);
+ entityManager.persist(repoContentSourceMapping);
Set<PackageVersion> alreadyAssociatedPVs = new HashSet<PackageVersion>(repo.getPackageVersions());
@@ -865,13 +864,15 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
/**
* Performs the necessary logic to determine if a candidate repo should be added to the system, adding it
- * in the process if it needs to. If the repo already exists in the system, this method is a no-op.
+ * in the process if it needs to. If the repo already exists in the system, associate it with the specified
+ * content source.
* <p/>
* Calling this method with a repo that has a parent assumes the parent has already been created. This call
* assumes the repo group has been created as well.
*
* @param contentSourceId identifies the content provider that introduced the candidate into the system
* @param createMe describes the candidate to be created
+ *
* @throws Exception if there is an error associating the content source with the repo or if the repo
* indicates a parent or repo group that does not exist
*/
@@ -880,15 +881,21 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
Subject overlord = subjectManager.getOverlord();
String name = createMe.getName();
- List<Repo> existingRepo = getRepoByName(name);
+ List<Repo> existingRepos = getRepoByName(name);
- // If the repo doesn't exist, create it.
- if (existingRepo.size() != 0) {
+ if (!existingRepos.isEmpty()) {
+ // The repo already exists - make sure it is associated with the specified content provider.
+ for (Repo existingRepo : existingRepos) {
+ addContentSourcesToRepo(overlord, existingRepo.getId(), new int[] { contentSourceId });
+ }
return false;
}
- // Create and populate the repo
+ // The repo doesn't exist yet in the system - create it.
Repo addMe = new Repo(name);
+ // TODO: The below line was added to simplify things for JON (i.e. patches from JBoss CSP) - remove it if we
+ // need more flexibility for other use cases. (ips, 03/24/10)
+ addMe.setCandidate(false); // auto-import
addMe.setDescription(createMe.getDescription());
String createMeGroup = createMe.getRepoGroup();
@@ -942,7 +949,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
countQuery.setParameter("repoId", repoId);
- return ((Long) countQuery.getSingleResult()).longValue();
+ return (Long) countQuery.getSingleResult();
}
@RequiredPermission(Permission.MANAGE_INVENTORY)
@@ -994,16 +1001,15 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
countQuery.setParameter("repoId", repoId);
- return ((Long) countQuery.getSingleResult()).longValue();
+ return (Long) countQuery.getSingleResult();
}
public String calculateSyncStatus(Subject subject, int repoId) {
Repo found = this.getRepo(subject, repoId);
- Set<ContentSyncStatus> stati = new HashSet<ContentSyncStatus>();
List<RepoSyncResults> syncResults = found.getSyncResults();
// Add the most recent sync results status
int latestIndex = syncResults.size() - 1;
- if (syncResults != null && (!syncResults.isEmpty()) && syncResults.get(latestIndex) != null) {
+ if (!syncResults.isEmpty() && syncResults.get(latestIndex) != null) {
RepoSyncResults results = syncResults.get(latestIndex);
return results.getStatus().toString();
} else {
@@ -1014,7 +1020,6 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public RepoSyncResults getMostRecentSyncResults(Subject subject, int repoId) {
Repo found = this.getRepo(subject, repoId);
- Set<ContentSyncStatus> stati = new HashSet<ContentSyncStatus>();
List<RepoSyncResults> syncResults = found.getSyncResults();
int latestIndex = syncResults.size() - 1;
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
index c486873..ab12bae 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
@@ -179,10 +179,9 @@ public class ContentProviderManager {
synchronized (synchronizeContentSourceLock) {
progress.append(new Date()).append(": ");
progress.append("Start synchronization of content provider [").append(contentSource.getName()).append(
- "]");
- progress.append('\n');
+ "]\n");
progress.append(new Date()).append(": ");
- progress.append("Getting currently known list of content source packages...");
+ progress.append("Getting currently known list of packages...\n");
results = new ContentSourceSyncResults(contentSource);
results.setResults(progress.toString());
results = contentSourceManager.persistContentSourceSyncResults(results);
@@ -201,7 +200,7 @@ public class ContentProviderManager {
// one sync will get an error and rollback its tx and no harm
// will be done.
log.info("Content provider [" + contentSource.getName()
- + "] is already currently being synchronized - this sync request will be ignored.");
+ + "] is already being synchronized - this sync request will be ignored.");
return false;
}
@@ -275,17 +274,16 @@ public class ContentProviderManager {
// Load the repo to sync
Repo repo = repoManager.getRepo(overlord, repoId);
if (repo == null) {
- throw new IllegalArgumentException("Invalid repo ID specified for sync: " + repoId);
+ throw new IllegalArgumentException("Invalid repository with id [" + repoId + "] specified for sync.");
}
// results =
// contentSourceManager.persistContentSourceSyncResults(results);
StringBuilder progress = new StringBuilder();
progress.append(new Date()).append(": ");
- progress.append("Start synchronization of Repository [").append(repo.getName()).append("]");
- progress.append('\n');
+ progress.append("Start synchronization of Repository [").append(repo.getName()).append("]\n");
progress.append(new Date()).append(": ");
- progress.append("Getting currently known list of content source packages...");
+ progress.append("Getting currently known list of content source packages...\n");
SyncTracker tracker = new SyncTracker(new RepoSyncResults(repo), new ProgressWatcher());
tracker.setResults(progress.toString());
tracker.setRepoSyncResults(repoManager.persistRepoSyncResults(tracker.getRepoSyncResults()));
@@ -294,14 +292,15 @@ public class ContentProviderManager {
if (tracker.getRepoSyncResults() == null) {
log.info("Repository [" + repo.getName()
- + "] is already currently being synchronized, this sync request will be ignored");
+ + "] is already currently being synchronized - this sync request will be ignored.");
return false;
}
Exception ie = null;
try {
ThreadUtil.checkInterrupted();
- // METADATA Loop
+
+ // Sync each of the content sources associated with the repo.
for (ContentSource source : repo.getContentSources()) {
try {
ContentProvider provider = getIsolatedContentProvider(source.getId());
@@ -312,7 +311,7 @@ public class ContentProviderManager {
tracker = updateSyncStatus(tracker, ContentSyncStatus.PACKAGEMETADATA);
tracker = packageSourceSynchronizer.synchronizePackageMetadata(tracker);
- } catch (SyncException e) {
+ } catch (Exception e) {
processSyncException(e, tracker, repo, source, repoManager);
}
}
@@ -338,83 +337,98 @@ public class ContentProviderManager {
// fails
try {
ContentProvider provider = getIsolatedContentProvider(source.getId());
-
- PackageSourceSynchronizer packageSourceSynchronizer = new PackageSourceSynchronizer(repo, source,
- provider);
- log.debug("synchronizeRepo :: synchronizePackageBits");
- tracker = updateSyncStatus(tracker, ContentSyncStatus.PACKAGEBITS);
- tracker = packageSourceSynchronizer.synchronizePackageBits(tracker, provider);
- tracker = updatePercentComplete(tracker, repoManager);
- // Check to cancel after each contentsource
- ThreadUtil.checkInterrupted();
-
- } catch (SyncException e) {
+ if (provider instanceof PackageSource) {
+ PackageSourceSynchronizer packageSourceSyncer = new PackageSourceSynchronizer(repo, source,
+ provider);
+ log.debug("synchronizeRepo :: synchronizePackageBits");
+ tracker = updateSyncStatus(tracker, ContentSyncStatus.PACKAGEBITS);
+ tracker = packageSourceSyncer.synchronizePackageBits(tracker, provider);
+ tracker = updatePercentComplete(tracker, repoManager);
+ }
+ } catch (Exception e) {
processSyncException(e, tracker, repo, source, repoManager);
}
+ // Check for cancellation after each content source.
+ ThreadUtil.checkInterrupted();
}
- // Distro meta
+
+ // Sync distro metadata.
+ log.debug("synchronizeRepo :: synchronizeDistributionMetadata");
for (ContentSource source : repo.getContentSources()) {
try {
ContentProvider provider = getIsolatedContentProvider(source.getId());
- DistributionSourceSynchronizer distributionSourceSynchronizer = new DistributionSourceSynchronizer(
- repo, source, provider);
-
- log.debug("synchronizeRepo :: synchronizeDistributionMetadata");
- tracker = updateSyncStatus(tracker, ContentSyncStatus.DISTROMETADATA);
- tracker = distributionSourceSynchronizer.synchronizeDistributionMetadata(tracker);
- tracker = updatePercentComplete(tracker, repoManager);
- ThreadUtil.checkInterrupted();
- } catch (SyncException e) {
+ if (provider instanceof DistributionSource) {
+ DistributionSourceSynchronizer distroSourceSyncer = new DistributionSourceSynchronizer(
+ repo, source, provider);
+ tracker = updateSyncStatus(tracker, ContentSyncStatus.DISTROMETADATA);
+ tracker = distroSourceSyncer.synchronizeDistributionMetadata(tracker);
+ tracker = updatePercentComplete(tracker, repoManager);
+ }
+ } catch (Exception e) {
processSyncException(e, tracker, repo, source, repoManager);
}
+ // Check for cancellation after each content source.
+ ThreadUtil.checkInterrupted();
}
- // Distro bits
+ // Sync distro bits.
+ log.debug("synchronizeRepo :: synchronizeDistributionBits");
for (ContentSource source : repo.getContentSources()) {
try {
ContentProvider provider = getIsolatedContentProvider(source.getId());
- DistributionSourceSynchronizer distributionSourceSynchronizer = new DistributionSourceSynchronizer(
- repo, source, provider);
-
- log.debug("synchronizeRepo :: synchronizeDistributionBits");
- tracker = updateSyncStatus(tracker, ContentSyncStatus.DISTROBITS);
- tracker = distributionSourceSynchronizer.synchronizeDistributionBits(tracker);
- tracker = updatePercentComplete(tracker, repoManager);
+ if (provider instanceof DistributionSource) {
+ DistributionSourceSynchronizer distroSourceSyncer = new DistributionSourceSynchronizer(
+ repo, source, provider);
+ tracker = updateSyncStatus(tracker, ContentSyncStatus.DISTROBITS);
+ tracker = distroSourceSyncer.synchronizeDistributionBits(tracker);
+ tracker = updatePercentComplete(tracker, repoManager);
+ }
ThreadUtil.checkInterrupted();
- } catch (SyncException e) {
+ } catch (Exception e) {
processSyncException(e, tracker, repo, source, repoManager);
}
+ // Check for cancellation after each content source.
+ ThreadUtil.checkInterrupted();
}
- // advisory meta
+ // Sync advisory metadata.
+ log.debug("synchronizeRepo :: synchronizeAdvisoryMetadata");
for (ContentSource source : repo.getContentSources()) {
try {
- log.debug("synchronizeRepo :: synchronizeAdvisoryMetadata");
+
ContentProvider provider = getIsolatedContentProvider(source.getId());
- tracker = updateSyncStatus(tracker, ContentSyncStatus.ADVISORYMETADATA);
- AdvisorySourceSynchronizer advisorySourcesync = new AdvisorySourceSynchronizer(repo, source,
- provider);
- tracker = advisorySourcesync.synchronizeAdvisoryMetadata(tracker);
- tracker = updatePercentComplete(tracker, repoManager);
- ThreadUtil.checkInterrupted();
- } catch (SyncException e) {
+ if (provider instanceof AdvisorySource) {
+ tracker = updateSyncStatus(tracker, ContentSyncStatus.ADVISORYMETADATA);
+ AdvisorySourceSynchronizer advisorySourceSyncer = new AdvisorySourceSynchronizer(repo, source,
+ provider);
+ tracker = advisorySourceSyncer.synchronizeAdvisoryMetadata(tracker);
+ tracker = updatePercentComplete(tracker, repoManager);
+ }
+ } catch (Exception e) {
processSyncException(e, tracker, repo, source, repoManager);
}
+ // Check for cancellation after each content source.
+ ThreadUtil.checkInterrupted();
}
// Update status to finished.
+ if (tracker.getRepoSyncResults().getStatus() != ContentSyncStatus.FAILURE) {
+ tracker.getRepoSyncResults().setStatus(ContentSyncStatus.SUCCESS);
+ }
+ tracker = updateSyncStatus(tracker, tracker.getRepoSyncResults().getStatus());
+
progress = new StringBuilder();
progress.append("\n");
progress.append(tracker.getRepoSyncResults().getResults());
progress.append("\n");
progress.append(new Date()).append(": ");
- progress.append(" Repository [").append(repo.getName()).append("]");
- progress.append('\n');
- progress.append(new Date()).append(": ");
- progress.append("completed syncing.");
+ progress.append("Repository [").append(repo.getName()).append("] ");
+ progress.append("completed syncing with ");
+ progress.append((tracker.getRepoSyncResults().getStatus() == ContentSyncStatus.FAILURE) ? "one or more" : "no");
+ progress.append(" errors.\n");
tracker.setResults(progress.toString());
- tracker = updateSyncStatus(tracker, ContentSyncStatus.SUCCESS);
- log.debug("synchronizeRepo :: Success");
+
+ log.debug("synchronizeRepo :: " + tracker.getRepoSyncResults().getStatus());
} catch (Exception e) {
RepoSyncResults recentResults = repoManager.getMostRecentSyncResults(overlord, repo.getId());
log.debug("Caught InterruptedException");
@@ -423,7 +437,7 @@ public class ContentProviderManager {
tracker.getProgressWatcher().resetToZero();
tracker = updatePercentComplete(tracker, repoManager);
try {
- tracker = updateSyncStatus(tracker, ContentSyncStatus.CANCELLED, false);
+ tracker = updateSyncStatus(tracker, ContentSyncStatus.CANCELLED);
} catch (InterruptedException e1) {
throw new RuntimeException("Unexpected InterruptedException", e1);
}
@@ -481,11 +495,7 @@ public class ContentProviderManager {
}
- private SyncTracker updateSyncStatus(SyncTracker tracker, ContentSyncStatus status) throws InterruptedException {
- return updateSyncStatus(tracker, status, true);
- }
-
- private SyncTracker updateSyncStatus(SyncTracker tracker, ContentSyncStatus status, boolean checkCancelling)
+ private SyncTracker updateSyncStatus(SyncTracker tracker, ContentSyncStatus status)
throws InterruptedException {
RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
SubjectManagerLocal subjMgr = LookupUtil.getSubjectManager();
@@ -853,8 +863,7 @@ public class ContentProviderManager {
try {
Thread.currentThread().setContextClassLoader(classLoader);
return method.invoke(instance, args);
- } finally {
- Thread.currentThread().setContextClassLoader(startingClassLoader);
+ } finally { Thread.currentThread().setContextClassLoader(startingClassLoader);
}
}
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentServerPluginContainer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentServerPluginContainer.java
index 9c1f89d..f04aa9e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentServerPluginContainer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentServerPluginContainer.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.server.plugin.pc.content;
import java.util.Date;
+import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
@@ -121,7 +122,8 @@ public class ContentServerPluginContainer extends AbstractTypeServerPluginContai
JobDetail job = new JobDetail(ContentProviderSyncJob.createUniqueJobName(contentSource),
CONTENT_SRC_SYNC_JOB_GROUP_NAME, ContentProviderSyncJob.class, false, false, false);
- ContentProviderSyncJob.createJobDataMap(contentSource, job);
+ JobDataMap jobDataMap = ContentProviderSyncJob.createJobDataMap(contentSource, job);
+ jobDataMap.putAsString(ContentProviderSyncJob.DATAMAP_SYNC_IMPORTED_REPOS, true);
SimpleTrigger trigger = new SimpleTrigger(job.getName(), job.getGroup());
trigger.setVolatility(false);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/AdvisorySourceSynchronizer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/AdvisorySourceSynchronizer.java
index 68df9c3..ae97e02 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/AdvisorySourceSynchronizer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/AdvisorySourceSynchronizer.java
@@ -87,7 +87,7 @@ public class AdvisorySourceSynchronizer {
public SyncTracker synchronizeAdvisoryMetadata(SyncTracker tracker) throws SyncException, InterruptedException {
if (!(provider instanceof AdvisorySource)) {
- log.error(" Advisory Instance:" + provider);
+ // Nothing to do.
return tracker;
}
@@ -98,7 +98,7 @@ public class AdvisorySourceSynchronizer {
long start = System.currentTimeMillis();
List<Advisory> advs = repoManager.findAssociatedAdvisory(overlord, repo.getId(), pc);
- log.error("Found " + advs.size() + " Advisory for repo " + repo.getId());
+ log.error("Found " + advs.size() + " advisories for repo " + repo.getId());
ThreadUtil.checkInterrupted();
AdvisorySyncReport advReport = new AdvisorySyncReport(repo.getId());
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/DistributionSourceSynchronizer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/DistributionSourceSynchronizer.java
index e5dfd67..2a26a33 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/DistributionSourceSynchronizer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/DistributionSourceSynchronizer.java
@@ -78,6 +78,7 @@ public class DistributionSourceSynchronizer {
public SyncTracker synchronizeDistributionMetadata(SyncTracker tracker) throws SyncException, InterruptedException {
if (!(provider instanceof DistributionSource)) {
+ // Nothing to do.
return tracker;
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/PackageSourceSynchronizer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/PackageSourceSynchronizer.java
index 4f7d05a..48c26a3 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/PackageSourceSynchronizer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/PackageSourceSynchronizer.java
@@ -85,6 +85,7 @@ public class PackageSourceSynchronizer {
public SyncTracker synchronizePackageMetadata(SyncTracker tracker) throws SyncException, InterruptedException {
if (!(provider instanceof PackageSource)) {
+ // Nothing to do.
return tracker;
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
index 6edf1f9..f0adc8f 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
@@ -37,7 +37,7 @@ import org.rhq.enterprise.server.plugin.pc.content.RepoSource;
import org.rhq.enterprise.server.util.LookupUtil;
/**
- * Holds the methods necessary to interact with a plugin and execute its repo related
+ * Holds the methods necessary to interact with a plugin and execute its repo-related
* synchronization tasks.
*
* @author Jason Dobies
@@ -63,6 +63,7 @@ public class RepoSourceSynchronizer {
public void synchronizeCandidateRepos(StringBuilder progress) throws Exception {
if (!(provider instanceof RepoSource)) {
+ // Nothing to do.
return;
}
@@ -82,5 +83,4 @@ public class RepoSourceSynchronizer {
log.info("importRepos: [" + source.getName() + "]: report has been merged ("
+ (System.currentTimeMillis() - start) + ")ms");
}
-
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
index a76d82f..4d948dd 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/ContentProviderSyncJob.java
@@ -29,9 +29,12 @@ import org.quartz.StatefulJob;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.content.ContentSource;
-import org.rhq.core.domain.content.ContentSourceType;
+import org.rhq.core.domain.content.Repo;
+import org.rhq.core.domain.criteria.RepoCriteria;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
+import org.rhq.enterprise.server.content.RepoManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -48,6 +51,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
public class ContentProviderSyncJob implements StatefulJob {
private static final String DATAMAP_CONTENT_SOURCE_NAME = "contentSourceName";
private static final String DATAMAP_CONTENT_SOURCE_TYPE_NAME = "contentSourceTypeName";
+ public static final String DATAMAP_SYNC_IMPORTED_REPOS = "syncImportedRepos";
private static final Log log = LogFactory.getLog(ContentProviderSyncJob.class);
private static final String SEPARATOR = "--";
@@ -71,6 +75,7 @@ public class ContentProviderSyncJob implements StatefulJob {
String name = dataMap.getString(DATAMAP_CONTENT_SOURCE_NAME);
String typeName = dataMap.getString(DATAMAP_CONTENT_SOURCE_TYPE_NAME);
+ boolean syncImportedRepos = dataMap.getBoolean(DATAMAP_SYNC_IMPORTED_REPOS);
if (name == null) {
throw new IllegalStateException("Missing the content source name in details data");
@@ -80,8 +85,13 @@ public class ContentProviderSyncJob implements StatefulJob {
throw new IllegalStateException("Missing the content source type name in details data");
}
- synchronizeAndLoad(name, typeName);
+ ContentSource contentSource = synchronizeAndLoad(name, typeName);
+ if (syncImportedRepos) {
+ // Synchronize all repos associated with the content provider - these may be repos we just
+ // discovered during this sync or ones that were already associated.
+ syncImportedRepos(contentSource);
+ }
} catch (Exception e) {
String errorMsg = "Failed to sync content source in job [" + context.getJobDetail() + "]";
log.error(errorMsg, e);
@@ -101,6 +111,22 @@ public class ContentProviderSyncJob implements StatefulJob {
}
}
+ private void syncImportedRepos(ContentSource contentSource) throws InterruptedException {
+ SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
+ Subject overlord = subjectManager.getOverlord();
+ RepoCriteria repoCriteria = new RepoCriteria();
+ repoCriteria.addFilterContentSourceIds(contentSource.getId());
+ repoCriteria.addFilterCandidate(false);
+ RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
+ PageList<Repo> repos = repoManager.findReposByCriteria(overlord, repoCriteria);
+ Integer[] repoIds = new Integer[repos.size()];
+ for (int i = 0; i < repos.size(); i++) {
+ Repo repo = repos.get(i);
+ repoIds[i] = repo.getId();
+ }
+ repoManager.internalSynchronizeRepos(overlord, repoIds);
+ }
+
/**
* This will synchronize the identified content source such that its package version information is updated and, if
* not lazy-loading, its package bits are downloaded.
@@ -109,12 +135,12 @@ public class ContentProviderSyncJob implements StatefulJob {
* potentially very long running (on the order of hours potentially). We do our processing in here with this in
* mind. We make sure we never do any one thing that potentially could timeout a transaction.</p>
*
- * @param contentSourceName name of the {@link ContentSource}
- * @param contentSourceTypeName name of the {@link ContentSourceType}
+ * @param contentSourceName name of the {@link org.rhq.core.domain.content.ContentSource}
+ * @param contentSourceTypeName name of the {@link org.rhq.core.domain.content.ContentSourceType}
*
* @throws Exception if either the sync failed or one of the packages failed to download
*/
- private void synchronizeAndLoad(String contentSourceName, String contentSourceTypeName) throws Exception {
+ private ContentSource synchronizeAndLoad(String contentSourceName, String contentSourceTypeName) throws Exception {
// note that we will keep calling getOverlord on this subject manager - the overlord
// has a very short session lifespan so we need to keep asking for a new one, due to the possibility
// that some of the methods we call here take longer than the overlord's lifespan
@@ -142,6 +168,8 @@ public class ContentProviderSyncJob implements StatefulJob {
log.info("Content source [" + contentSourceName + "] is currently being synchronized already. "
+ "Please wait for the current sync job to finish.");
}
+
+ return contentSource;
}
/**
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/RepoSyncJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/RepoSyncJob.java
index 4d0ad10..9df8c74 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/RepoSyncJob.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/RepoSyncJob.java
@@ -195,6 +195,7 @@ public class RepoSyncJob implements StatefulJob, InterruptableJob {
* @throws Exception if there is an error in the sync
*/
private void sync(String repoName) throws InterruptedException {
+ log.debug("Syncing repo [" + repoName + "]...");
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
diff --git a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java
new file mode 100644
index 0000000..b3ae50a
--- /dev/null
+++ b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/HtmlUtility.java
@@ -0,0 +1,103 @@
+package org.rhq.enterprise.server.plugins.jboss.software;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Ian Springer
+ */
+public class HtmlUtility {
+ private static final Map<String, Character> ENTITY_TO_CHAR_MAP = new HashMap<String, Character>();
+
+ static {
+ ENTITY_TO_CHAR_MAP.put("<", '<');
+ ENTITY_TO_CHAR_MAP.put(">", '>');
+ ENTITY_TO_CHAR_MAP.put("&", '&');
+ ENTITY_TO_CHAR_MAP.put(""", '"');
+ ENTITY_TO_CHAR_MAP.put("à", 'à');
+ ENTITY_TO_CHAR_MAP.put("À", 'À');
+ ENTITY_TO_CHAR_MAP.put("â", 'â');
+ ENTITY_TO_CHAR_MAP.put("ä", 'ä');
+ ENTITY_TO_CHAR_MAP.put("Ä", 'Ä');
+ ENTITY_TO_CHAR_MAP.put("Â", 'Â');
+ ENTITY_TO_CHAR_MAP.put("å", 'å');
+ ENTITY_TO_CHAR_MAP.put("Å", 'Å');
+ ENTITY_TO_CHAR_MAP.put("æ", 'æ');
+ ENTITY_TO_CHAR_MAP.put("Æ", 'Æ');
+ ENTITY_TO_CHAR_MAP.put("ç", 'ç');
+ ENTITY_TO_CHAR_MAP.put("Ç", 'Ç');
+ ENTITY_TO_CHAR_MAP.put("é", 'é');
+ ENTITY_TO_CHAR_MAP.put("É", 'É');
+ ENTITY_TO_CHAR_MAP.put("è", 'è');
+ ENTITY_TO_CHAR_MAP.put("È", 'È');
+ ENTITY_TO_CHAR_MAP.put("ê", 'ê');
+ ENTITY_TO_CHAR_MAP.put("Ê", 'Ê');
+ ENTITY_TO_CHAR_MAP.put("ë", 'ë');
+ ENTITY_TO_CHAR_MAP.put("Ë", 'Ë');
+ ENTITY_TO_CHAR_MAP.put("ï", 'ï');
+ ENTITY_TO_CHAR_MAP.put("Ï", 'Ï');
+ ENTITY_TO_CHAR_MAP.put("ô", 'ô');
+ ENTITY_TO_CHAR_MAP.put("Ô", 'Ô');
+ ENTITY_TO_CHAR_MAP.put("ö", 'ö');
+ ENTITY_TO_CHAR_MAP.put("Ö", 'Ö');
+ ENTITY_TO_CHAR_MAP.put("ø", 'ø');
+ ENTITY_TO_CHAR_MAP.put("Ø", 'Ø');
+ ENTITY_TO_CHAR_MAP.put("ß", 'ß');
+ ENTITY_TO_CHAR_MAP.put("ù", 'ù');
+ ENTITY_TO_CHAR_MAP.put("Ù", 'Ù');
+ ENTITY_TO_CHAR_MAP.put("û", 'û');
+ ENTITY_TO_CHAR_MAP.put("Û", 'Û');
+ ENTITY_TO_CHAR_MAP.put("ü", 'ü');
+ ENTITY_TO_CHAR_MAP.put("Ü", 'Ü');
+ ENTITY_TO_CHAR_MAP.put(" ", ' ');
+ ENTITY_TO_CHAR_MAP.put("®", '\u00a9');
+ ENTITY_TO_CHAR_MAP.put("©", '\u00ae');
+ ENTITY_TO_CHAR_MAP.put("€", '\u20a0');
+ }
+
+ public static String unescapeHTML(String string) {
+ if (string == null) {
+ return null;
+ }
+ if (string.length() < 4) {
+ // This is an optimization, since we know that no entities are less than 4 characters in length
+ // (< and > are the shortest ones).
+ return string;
+ }
+
+ StringBuilder unescapedString = new StringBuilder((int) (string.length() * 1.1));
+ int index = 0;
+ while (index < string.length()) {
+ int ampersandIndex = string.indexOf("&", index);
+ if (ampersandIndex >= 0 && ampersandIndex < (string.length() - 3)) {
+ int semicolonIndex = string.indexOf(";", ampersandIndex + 1);
+ if (semicolonIndex >= 0) {
+ // Found an entity - see if it's one we grok.
+ String entity = string.substring(ampersandIndex, semicolonIndex + 1);
+ Character c = ENTITY_TO_CHAR_MAP.get(entity);
+ if (c != null) {
+ // If we were able to map the entity, append the unescaped character.
+ unescapedString.append(c);
+ } else {
+ // Otherwise, append the unknown entity as is.
+ unescapedString.append(entity);
+ }
+ // Append the substring from the index up to but not including the ampersand.
+ unescapedString.append(string.substring(index, ampersandIndex));
+ index = semicolonIndex + 1;
+ } else {
+ // No semicolon found - not an entity. Append the substring from the index up to and including the
+ // ampersand.
+ unescapedString.append(string.substring(index, ampersandIndex + 1));
+ index = ampersandIndex + 1;
+ }
+ } else {
+ // No more entities in the string - append the rest of the original string.
+ unescapedString.append(string.substring(index));
+ index = string.length();
+ }
+ }
+
+ return unescapedString.toString();
+ }
+}
diff --git a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
index 7f065da..788961e 100644
--- a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
+++ b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
@@ -111,9 +111,9 @@ public class JBossSoftwareContentSourceAdapter implements ContentProvider, Packa
public void testConnection() throws Exception {
if (!active)
- throw new Exception("Content source is NOT set to active, connection cannot be established.");
+ throw new Exception("Content source is NOT set to active - connection cannot be established.");
- // If there is an error in the connection, this call will throw an exception describing it
+ // If there is an error in the connection, this call will throw an exception describing it.
retrieveRssDocument();
}
@@ -135,8 +135,8 @@ public class JBossSoftwareContentSourceAdapter implements ContentProvider, Packa
try {
parser.parseResults(rssDocument, report, existingPackages);
- } catch (ParserConfigurationException e) {
- throw new SyncException("error parsing results.", e);
+ } catch (Exception e) {
+ throw new SyncException("Error parsing RSS document.", e);
}
}
@@ -220,7 +220,7 @@ public class JBossSoftwareContentSourceAdapter implements ContentProvider, Packa
if (status == 404) {
throw new SyncException("Could not find the feed at URL [" + url
- + "]. Make sure the URL field correctly " + "refers to the CSP feed location.");
+ + "]. Make sure the URL field correctly refers to the CSP feed location.");
}
if (status == 401 || status == 403) {
@@ -237,7 +237,7 @@ public class JBossSoftwareContentSourceAdapter implements ContentProvider, Packa
method.releaseConnection();
}
- // Parse the raw feed into chuchill domain objects
+ // Parse the raw feed into churchill domain objects
RssDocument parsedFeed = null;
if (rawFeed != null) {
parsedFeed = RssParser.parseRss(rawFeed);
diff --git a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/RssFeedParser.java b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/RssFeedParser.java
index c65a7b9..5fb03b2 100644
--- a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/RssFeedParser.java
+++ b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/RssFeedParser.java
@@ -56,29 +56,29 @@ import org.rhq.enterprise.server.plugin.pc.content.PackageSyncReport;
public class RssFeedParser {
// Constants --------------------------------------------
- public static final String JBOSS_AS4_PLUGIN_NAME = "JBossAS";
- public static final String JBOSS_AS5_PLUGIN_NAME = "JBossAS5";
+ private static final String JBOSS_AS4_PLUGIN_NAME = "JBossAS";
+ private static final String JBOSS_AS5_PLUGIN_NAME = "JBossAS5";
- public static final String ARCHITECTURE = "noarch";
+ private static final String ARCHITECTURE = "noarch";
/**
- * Corresponds to the resource type name defined in the JBoss AS plugin.
+ * Corresponds to the resource type name defined in the JBossAS or JBossAS5 plugin.
*/
- public static final String RESOURCE_TYPE_JBOSS_AS = "JBossAS Server";
+ private static final String RESOURCE_TYPE_JBOSS_AS = "JBossAS Server";
/**
* Corresponds to the package type name defined in the JBoss AS plugin.
*/
- public static final String PACKAGE_TYPE_CUMULATIVE_PATCH = "cumulativePatch";
+ private static final String PACKAGE_TYPE_CUMULATIVE_PATCH = "cumulativePatch";
- public static final String RSS_SOFTWARE_TYPE_BUGFIX = "BUGFIX";
- public static final String RSS_SOFTWARE_TYPE_SECURITY = "SECURITY";
- public static final String RSS_SOFTWARE_TYPE_ENHANCEMENT = "ENHANCEMENT";
- public static final String RSS_SOFTWARE_TYPE_DISTRIBUTION = "DISTRIBUTION";
+ private static final String RSS_SOFTWARE_TYPE_BUGFIX = "BUGFIX";
+ private static final String RSS_SOFTWARE_TYPE_SECURITY = "SECURITY";
+ private static final String RSS_SOFTWARE_TYPE_ENHANCEMENT = "ENHANCEMENT";
+ private static final String RSS_SOFTWARE_TYPE_DISTRIBUTION = "DISTRIBUTION";
- public static final String DIST_STATUS_AVAILABLE = "AVAILABLE";
- public static final String DIST_STATUS_OBSOLETE = "OBSOLETE";
- public static final String DIST_STATUS_REMOVED = "REMOVED";
+ private static final String DIST_STATUS_AVAILABLE = "AVAILABLE";
+ private static final String DIST_STATUS_OBSOLETE = "OBSOLETE";
+ private static final String DIST_STATUS_REMOVED = "REMOVED";
// Attributes --------------------------------------------
@@ -104,10 +104,10 @@ public class RssFeedParser {
while (repos.hasMoreElements()) {
RssChannel repo = (RssChannel) repos.nextElement();
- Enumeration repotems = repo.items();
+ Enumeration repoItems = repo.items();
- while (repotems.hasMoreElements()) {
- RssChannelItem item = (RssChannelItem) repotems.nextElement();
+ while (repoItems.hasMoreElements()) {
+ RssChannelItem item = (RssChannelItem) repoItems.nextElement();
RssJbnPatch patch = item.getJbnPatch();
RssDublinCore dublinCore = item.getDublinCore();
@@ -199,9 +199,9 @@ public class RssFeedParser {
try {
Document document = builder.parse(new ByteArrayInputStream(instructions.getBytes()));
String choppedInstructions = xpath.evaluate(instructionExpression, document);
- // the jbpm xml processor doesn't like whitespace at the beginning, so trim it
- // bytes will be retrieved using platform encoding on the agent side so use the same
- // on the server side and assume they are identical
+ // The JBPM XML processor doesn't like whitespace at the beginning, so trim it.
+ // Bytes will be retrieved using platform encoding on the agent side, so use the same
+ // on the server side and assume they are identical.
packageDetails.setMetadata(choppedInstructions.trim().getBytes());
} catch (Exception e) {
log.error("Could not parse or set automated installation instructions for package: "
@@ -212,13 +212,13 @@ public class RssFeedParser {
packageDetails.setExtraProperties(extraProperties);
- // For each product listed for the patch, add an entry for its resource version
+ // For each product listed for the patch, add an entry for its resource version.
for (Object productObj : products) {
RssJbnDependency product = (RssJbnDependency) productObj;
// The CSP feed will include an optional JON version that maps up to how the resource
- // version will be identified by (now RHQ). If this is specified, we'll want to use
- // the mapped version instead
+ // version will be identified by RHQ. If this is specified, we'll want to use the mapped
+ // version instead.
String productVersion = product.getJonResourceVersion();
if (product.getProductVersion().equals("4.0.4")) {
commit eb64c175e4653e92bb2d0128ec5abf930377c1a6
Merge: 4af7705... 79f695f...
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Mon Mar 22 16:20:01 2010 -0400
Merge branch 'bugfixes'
commit 79f695ff4458919a8d6099a7fe6ba94518271d2a
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Fri Mar 19 14:37:34 2010 -0400
add id's to executions, so we will be able to override those executions in descendant poms
(cherry picked from commit 8f9b19320ccf5fb32b1c572f4d7d8c7d8a184a65)
diff --git a/pom.xml b/pom.xml
index 0574c8e..6ab5dd6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -531,9 +531,8 @@
</plugins>
</pluginManagement>
- <plugins>
-
+ <plugins>
<!-- Set the 'maven.version' property to the version of Maven being used,
so we can include the Maven version in the MANIFEST.MF files of all
@@ -614,8 +613,9 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
- <executions>
+ <executions>
<execution>
+ <id>read-build-properties</id>
<phase>process-resources</phase>
<goals>
<goal>read-project-properties</goal>
commit 4af7705cf5e243aa8294820984df3bd8f8af9652
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Mar 22 15:21:14 2010 +0100
BZ 571885 - If no notification templaes are defined, tell the user so and don't bomb out.
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/alert/viewAlert.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/alert/viewAlert.xhtml
index eec04d4..1c42245 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/alert/viewAlert.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/alert/viewAlert.xhtml
@@ -225,6 +225,7 @@
<h:form id="newNotificationsFromTemplateForm">
<input type="hidden" name="ad" value="${param.ad}"/>
+ <rich:panel rendered="#{definitionNotificationsUIBean.notificationTemplates.size > 0}">
<div>
<h:selectOneMenu id="templateList" value="#{definitionNotificationsUIBean.selectedTemplate}">
<f:selectItems value="#{definitionNotificationsUIBean.notificationTemplates}"/>
@@ -243,11 +244,18 @@
styleClass="buttonmed"
style="margin-top: auto;">
</h:commandButton>
+ </rich:panel>
+
+ <rich:panel rendered="#{definitionNotificationsUIBean.notificationTemplates.size == 0}">
+ No Alert Notification Templates have been defined yet.<br/>
+ Please create some in Administration -> System Configuration -> AlertNotification Templates
+ </rich:panel>
<h:outputLink id="alertTemplateCancelLink" styleClass="buttonmed" value="#" style="float: right; margin: 10px;">
<h:outputText value="Cancel" />
<rich:componentControl for="addAlertFromTemplatePanel" attachTo="alertTemplateCancelLink" operation="hide" event="onclick" />
</h:outputLink>
+
</h:form>
</rich:modalPanel>
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
index 15bf999..c8f66d0 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertNotificationManagerBean.java
@@ -384,7 +384,8 @@ public class AlertNotificationManagerBean implements AlertNotificationManagerLoc
try {
template = (NotificationTemplate) q.getSingleResult();
} catch (NoResultException nre) {
- throw new IllegalArgumentException("There is no template with name '" + templateName +"'");
+ LOG.info("There is no alert notification template with name '" + templateName +"'");
+ template = new NotificationTemplate("dummy",null);
}
return template;
}
commit c3012c76bb86e12f72eba142b29570ceab05b4c1
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Mar 22 14:36:36 2010 +0100
BZ 571911 - Fix acknowledge on the subsystem page.
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/ListAlertHistoryUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/ListAlertHistoryUIBean.java
index 0b6023a..def7220 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/ListAlertHistoryUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/ListAlertHistoryUIBean.java
@@ -179,7 +179,7 @@ public class ListAlertHistoryUIBean extends PagedDataTableUIBean {
Integer[] alertIds = StringUtility.getIntegerArray(selectedAlerts);
try {
- int num = alertManager.acknowledgeAlerts(subject,resource.getId(),alertIds);
+ int num = alertManager.acknowledgeAlerts(subject, alertIds);
if (num==-1)
FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,"No Alerts passed to ack");
else
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/subsystem/SubsystemAlertHistoryUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/subsystem/SubsystemAlertHistoryUIBean.java
index 0ad0c7a..b1db3e8 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/subsystem/SubsystemAlertHistoryUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/subsystem/SubsystemAlertHistoryUIBean.java
@@ -67,12 +67,12 @@ public class SubsystemAlertHistoryUIBean extends SubsystemView {
private SelectItem[] categoryFilterItems;
private static final IntExtractor<AlertHistoryComposite> RESOURCE_ID_EXTRACTOR = new IntExtractor<AlertHistoryComposite>() {
-
+
public int extract(AlertHistoryComposite object) {
return object.getAlert().getAlertDefinition().getResource().getId();
}
};
-
+
public SubsystemAlertHistoryUIBean() {
datePattern = EnterpriseFacesContextUtility.getWebUser().getWebPreferences().getDateTimeDisplayPreferences()
.getDateTimeFormatTrigger();
@@ -158,12 +158,11 @@ public class SubsystemAlertHistoryUIBean extends SubsystemView {
public String acknowledgeSelectedAlerts() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
- Resource resource = EnterpriseFacesContextUtility.getResource();
AlertManagerLocal alertManager = LookupUtil.getAlertManager();
try {
Integer[] selectedItems = getSelectedItems();
- int num = alertManager.acknowledgeAlerts(subject,resource.getId(), selectedItems);
+ int num = alertManager.acknowledgeAlerts(subject, selectedItems);
if (num==-1)
FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,"No Alerts passed to ack");
else
@@ -243,7 +242,7 @@ public class SubsystemAlertHistoryUIBean extends SubsystemView {
protected IntExtractor<AlertHistoryComposite> getResourceIdExtractor() {
return RESOURCE_ID_EXTRACTOR;
}
-
+
private void getDataFromRequest() {
SubsystemAlertHistoryUIBean outer = SubsystemAlertHistoryUIBean.this;
outer.resourceFilter = FacesContextUtility.getOptionalRequestParameter(FORM_PREFIX + "resourceFilter");
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/subsystem/alertHistory.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/subsystem/alertHistory.xhtml
index bf591c4..1f81df9 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/subsystem/alertHistory.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/subsystem/alertHistory.xhtml
@@ -200,7 +200,7 @@
value="PURGE ALL" styleClass="on-pager-button buttonsmall"
rendered="#{GlobalPermissionsUIBean.superuser}" />
<onc:selectCommandButton action="#{SubsystemAlertHistoryUIBean.acknowledgeSelectedAlerts}"
- value="ACKNOWLEDGE SELECTED" target="selectedAlerts" styleClass="on-pager-button buttonsmall"
+ value="ACKNOWLEDGE SELECTED" target="selectedItems" styleClass="on-pager-button buttonsmall"
rendered="#{GlobalPermissionsUIBean.superuser}" />
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
index 0f48f9e..322a93c 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
@@ -566,14 +566,12 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote {
* Acknowledge the alerts (that got fired) so that admins know who is working
* on fixing the situation.
* @param user calling user
- * @param resourceId resource the alerts happened on
* @param alertIds PKs of the alerts to ack
* @return number of alerts acknowledged
*/
- public int acknowledgeAlerts(Subject user, int resourceId, Integer[] alertIds) {
- if (!authorizationManager.hasResourcePermission(user, Permission.MANAGE_ALERTS, resourceId)) {
- throw new PermissionException("User [" + user.getName() + "] does not have permissions to acknowledge alerts "
- + "for resourceId=" + resourceId);
+ public int acknowledgeAlerts(Subject user, Integer[] alertIds) {
+ if (!authorizationManager.hasGlobalPermission(user, Permission.MANAGE_ALERTS)) {
+ throw new PermissionException("User [" + user.getName() + "] does not have permissions to acknowledge alerts ");
}
int i=0;
@@ -585,8 +583,11 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote {
for (int id : alertIds) {
acknowledgeAlert(id,user);
i++;
- if (i %20 == 0)
+ if (i % 50 == 0) {
entityManager.flush();
+ entityManager.clear();
+ }
+
}
return i;
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerLocal.java
index e482ffa..46e4b8e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerLocal.java
@@ -122,11 +122,10 @@ public interface AlertManagerLocal {
* Acknowledge the alerts (that got fired) so that admins know who is working
* on fixing the situation.
* @param user calling user
- * @param resourceId resource the alerts happened on
* @param alertIds PKs of the alerts to ack
* @return number of alerts acknowledged
*/
- int acknowledgeAlerts(Subject user, int resourceId, Integer[] alertIds);
+ int acknowledgeAlerts(Subject user, Integer[] alertIds);
/**
* Remove the alerts with the specified id's.
commit d0ac8f88594f6fab62ac3ade64cd278c07c38c48
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Mar 22 12:13:36 2010 +0100
BZ 571968 - refresh list of templates after delete
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/NotificationTemplatesUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/NotificationTemplatesUIBean.java
index 19bc895..f384e3f 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/NotificationTemplatesUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/alert/NotificationTemplatesUIBean.java
@@ -148,6 +148,9 @@ public class NotificationTemplatesUIBean implements Serializable {
String summary = getDeletionSummary(numDeleted);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, summary);
+ // Re-get the list of still existing templates
+ this.notificationTemplates = alertNotificationManager.listNotificationTemplates(this.subject);
+
return null;
}
commit d49f3d1ce688cdfff563a1f78c66b1a516b8ccc3
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Fri Mar 19 15:10:45 2010 -0400
...
diff --git a/pom.xml b/pom.xml
index 1a21ab1..054740c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -587,7 +587,7 @@
</executions>
</plugin>
- <plugin>
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
@@ -608,7 +608,7 @@
</configuration>
</execution>
</executions>
- </plugin>
+ </plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
commit 8f9b19320ccf5fb32b1c572f4d7d8c7d8a184a65
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Fri Mar 19 14:37:34 2010 -0400
add id's to executions, so we will be able to override those executions in descendant poms
diff --git a/pom.xml b/pom.xml
index e2cc42b..1a21ab1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -531,9 +531,8 @@
</plugins>
</pluginManagement>
- <plugins>
-
+ <plugins>
<!-- Set the 'maven.version' property to the version of Maven being used,
so we can include the Maven version in the MANIFEST.MF files of all
@@ -614,8 +613,9 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
- <executions>
+ <executions>
<execution>
+ <id>read-build-properties</id>
<phase>process-resources</phase>
<goals>
<goal>read-project-properties</goal>
commit 02f669162cdd6204c1fca900a76633ca2893ae8d
Merge: 6114257... eb23f6f...
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Fri Mar 19 13:50:56 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 6114257b990eaebd93ab552ae6ea621415099dbe
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Thu Mar 18 18:31:34 2010 -0400
fix content source sync so status of successfully completed requests gets flipped from INPROGRESS to SUCCESS; also improve results message for sync requests
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
index ab2fad2..4e078aa 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java
@@ -394,8 +394,8 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// Import groups first
List<RepoGroupDetails> repoGroups = report.getRepoGroups();
- int repoGroupCounter = 0;
+ List<RepoGroupDetails> importedRepoGroups = new ArrayList<RepoGroupDetails>();
for (RepoGroupDetails createMe : repoGroups) {
String name = createMe.getName();
@@ -411,7 +411,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// but be sure to mention it to the report
try {
createRepoGroup(subject, existingGroup);
- repoGroupCounter++;
+ importedRepoGroups.add(createMe);
} catch (RepoException e) {
if (e.getType() == RepoException.RepoExceptionType.NAME_ALREADY_EXISTS) {
@@ -424,7 +424,13 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
}
}
}
- result.append("Imported [").append(repoGroupCounter).append("] repo groups.").append('\n');
+
+ if (importedRepoGroups.isEmpty()) {
+ result.append("There are new repo groups since the last time this content source was synchronized.\n");
+ } else {
+ result.append("Imported the following [").append(importedRepoGroups.size()).append("] repo group(s): ").
+ append(importedRepoGroups).append('\n');
+ }
// Hold on to all current candidate repos for the content provider. If any were not present in this
// report, remove them from the system (the rationale being, the content provider no longer knows
@@ -437,19 +443,18 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// Once the groups are in the system, import any repos that were added
List<RepoDetails> repos = report.getRepos();
- int repoCounter = 0;
// First add repos that have no parent. We later add repos with a parent afterwards to prevent
// issues where both the parent and child are specified in this report.
+ List<RepoDetails> importedRepos = new ArrayList<RepoDetails>();
for (RepoDetails createMe : repos) {
-
if (createMe.getParentRepoName() == null) {
try {
- addCandidateRepo(contentSourceId, createMe);
+ if (addCandidateRepo(contentSourceId, createMe)) {
+ importedRepos.add(createMe);
+ }
removeRepoFromList(createMe.getName(), candidatesForThisProvider);
- repoCounter++;
} catch (Exception e) {
-
if (e instanceof RepoException
&& ((RepoException) e).getType() == RepoException.RepoExceptionType.NAME_ALREADY_EXISTS) {
result.append("Skipping addition of existing repo [").append(createMe.getName()).append("]")
@@ -466,12 +471,12 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// Take a second pass through the list checking for any repos that were created to be
// a child of another repo.
for (RepoDetails createMe : repos) {
-
if (createMe.getParentRepoName() != null) {
try {
- addCandidateRepo(contentSourceId, createMe);
- removeRepoFromList(createMe.getName(), candidatesForThisProvider);
- repoCounter++;
+ if (addCandidateRepo(contentSourceId, createMe)) {
+ importedRepos.add(createMe);
+ }
+ removeRepoFromList(createMe.getName(), candidatesForThisProvider);
} catch (Exception e) {
log.error("Error processing repo [" + createMe + "]", e);
result.append("Could not add repo [").append(createMe.getName()).append(
@@ -480,7 +485,12 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
}
}
- result.append("Imported [").append(repoCounter).append("] repos.").append('\n');
+ if (importedRepos.isEmpty()) {
+ result.append("There are new repos since the last time this content source was synchronized.\n");
+ } else {
+ result.append("Imported the following ").append(importedRepos.size()).append(" repo(s): ").
+ append(importedRepos).append('\n');
+ }
// Any repos that haven't been removed from candidatesForThisProvider were not returned in this
// report, so remove them from the database.
@@ -500,7 +510,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
}
if (!repo.isCandidate()) {
- throw new RepoException("Unable to import repo, repo is already imported. ID: " + repoId);
+ throw new RepoException("Unable to import repo - repo is already imported. ID: " + repoId);
}
repo.setCandidate(false);
@@ -865,7 +875,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
* @throws Exception if there is an error associating the content source with the repo or if the repo
* indicates a parent or repo group that does not exist
*/
- private void addCandidateRepo(int contentSourceId, RepoDetails createMe) throws Exception {
+ private boolean addCandidateRepo(int contentSourceId, RepoDetails createMe) throws Exception {
Subject overlord = subjectManager.getOverlord();
String name = createMe.getName();
@@ -874,7 +884,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
// If the repo doesn't exist, create it.
if (existingRepo.size() != 0) {
- return;
+ return false;
}
// Create and populate the repo
@@ -908,6 +918,8 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
addRepoRelationship(overlord, addMe.getId(), parent.getId(), PARENT_RELATIONSHIP_NAME);
}
}
+
+ return true;
}
private void removeRepoFromList(String repoName, List<Repo> repoList) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
index 21fac03..c486873 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/ContentProviderManager.java
@@ -186,7 +186,6 @@ public class ContentProviderManager {
results = new ContentSourceSyncResults(contentSource);
results.setResults(progress.toString());
results = contentSourceManager.persistContentSourceSyncResults(results);
-
}
if (results == null) {
@@ -202,12 +201,15 @@ public class ContentProviderManager {
// one sync will get an error and rollback its tx and no harm
// will be done.
log.info("Content provider [" + contentSource.getName()
- + "] is already currently being synchronized, this sync request will be ignored");
+ + "] is already currently being synchronized - this sync request will be ignored.");
return false;
}
RepoSourceSynchronizer repoSourceSynchronizer = new RepoSourceSynchronizer(contentSource, provider);
repoSourceSynchronizer.synchronizeCandidateRepos(progress);
+ results.setStatus(ContentSyncStatus.SUCCESS);
+ results.setResults(progress.toString());
+
} catch (Throwable t) {
if (results != null) {
// try to reload the results in case it was updated by the SLSB
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoDetails.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoDetails.java
index 3ac75db..d277579 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoDetails.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoDetails.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
-* Copyright (C) 2005-2008 Red Hat, Inc.
+* Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -127,4 +127,15 @@ public class RepoDetails {
public void setRepoGroup(String repoGroup) {
this.repoGroup = repoGroup;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("RepoDetails[");
+ sb.append("name='").append(this.name).append('\'');
+ sb.append(", parentRepoName='").append(this.parentRepoName).append('\'');
+ sb.append(", repoGroup='").append(this.repoGroup).append('\'');
+ sb.append(']');
+ return sb.toString();
+ }
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoGroupDetails.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoGroupDetails.java
index 502cdea..5ae72e1 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoGroupDetails.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/RepoGroupDetails.java
@@ -101,4 +101,14 @@ public class RepoGroupDetails {
public void setDescription(String description) {
this.description = description;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("RepoGroupDetails[");
+ sb.append("name='").append(this.name).append('\'');
+ sb.append(", typeName='").append(this.typeName).append('\'');
+ sb.append(']');
+ return sb.toString();
+ }
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
index 5f801ab..6edf1f9 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/content/sync/RepoSourceSynchronizer.java
@@ -67,7 +67,7 @@ public class RepoSourceSynchronizer {
}
progress.append(new Date()).append(": ");
- progress.append("Asking content provider for repositories to import...");
+ progress.append("Asking content provider for new repositories to import...\n");
RepoSource repoSource = (RepoSource) provider;
diff --git a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
index 967fbcf..7f065da 100644
--- a/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
+++ b/modules/enterprise/server/plugins/jboss-software/src/main/java/org/rhq/enterprise/server/plugins/jboss/software/JBossSoftwareContentSourceAdapter.java
@@ -126,7 +126,7 @@ public class JBossSoftwareContentSourceAdapter implements ContentProvider, Packa
try {
rssDocument = retrieveRssDocument();
} catch (Exception e) {
- throw new SyncException("Error retrieving rss doc", e);
+ throw new SyncException("Error retrieving RSS document.", e);
}
if (rssDocument == null) {
commit eb23f6fb9a557cb23069ae103a25905bdab5370b
Author: Filip Drabek <fdrabek(a)dhcp-lab-136.englab.brq.redhat.com>
Date: Thu Mar 18 22:27:23 2010 +0100
BZ - 535792 JBossCache plugin throws parsing error while checking configuration.
diff --git a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/util/DeploymentUtility.java b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/util/DeploymentUtility.java
index 242084b..60d2467 100644
--- a/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/util/DeploymentUtility.java
+++ b/modules/plugins/jboss-as/src/main/java/org/rhq/plugins/jbossas/util/DeploymentUtility.java
@@ -145,7 +145,7 @@ public class DeploymentUtility {
// this is the deployment descriptor file that we are currently examining;
// this is what will be returned if the MBean was configured in this file.
- String file = i.eval("sdi.url").toString();
+ String file = i.eval("sdi.watch").toString();
if (file.startsWith("file:/")) {
file = file.substring(5);
commit 99156a79b26d6c43951ee4b1b596b6efc5b268bc
Author: Joseph Marques <joseph(a)redhat.com>
Date: Thu Mar 18 14:37:15 2010 -0400
search assist has not been written for resource groups yet, disable for now
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/browse/BrowseGroupsUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/browse/BrowseGroupsUIBean.java
index cd31a4d..5c39367 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/browse/BrowseGroupsUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/browse/BrowseGroupsUIBean.java
@@ -1,5 +1,6 @@
package org.rhq.enterprise.gui.inventory.browse;
+import java.util.ArrayList;
import java.util.List;
import javax.faces.model.DataModel;
@@ -10,7 +11,6 @@ import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
import org.rhq.core.domain.resource.group.GroupCategory;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
-import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.gui.util.FacesContextUtility;
@@ -18,7 +18,6 @@ import org.rhq.enterprise.gui.common.framework.PagedDataTableUIBean;
import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
-import org.rhq.enterprise.server.search.execution.SearchAssistManager;
import org.rhq.enterprise.server.search.execution.SearchSuggestion;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -86,13 +85,10 @@ public class BrowseGroupsUIBean extends PagedDataTableUIBean {
}
}
- SearchAssistManager searchAssist = new SearchAssistManager(SearchSubsystem.Group);
-
public List<SearchSuggestion> autocomplete(Object suggest) {
String currentInputText = (String) suggest;
- List<SearchSuggestion> suggestions = searchAssist.getAdvancedSuggestions(currentInputText, currentInputText
- .length());
+ List<SearchSuggestion> suggestions = new ArrayList<SearchSuggestion>();
// offer suggestions based on currentInputText
return suggestions;
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
index 9d92183..65be544 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/inventory/browseGroups.xhtml
@@ -39,6 +39,7 @@
<h:inputText id="filter" value="#{BrowseGroupsUIBean.filter}"
onkeypress="return ignoreEnterKey(event);"
style="width: 600px;" />
+ <ui:remove>
<rich:suggestionbox id="suggest" for="filter"
tokens=",[]"
width="600" height="400"
@@ -58,6 +59,7 @@
<h:outputText value="#{suggestItem.label}" />
</h:column>
</rich:suggestionbox>
+ </ui:remove>
<rich:spacer/>
<a4j:commandButton value="GO"
reRender="browseGroupsDataTable, browseGroupsDataTableScroller"
commit d07e040c976d1493d4c5fae7cf70e76ed8c35273
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Thu Mar 18 13:51:22 2010 -0400
add support for discovering and managing JBoss EWP (https://jira.jboss.org/jira/browse/JBPAPP-3673)
(cherry picked from commit f988b4721041aefe74cff16ee0d0f5e6475cdf39)
diff --git a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerDiscoveryComponent.java b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerDiscoveryComponent.java
index 4c8e999..b02bd01 100644
--- a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerDiscoveryComponent.java
+++ b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerDiscoveryComponent.java
@@ -85,11 +85,14 @@ public class ApplicationServerDiscoveryComponent implements ResourceDiscoveryCom
static {
MINIMUM_PRODUCT_VERSIONS.put(JBossProductType.AS, new ComparableVersion("5.2.0.Beta1"));
MINIMUM_PRODUCT_VERSIONS.put(JBossProductType.EAP, new ComparableVersion("5.0.0.Beta"));
+ MINIMUM_PRODUCT_VERSIONS.put(JBossProductType.EWP, new ComparableVersion("5.0.0.CR1"));
MINIMUM_PRODUCT_VERSIONS.put(JBossProductType.SOA, new ComparableVersion("5.0.0.Beta"));
}
private static final String[] CLIENT_JARS = new String[] {
"client/jbossall-client.jar",
+ "client/trove.jar",
+ "client/javassist.jar",
"common/lib/jboss-security-aspects.jar",
"lib/jboss-managed.jar",
"lib/jboss-metatype.jar",
diff --git a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/helper/JBossProductType.java b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/helper/JBossProductType.java
index 6804195..024bc41 100644
--- a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/helper/JBossProductType.java
+++ b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/helper/JBossProductType.java
@@ -1,6 +1,6 @@
/*
* Jopr Management Platform
-* Copyright (C) 2005-2009 Red Hat, Inc.
+* Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -25,7 +25,7 @@ package org.rhq.plugins.jbossas5.helper;
import java.util.jar.Attributes;
/**
- * The product type of a JBoss application server installation - AS, EAP, or SOA.
+ * The product type of a JBoss 5.x/6.x application server installation - AS, EAP, EWP, or SOA.
*
* @author Jessica Sant
* @author Ian Springer
@@ -33,6 +33,7 @@ import java.util.jar.Attributes;
public enum JBossProductType {
AS("JBoss AS", "JBoss Application Server", "default"), // the public offering
EAP("JBoss EAP", "JBoss Enterprise Application Platform", "default"), // the customer offering
+ EWP("JBoss EWP", "JBoss Enterprise Web Platform", "default"), // the customer offering
SOA("JBoss SOA-P", "JBoss Enterprise SOA Platform", "production"); // the customer SOA platform
public final String NAME;
@@ -40,6 +41,7 @@ public enum JBossProductType {
public final String DEFAULT_CONFIG_NAME;
private static final String EAP_IMPLEMENTATION_TITLE = "JBoss [EAP]";
+ private static final String EWP_IMPLEMENTATION_TITLE = "JBoss [EWP]";
private static final String SOA_IMPLEMENTATION_TITLE = "JBoss [SOA]";
JBossProductType(String name, String description, String defaultConfigName) {
@@ -49,10 +51,11 @@ public enum JBossProductType {
}
/**
- * Determines the product type (AS, EAP or SOA) based on the Implementation-Title MANIFEST.MF attribute.
+ * Determines the product type (AS, EAP, EWP, or SOA) based on the Implementation-Title MANIFEST.MF attribute.
*
* @param attributes the attributes from a manifest file (typically run.jar or jboss-j2ee.jar)
- * @return AS, EAP or SOA
+ *
+ * @return the product type (AS, EAP, EWP, or SOA)
*/
public static JBossProductType determineJBossProductType(Attributes attributes) {
JBossProductType result = JBossProductType.AS;
@@ -61,6 +64,8 @@ public enum JBossProductType {
if (implementationTitle != null) {
if (implementationTitle.equalsIgnoreCase(EAP_IMPLEMENTATION_TITLE)) {
result = JBossProductType.EAP;
+ } else if (implementationTitle.equalsIgnoreCase(EWP_IMPLEMENTATION_TITLE)) {
+ result = JBossProductType.EWP;
} else if (implementationTitle.equalsIgnoreCase(SOA_IMPLEMENTATION_TITLE)) {
result = JBossProductType.SOA;
}
commit 5d7df4e65e66115206314d19d55974166f496a76
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Thu Mar 18 10:14:47 2010 -0400
fix bug when trying to toggle favorite flag on current Resource
(cherry picked from commit 5019f944b1cfd381f358023333e8a6ec988f58f4)
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/FavoritesUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/FavoritesUIBean.java
index 25b3dfe..5bf3da5 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/FavoritesUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/FavoritesUIBean.java
@@ -21,18 +21,22 @@ package org.rhq.enterprise.gui.inventory.resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.rhq.core.gui.util.FacesContextUtility;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.legacy.WebUserPreferences;
import org.rhq.enterprise.gui.legacy.action.resource.common.QuickFavoritesUtil;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
-import org.rhq.enterprise.gui.util.WebUtility;
/**
- * A session-scoped bean for toggling the current resource in request scope
+ * A session-scoped bean for toggling the current resource in request scope.
*
* @author Joseph Marques
*/
+@Name("FavoritesUIBean")
+(a)Scope(ScopeType.EVENT)
public class FavoritesUIBean {
protected final Log log = LogFactory.getLog(FavoritesUIBean.class);
@@ -45,6 +49,7 @@ public class FavoritesUIBean {
* requests, particularly with the raw config editor. The raw config editor however extends the life of the
* current ResourceUIBean beyond the current request so that the id can be accessed through ResourceUIBean.
*/
+ @In(value = ResourceUIBean.MANAGED_BEAN_NAME, create = true)
private ResourceUIBean resourceUIBean;
public FavoritesUIBean() {
@@ -88,5 +93,4 @@ public class FavoritesUIBean {
return null;
}
-
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/ResourceUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/ResourceUIBean.java
index 03be73e..bc62589 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/ResourceUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/inventory/resource/ResourceUIBean.java
@@ -25,6 +25,9 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -62,6 +65,8 @@ import org.rhq.enterprise.server.util.LookupUtil;
*
* @author Ian Springer
*/
+(a)Name(ResourceUIBean.MANAGED_BEAN_NAME)
+(a)Scope(ScopeType.EVENT)
public class ResourceUIBean {
protected final Log log = LogFactory.getLog(ResourceUIBean.class);
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/inventory-beans.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/inventory-beans.xml
index ff5d3d9..fb313ca 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/inventory-beans.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/inventory-beans.xml
@@ -26,12 +26,14 @@
<!-- /rhq/resource/** -->
+ <!--
<managed-bean>
<managed-bean-name>ResourceUIBean</managed-bean-name>
<managed-bean-class>org.rhq.enterprise.gui.inventory.resource.ResourceUIBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
-
+ -->
+
<managed-bean>
<managed-bean-name>ResourceOverviewUIBean</managed-bean-name>
<managed-bean-class>org.rhq.enterprise.gui.inventory.resource.ResourceOverviewUIBean</managed-bean-class>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/layout/summary.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/layout/summary.xhtml
index 4a0e1cf..9f132c8 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/layout/summary.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/group/layout/summary.xhtml
@@ -85,9 +85,9 @@ groupId - the group id of the Group being accessed
<rich:toolTip for="favoritesStar">
- <h:outputText value="Add resource to favorites list"
+ <h:outputText value="Add group to favorites list"
rendered="#{!ResourceGroupUIBean.favorite}"/>
- <h:outputText value="Remove resource from favorites list"
+ <h:outputText value="Remove group from favorites list"
rendered="#{ResourceGroupUIBean.favorite}"/>
</rich:toolTip>
</a4j:region>
commit ad9fe1aba113f55f9493a205c0a2f29d1a26f9e6
Merge: 450dea0... 7721e26...
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Thu Mar 18 10:42:21 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 450dea0ece01d8e2f6c3602a0c7512e695ced5c8
Merge: 44ca5dd... 6278e70...
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Tue Mar 2 08:49:43 2010 -0500
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 44ca5dd63fabe53654f1db6b17dfbbefdde1a8cb
Author: Ian P. Springer <ips(a)jetengine.(none)>
Date: Fri Feb 26 12:28:45 2010 -0500
jmx plugin will no longer log warning if SIGAR is not available; Agent, rather than PC, will log this warning once at startup, and only if the user has not explicitly disabled native support (https://bugzilla.redhat.com/show_bug.cgi?id=568760)
(cherry picked from commit ab1816d9ecc4cc6e81472538fe30ae767ea0de39)
diff --git a/modules/core/native-system/src/main/java/org/rhq/core/system/SystemInfoFactory.java b/modules/core/native-system/src/main/java/org/rhq/core/system/SystemInfoFactory.java
index 27a1375..b2bd37f 100644
--- a/modules/core/native-system/src/main/java/org/rhq/core/system/SystemInfoFactory.java
+++ b/modules/core/native-system/src/main/java/org/rhq/core/system/SystemInfoFactory.java
@@ -29,7 +29,6 @@ import java.lang.reflect.Method;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
-import java.util.TreeMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -50,6 +49,7 @@ public class SystemInfoFactory {
private static final String NATIVE_LIBRARY_CLASS_NAME = "org.hyperic.sigar.Sigar";
private static boolean nativeLibraryLoadable;
+ private static Throwable nativeLibraryLoadThrowable;
private static boolean disabled;
private static boolean initialized = false;
@@ -78,10 +78,11 @@ public class SystemInfoFactory {
nativeLibraryLoadable = true;
} catch (Throwable t) {
- nativeLibraryLoadable = false; // can't load the native libs if we don't even have the JNI classes
- LOG
- .warn("System info API not accessible on this platform (native shared library not found in java.library.path).");
- LOG.trace("Stack trace...", t);
+ // We don't have the JNI classes (sigar.jar) and/or the native shared library (e.g. libsigar-amd64-linux.so).
+ // This might be expected (e.g. the admin console WAR (Embedded Jopr) does not include SIGAR), so don't log
+ // anything, but store the Throwable, so callers can log the cause when appropriate.
+ nativeLibraryLoadable = false;
+ nativeLibraryLoadThrowable = t;
}
disabled = !nativeLibraryLoadable; // automatically disable native system info iff the native library is not loadable
@@ -170,6 +171,17 @@ public class SystemInfoFactory {
}
/**
+ * Returns a Throwable describing why the native library failed to initialize, or null if the native library
+ * initialized successfully
+ *
+ * @return a Throwable describing why the native library failed to initialize, or null if the native library
+ * initialized successfully
+ */
+ public static Throwable getNativeLibraryLoadThrowable() {
+ return nativeLibraryLoadThrowable;
+ }
+
+ /**
* This returns <code>true</code> iff the native libraries have actually been initialized. This will return <code>
* false</code> if this factory has been {@link #disableNativeSystemInfo() disabled} from the start (i.e. prior to
* the first call to {@link #createSystemInfo()} or {@link #getNativeSystemInfoVersion()}). It will also return
@@ -308,7 +320,7 @@ public class SystemInfoFactory {
private static String findNativeLibrariesRootDirectory() throws Exception {
String rootDir = null;
File jniLocation = null;
- URL jarLocation = null;
+ URL jarLocation;
if (isNativeSystemInfoAvailable()) {
rootDir = System.getProperty("rhq.native-libraries-root-directory");
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentMain.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentMain.java
index 94513d0..c7e03a1 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentMain.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentMain.java
@@ -359,6 +359,11 @@ public class AgentMain {
private final AgentRestartCounter m_agentRestartCounter = new AgentRestartCounter();
/**
+ * The -t command line option was specified.
+ */
+ private boolean m_disableNativeSystem;
+
+ /**
* The main method that starts the whole thing.
*
* @param args
@@ -2056,9 +2061,20 @@ public class AgentMain {
* disabled no matter what this method decides to do.
*/
private void prepareNativeSystem() {
- if (m_configuration.isNativeSystemDisabled() && !SystemInfoFactory.isNativeSystemInfoDisabled()) {
- SystemInfoFactory.disableNativeSystemInfo();
- LOG.info(AgentI18NResourceKeys.NATIVE_SYSTEM_DISABLED);
+ if (m_disableNativeSystem || m_configuration.isNativeSystemDisabled()) {
+ if (!SystemInfoFactory.isNativeSystemInfoDisabled()) {
+ SystemInfoFactory.disableNativeSystemInfo();
+ LOG.info(AgentI18NResourceKeys.NATIVE_SYSTEM_DISABLED);
+ }
+ } else {
+ if (!SystemInfoFactory.isNativeSystemInfoAvailable()) {
+ Throwable t = SystemInfoFactory.getNativeLibraryLoadThrowable();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(AgentI18NResourceKeys.NATIVE_SYSINFO_UNAVAILABLE_DEBUG, t);
+ } else {
+ LOG.warn(AgentI18NResourceKeys.NATIVE_SYSINFO_UNAVAILABLE);
+ }
+ }
}
return;
@@ -2814,8 +2830,7 @@ public class AgentMain {
}
case 't': {
- SystemInfoFactory.disableNativeSystemInfo();
- LOG.info(AgentI18NResourceKeys.NATIVE_SYSTEM_DISABLED);
+ m_disableNativeSystem = true;
}
}
}
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/i18n/AgentI18NResourceKeys.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/i18n/AgentI18NResourceKeys.java
index e098b2b..08d4311 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/i18n/AgentI18NResourceKeys.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/i18n/AgentI18NResourceKeys.java
@@ -519,6 +519,15 @@ public interface AgentI18NResourceKeys {
@I18NMessage("Neither server auto-detection nor polling is enabled - the client will be allowed to start sending commands immediately, but when the server is offline, be prepared for alot of errors to be logged")
String NO_AUTO_DETECT = "AgentMain.no-auto-detect";
+ @I18NMessage("Native system info is enabled, but the system info API is not accessible on this platform " +
+ "(sigar.jar not found in classpath or SIGAR shared library not found in shared library path). " +
+ "Enable DEBUG logging for more details.")
+ String NATIVE_SYSINFO_UNAVAILABLE = "AgentMain.native-sysinfo-unavailable";
+
+ @I18NMessage("Native system info is enabled, but the system info API is not accessible on this platform " +
+ "(sigar.jar not found in classpath or SIGAR shared library not found in shared library path).")
+ String NATIVE_SYSINFO_UNAVAILABLE_DEBUG = "AgentMain.native-sysinfo-unavailable-debug";
+
@I18NMessage("The agent encountered an error during startup and must abort")
String STARTUP_ERROR = "AgentMain.startup-error";
diff --git a/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java b/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
index 84ae286..ce8631a 100644
--- a/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
+++ b/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
+ * Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -37,6 +37,7 @@ import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.ProcessScanResult;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
import org.rhq.core.pluginapi.inventory.ManualAddFacet;
@@ -66,8 +67,8 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
public static final String ADDITIONAL_CLASSPATH_ENTRIES = "additionalClassPathEntries";
- /* Ignore certain processes that are managed by their own plugin. For example The Tomcat plugin will
- * handle tomcat processes configured for JMX management.
+ /* Ignore certain processes that are managed by their own plugin. For example, the Tomcat plugin will
+ * handle Tomcat processes configured for JMX management.
*/
private static final String[] PROCESS_FILTERS;
@@ -79,7 +80,7 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
processFilters = env.split(",");
}
} catch (Throwable t) {
- log.error("Can't determine process filters, using default. Cause: " + t);
+ log.error("Can't determine process filters; using default... Cause: " + t);
} finally {
PROCESS_FILTERS = processFilters;
}
@@ -135,10 +136,11 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
// }
try {
- List<ProcessInfo> processes = context.getSystemInformation().getProcesses("process|basename|match=^java.*");
+ List<ProcessScanResult> processes = context.getAutoDiscoveredProcesses();
- for (ProcessInfo process : processes) {
- DiscoveredResourceDetails details = discoverProcess(context, process);
+ for (ProcessScanResult process : processes) {
+ ProcessInfo processInfo = process.getProcessInfo();
+ DiscoveredResourceDetails details = discoverProcess(context, processInfo);
if (details != null) {
boolean isFiltered = false;
for (String filter : PROCESS_FILTERS) {
@@ -153,10 +155,11 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
}
}
} catch (Exception e) {
- if (log.isDebugEnabled())
- log.debug("Unable to complete base jmx server discovery.", e);
- else
- log.warn("Unable to complete base jmx server discovery (enable DEBUG for stack): " + e);
+ if (log.isDebugEnabled()) {
+ log.debug("Unable to complete base JMX server discovery.", e);
+ } else {
+ log.warn("Unable to complete base JMX server discovery (enable DEBUG for stack): " + e);
+ }
}
return found;
@@ -228,12 +231,16 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
String arg = process.getCommandLine()[i];
if (!arg.startsWith("-")) {
- if (arg.length() < 200) { // don't use it if its really long, that's an ugly resource name
+ if (arg.length() <= 200) {
name = arg;
- break;
+ } else {
+ // Truncate it if it's really long for a more palatable Resource name.
+ name = arg.substring(arg.length() - 200);
}
+ break;
} else if (arg.equals("-cp") || arg.equals("-classpath")) {
- i++; // skip the next arg, its the classpath, we don't want that as the name
+ // Skip the next arg - it's the classpath, and we don't want that as the name.
+ i++;
}
}
diff --git a/modules/plugins/jmx/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/jmx/src/main/resources/META-INF/rhq-plugin.xml
index bcec166..a8131c8 100644
--- a/modules/plugins/jmx/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jmx/src/main/resources/META-INF/rhq-plugin.xml
@@ -69,6 +69,8 @@
</plugin-configuration>
+ <process-scan name="java" query="process|basename|match=^java.*"/>
+
<help>
<![CDATA[
<p>In order to monitor your Java applications via JMX, you need to expose their MBeans to remote JMX clients.
14 years, 2 months
[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java | 36 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java | 153 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java | 16 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java | 5
4 files changed, 191 insertions(+), 19 deletions(-)
New commits:
commit f587e2c89652e7445eba5debeaba33f8a12d0900
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 17:35:40 2010 -0400
add start of the "bundle" view at the bottom of bundle list
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
index a0c565b..45002c1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
@@ -18,9 +18,9 @@
*/
package org.rhq.enterprise.gui.coregui.client.bundle.create;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.Label;
+import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VLayout;
@@ -50,11 +50,11 @@ public class BundleSummaryStep implements WizardStep {
bundleTypeBox.setExtraSpace(10);
Label bundleTypeLabel = new Label("Type:");
bundleTypeLabel.setWidth("10%");
- bundleTypeLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- bundleTypeLabel.setWordWrap(false);
+ bundleTypeLabel.setAlign(Alignment.LEFT);
+ bundleTypeLabel.setWrap(false);
Label bundleTypeValue = new Label(wizard.getBundleType().getName());
bundleTypeValue.setWidth("90%");
- bundleTypeValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ bundleTypeValue.setAlign(Alignment.LEFT);
bundleTypeBox.addMember(bundleTypeLabel);
bundleTypeBox.addMember(bundleTypeValue);
top.addMember(bundleTypeBox);
@@ -64,11 +64,11 @@ public class BundleSummaryStep implements WizardStep {
nameBox.setExtraSpace(10);
Label nameLabel = new Label("Name:");
nameLabel.setWidth("10%");
- nameLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- nameLabel.setWordWrap(false);
+ nameLabel.setAlign(Alignment.LEFT);
+ nameLabel.setWrap(false);
Label nameValue = new Label(wizard.getBundleName());
nameValue.setWidth("90%");
- nameValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ nameValue.setAlign(Alignment.LEFT);
nameBox.addMember(nameLabel);
nameBox.addMember(nameValue);
top.addMember(nameBox);
@@ -79,11 +79,11 @@ public class BundleSummaryStep implements WizardStep {
versionBox.setExtraSpace(10);
Label versionLabel = new Label("Version:");
versionLabel.setWidth("10%");
- versionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- versionLabel.setWordWrap(false);
+ versionLabel.setAlign(Alignment.LEFT);
+ versionLabel.setWrap(false);
Label versionValue = new Label(wizard.getBundleVersionString());
versionValue.setWidth("90%");
- versionValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ versionValue.setAlign(Alignment.LEFT);
versionBox.addMember(versionLabel);
versionBox.addMember(versionValue);
top.addMember(versionBox);
@@ -94,11 +94,11 @@ public class BundleSummaryStep implements WizardStep {
descriptionBox.setExtraSpace(10);
Label descriptionLabel = new Label("Description:");
descriptionLabel.setWidth("10%");
- descriptionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- descriptionLabel.setWordWrap(false);
+ descriptionLabel.setAlign(Alignment.LEFT);
+ descriptionLabel.setWrap(false);
Label descriptionValue = new Label(wizard.getBundleDescription());
descriptionValue.setWidth("90%");
- descriptionValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ descriptionValue.setAlign(Alignment.LEFT);
descriptionBox.addMember(descriptionLabel);
descriptionBox.addMember(descriptionValue);
top.addMember(descriptionBox);
@@ -109,15 +109,15 @@ public class BundleSummaryStep implements WizardStep {
filesBox.setExtraSpace(10);
Label filesLabel = new Label("Files:");
filesLabel.setWidth("10%");
- filesLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- filesLabel.setWordWrap(false);
+ filesLabel.setAlign(Alignment.LEFT);
+ filesLabel.setWrap(false);
VLayout filesValues = new VLayout();
filesValues.setWidth("90%");
filesValues.setAutoHeight();
for (String filename : wizard.getAllBundleFilesStatus().keySet()) {
Label fileNameValue = new Label(filename);
- fileNameValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
- fileNameValue.setWordWrap(false);
+ fileNameValue.setAlign(Alignment.LEFT);
+ fileNameValue.setWrap(false);
filesValues.addMember(fileNameValue);
}
filesBox.addMember(filesLabel);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
new file mode 100644
index 0000000..7a483e6
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
@@ -0,0 +1,153 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.bundle.list;
+
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tab.Tab;
+import com.smartgwt.client.widgets.tab.TabSet;
+
+import org.rhq.core.domain.bundle.composite.BundleWithLatestVersionComposite;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
+
+public class BundleView extends VLayout {
+
+ private int bundleBeingViewed = 0;
+ private Label message = new Label("Select a bundle...");
+ private VLayout canvas;
+ private HeaderLabel headerLabel;
+ private Label descriptionValue;
+ private Label latestVersionValue;
+
+ public BundleView() {
+ super();
+ setPadding(10);
+ setOverflow(Overflow.AUTO);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ addMember(message);
+ addMember(buildCanvas());
+ canvas.hide();
+ }
+
+ private Canvas buildCanvas() {
+ canvas = new VLayout();
+
+ headerLabel = new HeaderLabel("<bundle name>");
+
+ TabSet tabs = new TabSet();
+ Tab summaryTab = createSummaryTab();
+ tabs.addTab(summaryTab);
+
+ Tab versionsTab = createVersionsTab();
+ tabs.addTab(versionsTab);
+
+ Tab deploymentsTab = createDeploymentsTab();
+ tabs.addTab(deploymentsTab);
+
+ canvas.addMember(headerLabel);
+ canvas.addMember(tabs);
+ return canvas;
+ }
+
+ private Tab createDeploymentsTab() {
+ return new Tab("Deployments");
+ }
+
+ private Tab createVersionsTab() {
+ return new Tab("Versions");
+ }
+
+ private Tab createSummaryTab() {
+ Tab summaryTab = new Tab("Summary");
+
+ VLayout top = new VLayout();
+ top.setAutoHeight();
+ top.setPadding(20);
+ top.setWidth100();
+
+ HLayout descriptionBox = new HLayout();
+ descriptionBox.setWidth100();
+ descriptionBox.setExtraSpace(10);
+ Label descriptionLabel = new Label("Description:");
+ descriptionLabel.setWidth("10%");
+ descriptionLabel.setAlign(Alignment.LEFT);
+ descriptionLabel.setWrap(false);
+ descriptionValue = new Label("");
+ descriptionValue.setWidth("90%");
+ descriptionValue.setAlign(Alignment.LEFT);
+ descriptionBox.addMember(descriptionLabel);
+ descriptionBox.addMember(descriptionValue);
+ top.addMember(descriptionBox);
+ top.addMember(new LayoutSpacer());
+
+ HLayout versionBox = new HLayout();
+ versionBox.setWidth100();
+ versionBox.setExtraSpace(10);
+ Label versionLabel = new Label("Latest Version:");
+ versionLabel.setWidth("10%");
+ versionLabel.setAlign(Alignment.LEFT);
+ versionLabel.setWrap(false);
+ latestVersionValue = new Label("");
+ latestVersionValue.setWidth("90%");
+ latestVersionValue.setAlign(Alignment.LEFT);
+ versionBox.addMember(versionLabel);
+ versionBox.addMember(latestVersionValue);
+ top.addMember(versionBox);
+ top.addMember(new LayoutSpacer());
+
+ summaryTab.setPane(top);
+ return summaryTab;
+ }
+
+ public void viewRecord(Record record) {
+ final BundleWithLatestVersionComposite object;
+ object = (BundleWithLatestVersionComposite) record.getAttributeAsObject("object");
+
+ if (bundleBeingViewed != object.getBundleId()) {
+ headerLabel.setContents(object.getBundleName());
+ latestVersionValue.setContents(object.getLatestVersion());
+ descriptionValue.setContents(object.getBundleDescription());
+ }
+
+ try {
+ message.hide();
+ canvas.show();
+ markForRedraw();
+ } catch (Throwable t) {
+ CoreGUI.getErrorHandler().handleError("Cannot view bundle record", t);
+ }
+ }
+
+ public void viewNone() {
+ message.show();
+ canvas.hide();
+ markForRedraw();
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
index e3c4c0f..21b04bf 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
@@ -19,9 +19,12 @@
package org.rhq.enterprise.gui.coregui.client.bundle.list;
import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.bundle.Bundle;
@@ -51,6 +54,9 @@ public class BundlesListView extends VLayout {
super.onDraw();
final Table table = new Table("Bundles");
+ table.setHeight("50%");
+ table.setShowResizeBar(true);
+ table.setResizeBarTarget("next");
table.setDataSource(new BundlesWithLatestVersionDataSource());
@@ -147,5 +153,15 @@ public class BundlesListView extends VLayout {
});
addMember(table);
+
+ final BundleView bundleView = new BundleView();
+ bundleView.setOverflow(Overflow.AUTO);
+ addMember(bundleView);
+
+ table.getListGrid().addRecordClickHandler(new RecordClickHandler() {
+ public void onRecordClick(RecordClickEvent event) {
+ bundleView.viewRecord(event.getRecord());
+ }
+ });
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java
index d67e38d..a0c6add 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java
@@ -78,6 +78,9 @@ public class BundleFileUploadForm extends DynamicCallbackForm {
HiddenItem nameField = new HiddenItem("name");
nameField.setValue(this.name);
+ HiddenItem versionField = new HiddenItem("version");
+ versionField.setValue("1.0");
+
setNumCols(4);
bundleUploadItem = new UploadItem("bundleFile", name);
@@ -108,7 +111,7 @@ public class BundleFileUploadForm extends DynamicCallbackForm {
uploadButton.setIcons(loadingIcon);
uploadButton.setShowIcons(false);
- setItems(sessionIdField, bundleVersionIdField, nameField, bundleUploadItem, uploadButton);
+ setItems(sessionIdField, bundleVersionIdField, nameField, versionField, bundleUploadItem, uploadButton);
}
/**
14 years, 2 months
[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
New commits:
commit 99ac8e813983478838882e54621b77adc2b17c3c
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 16:21:48 2010 -0400
better button labels
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
index cf0d561..e3c4c0f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
@@ -63,7 +63,7 @@ public class BundlesListView extends VLayout {
table.getListGrid().setSelectionType(SelectionStyle.SIMPLE);
table.getListGrid().setSelectionAppearance(SelectionAppearance.CHECKBOX);
- table.addTableAction("Create New Bundle", Table.SelectionEnablement.ALWAYS, null, new TableAction() {
+ table.addTableAction("New", Table.SelectionEnablement.ALWAYS, null, new TableAction() {
public void executeAction(ListGridRecord[] selection) {
new BundleCreateWizard().startBundleWizard();
@@ -91,7 +91,7 @@ public class BundlesListView extends VLayout {
}
});
- table.addTableAction("Create New Version", Table.SelectionEnablement.SINGLE, null, new TableAction() {
+ table.addTableAction("New Version", Table.SelectionEnablement.SINGLE, null, new TableAction() {
public void executeAction(ListGridRecord[] selection) {
BundlesWithLatestVersionDataSource ds = (BundlesWithLatestVersionDataSource) table.getDataSource();
final BundleWithLatestVersionComposite object = ds.copyValues(selection[0]);
14 years, 2 months
[rhq] Branch 'gwt' - 12 commits - modules/core modules/enterprise
by Greg Hinkle
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java | 13
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 37 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java | 13
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceSummaryView.java | 186 ------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceOverviewView.java | 57 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceSummaryView.java | 186 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java | 221 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java | 229 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java | 291 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SelectedResourceDataSource.java | 73 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeDataSource.java | 260 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeView.java | 115 +++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 31 +
modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css | 16
modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_24.png |binary
modules/enterprise/gui/portal-war/src/main/webapp/rhq/discovery/queue.xhtml | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java | 21
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossLocal.java | 10
38 files changed, 1580 insertions(+), 247 deletions(-)
New commits:
commit b599b8bf8c37f25c60b80ec409a441a6e1578e05
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 15:44:03 2010 -0400
icons for the new resource and type views
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_16.png
new file mode 100644
index 0000000..af73da1
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_24.png
new file mode 100644
index 0000000..66627f8
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_down_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_16.png
new file mode 100644
index 0000000..223b0b3
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_24.png
new file mode 100644
index 0000000..fb50a9d
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Platform_up_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_16.png
new file mode 100644
index 0000000..69a4d9f
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_24.png
new file mode 100644
index 0000000..660e4b8
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_down_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_16.png
new file mode 100644
index 0000000..132e4ce
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_24.png
new file mode 100644
index 0000000..83da6ad
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Server_up_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_16.png
new file mode 100644
index 0000000..d09143b
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_24.png
new file mode 100644
index 0000000..24b1d98
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_down_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_16.png
new file mode 100644
index 0000000..bbebc5c
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_24.png
new file mode 100644
index 0000000..7df5599
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/Service_up_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_16.png
new file mode 100644
index 0000000..35bbd70
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_24.png
new file mode 100644
index 0000000..0dd5e93
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/types/plugin_24.png differ
commit fd07e05ac93f368163b45ae95e26f9faed1c80b4
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 15:40:09 2010 -0400
Fixed some bugs in but enablement
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
index 77952a0..a309ce1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
@@ -66,6 +66,11 @@ public class ResourceSelector extends HLayout {
private ListGrid availableGrid;
private ListGrid assignedGrid;
+ private TransferImgButton addButton;
+ private TransferImgButton removeButton;
+ private TransferImgButton addAllButton;
+ private TransferImgButton removeAllButton;
+
private Criteria latestCriteria;
public ResourceSelector() {
@@ -82,16 +87,15 @@ public class ResourceSelector extends HLayout {
availableFilterForm.setNumCols(6);
final TextItem search = new TextItem("search", "Search");
- IPickTreeItem typeSelectItem = new IPickTreeItem("type","Type");
+ IPickTreeItem typeSelectItem = new IPickTreeItem("type", "Type");
typeSelectItem.setDataSource(new ResourceTypeTreeDataSource());
typeSelectItem.setValueField("id");
typeSelectItem.setCanSelectParentItems(true);
typeSelectItem.setLoadDataOnDemand(false);
-
- SelectItem categorySelect = new SelectItem("category","Category");
- categorySelect.setValueMap("Platform","Server","Service");
+ SelectItem categorySelect = new SelectItem("category", "Category");
+ categorySelect.setValueMap("Platform", "Server", "Service");
categorySelect.setAllowEmptyValue(true);
availableFilterForm.setItems(search, typeSelectItem, categorySelect);
@@ -117,13 +121,12 @@ public class ResourceSelector extends HLayout {
addMember(availableLayout);
-
availableFilterForm.addItemChangedHandler(new ItemChangedHandler() {
public void onItemChanged(ItemChangedEvent itemChangedEvent) {
latestCriteria = new Criteria();
- latestCriteria.setAttribute("name",availableFilterForm.getValue("search"));
- latestCriteria.setAttribute("type",availableFilterForm.getValue("type"));
- latestCriteria.setAttribute("category",availableFilterForm.getValue("category"));
+ latestCriteria.setAttribute("name", availableFilterForm.getValue("search"));
+ latestCriteria.setAttribute("type", availableFilterForm.getValue("type"));
+ latestCriteria.setAttribute("category", availableFilterForm.getValue("category"));
Timer t = new Timer() {
@Override
@@ -140,20 +143,17 @@ public class ResourceSelector extends HLayout {
});
-
-
-
-
VStack moveButtonStack = new VStack(6);
moveButtonStack.setAlign(VerticalAlignment.CENTER);
moveButtonStack.setWidth(40);
- final TransferImgButton addButton = new TransferImgButton(TransferImgButton.RIGHT);
+ addButton = new TransferImgButton(TransferImgButton.RIGHT);
addButton.setDisabled(true);
- final TransferImgButton removeButton = new TransferImgButton(TransferImgButton.LEFT);
+ removeButton = new TransferImgButton(TransferImgButton.LEFT);
removeButton.setDisabled(true);
- TransferImgButton addAllButton = new TransferImgButton(TransferImgButton.RIGHT_ALL);
- TransferImgButton removeAllButton = new TransferImgButton(TransferImgButton.LEFT_ALL);
+ addAllButton = new TransferImgButton(TransferImgButton.RIGHT_ALL);
+ removeAllButton = new TransferImgButton(TransferImgButton.LEFT_ALL);
+ removeAllButton.setDisabled(true);
moveButtonStack.addMember(addButton);
moveButtonStack.addMember(removeButton);
@@ -163,7 +163,6 @@ public class ResourceSelector extends HLayout {
addMember(moveButtonStack);
-
VLayout assignedLayout = new VLayout();
assignedLayout.addMember(new LayoutSpacer());
@@ -181,16 +180,19 @@ public class ResourceSelector extends HLayout {
addMember(assignedLayout);
+
addButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
assignedGrid.transferSelectedData(availableGrid);
select(assignedGrid.getSelection());
+ updateButtons();
}
});
removeButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
deselect(assignedGrid.getSelection());
assignedGrid.removeSelectedData();
+ updateButtons();
}
});
addAllButton.addClickHandler(new ClickHandler() {
@@ -198,6 +200,7 @@ public class ResourceSelector extends HLayout {
availableGrid.selectAllRecords();
assignedGrid.transferSelectedData(availableGrid);
select(availableGrid.getSelection());
+ updateButtons();
}
});
removeAllButton.addClickHandler(new ClickHandler() {
@@ -205,18 +208,19 @@ public class ResourceSelector extends HLayout {
assignedGrid.selectAllRecords();
deselect(assignedGrid.getSelection());
assignedGrid.removeSelectedData();
+ updateButtons();
}
});
availableGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
- addButton.setDisabled(!availableGrid.anySelected());
+ updateButtons();
}
});
assignedGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
- removeButton.setDisabled(!assignedGrid.anySelected());
+ updateButtons();
}
});
@@ -237,6 +241,13 @@ public class ResourceSelector extends HLayout {
});
}
+ private void updateButtons() {
+ addButton.setDisabled(!availableGrid.anySelected() || availableGrid.getTotalRows() == 0);
+ removeButton.setDisabled(!assignedGrid.anySelected() || assignedGrid.getTotalRows() == 0);
+ addAllButton.setDisabled(availableGrid.getTotalRows() == 0);
+ removeAllButton.setDisabled(assignedGrid.getTotalRows() == 0);
+ }
+
private void select(ListGridRecord[] records) {
availableGrid.deselectAllRecords();
for (ListGridRecord record : records) {
commit f19b182733dff62648fe8b332c5be0dda6927a02
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:16:14 2010 -0400
New resource selection component (left-right boxes, drag-n-drop, search and filter, selection indicator)
Resource selector demo'ed on the Demo canvas
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
index 9b4539a..f192c58 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
@@ -20,6 +20,8 @@ package org.rhq.enterprise.gui.coregui.client;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSearchView;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.ResourceSelector;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeTreeView;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.types.TabBarControls;
@@ -50,22 +52,27 @@ public class DemoCanvas extends Canvas {
// topTabSet.setTop(50);
- Tab tableTab = new Tab("Resource Search Table");
+ Tab selectorTab = new Tab("Selector");
+ Tab typeTree = new Tab("Type Tree");
Tab treeTab = new Tab("Resource Tree");
final Tab configTab = new Tab("Configuration Editor");
//Tab alertHistoryTab = new Tab("Alert History");
+
+ selectorTab.setPane(new ResourceSelector());
+
// Agent: resource (10005) type (10060)
// Raw: 10003 / 10023
// both: 10002 / 10022
//configTab.setPane(new ConfigurationEditor(10005, 10060, ConfigurationEditor.ConfigType.plugin));
//treeTab.setPane(new ResourceTreeView(new Resource(10001)));
- tableTab.setPane(new ResourceSearchView());
+ typeTree.setPane(new ResourceTypeTreeView());
//alertHistoryTab.setPane(new AbstractAlertsView());
+ topTabSet.addTab(selectorTab);
+ topTabSet.addTab(typeTree);
topTabSet.addTab(configTab);
- topTabSet.addTab(tableTab);
topTabSet.addTab(treeTab);
//topTabSet.addTab(alertHistoryTab);
//topTabSet.selectTab(alertHistoryTab);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
new file mode 100644
index 0000000..77952a0
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
@@ -0,0 +1,280 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.selection;
+
+import java.util.HashSet;
+
+import com.google.gwt.user.client.Timer;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.types.DragDataAction;
+import com.smartgwt.client.types.DragTrackerMode;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.VerticalAlignment;
+import com.smartgwt.client.widgets.ImgProperties;
+import com.smartgwt.client.widgets.TransferImgButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.events.KeyPressEvent;
+import com.smartgwt.client.widgets.events.KeyPressHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.events.ItemChangedEvent;
+import com.smartgwt.client.widgets.form.events.ItemChangedHandler;
+import com.smartgwt.client.widgets.form.fields.IPickTreeItem;
+import com.smartgwt.client.widgets.form.fields.SelectItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordDropEvent;
+import com.smartgwt.client.widgets.grid.events.RecordDropHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionEvent;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.layout.VStack;
+
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeTreeDataSource;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceSelector extends HLayout {
+
+ private HashSet<Integer> selection = new HashSet<Integer>();
+
+ private ListGrid availableGrid;
+ private ListGrid assignedGrid;
+
+ private Criteria latestCriteria;
+
+ public ResourceSelector() {
+ setAlign(VerticalAlignment.BOTTOM);
+ setHeight(380);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+
+ final DynamicForm availableFilterForm = new DynamicForm();
+ availableFilterForm.setNumCols(6);
+ final TextItem search = new TextItem("search", "Search");
+
+ IPickTreeItem typeSelectItem = new IPickTreeItem("type","Type");
+ typeSelectItem.setDataSource(new ResourceTypeTreeDataSource());
+ typeSelectItem.setValueField("id");
+ typeSelectItem.setCanSelectParentItems(true);
+ typeSelectItem.setLoadDataOnDemand(false);
+
+
+
+ SelectItem categorySelect = new SelectItem("category","Category");
+ categorySelect.setValueMap("Platform","Server","Service");
+ categorySelect.setAllowEmptyValue(true);
+ availableFilterForm.setItems(search, typeSelectItem, categorySelect);
+
+ VLayout availableLayout = new VLayout();
+ availableLayout.addMember(new LayoutSpacer());
+
+ availableLayout.addMember(availableFilterForm);
+
+ availableGrid = new ListGrid();
+ availableGrid.setHeight(350);
+ availableGrid.setCanDragRecordsOut(true);
+ availableGrid.setDragTrackerMode(DragTrackerMode.ICON);
+ availableGrid.setTrackerImage(new ImgProperties("types/Service_up_16.png", 16, 16));
+ availableGrid.setDragDataAction(DragDataAction.COPY);
+ availableGrid.setDataSource(new SelectedResourceDataSource());
+ availableGrid.setFetchDelay(700);
+
+ availableGrid.setAutoFetchData(true);
+ availableGrid.setFields(new ListGridField("icon", 50), new ListGridField("name"));
+
+ availableLayout.addMember(availableGrid);
+
+ addMember(availableLayout);
+
+
+
+ availableFilterForm.addItemChangedHandler(new ItemChangedHandler() {
+ public void onItemChanged(ItemChangedEvent itemChangedEvent) {
+ latestCriteria = new Criteria();
+ latestCriteria.setAttribute("name",availableFilterForm.getValue("search"));
+ latestCriteria.setAttribute("type",availableFilterForm.getValue("type"));
+ latestCriteria.setAttribute("category",availableFilterForm.getValue("category"));
+
+ Timer t = new Timer() {
+ @Override
+ public void run() {
+ if (latestCriteria != null) {
+ Criteria c = latestCriteria;
+ latestCriteria = null;
+ availableGrid.fetchData(c);
+ }
+ }
+ };
+ t.schedule(500);
+ }
+ });
+
+
+
+
+
+
+ VStack moveButtonStack = new VStack(6);
+ moveButtonStack.setAlign(VerticalAlignment.CENTER);
+ moveButtonStack.setWidth(40);
+
+ final TransferImgButton addButton = new TransferImgButton(TransferImgButton.RIGHT);
+ addButton.setDisabled(true);
+ final TransferImgButton removeButton = new TransferImgButton(TransferImgButton.LEFT);
+ removeButton.setDisabled(true);
+ TransferImgButton addAllButton = new TransferImgButton(TransferImgButton.RIGHT_ALL);
+ TransferImgButton removeAllButton = new TransferImgButton(TransferImgButton.LEFT_ALL);
+
+ moveButtonStack.addMember(addButton);
+ moveButtonStack.addMember(removeButton);
+ moveButtonStack.addMember(addAllButton);
+ moveButtonStack.addMember(removeAllButton);
+
+ addMember(moveButtonStack);
+
+
+
+ VLayout assignedLayout = new VLayout();
+ assignedLayout.addMember(new LayoutSpacer());
+
+ assignedGrid = new ListGrid();
+ assignedGrid.setHeight(350);
+ assignedGrid.setCanReorderRecords(true);
+ assignedGrid.setCanDragRecordsOut(true);
+
+ assignedGrid.setCanAcceptDroppedRecords(true);
+ ListGridField iconField = new ListGridField("icon", 50);
+ iconField.setType(ListGridFieldType.ICON);
+ assignedGrid.setFields(iconField, new ListGridField("name"));
+
+ assignedLayout.addMember(assignedGrid);
+ addMember(assignedLayout);
+
+
+ addButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ assignedGrid.transferSelectedData(availableGrid);
+ select(assignedGrid.getSelection());
+ }
+ });
+ removeButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ deselect(assignedGrid.getSelection());
+ assignedGrid.removeSelectedData();
+ }
+ });
+ addAllButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ availableGrid.selectAllRecords();
+ assignedGrid.transferSelectedData(availableGrid);
+ select(availableGrid.getSelection());
+ }
+ });
+ removeAllButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ assignedGrid.selectAllRecords();
+ deselect(assignedGrid.getSelection());
+ assignedGrid.removeSelectedData();
+ }
+ });
+
+ availableGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ addButton.setDisabled(!availableGrid.anySelected());
+ }
+ });
+
+ assignedGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ removeButton.setDisabled(!assignedGrid.anySelected());
+ }
+ });
+
+ assignedGrid.addKeyPressHandler(new KeyPressHandler() {
+ public void onKeyPress(KeyPressEvent event) {
+ if ("Delete".equals(event.getKeyName())) {
+ deselect(assignedGrid.getSelection());
+ assignedGrid.removeSelectedData();
+ }
+ }
+ });
+
+
+ assignedGrid.addRecordDropHandler(new RecordDropHandler() {
+ public void onRecordDrop(RecordDropEvent recordDropEvent) {
+ select(recordDropEvent.getDropRecords());
+ }
+ });
+ }
+
+ private void select(ListGridRecord[] records) {
+ availableGrid.deselectAllRecords();
+ for (ListGridRecord record : records) {
+ record.setEnabled(false);
+ selection.add(record.getAttributeAsInt("id"));
+ }
+ }
+
+ private void deselect(ListGridRecord[] records) {
+ HashSet<Integer> toRemove = new HashSet<Integer>();
+ for (ListGridRecord record : records) {
+ toRemove.add(record.getAttributeAsInt("id"));
+ }
+ selection.removeAll(toRemove);
+
+
+ for (Integer id : toRemove) {
+ Record r = availableGrid.getDataAsRecordList().find("id", id);
+ if (r != null) {
+ ((ListGridRecord) r).setEnabled(true);
+ }
+ }
+ availableGrid.markForRedraw();
+ }
+
+
+ private class SelectedResourceDataSource extends ResourceDatasource {
+
+
+ @Override
+ public ListGridRecord[] buildRecords(PageList<Resource> resources) {
+ ListGridRecord[] records = super.buildRecords(resources);
+ for (ListGridRecord record : records) {
+ if (selection.contains(record.getAttributeAsInt("id"))) {
+ record.setEnabled(false);
+ }
+ }
+ return records;
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SelectedResourceDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SelectedResourceDataSource.java
new file mode 100644
index 0000000..742a83f
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SelectedResourceDataSource.java
@@ -0,0 +1,73 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.selection;
+
+import java.util.ArrayList;
+
+import com.smartgwt.client.widgets.events.DropEvent;
+import com.smartgwt.client.widgets.events.DropHandler;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordDropEvent;
+import com.smartgwt.client.widgets.grid.events.RecordDropHandler;
+
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource;
+
+/**
+ * @author Greg Hinkle
+ */
+public class SelectedResourceDataSource extends ResourceDatasource {
+
+ private ArrayList<Integer> selection;
+
+
+ ListGrid availableGrid;
+ ListGrid assignedGrid;
+
+
+ public SelectedResourceDataSource(ArrayList<Integer> selection, ListGrid availableGrid, ListGrid assignedGrid) {
+ this.selection = selection;
+ if (this.selection == null) {
+ selection = new ArrayList<Integer>();
+ }
+ this.availableGrid = availableGrid;
+ this.assignedGrid = assignedGrid;
+
+
+ assignedGrid.addRecordDropHandler(new RecordDropHandler() {
+ public void onRecordDrop(RecordDropEvent recordDropEvent) {
+ for (ListGridRecord record : recordDropEvent.getDropRecords()) {
+
+ record.setCanDrag(false);
+ record.setEnabled(false);
+
+ SelectedResourceDataSource.this.selection.add(record.getAttributeAsInt("id"));
+ }
+ }
+ });
+ }
+
+
+
+
+
+
+
+
+}
commit baac2f3668e15df88893f1e426f2c7198beb9265
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:15:13 2010 -0400
avoid npe for mismatched component depths
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index 66772ea..3be0f48 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -190,7 +190,7 @@ public class CoreGUI implements EntryPoint {
}
}
int startIndex;
- View parentView;
+ View parentView = null;
if (commonBasePathSize > 0) {
// The requested path shares a common base path with the current view, so skip rendering of
// views corresponding to this common base path. For example, if the current view is
@@ -198,7 +198,10 @@ public class CoreGUI implements EntryPoint {
// only on for the Monitor and Graphs components of the path.
startIndex = commonBasePathSize;
int subViewsToRenderPathSize = viewIdNames.size() - commonBasePathSize;
- parentView = CoreGUI.this.currentView;
+ View view = CoreGUI.this.currentView;
+ if (view != null) {
+ parentView = view;
+ }
for (int i = 0; i < subViewsToRenderPathSize; i++) {
parentView = parentView.getParent();
}
commit 84f4742ec27a15d37912207db9d4cbb1a1ad91ea
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:14:53 2010 -0400
Plugin and Type tree (for type pick list)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeDataSource.java
new file mode 100644
index 0000000..dc1cbe9
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeDataSource.java
@@ -0,0 +1,260 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.type;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSource;
+import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.types.DSDataFormat;
+import com.smartgwt.client.types.DSProtocol;
+import com.smartgwt.client.widgets.tree.TreeNode;
+
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTServiceAsync;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceTypeTreeDataSource extends DataSource {
+
+
+ private ResourceTypeGWTServiceAsync resourceTypeService = GWTServiceLookup.getResourceTypeGWTService();
+
+ public ResourceTypeTreeDataSource() {
+
+ setClientOnly(false);
+ setDataProtocol(DSProtocol.CLIENTCUSTOM);
+ setDataFormat(DSDataFormat.CUSTOM);
+
+
+ DataSourceTextField idField = new DataSourceTextField("id", "ID");
+ idField.setPrimaryKey(true);
+
+ DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID");
+ parentIdField.setForeignKey("id");
+
+ DataSourceTextField resourceNameField = new DataSourceTextField("name", "Name");
+
+ DataSourceTextField resourceKeyField = new DataSourceTextField("plugin", "Plugin");
+
+ DataSourceTextField resourceTypeField = new DataSourceTextField("category", "Category");
+
+
+ setFields(idField, parentIdField, resourceNameField, resourceKeyField, resourceTypeField);
+ }
+
+ protected Object transformRequest(DSRequest request) {
+ DSResponse response = new DSResponse();
+ response.setAttribute("clientContext", request.getAttributeAsObject("clientContext"));
+ // Asume success
+ response.setStatus(0);
+ switch (request.getOperationType()) {
+ case FETCH:
+ executeFetch(request, response);
+ break;
+ default:
+ break;
+ }
+
+ return request.getData();
+ }
+
+
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+
+ String parentIdString = request.getCriteria().getAttributeAsString("parentId");
+ if (parentIdString != null) {
+ processResponse(request.getRequestId(), response);
+ } else {
+
+
+ ResourceTypeCriteria criteria = new ResourceTypeCriteria();
+ criteria.fetchParentResourceTypes(true);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());
+
+ resourceTypeService.findResourceTypesByCriteria(criteria,
+ new AsyncCallback<PageList<ResourceType>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load resource type tree data", caught);
+ }
+
+ public void onSuccess(PageList<ResourceType> result) {
+ response.setData(buildNodes(result));
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+ }
+
+
+ public static TreeNode[] buildNodes(PageList<ResourceType> result) {
+
+ HashMap<String, PluginTreeNode> pluginNodes = new HashMap<String, PluginTreeNode>();
+
+ HashSet<TreeNode> nodes = new HashSet<TreeNode>();
+ for (ResourceType type : result) {
+
+ PluginTreeNode pluginNode = pluginNodes.get(type.getPlugin());
+ if (pluginNode == null) {
+ pluginNode = new PluginTreeNode(type.getPlugin());
+ pluginNodes.put(type.getPlugin(), pluginNode);
+ nodes.add(pluginNode);
+ }
+
+
+ if (type.getParentResourceTypes() == null || type.getParentResourceTypes().isEmpty()) {
+ nodes.add(new ResourceTypeTreeNode(type, type.getPlugin()));
+ } else {
+ for (ResourceType parent : type.getParentResourceTypes()) {
+ nodes.add(new ResourceTypeTreeNode(type, String.valueOf(parent.getId())));
+ }
+ }
+ }
+
+ TreeNode[] treeNodes = nodes.toArray(new TreeNode[nodes.size()]);
+ return treeNodes;
+ }
+
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl;
+ if (request.getStartRow() == null || request.getEndRow() == null) {
+ pageControl = new PageControl();
+ } else {
+ pageControl = PageControl.getExplicitPageControl(request.getStartRow(), request.getEndRow() - request.getStartRow());
+ }
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+
+ public static class PluginTreeNode extends TreeNode {
+
+ String id;
+
+ PluginTreeNode(String pluginName) {
+
+ setID(pluginName);
+ this.id = pluginName;
+ setParentID(null);
+
+ setAttribute("name", pluginName);
+// setAttribute("plugin",pluginName);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ PluginTreeNode that = (PluginTreeNode) o;
+
+ if (!id.equals(that.id)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return id.hashCode();
+ }
+ }
+
+ public static class ResourceTypeTreeNode extends TreeNode {
+
+ private ResourceType resourceType;
+ String id;
+ String parentId;
+
+ private ResourceTypeTreeNode(ResourceType resourceType, String parentId) {
+ this.resourceType = resourceType;
+
+ String id = String.valueOf(resourceType.getId());
+
+ setID(id);
+ this.id = id;
+ setParentID(parentId);
+ this.parentId = parentId;
+
+ setAttribute("id", id);
+ setAttribute("parentId", parentId);
+ setAttribute("name", resourceType.getName());
+ setAttribute("plugin", resourceType.getPlugin());
+ setAttribute("category", resourceType.getCategory().getDisplayName());
+
+ setIsFolder(true);
+ }
+
+
+ public ResourceType getResourceType() {
+ return resourceType;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ResourceTypeTreeNode that = (ResourceTypeTreeNode) o;
+
+ if (!id.equals(that.id)) return false;
+ if (parentId != null ? !parentId.equals(that.parentId) : that.parentId != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id.hashCode();
+ result = 31 * result + (parentId != null ? parentId.hashCode() : 0);
+ return result;
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeView.java
new file mode 100644
index 0000000..5a78a23
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeTreeView.java
@@ -0,0 +1,115 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.type;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tree.TreeGrid;
+import com.smartgwt.client.widgets.tree.TreeGridField;
+import com.smartgwt.client.widgets.tree.TreeNode;
+
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTServiceAsync;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceTypeTreeView extends VLayout {
+
+ private ResourceTypeGWTServiceAsync resourceTypeService = GWTServiceLookup.getResourceTypeGWTService();
+
+ public ResourceTypeTreeView() {
+ setWidth100();
+ setHeight100();
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+
+ final TreeGrid treeGrid = new CustomResourceTypeTreeGrid();
+
+ treeGrid.setHeight100();
+
+ treeGrid.setTitle("Resource Types");
+ treeGrid.setAnimateFolders(false);
+ treeGrid.setResizeFieldsInRealTime(true);
+
+
+ final TreeGridField name, plugin, category;
+ name = new TreeGridField("name");
+ plugin = new TreeGridField("plugin");
+ category = new TreeGridField("category");
+
+ treeGrid.setFields(name, plugin, category);
+
+ addMember(treeGrid);
+
+ ResourceTypeCriteria criteria = new ResourceTypeCriteria();
+ criteria.fetchParentResourceTypes(true);
+ criteria.setPageControl(PageControl.getUnlimitedInstance());
+
+ resourceTypeService.findResourceTypesByCriteria(criteria,
+ new AsyncCallback<PageList<ResourceType>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load inventory discovery queue", caught);
+ }
+
+ public void onSuccess(PageList<ResourceType> result) {
+
+ treeGrid.getTree().linkNodes(ResourceTypeTreeDataSource.buildNodes(result));
+
+ }
+ });
+ }
+
+
+ public static class CustomResourceTypeTreeGrid extends TreeGrid {
+ @Override
+ protected String getIcon(Record record, boolean defaultState) {
+
+ if (record instanceof TreeNode) {
+ boolean open = getTree().isOpen((TreeNode) record);
+
+ if (record instanceof ResourceTypeTreeDataSource.ResourceTypeTreeNode) {
+ ResourceType resourceType = ((ResourceTypeTreeDataSource.ResourceTypeTreeNode) record).getResourceType();
+
+ switch (resourceType.getCategory()) {
+ case PLATFORM:
+ return "types/Platform_up_16.png";
+ case SERVER:
+ return "types/Server_up_16.png";
+ case SERVICE:
+ return "types/Service_up_16.png";
+ }
+ } else if (record instanceof ResourceTypeTreeDataSource.PluginTreeNode) {
+ return "types/plugin_16.png";
+ }
+ }
+ return null;
+ }
+ }
+}
commit 2b960960767a03e8f7cbe7c31a6dc7a22d22e7a9
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:14:14 2010 -0400
Summary traits on overview as per jeremy's updated design
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 47a7ab8..f6c31da 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -45,6 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configura
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.GraphListView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.calltime.CallTimeView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.OperationHistoryView;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.overview.ResourceOverviewView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import com.google.gwt.user.client.History;
@@ -67,9 +68,6 @@ public class ResourceDetailView extends VLayout implements ViewRenderer, Resourc
private ResourcePermission permissions;
private ResourceType type;
- private SimpleCollapsiblePanel summaryPanel;
- private ResourceSummaryView summaryView;
-
private TwoLevelTab summaryTab;
private TwoLevelTab monitoringTab;
private TwoLevelTab inventoryTab;
@@ -97,9 +95,6 @@ public class ResourceDetailView extends VLayout implements ViewRenderer, Resourc
setWidth100();
setHeight100();
- // The header section
- summaryView = new ResourceSummaryView();
- summaryPanel = new SimpleCollapsiblePanel("Summary", summaryView);
// The Tabs section
@@ -142,8 +137,6 @@ public class ResourceDetailView extends VLayout implements ViewRenderer, Resourc
titleBar = new ResourceTitleBar();
addMember(titleBar);
- addMember(summaryPanel);
-
addMember(topTabSet);
// CoreGUI.addBreadCrumb(getPlace());
@@ -153,16 +146,13 @@ public class ResourceDetailView extends VLayout implements ViewRenderer, Resourc
this.resource = resource;
- this.summaryView.onResourceSelected(resource);
-
titleBar.setResource(resource);
int selectedTab = topTabSet.getSelectedTabNumber();
- FullHTMLPane summaryPane = new FullHTMLPane("/rhq/resource/summary/overview-plain.xhtml?id=" + resource.getId());
FullHTMLPane timelinePane = new FullHTMLPane("/rhq/resource/summary/timeline-plain.xhtml?id=" + resource.getId());
- summaryTab.updateSubTab("Overview", summaryPane);
+ summaryTab.updateSubTab("Overview", new ResourceOverviewView(resource));
summaryTab.updateSubTab("Timeline", timelinePane);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceSummaryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceSummaryView.java
deleted file mode 100644
index 58d0d08..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceSummaryView.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2010 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail;
-
-import org.rhq.core.domain.measurement.DataType;
-import org.rhq.core.domain.measurement.DisplayType;
-import org.rhq.core.domain.measurement.MeasurementDataTrait;
-import org.rhq.core.domain.measurement.MeasurementDefinition;
-import org.rhq.core.domain.resource.Resource;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSelectListener;
-import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.FormItem;
-import com.smartgwt.client.widgets.form.fields.SpacerItem;
-import com.smartgwt.client.widgets.form.fields.StaticTextItem;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.EnumSet;
-import java.util.List;
-
-/**
- * @author Greg Hinkle
- */
-public class ResourceSummaryView extends DynamicForm implements ResourceSelectListener {
-
- private Resource resource;
-
- @Override
- protected void onDraw() {
- super.onDraw();
-
- setNumCols(4);
- setWrapItemTitles(false);
- setLeft("10%");
- setWidth("80%");
- }
-
-
- public void onResourceSelected(Resource resource) {
-
- this.resource = resource;
-
- ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(),
- EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
- new ResourceTypeRepository.TypeLoadedCallback() {
- public void onTypesLoaded(ResourceType type) {
- try {
- buildForm(type);
- loadValues();
- } catch (Exception e) {
- SC.say("Form load failure");
- e.printStackTrace();
- }
- }
- });
-
-
- markForRedraw();
- }
-
- private void loadValues() {
- GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(
- resource.getId(),
- DisplayType.SUMMARY,
- new AsyncCallback<List<MeasurementDataTrait>>() {
- public void onFailure(Throwable caught) {
- SC.say("Failed to load traits");
- CoreGUI.getErrorHandler().handleError("Failed to load traits information for resource",caught);
- }
-
- public void onSuccess(List<MeasurementDataTrait> result) {
- // TODO: Implement this method.
- for (MeasurementDataTrait trait : result) {
- String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
- FormItem item = getItem(formId);
-
- if (item != null) {
- setValue(formId, trait.getValue());
- }
- }
- markForRedraw();
- }
- }
- );
-
- }
-
- private void buildForm(ResourceType type) {
- ArrayList<MeasurementDefinition> traits = new ArrayList<MeasurementDefinition>();
-
- for (MeasurementDefinition measurement : type.getMetricDefinitions()) {
- if (measurement.getDataType() == DataType.TRAIT && measurement.getDisplayType() == DisplayType.SUMMARY) {
- traits.add(measurement);
- }
- }
-
- Collections.sort(traits, new Comparator<MeasurementDefinition>() {
- public int compare(MeasurementDefinition o1, MeasurementDefinition o2) {
- return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder());
- }
- });
-
-
- ArrayList<FormItem> formItems = new ArrayList<FormItem>();
- ArrayList<String> itemIds = new ArrayList<String>();
-
-
- StaticTextItem typeItem = new StaticTextItem("typeItem", "Type");
- typeItem.setTooltip("Plugin: " + type.getPlugin() + "\n<br>" + "Type: " + type.getName());
- typeItem.setValue(type.getName() + " (" + type.getPlugin() + ")");
- formItems.add(typeItem);
- itemIds.add(typeItem.getName());
-
- StaticTextItem descriptionItem = new StaticTextItem("descriptionItem", "Description");
- descriptionItem.setValue(resource.getDescription());
- formItems.add(descriptionItem);
- itemIds.add(descriptionItem.getName());
-
-
- StaticTextItem versionItem = new StaticTextItem("versionItem", "Version");
- formItems.add(versionItem);
- itemIds.add(versionItem.getName());
-
-
- StaticTextItem parentItem = new StaticTextItem("parentItem", "Parent");
- formItems.add(parentItem);
- itemIds.add(parentItem.getName());
-
-
- for (MeasurementDefinition trait : traits) {
-
- String id = trait.getDisplayName().replaceAll("\\.", "_").replaceAll(" ", "__");
- itemIds.add(id);
-
- StaticTextItem item = new StaticTextItem(id, trait.getDisplayName());
- item.setTooltip(trait.getDescription());
- formItems.add(item);
-// item.setValue("?");
- }
-
-// SectionItem section = new SectionItem("Summary", "Summary");
-// section.setTitle("Summary");
-// section.setDefaultValue("Summary");
-// section.setCanCollapse(true);
-// section.setCellStyle("HidablePlainSectionHeader");
-// section.setItemIds(itemIds.toArray(new String[itemIds.size()]));
-// formItems.add(0, section);
-
- formItems.add(new SpacerItem());
- setItems(formItems.toArray(new FormItem[formItems.size()]));
-
-
- setValue("typeItem", type.getName() + " (" + type.getPlugin() + ")");
- setValue("descriptionItem", resource.getDescription());
- setValue("versionItem", resource.getVersion());
- setValue("parentItem", resource.getParentResource() == null ? null :
- ("<a href=\"#Resource/" + resource.getParentResource().getId() + "\">" +
- resource.getParentResource().getName() + "</a>"));
-
-
- }
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceOverviewView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceOverviewView.java
new file mode 100644
index 0000000..3f5cf5f
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceOverviewView.java
@@ -0,0 +1,57 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.overview;
+
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
+import org.rhq.enterprise.gui.coregui.client.components.SimpleCollapsiblePanel;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceOverviewView extends VLayout {
+
+ private Resource resource;
+
+
+ public ResourceOverviewView(Resource resource) {
+ this.resource = resource;
+ }
+
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ ResourceSummaryView summaryView = new ResourceSummaryView();
+ summaryView.onResourceSelected(resource);
+ SimpleCollapsiblePanel summaryPanel = new SimpleCollapsiblePanel("Summary", summaryView);
+
+
+ addMember(summaryPanel);
+
+
+ FullHTMLPane summaryPane = new FullHTMLPane("/rhq/resource/summary/overview-plain.xhtml?id=" + resource.getId());
+ addMember(summaryPane);
+
+
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceSummaryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceSummaryView.java
new file mode 100644
index 0000000..c2c2560
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/overview/ResourceSummaryView.java
@@ -0,0 +1,186 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.overview;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+
+import org.rhq.core.domain.measurement.DataType;
+import org.rhq.core.domain.measurement.DisplayType;
+import org.rhq.core.domain.measurement.MeasurementDataTrait;
+import org.rhq.core.domain.measurement.MeasurementDefinition;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSelectListener;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceSummaryView extends DynamicForm implements ResourceSelectListener {
+
+ private Resource resource;
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ setNumCols(4);
+ setWrapItemTitles(false);
+ setLeft("10%");
+ setWidth("80%");
+ }
+
+
+ public void onResourceSelected(Resource resource) {
+
+ this.resource = resource;
+
+ ResourceTypeRepository.Cache.getInstance().getResourceTypes(resource.getResourceType().getId(),
+ EnumSet.of(ResourceTypeRepository.MetadataType.measurements),
+ new ResourceTypeRepository.TypeLoadedCallback() {
+ public void onTypesLoaded(ResourceType type) {
+ try {
+ buildForm(type);
+ loadValues();
+ } catch (Exception e) {
+ SC.say("Form load failure");
+ e.printStackTrace();
+ }
+ }
+ });
+
+
+ markForRedraw();
+ }
+
+ private void loadValues() {
+ GWTServiceLookup.getMeasurementDataService().findCurrentTraitsForResource(
+ resource.getId(),
+ DisplayType.SUMMARY,
+ new AsyncCallback<List<MeasurementDataTrait>>() {
+ public void onFailure(Throwable caught) {
+ SC.say("Failed to load traits");
+ CoreGUI.getErrorHandler().handleError("Failed to load traits information for resource",caught);
+ }
+
+ public void onSuccess(List<MeasurementDataTrait> result) {
+ // TODO: Implement this method.
+ for (MeasurementDataTrait trait : result) {
+ String formId = trait.getName().replaceAll("\\.", "_").replaceAll(" ", "__");
+ FormItem item = getItem(formId);
+
+ if (item != null) {
+ setValue(formId, trait.getValue());
+ }
+ }
+ markForRedraw();
+ }
+ }
+ );
+
+ }
+
+ private void buildForm(ResourceType type) {
+ ArrayList<MeasurementDefinition> traits = new ArrayList<MeasurementDefinition>();
+
+ for (MeasurementDefinition measurement : type.getMetricDefinitions()) {
+ if (measurement.getDataType() == DataType.TRAIT && measurement.getDisplayType() == DisplayType.SUMMARY) {
+ traits.add(measurement);
+ }
+ }
+
+ Collections.sort(traits, new Comparator<MeasurementDefinition>() {
+ public int compare(MeasurementDefinition o1, MeasurementDefinition o2) {
+ return new Integer(o1.getDisplayOrder()).compareTo(o2.getDisplayOrder());
+ }
+ });
+
+
+ ArrayList<FormItem> formItems = new ArrayList<FormItem>();
+ ArrayList<String> itemIds = new ArrayList<String>();
+
+
+ StaticTextItem typeItem = new StaticTextItem("typeItem", "Type");
+ typeItem.setTooltip("Plugin: " + type.getPlugin() + "\n<br>" + "Type: " + type.getName());
+ typeItem.setValue(type.getName() + " (" + type.getPlugin() + ")");
+ formItems.add(typeItem);
+ itemIds.add(typeItem.getName());
+
+ StaticTextItem descriptionItem = new StaticTextItem("descriptionItem", "Description");
+ descriptionItem.setValue(resource.getDescription());
+ formItems.add(descriptionItem);
+ itemIds.add(descriptionItem.getName());
+
+
+ StaticTextItem versionItem = new StaticTextItem("versionItem", "Version");
+ formItems.add(versionItem);
+ itemIds.add(versionItem.getName());
+
+
+ StaticTextItem parentItem = new StaticTextItem("parentItem", "Parent");
+ formItems.add(parentItem);
+ itemIds.add(parentItem.getName());
+
+
+ for (MeasurementDefinition trait : traits) {
+
+ String id = trait.getDisplayName().replaceAll("\\.", "_").replaceAll(" ", "__");
+ itemIds.add(id);
+
+ StaticTextItem item = new StaticTextItem(id, trait.getDisplayName());
+ item.setTooltip(trait.getDescription());
+ formItems.add(item);
+// item.setValue("?");
+ }
+
+// SectionItem section = new SectionItem("Summary", "Summary");
+// section.setTitle("Summary");
+// section.setDefaultValue("Summary");
+// section.setCanCollapse(true);
+// section.setCellStyle("HidablePlainSectionHeader");
+// section.setItemIds(itemIds.toArray(new String[itemIds.size()]));
+// formItems.add(0, section);
+
+ formItems.add(new SpacerItem());
+ setItems(formItems.toArray(new FormItem[formItems.size()]));
+
+
+ setValue("typeItem", type.getName() + " (" + type.getPlugin() + ")");
+ setValue("descriptionItem", resource.getDescription());
+ setValue("versionItem", resource.getVersion());
+ setValue("parentItem", resource.getParentResource() == null ? null :
+ ("<a href=\"#Resource/" + resource.getParentResource().getId() + "\">" +
+ resource.getParentResource().getName() + "</a>"));
+
+
+ }
+}
commit 380b61e9546f636950bd8e4458e50055cd8fd9fd
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:13:42 2010 -0400
Dashboard demo work. summary and discovery queue added
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
index 560935b..35c75be 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java
@@ -29,21 +29,25 @@ import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VLayout;
+
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.RecentlyAddedView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitoring.SmallGraphView;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery.AutodiscoveryQueueDataSource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery.ResourceAutodiscoveryView;
+import org.rhq.enterprise.gui.coregui.client.inventory.summary.SummaryCountsView;
/**
* @author Greg Hinkle
*/
public class DashboardView extends VLayout {
- private static String[] colors = new String[]{
- "FF6600", "808000", "008000", "008080", "0000FF", "666699",
- "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF",
- "800080", "969696", "FF00FF", "FFCC00", "FFFF00", "00FF00",
- "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC", "FFCC99",
- "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
- };
+ private static String[] colors = new String[]{
+ "FF6600", "808000", "008000", "008080", "0000FF", "666699",
+ "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF",
+ "800080", "969696", "FF00FF", "FFCC00", "FFFF00", "00FF00",
+ "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC", "FFCC99",
+ "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
+ };
public DashboardView() {
setOverflow(Overflow.AUTO);
@@ -55,10 +59,25 @@ public class DashboardView extends VLayout {
setHeight100();
- final PortalLayout portalLayout = new PortalLayout(3);
+ final PortalLayout portalLayout = new PortalLayout(2);
portalLayout.setWidth100();
portalLayout.setHeight100();
+
+ Portlet summaryPortlet = new Portlet();
+ summaryPortlet.setTitle("Inventory Summary");
+ summaryPortlet.addItem(new SummaryCountsView());
+ summaryPortlet.setHeight(300);
+ portalLayout.addPortlet(summaryPortlet);
+
+
+ Portlet adPortlet = new Portlet();
+ adPortlet.setTitle("Auto Discovery Queue");
+ adPortlet.addItem(new ResourceAutodiscoveryView(true));
+ adPortlet.setHeight(250);
+ portalLayout.addPortlet(adPortlet);
+
+
// create portlets...
for (int i = 1; i <= 2; i++) {
Portlet portlet = new Portlet();
@@ -69,7 +88,7 @@ public class DashboardView extends VLayout {
// label.setLayoutAlign(VerticalAlignment.CENTER);
// label.setContents("Portlet contents");
// label.setBackgroundColor(colors[Random.nextInt(colors.length - 1)]);
-
+
portlet.addItem(new SmallGraphView());
portlet.setHeight(400);
portalLayout.addPortlet(portlet);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
index a1932b8..1720962 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
@@ -27,7 +27,11 @@ public class PortalLayout extends HLayout {
public PortalLayout(int numColumns) {
setMembersMargin(6);
for (int i = 0; i < numColumns; i++) {
- addMember(new PortalColumn());
+ PortalColumn column = new PortalColumn();
+ if (i == 0) {
+ column.setWidth("30%");
+ }
+ addMember(column);
}
}
commit 8026166c76593ca6f5a6bc83e59d6766b338ad0c
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:13:17 2010 -0400
Autodiscovery queue. tree view. import, ignore, unignore buttons
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
index 5a5e0d4..9fcb5cc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
@@ -21,13 +21,18 @@ package org.rhq.enterprise.gui.coregui.client.gwt;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
+import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import com.google.gwt.user.client.rpc.RemoteService;
+import java.util.EnumSet;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
/**
* @author Greg Hinkle
@@ -48,4 +53,11 @@ public interface ResourceGWTService extends RemoteService {
void createResource(int parentResourceId, int newResourceTypeId, String newResourceName, Configuration newResourceConfiguration);
+ Map<Resource, List<Resource>> getQueuedPlatformsAndServers(HashSet<InventoryStatus> statuses, PageControl pc);
+
+ void importResources(Integer[] resourceIds);
+
+ void ignoreResources(Integer[] resourceIds);
+
+ void unignoreResources(Integer[] resourceIds);
}
\ No newline at end of file
commit 5691f3427c38620b78172f20d6381db5324429eb
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:12:50 2010 -0400
Autodiscovery queue. tree view. import, ignore, unignore buttons
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index bf580ed..ff6f3ee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -27,6 +27,7 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView;
import org.rhq.enterprise.gui.coregui.client.admin.users.UsersView;
import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery.ResourceAutodiscoveryView;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.widgets.Canvas;
@@ -112,11 +113,11 @@ public class AdministrationView extends HLayout implements ViewRenderer {
Tree tree = new Tree();
final TreeNode manageUsersNode = new TreeNode("Manage Users");
final TreeNode manageRolesNode = new TreeNode("Manage Roles");
- final TreeNode manageGroups = new TreeNode("Resource Groups");
+ final TreeNode discoveryQueue = new TreeNode("Auto Discovery Queue");
tree.setRoot(new TreeNode("security",
manageUsersNode,
manageRolesNode,
- manageGroups));
+ discoveryQueue));
securityTreeGrid.setData(tree);
@@ -128,8 +129,8 @@ public class AdministrationView extends HLayout implements ViewRenderer {
content = new UsersView();
} else if (selectionEvent.getRecord() == manageRolesNode) {
content = new RolesView();
- } else if (selectionEvent.getRecord() == manageGroups) {
- content = new RolesView();
+ } else if (selectionEvent.getRecord() == discoveryQueue) {
+ content = new ResourceAutodiscoveryView();
} else {
throw new IllegalStateException("Unknown record selected: " + selectionEvent.getRecord());
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java
new file mode 100644
index 0000000..01a5ad3
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/AutodiscoveryQueueDataSource.java
@@ -0,0 +1,221 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSource;
+import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.types.DSDataFormat;
+import com.smartgwt.client.types.DSProtocol;
+import com.smartgwt.client.widgets.tree.TreeNode;
+
+import org.rhq.core.domain.resource.InventoryStatus;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
+
+/**
+ * @author Greg Hinkle
+ */
+public class AutodiscoveryQueueDataSource extends DataSource {
+
+
+ private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
+
+ public AutodiscoveryQueueDataSource() {
+ setClientOnly(false);
+ setDataProtocol(DSProtocol.CLIENTCUSTOM);
+ setDataFormat(DSDataFormat.CUSTOM);
+
+
+ DataSourceTextField idField = new DataSourceTextField("id", "ID");
+ idField.setPrimaryKey(true);
+
+ DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID");
+ parentIdField.setForeignKey("id");
+
+ DataSourceTextField resourceNameField = new DataSourceTextField("name", "Resource Name");
+
+ DataSourceTextField resourceKeyField = new DataSourceTextField("resourceKey", "Resource Key");
+
+ DataSourceTextField resourceTypeField = new DataSourceTextField("typeName", "Type");
+
+ DataSourceTextField descriptionField = new DataSourceTextField("description", "Description");
+
+ DataSourceTextField timestampField = new DataSourceTextField("ctime", "Discovery Time");
+
+ DataSourceTextField statusField = new DataSourceTextField("status", "Inventory Status");
+
+ setFields(idField, parentIdField, resourceNameField, resourceKeyField, resourceTypeField, descriptionField, statusField, timestampField);
+ }
+
+ protected Object transformRequest(DSRequest request) {
+ DSResponse response = new DSResponse();
+ response.setAttribute("clientContext", request.getAttributeAsObject("clientContext"));
+ // Asume success
+ response.setStatus(0);
+ switch (request.getOperationType()) {
+ case FETCH:
+ executeFetch(request, response);
+ break;
+ default:
+ break;
+ }
+
+ return request.getData();
+ }
+
+
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+ PageControl pc = getPageControl(request);
+
+ HashSet<InventoryStatus> statuses = new HashSet<InventoryStatus>();
+
+ String statusesString = request.getCriteria().getAttributeAsString("statuses");
+ if (statusesString != null) {
+ if ("New".equals(statusesString)) {
+ statuses.add(InventoryStatus.NEW);
+ } else if ("Ignored".equals(statusesString)) {
+ statuses.add(InventoryStatus.IGNORED);
+ } else {
+ statuses.add(InventoryStatus.NEW);
+ statuses.add(InventoryStatus.IGNORED);
+ }
+ } else {
+ statuses.add(InventoryStatus.NEW);
+ }
+
+
+ resourceService.getQueuedPlatformsAndServers(statuses, pc,
+ new AsyncCallback<Map<Resource, List<Resource>>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load inventory discovery queue", caught);
+ }
+
+ public void onSuccess(Map<Resource, List<Resource>> result) {
+ response.setData(buildNodes(result));
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+
+ private TreeNode[] buildNodes(Map<Resource, List<Resource>> result) {
+
+ ArrayList<ResourceTreeNode> nodes = new ArrayList<ResourceTreeNode>();
+ for (Resource platform : result.keySet()) {
+ nodes.add(new ResourceTreeNode(platform));
+
+ for (Resource child : result.get(platform)) {
+ ResourceTreeNode childNode = new ResourceTreeNode(child);
+ childNode.setIsFolder(false);
+ nodes.add(childNode);
+ }
+ }
+
+ TreeNode[] treeNodes = nodes.toArray(new TreeNode[nodes.size()]);
+ return treeNodes;
+ }
+
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl;
+ if (request.getStartRow() == null || request.getEndRow() == null) {
+ pageControl = new PageControl();
+ } else {
+ pageControl = PageControl.getExplicitPageControl(request.getStartRow(), request.getEndRow() - request.getStartRow());
+ }
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+
+ public static class ResourceTreeNode extends TreeNode {
+
+ private Resource resource;
+
+ private ResourceTreeNode(Resource resource) {
+ this.resource = resource;
+
+ String id = String.valueOf(resource.getId());
+ String parentId = resource.getParentResource() == null ? null
+ : String.valueOf((resource.getParentResource().getId()));
+
+ setID(id);
+ setParentID(parentId);
+
+ setAttribute("id", id);
+ setAttribute("parentId", parentId);
+ setAttribute("name", resource.getName());
+ setAttribute("typeName", resource.getResourceType().getName());
+ setAttribute("resourceKey", resource.getResourceKey());
+ setAttribute("description", resource.getDescription());
+ setAttribute("ctime", new Date(resource.getCtime()));
+ setAttribute("status", resource.getInventoryStatus().name());
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ public void setResource(Resource resource) {
+ this.resource = resource;
+ }
+
+ public ResourceType getResourceType() {
+ return resource.getResourceType();
+ }
+
+ public String getParentId() {
+ return getAttribute("parentId");
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java
new file mode 100644
index 0000000..6ef0606
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java
@@ -0,0 +1,229 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery;
+
+import java.util.ArrayList;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.SelectionAppearance;
+import com.smartgwt.client.widgets.HTMLFlow;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.SelectItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionEvent;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+import com.smartgwt.client.widgets.tree.TreeGrid;
+import com.smartgwt.client.widgets.tree.TreeGridField;
+
+import org.rhq.core.domain.resource.InventoryStatus;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceAutodiscoveryView extends VLayout {
+
+ private boolean simple = false;
+ private TreeGrid treeGrid;
+ private ToolStrip footer;
+
+ private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
+
+
+ public ResourceAutodiscoveryView() {
+ setWidth100();
+ setHeight100();
+ }
+
+ public ResourceAutodiscoveryView(boolean simple) {
+ this();
+ this.simple = simple;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+
+ HLayout titleLayout = new HLayout(150);
+
+ HTMLFlow title = new HTMLFlow();
+ title.setWidth100();
+ title.setHeight(35);
+ title.setContents("Auto Discovery Queue");
+ title.setPadding(4);
+ title.setStyleName("HeaderLabel");
+ titleLayout.addMember(title);
+
+
+ DynamicForm form = new DynamicForm();
+ final SelectItem statusSelectItem = new SelectItem("statuses", "Displayed Statuses");
+ statusSelectItem.setValueMap("New", "Ignored", "New and Ignored");
+ statusSelectItem.setValue("New");
+ form.setItems(statusSelectItem);
+ if (!simple)
+ titleLayout.addMember(form);
+
+
+ addMember(titleLayout);
+
+ treeGrid = new TreeGrid();
+
+ treeGrid.setHeight100();
+
+ treeGrid.setDataSource(new AutodiscoveryQueueDataSource());
+ treeGrid.setAutoFetchData(true);
+ treeGrid.setTitle("Auto Discovery Queue");
+ treeGrid.setResizeFieldsInRealTime(true);
+
+ final TreeGridField name, key, type, description, status, ctime;
+ name = new TreeGridField("name");
+ key = new TreeGridField("resourceKey");
+ type = new TreeGridField("typeName");
+ description = new TreeGridField("description");
+ status = new TreeGridField("status");
+ ctime = new TreeGridField("ctime");
+
+ if (!simple) {
+ treeGrid.setFields(name, key, type, description, status, ctime);
+ } else {
+ treeGrid.setFields(name, key, type, status);
+ }
+
+ treeGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
+ treeGrid.setShowSelectedStyle(false);
+ treeGrid.setShowPartialSelection(true);
+ treeGrid.setCascadeSelection(true);
+
+
+ addMember(treeGrid);
+
+ footer = new ToolStrip();
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
+
+ addMember(footer);
+
+
+ final IButton importButton = new IButton("Import");
+ final IButton ignoreButton = new IButton("Ignore");
+ final IButton unignoreButton = new IButton("Unignore");
+
+
+ footer.addMember(importButton);
+ footer.addMember(ignoreButton);
+ footer.addMember(unignoreButton);
+
+
+ importButton.setDisabled(true);
+ ignoreButton.setDisabled(true);
+ unignoreButton.setDisabled(true);
+
+ treeGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ boolean noneSelected = treeGrid.getSelection().length == 0;
+ importButton.setDisabled(noneSelected);
+ ignoreButton.setDisabled(noneSelected);
+ unignoreButton.setDisabled(noneSelected);
+ }
+ });
+
+
+ importButton.addClickHandler(
+ new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ resourceService.importResources(getSelectedIds(), new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to import resources", caught);
+ }
+
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(new Message("Successfully imported the selected resources", Message.Severity.Info));
+ treeGrid.invalidateCache();
+ }
+ });
+ }
+ }
+ );
+
+
+ ignoreButton.addClickHandler(
+ new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ resourceService.ignoreResources(getSelectedIds(), new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to ignore resources", caught);
+ }
+
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(new Message("Successfully ignored the selected resources", Message.Severity.Info));
+ treeGrid.invalidateCache();
+ }
+ });
+ }
+ }
+ );
+
+ unignoreButton.addClickHandler(
+ new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ resourceService.unignoreResources(getSelectedIds(), new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to unignore resources", caught);
+ }
+
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(new Message("Successfully unignored the selected resources", Message.Severity.Info));
+ treeGrid.invalidateCache();
+ }
+ });
+ }
+ }
+ );
+
+ statusSelectItem.addChangedHandler(new ChangedHandler() {
+ public void onChanged(ChangedEvent changedEvent) {
+ treeGrid.fetchData(new Criteria("statuses", (String) statusSelectItem.getValue()));
+ }
+ });
+ }
+
+ private Integer[] getSelectedIds() {
+ ArrayList<Integer> selected = new ArrayList<Integer>();
+ for (ListGridRecord node : treeGrid.getSelection()) {
+ if (!InventoryStatus.COMMITTED.name().equals(node.getAttributeAsString("status"))) {
+ selected.add(Integer.parseInt(node.getAttributeAsString("id")));
+ }
+ }
+ return selected.toArray(new Integer[selected.size()]);
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
index 484b434..3434a67 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
@@ -18,16 +18,20 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
+import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.ConfigurationTemplate;
import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
+import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.discovery.DiscoveryBossLocal;
import org.rhq.enterprise.server.resource.ResourceFactoryManagerLocal;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -37,8 +41,10 @@ import javax.servlet.ServletException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
@@ -48,7 +54,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceFactoryManagerLocal resourceFactoryManager = LookupUtil.getResourceFactoryManager();
-
+ private DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss();
private static String[] importantFields = {
"serialVersionUID",
@@ -178,4 +184,27 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
}
+
+ public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(HashSet<InventoryStatus> statuses, PageControl pc) {
+ return SerialUtility.prepare(
+ discoveryBoss.getQueuedPlatformsAndServers(
+ getSessionSubject(),
+ EnumSet.copyOf(statuses),
+ pc),
+ "ResoruceService.getQueuedPlatformsAndServers");
+ }
+
+ public void importResources(Integer[] resourceIds) {
+ discoveryBoss.importResources(getSessionSubject(), resourceIds);
+ }
+
+ public void ignoreResources(Integer[] resourceIds) {
+ discoveryBoss.ignoreResources(getSessionSubject(), resourceIds);
+ }
+
+ public void unignoreResources(Integer[] resourceIds) {
+ discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ }
+
+
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
index 0597c7a..8864505 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
@@ -164,28 +164,31 @@ public class DiscoveryBossBean implements DiscoveryBossLocal, DiscoveryBossRemot
return syncInfo;
}
+
@RequiredPermission(Permission.MANAGE_INVENTORY)
public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(Subject user, PageControl pc) {
+ return getQueuedPlatformsAndServers(user, EnumSet.of(InventoryStatus.NEW), pc);
+ }
+
+ @RequiredPermission(Permission.MANAGE_INVENTORY)
+ public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(Subject user, EnumSet<InventoryStatus> statuses, PageControl pc) {
// pc.initDefaultOrderingField("res.ctime", PageOrdering.DESC); // this is set in getQueuedPlatforms,
// maps a platform to a list of child servers
Map<Resource, List<Resource>> queuedResources = new HashMap<Resource, List<Resource>>();
- List<Resource> queuedPlatforms = getQueuedPlatforms(user, EnumSet.of(InventoryStatus.NEW), pc);
+ List<Resource> queuedPlatforms = getQueuedPlatforms(user, statuses, pc);
for (Resource platform : queuedPlatforms) {
- List<Resource> queuedServers = getQueuedPlatformChildServers(user, InventoryStatus.NEW, platform);
-
- ArrayList<Resource> servers = new ArrayList<Resource>();
- for (Resource server : queuedServers) {
- servers.add(server);
+ List<Resource> queuedServers = new ArrayList<Resource>();
+ for (InventoryStatus status : statuses) {
+ queuedServers.addAll(getQueuedPlatformChildServers(user, status, platform));
}
-
- queuedResources.put(platform, servers);
+ queuedResources.put(platform, queuedServers);
}
-
return queuedResources;
}
+
@RequiredPermission(Permission.MANAGE_INVENTORY)
@SuppressWarnings("unchecked")
public PageList<Resource> getQueuedPlatforms(Subject user, EnumSet<InventoryStatus> statuses, PageControl pc) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossLocal.java
index ad85062..c29833f 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossLocal.java
@@ -71,6 +71,16 @@ public interface DiscoveryBossLocal {
*/
Map<Resource, List<Resource>> getQueuedPlatformsAndServers(Subject user, PageControl pc);
+
+ /**
+ * Like the above method, but can find ignored, commited or both
+ * @param user
+ * @param statuses
+ * @param pc
+ * @return
+ */
+ Map<Resource, List<Resource>> getQueuedPlatformsAndServers(Subject user, EnumSet<InventoryStatus> statuses, PageControl pc);
+
/**
* This returns all platform resources that either have the given status themselves or one or more of their child
* servers have that status. Use this to find those platforms that need to be shown in the auto-discovery pages
commit 7bd4d3a695ec940ec69d7c363573249f0d890f56
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Wed Mar 24 12:11:42 2010 -0400
Support for filtering resource list by resourceTypeId
Fixed bug in criteria resourceTypeId should be int, not string
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
index e5534dc..69be135 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
@@ -50,7 +50,7 @@ public class ResourceCriteria extends Criteria {
private InventoryStatus filterInventoryStatus = InventoryStatus.COMMITTED; // default
private String filterVersion;
private String filterDescription;
- private String filterResourceTypeId; // needs overrides
+ private Integer filterResourceTypeId; // needs overrides
private String filterResourceTypeName; // needs overrides
private ResourceCategory filterResourceCategory; // needs overrides
private String filterPluginName; // needs overrides
@@ -146,7 +146,7 @@ public class ResourceCriteria extends Criteria {
this.filterDescription = filterDescription;
}
- public void addFilterResourceTypeId(String filterResourceTypeId) {
+ public void addFilterResourceTypeId(Integer filterResourceTypeId) {
this.filterResourceTypeId = filterResourceTypeId;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
index 89bee8b..d465cb8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java
@@ -53,6 +53,10 @@ public class ResourceDatasource extends RPCDataSource<Resource> {
DataSourceField idDataField = new DataSourceIntegerField("id", "ID", 20);
idDataField.setPrimaryKey(true);
+
+ DataSourceImageField iconField = new DataSourceImageField("icon");
+ iconField.setImageURLPrefix("types/");
+
DataSourceTextField nameDataField = new DataSourceTextField("name", "Name", 200);
nameDataField.setCanEdit(false);
@@ -67,7 +71,7 @@ public class ResourceDatasource extends RPCDataSource<Resource> {
availabilityDataField.setCanEdit(false);
- setFields(idDataField, nameDataField, descriptionDataField, typeNameDataField, pluginNameDataField,
+ setFields(idDataField, iconField, nameDataField, descriptionDataField, typeNameDataField, pluginNameDataField,
categoryDataField, availabilityDataField);
}
@@ -104,6 +108,10 @@ public class ResourceDatasource extends RPCDataSource<Resource> {
.get("availability")).toUpperCase()));
}
+ if (request.getCriteria().getValues().get("type") != null) {
+ criteria.addFilterResourceTypeId(Integer.parseInt(((String)request.getCriteria().getValues().get("type"))));
+ }
+
resourceService.findResourcesByCriteria(criteria, new AsyncCallback<PageList<Resource>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError("Failed to fetch resource data", caught);
@@ -138,6 +146,9 @@ public class ResourceDatasource extends RPCDataSource<Resource> {
record.setAttribute("typeName", from.getResourceType().getName());
record.setAttribute("pluginName", from.getResourceType().getPlugin());
record.setAttribute("category", from.getResourceType().getCategory().getDisplayName());
+ record.setAttribute("icon", from.getResourceType().getCategory().getDisplayName() + "_" +
+ (from.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP ? "up" : "down") + "_16.png");
+
record
.setAttribute(
commit 5eef84472eb5d226fd99af92f48ed38240b51ed2
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Mon Mar 22 16:17:14 2010 -0400
Cleanup experiment with embedding gwt in jsf
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/discovery/queue.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/discovery/queue.xhtml
index c283940..0025417 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/discovery/queue.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/discovery/queue.xhtml
@@ -28,10 +28,6 @@
</ui:define>
<ui:define name="body">
-
-
- <iframe src="/coregui/CoreGUI.html"></iframe>
-
<script language="JavaScript" type="text/javascript">
commit 71e1218efc9e0c4d0928a01a526650125853811f
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Sat Mar 20 18:38:57 2010 -0400
cleanup menu more
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
index 0990111..caf4ffb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/MenuBarView.java
@@ -43,7 +43,7 @@ public class MenuBarView extends VLayout {
private String selected = "Dashboard";
- HTMLFlow linksPane;
+ private HTMLFlow linksPane;
public MenuBarView() {
super(5);
@@ -135,23 +135,21 @@ public class MenuBarView extends VLayout {
boolean first = true;
for (String section : SECTIONS) {
if (first) {
- headerString.append("<td style=\"width: 1px;\"><img src=\"http://localhost:7080/coregui/images/header/header_bg_line.png\"/></td>");
+ headerString.append("<td style=\"width: 1px;\"><img src=\"images/header/header_bg_line.png\"/></td>");
}
first = false;
- String bg = "";
String styleClass = "TopSectionLink";
if (section.equals(selected)) {
- bg = " background-image: url('http://localhost:7080/coregui/images/header/header_bg_selected.png');";
styleClass += "Selected";
}
- headerString.append("<td style=\"vertical-align: bottom; padding:5px; padding-left: 15px; padding-right: 15px;" + bg + "\"onclick=\"document.location='#" + section + "'\" >");
- headerString.append("<a class=\"" + styleClass + "\" href=\"#" + section + "\">" + section + "</a>");
+ headerString.append("<td class=\"" + styleClass + "\" onclick=\"document.location='#" + section + "'\" >");
+ headerString.append(section);
headerString.append("</td>\n");
- headerString.append("<td style=\"width: 1px;\"><img src=\"http://localhost:7080/coregui/images/header/header_bg_line.png\"/></td>");
+ headerString.append("<td style=\"width: 1px;\"><img src=\"images/header/header_bg_line.png\"/></td>");
}
headerString.append("</tr></table>");
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
index dcd511f..63c2089 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
@@ -96,17 +96,21 @@ a:hover {
}
-A.TopSectionLink {
+.TopSectionLink, .topsectionlinkselected {
+ vertical-align: bottom;
+ padding:5px;
+ padding-left: 15px;
+ padding-right: 15px;
+
+ cursor: pointer;
font-size: 10pt;
font-weight: bold;
text-decoration: none;
- color: black;
+ color: #4A5D75;
}
-A.TopSectionLinkSelected {
- font-size: 10pt;
- font-weight: bold;
- text-decoration: none;
+.TopSectionLinkSelected {
+ background-image: url('images/header/header_bg_selected.png');
color: white;
}
14 years, 2 months
[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/BundleDeployDefinitionInfoStep.java | 4 ----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/CreateConfigStep.java | 8 --------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployNowStep.java | 4 ----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployStep.java | 10 +---------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java | 10 +---------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectPlatformsStep.java | 4 ----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectTemplateStep.java | 4 ----
7 files changed, 2 insertions(+), 42 deletions(-)
New commits:
commit e6979c22719a31de9a7792ea57802f44800b21ca
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 13:42:05 2010 -0400
get the finish button to close the wizard; remove isNext/Previous methods - they are obsolete/no longer needed
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/BundleDeployDefinitionInfoStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/BundleDeployDefinitionInfoStep.java
index ceda488..ef3afb6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/BundleDeployDefinitionInfoStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/BundleDeployDefinitionInfoStep.java
@@ -82,8 +82,4 @@ public class BundleDeployDefinitionInfoStep implements WizardStep {
public boolean nextPage() {
return form.validate();
}
-
- public boolean isPreviousEnabled() {
- return false;
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/CreateConfigStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/CreateConfigStep.java
index 8b8f46e..7456625 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/CreateConfigStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/CreateConfigStep.java
@@ -54,12 +54,4 @@ public class CreateConfigStep implements WizardStep {
wizard.setConfig(editor.getConfiguration());
return true;
}
-
- public boolean isPreviousEnabled() {
- return true;
- }
-
- public boolean isNextEnabled() {
- return true;
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployNowStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployNowStep.java
index 55d1a7f..aacf46f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployNowStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployNowStep.java
@@ -73,8 +73,4 @@ public class DeployNowStep implements WizardStep {
public boolean nextPage() {
return form.validate();
}
-
- public boolean isPreviousEnabled() {
- return true;
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployStep.java
index f06e278..bf3b8b1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/DeployStep.java
@@ -116,15 +116,7 @@ public class DeployStep implements WizardStep {
return canvas;
}
- public boolean isNextEnabled() {
- return false;
- }
-
- public boolean isPreviousEnabled() {
- return true;
- }
-
public boolean nextPage() {
- return false;
+ return true;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
index 0b71de1..52f7c5b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectBundleVersionStep.java
@@ -148,14 +148,6 @@ public class SelectBundleVersionStep implements WizardStep {
}
public boolean nextPage() {
- return form.validate();
- }
-
- public boolean isNextEnabled() {
- return (null != this.wizard.getBundleVersion());
- }
-
- public boolean isPreviousEnabled() {
- return false;
+ return form.validate() && (null != this.wizard.getBundleVersion());
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectPlatformsStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectPlatformsStep.java
index 94a4707..1e38fab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectPlatformsStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectPlatformsStep.java
@@ -68,8 +68,4 @@ public class SelectPlatformsStep implements WizardStep {
public boolean nextPage() {
return form.validate();
}
-
- public boolean isPreviousEnabled() {
- return true;
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectTemplateStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectTemplateStep.java
index ffc6adc..64efeaa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectTemplateStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/SelectTemplateStep.java
@@ -86,8 +86,4 @@ public class SelectTemplateStep implements WizardStep {
public boolean nextPage() {
return form.validate();
}
-
- public boolean isPreviousEnabled() {
- return true;
- }
}
14 years, 2 months
[rhq] 2 commits - modules/enterprise
by Simeon Pinder
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventAlertJSON.jsp | 4 ++--
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventConfigJSON.jsp | 2 +-
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp | 6 ++++--
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventCreateDeleteChildJSON.jsp | 4 ++--
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventEventsJSON.jsp | 4 ++--
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventOperationsJSON.jsp | 4 ++--
modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventPluginConfigJSON.jsp | 2 +-
7 files changed, 14 insertions(+), 12 deletions(-)
New commits:
commit bf2ad7ab6e9532e4869f4373712fcbc0c04f8618
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Wed Mar 24 05:04:01 2010 -0400
added null ptr check before retrieval for JSON population.
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
index 093c943..61a7505 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
@@ -67,9 +67,11 @@
%>
{ "start" : "<%=sdf.format(new Date(installedPackage.getTimestamp()))%>",
- "title" : "<%= (""+installedPackage.getPackageVersion().getDisplayName() + " " + installedPackage.getPackageVersion().getDisplayVersion()).replaceAll("[\"']","").trim()%>",
+ "title" : "<% out.write(
+ (installedPackage.getPackageVersion().getDisplayName()==null ? null : installedPackage.getPackageVersion().getDisplayName().replaceAll("[\"']","")) + " " +
+ (installedPackage.getPackageVersion().getDisplayVersion() ==null ? null : installedPackage.getPackageVersion().getDisplayVersion().replaceAll("[\"']","")));%>",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%= (""+installedPackage.getContentServiceRequest() == null ? "-Detected-" : installedPackage.getContentServiceRequest().getSubjectName()).replaceAll("[\"']","").trim()%><br/> <b>Version: <%= (""+installedPackage.getPackageVersion().getDisplayVersion()).replaceAll("[\"']","").trim()%></b> <br/><b>Status:</b> <%=(""+installedPackage.getStatus()).replaceAll("[\"']","").trim()%>",
+ "description" : "<b>User:</b> <% out.write((installedPackage.getContentServiceRequest() == null ? "-Detected- " : installedPackage.getContentServiceRequest().getSubjectName().replaceAll("[\"']","").trim())+"<br/> <b>Version: "+(installedPackage.getPackageVersion().getDisplayVersion() ==null ? null :installedPackage.getPackageVersion().getDisplayVersion().replaceAll("[\"']","").trim())+" </b> <br/><b>Status:</b> "+installedPackage.getStatus());%>",
"icon" : "<%=icon%>",
"color" : "<%=(installedPackage.getStatus() != InstalledPackageHistoryStatus.FAILED ? "#4EB84E" : "#DD5656")%>"
}
commit 7002a02a713675e1deec633096094120838a6473
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Tue Mar 23 18:59:22 2010 -0400
added single and double quote removal code to *JSON jsps to guard against creating invalid runtime javascript
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventAlertJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventAlertJSON.jsp
index 5cebe5d..2cc3da3 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventAlertJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventAlertJSON.jsp
@@ -59,9 +59,9 @@
%>
{ "start" : "<%=sdf.format(new Date(alert.getCtime()))%>",
- "title" : "<%=alert.getAlertDefinition().getName()%>",
+ "title" : "<%= (""+alert.getAlertDefinition().getName()).replaceAll("[\"']","").trim()%>",
"link" : "<%=link%>",
- "description" : "<%=buf.toString()%>",
+ "description" : "<%= (""+buf.toString()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(alert.getAlertDefinition().getPriority() == AlertPriority.LOW ? "#4EB84E" : "#DD5656")%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventConfigJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventConfigJSON.jsp
index b64cb55..6bb34c4 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventConfigJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventConfigJSON.jsp
@@ -49,7 +49,7 @@
{ "start" : "<%=sdf.format(configUpdate.getCreatedTime())%>",
"title" : "Configuration Change",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%=configUpdate.getSubjectName()%><br/><b>Status:</b> <%=configUpdate.getStatus()%>",
+ "description" : "<b>User:</b> <%= (""+configUpdate.getSubjectName()).replaceAll("[\"']","").trim()%><br/><b>Status:</b> <%= (""+configUpdate.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(configUpdate.getStatus() != ConfigurationUpdateStatus.FAILURE ? "#4EB84E" : "#DD5656")%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
index ccb197b..093c943 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventContentJSON.jsp
@@ -67,9 +67,9 @@
%>
{ "start" : "<%=sdf.format(new Date(installedPackage.getTimestamp()))%>",
- "title" : "<%=installedPackage.getPackageVersion().getDisplayName() + " " + installedPackage.getPackageVersion().getDisplayVersion()%>",
+ "title" : "<%= (""+installedPackage.getPackageVersion().getDisplayName() + " " + installedPackage.getPackageVersion().getDisplayVersion()).replaceAll("[\"']","").trim()%>",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%= installedPackage.getContentServiceRequest() == null ? "-Detected-" : installedPackage.getContentServiceRequest().getSubjectName()%><br/> <b>Version: <%=installedPackage.getPackageVersion().getDisplayVersion()%></b> <br/><b>Status:</b> <%=installedPackage.getStatus()%>",
+ "description" : "<b>User:</b> <%= (""+installedPackage.getContentServiceRequest() == null ? "-Detected-" : installedPackage.getContentServiceRequest().getSubjectName()).replaceAll("[\"']","").trim()%><br/> <b>Version: <%= (""+installedPackage.getPackageVersion().getDisplayVersion()).replaceAll("[\"']","").trim()%></b> <br/><b>Status:</b> <%=(""+installedPackage.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(installedPackage.getStatus() != InstalledPackageHistoryStatus.FAILED ? "#4EB84E" : "#DD5656")%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventCreateDeleteChildJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventCreateDeleteChildJSON.jsp
index 5e139db..46f3480 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventCreateDeleteChildJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventCreateDeleteChildJSON.jsp
@@ -65,7 +65,7 @@
{ "start" : "<%=sdf.format(entry.getCreatedTime())%>",
"title" : "Child resource created",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%=entry.getSubjectName()%><br/><b>Status:</b> <%=entry.getStatus()%>",
+ "description" : "<b>User:</b> <%=(""+entry.getSubjectName()).replaceAll("[\"']","").trim()%><br/><b>Status:</b> <%=(""+entry.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(entry.getStatus() != CreateResourceStatus.FAILURE ? "#4EB84E" : "#DD5656")%>"
}
@@ -101,7 +101,7 @@
{ "start" : "<%=sdf.format(entry.getCreatedTime())%>",
"title" : "Child resource deleted",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%=entry.getSubjectName()%><br/><b>Status:</b> <%=entry.getStatus()%>",
+ "description" : "<b>User:</b> <%=(""+entry.getSubjectName()).replaceAll("[\"']","").trim()%><br/><b>Status:</b> <%=(""+entry.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(entry.getStatus() != DeleteResourceStatus.FAILURE ? "#4EB84E" : "#DD5656")%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventEventsJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventEventsJSON.jsp
index e575df5..87a791d 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventEventsJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventEventsJSON.jsp
@@ -178,9 +178,9 @@
%>
{ "start" : "<%=sdf.format(event.getTimestamp())%>",
- "title" : "<%= title%>",
+ "title" : "<%= (""+title).replaceAll("[\"']","").trim()%>",
"link" : "<%=link%>",
- "description" : "<%=detail%>",
+ "description" : "<%=(""+detail).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=color%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventOperationsJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventOperationsJSON.jsp
index d42c09c..0846050 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventOperationsJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventOperationsJSON.jsp
@@ -58,9 +58,9 @@
%>
{ "start" : "<%=sdf.format(new Date(operation.getCreatedTime()))%>",
- "title" : "Operation: <%=operation.getOperationDefinition().getName()%>",
+ "title" : "Operation: <%=(""+operation.getOperationDefinition().getName()).replaceAll("[\"']","").trim()%>",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%=operation.getSubjectName()%><br/><b>Status:</b> <%=operation.getStatus()%>",
+ "description" : "<b>User:</b> <%=(""+operation.getSubjectName()).replaceAll("[\"']","").trim()%><br/><b>Status:</b> <%=(""+operation.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(operation.getStatus() == OperationRequestStatus.SUCCESS ? "#4EB84E" : "#DD5656")%>"
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventPluginConfigJSON.jsp b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventPluginConfigJSON.jsp
index 9f8ce1d..06ff3aa 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventPluginConfigJSON.jsp
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/resource/common/monitor/events/EventPluginConfigJSON.jsp
@@ -60,7 +60,7 @@
{ "start" : "<%=sdf.format(configUpdate.getCreatedTime())%>",
"title" : "Plugin Configuration Change",
"link" : "<%=link%>",
- "description" : "<b>User:</b> <%=configUpdate.getSubjectName()%><br/><b>Status:</b> <%=configUpdate.getStatus()%>",
+ "description" : "<b>User:</b> <%=(""+configUpdate.getSubjectName()).replaceAll("[\"']","").trim()%><br/><b>Status:</b> <%=(""+configUpdate.getStatus()).replaceAll("[\"']","").trim()%>",
"icon" : "<%=icon%>",
"color" : "<%=(configUpdate.getStatus() != ConfigurationUpdateStatus.FAILURE ? "#4EB84E" : "#DD5656")%>"
}
14 years, 2 months
[rhq] Branch 'gwt' - 2 commits - modules/core modules/enterprise
by mazz
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java | 118 +++++++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java | 61 ++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java | 5
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java | 35 ++
5 files changed, 176 insertions(+), 47 deletions(-)
New commits:
commit 5fc81509e8651a7fd52c1883f57d6af990c5eaba
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 03:03:16 2010 -0400
finishing up create bundle wizard. the summary page is almost done - can't get the vlayout of the file list to look right, need to fix that
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
index bddf61b..a0c565b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleSummaryStep.java
@@ -18,12 +18,12 @@
*/
package org.rhq.enterprise.gui.coregui.client.bundle.create;
-import com.smartgwt.client.types.Alignment;
-import com.smartgwt.client.types.TitleOrientation;
+import com.google.gwt.user.client.ui.HasHorizontalAlignment;
+import com.google.gwt.user.client.ui.Label;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.TextAreaItem;
-import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
@@ -32,7 +32,6 @@ import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
*/
public class BundleSummaryStep implements WizardStep {
- private DynamicForm form;
private final AbstractBundleCreateWizard wizard;
public BundleSummaryStep(AbstractBundleCreateWizard bundleCreationWizard) {
@@ -40,41 +39,92 @@ public class BundleSummaryStep implements WizardStep {
}
public Canvas getCanvas() {
- TextItem nameTextItem;
- TextItem versionTextItem;
- TextAreaItem descriptionTextAreaItem;
- TextItem bundleTypeTextItem;
- form = new DynamicForm();
- form.setPadding(20);
- form.setWidth100();
- form.setNumCols(2);
+ VLayout top = new VLayout();
+ top.setAutoHeight();
+ top.setPadding(20);
+ top.setWidth100();
- bundleTypeTextItem = new TextItem("bundleTypeItem", "Bundle Type");
- bundleTypeTextItem.setValue(wizard.getBundleType().getName());
- bundleTypeTextItem.setDisabled(true);
- bundleTypeTextItem.setTitleAlign(Alignment.LEFT);
+ HLayout bundleTypeBox = new HLayout();
+ bundleTypeBox.setWidth100();
+ bundleTypeBox.setExtraSpace(10);
+ Label bundleTypeLabel = new Label("Type:");
+ bundleTypeLabel.setWidth("10%");
+ bundleTypeLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ bundleTypeLabel.setWordWrap(false);
+ Label bundleTypeValue = new Label(wizard.getBundleType().getName());
+ bundleTypeValue.setWidth("90%");
+ bundleTypeValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ bundleTypeBox.addMember(bundleTypeLabel);
+ bundleTypeBox.addMember(bundleTypeValue);
+ top.addMember(bundleTypeBox);
- nameTextItem = new TextItem("name", "Name");
- nameTextItem.setValue(wizard.getBundleName());
- nameTextItem.setDisabled(true);
- nameTextItem.setTitleAlign(Alignment.LEFT);
+ HLayout nameBox = new HLayout();
+ nameBox.setWidth100();
+ nameBox.setExtraSpace(10);
+ Label nameLabel = new Label("Name:");
+ nameLabel.setWidth("10%");
+ nameLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ nameLabel.setWordWrap(false);
+ Label nameValue = new Label(wizard.getBundleName());
+ nameValue.setWidth("90%");
+ nameValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ nameBox.addMember(nameLabel);
+ nameBox.addMember(nameValue);
+ top.addMember(nameBox);
+ top.addMember(new LayoutSpacer());
- versionTextItem = new TextItem("version", "Version");
- versionTextItem.setValue(wizard.getBundleVersionString());
- versionTextItem.setDisabled(true);
- versionTextItem.setTitleAlign(Alignment.LEFT);
+ HLayout versionBox = new HLayout();
+ versionBox.setWidth100();
+ versionBox.setExtraSpace(10);
+ Label versionLabel = new Label("Version:");
+ versionLabel.setWidth("10%");
+ versionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ versionLabel.setWordWrap(false);
+ Label versionValue = new Label(wizard.getBundleVersionString());
+ versionValue.setWidth("90%");
+ versionValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ versionBox.addMember(versionLabel);
+ versionBox.addMember(versionValue);
+ top.addMember(versionBox);
+ top.addMember(new LayoutSpacer());
- descriptionTextAreaItem = new TextAreaItem("description", "Description");
- descriptionTextAreaItem.setValue(wizard.getBundleDescription());
- descriptionTextAreaItem.setDisabled(true);
- descriptionTextAreaItem.setTitleOrientation(TitleOrientation.TOP);
- descriptionTextAreaItem.setColSpan(2);
- descriptionTextAreaItem.setWidth(300);
+ HLayout descriptionBox = new HLayout();
+ descriptionBox.setWidth100();
+ descriptionBox.setExtraSpace(10);
+ Label descriptionLabel = new Label("Description:");
+ descriptionLabel.setWidth("10%");
+ descriptionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ descriptionLabel.setWordWrap(false);
+ Label descriptionValue = new Label(wizard.getBundleDescription());
+ descriptionValue.setWidth("90%");
+ descriptionValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ descriptionBox.addMember(descriptionLabel);
+ descriptionBox.addMember(descriptionValue);
+ top.addMember(descriptionBox);
+ top.addMember(new LayoutSpacer());
- form.setItems(bundleTypeTextItem, nameTextItem, versionTextItem, descriptionTextAreaItem);
+ HLayout filesBox = new HLayout();
+ filesBox.setWidth100();
+ filesBox.setExtraSpace(10);
+ Label filesLabel = new Label("Files:");
+ filesLabel.setWidth("10%");
+ filesLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ filesLabel.setWordWrap(false);
+ VLayout filesValues = new VLayout();
+ filesValues.setWidth("90%");
+ filesValues.setAutoHeight();
+ for (String filename : wizard.getAllBundleFilesStatus().keySet()) {
+ Label fileNameValue = new Label(filename);
+ fileNameValue.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
+ fileNameValue.setWordWrap(false);
+ filesValues.addMember(fileNameValue);
+ }
+ filesBox.addMember(filesLabel);
+ filesBox.addMember(filesValues);
+ top.addMember(filesBox);
- return form;
+ return top;
}
public boolean nextPage() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
index d702b9b..cf0d561 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
@@ -25,7 +25,11 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.bundle.Bundle;
+import org.rhq.core.domain.bundle.BundleVersion;
import org.rhq.core.domain.bundle.composite.BundleWithLatestVersionComposite;
+import org.rhq.core.domain.criteria.BundleCriteria;
+import org.rhq.core.domain.criteria.BundleVersionCriteria;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.bundle.create.BundleCreateWizard;
import org.rhq.enterprise.gui.coregui.client.bundle.create.BundleUpdateWizard;
@@ -59,14 +63,14 @@ public class BundlesListView extends VLayout {
table.getListGrid().setSelectionType(SelectionStyle.SIMPLE);
table.getListGrid().setSelectionAppearance(SelectionAppearance.CHECKBOX);
- table.addTableAction("Create Bundle", Table.SelectionEnablement.ALWAYS, null, new TableAction() {
+ table.addTableAction("Create New Bundle", Table.SelectionEnablement.ALWAYS, null, new TableAction() {
public void executeAction(ListGridRecord[] selection) {
new BundleCreateWizard().startBundleWizard();
}
});
- table.addTableAction("Delete Bundle", Table.SelectionEnablement.ANY, "Are You Sure?", new TableAction() {
+ table.addTableAction("Delete", Table.SelectionEnablement.ANY, "Are You Sure?", new TableAction() {
public void executeAction(ListGridRecord[] selections) {
BundlesWithLatestVersionDataSource ds = (BundlesWithLatestVersionDataSource) table.getDataSource();
for (ListGridRecord selection : selections) {
@@ -87,17 +91,58 @@ public class BundlesListView extends VLayout {
}
});
- table.addTableAction("Update Bundle", Table.SelectionEnablement.SINGLE, null, new TableAction() {
+ table.addTableAction("Create New Version", Table.SelectionEnablement.SINGLE, null, new TableAction() {
public void executeAction(ListGridRecord[] selection) {
- Bundle bundle = (Bundle) selection[0].getAttributeAsObject("entity");
- BundleUpdateWizard bundleUpdateWizard = new BundleUpdateWizard(null);
- bundleUpdateWizard.startBundleWizard();
+ BundlesWithLatestVersionDataSource ds = (BundlesWithLatestVersionDataSource) table.getDataSource();
+ final BundleWithLatestVersionComposite object = ds.copyValues(selection[0]);
+ BundleVersionCriteria bvc = new BundleVersionCriteria();
+ bvc.addFilterBundleId(object.getBundleId());
+ bvc.addFilterVersion(object.getLatestVersion());
+ BundleGWTServiceAsync bundleManager = GWTServiceLookup.getBundleService();
+ bundleManager.findBundleVersionsByCriteria(bvc, new AsyncCallback<PageList<BundleVersion>>() {
+ public void onSuccess(PageList<BundleVersion> result) {
+ if (result == null || result.size() != 1) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Failed to get last bundle version [" + object.getLatestVersion() + "]",
+ Severity.Error));
+ return;
+ }
+
+ BundleUpdateWizard bundleUpdateWizard = new BundleUpdateWizard(result.get(0));
+ bundleUpdateWizard.startBundleWizard();
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to load last bundle version [" + object.getLatestVersion() + "]", caught);
+ }
+ });
}
});
- table.addTableAction("Deploy Selected Bundle", Table.SelectionEnablement.SINGLE, null, new TableAction() {
+ table.addTableAction("Deploy", Table.SelectionEnablement.SINGLE, null, new TableAction() {
public void executeAction(ListGridRecord[] selection) {
- new BundleDeployWizard((Bundle) selection[0].getAttributeAsObject("object")).startBundleWizard();
+ BundlesWithLatestVersionDataSource ds = (BundlesWithLatestVersionDataSource) table.getDataSource();
+ final BundleWithLatestVersionComposite object = ds.copyValues(selection[0]);
+ BundleCriteria bc = new BundleCriteria();
+ bc.addFilterId(object.getBundleId());
+ BundleGWTServiceAsync bundleManager = GWTServiceLookup.getBundleService();
+ bundleManager.findBundlesByCriteria(bc, new AsyncCallback<PageList<Bundle>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to load bundle to deploy [" + object.getBundleName() + "]", caught);
+ }
+
+ public void onSuccess(PageList<Bundle> result) {
+ if (result == null || result.size() != 1) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Failed to get bundle to deploy [" + object.getBundleName() + "]",
+ Severity.Error));
+ return;
+ }
+ new BundleDeployWizard(result.get(0)).startBundleWizard();
+ }
+ });
}
});
commit ea7f26cca66aa0849c5613fad2ec73144f72b0a2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 24 03:02:22 2010 -0400
was seeing erroneous behavior when deleting bundles - changing impl and added unit test
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
index 3c74dfe..e3b7520 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
@@ -70,7 +70,8 @@ import org.rhq.core.domain.content.Distribution;
+ " WHERE bv.bundle.id = :bundleId " //
+ " ORDER BY bv.versionOrder DESC "), //
@NamedQuery(name = BundleVersion.QUERY_FIND_ALL, query = "SELECT bv FROM BundleVersion bv "), //
- @NamedQuery(name = BundleVersion.QUERY_FIND_BY_NAME, query = "SELECT bv FROM BundleVersion bv WHERE bv.name = :name ") //
+ @NamedQuery(name = BundleVersion.QUERY_FIND_BY_NAME, query = "SELECT bv FROM BundleVersion bv WHERE bv.name = :name "), //
+ @NamedQuery(name = BundleVersion.QUERY_FIND_BY_BUNDLE_ID, query = "SELECT bv FROM BundleVersion bv WHERE bv.bundle.id = :bundleId ") //
})
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_BUNDLE_VERSION_ID_SEQ")
@Table(name = "RHQ_BUNDLE_VERSION")
@@ -83,6 +84,7 @@ public class BundleVersion implements Serializable {
public static final String QUERY_FIND_VERSION_INFO_BY_BUNDLE_ID = "BundleVersion.findVersionsByBundleId";
public static final String QUERY_FIND_ALL = "BundleVersion.findAll";
public static final String QUERY_FIND_BY_NAME = "BundleVersion.findByName";
+ public static final String QUERY_FIND_BY_BUNDLE_ID = "BundleVersion.findByBundleId";
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ")
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index e52e3b6..a6be5ca 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -673,7 +673,10 @@ public class BundleManagerBean implements BundleManagerLocal, BundleManagerRemot
return;
}
- for (BundleVersion bv : bundle.getBundleVersions()) {
+ Query q = entityManager.createNamedQuery(BundleVersion.QUERY_FIND_BY_BUNDLE_ID);
+ q.setParameter("bundleId", bundleId);
+ List<BundleVersion> bvs = q.getResultList();
+ for (BundleVersion bv : bvs) {
bundleManager.deleteBundleVersion(subject, bv.getId(), false);
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
index 0d99b17..c975d38 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
@@ -271,6 +271,35 @@ public class BundleManagerBeanTest extends UpdateSubsytemTestBase {
}
@Test(enabled = TESTS_ENABLED)
+ public void testDeleteBundle() throws Exception {
+ Bundle b1 = createBundle("one");
+ assertNotNull(b1);
+ BundleVersion bv1 = createBundleVersion(b1.getName() + "-1", null, b1);
+ assertNotNull(bv1);
+ assertEquals("1.0", bv1.getVersion());
+ BundleVersion bv2 = createBundleVersion(b1.getName() + "-2", null, b1);
+ assertNotNull(bv2);
+ assertEquals("1.1", bv2.getVersion());
+
+ // let's add a bundle file so we can ensure our deletion will also delete the file too
+ bundleManager.addBundleFileViaByteArray(overlord, bv2.getId(), "testDeleteBundle", "1.0", new Architecture(
+ "noarch"), "content".getBytes(), false);
+ BundleFileCriteria bfCriteria = new BundleFileCriteria();
+ bfCriteria.addFilterBundleVersionId(bv2.getId());
+ bfCriteria.fetchPackageVersion(true);
+ PageList<BundleFile> files = bundleManager.findBundleFilesByCriteria(overlord, bfCriteria);
+ assert files.size() == 1 : files;
+ assert files.get(0).getPackageVersion().getGeneralPackage().getName().equals("testDeleteBundle") : files;
+
+ bundleManager.deleteBundle(overlord, b1.getId());
+
+ BundleCriteria bCriteria = new BundleCriteria();
+ bCriteria.addFilterId(b1.getId());
+ PageList<Bundle> bResults = bundleManager.findBundlesByCriteria(overlord, bCriteria);
+ assert bResults.size() == 0;
+ }
+
+ @Test(enabled = TESTS_ENABLED)
public void testDeleteBundleVersion() throws Exception {
Bundle b1 = createBundle("one");
assertNotNull(b1);
@@ -282,14 +311,14 @@ public class BundleManagerBeanTest extends UpdateSubsytemTestBase {
assertEquals("1.1", bv2.getVersion());
// let's add a bundle file so we can ensure our deletion will also delete the file too
- bundleManager.addBundleFileViaByteArray(overlord, bv2.getId(), "testfile", "1.0", new Architecture("noarch"),
- "content".getBytes(), false);
+ bundleManager.addBundleFileViaByteArray(overlord, bv2.getId(), "testDeleteBundleVersion", "1.0",
+ new Architecture("noarch"), "content".getBytes(), false);
BundleFileCriteria bfCriteria = new BundleFileCriteria();
bfCriteria.addFilterBundleVersionId(bv2.getId());
bfCriteria.fetchPackageVersion(true);
PageList<BundleFile> files = bundleManager.findBundleFilesByCriteria(overlord, bfCriteria);
assert files.size() == 1 : files;
- assert files.get(0).getPackageVersion().getGeneralPackage().getName().equals("testfile") : files;
+ assert files.get(0).getPackageVersion().getGeneralPackage().getName().equals("testDeleteBundleVersion") : files;
BundleVersionCriteria bvCriteria = new BundleVersionCriteria();
BundleCriteria bCriteria = new BundleCriteria();
14 years, 2 months