[rhq] Branch 'raw-config' - 8 commits - .classpath modules/enterprise modules/helpers
by Adam Young
.classpath | 2
modules/enterprise/gui/installer-war/pom.xml | 6
modules/enterprise/gui/portal-war/pom.xml | 6
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java | 46 ++-
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml | 5
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml | 132 ++++-----
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/upload.xhtml | 46 +++
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml | 144 ++++++++++
modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml | 3
modules/helpers/pluginAnnotations/pom.xml | 2
modules/helpers/pluginGen/pom.xml | 2
modules/helpers/pom.xml | 2
12 files changed, 309 insertions(+), 87 deletions(-)
New commits:
commit 58bea15b4716bb0230fb20866f6bc6790b095abc
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 22:21:41 2009 -0400
Interim for file upload for raw config. This is not a complete solution, but the file upload works, and is worth checkpointing.
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
index a4ce93b..e99e74b 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
@@ -1,10 +1,15 @@
package org.rhq.enterprise.gui.configuration.resource;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeMap;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.richfaces.event.UploadEvent;
import org.jboss.seam.ScopeType;
@@ -25,6 +30,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
@Name("RawConfigCollection")
@Scope(ScopeType.CONVERSATION)
public class RawConfigCollection implements Serializable {
+ private final Log log = LogFactory.getLog(RawConfigCollection.class);
/**
*
@@ -35,24 +41,35 @@ public class RawConfigCollection implements Serializable {
private TreeMap<String, RawConfiguration> modified = new TreeMap<String, RawConfiguration>();
private RawConfiguration current = null;
+ File uploadFile;
+
public void fileUploadListener(UploadEvent event) throws Exception {
- setCurrentContents(new String(event.getUploadItem().getData()));
+ log.error("fileUploadListener called");
+ uploadFile = event.getUploadItem().getFile();
+ if (uploadFile != null) {
+ log.debug("fileUploadListener got file named " + event.getUploadItem().getFileName());
+ }
}
void setFileSize(int size) {
System.out.println(size);
}
- public void setData(byte[] data) {
-
- if (data != null) {
- setCurrentContents(data.toString());
- }
-
- }
-
public void upload() {
-
+ log.error("upload called");
+ if (uploadFile != null) {
+ try {
+ FileReader fileReader = new FileReader(uploadFile);
+ char[] buff = new char[1024];
+ StringBuffer stringBuffer = new StringBuffer();
+ for (int count = fileReader.read(buff); count != -1; count = fileReader.read(buff)) {
+ stringBuffer.append(buff, 0, count);
+ }
+ setCurrentContents(stringBuffer.toString());
+ } catch (IOException e) {
+ log.error("problem reading uploaded file", e);
+ }
+ }
}
@Create
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index 200859c..11cff34 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -57,7 +57,11 @@
<h:outputText value="#{RawConfigCollection.current.path}"
styleClass="outhello" />
</h:panelGroup> <a href="#"><img src="/images/viewfullscreen.png" />View Full
- Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
+ Screen</a>
+ <h:outputLink value="upload.xhtml" target="uploadWindow" action="navigateToUpload" >
+ <img src="/images/upload.png" /> <h:outputText value=" upload file" />
+ </h:outputLink>
+ <a href="#"><img src="/images/download.png" /> Download</a>
<rich:editor id="editor" width="600" height="400" viewMode="visual"
value="#{RawConfigCollection.currentContents}" useSeamText="true">
@@ -69,17 +73,10 @@
<td></td>
<td>
<div>Upload A New Version</div>
- enctype="multipart/form-data"
- <h:form id="uploadConfigurationForm" >
- <h:inputHidden value="#{ResourceUIBean.id}" />
-
- <input type="hidden" name="id" value="#{ResourceUIBean.id}" />
- <seam:fileUpload id="rawfile" data="#{RawConfigCollection.data}" fileSize="#{RawConfigCollection.fileSize}" localInputStream=""/>
-
- <h:commandButton action="#{RawConfigCollection.upload}"
- value="upload" reRender="editor" />
- </h:form></td>
+ </td>
</tr>
+
+
</table>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/upload.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/upload.xhtml
new file mode 100644
index 0000000..b6e38f3
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/upload.xhtml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.ajax4jsf.org/rich">
+
+<ui:composition template="/rhq/layout/main.xhtml">
+<ui:param name="pageTitle" value="Upload Configuration File"/>
+
+<ui:define name="body">
+
+<rich:panel>
+ <f:facet name="header">
+ <h:outputText value="Upload Plugin"/>
+ </f:facet>
+
+ <div><h:outputText id="contents" value="#{RawConfigCollection.currentContents}" /></div>
+ <h:panelGrid columns="1" width="100%">
+ <h:form id="uploadform" enctype="multipart/form-data">
+ <rich:fileUpload
+ id="upload"
+ fileUploadListener="#{RawConfigCollection.fileUploadListener}"
+ maxFilesQuantity="10"
+ noDuplicate="true"
+ immediateUpload="true"
+ autoclear="false"
+ allowFlash="false">
+ <a4j:support event="onuploadcomplete" action="#{RawConfigCollection.upload}" reRender="contents"/>
+ </rich:fileUpload>
+ </h:form>
+ </h:panelGrid>
+
+</rich:panel>
+
+</ui:define>
+
+</ui:composition>
+
+</html>
+
+
commit 87b21fe5c69775b92ad64dadc6969f262209a4e4
Merge: 2f7afb9... 335b06e...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:58:50 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 2f7afb9f8cf04ebf4be6ee2789c7bd9dd73efce2
Merge: 4ad1753... d2b5835...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:06:54 2009 -0400
Merge branch 'raw-config'
commit 4ad1753e0609e84114283331a767ba772487e359
Merge: 133b6a9... b3f12c4...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:05:14 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 133b6a9ad83acfdc20fd95bedabbdbbb0ef6816c
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Tue Oct 27 21:10:02 2009 -0400
Attempt to support builds on platforms without separate JRE directories
diff --git a/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml b/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
index 0925313..d03c271 100644
--- a/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
+++ b/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
@@ -117,7 +117,8 @@
<!-- Classpath for WSConsume/WSProvide. Defined globally so that custom task defs can reference. -->
<!-- So,it's JBossws version specific (and assumes compatibility between JBossws and AS -->
<path id="jbossws.native.classpath">
- <fileset dir="${java.jre.home}/../lib/" includes="*.jar" />
+ <fileset dir="${java.jre.home}/lib/" includes="*.jar" erroronmissingdir="false" />
+ <fileset dir="${java.jre.home}/../lib/" includes="*.jar" erroronmissingdir="false" />
<!-- AS dependencies -->
<fileset dir="${jboss.home}/lib/endorsed/" includes="*.jar" />
commit d2b583545e150c8abf3e5c9664873ed43d73666e
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 27 12:04:36 2009 -0400
Interim to getting the file upload working. Most likely this will get squashed. Checking in right now to provide a patch for asad
diff --git a/.classpath b/.classpath
index c11b92f..1a30b4a 100644
--- a/.classpath
+++ b/.classpath
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="modules/common/jboss-as/src/test/java"/>
- <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
<classpathentry kind="src" path="modules/plugins/antlr-config/src/main/antlr3"/>
<classpathentry kind="src" path="modules/helpers/pluginAnnotations/src/main/java"/>
<classpathentry kind="src" path="modules/common/jboss-as/src/main/java"/>
@@ -77,7 +76,6 @@
<classpathentry kind="src" path="modules/plugins/netservices/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/iis/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/perftest/target/generated-sources/xjc"/>
- <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
<classpathentry kind="src" path="modules/plugins/perftest/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/perftest/src/test/java"/>
<classpathentry kind="src" path="modules/plugins/apt/src/test/java"/>
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
index 63a9ec5..a4ce93b 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
@@ -5,20 +5,19 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.TreeMap;
+import org.richfaces.event.UploadEvent;
+
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.End;
-import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.faces.Redirect;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.RawConfiguration;
-import org.rhq.enterprise.gui.legacy.ParamConstants;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -35,15 +34,25 @@ public class RawConfigCollection implements Serializable {
private TreeMap<String, RawConfiguration> raws;
private TreeMap<String, RawConfiguration> modified = new TreeMap<String, RawConfiguration>();
private RawConfiguration current = null;
- @In(value = "org.jboss.seam.faces.redirect")
- private Redirect redirect;
- public Redirect getRedirect() {
- return redirect;
+ public void fileUploadListener(UploadEvent event) throws Exception {
+ setCurrentContents(new String(event.getUploadItem().getData()));
+ }
+
+ void setFileSize(int size) {
+ System.out.println(size);
}
- public void setRedirect(Redirect redirect) {
- this.redirect = redirect;
+ public void setData(byte[] data) {
+
+ if (data != null) {
+ setCurrentContents(data.toString());
+ }
+
+ }
+
+ public void upload() {
+
}
@Create
@@ -98,8 +107,6 @@ public class RawConfigCollection implements Serializable {
getConfigurationManager();
// getConfigurationManager().setRawConfigurations(configId, raws.values());
- this.redirect.setParameter(ParamConstants.CONFIG_ID_PARAM, getConfigId());
- this.redirect.setViewId("http://localhost:7080/rhq/resource/configuration/history.xhtml");
}
public TreeMap<String, RawConfiguration> getRaws() {
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
index 56bb301..bacb535 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
@@ -13,4 +13,9 @@
<property name="transactionManagementEnabled">false</property>
</component>
+
+ <component class="org.jboss.seam.web.MultipartFilter">
+ <property name="createTempFiles">false</property>
+ <property name="maxRequestSize">1000000</property>
+ </component>
</components>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index 7aa0260..200859c 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -5,83 +5,86 @@
"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:a4j="http://richfaces.org/a4j"
- xmlns:rich="http://richfaces.org/rich"
- xmlns:onc="http://jboss.org/on/component">
+ 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:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:onc="http://jboss.org/on/component"
+ xmlns:seam="http://jboss.com/products/seam/taglib">
-THIS TEXT WILL BE REMOVED.
<ui:composition template="/rhq/resource/layout/main.xhtml">
- THIS TEXT WILL BE REMOVED AS WELL.
+ <ui:param name="pageTitle"
+ value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}' - Edit Configuration" />
- <ui:param name="pageTitle" value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}' - Edit Configuration"/>
+ <ui:param name="selectedTabName" value="Configuration.Current" />
- <ui:param name="selectedTabName" value="Configuration.Current"/>
-
- <ui:define name="content">
+ <ui:define name="content">
You are viewing this in advanced mode. Switch to
<h:outputLink value="edit.xhtml">
- <f:param name="conversationId" value="#{conversation.id}"/>
- <f:param name="id" value="#{ResourceUIBean.id}"/>
- <h:outputText value=" standard mode"/>
- </h:outputLink>
- <a4j:form id="editResourceConfigurationForm" >
-
-
- <table class="summary-props-table" style="" >
- <tr>
- <td bgcolor="lightblue" width="25%" valign="top">
- Files
-
- <h:panelGroup id="changedFiles" layout="vertical">
- <ui:repeat value="#{RawConfigCollection.paths}" var="path">
- <div>
- <h:outputText value="*" rendered="#{RawConfigCollection.isModified(path) }"/>
- <h:commandLink value="#{path}" action="#{RawConfigCollection.select(path)}" rendered="#{path != RawConfigCollection.current.path}">
- <f:param name="currentPath" value="#{path}"/>
- </h:commandLink>
- <h:outputText value="#{path}" rendered="#{path == RawConfigCollection.current.path}" />
- </div>
- </ui:repeat>
- </h:panelGroup>
-
- <div>______________________________________</div>
- <div> * File contains uncommited changes. </div>
-
- <a4j:commandButton action="#{RawConfigCollection.commit}" value="commit changes" reRender="changedFiles"/>
-
- </td>
- <td>
- <h:panelGroup id="title">
- <h:outputText value="#{RawConfigCollection.current.path}" styleClass="outhello" />
- </h:panelGroup>
-
- <a href="#"><img src="/images/viewfullscreen.png" />View Full Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
-
- <rich:editor
- id="editor" width="600" height="400"
- viewMode="visual" value="#{RawConfigCollection.currentContents}"
- useSeamText="true" >
-
- </rich:editor>
-
- <div>Upload A New Version</div>
- <input type="file" /> <input type="submit" value="Upload"/>
- </td></tr>
+ <f:param name="conversationId" value="#{conversation.id}" />
+ <f:param name="id" value="#{ResourceUIBean.id}" />
+ <h:outputText value=" standard mode" />
+ </h:outputLink>
+
+
+ <table class="summary-props-table" style="">
+ <a4j:form id="editResourceConfigurationForm">
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}" />
+ <tr>
+ <td bgcolor="lightblue" width="25%" valign="top">Files <h:panelGroup
+ id="changedFiles" layout="vertical">
+ <ui:repeat value="#{RawConfigCollection.paths}" var="path">
+ <div><h:outputText value="*"
+ rendered="#{RawConfigCollection.isModified(path) }" /> <h:commandLink
+ value="#{path}" action="#{RawConfigCollection.select(path)}"
+ rendered="#{path != RawConfigCollection.current.path}">
+ <f:param name="currentPath" value="#{path}" />
+ </h:commandLink> <h:outputText value="#{path}"
+ rendered="#{path == RawConfigCollection.current.path}" /></div>
+ </ui:repeat>
+ </h:panelGroup>
+
+ <div>______________________________________</div>
+ <div>* File contains uncommitted changes.</div>
+
+ <a4j:commandButton action="#{RawConfigCollection.commit}"
+ value="commit changes" reRender="changedFiles" /></td>
+ <td><h:panelGroup id="title">
+ <h:outputText value="#{RawConfigCollection.current.path}"
+ styleClass="outhello" />
+ </h:panelGroup> <a href="#"><img src="/images/viewfullscreen.png" />View Full
+ Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
+
+ <rich:editor id="editor" width="600" height="400" viewMode="visual"
+ value="#{RawConfigCollection.currentContents}" useSeamText="true">
+ </rich:editor>
+ </td></tr>
+ </a4j:form>
+
+ <tr>
+ <td></td>
+ <td>
+ <div>Upload A New Version</div>
+ enctype="multipart/form-data"
+ <h:form id="uploadConfigurationForm" >
+ <h:inputHidden value="#{ResourceUIBean.id}" />
+
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}" />
+ <seam:fileUpload id="rawfile" data="#{RawConfigCollection.data}" fileSize="#{RawConfigCollection.fileSize}" localInputStream=""/>
+
+ <h:commandButton action="#{RawConfigCollection.upload}"
+ value="upload" reRender="editor" />
+ </h:form></td>
+ </tr>
+
</table>
- <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
- </a4j:form>
- <h:panelGroup layout="block" styleClass="InfoBlock" rendered="#{ExistingResourceConfigurationUIBean.updateInProgress}">
- <b>${msg['note']}</b> ${msg['resource.config.Current.updateInProgress']}
- </h:panelGroup>
- </ui:define>
+ </ui:define>
</ui:composition>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml
new file mode 100644
index 0000000..0ec84df
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml
@@ -0,0 +1,144 @@
+<?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:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:onc="http://jboss.org/on/component"
+ xmlns:onf="http://jboss.org/on/function">
+
+THIS TEXT WILL BE REMOVED.
+
+The template for all Resource pages (i.e. the Monitor/Inventory/etc. tabbed pages).
+
+TEMPLATE PARAMETERS:
+ content - the page content
+
+CONTEXT PARAMETERS:
+ pageTitle - the page title
+ pageHelpURL - a context-sensitive help URL for the page (optional)
+ selectedTabName - the name of the tab/subTab to select in the following format:
+ tabName[.subtabName] (e.g. "Inventory" or "Monitor.Visibility")
+
+REQUEST PARAMETERS:
+ id - the id of the Resource being accessed
+
+<ui:composition template="/rhq/entity/layout/main.xhtml">
+
+ THIS TEXT WILL BE REMOVED AS WELL.
+
+ <ui:param name="defaultPageTitle"
+ value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}'" />
+
+ <ui:define name="breadcrumbs">
+
+ <!--<onc:resourceLineage resourceId="#{ResourceUIBean.id}"/>-->
+
+ <ui:remove>
+ <!--
+ Find the resourceId in the request, look up the corresponding resource, and stuff it into the request as well.
+ TODO: Get rid of this, once all pages are switched over to using ResourceUIBean rather than Resource.
+ -->
+ </ui:remove>
+ #{onf:loadResource()}
+
+ </ui:define>
+
+ <ui:define name="summary">
+
+ <ui:remove>
+ <!-- NOTE: Besides being included here, summary.xhtml is also leveraged by JSP-based pages. Specifically, it is
+ included (via an AJAX request) in /common/components/PageTitle.jsp. -->
+ </ui:remove>
+ <ui:include src="summary.xhtml" />
+
+ </ui:define>
+
+ <ui:define name="tabBar">
+
+ <onc:tabBar selectedTabName="#{selectedTabName}">
+
+ <f:param name="id" value="#{param.id}" />
+
+ <onc:tab name="Summary" image="/images/icons/#{ResourceUIBean.resourceType.category.displayName}_up_16.png">
+ <onc:subtab name="Overview" url="/rhq/resource/summary/overview.xhtml" />
+ <onc:subtab name="Timeline" url="/rhq/resource/summary/timeline.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Monitor" image="/images/icons/Monitor_grey_16.png" rendered="#{monitorEnabled}">
+ <onc:subtab name="Graphs" url="/rhq/resource/monitor/graphs.xhtml" />
+ <onc:subtab name="Tables" url="/rhq/resource/monitor/tables.xhtml" />
+ <onc:subtab name="Traits" url="/rhq/resource/monitor/traits.xhtml" />
+ <onc:subtab name="Availability" url="/rhq/resource/monitor/availabilityHistory.xhtml" />
+ <onc:subtab name="Schedules" url="/rhq/resource/monitor/schedules.xhtml" />
+ <c:if test="#{ResourceUIBean.facets.callTime}">
+ <onc:subtab name="Response" url="/rhq/resource/monitor/response.xhtml" />
+ </c:if>
+ </onc:tab>
+
+ <onc:tab name="Inventory" image="/images/icons/Inventory_grey_16.png">
+ <onc:subtab name="Overview" url="/rhq/resource/inventory/view.xhtml" />
+ <c:if test="#{ResourceUIBean.facets.pluginConfiguration}">
+ <onc:subtab name="Connection" url="/rhq/resource/inventory/view-connection.xhtml" />
+ </c:if>
+ <onc:subtab name="Agent" url="/rhq/resource/inventory/view-agent.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Alert" image="/images/icons/Alert_grey_16.png" rendered="#{monitorEnabled}">
+ <onc:subtab name="Definitions" url="/rhq/resource/alert/listAlertDefinitions.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/alert/listAlertHistory.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Configuration" image="/images/icons/Configure_grey_16.png" displayName="Configure" rendered="#{ResourceUIBean.facets.configuration}">
+ <onc:subtab name="Current" url="/rhq/resource/configuration/view.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/configuration/history.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Operations" image="/images/icons/Operation_grey_16.png" rendered="#{ResourceUIBean.facets.operation}">
+ <onc:subtab name="New" url="/rhq/resource/operation/resourceOperationScheduleNew.xhtml" />
+ <onc:subtab name="Schedules" url="/rhq/resource/operation/resourceOperationSchedules.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/operation/resourceOperationHistory.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Events" image="/images/icons/Events_grey_16.png" rendered="#{ResourceUIBean.facets.event}">
+ <onc:subtab name="History" url="/rhq/resource/events/history.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Content" image="/images/icons/Content_grey_16.png"
+ rendered="#{ResourceUIBean.facets.content}">
+ <onc:subtab name="Deployed" url="/rhq/resource/content/view.xhtml" />
+ <onc:subtab name="New" url="/rhq/resource/content/deploy.xhtml" />
+ <onc:subtab name="Subscriptions" url="/rhq/resource/content/subscription.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/content/history.xhtml" />
+ </onc:tab>
+
+ </onc:tabBar>
+
+ <!-- Shows the results of the last action executed. -->
+ <h:messages showSummary="true" showDetail="true"
+ infoClass="InfoBlock" warnClass="WarnBlock"
+ errorClass="ErrorBlock" fatalClass="FatalBlock"
+ globalOnly="true" layout="table" width="100%" />
+
+ </ui:define>
+
+
+ <ui:define name="content">
+
+ <h1>Default Resource Content</h1>
+
+
+ </ui:define>
+
+</ui:composition>
+
+THIS TEXT WILL BE REMOVED AS WELL.
+
+</html>
commit dcc37be2ccb608d9a84d00245d16c55931f4d862
Author: Heiko W. Rupp <pilhuhn(a)fedorapeople.org>
Date: Tue Oct 27 11:53:25 2009 +0100
More pom work to make users happy that obtain the pugin* stuff from a remote repo.
diff --git a/modules/helpers/pluginAnnotations/pom.xml b/modules/helpers/pluginAnnotations/pom.xml
index a3dc269..dbf2bad 100644
--- a/modules/helpers/pluginAnnotations/pom.xml
+++ b/modules/helpers/pluginAnnotations/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
diff --git a/modules/helpers/pluginGen/pom.xml b/modules/helpers/pluginGen/pom.xml
index 0fd3ff7..3197e9e 100644
--- a/modules/helpers/pluginGen/pom.xml
+++ b/modules/helpers/pluginGen/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
diff --git a/modules/helpers/pom.xml b/modules/helpers/pom.xml
index 6814e97..6731258 100644
--- a/modules/helpers/pom.xml
+++ b/modules/helpers/pom.xml
@@ -8,7 +8,7 @@
<version>1.4.0-SNAPSHOT</version>
</parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<packaging>pom</packaging>
commit 7185ca2f37cc7b35d8a48df8d2bac74f4592d144
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Mon Oct 26 14:48:30 2009 -0400
temporarily disabling jsp precomp in the dist build since it's generating errors
diff --git a/modules/enterprise/gui/installer-war/pom.xml b/modules/enterprise/gui/installer-war/pom.xml
index 0d35569..40c8268 100644
--- a/modules/enterprise/gui/installer-war/pom.xml
+++ b/modules/enterprise/gui/installer-war/pom.xml
@@ -299,6 +299,7 @@
</build>
</profile>
+ <!--
<profile>
<id>dist</id>
@@ -306,13 +307,13 @@
<plugins>
<plugin>
- <!-- See http://jetty.mortbay.org/jspc-maven-plugin/ -->
+ // See http://jetty.mortbay.org/jspc-maven-plugin/
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-jspc-maven-plugin</artifactId>
<version>${jetty-jspc.version}</version>
<configuration>
<keepSources>false</keepSources>
- <validateXml>false</validateXml> <!-- TODO: set to true -->
+ <validateXml>false</validateXml> // TODO: set to true
<generatedClasses>${project.build.outputDirectory}</generatedClasses>
</configuration>
<executions>
@@ -323,6 +324,7 @@
</plugins>
</build>
</profile>
+ -->
</profiles>
diff --git a/modules/enterprise/gui/portal-war/pom.xml b/modules/enterprise/gui/portal-war/pom.xml
index dd751d3..d60407e 100644
--- a/modules/enterprise/gui/portal-war/pom.xml
+++ b/modules/enterprise/gui/portal-war/pom.xml
@@ -548,6 +548,7 @@
</build>
</profile>
+ <!--
<profile>
<id>dist</id>
@@ -555,13 +556,13 @@
<plugins>
<plugin>
- <!-- See http://jetty.mortbay.org/jspc-maven-plugin/ -->
+ // See http://jetty.mortbay.org/jspc-maven-plugin/
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-jspc-maven-plugin</artifactId>
<version>${jetty-jspc.version}</version>
<configuration>
<keepSources>false</keepSources>
- <validateXml>false</validateXml> <!-- TODO: set to true -->
+ <validateXml>false</validateXml> // TODO: set to true
<generatedClasses>${project.build.outputDirectory}</generatedClasses>
</configuration>
<executions>
@@ -572,6 +573,7 @@
</plugins>
</build>
</profile>
+ -->
</profiles>
14 years, 6 months
[rhq] 2 commits - modules/core
by Adam Young
modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 87b21fe5c69775b92ad64dadc6969f262209a4e4
Merge: 2f7afb9... 335b06e...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:58:50 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 335b06ec521d881b3cd52021a5748d3123016967
Author: John Sanda <john(a)localhost.localdomain>
Date: Wed Oct 28 13:49:33 2009 -0400
[US 403] Modifying dbsetup script to add AMPS_VERSION column to RHQ_PLUGIN table
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
index 7116f57..204b1db 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
@@ -11,6 +11,7 @@
<column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="true"/>
<column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
<column name="VERSION" size="200" type="VARCHAR2" required="false"/>
+ <column name="AMPS_VERSION" size="16" type="VARCHAR2" required="false"/>
<column name="ENABLED" type="BOOLEAN" required="true"/>
<column name="HELP" type="CLOB" required="false"/>
<column name="PATH" size="500" type="VARCHAR2" required="true"/>
14 years, 6 months
[rhq] Branch 'raw-config' - modules/core
by John Sanda
modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 335b06ec521d881b3cd52021a5748d3123016967
Author: John Sanda <john(a)localhost.localdomain>
Date: Wed Oct 28 13:49:33 2009 -0400
[US 403] Modifying dbsetup script to add AMPS_VERSION column to RHQ_PLUGIN table
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
index 7116f57..204b1db 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/amps-schema.xml
@@ -11,6 +11,7 @@
<column name="DISPLAY_NAME" size="200" type="VARCHAR2" required="true"/>
<column name="DESCRIPTION" size="4000" type="VARCHAR2" required="false"/>
<column name="VERSION" size="200" type="VARCHAR2" required="false"/>
+ <column name="AMPS_VERSION" size="16" type="VARCHAR2" required="false"/>
<column name="ENABLED" type="BOOLEAN" required="true"/>
<column name="HELP" type="CLOB" required="false"/>
<column name="PATH" size="500" type="VARCHAR2" required="true"/>
14 years, 6 months
[rhq] 62 commits - .classpath etc/m2 modules/core modules/enterprise modules/plugins
by Adam Young
.classpath | 4
etc/m2/settings-rawconfig.xml | 43 +
modules/core/dbutils/pom.xml | 4
modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml | 12
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 70 ++
modules/core/domain/pom.xml | 7
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java | 55 +-
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/DeepCopyable.java | 30 +
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Property.java | 4
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java | 255 +++++++++
modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java | 24
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java | 246 +++++++++
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationIntegrationTest.java | 66 ++
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java | 244 +++++++++
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java | 59 ++
modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java | 25
modules/core/util/src/main/java/org/rhq/core/util/MD5Generator.java | 245 ---------
modules/core/util/src/main/java/org/rhq/core/util/MessageDigestGenerator.java | 261 ++++++++++
modules/core/util/src/main/java/org/rhq/core/util/file/GenericContentFileInfo.java | 4
modules/core/util/src/test/java/org/rhq/core/util/MD5GeneratorTest.java | 6
modules/enterprise/agent/src/etc/rhq-agent-env.sh | 3
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentManagement.java | 6
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentUpdateDownload.java | 4
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/PluginUpdate.java | 4
modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/promptcmd/PluginsPromptCommand.java | 4
modules/enterprise/gui/portal-war/pom.xml | 2
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java | 4
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/ExistingResourceConfigurationUIBean.java | 4
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java | 209 ++++++++
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml | 5
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml | 1
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-navigation/configuration-navigation.xml | 12
modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/tags/on.component.taglib.xml | 8
modules/enterprise/gui/portal-war/src/main/webapp/images/download.png |binary
modules/enterprise/gui/portal-war/src/main/webapp/images/upload.png |binary
modules/enterprise/gui/portal-war/src/main/webapp/images/viewfullscreen.png |binary
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml | 93 +++
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit.xhtml | 9
modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml | 144 +++++
modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java | 8
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java | 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java | 16
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentSourceManagerBean.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/AgentPluginDeploymentScanner.java | 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java | 1
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java | 81 +++
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/content/test/ContentSourceManagerBeanTest.java | 4
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java | 6
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java | 4
modules/enterprise/server/plugins/disk/src/main/java/org/rhq/enterprise/server/plugins/disk/DiskSource.java | 4
modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java | 8
modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java | 59 +-
54 files changed, 2056 insertions(+), 354 deletions(-)
New commits:
commit 2f7afb9f8cf04ebf4be6ee2789c7bd9dd73efce2
Merge: 4ad1753... d2b5835...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:06:54 2009 -0400
Merge branch 'raw-config'
commit 4ad1753e0609e84114283331a767ba772487e359
Merge: 133b6a9... b3f12c4...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 28 13:05:14 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq
commit b3f12c47502e15e6649e44bf218b3199665ca8b0
Author: John Sanda <john(a)localhost.localdomain>
Date: Tue Oct 27 21:46:22 2009 -0400
Disabling test that is failing on build server.
After taking a look at the test, the test appears fragile as it looks like
it depends on the presence of some config files on the file system, namely
grub.conf. This file path exists on the build server but may or may not
exist on other machines; hence, this is a fragile test that ought to be
refactored.
diff --git a/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java b/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
index 774d43a..5511e79 100644
--- a/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
+++ b/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
@@ -52,7 +52,13 @@ public class GrubComponentTest {
pluginConfiguration.put(new PropertySimple("augeas-grub-path", "/files/etc/grub.conf/*"));
}
- @Test
+ // Disabling test since it is failing on hudson build. Upon inspection, it looks like the behavior of the
+ // class under test will be influenced by the presence of the files listed above whose paths are added as
+ // properties to the pluginConfiguration object. Since those files may or may not be present on the local
+ // file system, it is another reason to disable this test
+ //
+ // jsanda
+ @Test(enabled = false)
public void loadResourceConfiguration() throws Exception {
Configuration configuration;
try {
commit 9bbcbff5471505254cc137368d1cab2baeb9226a
Author: John Sanda <john(a)localhost.localdomain>
Date: Tue Oct 27 21:42:58 2009 -0400
Fixing failing tests, disabling one, debugging another.
The failure in ConfigurationTest was a legitimate failure due to a bug in
RawConfiguration.deepCopy(). The failure in PluginTest was a result of trying
to use bad data. Adding some debugging to ScriptAssertTest as I have a hunch
that the javax.script libraries are not installed with the openjdk packages
that are being used on the build server.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index e8cfddc..ca02070 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -247,7 +247,7 @@ public class RawConfiguration implements Serializable, DeepCopyable<RawConfigura
RawConfiguration copy = new RawConfiguration();
copy.path = this.path;
if (this.contents != null) {
- copy.contents = this.getContents();
+ copy.setContents(this.getContents());
}
return copy;
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index c502f99..36084ec 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -28,6 +28,7 @@ import static org.testng.Assert.*;
import org.testng.annotations.Test;
import java.util.Random;
+import java.util.Set;
/**
* This class has tests for Configuration just like org.rhq.core.domain.configuration.test.ConfigurationTest. These
@@ -110,7 +111,15 @@ public class ConfigurationTest {
original.getRawConfigurations(),
"The rawConfigurations property should not refer to the original rawConfigurations of the copied object."
);
- assertEquals(copy.getRawConfigurations(), original.getRawConfigurations(), "Failed to copy rawConfigurations property.");
+
+ assertRawConfigurationsEquals(copy.getRawConfigurations(), original.getRawConfigurations(), "Failed to copy rawConfigurations property.");
+ }
+
+ void assertRawConfigurationsEquals(Set<RawConfiguration> actual, Set<RawConfiguration> expected, String msg) {
+ assertEquals(actual.size(), expected.size(), msg + " -- The rawConfigurations set has the wrong number of elements.");
+ for (RawConfiguration rawConfig : expected) {
+ assertTrue(actual.contains(rawConfig), msg + " -- Failed to find " + rawConfig);
+ }
}
@Test
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
index 9fc810a..9327b2a 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
@@ -96,7 +96,7 @@ public class PluginTest extends AbstractEJB3Test {
enabled = !enabled;
md5 = md5 + "00000";
String version = "version-UPDATED";
- String ampsVersion = "ampsVersion-UPDATED";
+ String ampsVersion = "2.1";
String description = "description-UPDATED";
String help = "help-UPDATED";
@@ -147,6 +147,8 @@ public class PluginTest extends AbstractEJB3Test {
em.close();
getTransactionManager().commit();
done = true;
+ } catch (Throwable t) {
+ t.printStackTrace();
} finally {
if (!done) {
getTransactionManager().rollback();
diff --git a/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java b/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
index 6d72759..3ab3284 100644
--- a/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
+++ b/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
@@ -23,13 +23,21 @@
package org.rhq.enterprise.client.utility;
+import static org.testng.Assert.*;
+
import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class ScriptAssertTest {
+ @BeforeClass
+ public void verifyScriptEngineIsAvailable() {
+ assertNotNull(createScriptEngine(), "ScriptEngine is not available. Are the required libraries on the classpath?");
+ }
+
@Test
public void assertExistsShouldReturnTrueWhenVariableIsBound() {
ScriptEngine scriptEngine = createScriptEngine();
commit d2b583545e150c8abf3e5c9664873ed43d73666e
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 27 12:04:36 2009 -0400
Interim to getting the file upload working. Most likely this will get squashed. Checking in right now to provide a patch for asad
diff --git a/.classpath b/.classpath
index c11b92f..1a30b4a 100644
--- a/.classpath
+++ b/.classpath
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="modules/common/jboss-as/src/test/java"/>
- <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
<classpathentry kind="src" path="modules/plugins/antlr-config/src/main/antlr3"/>
<classpathentry kind="src" path="modules/helpers/pluginAnnotations/src/main/java"/>
<classpathentry kind="src" path="modules/common/jboss-as/src/main/java"/>
@@ -77,7 +76,6 @@
<classpathentry kind="src" path="modules/plugins/netservices/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/iis/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/perftest/target/generated-sources/xjc"/>
- <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
<classpathentry kind="src" path="modules/plugins/perftest/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/perftest/src/test/java"/>
<classpathentry kind="src" path="modules/plugins/apt/src/test/java"/>
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
index 63a9ec5..a4ce93b 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
@@ -5,20 +5,19 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.TreeMap;
+import org.richfaces.event.UploadEvent;
+
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.End;
-import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.faces.Redirect;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.RawConfiguration;
-import org.rhq.enterprise.gui.legacy.ParamConstants;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -35,15 +34,25 @@ public class RawConfigCollection implements Serializable {
private TreeMap<String, RawConfiguration> raws;
private TreeMap<String, RawConfiguration> modified = new TreeMap<String, RawConfiguration>();
private RawConfiguration current = null;
- @In(value = "org.jboss.seam.faces.redirect")
- private Redirect redirect;
- public Redirect getRedirect() {
- return redirect;
+ public void fileUploadListener(UploadEvent event) throws Exception {
+ setCurrentContents(new String(event.getUploadItem().getData()));
+ }
+
+ void setFileSize(int size) {
+ System.out.println(size);
}
- public void setRedirect(Redirect redirect) {
- this.redirect = redirect;
+ public void setData(byte[] data) {
+
+ if (data != null) {
+ setCurrentContents(data.toString());
+ }
+
+ }
+
+ public void upload() {
+
}
@Create
@@ -98,8 +107,6 @@ public class RawConfigCollection implements Serializable {
getConfigurationManager();
// getConfigurationManager().setRawConfigurations(configId, raws.values());
- this.redirect.setParameter(ParamConstants.CONFIG_ID_PARAM, getConfigId());
- this.redirect.setViewId("http://localhost:7080/rhq/resource/configuration/history.xhtml");
}
public TreeMap<String, RawConfiguration> getRaws() {
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
index 56bb301..bacb535 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/components.xml
@@ -13,4 +13,9 @@
<property name="transactionManagementEnabled">false</property>
</component>
+
+ <component class="org.jboss.seam.web.MultipartFilter">
+ <property name="createTempFiles">false</property>
+ <property name="maxRequestSize">1000000</property>
+ </component>
</components>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index 7aa0260..200859c 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -5,83 +5,86 @@
"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:a4j="http://richfaces.org/a4j"
- xmlns:rich="http://richfaces.org/rich"
- xmlns:onc="http://jboss.org/on/component">
+ 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:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:onc="http://jboss.org/on/component"
+ xmlns:seam="http://jboss.com/products/seam/taglib">
-THIS TEXT WILL BE REMOVED.
<ui:composition template="/rhq/resource/layout/main.xhtml">
- THIS TEXT WILL BE REMOVED AS WELL.
+ <ui:param name="pageTitle"
+ value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}' - Edit Configuration" />
- <ui:param name="pageTitle" value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}' - Edit Configuration"/>
+ <ui:param name="selectedTabName" value="Configuration.Current" />
- <ui:param name="selectedTabName" value="Configuration.Current"/>
-
- <ui:define name="content">
+ <ui:define name="content">
You are viewing this in advanced mode. Switch to
<h:outputLink value="edit.xhtml">
- <f:param name="conversationId" value="#{conversation.id}"/>
- <f:param name="id" value="#{ResourceUIBean.id}"/>
- <h:outputText value=" standard mode"/>
- </h:outputLink>
- <a4j:form id="editResourceConfigurationForm" >
-
-
- <table class="summary-props-table" style="" >
- <tr>
- <td bgcolor="lightblue" width="25%" valign="top">
- Files
-
- <h:panelGroup id="changedFiles" layout="vertical">
- <ui:repeat value="#{RawConfigCollection.paths}" var="path">
- <div>
- <h:outputText value="*" rendered="#{RawConfigCollection.isModified(path) }"/>
- <h:commandLink value="#{path}" action="#{RawConfigCollection.select(path)}" rendered="#{path != RawConfigCollection.current.path}">
- <f:param name="currentPath" value="#{path}"/>
- </h:commandLink>
- <h:outputText value="#{path}" rendered="#{path == RawConfigCollection.current.path}" />
- </div>
- </ui:repeat>
- </h:panelGroup>
-
- <div>______________________________________</div>
- <div> * File contains uncommited changes. </div>
-
- <a4j:commandButton action="#{RawConfigCollection.commit}" value="commit changes" reRender="changedFiles"/>
-
- </td>
- <td>
- <h:panelGroup id="title">
- <h:outputText value="#{RawConfigCollection.current.path}" styleClass="outhello" />
- </h:panelGroup>
-
- <a href="#"><img src="/images/viewfullscreen.png" />View Full Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
-
- <rich:editor
- id="editor" width="600" height="400"
- viewMode="visual" value="#{RawConfigCollection.currentContents}"
- useSeamText="true" >
-
- </rich:editor>
-
- <div>Upload A New Version</div>
- <input type="file" /> <input type="submit" value="Upload"/>
- </td></tr>
+ <f:param name="conversationId" value="#{conversation.id}" />
+ <f:param name="id" value="#{ResourceUIBean.id}" />
+ <h:outputText value=" standard mode" />
+ </h:outputLink>
+
+
+ <table class="summary-props-table" style="">
+ <a4j:form id="editResourceConfigurationForm">
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}" />
+ <tr>
+ <td bgcolor="lightblue" width="25%" valign="top">Files <h:panelGroup
+ id="changedFiles" layout="vertical">
+ <ui:repeat value="#{RawConfigCollection.paths}" var="path">
+ <div><h:outputText value="*"
+ rendered="#{RawConfigCollection.isModified(path) }" /> <h:commandLink
+ value="#{path}" action="#{RawConfigCollection.select(path)}"
+ rendered="#{path != RawConfigCollection.current.path}">
+ <f:param name="currentPath" value="#{path}" />
+ </h:commandLink> <h:outputText value="#{path}"
+ rendered="#{path == RawConfigCollection.current.path}" /></div>
+ </ui:repeat>
+ </h:panelGroup>
+
+ <div>______________________________________</div>
+ <div>* File contains uncommitted changes.</div>
+
+ <a4j:commandButton action="#{RawConfigCollection.commit}"
+ value="commit changes" reRender="changedFiles" /></td>
+ <td><h:panelGroup id="title">
+ <h:outputText value="#{RawConfigCollection.current.path}"
+ styleClass="outhello" />
+ </h:panelGroup> <a href="#"><img src="/images/viewfullscreen.png" />View Full
+ Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
+
+ <rich:editor id="editor" width="600" height="400" viewMode="visual"
+ value="#{RawConfigCollection.currentContents}" useSeamText="true">
+ </rich:editor>
+ </td></tr>
+ </a4j:form>
+
+ <tr>
+ <td></td>
+ <td>
+ <div>Upload A New Version</div>
+ enctype="multipart/form-data"
+ <h:form id="uploadConfigurationForm" >
+ <h:inputHidden value="#{ResourceUIBean.id}" />
+
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}" />
+ <seam:fileUpload id="rawfile" data="#{RawConfigCollection.data}" fileSize="#{RawConfigCollection.fileSize}" localInputStream=""/>
+
+ <h:commandButton action="#{RawConfigCollection.upload}"
+ value="upload" reRender="editor" />
+ </h:form></td>
+ </tr>
+
</table>
- <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
- </a4j:form>
- <h:panelGroup layout="block" styleClass="InfoBlock" rendered="#{ExistingResourceConfigurationUIBean.updateInProgress}">
- <b>${msg['note']}</b> ${msg['resource.config.Current.updateInProgress']}
- </h:panelGroup>
- </ui:define>
+ </ui:define>
</ui:composition>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml
new file mode 100644
index 0000000..0ec84df
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/layout/main-no-leftnav.xhtml
@@ -0,0 +1,144 @@
+<?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:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:onc="http://jboss.org/on/component"
+ xmlns:onf="http://jboss.org/on/function">
+
+THIS TEXT WILL BE REMOVED.
+
+The template for all Resource pages (i.e. the Monitor/Inventory/etc. tabbed pages).
+
+TEMPLATE PARAMETERS:
+ content - the page content
+
+CONTEXT PARAMETERS:
+ pageTitle - the page title
+ pageHelpURL - a context-sensitive help URL for the page (optional)
+ selectedTabName - the name of the tab/subTab to select in the following format:
+ tabName[.subtabName] (e.g. "Inventory" or "Monitor.Visibility")
+
+REQUEST PARAMETERS:
+ id - the id of the Resource being accessed
+
+<ui:composition template="/rhq/entity/layout/main.xhtml">
+
+ THIS TEXT WILL BE REMOVED AS WELL.
+
+ <ui:param name="defaultPageTitle"
+ value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}'" />
+
+ <ui:define name="breadcrumbs">
+
+ <!--<onc:resourceLineage resourceId="#{ResourceUIBean.id}"/>-->
+
+ <ui:remove>
+ <!--
+ Find the resourceId in the request, look up the corresponding resource, and stuff it into the request as well.
+ TODO: Get rid of this, once all pages are switched over to using ResourceUIBean rather than Resource.
+ -->
+ </ui:remove>
+ #{onf:loadResource()}
+
+ </ui:define>
+
+ <ui:define name="summary">
+
+ <ui:remove>
+ <!-- NOTE: Besides being included here, summary.xhtml is also leveraged by JSP-based pages. Specifically, it is
+ included (via an AJAX request) in /common/components/PageTitle.jsp. -->
+ </ui:remove>
+ <ui:include src="summary.xhtml" />
+
+ </ui:define>
+
+ <ui:define name="tabBar">
+
+ <onc:tabBar selectedTabName="#{selectedTabName}">
+
+ <f:param name="id" value="#{param.id}" />
+
+ <onc:tab name="Summary" image="/images/icons/#{ResourceUIBean.resourceType.category.displayName}_up_16.png">
+ <onc:subtab name="Overview" url="/rhq/resource/summary/overview.xhtml" />
+ <onc:subtab name="Timeline" url="/rhq/resource/summary/timeline.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Monitor" image="/images/icons/Monitor_grey_16.png" rendered="#{monitorEnabled}">
+ <onc:subtab name="Graphs" url="/rhq/resource/monitor/graphs.xhtml" />
+ <onc:subtab name="Tables" url="/rhq/resource/monitor/tables.xhtml" />
+ <onc:subtab name="Traits" url="/rhq/resource/monitor/traits.xhtml" />
+ <onc:subtab name="Availability" url="/rhq/resource/monitor/availabilityHistory.xhtml" />
+ <onc:subtab name="Schedules" url="/rhq/resource/monitor/schedules.xhtml" />
+ <c:if test="#{ResourceUIBean.facets.callTime}">
+ <onc:subtab name="Response" url="/rhq/resource/monitor/response.xhtml" />
+ </c:if>
+ </onc:tab>
+
+ <onc:tab name="Inventory" image="/images/icons/Inventory_grey_16.png">
+ <onc:subtab name="Overview" url="/rhq/resource/inventory/view.xhtml" />
+ <c:if test="#{ResourceUIBean.facets.pluginConfiguration}">
+ <onc:subtab name="Connection" url="/rhq/resource/inventory/view-connection.xhtml" />
+ </c:if>
+ <onc:subtab name="Agent" url="/rhq/resource/inventory/view-agent.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Alert" image="/images/icons/Alert_grey_16.png" rendered="#{monitorEnabled}">
+ <onc:subtab name="Definitions" url="/rhq/resource/alert/listAlertDefinitions.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/alert/listAlertHistory.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Configuration" image="/images/icons/Configure_grey_16.png" displayName="Configure" rendered="#{ResourceUIBean.facets.configuration}">
+ <onc:subtab name="Current" url="/rhq/resource/configuration/view.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/configuration/history.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Operations" image="/images/icons/Operation_grey_16.png" rendered="#{ResourceUIBean.facets.operation}">
+ <onc:subtab name="New" url="/rhq/resource/operation/resourceOperationScheduleNew.xhtml" />
+ <onc:subtab name="Schedules" url="/rhq/resource/operation/resourceOperationSchedules.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/operation/resourceOperationHistory.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Events" image="/images/icons/Events_grey_16.png" rendered="#{ResourceUIBean.facets.event}">
+ <onc:subtab name="History" url="/rhq/resource/events/history.xhtml" />
+ </onc:tab>
+
+ <onc:tab name="Content" image="/images/icons/Content_grey_16.png"
+ rendered="#{ResourceUIBean.facets.content}">
+ <onc:subtab name="Deployed" url="/rhq/resource/content/view.xhtml" />
+ <onc:subtab name="New" url="/rhq/resource/content/deploy.xhtml" />
+ <onc:subtab name="Subscriptions" url="/rhq/resource/content/subscription.xhtml" />
+ <onc:subtab name="History" url="/rhq/resource/content/history.xhtml" />
+ </onc:tab>
+
+ </onc:tabBar>
+
+ <!-- Shows the results of the last action executed. -->
+ <h:messages showSummary="true" showDetail="true"
+ infoClass="InfoBlock" warnClass="WarnBlock"
+ errorClass="ErrorBlock" fatalClass="FatalBlock"
+ globalOnly="true" layout="table" width="100%" />
+
+ </ui:define>
+
+
+ <ui:define name="content">
+
+ <h1>Default Resource Content</h1>
+
+
+ </ui:define>
+
+</ui:composition>
+
+THIS TEXT WILL BE REMOVED AS WELL.
+
+</html>
commit 904487ce4305c46e70710399a7b719cbcf8e4f8f
Merge: 0cb5c04... 0d0de27...
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Oct 27 10:46:00 2009 -0400
Merge branch 'raw-config' of ssh://jsanda@git.fedorahosted.org/git/rhq/rhq into raw-config
commit 0d0de279c89011acbfce6592ea1fb63825de4c30
Author: Partha Aji <paji(a)redhat.com>
Date: Mon Oct 19 17:16:02 2009 -0400
Updated the rhq sudoer's plugin in to correctly map to the updated Augeas plugin
diff --git a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
index 9118cf1..6bff878 100644
--- a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
+++ b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
@@ -39,7 +39,7 @@ public class AugeasNode {
}
// Remove redundant "." and ".." components and redundant slashes.
- this.path = normalize(path);
+ this.path = path;
}
public AugeasNode(AugeasNode parent, String name) {
commit 283ef316f24bef58b176ca367129632a4c413cd8
Merge: 4ad17fb... 59cad4f...
Author: Adam Young <ayoung(a)redhat.com>
Date: Mon Oct 26 14:12:14 2009 -0400
merged from master, minus two conflicts
diff --cc .classpath
index 63f9e6f,222ef84..c11b92f
--- a/.classpath
+++ b/.classpath
@@@ -1,8 -1,7 +1,9 @@@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="modules/common/jboss-as/src/test/java"/>
+ <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
+ <classpathentry kind="src" path="modules/plugins/antlr-config/src/main/antlr3"/>
+ <classpathentry kind="src" path="modules/helpers/pluginAnnotations/src/main/java"/>
<classpathentry kind="src" path="modules/common/jboss-as/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/jboss-as/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/jboss-as/src/test/java"/>
commit 0cb5c04df3cd30ab4340c36ff463b1632349e399
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Oct 23 16:38:33 2009 -0400
[US 403] Adding support for ampsVersion in data model and in schema.
This commit includes:
* dbupgrade task to add AMPS_VERSION column to RHQ_PLUGIN table
* Add ampsVersion property and JPA mapping to Plugin class
* Update Plugin JPAQL queries to include ampsVersion property
* Modify ResourceMetadataManagerBean to persist ampsVersion found in plugin descriptor
* Bumping up schema version in dbutils/pom.xml
[US 403] Bumping up schema version to 2.59.1
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index cb40351..565b753 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.59</db.schema.version>
+ <db.schema.version>2.59.1</db.schema.version>
</properties>
<dependencies>
@@ -272,4 +272,4 @@
</profiles>
-</project>
\ No newline at end of file
+</project>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 948df51..d3336fa 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1580,6 +1580,14 @@ DB Upgrade:
</schemaSpec>
+ <schemaSpec version="2.59.1">
+ <schema-addColumn table="RHQ_PLUGIN" column="AMPS_VERSION" columnType="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_PLUGIN"
+ column="AMPS_VERSION"
+ columnType="VARCHAR2"
+ precision="16"/>
+ </schemaSpec>
+
</dbupgrade>
</target>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
index 1ee09e0..0c8336b 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
@@ -61,6 +61,7 @@ import org.rhq.core.util.MessageDigestGenerator;
+ " p.help, " //
+ " p.md5, " //
+ " p.version, " //
+ + " p.ampsVersion, "
+ " p.ctime, " //
+ " p.mtime) " //
+ " FROM Plugin AS p " //
@@ -78,6 +79,7 @@ import org.rhq.core.util.MessageDigestGenerator;
+ " p.help, " //
+ " p.md5, " //
+ " p.version, " //
+ + " p.ampsVersion, "
+ " p.ctime, " //
+ " p.mtime) " //
+ " FROM Plugin AS p "), //
@@ -91,6 +93,7 @@ import org.rhq.core.util.MessageDigestGenerator;
+ " p.enabled = :enabled, " //
+ " p.help = :help, " //
+ " p.version = :version, " //
+ + " p.ampsVersion = :ampsVersion,"
+ " p.path = :path, " //
+ " p.md5 = :md5, " //
+ " p.mtime = :mtime " //
@@ -108,6 +111,7 @@ import org.rhq.core.util.MessageDigestGenerator;
+ " p.help, " //
+ " p.md5, " //
+ " p.version, " //
+ + " p.ampsVersion, "
+ " p.ctime, " //
+ " p.mtime) " //
+ " FROM Plugin p " //
@@ -152,6 +156,9 @@ public class Plugin implements Serializable {
@Column(name = "VERSION", nullable = true)
private String version;
+ @Column(name = "AMPS_VERSION", nullable = true)
+ private String ampsVersion;
+
@Column(name = "PATH", nullable = false)
private String path;
@@ -167,7 +174,7 @@ public class Plugin implements Serializable {
@Column(name = "CONTENT", nullable = true)
private byte[] content;
- protected Plugin() {
+ public Plugin() {
}
/**
@@ -236,7 +243,7 @@ public class Plugin implements Serializable {
* @param mtime
*/
public Plugin(int id, String name, String path, String displayName, boolean enabled, String description,
- String help, String md5, String version, long ctime, long mtime) {
+ String help, String md5, String version, String ampsVersion, long ctime, long mtime) {
this.id = id;
this.name = name;
this.path = path;
@@ -246,6 +253,7 @@ public class Plugin implements Serializable {
this.help = help;
this.md5 = md5;
this.version = version;
+ this.ampsVersion = ampsVersion;
this.ctime = ctime;
this.mtime = mtime;
}
@@ -356,6 +364,14 @@ public class Plugin implements Serializable {
this.version = version;
}
+ public String getAmpsVersion() {
+ return ampsVersion;
+ }
+
+ public void setAmpsVersion(String ampsVersion) {
+ this.ampsVersion = ampsVersion;
+ }
+
public String getMd5() {
return md5;
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index 93dc5c4..c502f99 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -116,7 +116,7 @@ public class ConfigurationTest {
@Test
public void deepCopyWithoutProxiesShouldSetParentReferenceOfCopiedRawConfigurations() {
Configuration original = createConfiguration();
- original.addRawConfiguration(createRawConfiguration("/tmp/foo");
+ original.addRawConfiguration(createRawConfiguration("/tmp/foo"));
Configuration copy = original.deepCopyWithoutProxies();
RawConfiguration copiedRawConfig = getCopiedRawConfiguration(copy);
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
index 07ab588..9fc810a 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
@@ -28,6 +28,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
+import java.lang.reflect.Constructor;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
@@ -40,6 +41,11 @@ import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.domain.test.AbstractEJB3Test;
import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.stream.StreamUtil;
+import org.hibernate.Session;
+import org.hibernate.transform.ResultTransformer;
+import org.hibernate.type.Type;
+import org.hibernate.criterion.Example;
+import org.hibernate.criterion.Projections;
@Test
public class PluginTest extends AbstractEJB3Test {
@@ -90,6 +96,7 @@ public class PluginTest extends AbstractEJB3Test {
enabled = !enabled;
md5 = md5 + "00000";
String version = "version-UPDATED";
+ String ampsVersion = "ampsVersion-UPDATED";
String description = "description-UPDATED";
String help = "help-UPDATED";
@@ -106,6 +113,7 @@ public class PluginTest extends AbstractEJB3Test {
q.setParameter("enabled", enabled);
q.setParameter("md5", md5);
q.setParameter("version", version);
+ q.setParameter("ampsVersion", ampsVersion);
q.setParameter("description", description);
q.setParameter("help", help);
q.setParameter("mtime", System.currentTimeMillis());
@@ -496,4 +504,5 @@ public class PluginTest extends AbstractEJB3Test {
}
}
}
+
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index 4bde2aa..7d2265a 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@ -204,6 +204,7 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
q.setParameter("enabled", plugin.isEnabled());
q.setParameter("md5", plugin.getMD5());
q.setParameter("version", plugin.getVersion());
+ q.setParameter("ampsVersion", plugin.getAmpsVersion());
q.setParameter("description", plugin.getDescription());
q.setParameter("help", plugin.getHelp());
q.setParameter("mtime", plugin.getMtime());
commit 4ad17fb7a0bbe6d1f48534d824fb1d99289fde69
Author: Adam Young <ayoung(a)redhat.com>
Date: Fri Oct 23 13:22:34 2009 -0400
added config file for hudson
diff --git a/etc/m2/settings-rawconfig.xml b/etc/m2/settings-rawconfig.xml
new file mode 100644
index 0000000..4014541
--- /dev/null
+++ b/etc/m2/settings-rawconfig.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--===== a sample Maven 2 user settings file for the RHQ build =====-->
+<!-- See: http://maven.apache.org/settings.html -->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+
+ <!--
+ The below line can be uncommented if you want your local repo to be
+ in a more convenient location under Windows.
+ -->
+ <!--<localRepository>C:\.m2-repo</localRepository>-->
+
+ <!--
+ **************************** PROFILES ****************************
+ -->
+
+ <!--
+ See:
+ http://maven.apache.org/guides/introduction/introduction-to-profiles.html
+ and: http://docs.codehaus.org/display/MAVENUSER/Profiles
+ -->
+
+ <activeProfiles>
+ <activeProfile>test.rawconfig</activeProfile>
+ </activeProfiles>
+
+ <profiles>
+ <profile>
+ <!-- Profile to use to point test runs at a different db -->
+ <id>test.rawconfig</id>
+ <properties>
+ <rhq.test.ds.connection-url>jdbc:postgresql://127.0.0.1:5432/rhqrawconfig</rhq.test.ds.connection-url>
+ <DatabaseTest.nofail>true</DatabaseTest.nofail>
+ </properties>
+ </profile>
+ </profiles>
+ <pluginGroups>
+ <!--
+ This will allow you to invoke "org.rhq" Maven goals using the
+ "rhq" prefix
+ -->
+ <pluginGroup>org.rhq</pluginGroup>
+ </pluginGroups>
+</settings>
commit 2d21c50e3564d5c55ad32f252c20e9adcd4b8c11
Author: Adam Young <ayoung(a)redhat.com>
Date: Thu Oct 22 17:08:31 2009 -0400
Second interim checking for raw config editing
Made RawConfigCollection conversation scoped, driven off of annotations.
Added an 'init' method to start the conversation, because seam doesn't allow
starting a conversation based on a constructor.
There is still a bug with one file showing up as modified after a commit
The commit code does not yet send code to the back end.
In order to show behavior, the mock code is enabled. This will be removed before going live, probably when the back save gets enabled.
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
index dcbffb0..63a9ec5 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
@@ -1,41 +1,69 @@
package org.rhq.enterprise.gui.configuration.resource;
+import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeMap;
-import javax.faces.component.UIComponent;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Begin;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.End;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.faces.Redirect;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.RawConfiguration;
+import org.rhq.enterprise.gui.legacy.ParamConstants;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
-//@Name("RawConfigCollection")
-//(a)Scope(ScopeType.CONVERSATION)
-public class RawConfigCollection {
+@Name("RawConfigCollection")
+(a)Scope(ScopeType.CONVERSATION)
+public class RawConfigCollection implements Serializable {
- UIComponent binding;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4837157548556168146L;
private String selectedPath;
private TreeMap<String, RawConfiguration> raws;
private TreeMap<String, RawConfiguration> modified = new TreeMap<String, RawConfiguration>();
- protected ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
- RawConfiguration current;
- private Configuration configuration;
+ private RawConfiguration current = null;
+ @In(value = "org.jboss.seam.faces.redirect")
+ private Redirect redirect;
- //This is for development, to prevent actually going to the EJBs.
- //It should be set to false prior to check in
- private static final boolean useMock = false;
+ public Redirect getRedirect() {
+ return redirect;
+ }
- public UIComponent getBinding() {
- return binding;
+ public void setRedirect(Redirect redirect) {
+ this.redirect = redirect;
}
- public void setBinding(UIComponent binding) {
- this.binding = binding;
+ @Create
+ @Begin
+ public void init() {
+
+ }
+
+ /**
+ * These values are transient due to the need to save and restore the view.
+ * We can always fetch them again.
+ */
+ transient private ConfigurationManagerLocal configurationManager;
+ transient private Configuration configuration = null;
+
+ //This is for development, to prevent actually going to the EJBs.
+ //It should be set to false prior to check in
+ private static final boolean useMock = true;
+
+ public RawConfigCollection() {
}
public void select(String s) {
@@ -43,16 +71,35 @@ public class RawConfigCollection {
setCurrentPath(selectedPath);
}
- public int getConfigId() {
-
+ public Configuration getConfiguration() {
if (null == configuration) {
Subject subject = EnterpriseFacesContextUtility.getSubject();
int resourceId = EnterpriseFacesContextUtility.getResource().getId();
- AbstractResourceConfigurationUpdate configurationUpdate = this.configurationManager
+ AbstractResourceConfigurationUpdate configurationUpdate = this.getConfigurationManager()
.getLatestResourceConfigurationUpdate(subject, resourceId);
configuration = (configurationUpdate != null) ? configurationUpdate.getConfiguration() : null;
}
- return configuration.getId();
+
+ return configuration;
+ }
+
+ public int getConfigId() {
+
+ return getConfiguration().getId();
+ }
+
+ @End
+ public void commit() {
+ // configurationManager.findRawConfigurationsByConfigurationId(getConfigId());
+
+ for (RawConfiguration raw : modified.values()) {
+ getRaws().put(raw.getPath(), raw);
+ }
+ getConfigurationManager();
+ // getConfigurationManager().setRawConfigurations(configId, raws.values());
+
+ this.redirect.setParameter(ParamConstants.CONFIG_ID_PARAM, getConfigId());
+ this.redirect.setViewId("http://localhost:7080/rhq/resource/configuration/history.xhtml");
}
public TreeMap<String, RawConfiguration> getRaws() {
@@ -69,7 +116,8 @@ public class RawConfigCollection {
}
private void populateRawsMock() {
- String[] files = { "/etc/mock/file1", "/etc/mock/file2", "/etc/mock/file2" };
+ String[] files = { "/etc/mock/file1", "/etc/mock/file2", "/etc/mock/file3", "/etc/mock/me/will/you",
+ "/etc/mock/turtle/soup", "/etc/mock/mysmock/iclean/yourclock" };
for (String file : files) {
RawConfiguration raw = new RawConfiguration();
@@ -81,16 +129,13 @@ public class RawConfigCollection {
}
private void populateRaws() {
- Collection<RawConfiguration> rawConfigurations = configurationManager
+ Collection<RawConfiguration> rawConfigurations = getConfigurationManager()
.findRawConfigurationsByConfigurationId(getConfigId());
for (RawConfiguration raw : rawConfigurations) {
raws.put(raw.getPath(), raw);
}
}
- public RawConfigCollection() {
- }
-
public RawConfiguration getCurrent() {
if (null == current) {
Iterator<RawConfiguration> iterator = getRaws().values().iterator();
@@ -146,4 +191,12 @@ public class RawConfigCollection {
public boolean isModified(String path) {
return modified.keySet().contains(path);
}
+
+ private ConfigurationManagerLocal getConfigurationManager() {
+ if (null == configurationManager) {
+ configurationManager = LookupUtil.getConfigurationManager();
+ }
+
+ return configurationManager;
+ }
}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
index 9aa968e..1383c31 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
@@ -58,12 +58,6 @@
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
- <managed-bean>
- <managed-bean-name>RawConfigCollection</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.resource.RawConfigCollection</managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- </managed-bean>
-
</faces-config>
\ No newline at end of file
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/images/download.png b/modules/enterprise/gui/portal-war/src/main/webapp/images/download.png
new file mode 100644
index 0000000..84e60d2
Binary files /dev/null and b/modules/enterprise/gui/portal-war/src/main/webapp/images/download.png differ
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/images/upload.png b/modules/enterprise/gui/portal-war/src/main/webapp/images/upload.png
new file mode 100644
index 0000000..ea6c3bb
Binary files /dev/null and b/modules/enterprise/gui/portal-war/src/main/webapp/images/upload.png differ
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/images/viewfullscreen.png b/modules/enterprise/gui/portal-war/src/main/webapp/images/viewfullscreen.png
new file mode 100644
index 0000000..0a11ba9
Binary files /dev/null and b/modules/enterprise/gui/portal-war/src/main/webapp/images/viewfullscreen.png differ
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index d0bcbf8..7aa0260 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -38,7 +38,7 @@ THIS TEXT WILL BE REMOVED.
<td bgcolor="lightblue" width="25%" valign="top">
Files
- <h:panelGroup layout="vertical">
+ <h:panelGroup id="changedFiles" layout="vertical">
<ui:repeat value="#{RawConfigCollection.paths}" var="path">
<div>
<h:outputText value="*" rendered="#{RawConfigCollection.isModified(path) }"/>
@@ -51,13 +51,17 @@ THIS TEXT WILL BE REMOVED.
</h:panelGroup>
<div>______________________________________</div>
+ <div> * File contains uncommited changes. </div>
+
+ <a4j:commandButton action="#{RawConfigCollection.commit}" value="commit changes" reRender="changedFiles"/>
+
</td>
<td>
<h:panelGroup id="title">
<h:outputText value="#{RawConfigCollection.current.path}" styleClass="outhello" />
</h:panelGroup>
- [Icon]View Full Screen [^] Upload Now [v] Download
+ <a href="#"><img src="/images/viewfullscreen.png" />View Full Screen</a> <a href="#"><img src="/images/download.png" /> Download</a>
<rich:editor
id="editor" width="600" height="400"
commit 3050ee7ee1fd34adbd05764c33914c9ad0217fa9
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 21 15:46:46 2009 -0400
removing code refactored away
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java
deleted file mode 100644
index a45c6d8..0000000
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.rhq.enterprise.gui.configuration;
-
-import java.util.HashMap;
-
-import org.ajax4jsf.component.UIRepeat;
-
-import org.rhq.core.domain.configuration.RawConfiguration;
-
-public class RawConfigCollection {
- private UIRepeat repeater;
-
- public UIRepeat getRepeater() {
- return repeater;
- }
-
- public void setRepeater(UIRepeat repeater) {
- this.repeater = repeater;
- }
-
- HashMap<String, RawConfiguration> raws;
-
- RawConfiguration current;
-
- public RawConfigCollection() {
- current = new RawConfiguration();
- current.setPath("/etc/httpd/httpd.conf");
- current.setContents("This is the contents of the file".getBytes());
- raws = new HashMap<String, RawConfiguration>();
- raws.put(current.getPath(), current);
-
- String[] fileNames = { "/etc/httpd/conf.d/cobbler.conf", "/etc/httpd/conf.d/proxy_ajp.conf",
- "/etc/httpd/conf.d/cobbler_svc.conf", "/etc/httpd/conf.d/python.conf", "/etc/httpd/conf.d/mod_dnssd.conf",
- "/etc/httpd/conf.d/welcome.conf", "/etc/httpd/conf.d/php.conf" };
-
- for (String string : fileNames) {
- RawConfiguration c = new RawConfiguration();
- c.setPath(string);
- c.setContents(("contents of file" + string).getBytes());
- raws.put(c.getPath(), c);
- }
-
- }
-
- public RawConfiguration getCurrent() {
- return current;
- }
-
- public String getCurrentContents() {
- return new String(current.getContents());
- }
-
- public void setCurrentPath(String path) {
- current = raws.get(path);
- }
-
- public String getCurrentPath() {
- return current.getPath();
- }
-
- public Object[] getPaths() {
- return raws.keySet().toArray();
- }
-
-}
commit 0a17f6dd4d17ecd81e2c5f20f8b153949bfb90fa
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 21 15:35:25 2009 -0400
functioning read from raw config...with issues
diff --git a/.classpath b/.classpath
index a774301..63f9e6f 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="modules/common/jboss-as/src/test/java"/>
+ <classpathentry kind="src" path="modules/plugins/antlr-config/target/generated-sources/antlr3"/>
+ <classpathentry kind="src" path="modules/plugins/antlr-config/src/main/antlr3"/>
<classpathentry kind="src" path="modules/common/jboss-as/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/jboss-as/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/jboss-as/src/test/java"/>
@@ -82,9 +84,9 @@
<classpathentry kind="src" path="modules/plugins/hardware/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/oracle/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/grub/src/test/java"/>
- <classpathentry kind="src" path="modules/plugins/grub/src/main/java"/>
+ <classpathentry kind="src" path="modules/plugins/grub/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/samba/src/test/java"/>
- <classpathentry kind="src" path="modules/plugins/samba/src/main/java"/>
+ <classpathentry kind="src" path="modules/plugins/samba/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/sudoers/src/test/java"/>
<classpathentry kind="src" path="modules/plugins/sudoers/src/main/java"/>
<classpathentry kind="src" path="modules/plugins/hudson/src/main/java"/>
@@ -183,5 +185,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/net/sf/opencsv/opencsv/1.8/opencsv-1.8.jar"/>
<classpathentry exported="true" kind="lib" path="modules/enterprise/remoting/webservices/target/rhq-remoting-webservices-1.4.0-SNAPSHOT/wsconsume-output"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.2/antlr-runtime-3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-digester/commons-digester/1.8/commons-digester-1.8.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.4/commons-codec-1.4.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>
diff --git a/modules/enterprise/agent/src/etc/rhq-agent-env.sh b/modules/enterprise/agent/src/etc/rhq-agent-env.sh
index 22e70b5..847bb8f 100755
--- a/modules/enterprise/agent/src/etc/rhq-agent-env.sh
+++ b/modules/enterprise/agent/src/etc/rhq-agent-env.sh
@@ -53,7 +53,7 @@ RHQ_AGENT_JAVA_HOME="/usr/lib/jvm/java"
# use RHQ_AGENT_ADDITIONAL_JAVA_OPTS instead.
#
#RHQ_AGENT_JAVA_OPTS="-Xms64m -Xmx128m -Djava.net.preferIPv4Stack=true"
-
+ RHQ_AGENT_JAVA_OPTS="-Don.perftest.scenario=configurable-1 -Don.perftest.server-a-count=1 -Don.perftest.service-a-count=2"
# RHQ_AGENT_JAVA_ENDORSED_DIRS - Java VM command line option to set the
# endorsed dirs for the agent's VM. If this
# is not defined this script will pass in a
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/ExistingResourceConfigurationUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/ExistingResourceConfigurationUIBean.java
index 330cc50..a3df26d 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/ExistingResourceConfigurationUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/ExistingResourceConfigurationUIBean.java
@@ -29,6 +29,8 @@ import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.gui.configuration.ConfigurationMaskingUtility;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
+import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
/**
* @author Ian Springer
@@ -103,6 +105,8 @@ public class ExistingResourceConfigurationUIBean extends AbstractResourceConfigu
return EnterpriseFacesContextUtility.getResource().getId();
}
+ protected ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
+
@Nullable
protected Configuration lookupConfiguration() {
Subject subject = EnterpriseFacesContextUtility.getSubject();
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
new file mode 100644
index 0000000..dcbffb0
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/resource/RawConfigCollection.java
@@ -0,0 +1,149 @@
+package org.rhq.enterprise.gui.configuration.resource;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.TreeMap;
+
+import javax.faces.component.UIComponent;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.RawConfiguration;
+import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
+import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+//@Name("RawConfigCollection")
+//(a)Scope(ScopeType.CONVERSATION)
+public class RawConfigCollection {
+
+ UIComponent binding;
+ private String selectedPath;
+ private TreeMap<String, RawConfiguration> raws;
+ private TreeMap<String, RawConfiguration> modified = new TreeMap<String, RawConfiguration>();
+ protected ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
+ RawConfiguration current;
+ private Configuration configuration;
+
+ //This is for development, to prevent actually going to the EJBs.
+ //It should be set to false prior to check in
+ private static final boolean useMock = false;
+
+ public UIComponent getBinding() {
+ return binding;
+ }
+
+ public void setBinding(UIComponent binding) {
+ this.binding = binding;
+ }
+
+ public void select(String s) {
+ this.selectedPath = s;
+ setCurrentPath(selectedPath);
+ }
+
+ public int getConfigId() {
+
+ if (null == configuration) {
+ Subject subject = EnterpriseFacesContextUtility.getSubject();
+ int resourceId = EnterpriseFacesContextUtility.getResource().getId();
+ AbstractResourceConfigurationUpdate configurationUpdate = this.configurationManager
+ .getLatestResourceConfigurationUpdate(subject, resourceId);
+ configuration = (configurationUpdate != null) ? configurationUpdate.getConfiguration() : null;
+ }
+ return configuration.getId();
+ }
+
+ public TreeMap<String, RawConfiguration> getRaws() {
+
+ if (null == raws) {
+ raws = new TreeMap<String, RawConfiguration>();
+ if (useMock) {
+ populateRawsMock();
+ } else {
+ populateRaws();
+ }
+ }
+ return raws;
+ }
+
+ private void populateRawsMock() {
+ String[] files = { "/etc/mock/file1", "/etc/mock/file2", "/etc/mock/file2" };
+
+ for (String file : files) {
+ RawConfiguration raw = new RawConfiguration();
+ raw.setPath(file);
+ raw.setContents(("contents of file" + file).getBytes());
+ raws.put(file, raw);
+ }
+
+ }
+
+ private void populateRaws() {
+ Collection<RawConfiguration> rawConfigurations = configurationManager
+ .findRawConfigurationsByConfigurationId(getConfigId());
+ for (RawConfiguration raw : rawConfigurations) {
+ raws.put(raw.getPath(), raw);
+ }
+ }
+
+ public RawConfigCollection() {
+ }
+
+ public RawConfiguration getCurrent() {
+ if (null == current) {
+ Iterator<RawConfiguration> iterator = getRaws().values().iterator();
+ if (iterator.hasNext()) {
+ current = iterator.next();
+ } else {
+ current = new RawConfiguration();
+ current.setPath("/dev/null");
+ current.setContents("".getBytes());
+ }
+ }
+ return current;
+ }
+
+ public String getCurrentContents() {
+ return new String(getCurrent().getContents());
+ }
+
+ public void setCurrentContents(String updated) {
+ String u2 = updated.substring(2);
+ String original = new String(getCurrent().getContents());
+ if (!u2.equals(original)) {
+ current = current.deepCopy();
+ current.setContents(updated.getBytes());
+ //TODO update other values like MD5
+ modified.put(current.getPath(), current);
+ }
+ }
+
+ public void setCurrentPath(String path) {
+ RawConfiguration raw = modified.get(path);
+ if (null == raw) {
+ raw = getRaws().get(path);
+ }
+
+ if (null != raw) {
+ current = raw;
+ }
+ }
+
+ public String getCurrentPath() {
+ return getCurrent().getPath();
+ }
+
+ public Object[] getPaths() {
+ return getRaws().keySet().toArray();
+ }
+
+ public void setModified(RawConfiguration raw) {
+ modified.put(raw.getPath(), raw);
+ }
+
+ public boolean isModified(String path) {
+ return modified.keySet().contains(path);
+ }
+}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
index 5dba046..9aa968e 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
@@ -60,7 +60,7 @@
<managed-bean>
<managed-bean-name>RawConfigCollection</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.RawConfigCollection</managed-bean-class>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.resource.RawConfigCollection</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-navigation/configuration-navigation.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-navigation/configuration-navigation.xml
index b5260fd..ae1cde5 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-navigation/configuration-navigation.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-navigation/configuration-navigation.xml
@@ -21,6 +21,18 @@
</navigation-rule>
+
+ <navigation-rule>
+
+ <from-view-id>/rhq/resource/configuration/edit-raw.xhtml</from-view-id>
+ <navigation-case>
+ <from-action> #{RawConfigCollection.choseRaw}</from-action>
+ <from-outcome>success</from-outcome>
+ <to-view-id>/rhq/resource/configuration/edit-raw.xhtml?id=#{param.id}</to-view-id>
+ </navigation-case>
+ </navigation-rule>
+
+
<navigation-rule>
<from-view-id>/rhq/resource/configuration/edit.xhtml</from-view-id>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index 96ca6c2..d0bcbf8 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -32,30 +32,23 @@ THIS TEXT WILL BE REMOVED.
</h:outputLink>
<a4j:form id="editResourceConfigurationForm" >
-<!--
- <onc:rawconfig configurationDefinition="#{ExistingResourceConfigurationUIBean.configurationDefinition}"
- configuration="#{ExistingResourceConfigurationUIBean.configuration}"
- nullConfigurationDefinitionMessage="#{ExistingResourceConfigurationUIBean.nullConfigurationDefinitionMessage}"
- nullConfigurationMessage="#{ExistingResourceConfigurationUIBean.nullConfigurationMessage}"
- prevalidate="true"/>
--->
<table class="summary-props-table" style="" >
<tr>
<td bgcolor="lightblue" width="25%" valign="top">
Files
- <div>#{RawConfigCollection.current.path}</div>
- <a4j:repeat
- value="#{RawConfigCollection.paths}"
- var="path"
- binding="#{RawConfigCollection.repeater}" >
- <div>
- <a4j:commandLink reRender="editor" >
- <h:outputText value="${path}" />
- </a4j:commandLink>
- </div>
- </a4j:repeat>
+ <h:panelGroup layout="vertical">
+ <ui:repeat value="#{RawConfigCollection.paths}" var="path">
+ <div>
+ <h:outputText value="*" rendered="#{RawConfigCollection.isModified(path) }"/>
+ <h:commandLink value="#{path}" action="#{RawConfigCollection.select(path)}" rendered="#{path != RawConfigCollection.current.path}">
+ <f:param name="currentPath" value="#{path}"/>
+ </h:commandLink>
+ <h:outputText value="#{path}" rendered="#{path == RawConfigCollection.current.path}" />
+ </div>
+ </ui:repeat>
+ </h:panelGroup>
<div>______________________________________</div>
</td>
@@ -68,7 +61,8 @@ THIS TEXT WILL BE REMOVED.
<rich:editor
id="editor" width="600" height="400"
- viewMode="visual" value="#{RawConfigCollection.currentContents}" useSeamText="false">
+ viewMode="visual" value="#{RawConfigCollection.currentContents}"
+ useSeamText="true" >
</rich:editor>
commit ea57695afbcda010f30e9d34513dc5330b2ddb8e
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 21 11:48:54 2009 -0400
Fixing typo/comiler error in unit test
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index 2838b26..93dc5c4 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -116,7 +116,7 @@ public class ConfigurationTest {
@Test
public void deepCopyWithoutProxiesShouldSetParentReferenceOfCopiedRawConfigurations() {
Configuration original = createConfiguration();
- original.addRawConfiguration(createRawConfiguration("/tmp/foo"););
+ original.addRawConfiguration(createRawConfiguration("/tmp/foo");
Configuration copy = original.deepCopyWithoutProxies();
RawConfiguration copiedRawConfig = getCopiedRawConfiguration(copy);
commit ea87ff2ad0e8faba3ee81db903960427095bf586
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Oct 19 16:50:58 2009 -0400
Updating deepCopyWithoutProxies() to copy rawConfigurations collection.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
index 237b27b..3fab412 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
@@ -499,7 +499,7 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
}
for (RawConfiguration rawConfig : rawConfigurations) {
-
+ copy.addRawConfiguration(rawConfig.deepCopy());
}
return copy;
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index ddbdc83..2838b26 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -99,6 +99,43 @@ public class ConfigurationTest {
}
@Test
+ public void deepCopyWithoutProxiesShouldCopyRawConfigurations() {
+ Configuration original = createConfiguration();
+ original.addRawConfiguration(createRawConfiguration("/tmp/foo"));
+
+ Configuration copy = original.deepCopyWithoutProxies();
+
+ assertNotSame(
+ copy.getRawConfigurations(),
+ original.getRawConfigurations(),
+ "The rawConfigurations property should not refer to the original rawConfigurations of the copied object."
+ );
+ assertEquals(copy.getRawConfigurations(), original.getRawConfigurations(), "Failed to copy rawConfigurations property.");
+ }
+
+ @Test
+ public void deepCopyWithoutProxiesShouldSetParentReferenceOfCopiedRawConfigurations() {
+ Configuration original = createConfiguration();
+ original.addRawConfiguration(createRawConfiguration("/tmp/foo"););
+
+ Configuration copy = original.deepCopyWithoutProxies();
+ RawConfiguration copiedRawConfig = getCopiedRawConfiguration(copy);
+
+ assertSame(
+ copiedRawConfig.getConfiguration(),
+ copy,
+ "The reference to the parent configuration should point to the newly copied configuration, not the original configuration."
+ );
+ }
+
+ private RawConfiguration getCopiedRawConfiguration(Configuration config) {
+ for (RawConfiguration rawConfig : config.getRawConfigurations()) {
+ return rawConfig;
+ }
+ return null;
+ }
+
+ @Test
public void equalsShouldBeFalseWhenArgumentIsNull() {
Configuration config = new Configuration();
commit 52fd825c37a51495872215418bebeb3403bd220c
Author: Ian P. Springer <ips(a)jetengine.springer.net>
Date: Fri Oct 16 19:02:36 2009 -0400
various fixes to augeas and hosts plugins
diff --git a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
index e0b5f14..8deaa0a 100644
--- a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
+++ b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
@@ -23,11 +23,7 @@
package org.rhq.plugins.augeas;
import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import net.augeas.Augeas;
import net.augeas.AugeasException;
@@ -64,6 +60,8 @@ import org.rhq.plugins.platform.PlatformComponent;
*/
public class AugeasConfigurationComponent implements ResourceComponent<PlatformComponent>, ConfigurationFacet {
public static final String CONFIGURATION_FILE_PROP = "configurationFile";
+ public static final String RESOURCE_CONFIGURATION_ROOT_NODE_PROP = "resourceConfigurationRootNode";
+ public static final String AUGEAS_MODULE_NAME_PROP = "augeasModuleName";
private static final boolean IS_WINDOWS = (File.separatorChar == '\\');
private static final String AUGEAS_LOAD_PATH = "/usr/local/share/augeas/lenses";
@@ -74,8 +72,8 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
private ResourceContext resourceContext;
private File configFile;
private Augeas augeas;
- private AugeasNode augeasConfigFileNode;
private AugeasNode augeasConfigFileMetadataNode;
+ private AugeasNode resourceConfigRootNode;
public void start(ResourceContext<PlatformComponent> resourceContext) throws InvalidPluginConfigurationException,
Exception {
@@ -85,9 +83,21 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
this.configFile = new File(configFilePath);
this.augeas = createAugeas();
if (this.augeas != null) {
- this.augeasConfigFileNode = new AugeasNode("/files" + AugeasNode.SEPARATOR_CHAR + this.configFile.getPath());
+ AugeasNode augeasConfigFileNode = new AugeasNode("/files" + AugeasNode.SEPARATOR_CHAR + this.configFile.getPath());
+ // This is the metadata portion of the tree for this config file (e.g. /augeas/files/etc/hosts, where error
+ // messages are stored as node values.
this.augeasConfigFileMetadataNode = new AugeasNode("/augeas/files" + AugeasNode.SEPARATOR_CHAR
- + this.configFile.getPath());
+ + this.configFile.getPath());
+ String resourceConfigRootNodePath = pluginConfig.getSimpleValue(RESOURCE_CONFIGURATION_ROOT_NODE_PROP, null);
+ if (resourceConfigRootNodePath != null) {
+ if (resourceConfigRootNodePath.indexOf(AugeasNode.SEPARATOR_CHAR) == 0) {
+ this.resourceConfigRootNode = new AugeasNode(resourceConfigRootNodePath);
+ } else {
+ this.resourceConfigRootNode = new AugeasNode(augeasConfigFileNode, resourceConfigRootNodePath);
+ }
+ } else {
+ this.resourceConfigRootNode = augeasConfigFileNode;
+ }
}
}
@@ -123,7 +133,7 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
Collection<PropertyDefinition> propDefs = resourceConfigDef.getPropertyDefinitions().values();
for (PropertyDefinition propDef : propDefs) {
- loadProperty(propDef, resourceConfig, this.augeas, this.augeasConfigFileNode);
+ loadProperty(propDef, resourceConfig, this.augeas, this.resourceConfigRootNode);
}
return resourceConfig;
@@ -131,16 +141,27 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
public void updateResourceConfiguration(ConfigurationUpdateReport report) {
if (!validateResourceConfiguration(report)) {
+ log.debug("Validation of updated Resource configuration for "
+ + this.getResourceContext().getResourceType() + " Resource with key '"
+ + this.getResourceContext().getResourceKey() + "' failed with the following errors: "
+ + report.getErrorMessage());
report.setStatus(ConfigurationUpdateStatus.FAILURE);
return;
}
if (!this.configFile.canWrite()) {
- report.setErrorMessage("Configuration file '" + this.configFile + "' is not writeable.");
+ report.setErrorMessage("Configuration file '" + this.configFile + "' is not writable.");
return;
}
- // Load the config file from disk and build a tree representation of it.
+ File configFileParentDir = this.configFile.getParentFile();
+ if (!configFileParentDir.canWrite()) {
+ report.setErrorMessage("Configuration file parent directory '" + configFileParentDir
+ + "' is not writable.");
+ return;
+ }
+
+ // Load the config file from disk and build a tree representation of it in memory.
this.augeas.load();
ConfigurationDefinition resourceConfigDef = this.resourceContext.getResourceType()
@@ -149,7 +170,7 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
Collection<PropertyDefinition> propDefs = resourceConfigDef.getPropertyDefinitions().values();
for (PropertyDefinition propDef : propDefs) {
- setNode(propDef, resourceConfig, this.augeas, this.augeasConfigFileNode);
+ setNode(propDef, resourceConfig, this.augeas, this.resourceConfigRootNode);
}
// Write the updated tree out to the config file.
@@ -197,7 +218,7 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
private Augeas createAugeas() {
Configuration pluginConfig = this.resourceContext.getPluginConfiguration();
- String augeasModuleName = pluginConfig.getSimpleValue("augeasModuleName", null);
+ String augeasModuleName = pluginConfig.getSimpleValue(AUGEAS_MODULE_NAME_PROP, null);
if (augeasModuleName == null) {
return null;
}
@@ -289,10 +310,10 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
PropertyList propList = new PropertyList(propDefList.getName());
String mapKey = getListMemberMapKey(propDefList);
- List<String> listMemberPaths = augeas.match(node.getPath());
+ String listMemberPathsExpression = node.getPath() + AugeasNode.SEPARATOR_CHAR + listMemberPropDefMap.getName();
+ List<String> listMemberPaths = augeas.match(listMemberPathsExpression);
for (String listMemberPath : listMemberPaths) {
AugeasNode listMemberNode = new AugeasNode(listMemberPath);
-
PropertyMap listMemberPropMap = new PropertyMap(listMemberPropDefMap.getName());
propList.add(listMemberPropMap);
@@ -301,6 +322,7 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
PropertySimple keyProp = new PropertySimple(mapKey, listMemberNode.getName());
listMemberPropMap.put(keyProp);
}
+
// Populate the rest of the map child properties.
populatePropertyMap(listMemberPropDefMap, listMemberPropMap, augeas, listMemberNode);
}
@@ -383,11 +405,15 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
"Invalid Resource ConfigurationDefinition - only lists of maps are supported.");
}
PropertyDefinitionMap listMemberPropDefMap = (PropertyDefinitionMap) listMemberPropDef;
- String mapKey = getListMemberMapKey(propDefList);
- Set<String> keys = new HashSet<String>();
int listIndex = 0;
- Set<AugeasNode> updatedMemberNodes = new HashSet<AugeasNode>();
+ List<String> existingListMemberPaths = augeas.match(listNode.getPath() + AugeasNode.SEPARATOR_CHAR
+ + listMemberPropDefMap.getName());
+ List<AugeasNode> existingListMemberNodes = new ArrayList<AugeasNode>();
+ for (String existingListMemberPath : existingListMemberPaths) {
+ existingListMemberNodes.add(new AugeasNode(existingListMemberPath));
+ }
+ Set<AugeasNode> updatedListMemberNodes = new HashSet<AugeasNode>();
for (Property listMemberProp : propList.getList()) {
PropertyMap listMemberPropMap = (PropertyMap) listMemberProp;
AugeasNode memberNodeToUpdate = getExistingChildNodeForListMemberPropertyMap(listNode, propDefList,
@@ -395,11 +421,11 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
if (memberNodeToUpdate != null) {
// Keep track of the existing nodes that we'll be updating, so that we can remove all other existing
// nodes.
- updatedMemberNodes.add(memberNodeToUpdate);
+ updatedListMemberNodes.add(memberNodeToUpdate);
} else {
// The maps in the list are non-keyed, or there is no map in the list with the same key as the map
// being added, so create a new node for the map to add to the list.
- memberNodeToUpdate = new AugeasNode(listNode, "0" + listIndex);
+ memberNodeToUpdate = new AugeasNode(listNode, "0" + (listIndex++));
}
// Update the node's children.
@@ -407,11 +433,9 @@ public class AugeasConfigurationComponent implements ResourceComponent<PlatformC
}
// Now remove any existing nodes that we did not update in the previous loop.
- List<String> existingListMemberPaths = augeas.match(listNode.getPath() + "/*");
- for (String existingListMemberPath : existingListMemberPaths) {
- AugeasNode existingListMemberNode = new AugeasNode(existingListMemberPath);
- if (!updatedMemberNodes.contains(existingListMemberNode)) {
- augeas.remove(existingListMemberPath);
+ for (AugeasNode existingListMemberNode : existingListMemberNodes) {
+ if (!updatedListMemberNodes.contains(existingListMemberNode)) {
+ augeas.remove(existingListMemberNode.getPath());
}
}
}
diff --git a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
index 2596a44..7eb4b5b 100644
--- a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
+++ b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
@@ -44,7 +44,7 @@ public class AugeasNode {
}
// Remove redundant "." and ".." components and redundant slashes.
- this.path = path;
+ this.path = normalize(path);
}
public AugeasNode(AugeasNode parent, String name) {
diff --git a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
index 875a4c1..8e944db 100644
--- a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
+++ b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
@@ -54,7 +54,6 @@ public class HostsComponent extends AugeasConfigurationComponent {
"(([a-zA-Z\\d]|[a-zA-Z\\d][a-zA-Z\\d\\-]*[a-zA-Z\\d])\\.)*([A-Za-z]|[A-Za-z][A-Za-z\\d\\-]*[A-Za-z\\d])";
private static final Pattern DOMAIN_NAME_PATTERN = Pattern.compile(DOMAIN_NAME_REGEX);
-
public void start(ResourceContext resourceContext) throws InvalidPluginConfigurationException, Exception {
super.start(resourceContext);
}
@@ -188,7 +187,7 @@ public class HostsComponent extends AugeasConfigurationComponent {
String existingIpaddr = augeas.get(ipaddrNode.getPath());
int existingIpAddressVersion = (existingIpaddr.indexOf(':') == -1) ? 4 : 6;
if (existingIpAddressVersion == ipAddressVersion) {
- return ipaddrNode;
+ return childNode;
}
}
return null;
diff --git a/modules/plugins/hosts/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/hosts/src/main/resources/META-INF/rhq-plugin.xml
index 07e30fb..326eec6 100644
--- a/modules/plugins/hosts/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/hosts/src/main/resources/META-INF/rhq-plugin.xml
@@ -41,8 +41,8 @@
</plugin-configuration>
<resource-configuration>
- <c:list-property name="/*" displayName="Entries">
- <c:map-property name="entry">
+ <c:list-property name="." displayName="Entries">
+ <c:map-property name="*[canonical]">
<c:simple-property name="ipaddr" displayName="IP Address" type="string" required="true" activationPolicy="immediate"
description="The IP address of the host entry. The address may be an IPv4 address (e.g., 192.168.1.10) or an IPv6 address (e.g., fec0:0:0:bebe::2)."/>
diff --git a/modules/plugins/pom.xml b/modules/plugins/pom.xml
index 871bc14..da45f9b 100644
--- a/modules/plugins/pom.xml
+++ b/modules/plugins/pom.xml
@@ -118,7 +118,7 @@
<module>snmptrapd</module>
<module>sshd</module>
<module>twitter</module>
- <module>virt</module>
+ <!--<module>virt</module>-->
<!-- make this the last - it will validate all the plugins -->
<module>validate-all-plugins</module>
commit 34567286c110949a1534187f8282733b943c13de
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Oct 19 16:05:43 2009 -0400
Refactoring Configuration.equals() and Configuration.hashCode() to include the rawConfigurations field.
Property and its subclasses implement deepCopy() which also needs to be implemented in RawConfiguration.
Adding the new interface, DeepCopyable which defines that method. Now Configuration can polymorphically
create a deep copy (with out hibernate proxies) of both its structured and raw configurations.
Also changing the fetch strategy on Configuration.rawConfigurations to eager. While it usually makes
sense to fetch collections lazily, I think we want to fetch rawConfigurations eagerly since it is used
in equals() and hashCode().
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
index 56f1c48..237b27b 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
@@ -156,7 +156,7 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
@XmlTransient
private Map<String, Property> properties = new LinkedHashMap<String, Property>();
- @OneToMany(mappedBy = "configuration")
+ @OneToMany(mappedBy = "configuration", fetch = FetchType.EAGER)
@Cascade({CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE_ORPHAN})
private Set<RawConfiguration> rawConfigurations = new HashSet<RawConfiguration>();
@@ -498,6 +498,10 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
copy.put(property.deepCopy());
}
+ for (RawConfiguration rawConfig : rawConfigurations) {
+
+ }
+
return copy;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/DeepCopyable.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/DeepCopyable.java
new file mode 100644
index 0000000..e3e56d5
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/DeepCopyable.java
@@ -0,0 +1,30 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+public interface DeepCopyable<T> {
+
+ T deepCopy();
+
+}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Property.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Property.java
index 0353827..f4494c8 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Property.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Property.java
@@ -93,7 +93,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlSeeAlso( { PropertySimple.class, PropertyList.class, PropertyMap.class })
-public class Property implements Externalizable {
+public class Property implements Externalizable, DeepCopyable<Property> {
private static final long serialVersionUID = 1L;
public static final String QUERY_DELETE_BY_PROPERTY_IDS = "Property.deleteByPropertyIds";
@@ -284,7 +284,7 @@ public class Property implements Externalizable {
return ((this.name != null) ? this.name.hashCode() : 0);
}
- public <P extends Property> P deepCopy() {
+ public Property deepCopy() {
return null;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 1842ce3..e8cfddc 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -56,7 +56,7 @@ import java.io.Serializable;
@Entity
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
@Table(name = "RHQ_RAW_CONFIG")
-public class RawConfiguration implements Serializable {
+public class RawConfiguration implements Serializable, DeepCopyable<RawConfiguration> {
private static final long serialVersionUID = 1L;
@@ -242,4 +242,14 @@ public class RawConfiguration implements Serializable {
.append("]")
.toString();
}
+
+ public RawConfiguration deepCopy() {
+ RawConfiguration copy = new RawConfiguration();
+ copy.path = this.path;
+ if (this.contents != null) {
+ copy.contents = this.getContents();
+ }
+
+ return copy;
+ }
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 169c3c3..fb926af 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -210,4 +210,35 @@ public class RawConfigurationTest {
assertEquals(r1.hashCode(), r3.hashCode(), "hashCode() should be the same for r1 and r3 via transitivity.");
}
+
+ @Test
+ public void deepCopyShouldCopyPath() {
+ RawConfiguration original = new RawConfiguration();
+ original.setPath("/tmp/foo");
+
+ RawConfiguration copy = original.deepCopy();
+
+ assertEquals(copy.getPath(), original.getPath(), "Failed to copy the path property.");
+ }
+
+ @Test
+ public void deepCopyShouldCopyContents() {
+ RawConfiguration original = new RawConfiguration();
+ original.setContents(new byte[] {1, 2, 3, 4, 5});
+
+ RawConfiguration copy = original.deepCopy();
+
+ assertFalse(original.getContents() == copy.getContents(), "The values in the contents array should be copied, not the reference to the original object.");
+ assertEquals(copy.getContents(), original.getContents(), "Failed to copy contents property.");
+ }
+
+ @Test
+ public void deepCopyShouldNotCopyIdProperty() {
+ RawConfiguration original = new RawConfiguration();
+ original.setId(1);
+
+ RawConfiguration copy = original.deepCopy();
+
+ assertFalse(original.getId() == copy.getId(), "The id property should not be copied.");
+ }
}
commit 80abe96d0a91e633afe4dd949b538fac743321f6
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Oct 19 09:27:22 2009 -0400
Refactoring equals(), hashCode(), toString() to account for RawConfigurations
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
index 46ebde4..56f1c48 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
@@ -154,7 +154,7 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
@MapKey(name = "name")
@OneToMany(mappedBy = "configuration", fetch = FetchType.EAGER)
@XmlTransient
- private Map<String, Property> properties;
+ private Map<String, Property> properties = new LinkedHashMap<String, Property>();
@OneToMany(mappedBy = "configuration")
@Cascade({CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE_ORPHAN})
@@ -310,10 +310,6 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
*/
@NotNull
public Map<String, Property> getMap() {
- if (this.properties == null) {
- this.properties = new LinkedHashMap<String, Property>();
- }
-
return this.properties;
}
@@ -553,25 +549,18 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
return false;
}
- // NOTE: Use instanceof, rather than getClass(), because a) obj may be a JPA/Hibernate proxy or b) obj may be a
- // subclass with same equals semantics.
if (!(obj instanceof Configuration)) {
return false;
}
Configuration that = (Configuration) obj;
- if ((this.properties == null) || this.properties.isEmpty()) {
- // NOTE: Use that.getMap() (*not* that.getProperties()!), rather than that.properties, in case 'that' is a
- // JPA/Hibernate proxy, to force loading of the field.
- return (that.getMap() == null) || that.getMap().isEmpty();
- }
- return this.properties.equals(that.getMap());
+ return (this.properties.equals(that.properties)) && (this.rawConfigurations.equals(that.rawConfigurations));
}
@Override
public int hashCode() {
- return (((this.properties != null) && !this.properties.isEmpty()) ? this.properties.hashCode() : 0);
+ return properties.hashCode() * rawConfigurations.hashCode() * 19;
}
@Override
@@ -588,6 +577,7 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
builder.append(", notes=").append(this.notes);
if (verbose) {
+ builder.append("properties[");
for (Property property : this.getMap().values()) {
builder.append(", ");
builder.append(property.getName());
@@ -597,6 +587,16 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
else
builder.append(property);
}
+ builder.append("], rawConfigurations[");
+
+ for (RawConfiguration rawConfig : rawConfigurations) {
+ builder.append("[")
+ .append(rawConfig.getPath())
+ .append(", ")
+ .append(rawConfig.getSha256())
+ .append("]");
+ }
+ builder.append("]");
}
return builder.append("]").toString();
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index 178bd1c..ddbdc83 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -27,6 +27,8 @@ import static org.testng.Assert.*;
import org.testng.annotations.Test;
+import java.util.Random;
+
/**
* This class has tests for Configuration just like org.rhq.core.domain.configuration.test.ConfigurationTest. These
* tests however are just plain, vanilla unit tests whereas the tests in org.rhq.core.domain.configuration.test.ConfigurationTest
@@ -96,6 +98,182 @@ public class ConfigurationTest {
);
}
+ @Test
+ public void equalsShouldBeFalseWhenArgumentIsNull() {
+ Configuration config = new Configuration();
+
+ assertFalse(config.equals(null), "equals() should be false for null argument.");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenArgumentIsNotAConfiguration() {
+ Configuration config = new Configuration();
+
+ assertFalse(config.equals(new Object()), "equals should return false when argument is not a " + Configuration.class.getSimpleName());
+ }
+
+ @Test
+ public void equalsShouldBeReflexive() {
+ Configuration config = new Configuration();
+
+ assertTrue(config.equals(config), "equals() should be reflexive.");
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeSymmetricWhenBothConfigurationsAreEmpty() {
+ Configuration c1 = new Configuration();
+ Configuration c2 = new Configuration();
+
+ assertTrue(c1.equals(c2) && c2.equals(c1), "equals() should be true and symmetric when both configs are empty.");
+ assertEquals(c1.hashCode(), c2.hashCode(), "hashCodes should be the same when equals() returns true.");
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeSymmetricWhenConfigsHaveEqualStructuredAndNoRaw() {
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+
+ Configuration c2 = new Configuration();
+ c2.put(new PropertySimple("foo", "bar"));
+
+ assertTrue(
+ c1.equals(c2) && c2.equals(c1),
+ "equals() should be true and symmetric when structured configs are equal and there are no raw configs."
+ );
+ assertEquals(c1.hashCode(), c2.hashCode());
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeSymmetricWhenConfigsHaveEqualRawAndNoStructured() {
+ RawConfiguration rawConfig = createRawConfiguration("/tmp/foo");
+
+ Configuration c1 = new Configuration();
+ c1.addRawConfiguration(rawConfig);
+
+ Configuration c2 = new Configuration();
+ c2.addRawConfiguration(createCopyOfRawConfiguration(rawConfig));
+
+ assertTrue(
+ c1.equals(c2) && c2.equals(c1),
+ "equals() should be true and symmetric when raw configs are equal and there are no structured configs."
+ );
+ assertEquals(c1.hashCode(), c2.hashCode());
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeTransitiveWhenConfigurationsAreEmpty() {
+ Configuration c1 = new Configuration();
+ Configuration c2 = new Configuration();
+ Configuration c3 = new Configuration();
+
+ assertTrue(c1.equals(c2) && c2.equals(c3), "equals() should be true when configs are empty.");
+ assertTrue(c1.equals(c3), "equals should be transitive.");
+
+ assertEquals(c1.hashCode(), c3.hashCode(), "hashCodes should be the same when equals returns true.");
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeTransitiveWhenConfigsHaveEqualStructuredAndNoRaw() {
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+
+ Configuration c2 = new Configuration();
+ c2.put(new PropertySimple("foo", "bar"));
+
+ Configuration c3 = new Configuration();
+ c3.put(new PropertySimple("foo", "bar"));
+
+ assertTrue(c1.equals(c2) && c2.equals(c3), "equals() should be true when structured configs are equal and there are no raw configs.");
+ assertTrue(c1.equals(c3), "equals should be transitive.");
+
+ assertEquals(c1.hashCode(), c3.hashCode(), "hashCodes should be the same when equals() returns true.");
+ }
+
+ @Test
+ public void equalsAndHashCodeShouldBeTransitiveWhenConfigsHaveEqualRawAndNoStructured() {
+ RawConfiguration rawConfig = createRawConfiguration("/tmp/foo");
+
+ Configuration c1 = new Configuration();
+ c1.addRawConfiguration(rawConfig);
+
+ Configuration c2 = new Configuration();
+ c2.addRawConfiguration(createCopyOfRawConfiguration(rawConfig));
+
+ Configuration c3 = new Configuration();
+ c3.addRawConfiguration(createCopyOfRawConfiguration(rawConfig));
+
+ assertTrue(c1.equals(c2) && c2.equals(c3), "equals() should be true when raw configs are equal and there are no structured configs.");
+ assertTrue(c1.equals(c3), "equals should be transitive.");
+
+ assertEquals(c1.hashCode(), c3.hashCode(), "hashCodes should be the same when equals() returns true.");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenOneConfigHasStructuredAndTheOtherDoesNot() {
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+
+ Configuration c2 = new Configuration();
+
+ assertFalse(c1.equals(c2), "equals() should be false when one config has structured and the other does not");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenBothHaveStructuredButNotRaw() {
+ RawConfiguration rawConfig = createRawConfiguration("/tmp/foo");
+
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+ c1.addRawConfiguration(rawConfig);
+
+ Configuration c2 = new Configuration();
+ c2.put(new PropertySimple("foo", "bar"));
+
+ assertFalse(c1.equals(c2), "equals() should be false when one config has raw and the other does not.");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenBothHaveRawButNotStructured() {
+ RawConfiguration r1 = createRawConfiguration("/tmp/foo");
+ Configuration c1 = new Configuration();
+ c1.addRawConfiguration(r1);
+ c1.put(new PropertySimple("foo", "bar"));
+
+ RawConfiguration r2 = createCopyOfRawConfiguration(r1);
+ Configuration c2 = new Configuration();
+ c2.addRawConfiguration(r2);
+
+ assertFalse(c1.equals(c2), "equals() should be false when one config has structured and the other does not.");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenStructuredAreUnequalAndRawsAreEqual() {
+ RawConfiguration rawConfig = createRawConfiguration("/tmp/foo");
+
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+ c1.addRawConfiguration(rawConfig);
+
+ Configuration c2 = new Configuration();
+ c2.put(new PropertySimple("bar", "foo"));
+ c2.addRawConfiguration(createCopyOfRawConfiguration(rawConfig));
+
+ assertFalse(c1.equals(c2), "equals() should be false when structured configs are not equal.");
+ }
+
+ @Test
+ public void equalsShouldBeFalseWhenStructuredAreEqualAndRawAreUnequal() {
+ Configuration c1 = new Configuration();
+ c1.put(new PropertySimple("foo", "bar"));
+ c1.addRawConfiguration(createRawConfiguration("/tmp/foo"));
+
+ Configuration c2 = new Configuration();
+ c2.put(new PropertySimple("foo", "bar"));
+ c2.addRawConfiguration(createRawConfiguration("/tmp/bar"));
+
+ assertFalse(c1.equals(c2), "equals() should be false when raw configs are not equal.");
+ }
+
private Configuration createConfiguration() {
Configuration config = new Configuration();
config.setId(1);
@@ -108,4 +286,26 @@ public class ConfigurationTest {
return config;
}
+ private RawConfiguration createRawConfiguration(String path) {
+ byte[] contents = new byte[10];
+
+ Random random = new Random();
+ random.nextBytes(contents);
+
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setPath(path);
+ rawConfig.setContents(contents);
+
+ return rawConfig;
+ }
+
+ private RawConfiguration createCopyOfRawConfiguration(RawConfiguration rawConfig) {
+ RawConfiguration copy = new RawConfiguration();
+ copy.setPath(rawConfig.getPath());
+ copy.setContents(rawConfig.getContents());
+ copy.setConfiguration(rawConfig.getConfiguration());
+
+ return copy;
+ }
+
}
commit ff26d4f313de6e691a3e6e586c47b3a45b9ae34e
Author: John Sanda <jsanda(a)redhat.com>
Date: Sat Oct 17 16:11:21 2009 -0400
Adding @Transient to messageDigestGenerator field since it is not a persistent field.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index b86052d..1842ce3 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -36,6 +36,7 @@ import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
+import javax.persistence.Transient;
import java.io.Serializable;
/**
@@ -83,6 +84,7 @@ public class RawConfiguration implements Serializable {
@JoinColumn(name = "CONFIG_ID", nullable = false)
private Configuration configuration;
+ @Transient
private MessageDigestGenerator sha256Generator = new MessageDigestGenerator("SHA-256");
public int getId() {
commit 0a46d1321154fb67d3f36622718845e87a5eb34d
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Oct 16 16:07:20 2009 -0400
Fixing compilation error in test that happened as a result of removing RawConfiguration.setSha256().
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index e2a8df4..5dcdb90 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -994,8 +994,7 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
RawConfiguration createRawConfiguration(String sha256) {
RawConfiguration rawConfig = new RawConfiguration();
rawConfig.setContents(new byte[] {});
- rawConfig.setSha256(sha256);
-
+
return rawConfig;
}
commit e14a8aa3b333ce7886187b6298af468051805577
Merge: 33d3768... e0015d2...
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Oct 16 15:59:59 2009 -0400
Merge branch 'master' into raw-config
commit 33d37683e27ab1e1152dfa3c15a821e85ab9d3bd
Merge: 99281c4... cae2317...
Author: Adam Young <ayoung(a)redhat.com>
Date: Fri Oct 16 15:50:02 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq into raw-config
commit cae23176bcaba9f57cf0b9238dd0abfe59dd6b60
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Oct 16 15:20:18 2009 -0400
Refactoring equals/hashCode. Adding corresponding unit tests and javadocs.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index f5876c3..b86052d 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -137,6 +137,7 @@ public class RawConfiguration implements Serializable {
sha256 = sha256Generator.getDigestString();
}
+ /** @return A SHA-256 hash of the bytes for this raw configuration, which can be accessed via {@link #getContents()} */
public String getSha256() {
return sha256;
}
@@ -157,6 +158,7 @@ public class RawConfiguration implements Serializable {
this.mtime = mtime;
}
+ /** @return The owning {@link org.rhq.core.domain.configuration.Configuration} object */
public Configuration getConfiguration() {
return configuration;
}
@@ -177,11 +179,17 @@ public class RawConfiguration implements Serializable {
}
/**
- * Two RawConfiguration objects are considered equal if they have the same SHA-256 sum.
+ * Two RawConfiguration objects are considered equal when the following conditions hold:
+ * <ul>
+ * <li>Both have the same sha256 and path property is null for both or</li>
+ * <li>Both have the same sha256, path property is non-null and equal for both</li>
+ * </ul>
+ *
+ * <strong>Note:</strong> This definition of equality holdsonly when comparing RawConfigurations belonging to
+ * the same resource.
*
* @param obj The object to compare for equality
- * @return true if obj is a RawConfiguration and has the same SHA-256 sum, false otherwise. Note that false is
- * returned if {@link #getSha256()} returns null.
+ * @return true if obj is a RawConfiguration and has the same values for the sha256 and path properties.
*/
@Override
public boolean equals(Object obj) {
@@ -193,21 +201,32 @@ public class RawConfiguration implements Serializable {
return true;
}
- if (obj instanceof RawConfiguration && sha256 != null) {
+ if (obj instanceof RawConfiguration) {
RawConfiguration that = (RawConfiguration) obj;
- return this.sha256.equals(that.sha256);
+ if (this.sha256 != null && this.sha256.equals(that.sha256)) {
+ if (this.path == null && that.path == null) {
+ return true;
+ }
+ if ((this.path !=null && that.path != null) && this.path.equals(that.path)) {
+ return true;
+ }
+ }
}
-
return false;
}
- /**@return A hash which is generated off of {@link #getSha256()} */
+ /**@return A hash which is calculated from the sha256 and path properties. */
@Override
public int hashCode() {
if (sha256 == null) {
return 0;
}
- return sha256.hashCode();
+
+ if (path == null) {
+ return sha256.hashCode() * 37;
+ }
+
+ return sha256.hashCode() * path.hashCode() * 37;
}
@Override
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 82b70f3..169c3c3 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -24,15 +24,10 @@
package org.rhq.core.domain.configuration;
import static org.testng.Assert.*;
-import org.testng.annotations.Test;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.FileUtils;
-import java.io.File;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.testng.annotations.Test;
public class RawConfigurationTest {
@@ -94,21 +89,125 @@ public class RawConfigurationTest {
}
String calculateSHA256(byte[] data) throws DecoderException {
- //StringUtils stringUtils = new StringUtils();
-// byte[] shaBytes = new Hex().encode(data);
-// return DigestUtils.shaHex(shaBytes);
- //byte[] shaBytes = DigestUtils.sha(data);
- //return DigestUtils.sha
return DigestUtils.sha256Hex(data);
-// Base64 base64 = new Base64();
-// return base64.encode(shaBytes).toString();
-// char[] chars = Hex.encodeHex(shaBytes);
-//
-// return new String(chars);
}
- byte[] getFileBytes() throws Exception {
- return FileUtils.readFileToByteArray(new File("/home/jsanda/test.txt"));
+ @Test
+ public void verifyEqualsWhenObjectIsNull() {
+ RawConfiguration rawConfig = new RawConfiguration();
+
+ assertFalse(rawConfig.equals(null), "equals() should return false when incoming object is null.");
+ }
+
+ @Test
+ public void verifyEqualsWhenObjectIsNotARawConfiguration() {
+ RawConfiguration rawConfig = new RawConfiguration();
+
+ assertFalse(rawConfig.equals(new Object()), "equals() should return false when incoming object is not a " +
+ RawConfiguration.class.getSimpleName());
+ }
+
+ @Test
+ public void verifyEqualsWhenNeitherRawConfigurationHasContentsOrPathSet() {
+ RawConfiguration r1 = new RawConfiguration();
+ RawConfiguration r2 = new RawConfiguration();
+
+ assertFalse(r1.equals(r2), "equals() should return false when contents and path is null for both raw configs");
+ }
+
+ @Test
+ public void verifyEqualsWhenRawConfigurationArgHasNullContents() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+
+ RawConfiguration r2 = new RawConfiguration();
+
+ assertFalse(r1.equals(r2), "equals() should return false when contents is null for one of the objects.");
+ }
+
+ @Test
+ public void verifyEqualsWhenRawConfigurationArgHasNullPath() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+ r1.setPath("/tmp/foo");
+
+ RawConfiguration r2 = new RawConfiguration();
+ r2.setContents(getBytes());
+
+ assertFalse(r1.equals(r2), "equals() should return false when one of the raw configs does not have its paths set");
+ }
+
+ @Test
+ public void verifyEqualsIsReflexive() {
+ RawConfiguration rawConfig = new RawConfiguration();
+
+ assertTrue(rawConfig.equals(rawConfig), "equals() should be reflexive.");
}
+ @Test
+ public void verifyEqualsAndHashCodeAreSymmetricWhenPathIsNull() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+
+ RawConfiguration r2 = new RawConfiguration();
+ r2.setContents(getBytes());
+
+ assertTrue(r1.equals(r2), "equals() should be true when contents are the same and path is null for both.");
+ assertTrue(r2.equals(r1), "equals() should be symmetric.");
+
+ assertEquals(r1.hashCode(), r2.hashCode(), "hashCode() should be the same for two objects that symmetric.");
+ }
+
+ @Test
+ public void verifyEqualsAndHashCodeAreSymmetricWhenPathIsNotNull() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+ r1.setPath("/tmp/foo");
+
+ RawConfiguration r2 = new RawConfiguration();
+ r2.setContents(getBytes());
+ r2.setPath("/tmp/foo");
+
+ assertTrue(r1.equals(r2), "equals() should be true when contents and paths are the same.");
+ assertTrue(r2.equals(r1), "equals() should be symmetric.");
+
+ assertEquals(r1.hashCode(), r2.hashCode(), "hashCode() should be the same for two objects that symmetric.");
+ }
+
+ @Test
+ public void verifyEqualsAndHashCodeTransitiveWhenPathIsNull() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+
+ RawConfiguration r2 = new RawConfiguration();
+ r2.setContents(getBytes());
+
+ RawConfiguration r3 = new RawConfiguration();
+ r3.setContents(getBytes());
+
+ assertTrue(r1.equals(r2) && r2.equals(r3), "equals() should be true when contents are the same and paths are null.");
+ assertTrue(r1.equals(r3), "equals() should be transitive when contents are the same and paths are null.");
+
+ assertEquals(r1.hashCode(), r3.hashCode(), "hashCode() should be the same for r1 and r3 via transitivity.");
+ }
+
+ @Test
+ public void verifyEqualsAndHashCodeTransitiveWhenPathIsNotNull() {
+ RawConfiguration r1 = new RawConfiguration();
+ r1.setContents(getBytes());
+ r1.setPath("/tmp/foo");
+
+ RawConfiguration r2 = new RawConfiguration();
+ r2.setContents(getBytes());
+ r2.setPath("/tmp/foo");
+
+ RawConfiguration r3 = new RawConfiguration();
+ r3.setContents(getBytes());
+ r3.setPath("/tmp/foo");
+
+ assertTrue(r1.equals(r2) && r2.equals(r3), "equals() should be true when contents and paths are the same.");
+ assertTrue(r1.equals(r3), "equals() should be transitive when contents and paths are the same.");
+
+ assertEquals(r1.hashCode(), r3.hashCode(), "hashCode() should be the same for r1 and r3 via transitivity.");
+ }
}
commit 99281c491ef20f45e836c220fde78379de419a16
Merge: cd944ca... 1df644e...
Author: Adam Young <ayoung(a)redhat.com>
Date: Fri Oct 16 15:18:54 2009 -0400
Merged in changes from jsand with working db access
diff --cc modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
index f4a61d1,8bf36af..5dba046
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
@@@ -9,61 -9,54 +9,61 @@@
<managed-bean-name>ExistingResourceConfigurationViewUIBean</managed-bean-name>
<managed-bean-class>org.rhq.enterprise.gui.configuration.resource.ExistingResourceConfigurationUIBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
+ </managed-bean>
<!-- /rhq/resource/configuration/history.xhtml, /rhq/resource/configuration/edit.xhtml, and
/rhq/resource/configuration/edit-map.xhtml -->
- <managed-bean>
- <managed-bean-name>ExistingResourceConfigurationUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.resource.ExistingResourceConfigurationUIBean</managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- </managed-bean>
-
- <!-- /rhq/resource/configuration/add-new-simple.xhtml -->
- <managed-bean>
- <managed-bean-name>AddNewOpenMapMemberPropertyToResourceConfigurationUIBean</managed-bean-name>
- <managed-bean-class>
- org.rhq.enterprise.gui.configuration.resource.ExistingResourceConfigurationAddNewOpenMapMemberPropertyUIBean
- </managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
-
- <!-- /rhq/resource/configuration/history.xhtml -->
- <managed-bean>
- <managed-bean-name>ListConfigurationUpdateUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.history.ListConfigurationUpdateUIBean</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
- <managed-bean>
- <managed-bean-name>GetLatestConfigurationUpdateUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.history.GetLatestConfigurationUpdateUIBean</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
- <managed-bean>
- <managed-bean-name>ViewResourceConfigurationUpdateUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.history.ViewResourceConfigurationUpdateUIBean</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
-
- <!-- helper bean that's used by the config component -->
- <managed-bean>
- <managed-bean-name>ConfigHelperUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.core.gui.configuration.ConfigHelperUIBean</managed-bean-class>
- <managed-bean-scope>application</managed-bean-scope>
- </managed-bean>
-
- <!-- helper bean that's used by the config component -->
- <managed-bean>
- <managed-bean-name>ConfigTestUIBean</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.test.ConfigTestUIBean</managed-bean-class>
- <managed-bean-scope>request</managed-bean-scope>
- </managed-bean>
-
- <managed-bean>
- <managed-bean-name>RawConfigCollection</managed-bean-name>
- <managed-bean-class>org.rhq.enterprise.gui.configuration.RawConfigCollection</managed-bean-class>
- <managed-bean-scope>session</managed-bean-scope>
- </managed-bean>
-
-
- </faces-config>
+ <managed-bean>
+ <managed-bean-name>ExistingResourceConfigurationUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.resource.ExistingResourceConfigurationUIBean</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+
+ <!-- /rhq/resource/configuration/add-new-simple.xhtml -->
+ <managed-bean>
+ <managed-bean-name>AddNewOpenMapMemberPropertyToResourceConfigurationUIBean</managed-bean-name>
+ <managed-bean-class>
+ org.rhq.enterprise.gui.configuration.resource.ExistingResourceConfigurationAddNewOpenMapMemberPropertyUIBean
+ </managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
+
+ <!-- /rhq/resource/configuration/history.xhtml -->
+ <managed-bean>
+ <managed-bean-name>ListConfigurationUpdateUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.history.ListConfigurationUpdateUIBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
+ <managed-bean>
+ <managed-bean-name>GetLatestConfigurationUpdateUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.history.GetLatestConfigurationUpdateUIBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
+ <managed-bean>
+ <managed-bean-name>ViewResourceConfigurationUpdateUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.history.ViewResourceConfigurationUpdateUIBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
+
+ <!-- helper bean that's used by the config component -->
+ <managed-bean>
+ <managed-bean-name>ConfigHelperUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.core.gui.configuration.ConfigHelperUIBean</managed-bean-class>
+ <managed-bean-scope>application</managed-bean-scope>
+ </managed-bean>
+
+ <!-- helper bean that's used by the config component -->
+ <managed-bean>
+ <managed-bean-name>ConfigTestUIBean</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.test.ConfigTestUIBean</managed-bean-class>
+ <managed-bean-scope>request</managed-bean-scope>
+ </managed-bean>
+
++ <managed-bean>
++ <managed-bean-name>RawConfigCollection</managed-bean-name>
++ <managed-bean-class>org.rhq.enterprise.gui.configuration.RawConfigCollection</managed-bean-class>
++ <managed-bean-scope>session</managed-bean-scope>
++ </managed-bean>
++
++
+ </faces-config>
commit cd944ca99594ba65eed9b1b3bb2b45f16e42c117
Author: Adam Young <ayoung(a)redhat.com>
Date: Fri Oct 16 15:07:14 2009 -0400
Making the UI start to work. Added a backing component for the RawConfigs and rich faces support
diff --git a/modules/enterprise/agent/src/etc/rhq-agent-env.sh b/modules/enterprise/agent/src/etc/rhq-agent-env.sh
index 448d8f6..22e70b5 100755
--- a/modules/enterprise/agent/src/etc/rhq-agent-env.sh
+++ b/modules/enterprise/agent/src/etc/rhq-agent-env.sh
@@ -31,6 +31,7 @@
# not set, the agent's embedded JRE will be used.
#
#RHQ_AGENT_JAVA_HOME="/opt/java"
+RHQ_AGENT_JAVA_HOME="/usr/lib/jvm/java"
# RHQ_AGENT_JAVA_EXE_FILE_PATH - Defines the full path to the Java
# executable to use. If this is set,
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java
new file mode 100644
index 0000000..a45c6d8
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/configuration/RawConfigCollection.java
@@ -0,0 +1,64 @@
+package org.rhq.enterprise.gui.configuration;
+
+import java.util.HashMap;
+
+import org.ajax4jsf.component.UIRepeat;
+
+import org.rhq.core.domain.configuration.RawConfiguration;
+
+public class RawConfigCollection {
+ private UIRepeat repeater;
+
+ public UIRepeat getRepeater() {
+ return repeater;
+ }
+
+ public void setRepeater(UIRepeat repeater) {
+ this.repeater = repeater;
+ }
+
+ HashMap<String, RawConfiguration> raws;
+
+ RawConfiguration current;
+
+ public RawConfigCollection() {
+ current = new RawConfiguration();
+ current.setPath("/etc/httpd/httpd.conf");
+ current.setContents("This is the contents of the file".getBytes());
+ raws = new HashMap<String, RawConfiguration>();
+ raws.put(current.getPath(), current);
+
+ String[] fileNames = { "/etc/httpd/conf.d/cobbler.conf", "/etc/httpd/conf.d/proxy_ajp.conf",
+ "/etc/httpd/conf.d/cobbler_svc.conf", "/etc/httpd/conf.d/python.conf", "/etc/httpd/conf.d/mod_dnssd.conf",
+ "/etc/httpd/conf.d/welcome.conf", "/etc/httpd/conf.d/php.conf" };
+
+ for (String string : fileNames) {
+ RawConfiguration c = new RawConfiguration();
+ c.setPath(string);
+ c.setContents(("contents of file" + string).getBytes());
+ raws.put(c.getPath(), c);
+ }
+
+ }
+
+ public RawConfiguration getCurrent() {
+ return current;
+ }
+
+ public String getCurrentContents() {
+ return new String(current.getContents());
+ }
+
+ public void setCurrentPath(String path) {
+ current = raws.get(path);
+ }
+
+ public String getCurrentPath() {
+ return current.getPath();
+ }
+
+ public Object[] getPaths() {
+ return raws.keySet().toArray();
+ }
+
+}
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
index 3728d7e..f4a61d1 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/jsf-managed-beans/configuration-beans.xml
@@ -58,5 +58,12 @@
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
+ <managed-bean>
+ <managed-bean-name>RawConfigCollection</managed-bean-name>
+ <managed-bean-class>org.rhq.enterprise.gui.configuration.RawConfigCollection</managed-bean-class>
+ <managed-bean-scope>session</managed-bean-scope>
+ </managed-bean>
+
+
</faces-config>
\ No newline at end of file
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/tags/on.component.taglib.xml b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/tags/on.component.taglib.xml
index f51c776..0870441 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/tags/on.component.taglib.xml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/WEB-INF/tags/on.component.taglib.xml
@@ -65,6 +65,14 @@
</tag>
<tag>
+ <tag-name>rawconfig</tag-name>
+ <component>
+ <component-type>org.jboss.on.RawConfig</component-type>
+ <renderer-type>org.jboss.on.RawConfig</renderer-type>
+ </component>
+ </tag>
+
+ <tag>
<tag-name>configSet</tag-name>
<component>
<component-type>org.rhq.ConfigurationSet</component-type>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
index 31abec9..96ca6c2 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -8,7 +8,9 @@
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:c="http://java.sun.com/jstl/core"
+ xmlns:a4j="http://richfaces.org/a4j"
+ xmlns:rich="http://richfaces.org/rich"
xmlns:onc="http://jboss.org/on/component">
THIS TEXT WILL BE REMOVED.
@@ -28,27 +30,54 @@ THIS TEXT WILL BE REMOVED.
<f:param name="id" value="#{ResourceUIBean.id}"/>
<h:outputText value=" standard mode"/>
</h:outputLink>
- <h:form id="editResourceConfigurationForm" onsubmit="prepareInputsForSubmission(this)" rendered="#{!ViewResourceConfigurationUIBean.updateInProgress}">
+ <a4j:form id="editResourceConfigurationForm" >
- <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
+<!--
+ <onc:rawconfig configurationDefinition="#{ExistingResourceConfigurationUIBean.configurationDefinition}"
+ configuration="#{ExistingResourceConfigurationUIBean.configuration}"
+ nullConfigurationDefinitionMessage="#{ExistingResourceConfigurationUIBean.nullConfigurationDefinitionMessage}"
+ nullConfigurationMessage="#{ExistingResourceConfigurationUIBean.nullConfigurationMessage}"
+ prevalidate="true"/>
+-->
+
+ <table class="summary-props-table" style="" >
+ <tr>
+ <td bgcolor="lightblue" width="25%" valign="top">
+ Files
+
+ <div>#{RawConfigCollection.current.path}</div>
+ <a4j:repeat
+ value="#{RawConfigCollection.paths}"
+ var="path"
+ binding="#{RawConfigCollection.repeater}" >
+ <div>
+ <a4j:commandLink reRender="editor" >
+ <h:outputText value="${path}" />
+ </a4j:commandLink>
+ </div>
+ </a4j:repeat>
- <table class="summary-props-table" style="" >
- <tr>
- <td bgcolor="lightblue" width="25%" valign="top">
- Files
- <div>.../etc/httpd/conf/httpd.conf</div>
- <div>.../etc/httpd/conf/magic</div>
- <div>*../etc/httpd/conf.d/cobbler.conf</div>
- <div>*../etc/httpd/conf.d/cobbler_svc.conf</div>
- <div>______________________________________</div>
- </td>
- <td>/etc/httpd/conf/httpd.conf [Icon]View Full Screen [^] Upload Now [v] Download
- <textarea disabled="true" rows="40" cols="60">Lorem Ipsum</textarea>
- <div>Upload A New Version</div>
- <input type="file" /> <input type="submit" value="Upload"/>
- </td></tr>
- </table>
- </h:form>
+ <div>______________________________________</div>
+ </td>
+ <td>
+ <h:panelGroup id="title">
+ <h:outputText value="#{RawConfigCollection.current.path}" styleClass="outhello" />
+ </h:panelGroup>
+
+ [Icon]View Full Screen [^] Upload Now [v] Download
+
+ <rich:editor
+ id="editor" width="600" height="400"
+ viewMode="visual" value="#{RawConfigCollection.currentContents}" useSeamText="false">
+
+ </rich:editor>
+
+ <div>Upload A New Version</div>
+ <input type="file" /> <input type="submit" value="Upload"/>
+ </td></tr>
+ </table>
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
+ </a4j:form>
<h:panelGroup layout="block" styleClass="InfoBlock" rendered="#{ExistingResourceConfigurationUIBean.updateInProgress}">
<b>${msg['note']}</b> ${msg['resource.config.Current.updateInProgress']}
commit 1df644e1efc71ce393eddd30cee07417346b6190
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Oct 16 13:24:32 2009 -0400
Renaming MD5Generator to MessageDigestGenerator and refactoring to support SHA-256.
Updating RawConfiguration so that the contents property can only be changed
through calling its setter method. This is to ensure that sha256 property
stays in sync with it. Adding logic to set the sha256 property to the
calculated SHA-256 hash whenver the contents property changes.
diff --git a/modules/core/domain/pom.xml b/modules/core/domain/pom.xml
index 1fe2d8d..5e0a9e0 100644
--- a/modules/core/domain/pom.xml
+++ b/modules/core/domain/pom.xml
@@ -160,6 +160,13 @@
</dependency>
<dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1-jboss</version>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 965d905..f5876c3 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -23,6 +23,8 @@
package org.rhq.core.domain.configuration;
+import org.rhq.core.util.MessageDigestGenerator;
+
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@@ -81,6 +83,8 @@ public class RawConfiguration implements Serializable {
@JoinColumn(name = "CONFIG_ID", nullable = false)
private Configuration configuration;
+ private MessageDigestGenerator sha256Generator = new MessageDigestGenerator("SHA-256");
+
public int getId() {
return id;
}
@@ -97,20 +101,44 @@ public class RawConfiguration implements Serializable {
this.path = path;
}
+ /**
+ * Returns a copy of the contents as an array of bytes. Modifications to the underlying array have to happen through
+ * {@link #setContents(byte[])}; otherwise, we could wind up with an incorrect SHA-256 hash. This behavior is
+ * enforced by returning a copy instead of a reference to the underlying array. By returning a copy, callers can only
+ * modify the underlying array by calling the setter.
+ *
+ * @return A copy of the file contents as an array of bytes
+ */
public byte[] getContents() {
- return contents;
+ return copy(contents);
}
- public void setContents(byte[] contents) {
- this.contents = contents;
+ /**
+ * Replaces the contents of this raw config with a copy of the specified bytes. The SHA-256 hash returned from
+ * {@link #getSha256()} will be changed as well, provided the contents actually changed in some way.
+ *
+ * @param newContents The new bytes
+ */
+ public void setContents(byte[] newContents) {
+ this.contents = copy(newContents);
+ updateSha256();
}
- public String getSha256() {
- return sha256;
+ private byte[] copy(byte[] original) {
+ byte[] copy = new byte[original.length];
+ for (int i = 0; i < original.length; ++i) {
+ copy[i] = original[i];
+ }
+ return copy;
}
- public void setSha256(String sha256) {
- this.sha256 = sha256;
+ private void updateSha256() {
+ sha256Generator.add(contents);
+ sha256 = sha256Generator.getDigestString();
+ }
+
+ public String getSha256() {
+ return sha256;
}
public long getCtime() {
@@ -190,6 +218,7 @@ public class RawConfiguration implements Serializable {
.append(", path=").append(path)
.append(", sha256=").append(sha256)
.append(", configuration=").append(configuration)
+ .append("]")
.toString();
}
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
index 833f8bc..1ee09e0 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/plugin/Plugin.java
@@ -38,7 +38,7 @@ import javax.persistence.Table;
import org.jetbrains.annotations.NotNull;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
/**
* An agent plugin.
@@ -212,7 +212,7 @@ public class Plugin implements Serializable {
try {
ByteArrayInputStream stream = new ByteArrayInputStream(content);
- this.md5 = MD5Generator.getDigestString(stream);
+ this.md5 = MessageDigestGenerator.getDigestString(stream);
} catch (Exception e) {
throw new RuntimeException("Cannot determine plugin's MD5!", e);
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationIntegrationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationIntegrationTest.java
new file mode 100644
index 0000000..bbd9ff5
--- /dev/null
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationIntegrationTest.java
@@ -0,0 +1,66 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+import org.rhq.core.domain.test.AbstractEJB3Test;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+
+public class RawConfigurationIntegrationTest extends AbstractEJB3Test {
+
+ @Test(groups = "integration.ejb3")
+ public void veryPersistAndFindById() throws Exception {
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+
+ try {
+ Configuration config = createAndSaveConfiguration();
+
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setConfiguration(config);
+ rawConfig.setContents(new byte[] {1, 2, 3, 4, 5});
+ rawConfig.setPath("/tmp/foo.txt");
+
+ entityMgr.persist(rawConfig);
+
+ RawConfiguration savedRawConfig = entityMgr.find(RawConfiguration.class, rawConfig.getId());
+
+ assertNotNull("Failed to find " + RawConfiguration.class.getSimpleName() + " by id.", savedRawConfig);
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ Configuration createAndSaveConfiguration() {
+ Configuration config = new Configuration();
+ EntityManager entityMgr = getEntityManager();
+
+ entityMgr.persist(config);
+
+ return config;
+ }
+
+}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 47d40d5..82b70f3 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -23,45 +23,92 @@
package org.rhq.core.domain.configuration;
-import org.rhq.core.domain.test.AbstractEJB3Test;
+import static org.testng.Assert.*;
import org.testng.annotations.Test;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.FileUtils;
-import javax.persistence.EntityManager;
+import java.io.File;
-public class RawConfigurationTest extends AbstractEJB3Test {
+public class RawConfigurationTest {
- @Test(groups = "integration.ejb3")
- public void veryPersistAndFindById() throws Exception {
- getTransactionManager().begin();
- EntityManager entityMgr = getEntityManager();
+ @Test
+ public void getContentsShouldReturnADeepCopyOfArray() {
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(getBytes());
- try {
- Configuration config = createAndSaveConfiguration();
+ byte[] contents = rawConfig.getContents();
+ contents[0] = 5;
- RawConfiguration rawConfig = new RawConfiguration();
- rawConfig.setConfiguration(config);
- rawConfig.setContents(new byte[] {});
- rawConfig.setPath("/tmp/foo");
- rawConfig.setSha256("12242432nde");
+ assertEquals(
+ rawConfig.getContents(),
+ getBytes(),
+ "The contents property should only be mutable through setContents(). Therefore getContents() must return a copy of the underlying array."
+ );
+ }
+
+ @Test
+ public void setContentsShouldUpdateContentsArrayWithCopyOfSpecifiedValue() {
+ byte[] bytes = getBytes();
- entityMgr.persist(rawConfig);
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(bytes);
- RawConfiguration savedRawConfig = entityMgr.find(RawConfiguration.class, rawConfig.getId());
+ bytes[0] = 9;
+
+ assertEquals(
+ rawConfig.getContents(),
+ getBytes(),
+ "setContents() should update the underlying array to refer to a copy of the incoming array to enforce the contents property being mutable only through setContents()."
+ );
+ }
- assertNotNull("Failed to find " + RawConfiguration.class.getSimpleName() + " by id.", savedRawConfig);
- }
- finally {
- getTransactionManager().rollback();
- }
+ byte[] getBytes() {
+ return new byte[] {1, 2, 3};
}
- Configuration createAndSaveConfiguration() {
- Configuration config = new Configuration();
- EntityManager entityMgr = getEntityManager();
+ @Test
+ public void sha256ShouldChangeWhenContentsChange() throws Exception {
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
+
+ String actualSha256 = rawConfig.getSha256();
+
+ String expectedSha256 = calculateSHA256(rawConfig.getContents());
+
+ assertEquals(actualSha256, expectedSha256, "Failed to calculate the SHA-256 correctly.");
- entityMgr.persist(config);
+ byte[] contents = rawConfig.getContents();
+ contents[4] = 15;
+ rawConfig.setContents(contents);
+
+ actualSha256 = rawConfig.getSha256();
+
+ expectedSha256 = calculateSHA256(rawConfig.getContents());
+
+ assertEquals(actualSha256, expectedSha256, "Failed to update sha256 when contents property changes");
+ }
+
+ String calculateSHA256(byte[] data) throws DecoderException {
+ //StringUtils stringUtils = new StringUtils();
+// byte[] shaBytes = new Hex().encode(data);
+// return DigestUtils.shaHex(shaBytes);
+ //byte[] shaBytes = DigestUtils.sha(data);
+ //return DigestUtils.sha
+ return DigestUtils.sha256Hex(data);
+// Base64 base64 = new Base64();
+// return base64.encode(shaBytes).toString();
+// char[] chars = Hex.encodeHex(shaBytes);
+//
+// return new String(chars);
+ }
- return config;
+ byte[] getFileBytes() throws Exception {
+ return FileUtils.readFileToByteArray(new File("/home/jsanda/test.txt"));
}
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
index 3183db3..109031a 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
@@ -255,9 +255,8 @@ public class ConfigurationTest extends AbstractEJB3Test {
RawConfiguration createRawConfiguration() {
RawConfiguration rawConfig = new RawConfiguration();
- rawConfig.setContents(new byte[] {});
+ rawConfig.setContents(new byte[] {1, 2, 3, 4, 5});
rawConfig.setPath("/tmp/foo");
- rawConfig.setSha256("38hr3f");
return rawConfig;
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
index 270687e..07ab588 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
@@ -38,7 +38,7 @@ import org.testng.annotations.Test;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.domain.test.AbstractEJB3Test;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.stream.StreamUtil;
@Test
@@ -199,7 +199,7 @@ public class PluginTest extends AbstractEJB3Test {
String description = "the test description is here";
String help = "the test help string is here";
byte[] content = "this is the test content".getBytes();
- String md5 = MD5Generator.getDigestString(new String(content));
+ String md5 = MessageDigestGenerator.getDigestString(new String(content));
Plugin plugin = new Plugin(name, path);
plugin.setDisplayName(displayName);
@@ -285,7 +285,7 @@ public class PluginTest extends AbstractEJB3Test {
String description = "the test description is here";
String help = "the test help string is here";
byte[] content = "this is the test content".getBytes();
- String md5 = MD5Generator.getDigestString(new String(content));
+ String md5 = MessageDigestGenerator.getDigestString(new String(content));
// persist the plugin, but without any content
Plugin plugin = new Plugin(name, path);
@@ -355,7 +355,7 @@ public class PluginTest extends AbstractEJB3Test {
byte[] contentFromDb = StreamUtil.slurp(dbStream);
assert contentFromDb.length == content.length;
assert new String(contentFromDb).equals(new String(content));
- assert MD5Generator.getDigestString(new String(contentFromDb)).equals(md5);
+ assert MessageDigestGenerator.getDigestString(new String(contentFromDb)).equals(md5);
rs.close();
rs = null;
ps.close();
@@ -404,7 +404,7 @@ public class PluginTest extends AbstractEJB3Test {
Plugin plugin = new Plugin("PluginTest-testPersist", path);
plugin.setDisplayName("Plugin Test - testPersist");
plugin.setEnabled(true);
- plugin.setMD5(MD5Generator.getDigestString(new String(content)));
+ plugin.setMD5(MessageDigestGenerator.getDigestString(new String(content)));
em.persist(plugin);
assert plugin.getId() > 0;
@@ -463,8 +463,8 @@ public class PluginTest extends AbstractEJB3Test {
byte[] contentFromDb = StreamUtil.slurp(dbStream);
assert contentFromDb.length == content.length;
assert new String(contentFromDb).equals(new String(content));
- assert MD5Generator.getDigestString(new String(contentFromDb)).equals(
- MD5Generator.getDigestString(new String(content)));
+ assert MessageDigestGenerator.getDigestString(new String(contentFromDb)).equals(
+ MessageDigestGenerator.getDigestString(new String(content)));
rs.close();
rs = null;
ps.close();
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/MD5Generator.java b/modules/core/util/src/main/java/org/rhq/core/util/MD5Generator.java
deleted file mode 100644
index f667c1c..0000000
--- a/modules/core/util/src/main/java/org/rhq/core/util/MD5Generator.java
+++ /dev/null
@@ -1,245 +0,0 @@
- /*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.util;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * An object that can be used to generate an MD5 hashcode (called a "digest") for files, streams or strings. 128 bit
- * fingerprints are computed as described in <i>R. Rivest, The MD5 Message-Digest Algorithm, RFC1321</i>.
- */
-public class MD5Generator {
- private final MessageDigest messageDigest;
-
- /**
- * Creates a new {@link MD5Generator} object.
- *
- * @throws IllegalStateException if the MD5 algorithm cannot be computed by the VM
- */
- public MD5Generator() {
- try {
- this.messageDigest = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- throw new IllegalStateException("Could not find MD5 Algorithm");
- }
- }
-
- /**
- * Returns the <code>MessageDigest</code> object that is used to compute the MD5.
- *
- * @return object that will perform the calculations
- */
- public MessageDigest getMessageDigest() {
- return this.messageDigest;
- }
-
- /**
- * Use this to add more data to the set of data used to calculate the MD5. Once all data has been added, call
- * {@link #getDigest()} to get the final MD5 value.
- *
- * @param is the stream whose data is to be part of the set of data from which the MD5 is to be calculated
- *
- * @throws IOException if there was a problem reading from the stream
- */
- public void add(InputStream is) throws IOException {
- byte[] bytes = new byte[1024];
- int len;
-
- while ((len = is.read(bytes, 0, bytes.length)) != -1) {
- messageDigest.update(bytes, 0, len);
- }
-
- return;
- }
-
- /**
- * Use this to add more data to the set of data used to calculate the MD5. Once all data has been added, call
- * {@link #getDigest()} to get the final MD5 value.
- *
- * <p>If <code>bytes</code> is <code>null</code>, this method is a no-op and simply returns.</p>
- *
- * @param bytes data to be part of the set of data from which the MD5 is to be calculated
- */
- public void add(byte[] bytes) {
- if (bytes != null) {
- messageDigest.update(bytes);
- }
- }
-
- /**
- * After all the data has been added to the message digest via {@link #add(InputStream)}, this method is used to
- * finalize the MD5 calcualation and return the MD5 hashcode. You can get the String form of this MD5 hashcode if
- * you call {@link #getDigestString()} instead.
- *
- * @return the bytes of the MD5 hashcode
- */
- public byte[] getDigest() {
- return this.messageDigest.digest();
- }
-
- /**
- * After all the data has been added to the message digest via {@link #add(InputStream)} or {@link #add(byte[])}
- * this method is used to finalize the MD5 calcualation and return the MD5 hashcode as a String. You can get the
- * actual bytes of the MD5 hashcode if you call {@link #getDigest()} instead.
- *
- * @return the MD5 hashcode as a string
- */
- public String getDigestString() {
- return calculateDigestStringFromBytes(getDigest());
- }
-
- /**
- * Returns the MD5 hashcode for the data found in the given stream. The MD5 is returned as a byte array; if you want
- * the MD5 as a String, call {@link #getDigestString(InputStream)} instead.
- *
- * @param is the stream whose data is to be used to calculate the MD5
- *
- * @return the stream data's MD5
- *
- * @throws IOException if failed to read the stream for some reason
- */
- public static byte[] getDigest(InputStream is) throws IOException {
- MD5Generator md5 = new MD5Generator();
- md5.add(is);
- return md5.getDigest();
- }
-
- /**
- * Similar to {@link #getDigest(InputStream)}, only this returns the MD5 as a String.
- *
- * @param is the stream whose data is to be used to calculate the MD5
- *
- * @return the stream data's MD5 as a String
- *
- * @throws IOException if failed to read the stream for some reason
- */
- public static String getDigestString(InputStream is) throws IOException {
- MD5Generator md5 = new MD5Generator();
- md5.add(is);
- return md5.getDigestString();
- }
-
- /**
- * Calculates an MD5 for a given string.
- *
- * @param source_str the string whose contents will be used as the data to calculate the MD5 hashcode
- *
- * @return the string's MD5
- *
- * @throws RuntimeException if a system error occurred - should never really happen
- */
- public static byte[] getDigest(String source_str) {
- try {
- ByteArrayInputStream bs = new ByteArrayInputStream(source_str.getBytes());
- return getDigest(bs);
- } catch (IOException e) {
- throw new RuntimeException("IOException reading a byte array input stream, this should never happen", e);
- }
- }
-
- /**
- * Calculates an MD5 for a given string and returns the MD5's String representation.
- *
- * @param source_str the string whose contents will be used as the data to calculate the MD5 hashcode
- *
- * @return the string's MD5 as a String
- */
- public static String getDigestString(String source_str) {
- return calculateDigestStringFromBytes(getDigest(source_str));
- }
-
- /**
- * Calculates the MD5 for a given file. The file's contents will be used as the source data for the MD5 calculation.
- *
- * @param file the file whose contents are to be used to calculate the MD5.
- *
- * @return the file content's MD5
- *
- * @throws IOException if the file could not be read or accessed
- */
- public static byte[] getDigest(File file) throws IOException {
- FileInputStream is = null;
-
- try {
- is = new FileInputStream(file);
- return getDigest(new BufferedInputStream(is, 1024 * 32));
- } finally {
- if (is != null) {
- is.close();
- }
- }
- }
-
- /**
- * Calculates the MD5 for a given file. The file's contents will be used as the source data for the MD5 calculation.
- *
- * @param file the file whose contents are to be used to calculate the MD5.
- *
- * @return the file content's MD5 as a String
- *
- * @throws IOException if the file could not be read or accessed
- */
- public static String getDigestString(File file) throws IOException {
- return calculateDigestStringFromBytes(getDigest(file));
- }
-
- /**
- * Given an MD5 hashcode byte array, this will return its String representation.
- *
- * @param bytes the MD5 digest whose String representation is to be returned
- *
- * @return the MD5 string
- */
- private static String calculateDigestStringFromBytes(byte[] bytes) {
- StringBuffer sb = new StringBuffer(bytes.length * 2);
-
- for (int i = 0; i < bytes.length; i++) {
- int hi = (bytes[i] >> 4) & 0xf;
- int lo = bytes[i] & 0xf;
- sb.append(Character.forDigit(hi, 16));
- sb.append(Character.forDigit(lo, 16));
- }
-
- return sb.toString();
- }
-
- /**
- * This can be used to generate the MD5 hashcode from the command line.
- *
- * @param args one and only one filename - may or may not be a .jar file.
- *
- * @throws Exception if failed to compute the MD5 for some reason
- */
- public static void main(String[] args) throws Exception {
- String file = args[0];
- String digest = MD5Generator.getDigestString(new File(file));
- System.out.println("MD5=" + digest);
- }
-}
\ No newline at end of file
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/MessageDigestGenerator.java b/modules/core/util/src/main/java/org/rhq/core/util/MessageDigestGenerator.java
new file mode 100644
index 0000000..794878f
--- /dev/null
+++ b/modules/core/util/src/main/java/org/rhq/core/util/MessageDigestGenerator.java
@@ -0,0 +1,261 @@
+ /*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.util;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * An object that generates a message digest or hash for algorithms such as MD5 or SHA. This class is basically a
+ * wrapper around {@link java.security.MessageDigest} and provides convenience methods making it easier to generate
+ * hashes.
+ */
+public class MessageDigestGenerator {
+ private final MessageDigest messageDigest;
+
+ /**
+ * Creates a new {@link MessageDigestGenerator} object using MD5 as the default algorithm.
+ * <p/>
+ * MD5 is used as the default algorithm for backward compatibility. It originally only supported MD5 and has since
+ * been refactored to support algortithms that are supported by your version of Java.
+ *
+ * @throws IllegalStateException if the MD5 algorithm cannot be computed by the VM
+ */
+ public MessageDigestGenerator() {
+ this("MD5");
+ }
+
+ /**
+ * Creates a new MessageDigestGenerator using the specified algorithm.
+ *
+ * @param algorithm The algorithm to use (e.g., MD5, SHA-256)
+ *
+ * @throws IllegalStateException if the algorithm is not supported by the VM
+ */
+ public MessageDigestGenerator(String algorithm) {
+ try {
+ messageDigest = MessageDigest.getInstance(algorithm);
+ }
+ catch (NoSuchAlgorithmException e) {
+ throw new IllegalStateException(algorithm + " is not a supported algorithm");
+ }
+ }
+
+ /**
+ * Returns the <code>MessageDigest</code> object that is used to compute the digest.
+ *
+ * @return object that will perform the calculations
+ */
+ public MessageDigest getMessageDigest() {
+ return this.messageDigest;
+ }
+
+ /**
+ * Use this to add more data to the set of data used to calculate the digest. Once all data has been added, call
+ * {@link #getDigest()} to get the final value.
+ *
+ * @param is the stream whose data is to be part of the set of data from which the digest is to be calculated
+ *
+ * @throws IOException if there was a problem reading from the stream
+ */
+ public void add(InputStream is) throws IOException {
+ byte[] bytes = new byte[1024];
+ int len;
+
+ while ((len = is.read(bytes, 0, bytes.length)) != -1) {
+ messageDigest.update(bytes, 0, len);
+ }
+
+ return;
+ }
+
+ /**
+ * Use this to add more data to the set of data used to calculate the hash. Once all data has been added, call
+ * {@link #getDigest()} to get the final digest value.
+ *
+ * <p>If <code>bytes</code> is <code>null</code>, this method is a no-op and simply returns.</p>
+ *
+ * @param bytes data to be part of the set of data from which the digest is to be calculated
+ */
+ public void add(byte[] bytes) {
+ if (bytes != null) {
+ messageDigest.update(bytes);
+ }
+ }
+
+ /**
+ * After all the data has been added to the message digest via {@link #add(InputStream)}, this method is used to
+ * finalize the digest calcualation and return the digest. You can get the String form of this digest if
+ * you call {@link #getDigestString()} instead.
+ *
+ * @return the bytes of the digest
+ */
+ public byte[] getDigest() {
+ return this.messageDigest.digest();
+ }
+
+ /**
+ * After all the data has been added to the message digest via {@link #add(InputStream)} or {@link #add(byte[])}
+ * this method is used to finalize the digest calcualation and return the digest as a String. You can get the
+ * actual bytes of the digest if you call {@link #getDigest()} instead.
+ *
+ * @return the digest as a string
+ */
+ public String getDigestString() {
+ return calculateDigestStringFromBytes(getDigest());
+ }
+
+ /**
+ * Returns the digest for the data found in the given stream. The digest is returned as a byte array; if you want
+ * the digest as a String, call {@link #getDigestString(InputStream)} instead.
+ *
+ * @param is the stream whose data is to be used to calculate the digest
+ *
+ * @return the stream data's hash
+ *
+ * @throws IOException if failed to read the stream for some reason
+ */
+ public static byte[] getDigest(InputStream is) throws IOException {
+ MessageDigestGenerator md5 = new MessageDigestGenerator();
+ md5.add(is);
+ return md5.getDigest();
+ }
+
+ /**
+ * Similar to {@link #getDigest(InputStream)}, only this returns the digest as a String.
+ *
+ * @param is the stream whose data is to be used to calculate the digest
+ *
+ * @return the stream data's digest as a String
+ *
+ * @throws IOException if failed to read the stream for some reason
+ */
+ public static String getDigestString(InputStream is) throws IOException {
+ MessageDigestGenerator md5 = new MessageDigestGenerator();
+ md5.add(is);
+ return md5.getDigestString();
+ }
+
+ /**
+ * Calculates a digest for a given string.
+ *
+ * @param source_str the string whose contents will be used as the data to calculate the digest
+ *
+ * @return the string's digest
+ *
+ * @throws RuntimeException if a system error occurred - should never really happen
+ */
+ public static byte[] getDigest(String source_str) {
+ try {
+ ByteArrayInputStream bs = new ByteArrayInputStream(source_str.getBytes());
+ return getDigest(bs);
+ } catch (IOException e) {
+ throw new RuntimeException("IOException reading a byte array input stream, this should never happen", e);
+ }
+ }
+
+ /**
+ * Calculates a digest for a given string and returns the digest's String representation.
+ *
+ * @param source_str the string whose contents will be used as the data to calculate the digest
+ *
+ * @return the string's digest or hash as a String
+ */
+ public static String getDigestString(String source_str) {
+ return calculateDigestStringFromBytes(getDigest(source_str));
+ }
+
+ /**
+ * Calculates the digest for a given file. The file's contents will be used as the source data for the digest calculation.
+ *
+ * @param file the file whose contents are to be used to calculate the digest.
+ *
+ * @return the file content's digest
+ *
+ * @throws IOException if the file could not be read or accessed
+ */
+ public static byte[] getDigest(File file) throws IOException {
+ FileInputStream is = null;
+
+ try {
+ is = new FileInputStream(file);
+ return getDigest(new BufferedInputStream(is, 1024 * 32));
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+ /**
+ * Calculates the digest for a given file. The file's contents will be used as the source data for the digest calculation.
+ *
+ * @param file the file whose contents are to be used to calculate the digest.
+ *
+ * @return the file content's digest as a String
+ *
+ * @throws IOException if the file could not be read or accessed
+ */
+ public static String getDigestString(File file) throws IOException {
+ return calculateDigestStringFromBytes(getDigest(file));
+ }
+
+ /**
+ * Given a digest byte array, this will return its String representation.
+ *
+ * @param bytes the digest whose String representation is to be returned
+ *
+ * @return the digest string
+ */
+ private static String calculateDigestStringFromBytes(byte[] bytes) {
+ StringBuffer sb = new StringBuffer(bytes.length * 2);
+
+ for (int i = 0; i < bytes.length; i++) {
+ int hi = (bytes[i] >> 4) & 0xf;
+ int lo = bytes[i] & 0xf;
+ sb.append(Character.forDigit(hi, 16));
+ sb.append(Character.forDigit(lo, 16));
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * This can be used to generate the digest hash from the command line.
+ *
+ * @param args one and only one filename - may or may not be a .jar file.
+ *
+ * @throws Exception if failed to compute the digest for some reason
+ */
+ public static void main(String[] args) throws Exception {
+ String file = args[0];
+ String digest = MessageDigestGenerator.getDigestString(new File(file));
+ System.out.println("MD5=" + digest);
+ }
+}
\ No newline at end of file
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/file/GenericContentFileInfo.java b/modules/core/util/src/main/java/org/rhq/core/util/file/GenericContentFileInfo.java
index 1b0fcce..ad8dda1 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/file/GenericContentFileInfo.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/file/GenericContentFileInfo.java
@@ -25,7 +25,7 @@ package org.rhq.core.util.file;
import java.io.File;
import java.io.IOException;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
/**
* Handles any generic file. This is to be used as a fallback if no other
@@ -63,7 +63,7 @@ public class GenericContentFileInfo extends ContentFileInfo {
}
try {
- return MD5Generator.getDigestString(getContentFile());
+ return MessageDigestGenerator.getDigestString(getContentFile());
} catch (IOException e) {
throw new RuntimeException("Cannot generate version for file [" + getContentFile() + "]", e);
}
diff --git a/modules/core/util/src/test/java/org/rhq/core/util/MD5GeneratorTest.java b/modules/core/util/src/test/java/org/rhq/core/util/MD5GeneratorTest.java
index d315bdb..8702694 100644
--- a/modules/core/util/src/test/java/org/rhq/core/util/MD5GeneratorTest.java
+++ b/modules/core/util/src/test/java/org/rhq/core/util/MD5GeneratorTest.java
@@ -24,7 +24,7 @@ package org.rhq.core.util;
import org.testng.annotations.Test;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
/**
* Tests MD5 generation.
@@ -37,12 +37,12 @@ public class MD5GeneratorTest {
* Tests generating the MD5 of a String.
*/
public void testString() {
- String md5 = MD5Generator.getDigestString("calculate MD5 of this String!\n");
+ String md5 = MessageDigestGenerator.getDigestString("calculate MD5 of this String!\n");
assert md5.equals("ac98d9c00ea0d821cd757b0f3c628c99") : "Invalid MD5 was " + md5;
}
public void testEmpty() {
- MD5Generator md5 = new MD5Generator();
+ MessageDigestGenerator md5 = new MessageDigestGenerator();
assert md5.getDigestString().equals("d41d8cd98f00b204e9800998ecf8427e"); // empty data results in this MD5
}
}
\ No newline at end of file
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentManagement.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentManagement.java
index e04002b..bde4400 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentManagement.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentManagement.java
@@ -49,7 +49,7 @@ import org.rhq.core.pc.PluginContainer;
import org.rhq.core.pc.PluginContainerConfiguration;
import org.rhq.core.pc.inventory.InventoryManager;
import org.rhq.core.pluginapi.operation.OperationResult;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.enterprise.agent.AgentRestartCounter.AgentRestartReason;
import org.rhq.enterprise.communications.ServiceContainerMetricsMBean;
import org.rhq.enterprise.communications.command.client.ClientCommandSender;
@@ -175,7 +175,7 @@ public class AgentManagement implements AgentManagementMBean, MBeanRegistration
map.put(new PropertySimple(PLUGIN_INFO_SIZE, plugin.length()));
try {
- map.put(new PropertySimple(PLUGIN_INFO_MD5, MD5Generator.getDigestString(plugin)));
+ map.put(new PropertySimple(PLUGIN_INFO_MD5, MessageDigestGenerator.getDigestString(plugin)));
} catch (IOException e) {
map.put(new PropertySimple(PLUGIN_INFO_MD5, e.toString()));
}
@@ -210,7 +210,7 @@ public class AgentManagement implements AgentManagementMBean, MBeanRegistration
info.put(new PropertySimple(PLUGIN_INFO_SIZE, plugin.length()));
try {
- info.put(new PropertySimple(PLUGIN_INFO_MD5, MD5Generator.getDigestString(plugin)));
+ info.put(new PropertySimple(PLUGIN_INFO_MD5, MessageDigestGenerator.getDigestString(plugin)));
} catch (IOException e) {
info.put(new PropertySimple(PLUGIN_INFO_MD5, e.toString()));
}
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentUpdateDownload.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentUpdateDownload.java
index 34d0290..9edad7f 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentUpdateDownload.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/AgentUpdateDownload.java
@@ -26,7 +26,7 @@ import java.net.URL;
import mazz.i18n.Logger;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.agent.i18n.AgentI18NFactory;
@@ -271,7 +271,7 @@ public class AgentUpdateDownload {
*/
private boolean validateFile(File file, String md5) {
try {
- String filemd5 = MD5Generator.getDigestString(file);
+ String filemd5 = MessageDigestGenerator.getDigestString(file);
return (filemd5 != null && filemd5.equals(md5));
} catch (Exception e) {
return false;
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 767f6a5..605f91a 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
@@ -36,7 +36,7 @@ import mazz.i18n.Logger;
import org.rhq.core.clientapi.server.core.CoreServerService;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.pc.PluginContainerConfiguration;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.agent.i18n.AgentI18NFactory;
@@ -377,7 +377,7 @@ public class PluginUpdate {
String plugin_filename = plugin_file.getName();
if (plugin_filename.endsWith(".jar")) {
Plugin cur_plugin = new Plugin(plugin_filename, plugin_filename);
- cur_plugin.setMD5(MD5Generator.getDigestString(plugin_file));
+ cur_plugin.setMD5(MessageDigestGenerator.getDigestString(plugin_file));
plugins.put(plugin_filename, cur_plugin);
}
}
diff --git a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/promptcmd/PluginsPromptCommand.java b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/promptcmd/PluginsPromptCommand.java
index 00f7bdb..5181bbe 100644
--- a/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/promptcmd/PluginsPromptCommand.java
+++ b/modules/enterprise/agent/src/main/java/org/rhq/enterprise/agent/promptcmd/PluginsPromptCommand.java
@@ -31,7 +31,7 @@ import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.clientapi.server.core.CoreServerService;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.pc.PluginContainerConfiguration;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.agent.AgentMain;
import org.rhq.enterprise.agent.PluginUpdate;
@@ -130,7 +130,7 @@ public class PluginsPromptCommand implements AgentPromptCommand {
String filename = current_plugin.getName();
Date last_mod = new Date(current_plugin.lastModified());
long filesize = current_plugin.length();
- String md5 = MD5Generator.getDigestString(current_plugin);
+ String md5 = MessageDigestGenerator.getDigestString(current_plugin);
out.println();
out.println(MSG.getMsg(AgentI18NResourceKeys.PLUGINS_PLUGINS_INFO_FILENAME, filename));
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
index f39509a..dd2b910 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
@@ -36,7 +36,7 @@ import org.jboss.mx.util.MBeanServerLocator;
import org.jboss.system.server.ServerConfig;
import org.rhq.core.domain.cloud.Server.OperationMode;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.ObjectNameFactory;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.core.CoreServerMBean;
@@ -253,7 +253,7 @@ public class RemoteClientServlet extends HttpServlet {
// calculate the MD5 of the client zip
File zip = getRemoteClientZip();
- String md5Property = RHQ_CLIENT_MD5 + '=' + MD5Generator.getDigestString(zip) + '\n';
+ String md5Property = RHQ_CLIENT_MD5 + '=' + MessageDigestGenerator.getDigestString(zip) + '\n';
// now write the server version info in our internal version file our servlet will use
FileOutputStream versionFileOutputStream = new FileOutputStream(versionFile);
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 63d324a..fad21cc 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
@@ -87,7 +87,7 @@ import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.core.domain.util.PersistenceUtility;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.RHQConstants;
@@ -660,7 +660,7 @@ public class ContentSourceManagerBean implements ContentSourceManagerLocal {
// hmmm... it already exists, maybe we already have it?
// if the MD5's match, just ignore this download request and continue on
String expectedMD5 = (pv.getMD5() != null) ? pv.getMD5() : "<unspecified MD5>";
- String actualMD5 = MD5Generator.getDigestString(outputFile);
+ String actualMD5 = MessageDigestGenerator.getDigestString(outputFile);
if (!expectedMD5.trim().toLowerCase().equals(actualMD5.toLowerCase())) {
throw new Exception("Already have package bits for [" + pv + "] located at [" + outputFile
+ "] but the MD5 hashcodes do not match. Expected MD5=[" + expectedMD5
@@ -1237,7 +1237,7 @@ public class ContentSourceManagerBean implements ContentSourceManagerLocal {
@SuppressWarnings("unchecked")
public String getResourceSubscriptionMD5(int resourceId) {
- MD5Generator md5Generator = new MD5Generator();
+ MessageDigestGenerator md5Generator = new MessageDigestGenerator();
Query q = entityManager.createNamedQuery(Channel.QUERY_FIND_CHANNELS_BY_RESOURCE_ID);
q.setParameter("resourceId", resourceId);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
index 5553c96..a8c5018 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
@@ -59,7 +59,7 @@ import org.rhq.core.domain.resource.composite.AgentLastAvailabilityReportComposi
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PersistenceUtility;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.ObjectNameFactory;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.RHQConstants;
@@ -461,7 +461,7 @@ public class AgentManagerBean implements AgentManagerLocal {
// calculate the MD5 of the agent update binary file
File binaryFile = getAgentUpdateBinaryFile();
- String md5Property = RHQ_AGENT_LATEST_MD5 + '=' + MD5Generator.getDigestString(binaryFile) + '\n';
+ String md5Property = RHQ_AGENT_LATEST_MD5 + '=' + MessageDigestGenerator.getDigestString(binaryFile) + '\n';
// second, get the agent version info (by peeking into the agent update binary jar)
JarFile binaryJarFile = new JarFile(binaryFile);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/AgentPluginDeploymentScanner.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/AgentPluginDeploymentScanner.java
index 633e89d..4bdd40b 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/AgentPluginDeploymentScanner.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/AgentPluginDeploymentScanner.java
@@ -53,7 +53,7 @@ import org.rhq.core.db.OracleDatabaseType;
import org.rhq.core.db.PostgresqlDatabaseType;
import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.domain.plugin.Plugin;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.core.util.jdbc.JDBCUtil;
import org.rhq.core.util.stream.StreamUtil;
@@ -275,7 +275,7 @@ public class AgentPluginDeploymentScanner implements AgentPluginDeploymentScanne
if (plugin != null) {
if (pluginJar.lastModified() == 0L) {
// for some reason the operating system can't give us the last mod time, we need to do MD5 check
- md5 = MD5Generator.getDigestString(pluginJar);
+ md5 = MessageDigestGenerator.getDigestString(pluginJar);
if (!md5.equals(plugin.getMd5())) {
plugin = null; // this plugin jar has changed - force it to refresh the cache.
}
@@ -340,7 +340,7 @@ public class AgentPluginDeploymentScanner implements AgentPluginDeploymentScanne
*/
private Plugin cacheFilesystemPluginJar(File pluginJar, String md5) throws Exception {
if (md5 == null) { // don't calculate the MD5 is we've already done it before
- md5 = MD5Generator.getDigestString(pluginJar);
+ md5 = MessageDigestGenerator.getDigestString(pluginJar);
}
URL pluginUrl = pluginJar.toURI().toURL();
PluginDescriptor descriptor = AgentPluginDescriptorUtil.loadPluginDescriptorFromUrl(pluginUrl);
@@ -556,7 +556,7 @@ public class AgentPluginDeploymentScanner implements AgentPluginDeploymentScanne
String expectedMD5 = pluginsMissingContentInDbMD5.get(name);
File pluginFile = existingPluginFiles.get(name);
if (pluginFile != null) {
- String newMD5 = MD5Generator.getDigestString(pluginFile);
+ String newMD5 = MessageDigestGenerator.getDigestString(pluginFile);
boolean different = !expectedMD5.equals(newMD5);
streamPluginFileContentToDatabase(name, pluginFile, different);
log.info("Missing content for plugin [" + name + "] will be uploaded from [" + pluginFile
@@ -651,7 +651,7 @@ public class AgentPluginDeploymentScanner implements AgentPluginDeploymentScanne
String sql = "UPDATE " + Plugin.TABLE_NAME + " SET CONTENT = ?, MD5 = ?, MTIME = ?, PATH = ? WHERE NAME = ?";
// if 'different' is true, give bogus data so the plugin deployer will think the plugin on the file system is new
- String md5 = (!different) ? MD5Generator.getDigestString(file) : "TO BE UPDATED";
+ String md5 = (!different) ? MessageDigestGenerator.getDigestString(file) : "TO BE UPDATED";
long mtime = (!different) ? file.lastModified() : 0L;
InputStream fis = (!different) ? new FileInputStream(file) : new ByteArrayInputStream(new byte[0]);
int contentSize = (int) ((!different) ? file.length() : 0);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
index 2d61b94..bec6ebb 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
@@ -39,7 +39,7 @@ import org.rhq.core.clientapi.descriptor.AgentPluginDescriptorUtil;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.plugin.Plugin;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.core.concurrency.LatchedServiceCircularityException;
import org.rhq.enterprise.server.core.concurrency.LatchedServiceController;
@@ -348,7 +348,7 @@ public class ProductPluginDeployer {
String md5 = null;
try {
- md5 = MD5Generator.getDigestString(new File(deploymentInfo.url.toURI()));
+ md5 = MessageDigestGenerator.getDigestString(new File(deploymentInfo.url.toURI()));
} catch (Exception e) {
log.error("Error generating MD5 for plugin [" + pluginName + "]. Cause: " + e);
}
@@ -495,7 +495,7 @@ public class ProductPluginDeployer {
}
plugin.setVersion(version);
- plugin.setMD5(MD5Generator.getDigestString(localPluginFile));
+ plugin.setMD5(MessageDigestGenerator.getDigestString(localPluginFile));
// this manager is responsible for handling the munging of plugins that depend on other plugins
// since we assume we are called in the proper deployment order, this should not fail
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/content/test/ContentSourceManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/content/test/ContentSourceManagerBeanTest.java
index 0c7344a..c2a006a 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/content/test/ContentSourceManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/content/test/ContentSourceManagerBeanTest.java
@@ -60,7 +60,7 @@ import org.rhq.core.domain.resource.ResourceCategory;
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.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.enterprise.server.content.ChannelManagerLocal;
import org.rhq.enterprise.server.content.ContentManagerLocal;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
@@ -381,7 +381,7 @@ public class ContentSourceManagerBeanTest extends AbstractEJB3Test {
long modifiedTimestamp = channel.getLastModifiedDate();
Date modifiedDate = new Date(modifiedTimestamp);
String datehash = Integer.toString(modifiedDate.hashCode());
- assert metadataMd5.equals(MD5Generator.getDigestString(datehash)) : "-->" + metadataMd5;
+ assert metadataMd5.equals(MessageDigestGenerator.getDigestString(datehash)) : "-->" + metadataMd5;
channelManager.unsubscribeResourceFromChannels(overlord, resource1.getId(), new int[] { channelId });
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
index c45ed6f..aa90dc8 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
@@ -44,7 +44,7 @@ import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.AgentPluginDescriptorUtil;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.plugin.Plugin;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.stream.StreamUtil;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.resource.metadata.ResourceMetadataManagerLocal;
@@ -368,7 +368,7 @@ public class DatabaseAndFilePluginDeploymentTest extends AbstractEJB3Test {
Plugin pluginPojo = new Plugin(PLUGIN_NAME, file.getName());
pluginPojo.setVersion(descriptor.getVersion());
- pluginPojo.setMd5(MD5Generator.getDigestString(file));
+ pluginPojo.setMd5(MessageDigestGenerator.getDigestString(file));
pluginPojo.setMtime(testTimestamps.get(entry.getKey()).getTime());
testPlugins.put(entry.getKey(), pluginPojo);
}
@@ -431,7 +431,7 @@ public class DatabaseAndFilePluginDeploymentTest extends AbstractEJB3Test {
private void assertPluginOnFilesystem(Plugin plugin) throws Exception {
File file = new File(DEPLOY_LOCATION, plugin.getPath());
String version = AgentPluginDescriptorUtil.getPluginVersion(file, null).toString();
- String md5 = MD5Generator.getDigestString(file);
+ String md5 = MessageDigestGenerator.getDigestString(file);
long mtime = file.lastModified();
Plugin filePlugin = new Plugin(PLUGIN_NAME, file.getName());
filePlugin.setMd5(md5);
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
index 74cc0b3..f4b614f 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
@@ -49,7 +49,7 @@ import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.metadata.ResourceMetadataManagerLocal;
@@ -125,7 +125,7 @@ public class UpdateSubsytemTestBase extends AbstractEJB3Test {
protected void registerPlugin(String pathToDescriptor, String versionOverride) throws Exception {
pathToDescriptor = COMMON_PATH_PREFIX + getSubsystemDirectory() + "/" + pathToDescriptor;
System.out.println("Registering plugin with descriptor [" + pathToDescriptor + "]...");
- String md5 = MD5Generator.getDigestString(pathToDescriptor);
+ String md5 = MessageDigestGenerator.getDigestString(pathToDescriptor);
Plugin testPlugin = new Plugin(PLUGIN_NAME, "foo.jar", md5);
testPlugin.setDisplayName("ResourceMetaDataManagerBeanTest: " + pathToDescriptor);
PluginDescriptor descriptor = loadPluginDescriptor(pathToDescriptor);
diff --git a/modules/enterprise/server/plugins/disk/src/main/java/org/rhq/enterprise/server/plugins/disk/DiskSource.java b/modules/enterprise/server/plugins/disk/src/main/java/org/rhq/enterprise/server/plugins/disk/DiskSource.java
index b44cf71..fd6a96e 100644
--- a/modules/enterprise/server/plugins/disk/src/main/java/org/rhq/enterprise/server/plugins/disk/DiskSource.java
+++ b/modules/enterprise/server/plugins/disk/src/main/java/org/rhq/enterprise/server/plugins/disk/DiskSource.java
@@ -34,7 +34,7 @@ import org.rhq.core.clientapi.server.plugin.content.PackageSyncReport;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertyMap;
-import org.rhq.core.util.MD5Generator;
+import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.file.ContentFileInfo;
import org.rhq.core.util.file.ContentFileInfoFactory;
@@ -188,7 +188,7 @@ public class DiskSource implements ContentSourceAdapter {
}
ContentFileInfo fileInfo = ContentFileInfoFactory.createContentFileInfo(file);
- String md5 = MD5Generator.getDigestString(file);
+ String md5 = MessageDigestGenerator.getDigestString(file);
String name = file.getName();
String version = fileInfo.getVersion(md5);
String packageTypeName = supportedPackageType.packageTypeName;
commit 37f3201ed0ef9edb24a9dd70fabc981e02ed3351
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 15 11:48:06 2009 -0400
Updating test to clean up after itself
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index c98267c..e2a8df4 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -949,6 +949,10 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
}
finally {
getTransactionManager().rollback();
+
+ getTransactionManager().begin();
+ delete(config);
+ getTransactionManager().commit();
}
}
commit 07ae4773630ec3364d7dffc6573fbfef3d2efbcf
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 15 11:43:56 2009 -0400
Adding test for findRawConfigurationById()
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index 3906cd7..c98267c 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -933,13 +933,32 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
}
@Test
- public void testFindRawConfigurationsByConfigurationId() throws Exception {
+ public void testFindRawConfigurationById() throws Exception {
Configuration config = persistNewConfigWithRawConfigs();
getTransactionManager().begin();
EntityManager entityMgr = getEntityManager();
try {
+ for (RawConfiguration rawConfig : config.getRawConfigurations()) {
+ assertNotNull(
+ "Failed to find raw config by id[" + rawConfig.getId() + "]",
+ entityMgr.find(RawConfiguration.class, rawConfig.getId())
+ );
+ }
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ @Test
+ public void testFindRawConfigurationsByConfigurationId() throws Exception {
+ Configuration config = persistNewConfigWithRawConfigs();
+
+ getTransactionManager().begin();
+
+ try {
Collection<RawConfiguration> rawConfigs = configurationManager.findRawConfigurationsByConfigurationId(
config.getId());
commit d39a3320106c91c3491d0a4500f189a8ce71e6d8
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 15 11:36:08 2009 -0400
Adding automated test for new method, findRawConfigurationsByConfigurationId()
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
index b7cd057..3906cd7 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBeanTest.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Collection;
import javax.persistence.EntityManager;
@@ -45,6 +46,7 @@ import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.group.GroupPluginConfigurationUpdate;
import org.rhq.core.domain.discovery.AvailabilityReport;
import org.rhq.core.domain.discovery.InventoryReport;
@@ -930,6 +932,63 @@ public class ConfigurationManagerBeanTest extends AbstractEJB3Test {
}
}
+ @Test
+ public void testFindRawConfigurationsByConfigurationId() throws Exception {
+ Configuration config = persistNewConfigWithRawConfigs();
+
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+
+ try {
+ Collection<RawConfiguration> rawConfigs = configurationManager.findRawConfigurationsByConfigurationId(
+ config.getId());
+
+ assertEquals("Failed to find raw configs for " + config, config.getRawConfigurations().size(), rawConfigs.size());
+ }
+ finally {
+ getTransactionManager().rollback();
+
+ getTransactionManager().begin();
+ delete(config);
+ getTransactionManager().commit();
+ }
+ }
+
+ Configuration persistNewConfigWithRawConfigs() throws Exception {
+ getTransactionManager().begin();
+
+ Configuration config = new Configuration();
+ config.addRawConfiguration(createRawConfiguration("12345"));
+ config.addRawConfiguration(createRawConfiguration("54321"));
+
+ persist(config);
+
+ getTransactionManager().commit();
+
+ return config;
+ }
+
+ RawConfiguration createRawConfiguration(String sha256) {
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(new byte[] {});
+ rawConfig.setSha256(sha256);
+
+ return rawConfig;
+ }
+
+ void persist(Object entity) throws Exception {
+ EntityManager entityMgr = getEntityManager();
+ getEntityManager().persist(entity);
+ entityMgr.flush();
+ entityMgr.clear();
+ }
+
+ void delete(Configuration configuration) {
+ EntityManager entityMgr = getEntityManager();
+ Configuration managedConfig = entityMgr.find(Configuration.class, configuration.getId());
+ entityMgr.remove(managedConfig);
+ }
+
private class TestServices implements ConfigurationAgentService, DiscoveryAgentService {
private Configuration savedConfiguration = null;
commit 515471d6ed7a0867a8ef84ade0c59d19945e8347
Author: John Sanda <john(a)localhost.localdomain>
Date: Wed Oct 14 20:31:04 2009 -0400
Adding methods for retrieving raw configurations.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
index 6b742f2..6a7d327 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerBean.java
@@ -24,6 +24,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -56,6 +58,7 @@ import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.composite.ConfigurationUpdateComposite;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.group.AbstractGroupConfigurationUpdate;
@@ -1845,4 +1848,18 @@ public class ConfigurationManagerBean implements ConfigurationManagerLocal, Conf
return update;
}
+
+ public Collection<RawConfiguration> findRawConfigurationsByConfigurationId(int configId) {
+ Configuration config = entityManager.find(Configuration.class, configId);
+
+ if (config == null) {
+ return Collections.EMPTY_LIST;
+ }
+
+ return config.getRawConfigurations();
+ }
+
+ public RawConfiguration findRawConfigurationById(int rawConfigId) {
+ return entityManager.find(RawConfiguration.class, rawConfigId);
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
index 001738a..f96a454 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/ConfigurationManagerLocal.java
@@ -18,20 +18,15 @@
*/
package org.rhq.enterprise.server.configuration;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.Local;
-
import org.jetbrains.annotations.Nullable;
import org.quartz.SchedulerException;
-
import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.AbstractResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
+import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.composite.ConfigurationUpdateComposite;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -46,6 +41,11 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.configuration.job.GroupPluginConfigurationUpdateJob;
import org.rhq.enterprise.server.resource.ResourceNotFoundException;
+import javax.ejb.Local;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
/**
* The configuration manager which allows you to request resource configuration changes, view current resource
* configuration and previous update history and view/edit plugin configuration.
@@ -472,4 +472,8 @@ public interface ConfigurationManagerLocal {
*/
ConfigurationDefinition getPackageTypeConfigurationDefinition(Subject subject, int packageTypeId);
+ Collection<RawConfiguration> findRawConfigurationsByConfigurationId(int configId);
+
+ RawConfiguration findRawConfigurationById(int rawConfigId);
+
}
\ No newline at end of file
commit 362da14ec5c6c45206ddc3773ff2c0d4d7903cc5
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 15:23:49 2009 -0400
Reverting to previous working version to resolve compilation errors.
diff --git a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
index a932df2..308990a 100644
--- a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
+++ b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
@@ -18,50 +18,22 @@
*/
package org.rhq.plugins.hosts;
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
-import org.rhq.core.domain.configuration.Property;
-import org.rhq.core.domain.configuration.PropertyList;
-import org.rhq.core.domain.configuration.PropertyMap;
-import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.AvailabilityType;
-import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
-import org.rhq.core.pluginapi.inventory.ResourceComponent;
import org.rhq.core.pluginapi.inventory.ResourceContext;
-import org.rhq.plugins.hosts.helper.Hosts;
-import org.rhq.plugins.hosts.helper.HostsComponentHelper;
-import org.rhq.plugins.hosts.helper.HostsEntry;
+import org.rhq.plugins.augeas.AugeasConfigurationComponent;
+import org.rhq.plugins.hosts.helper.NonAugeasHostsConfigurationDelegate;
/**
* The ResourceComponent for the "Hosts File" ResourceType.
*
* @author Ian Springer
*/
-public class HostsComponent implements ResourceComponent, ConfigurationFacet {
- public static final String PATH_PROP = "path";
-
- private final Log log = LogFactory.getLog(this.getClass());
-
- private ResourceContext resourceContext;
- private File hostsFile;
-
- public void start(ResourceContext resourceContext) throws InvalidPluginConfigurationException, Exception {
- this.resourceContext = resourceContext;
- this.hostsFile = HostsComponentHelper.getHostsFile(this.resourceContext.getPluginConfiguration());
- HostsComponentHelper.validateHostFileExists(this.hostsFile);
-
- return;
+public class HostsComponent extends AugeasConfigurationComponent {
+ public void start(ResourceContext resourceContext) throws InvalidPluginConfigurationException, Exception {
+ super.start(resourceContext);
}
public void stop() {
@@ -69,107 +41,28 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
}
public AvailabilityType getAvailability() {
- try {
- HostsComponentHelper.validateHostFileExists(this.hostsFile);
- return AvailabilityType.UP;
- } catch (InvalidPluginConfigurationException e) {
- log.debug("Hosts file Resource is down: " + e.getLocalizedMessage());
- return AvailabilityType.DOWN;
- }
+ return super.getAvailability();
}
- public Configuration loadResourceConfiguration() throws Exception {
- Configuration resourceConfig = new Configuration();
- Hosts hosts = Hosts.load(this.hostsFile);
- resourceConfig.setNotes("Loaded at " + new Date());
-
- PropertyList entriesProp = new PropertyList("entries");
- resourceConfig.put(entriesProp);
-
- Set<String> ipAddressesWithDuplicateEntries = hosts.getIpAddressesWithDuplicateEntries();
- if (!ipAddressesWithDuplicateEntries.isEmpty()) {
- log.debug("Hosts file [" + this.hostsFile + "] contains duplicate entries for the following IP addresses: "
- + ipAddressesWithDuplicateEntries);
- }
- Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
- // if (!namesWithDuplicateEntries.isEmpty()) {
- // log.error("Hosts file [" + this.hostsFile + "] contains duplicate entries for the following names: "
- // + namesWithDuplicateEntries);
- // }
-
- for (HostsEntry entry : hosts.getEntries()) {
- PropertyMap entryProp = new PropertyMap("entry");
- entriesProp.add(entryProp);
-
- PropertySimple ipAddressProp = new PropertySimple("ipAddress", entry.getIpAddress());
- entryProp.put(ipAddressProp);
-
- PropertySimple canonicalNameProp = new PropertySimple("canonicalName", entry.getCanonicalName());
- // if (namesWithDuplicateEntries.contains(entry.getCanonicalName())) {
- // canonicalNameProp.setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
- // }
- entryProp.put(canonicalNameProp);
-
- StringBuilder aliasesPropValue = new StringBuilder();
- boolean foundDuplicateName = false;
- for (String alias : entry.getAliases()) {
- if (namesWithDuplicateEntries.contains(alias)) {
- foundDuplicateName = true;
- }
- aliasesPropValue.append(alias).append("\n");
- }
- if (!entry.getAliases().isEmpty()) {
- // Chop the final newline char.
- aliasesPropValue.deleteCharAt(aliasesPropValue.length() - 1);
- }
- PropertySimple aliasesProp = new PropertySimple("aliases", aliasesPropValue);
- // if (foundDuplicateName) {
- // aliasesProp
- // .setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
- // }
- entryProp.put(aliasesProp);
+ @Override
+ public Configuration loadResourceConfiguration() throws Exception
+ {
+ Configuration resourceConfig;
+ if (getAugeas() != null) {
+ resourceConfig = super.loadResourceConfiguration();
+ } else {
+ resourceConfig = new NonAugeasHostsConfigurationDelegate(this).loadResourceConfiguration();
}
-
return resourceConfig;
}
- public void updateResourceConfiguration(ConfigurationUpdateReport report) {
- Configuration resourceConfig = report.getConfiguration();
- Hosts newHosts = new Hosts();
-
- PropertyList entriesProp = resourceConfig.getList("entries");
- for (Property entryProp : entriesProp.getList()) {
- PropertyMap entryPropMap = (PropertyMap) entryProp;
- String ipAddress = entryPropMap.getSimple("ipAddress").getStringValue();
- String canonicalName = entryPropMap.getSimple("canonicalName").getStringValue();
- String aliases = entryPropMap.getSimpleValue("aliases", null);
- Set<String> aliasSet;
- if (aliases == null) {
- aliasSet = null;
- } else {
- String[] aliasArray = aliases.trim().split("\\s+");
- aliasSet = new LinkedHashSet<String>(aliasArray.length);
- for (String alias : aliasArray) {
- aliasSet.add(alias);
- }
- }
- HostsEntry entry = new HostsEntry(ipAddress, canonicalName, aliasSet);
- newHosts.addEntry(entry);
+ @Override
+ public void updateResourceConfiguration(ConfigurationUpdateReport report)
+ {
+ if (getAugeas() != null) {
+ super.updateResourceConfiguration(report);
+ } else {
+ new NonAugeasHostsConfigurationDelegate(this).updateResourceConfiguration(report);
}
-
- // Set<String> namesWithDuplicateEntries = newHosts.getNamesWithDuplicateEntries();
- // if (!namesWithDuplicateEntries.isEmpty()) {
- // report.setErrorMessage("There are duplicate entries for the following names: " + namesWithDuplicateEntries);
- // return;
- // }
-
- try {
- Hosts.store(newHosts, this.hostsFile);
- } catch (IOException e) {
- throw new RuntimeException("Failed to write hosts file [" + this.hostsFile + "].", e);
- }
-
- report.setStatus(ConfigurationUpdateStatus.SUCCESS);
- return;
}
}
commit 7a479360d52100b8d15f42b56d271f680d5a8e63
Merge: 05edc8b... 7aefd43...
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 14:51:09 2009 -0400
Merge branch 'master' into raw-config
commit 05edc8bd89aec8be5fcfdc71b6a335fc36723707
Merge: a92b537... a1fa9fd...
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 11:56:12 2009 -0400
Merge branch 'raw-config' of ssh://jsanda@git.fedorahosted.org/git/rhq/rhq into raw-config
Conflicts:
modules/core/dbutils/pom.xml
modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
modules/enterprise/gui/portal-war/pom.xml
modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
diff --cc modules/core/dbutils/pom.xml
index 3af6262,e2d9a91..cb40351
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@@ -1,275 -1,275 +1,275 @@@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-parent</artifactId>
- <version>1.4.0-SNAPSHOT</version>
- </parent>
-
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-dbutils</artifactId>
- <packaging>jar</packaging>
-
- <name>RHQ Database Utilities</name>
- <description>Database schema setup, upgrade and other utilities</description>
-
- <scm>
- <connection>scm:svn:http://svn.rhq-project.org/repos/rhq/tags/RHQ_1_2_0_EmbJopr_1_2_0...</connection>
- <developerConnection>scm:svn:http://svn.rhq-project.org/repos/rhq/tags/RHQ_1_2_0_EmbJopr_1_2_0...</developerConnection>
- </scm>
-
- <properties>
- <scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.59</db.schema.version>
- </properties>
-
- <dependencies>
-
- <!-- 3rd Party Deps -->
-
- <dependency>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.6.5</version>
- </dependency>
-
- <dependency>
- <groupId>ant</groupId>
- <artifactId>ant-launcher</artifactId>
- <version>1.6.5</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>net.sourceforge.jtds</groupId>
- <artifactId>jtds</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>test</scope>
- </dependency>
-
- </dependencies>
-
- <build>
- <plugins>
-
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <!-- generate the I18N resource bundles -->
- <taskdef name="i18n" classpathref="maven.runtime.classpath" classname="mazz.i18n.ant.I18NAntTask" />
-
- <i18n outputdir="${project.build.outputDirectory}" defaultlocale="en" verbose="false" append="false" verify="true">
- <classpath refid="maven.runtime.classpath" />
- <classfileset dir="${project.build.outputDirectory}">
- <include name="**/*I18NResourceKeys.class" />
- </classfileset>
- </i18n>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <id>dbsetup-worker</id>
- <phase>test</phase>
- <configuration>
- <tasks>
- <property name="settings.localRepository" location="${user.home}/.m2/repository" />
- <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml">
- <property name="settings.localRepository" value="${settings.localRepository}" />
- <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
- <property name="ojdbc5.version" value="${ojdbc5.version}" />
- <property name="postgresql.version" value="${postgresql.version}" />
- <property name="h2.version" value="${h2.version}" />
- <property name="jtds.version" value="${jtds.version}" />
- <property name="task.classpath.property" refid="maven.test.classpath" />
- <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
- <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
- <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
- <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
- <property name="project.version" value="${project.version}" />
- <property name="db.schema.version" value="${db.schema.version}" />
- <property name="dbsetup" value="${dbsetup}" />
- <property name="dbsetup-uninstall" value="${dbsetup-uninstall}" />
- <property name="dbsetup-upgrade" value="${dbsetup-upgrade}" />
- <property name="dbsetup-export" value="${dbsetup-export}" />
- </ant>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <id>generate-dbsetup-dbupgrade-xml-files</id>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <property name="settings.localRepository" location="${user.home}/.m2/repository" />
- <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml" target="dbsetup-combine">
- <property name="settings.localRepository" value="${settings.localRepository}" />
- <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
- <property name="ojdbc5.version" value="${ojdbc5.version}" />
- <property name="postgresql.version" value="${postgresql.version}" />
- <property name="h2.version" value="${h2.version}" />
- <property name="jtds.version" value="${jtds.version}" />
- <property name="task.classpath.property" refid="maven.test.classpath" />
- <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
- <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
- <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
- <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
- <property name="project.version" value="${project.version}" />
- <property name="db.schema.version" value="${db.schema.version}" />
- </ant>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <!--
- This execution will abort the build if the database schema is not up to date.
- If you want the build to continue, regardless of your currently installed schema,
- then pass -Ddbsetup-do-not-check-schema to the mvn command line.
- -->
- <id>test-db-schema-version</id>
- <phase>test</phase>
- <configuration>
- <tasks>
- <property name="settings.localRepository" location="${user.home}/.m2/repository" />
- <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml" target="dbsetup-check-schema">
- <property name="settings.localRepository" value="${settings.localRepository}" />
- <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
- <property name="ojdbc5.version" value="${ojdbc5.version}" />
- <property name="postgresql.version" value="${postgresql.version}" />
- <property name="h2.version" value="${h2.version}" />
- <property name="jtds.version" value="${jtds.version}" />
- <property name="task.classpath.property" refid="maven.test.classpath" />
- <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
- <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
- <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
- <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
- <property name="project.version" value="${project.version}" />
- <property name="db.schema.version" value="${db.schema.version}" />
- <property name="rhq.ds.driver-class" value="${rhq.test.ds.driver-class}" />
- <property name="dbsetup-do-not-check-schema" value="${dbsetup-do-not-check-schema}" />
- </ant>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- </executions>
- </plugin>
-
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <systemProperties>
- <property>
- <name>DatabaseTest.nofail</name>
- <value>${DatabaseTest.nofail}</value>
- </property>
- <property>
- <name>AntDatabaseTest.test-resources</name>
- <value>${basedir}/src/test/resources</value>
- </property>
- </systemProperties>
- <!-- The below is required for tests to run against Oracle. -->
- <additionalClasspathElements>
- <!--<additionalClasspathElement>${settings.localRepository}/ojdbc14/ojdbc14/${ojdbc14.version}/ojdbc14-${ojdbc14.version}.jar</additionalClasspathElement>-->
- <additionalClasspathElement>${settings.localRepository}/com/oracle/ojdbc5/${ojdbc5.version}/ojdbc5-${ojdbc5.version}.jar</additionalClasspathElement>
- </additionalClasspathElements>
- </configuration>
- </plugin>
-
- </plugins>
- </build>
-
- <profiles>
-
- <profile>
- <id>dev</id>
-
- <properties>
- <rhq.rootDir>../../..</rhq.rootDir>
- <rhq.containerDir>${rhq.rootDir}/${rhq.defaultDevContainerPath}</rhq.containerDir>
- <rhq.deploymentDir>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/lib</rhq.deploymentDir>
- </properties>
-
- <build>
- <plugins>
-
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
- <executions>
-
- <execution>
- <id>deploy</id>
- <phase>compile</phase>
- <configuration>
- <tasks>
- <mkdir dir="${rhq.deploymentDir}" />
- <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar" />
- <echo>*** Updating ${deployment.file}...</echo>
- <jar destfile="${deployment.file}" basedir="${project.build.outputDirectory}" />
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <id>undeploy</id>
- <phase>clean</phase>
- <configuration>
- <tasks>
- <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar" />
- <echo>*** Deleting ${deployment.file}...</echo>
- <delete file="${deployment.file}" />
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- </executions>
- </plugin>
-
- </plugins>
- </build>
- </profile>
-
- </profiles>
-
-</project>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-parent</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-dbutils</artifactId>
+ <packaging>jar</packaging>
+
+ <name>RHQ Database Utilities</name>
+ <description>Database schema setup, upgrade and other utilities</description>
+
+ <scm>
+ <connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/core/dbutils</connection>
+ <developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/core/dbutils</developerConnection>
+ </scm>
+
+ <properties>
+ <scm.module.path>modules/core/dbutils/</scm.module.path>
+ <db.schema.version>2.59</db.schema.version>
+ </properties>
+
+ <dependencies>
+
+ <!-- 3rd Party Deps -->
+
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ <version>1.6.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-launcher</artifactId>
+ <version>1.6.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sourceforge.jtds</groupId>
+ <artifactId>jtds</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <!-- generate the I18N resource bundles -->
+ <taskdef name="i18n" classpathref="maven.runtime.classpath" classname="mazz.i18n.ant.I18NAntTask" />
+
+ <i18n outputdir="${project.build.outputDirectory}" defaultlocale="en" verbose="false" append="false" verify="true">
+ <classpath refid="maven.runtime.classpath" />
+ <classfileset dir="${project.build.outputDirectory}">
+ <include name="**/*I18NResourceKeys.class" />
+ </classfileset>
+ </i18n>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>dbsetup-worker</id>
+ <phase>test</phase>
+ <configuration>
+ <tasks>
+ <property name="settings.localRepository" location="${user.home}/.m2/repository" />
+ <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml">
+ <property name="settings.localRepository" value="${settings.localRepository}" />
+ <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
+ <property name="ojdbc5.version" value="${ojdbc5.version}" />
+ <property name="postgresql.version" value="${postgresql.version}" />
+ <property name="h2.version" value="${h2.version}" />
+ <property name="jtds.version" value="${jtds.version}" />
+ <property name="task.classpath.property" refid="maven.test.classpath" />
+ <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
+ <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
+ <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
+ <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
+ <property name="project.version" value="${project.version}" />
+ <property name="db.schema.version" value="${db.schema.version}" />
+ <property name="dbsetup" value="${dbsetup}" />
+ <property name="dbsetup-uninstall" value="${dbsetup-uninstall}" />
+ <property name="dbsetup-upgrade" value="${dbsetup-upgrade}" />
+ <property name="dbsetup-export" value="${dbsetup-export}" />
+ </ant>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>generate-dbsetup-dbupgrade-xml-files</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <property name="settings.localRepository" location="${user.home}/.m2/repository" />
+ <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml" target="dbsetup-combine">
+ <property name="settings.localRepository" value="${settings.localRepository}" />
+ <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
+ <property name="ojdbc5.version" value="${ojdbc5.version}" />
+ <property name="postgresql.version" value="${postgresql.version}" />
+ <property name="h2.version" value="${h2.version}" />
+ <property name="jtds.version" value="${jtds.version}" />
+ <property name="task.classpath.property" refid="maven.test.classpath" />
+ <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
+ <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
+ <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
+ <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
+ <property name="project.version" value="${project.version}" />
+ <property name="db.schema.version" value="${db.schema.version}" />
+ </ant>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <!--
+ This execution will abort the build if the database schema is not up to date.
+ If you want the build to continue, regardless of your currently installed schema,
+ then pass -Ddbsetup-do-not-check-schema to the mvn command line.
+ -->
+ <id>test-db-schema-version</id>
+ <phase>test</phase>
+ <configuration>
+ <tasks>
+ <property name="settings.localRepository" location="${user.home}/.m2/repository" />
+ <ant antfile="${basedir}/src/main/scripts/dbsetup-build.xml" target="dbsetup-check-schema">
+ <property name="settings.localRepository" value="${settings.localRepository}" />
+ <!--<property name="ojdbc14.version" value="${ojdbc14.version}" />-->
+ <property name="ojdbc5.version" value="${ojdbc5.version}" />
+ <property name="postgresql.version" value="${postgresql.version}" />
+ <property name="h2.version" value="${h2.version}" />
+ <property name="jtds.version" value="${jtds.version}" />
+ <property name="task.classpath.property" refid="maven.test.classpath" />
+ <property name="rhq.ds.type-mapping" value="${rhq.test.ds.type-mapping}" />
+ <property name="rhq.ds.connection-url" value="${rhq.test.ds.connection-url}" />
+ <property name="rhq.ds.user-name" value="${rhq.test.ds.user-name}" />
+ <property name="rhq.ds.password" value="${rhq.test.ds.password}" />
+ <property name="project.version" value="${project.version}" />
+ <property name="db.schema.version" value="${db.schema.version}" />
+ <property name="rhq.ds.driver-class" value="${rhq.test.ds.driver-class}" />
+ <property name="dbsetup-do-not-check-schema" value="${dbsetup-do-not-check-schema}" />
+ </ant>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>DatabaseTest.nofail</name>
+ <value>${DatabaseTest.nofail}</value>
+ </property>
+ <property>
+ <name>AntDatabaseTest.test-resources</name>
+ <value>${basedir}/src/test/resources</value>
+ </property>
+ </systemProperties>
+ <!-- The below is required for tests to run against Oracle. -->
+ <additionalClasspathElements>
+ <!--<additionalClasspathElement>${settings.localRepository}/ojdbc14/ojdbc14/${ojdbc14.version}/ojdbc14-${ojdbc14.version}.jar</additionalClasspathElement>-->
+ <additionalClasspathElement>${settings.localRepository}/com/oracle/ojdbc5/${ojdbc5.version}/ojdbc5-${ojdbc5.version}.jar</additionalClasspathElement>
+ </additionalClasspathElements>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+
+ <profiles>
+
+ <profile>
+ <id>dev</id>
+
+ <properties>
+ <rhq.rootDir>../../..</rhq.rootDir>
+ <rhq.containerDir>${rhq.rootDir}/${rhq.defaultDevContainerPath}</rhq.containerDir>
+ <rhq.deploymentDir>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/lib</rhq.deploymentDir>
+ </properties>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+
+ <execution>
+ <id>deploy</id>
+ <phase>compile</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="${rhq.deploymentDir}" />
+ <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar" />
+ <echo>*** Updating ${deployment.file}...</echo>
+ <jar destfile="${deployment.file}" basedir="${project.build.outputDirectory}" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>undeploy</id>
+ <phase>clean</phase>
+ <configuration>
+ <tasks>
+ <property name="deployment.file" location="${rhq.deploymentDir}/${project.build.finalName}.jar" />
+ <echo>*** Deleting ${deployment.file}...</echo>
+ <delete file="${deployment.file}" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+
- </project>
++</project>
diff --cc modules/enterprise/gui/portal-war/pom.xml
index 4f38976,42a73c0..2483f80
--- a/modules/enterprise/gui/portal-war/pom.xml
+++ b/modules/enterprise/gui/portal-war/pom.xml
@@@ -1,586 -1,588 +1,586 @@@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-parent</artifactId>
- <version>1.4.0-SNAPSHOT</version>
- </parent>
-
- <groupId>org.rhq</groupId>
- <artifactId>rhq-portal</artifactId>
- <packaging>war</packaging>
-
- <name>RHQ Enterprise Portal</name>
- <description>the RHQ Enterprise Portal webapp</description>
-
- <scm>
- <connection>scm:svn:http://svn.rhq-project.org/repos/rhq/trunk/modules/enterprise/gui...</connection>
- <developerConnection>scm:svn:http://svn.rhq-project.org/repos/rhq/trunk/modules/enterprise/gui...</developerConnection>
- </scm>
-
- <properties>
- <scm.module.path>modules/enterprise/gui/portal-war/</scm.module.path>
-
- <!-- dependency versions -->
- <el.version>1.0</el.version>
- <jsf-facelets.version>1.1.14</jsf-facelets.version>
- <seam.version>2.1.0.SP1</seam.version>
-
- <product.shortName>RHQ</product.shortName>
- <product.name>RHQ</product.name>
- <product.fullName>RHQ</product.fullName>
- <product.url.domain>rhq-project.org</product.url.domain>
- <product.sales.email>sales(a)rhq-project.org</product.sales.email>
- <product.support.email>info(a)rhq-project.org</product.support.email>
- <product.version>${project.version}</product.version>
- <product.help.doc.root>http://support.rhq-project.org/display/RHQ/</product.help.doc.root>
- </properties>
-
- <dependencies>
-
- <!-- Internal Deps -->
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-domain</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope> <!-- by rhq.ear (as ejb-jar) -->
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-gui</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-enterprise-server</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope> <!-- by rhq.ear (as ejb-jar) -->
- </dependency>
-
- <dependency>
- <groupId>org.rhq</groupId>
- <artifactId>rhq-core-util</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope> <!-- by rhq.ear -->
- </dependency>
-
- <!-- 3rd Party Deps -->
-
- <dependency>
- <groupId>com.sun.facelets</groupId>
- <artifactId>jsf-facelets</artifactId>
- <version>${jsf-facelets.version}</version>
- </dependency>
-
- <!-- NOTE: Do *not* set this to provided scope. The version that comes with AS 4.2 is not compatible w/ Ajax4JSF. -->
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2</version>
- </dependency>
-
- <dependency>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- <version>1.2.1</version>
- </dependency>
-
- <dependency>
- <groupId>commons-el</groupId>
- <artifactId>commons-el</artifactId>
- <version>1.0</version>
- </dependency>
-
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>1.2</version>
- </dependency>
-
- <dependency>
- <groupId>commons-httpclient</groupId>
- <artifactId>commons-httpclient</artifactId>
- <version>3.0.1</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>1.3.1</version>
- </dependency>
-
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.0.4</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>1.1.4</version>
- </dependency>
-
- <dependency>
- <groupId>hibernate</groupId>
- <artifactId>hibernate3</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- used by a test JSP -->
- <dependency>
- <groupId>hibernate-entitymanager</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- needed for referenced domain entities that use Hibernate annotations (due to JDK5 bug) -->
- <dependency>
- <groupId>hibernate-annotations</groupId>
- <artifactId>hibernate-annotations</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.el</groupId>
- <artifactId>el-api</artifactId>
- <version>${el.version}</version>
- <scope>provided</scope> <!-- by JBossAS Tomcat -->
- </dependency>
-
- <!-- transitive dependency needed for JspC -->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.4</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.faces</groupId>
- <artifactId>jsf-api</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- We leverage a few utility classes (HtmlUtils, etc.) from the JSF RI impl jar. -->
- <dependency>
- <groupId>javax.faces</groupId>
- <artifactId>jsf-impl</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <version>1.3.1</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- needed for referenced domain entities that use JPA annotations (due to JDK5 bug) -->
- <dependency>
- <groupId>javax.persistence</groupId>
- <artifactId>persistence-api</artifactId>
- <version>1.0</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.1.2</version>
- </dependency>
-
- <!-- needed for EJB3 annotations (e.g. ApplicationException) -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-ejb3x</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-j2ee</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- used by org.jboss.on.enterprise.ui.servlet.startupShutdownListener -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-system</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- used by org.jboss.on.enterprise.ui.converter.MD5HashConverter -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jbosssx</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- Needed due to JDK 1.5 bug. -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-annotations-ejb3</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <!-- used by DisplayTag_test.jsp -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.2</version>
- </dependency>
-
- <dependency>
- <groupId>org.opensymphony.quartz</groupId>
- <artifactId>quartz</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS itself, which the container build has packaged with 1.6.5 -->
- </dependency>
-
- <dependency>
- <groupId>org.opensymphony.quartz</groupId>
- <artifactId>quartz-oracle</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>provided</scope> <!-- by JBossAS itself, which the container build has packaged with 1.6.5 -->
- </dependency>
-
- <!-- == Seam Related Dependencies ================ -->
-
- <dependency>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-seam</artifactId>
- <version>${seam.version}</version>
- <exclusions>
- <exclusion>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-seam-ui</artifactId>
- <version>${seam.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-seam-debug</artifactId>
- <version>${seam.version}</version>
- <!-- should be pulling this in directly ourselves, not relying
- jboss-seam-debug to provide it -->
- <exclusions>
- <exclusion>
- <groupId>com.sun.facelets</groupId>
- <artifactId>jsf-facelets</artifactId>
- </exclusion>
- </exclusions>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>org.jvnet</groupId>
- <artifactId>inflector</artifactId>
- <version>0.7.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.richfaces.framework</groupId>
- <artifactId>richfaces-api</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- </dependency>
-
- <dependency>
- <groupId>org.richfaces.framework</groupId>
- <artifactId>richfaces-impl</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- </dependency>
-
- <dependency>
- <groupId>org.richfaces.ui</groupId>
- <artifactId>richfaces-ui</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- </dependency>
-
- <dependency>
- <groupId>org.snmp4j</groupId>
- <artifactId>snmp4j</artifactId>
- <version>1.7.1</version>
- </dependency>
-
- <dependency>
- <groupId>struts</groupId>
- <artifactId>struts</artifactId>
- <version>1.2.9</version>
- <exclusions>
- <exclusion>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <!-- provided by JBossAS default config -->
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>struts</groupId>
- <artifactId>struts-el</artifactId>
- <version>1.2.9</version>
- </dependency>
-
- <dependency>
- <groupId>struts-menu</groupId>
- <artifactId>struts-menu</artifactId>
- <version>2.3</version>
- </dependency>
-
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
-
- <!-- new jetty based jsp compiler -->
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-jspc-plugin</artifactId>
- <version>6.1.5</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>2.5.1</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>2.0.2</version>
- <scope>provided</scope> <!-- by JBossAS -->
- </dependency>
-
- </dependencies>
-
- <build>
- <finalName>rhq-portal</finalName>
- <plugins>
-
- <plugin>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.1-alpha-1</version>
- <configuration>
- <webappDirectory>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/${rhq.deploymentName}</webappDirectory>
- <archive>
- <manifest>
- <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
- <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
- </manifest>
- <manifestEntries>
- <Build-Number>${buildNumber}</Build-Number>
- </manifestEntries>
- </archive>
- <webResources>
- <resource>
- <filtering>false</filtering>
- <directory>${basedir}/src/main/webapp</directory>
- </resource>
- <resource>
- <filtering>true</filtering>
- <directory>${basedir}/src/main/webapp-filtered</directory>
- </resource>
- </webResources>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
- <executions>
- <execution>
- <id>Generate I18N Resource Bundles</id>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <!-- generate the I18N resource bundles -->
- <taskdef name="i18n" classpathref="maven.runtime.classpath" classname="mazz.i18n.ant.I18NAntTask" />
- <i18n outputdir="${project.build.outputDirectory}" defaultlocale="en" verbose="false" append="false" verify="true">
- <classpath refid="maven.runtime.classpath" />
- <classfileset dir="${project.build.outputDirectory}">
- <include name="**/*I18NResourceKeys.class" />
- </classfileset>
- </i18n>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- <execution>
- <id>Maintain an unfiltered copy of i18n properties files</id>
- <phase>process-classes</phase>
- <configuration>
- <tasks>
- <copy todir="${project.build.outputDirectory}">
- <fileset dir="src/main/webapp-filtered/WEB-INF/classes">
- <include name="ApplicationResources.properties" />
- </fileset>
- <mapper type="glob" from="*" to="*.unfiltered" />
- </copy>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- </plugins>
-
- </build>
-
- <profiles>
-
- <profile>
- <id>dev</id>
-
- <properties>
- <rhq.rootDir>../../../..</rhq.rootDir>
- <rhq.containerDir>${rhq.rootDir}/${rhq.defaultDevContainerPath}</rhq.containerDir>
- <rhq.deploymentName>${project.build.finalName}.war</rhq.deploymentName>
- <rhq.deploymentDir>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/${rhq.deploymentName}</rhq.deploymentDir>
- </properties>
-
- <build>
- <plugins>
-
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
- <executions>
-
- <execution>
- <id>deploy-classes</id>
- <phase>compile</phase>
- <configuration>
- <tasks>
- <property name="classes.dir" location="${rhq.deploymentDir}/WEB-INF/classes" />
- <echo>*** Copying updated files from target/classes to ${classes.dir}...</echo>
- <copy todir="${classes.dir}" verbose="${rhq.verbose}">
- <fileset dir="target/classes" />
- </copy>
- <property name="deployment.dir" location="${rhq.deploymentDir}" />
- <echo>*** Copying updated files from src${file.separator}main${file.separator}webapp${file.separator} to ${deployment.dir}${file.separator}...</echo>
- <copy todir="${deployment.dir}" verbose="${rhq.verbose}">
- <fileset dir="${basedir}/src/main/webapp" />
- </copy>
- <!-- TODO: Also copy the files from src/main/webapp-filtered/, and then filter them ourselves. -->
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <id>deploy</id>
- <phase>package</phase>
- <configuration>
- <tasks>
- <property name="deployment.dir" location="${rhq.deploymentDir}" />
- <echo>*** Copying updated files from target${file.separator}${project.build.finalName}${file.separator} to ${deployment.dir}${file.separator}...</echo>
- <copy todir="${deployment.dir}" verbose="${rhq.verbose}">
- <fileset dir="${basedir}/target/${project.build.finalName}" />
- </copy>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- <execution>
- <id>undeploy</id>
- <phase>clean</phase>
- <configuration>
- <tasks>
- <property name="deployment.dir" location="${rhq.deploymentDir}" />
- <echo>*** Deleting ${deployment.dir}${file.separator}...</echo>
- <delete dir="${deployment.dir}" />
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
-
- </executions>
- </plugin>
-
- </plugins>
- </build>
- </profile>
-
- <profile>
- <id>dist</id>
-
- <build>
- <plugins>
-
- <plugin>
- <!-- See http://jetty.mortbay.org/jspc-maven-plugin/ -->
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-jspc-plugin</artifactId>
- <version>6.1.7</version>
- <configuration>
- <keepSources>false</keepSources>
- <validateXml>false</validateXml> <!-- TODO: set to true -->
- <generatedClasses>${project.build.outputDirectory}</generatedClasses>
- </configuration>
- <executions>
- <execution><goals><goal>jspc</goal></goals></execution>
- </executions>
- </plugin>
-
- </plugins>
- </build>
- </profile>
-
- </profiles>
-
- <repositories>
- <repository>
- <id>java.net-m1-releases</id>
- <name>Java.net Maven1 Repository - for javax.faces, javax.el, com.sun.el, and com.sun.facelets releases</name>
- <url>http://download.java.net/maven/1/</url>
- <layout>legacy</layout>
- </repository>
- </repositories>
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-parent</artifactId>
+ <version>1.4.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-portal</artifactId>
+ <packaging>war</packaging>
+
+ <name>RHQ Enterprise Portal</name>
+ <description>the RHQ Enterprise Portal webapp</description>
+
+ <scm>
+ <connection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/enterprise/gui/por...</connection>
+ <developerConnection>scm:git:ssh://git.fedorahosted.org/git/rhq.git/modules/enterprise/gui/por...</developerConnection>
+ </scm>
+
+ <properties>
+ <scm.module.path>modules/enterprise/gui/portal-war/</scm.module.path>
+
+ <!-- dependency versions -->
+ <el.version>1.0</el.version>
+ <jsf-facelets.version>1.1.14</jsf-facelets.version>
+ <seam.version>2.1.0.SP1</seam.version>
+
+ <product.shortName>RHQ</product.shortName>
+ <product.name>RHQ</product.name>
+ <product.fullName>RHQ</product.fullName>
+ <product.url.domain>rhq-project.org</product.url.domain>
+ <product.sales.email>sales(a)rhq-project.org</product.sales.email>
+ <product.support.email>info(a)rhq-project.org</product.support.email>
+ <product.version>${project.version}</product.version>
+ <product.help.doc.root>http://support.rhq-project.org/display/RHQ/</product.help.doc.root>
+ </properties>
+
+ <dependencies>
+
+ <!-- Internal Deps -->
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-domain</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope> <!-- by rhq.ear (as ejb-jar) -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-gui</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-enterprise-server</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope> <!-- by rhq.ear (as ejb-jar) -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.rhq</groupId>
+ <artifactId>rhq-core-util</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope> <!-- by rhq.ear -->
+ </dependency>
+
+ <!-- 3rd Party Deps -->
+
+ <dependency>
+ <groupId>com.sun.facelets</groupId>
+ <artifactId>jsf-facelets</artifactId>
+ <version>${jsf-facelets.version}</version>
+ </dependency>
+
+ <!-- NOTE: Do *not* set this to provided scope. The version that comes with AS 4.2 is not compatible w/ Ajax4JSF. -->
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-dbcp</groupId>
+ <artifactId>commons-dbcp</artifactId>
+ <version>1.2.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-el</groupId>
+ <artifactId>commons-el</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>1.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.0.1</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>1.1.4</version>
+ </dependency>
+
+ <dependency>
+ <groupId>hibernate</groupId>
+ <artifactId>hibernate3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- used by a test JSP -->
+ <dependency>
+ <groupId>hibernate-entitymanager</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- needed for referenced domain entities that use Hibernate annotations (due to JDK5 bug) -->
+ <dependency>
+ <groupId>hibernate-annotations</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.el</groupId>
+ <artifactId>el-api</artifactId>
+ <version>${el.version}</version>
+ <scope>provided</scope> <!-- by JBossAS Tomcat -->
+ </dependency>
+
+ <!-- transitive dependency needed for JspC -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-api</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- We leverage a few utility classes (HtmlUtils, etc.) from the JSF RI impl jar. -->
+ <dependency>
+ <groupId>javax.faces</groupId>
+ <artifactId>jsf-impl</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.3.1</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- needed for referenced domain entities that use JPA annotations (due to JDK5 bug) -->
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>persistence-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+
+ <!-- needed for EJB3 annotations (e.g. ApplicationException) -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2ee</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- used by org.jboss.on.enterprise.ui.servlet.startupShutdownListener -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-system</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- used by org.jboss.on.enterprise.ui.converter.MD5HashConverter -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbosssx</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- Needed due to JDK 1.5 bug. -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-annotations-ejb3</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <!-- used by DisplayTag_test.jsp -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.opensymphony.quartz</groupId>
+ <artifactId>quartz-oracle</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ <scope>provided</scope> <!-- by JBossAS itself, which the container build has packaged with 1.6.5 -->
+ </dependency>
+
+ <!-- == Seam Related Dependencies ================ -->
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam</artifactId>
+ <version>${seam.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>xml-apis</groupId>
+ <artifactId>xml-apis</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-ui</artifactId>
+ <version>${seam.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.seam</groupId>
+ <artifactId>jboss-seam-debug</artifactId>
+ <version>${seam.version}</version>
+ <!-- should be pulling this in directly ourselves, not relying
+ jboss-seam-debug to provide it -->
+ <exclusions>
+ <exclusion>
+ <groupId>com.sun.facelets</groupId>
+ <artifactId>jsf-facelets</artifactId>
+ </exclusion>
+ </exclusions>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jvnet</groupId>
+ <artifactId>inflector</artifactId>
+ <version>0.7.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.framework</groupId>
+ <artifactId>richfaces-api</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.framework</groupId>
+ <artifactId>richfaces-impl</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>richfaces-ui</artifactId>
+ <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
+ </dependency>
+
+ <dependency>
+ <groupId>org.snmp4j</groupId>
+ <artifactId>snmp4j</artifactId>
+ <version>1.7.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>struts</groupId>
+ <artifactId>struts</artifactId>
+ <version>1.2.9</version>
+ <exclusions>
+ <exclusion>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <!-- provided by JBossAS default config -->
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>struts</groupId>
+ <artifactId>struts-el</artifactId>
+ <version>1.2.9</version>
+ </dependency>
+
+ <dependency>
+ <groupId>struts-menu</groupId>
+ <artifactId>struts-menu</artifactId>
+ <version>2.3</version>
+ </dependency>
+
+ <dependency>
+ <groupId>taglibs</groupId>
+ <artifactId>standard</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+
+ <!-- new jetty based jsp compiler -->
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-jspc-plugin</artifactId>
+ <version>6.1.5</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.5.1</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.0.2</version>
+ <scope>provided</scope> <!-- by JBossAS -->
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>rhq-portal</finalName>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1-alpha-1</version>
+ <configuration>
+ <archive>
+ <manifest>
+ <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+ <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+ </manifest>
+ <manifestEntries>
+ <Build-Number>${buildNumber}</Build-Number>
+ </manifestEntries>
+ </archive>
+ <webResources>
+ <resource>
+ <filtering>false</filtering>
+ <directory>${basedir}/src/main/webapp</directory>
+ </resource>
+ <resource>
+ <filtering>true</filtering>
+ <directory>${basedir}/src/main/webapp-filtered</directory>
+ </resource>
+ </webResources>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <id>Generate I18N Resource Bundles</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <!-- generate the I18N resource bundles -->
+ <taskdef name="i18n" classpathref="maven.runtime.classpath" classname="mazz.i18n.ant.I18NAntTask" />
+ <i18n outputdir="${project.build.outputDirectory}" defaultlocale="en" verbose="false" append="false" verify="true">
+ <classpath refid="maven.runtime.classpath" />
+ <classfileset dir="${project.build.outputDirectory}">
+ <include name="**/*I18NResourceKeys.class" />
+ </classfileset>
+ </i18n>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>Maintain an unfiltered copy of i18n properties files</id>
+ <phase>process-classes</phase>
+ <configuration>
+ <tasks>
+ <copy todir="${project.build.outputDirectory}">
+ <fileset dir="src/main/webapp-filtered/WEB-INF/classes">
+ <include name="ApplicationResources.properties" />
+ </fileset>
+ <mapper type="glob" from="*" to="*.unfiltered" />
+ </copy>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+
+ </build>
+
+ <profiles>
+
+ <profile>
+ <id>dev</id>
+
+ <properties>
+ <rhq.rootDir>../../../..</rhq.rootDir>
+ <rhq.containerDir>${rhq.rootDir}/${rhq.defaultDevContainerPath}</rhq.containerDir>
+ <rhq.deploymentName>${project.build.finalName}.war</rhq.deploymentName>
+ <rhq.deploymentDir>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/${rhq.deploymentName}</rhq.deploymentDir>
+ </properties>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+
+ <execution>
+ <id>deploy-classes</id>
+ <phase>compile</phase>
+ <configuration>
+ <tasks>
+ <property name="classes.dir" location="${rhq.deploymentDir}/WEB-INF/classes" />
+ <echo>*** Copying updated files from target/classes to ${classes.dir}...</echo>
+ <copy todir="${classes.dir}" verbose="${rhq.verbose}">
+ <fileset dir="target/classes" />
+ </copy>
+ <property name="deployment.dir" location="${rhq.deploymentDir}" />
+ <echo>*** Copying updated files from src${file.separator}main${file.separator}webapp${file.separator} to ${deployment.dir}${file.separator}...</echo>
+ <copy todir="${deployment.dir}" verbose="${rhq.verbose}">
+ <fileset dir="${basedir}/src/main/webapp" />
+ </copy>
+ <!-- TODO: Also copy the files from src/main/webapp-filtered/, and then filter them ourselves. -->
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>deploy</id>
+ <phase>package</phase>
+ <configuration>
+ <tasks>
+ <property name="deployment.dir" location="${rhq.deploymentDir}" />
+ <echo>*** Copying updated files from target${file.separator}${project.build.finalName}${file.separator} to ${deployment.dir}${file.separator}...</echo>
+ <copy todir="${deployment.dir}" verbose="${rhq.verbose}">
+ <fileset dir="${basedir}/target/${project.build.finalName}" />
+ </copy>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ <execution>
+ <id>undeploy</id>
+ <phase>clean</phase>
+ <configuration>
+ <tasks>
+ <property name="deployment.dir" location="${rhq.deploymentDir}" />
+ <echo>*** Deleting ${deployment.dir}${file.separator}...</echo>
+ <delete dir="${deployment.dir}" />
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>dist</id>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <!-- See http://jetty.mortbay.org/jspc-maven-plugin/ -->
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-jspc-plugin</artifactId>
+ <version>6.1.7</version>
+ <configuration>
+ <keepSources>false</keepSources>
+ <validateXml>false</validateXml> <!-- TODO: set to true -->
+ <generatedClasses>${project.build.outputDirectory}</generatedClasses>
+ </configuration>
+ <executions>
+ <execution><goals><goal>jspc</goal></goals></execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+
+ <repositories>
+ <repository>
+ <id>java.net-m1-releases</id>
+ <name>Java.net Maven1 Repository - for javax.faces, javax.el, com.sun.el, and com.sun.facelets releases</name>
+ <url>http://download.java.net/maven/1/</url>
+ <layout>legacy</layout>
+ </repository>
+ </repositories>
+
- </project>
+ </project>
commit a92b53707df07dfac567e4f04abaf817d8cc4b6f
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 10:28:11 2009 -0400
Fixing column definition and deleting swap file that shouldn't have been committed.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index b4423eb..a31c8e6 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -99,7 +99,7 @@
</index>
<!-- List entries all have the same name -->
</table>
-e
+
<table name="RHQ_CONFIG_TEMPLATE">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="NAME" type="VARCHAR2" required="false" size="100"/>
@@ -119,4 +119,4 @@ e
<column name="MTIME" type="LONG" required="true"/>
</table>
-</dbsetup>
+</dbsetup>
\ No newline at end of file
commit 06771f97e3564a1776bc8a15cdef682010555eda
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 13 17:22:14 2009 -0400
Workaround for hosts files that cannot saved due to duplicate ipv4 and ipv6 entries
diff --git a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
index ed95283..85f3255 100644
--- a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
+++ b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
@@ -22,11 +22,6 @@
*/
package org.rhq.plugins.hosts.helper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
@@ -40,6 +35,11 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
/**
* A set of hosts file entries. The set may contain duplicate entries (i.e. entries for different IP addresses
* containing the same name, either as the canonical name or as an alias).
@@ -47,7 +47,7 @@ import java.util.Set;
* @author Ian Springer
*/
public class Hosts {
- private static final Log LOG = LogFactory.getLog(Hosts.class);
+ private static final Log LOG = LogFactory.getLog(Hosts.class);
private Set<HostsEntry> entries = new LinkedHashSet<HostsEntry>();
private Map<String, Set<HostsEntry>> ipAddressToEntriesMap = new HashMap<String, Set<HostsEntry>>();
@@ -94,12 +94,12 @@ public class Hosts {
@NotNull
public Set<HostsEntry> getEntriesByIpAddress(String ipAddress) {
Set<HostsEntry> entries = this.ipAddressToEntriesMap.get(ipAddress);
- return (entries != null) ? entries : Collections.<HostsEntry>emptySet();
+ return (entries != null) ? entries : Collections.<HostsEntry> emptySet();
}
public Set<HostsEntry> getEntriesByName(String canonicalName) {
Set<HostsEntry> entries = this.nameToEntriesMap.get(canonicalName);
- return (entries != null) ? entries : Collections.<HostsEntry>emptySet();
+ return (entries != null) ? entries : Collections.<HostsEntry> emptySet();
}
public Set<String> getIpAddressesWithDuplicateEntries() {
@@ -122,8 +122,7 @@ public class Hosts {
hosts.addEntry(entry);
}
}
- }
- finally {
+ } finally {
reader.close();
}
@@ -131,11 +130,11 @@ public class Hosts {
}
public static void store(Hosts hosts, File hostsFile) throws IOException {
- Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
- if (!namesWithDuplicateEntries.isEmpty()) {
- throw new IllegalArgumentException("Hosts contains duplicate entries for the following names: "
- + namesWithDuplicateEntries);
- }
+ // Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
+ // if (!namesWithDuplicateEntries.isEmpty()) {
+ // throw new IllegalArgumentException("Hosts contains duplicate entries for the following names: "
+ // + namesWithDuplicateEntries);
+ // }
if (!hostsFile.exists()) {
// If a hosts file doesn't already exist, create an empty one.
@@ -156,23 +155,22 @@ public class Hosts {
newHostsFileWriter.println(newLine);
}
}
- }
- finally {
+ } finally {
hostsFileReader.close();
}
// Write out any entries for IP addresses that did not have entries in the original file.
for (HostsEntry newEntry : hosts.getEntries()) {
if (!storedCanonicalNames.contains(newEntry.getCanonicalName())) {
- StringBuilder newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(newEntry.getCanonicalName());
+ StringBuilder newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(
+ newEntry.getCanonicalName());
for (String alias : newEntry.getAliases()) {
newLine.append("\t").append(alias);
}
newHostsFileWriter.println(newLine);
}
}
- }
- finally {
+ } finally {
newHostsFileWriter.close();
}
@@ -184,7 +182,8 @@ public class Hosts {
}
boolean backupSucceeded = hostsFile.renameTo(backupHostsFile);
if (!backupSucceeded) {
- throw new IOException("Failed to backup original hosts file [" + hostsFile + "] to [" + backupHostsFile + "].");
+ throw new IOException("Failed to backup original hosts file [" + hostsFile + "] to [" + backupHostsFile
+ + "].");
}
// And finally, rename the new hosts file (e.g. /etc/hosts-1234567890) to the actual hosts file (e.g. /etc/hosts).
@@ -221,7 +220,7 @@ public class Hosts {
String ipAddress = tokens[0];
if (tokens.length == 1) {
LOG.warn("Hosts file [" + hostsFile + "] contains invalid entry for IP address " + ipAddress
- + " - no canonical name is specified.");
+ + " - no canonical name is specified.");
}
String canonicalName = null;
@@ -229,10 +228,10 @@ public class Hosts {
if (tokens.length >= 2) {
canonicalName = tokens[1];
if (tokens.length >= 3) {
- aliasSet = new LinkedHashSet<String>(tokens.length - 2);
- for (int i = 2; i < tokens.length; i++) {
- aliasSet.add(tokens[i]);
- }
+ aliasSet = new LinkedHashSet<String>(tokens.length - 2);
+ for (int i = 2; i < tokens.length; i++) {
+ aliasSet.add(tokens[i]);
+ }
}
}
@@ -241,7 +240,7 @@ public class Hosts {
@Nullable
private static StringBuilder createNewLine(Hosts hosts, File hostsFile, SimpleUnixConfigFileLine existingLine,
- Set<String> storedCanonicalNames) {
+ Set<String> storedCanonicalNames) {
StringBuilder newLine;
String nonComment = existingLine.getNonComment();
String comment = existingLine.getComment();
@@ -252,15 +251,15 @@ public class Hosts {
if (!newEntries.isEmpty()) {
// replace the existing entry
HostsEntry newEntry = newEntries.iterator().next();
- LOG.debug("Replacing existing entry in hosts file [" + existingEntry + "] with new entry ["
- + newEntry + "]...");
+ LOG.debug("Replacing existing entry in hosts file [" + existingEntry + "] with new entry [" + newEntry
+ + "]...");
newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(newEntry.getCanonicalName());
for (String alias : newEntry.getAliases()) {
newLine.append("\t").append(alias);
}
// but still write out the existing comment
if (comment != null) {
- newLine.append(" #").append(comment);
+ newLine.append(" #").append(comment);
}
storedCanonicalNames.add(newEntry.getCanonicalName());
} else {
commit 90dde6984add80642162547623718ebfa24c0507
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 21:33:27 2009 -0400
Bumping up schema version in pom.xml
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 0befb0c..3af6262 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.58</db.schema.version>
+ <db.schema.version>2.59</db.schema.version>
</properties>
<dependencies>
@@ -272,4 +272,4 @@
</profiles>
-</project>
\ No newline at end of file
+</project>
commit ba847e4b4558a7bde0e84ee024fbd1b2ab5231cc
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 21:16:10 2009 -0400
Fixing syntax in setup and in upgrade scripts for RHQ_CONFIG foreign key.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 136f1cd..b4423eb 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -111,16 +111,12 @@ e
<table name="RHQ_RAW_CONFIG">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
- <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG(ID)"/>
<column name="PATH" type="VARCHAR2" required="false" size="512"/>
<column name="CONTENTS" type="BLOB" required="true"/>
<column name="SHA256" type="VARCHAR2" size="64" required="true"/>
<column name="CTIME" type="LONG" required="true"/>
<column name="MTIME" type="LONG" required="true"/>
-
- <index name="RHQ_RAW_idx_config_key" unique="false">
- <field ref="CONFIG_ID"/>
- </index>
</table>
-</dbsetup>
\ No newline at end of file
+</dbsetup>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 3efef48..948df51 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1570,10 +1570,14 @@ DB Upgrade:
nullable="false"/>
<schema-directSQL>
- <statement desc="Creating index on CONFIG_ID (INTEGER)">
- CREATE INDEX RHQ_RAW_idx_config_key ON RHQ_CONFIG (ID)
+ <statement desc="Creating RHQ_RAW_CONFIG foreign key relation to RHQ_CONFIG">
+ ALTER TABLE RHQ_RAW_CONFIG
+ ADD CONSTRAINT RHQ_RAW_CONFIG_CONFIG_ID_FK
+ FOREIGN KEY (CONFIG_ID)
+ REFERENCES RHQ_CONFIG (ID)
</statement>
</schema-directSQL>
+
</schemaSpec>
</dbupgrade>
commit 211536cf8fbee7c2db8d060960e8df77e09f8f47
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 20:45:19 2009 -0400
Adding config_id to rhq_raw_config table in upgrade script.
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 00d5573..3efef48 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1520,18 +1520,24 @@ DB Upgrade:
<schemaSpec version="2.59">
<schema-directSQL>
- <statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
- CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER )
+ <statement desc="Creating table RHQ_RAW_CONFIG">
+ CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER)
</statement>
</schema-directSQL>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" columnType="INTEGER" nullable="FALSE" />
<schema-createSequence name="RHQ_RAW_CONFIG_ID_SEQ" initial="10001"/>
<schema-directSQL>
<statement desc="Creating primary key for RHQ_PARTITION_EVENT">
- ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY ( ID )
+ ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY (ID)
</statement>
</schema-directSQL>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONFIG_ID" columnType="INTEGER"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CONFIG_ID"
+ columnType="INTEGER"
+ nullable="false"/>
+
<schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" columnType="VARCHAR2"/>
<schema-alterColumn table="RHQ_RAW_CONFIG"
column="PATH"
@@ -1562,6 +1568,12 @@ DB Upgrade:
column="MTIME"
columnType="LONG"
nullable="false"/>
+
+ <schema-directSQL>
+ <statement desc="Creating index on CONFIG_ID (INTEGER)">
+ CREATE INDEX RHQ_RAW_idx_config_key ON RHQ_CONFIG (ID)
+ </statement>
+ </schema-directSQL>
</schemaSpec>
</dbupgrade>
commit 0a75bfcbb145b328b8f7deea721a5f437bdac962
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 20:10:56 2009 -0400
Fixing syntax errors in dbupgrade script.
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 69cf483..00d5573 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1521,7 +1521,7 @@ DB Upgrade:
<schemaSpec version="2.59">
<schema-directSQL>
<statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
- CREATE TABLE RHQ_RAW_CONFIG ( _ID INTEGER )
+ CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER )
</statement>
</schema-directSQL>
<schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
@@ -1532,20 +1532,36 @@ DB Upgrade:
</statement>
</schema-directSQL>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" type="VARCHAR2"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="PATH" precision="512"/>
-
- <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" type="BLOB"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="CONTENTS" nullable="false"/>
-
- <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" type="VARCHAR2"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="SHA256" precision="64" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" columnType="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="PATH"
+ columnType="VARCHAR2"
+ precision="512"/>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" type="LONG"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="CTIME" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" columnType="BLOB"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CONTENTS"
+ columnType="BLOB"
+ nullable="false"/>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" type="LONG"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="MTIME" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" columnType="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="SHA256"
+ columnType="VARCHAR2"
+ precision="64"
+ nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" columnType="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CTIME"
+ columnType="LONG"
+ nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" columnType="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="MTIME"
+ columnType="LONG"
+ nullable="false"/>
</schemaSpec>
</dbupgrade>
commit b5da0d2b1755770465c87deebae058f6df684aa5
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 16:58:20 2009 -0400
Adding dbupgrade script for new raw config table.
Also adding @Column annotation for id field in RawConfiguration.java
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index d5a4e24..69cf483 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1518,6 +1518,36 @@ DB Upgrade:
<schema-addColumn table="RHQ_ALERT_DEFINITION" column="GROUP_ALERT_DEF_ID" columnType="INTEGER" />
</schemaSpec>
+ <schemaSpec version="2.59">
+ <schema-directSQL>
+ <statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
+ CREATE TABLE RHQ_RAW_CONFIG ( _ID INTEGER )
+ </statement>
+ </schema-directSQL>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
+ <schema-createSequence name="RHQ_RAW_CONFIG_ID_SEQ" initial="10001"/>
+ <schema-directSQL>
+ <statement desc="Creating primary key for RHQ_PARTITION_EVENT">
+ ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY ( ID )
+ </statement>
+ </schema-directSQL>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" type="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="PATH" precision="512"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" type="BLOB"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="CONTENTS" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" type="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="SHA256" precision="64" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" type="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="CTIME" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" type="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="MTIME" nullable="false"/>
+ </schemaSpec>
+
</dbupgrade>
</target>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 82a0e69..965d905 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -59,6 +59,7 @@ public class RawConfiguration implements Serializable {
@GeneratedValue(generator = "SEQ", strategy = GenerationType.AUTO)
@Id
+ @Column(name = "ID")
private int id;
@Column(name = "PATH", nullable = true)
commit d69c6d0b503c8908812894ab9e2a3f12d2c253e3
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 15:41:40 2009 -0400
Adding comments and renaming field in RawConfiguration from content to contents.
Also changes the corresponding column name to contents.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index d1bf50d..136f1cd 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -99,7 +99,7 @@
</index>
<!-- List entries all have the same name -->
</table>
-
+e
<table name="RHQ_CONFIG_TEMPLATE">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="NAME" type="VARCHAR2" required="false" size="100"/>
@@ -112,10 +112,9 @@
<table name="RHQ_RAW_CONFIG">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
- <column name="PATH" type="VARCHAR2" required="true" size="512"/>
- <column name="CONTENT" type="BLOB" required="true"/>
- <column name="SHA256" type="VARCHAR2" size="64" required="false"/>
- <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="PATH" type="VARCHAR2" required="false" size="512"/>
+ <column name="CONTENTS" type="BLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="true"/>
<column name="CTIME" type="LONG" required="true"/>
<column name="MTIME" type="LONG" required="true"/>
@@ -124,5 +123,4 @@
</index>
</table>
-</dbsetup>
-
+</dbsetup>
\ No newline at end of file
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 04440da..82a0e69 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -36,6 +36,20 @@ import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.io.Serializable;
+/**
+ * Resources support structured configuration as well as raw configuration which is represented by this class. A raw
+ * configuration is typically in the form of a file on the file system. This could be httpd.conf in the case of apache.
+ * Note however that while a raw configuration generally refers to some configuration file, this class does not limit
+ * the actual configuration source to files.
+ * <p/>
+ * A raw configuration is stored as an array of bytes and has a SHA-256 hash with which it can be uniquely identified.
+ * <p/>
+ * A RawConfiguration is always associated with its parent {@link org.rhq.core.domain.configuration.Configuration} which
+ * can be structured, raw, or both. A Configuration can have multiple RawConfigurations associated with it. Suppose for
+ * apache that each virtual host configuration is stored in a separate file. We might have a single Configuration object
+ * that represents all of the apache configuration, and that object may contain multiple RawConfigurations for each of
+ * the virtual host config files.
+ */
@Entity
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
@Table(name = "RHQ_RAW_CONFIG")
@@ -47,10 +61,10 @@ public class RawConfiguration implements Serializable {
@Id
private int id;
- @Column(name = "PATH", nullable = false)
+ @Column(name = "PATH", nullable = true)
private String path;
- @Column(name = "CONTENT", nullable = false)
+ @Column(name = "CONTENTS", nullable = false)
private byte[] contents;
@Column(name = "SHA256", nullable = false)
commit 8a064497e1b430fa2b753d337976c9abdefe4acc
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 13:54:17 2009 -0400
Fixing mapping typos in RawConfiguration and adding JPA associatin in Configuration.
Adding a couple tests in ConfigurationTest.java to ensure that the association
is mapped correctly. Also updating tests to make sure that the JTA transaction
is started before I get the entity manager. Getting the entity manager first
and then starting the transaction led to the following exception in one case,
javax.persistence.TransactionRequiredException: no transaction is in progress
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
index c315aed..46ebde4 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
@@ -34,6 +34,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -154,6 +156,10 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
@XmlTransient
private Map<String, Property> properties;
+ @OneToMany(mappedBy = "configuration")
+ @Cascade({CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE_ORPHAN})
+ private Set<RawConfiguration> rawConfigurations = new HashSet<RawConfiguration>();
+
@Column(name = "NOTES")
private String notes;
@@ -395,6 +401,23 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
return map;
}
+ public Set<RawConfiguration> getRawConfigurations() {
+ return rawConfigurations;
+ }
+
+ public void addRawConfiguration(RawConfiguration rawConfiguration) {
+ rawConfiguration.setConfiguration(this);
+ rawConfigurations.add(rawConfiguration);
+ }
+
+ public boolean removeRawConfiguration(RawConfiguration rawConfiguration) {
+ boolean removed = rawConfigurations.remove(rawConfiguration);
+ if (removed) {
+ rawConfiguration.setConfiguration(null);
+ }
+ return removed;
+ }
+
public String getNotes() {
return notes;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 882a0db..04440da 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -38,7 +38,7 @@ import java.io.Serializable;
@Entity
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
-@Table(name = "RAW_CONFIG")
+@Table(name = "RHQ_RAW_CONFIG")
public class RawConfiguration implements Serializable {
private static final long serialVersionUID = 1L;
@@ -47,22 +47,19 @@ public class RawConfiguration implements Serializable {
@Id
private int id;
- @Column(name = "PATH")
+ @Column(name = "PATH", nullable = false)
private String path;
- @Column(name = "CONTENTS")
+ @Column(name = "CONTENT", nullable = false)
private byte[] contents;
- @Column(name = "VERSION")
- private long version;
-
- @Column(name = "SHA256")
+ @Column(name = "SHA256", nullable = false)
private String sha256;
- @Column(name = "CTIME")
+ @Column(name = "CTIME", nullable = false)
private long ctime = System.currentTimeMillis();
- @Column(name = "MTIME")
+ @Column(name = "MTIME", nullable = false)
private long mtime = System.currentTimeMillis();
@ManyToOne(optional = false)
@@ -93,14 +90,6 @@ public class RawConfiguration implements Serializable {
this.contents = contents;
}
- public long getVersion() {
- return version;
- }
-
- public void setVersion(long version) {
- this.version = version;
- }
-
public String getSha256() {
return sha256;
}
@@ -144,4 +133,48 @@ public class RawConfiguration implements Serializable {
mtime = System.currentTimeMillis();
}
+ /**
+ * Two RawConfiguration objects are considered equal if they have the same SHA-256 sum.
+ *
+ * @param obj The object to compare for equality
+ * @return true if obj is a RawConfiguration and has the same SHA-256 sum, false otherwise. Note that false is
+ * returned if {@link #getSha256()} returns null.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+
+ if (obj == this) {
+ return true;
+ }
+
+ if (obj instanceof RawConfiguration && sha256 != null) {
+ RawConfiguration that = (RawConfiguration) obj;
+ return this.sha256.equals(that.sha256);
+ }
+
+ return false;
+ }
+
+ /**@return A hash which is generated off of {@link #getSha256()} */
+ @Override
+ public int hashCode() {
+ if (sha256 == null) {
+ return 0;
+ }
+ return sha256.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder()
+ .append(getClass().getSimpleName())
+ .append("[id=").append(id)
+ .append(", path=").append(path)
+ .append(", sha256=").append(sha256)
+ .append(", configuration=").append(configuration)
+ .toString();
+ }
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 9e5ed37..7d3a42b 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -32,8 +32,8 @@ public class RawConfigurationTest extends AbstractEJB3Test {
@Test(groups = "integration.ejb3")
public void veryPersistAndFindById() throws Exception {
- EntityManager entityMgr = getEntityManager();
getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
try {
Configuration config = createAndSaveConfiguration();
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
index a4854d8..3183db3 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
@@ -41,6 +41,7 @@ import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
@@ -202,6 +203,65 @@ public class ConfigurationTest extends AbstractEJB3Test {
transactionManager.commit();
}
+ @Test(groups = "integration.ejb3")
+ public void verifyPersistSavesRawConfiguration() throws Exception {
+ EntityManager entityMgr = getEntityManager();
+ getTransactionManager().begin();
+
+ try {
+ RawConfiguration rawConfig = createRawConfiguration();
+
+ Configuration config = new Configuration();
+ config.addRawConfiguration(rawConfig);
+
+ entityMgr.persist(config);
+
+ assertTrue("Failed to cascade save to " + RawConfiguration.class.getSimpleName(), rawConfig.getId() != 0);
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ @Test(groups = "integration.ejb3")
+ public void verifyOrphanedRawConfigurationDeletedFromDatabase() throws Exception {
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+
+ try {
+ RawConfiguration rawConfiguration = createRawConfiguration();
+
+ Configuration config = new Configuration();
+ config.addRawConfiguration(rawConfiguration);
+
+ entityMgr.persist(config);
+
+ config.removeRawConfiguration(rawConfiguration);
+
+ config = entityMgr.merge(config);
+
+ entityMgr.flush();
+ entityMgr.clear();
+
+ assertNull(
+ "Failed to remove the orphaned " + RawConfiguration.class.getSimpleName() + " from the persistence context.",
+ entityMgr.find(RawConfiguration.class, rawConfiguration.getId())
+ );
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ RawConfiguration createRawConfiguration() {
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(new byte[] {});
+ rawConfig.setPath("/tmp/foo");
+ rawConfig.setSha256("38hr3f");
+
+ return rawConfig;
+ }
+
public static void prettyPrintConfiguration(Configuration configuration) {
System.out.println("Configuration: " + configuration.getNotes());
for (Property p : configuration.getProperties()) {
commit 53242eead924a4f326e95e132e29ee28f2bf65e5
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 8 15:29:03 2009 -0400
Initial commit for RawConfiguration.java and corresponding test class.
Adding the table definition for the new rhq_raw_config table in config-schema.xml. Adding initial JPA mapping for RawConfiguration. Still need to add mappings for the other end of the association in Configuration.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index c129874..d1bf50d 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -109,4 +109,20 @@
<column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
</table>
+ <table name="RHQ_RAW_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="PATH" type="VARCHAR2" required="true" size="512"/>
+ <column name="CONTENT" type="BLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="false"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_RAW_idx_config_key" unique="false">
+ <field ref="CONFIG_ID"/>
+ </index>
+ </table>
+
</dbsetup>
+
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
new file mode 100644
index 0000000..882a0db
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -0,0 +1,147 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+import javax.persistence.Entity;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import java.io.Serializable;
+
+@Entity
+@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
+@Table(name = "RAW_CONFIG")
+public class RawConfiguration implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @GeneratedValue(generator = "SEQ", strategy = GenerationType.AUTO)
+ @Id
+ private int id;
+
+ @Column(name = "PATH")
+ private String path;
+
+ @Column(name = "CONTENTS")
+ private byte[] contents;
+
+ @Column(name = "VERSION")
+ private long version;
+
+ @Column(name = "SHA256")
+ private String sha256;
+
+ @Column(name = "CTIME")
+ private long ctime = System.currentTimeMillis();
+
+ @Column(name = "MTIME")
+ private long mtime = System.currentTimeMillis();
+
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "CONFIG_ID", nullable = false)
+ private Configuration configuration;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public byte[] getContents() {
+ return contents;
+ }
+
+ public void setContents(byte[] contents) {
+ this.contents = contents;
+ }
+
+ public long getVersion() {
+ return version;
+ }
+
+ public void setVersion(long version) {
+ this.version = version;
+ }
+
+ public String getSha256() {
+ return sha256;
+ }
+
+ public void setSha256(String sha256) {
+ this.sha256 = sha256;
+ }
+
+ public long getCtime() {
+ return ctime;
+ }
+
+ public void setCtime(long ctime) {
+ this.ctime = ctime;
+ }
+
+ public long getMtime() {
+ return mtime;
+ }
+
+ public void setMtime(long mtime) {
+ this.mtime = mtime;
+ }
+
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
+ @PrePersist
+ void onPersist() {
+ mtime = System.currentTimeMillis();
+ ctime = System.currentTimeMillis();
+ }
+
+ @PreUpdate
+ void onUpdate() {
+ mtime = System.currentTimeMillis();
+ }
+
+}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
new file mode 100644
index 0000000..9e5ed37
--- /dev/null
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -0,0 +1,62 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+import org.rhq.core.domain.test.AbstractEJB3Test;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+
+public class RawConfigurationTest extends AbstractEJB3Test {
+
+ @Test(groups = "integration.ejb3")
+ public void veryPersistAndFindById() throws Exception {
+ EntityManager entityMgr = getEntityManager();
+ getTransactionManager().begin();
+
+ try {
+ Configuration config = createAndSaveConfiguration();
+
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setConfiguration(config);
+ rawConfig.setContents(new byte[] {});
+ rawConfig.setPath("/tmp/foo");
+
+ entityMgr.persist(rawConfig);
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ Configuration createAndSaveConfiguration() {
+ Configuration config = new Configuration();
+ EntityManager entityMgr = getEntityManager();
+
+ entityMgr.persist(config);
+
+ return config;
+ }
+
+}
commit f9f6fa47ca94a6a0d06bf3e754988f3f34ea81d3
Merge: 10b20f4... a1fa9fd...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 14 10:30:37 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq into raw-config
commit a1fa9fd7494fe48aab63b228f5f2eeebff7c7cc8
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 10:28:11 2009 -0400
Fixing column definition and deleting swap file that shouldn't have been committed.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo b/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo
deleted file mode 100644
index df08461..0000000
Binary files a/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo and /dev/null differ
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 010c256..ec29fc3 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -104,7 +104,7 @@ e
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="NAME" type="VARCHAR2" required="false" size="100"/>
<column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
- <column name="CONFIG_ID" type="VARCHAR2" required="false" references="RHQ_CONFIG"/>
+ <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
<column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
<column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
</table>
commit 10b20f4ab735678c9bc358105e061777f12dc891
Merge: db1d190... 62c734e...
Author: Adam Young <ayoung(a)redhat.com>
Date: Wed Oct 14 10:16:00 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq into raw-config
commit 62c734eba8f6f0ff27dd2f777e412c8ebff597b6
Author: John Sanda <jsanda(a)redhat.com>
Date: Wed Oct 14 10:09:04 2009 -0400
Adding back column to RHQ_CONFIG_TEMPLATE that I accidentally deleted.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo b/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo
new file mode 100644
index 0000000..df08461
Binary files /dev/null and b/modules/core/dbutils/src/main/scripts/dbsetup/.config-schema.xml.swo differ
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 906948e..010c256 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -104,6 +104,7 @@ e
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="NAME" type="VARCHAR2" required="false" size="100"/>
<column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
+ <column name="CONFIG_ID" type="VARCHAR2" required="false" references="RHQ_CONFIG"/>
<column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
<column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
</table>
commit db1d190599096f858b2e411cf4fbf676a9a99d84
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 13 17:47:54 2009 -0400
removed the dead source directory causing eclipse to barf on project import
diff --git a/.classpath b/.classpath
index c91339b..23c6c62 100644
--- a/.classpath
+++ b/.classpath
@@ -18,7 +18,6 @@
<classpathentry kind="src" path="modules/core/client-api/target/generated-sources/xjc"/>
<classpathentry kind="src" path="modules/core/comm-api/src/main/java"/>
<classpathentry kind="src" path="modules/core/gui/src/main/java"/>
- <classpathentry kind="src" path="modules/core/gui/src/test/java"/>
<classpathentry kind="src" path="modules/enterprise/comm/src/main/java"/>
<classpathentry kind="src" path="modules/enterprise/comm/src/test/java"/>
<classpathentry kind="src" path="modules/enterprise/agent/src/main/java"/>
commit ad1fcb60974e9b4e053621e644efb06cf43b8830
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 13 17:47:27 2009 -0400
added a page for editing raw configs with static html, as well as a link to it from the config page
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
new file mode 100644
index 0000000..31abec9
--- /dev/null
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit-raw.xhtml
@@ -0,0 +1,63 @@
+<?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">
+
+THIS TEXT WILL BE REMOVED.
+
+<ui:composition template="/rhq/resource/layout/main.xhtml">
+
+ THIS TEXT WILL BE REMOVED AS WELL.
+
+ <ui:param name="pageTitle" value="#{ResourceUIBean.resourceType.name} '#{ResourceUIBean.name}' - Edit Configuration"/>
+
+ <ui:param name="selectedTabName" value="Configuration.Current"/>
+
+ <ui:define name="content">
+ You are viewing this in advanced mode. Switch to
+ <h:outputLink value="edit.xhtml">
+ <f:param name="conversationId" value="#{conversation.id}"/>
+ <f:param name="id" value="#{ResourceUIBean.id}"/>
+ <h:outputText value=" standard mode"/>
+ </h:outputLink>
+ <h:form id="editResourceConfigurationForm" onsubmit="prepareInputsForSubmission(this)" rendered="#{!ViewResourceConfigurationUIBean.updateInProgress}">
+
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
+
+ <table class="summary-props-table" style="" >
+ <tr>
+ <td bgcolor="lightblue" width="25%" valign="top">
+ Files
+ <div>.../etc/httpd/conf/httpd.conf</div>
+ <div>.../etc/httpd/conf/magic</div>
+ <div>*../etc/httpd/conf.d/cobbler.conf</div>
+ <div>*../etc/httpd/conf.d/cobbler_svc.conf</div>
+ <div>______________________________________</div>
+ </td>
+ <td>/etc/httpd/conf/httpd.conf [Icon]View Full Screen [^] Upload Now [v] Download
+ <textarea disabled="true" rows="40" cols="60">Lorem Ipsum</textarea>
+ <div>Upload A New Version</div>
+ <input type="file" /> <input type="submit" value="Upload"/>
+ </td></tr>
+ </table>
+ </h:form>
+
+ <h:panelGroup layout="block" styleClass="InfoBlock" rendered="#{ExistingResourceConfigurationUIBean.updateInProgress}">
+ <b>${msg['note']}</b> ${msg['resource.config.Current.updateInProgress']}
+ </h:panelGroup>
+
+ </ui:define>
+
+</ui:composition>
+
+THIS TEXT WILL BE REMOVED AS WELL.
+
+</html>
diff --git a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit.xhtml b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit.xhtml
index 01ce746..deb5f9e 100644
--- a/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit.xhtml
+++ b/modules/enterprise/gui/portal-war/src/main/webapp/rhq/resource/configuration/edit.xhtml
@@ -25,8 +25,15 @@ THIS TEXT WILL BE REMOVED.
<h:form id="editResourceConfigurationForm" onsubmit="prepareInputsForSubmission(this)" rendered="#{!ViewResourceConfigurationUIBean.updateInProgress}">
- <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
+ <input type="hidden" name="id" value="#{ResourceUIBean.id}"/>
+ You are viewing this in standard mode. Switch to
+ <h:outputLink value="edit-raw.xhtml">
+ <f:param name="conversationId" value="#{conversation.id}"/>
+ <f:param name="id" value="#{ResourceUIBean.id}"/>
+ <h:outputText value=" advanced mode"/>
+ </h:outputLink>
+
<onc:config configurationDefinition="#{ExistingResourceConfigurationUIBean.configurationDefinition}"
configuration="#{ExistingResourceConfigurationUIBean.configuration}"
nullConfigurationDefinitionMessage="#{ExistingResourceConfigurationUIBean.nullConfigurationDefinitionMessage}"
commit 37f8641f0b3ce2f920463947a2ec644029be841b
Merge: cf7ed66... d00a47f...
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 13 17:24:31 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq into raw-config
commit cf7ed6629f48a6b3fc3ded42479042c10acc5fd3
Author: Adam Young <ayoung(a)redhat.com>
Date: Tue Oct 13 17:22:14 2009 -0400
Workaround for hosts files that cannot saved due to duplicate ipv4 and ipv6 entries
diff --git a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
index 21ea623..a932df2 100644
--- a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
+++ b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/HostsComponent.java
@@ -27,18 +27,18 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.Property;
-import org.rhq.core.pluginapi.inventory.ResourceComponent;
-import org.rhq.core.pluginapi.inventory.ResourceContext;
-import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
-import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
-import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
-import org.rhq.core.domain.measurement.AvailabilityType;
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.measurement.AvailabilityType;
+import org.rhq.core.pluginapi.configuration.ConfigurationFacet;
+import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
+import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
+import org.rhq.core.pluginapi.inventory.ResourceComponent;
+import org.rhq.core.pluginapi.inventory.ResourceContext;
import org.rhq.plugins.hosts.helper.Hosts;
import org.rhq.plugins.hosts.helper.HostsComponentHelper;
import org.rhq.plugins.hosts.helper.HostsEntry;
@@ -72,8 +72,7 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
try {
HostsComponentHelper.validateHostFileExists(this.hostsFile);
return AvailabilityType.UP;
- }
- catch (InvalidPluginConfigurationException e) {
+ } catch (InvalidPluginConfigurationException e) {
log.debug("Hosts file Resource is down: " + e.getLocalizedMessage());
return AvailabilityType.DOWN;
}
@@ -90,13 +89,13 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
Set<String> ipAddressesWithDuplicateEntries = hosts.getIpAddressesWithDuplicateEntries();
if (!ipAddressesWithDuplicateEntries.isEmpty()) {
log.debug("Hosts file [" + this.hostsFile + "] contains duplicate entries for the following IP addresses: "
- + ipAddressesWithDuplicateEntries);
- }
- Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
- if (!namesWithDuplicateEntries.isEmpty()) {
- log.error("Hosts file [" + this.hostsFile + "] contains duplicate entries for the following names: "
- + namesWithDuplicateEntries);
+ + ipAddressesWithDuplicateEntries);
}
+ Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
+ // if (!namesWithDuplicateEntries.isEmpty()) {
+ // log.error("Hosts file [" + this.hostsFile + "] contains duplicate entries for the following names: "
+ // + namesWithDuplicateEntries);
+ // }
for (HostsEntry entry : hosts.getEntries()) {
PropertyMap entryProp = new PropertyMap("entry");
@@ -106,9 +105,9 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
entryProp.put(ipAddressProp);
PropertySimple canonicalNameProp = new PropertySimple("canonicalName", entry.getCanonicalName());
- if (namesWithDuplicateEntries.contains(entry.getCanonicalName())) {
- canonicalNameProp.setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
- }
+ // if (namesWithDuplicateEntries.contains(entry.getCanonicalName())) {
+ // canonicalNameProp.setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
+ // }
entryProp.put(canonicalNameProp);
StringBuilder aliasesPropValue = new StringBuilder();
@@ -124,13 +123,14 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
aliasesPropValue.deleteCharAt(aliasesPropValue.length() - 1);
}
PropertySimple aliasesProp = new PropertySimple("aliases", aliasesPropValue);
- if (foundDuplicateName) {
- aliasesProp.setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
- }
+ // if (foundDuplicateName) {
+ // aliasesProp
+ // .setErrorMessage("At the time of loading, there was more than one entry containing this name - please remove or fix duplicate entries before saving.");
+ // }
entryProp.put(aliasesProp);
}
- return resourceConfig;
+ return resourceConfig;
}
public void updateResourceConfiguration(ConfigurationUpdateReport report) {
@@ -138,7 +138,7 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
Hosts newHosts = new Hosts();
PropertyList entriesProp = resourceConfig.getList("entries");
- for (Property entryProp: entriesProp.getList()) {
+ for (Property entryProp : entriesProp.getList()) {
PropertyMap entryPropMap = (PropertyMap) entryProp;
String ipAddress = entryPropMap.getSimple("ipAddress").getStringValue();
String canonicalName = entryPropMap.getSimple("canonicalName").getStringValue();
@@ -157,17 +157,15 @@ public class HostsComponent implements ResourceComponent, ConfigurationFacet {
newHosts.addEntry(entry);
}
- Set<String> namesWithDuplicateEntries = newHosts.getNamesWithDuplicateEntries();
- if (!namesWithDuplicateEntries.isEmpty()) {
- report.setErrorMessage("There are duplicate entries for the following names: "
- + namesWithDuplicateEntries);
- return;
- }
+ // Set<String> namesWithDuplicateEntries = newHosts.getNamesWithDuplicateEntries();
+ // if (!namesWithDuplicateEntries.isEmpty()) {
+ // report.setErrorMessage("There are duplicate entries for the following names: " + namesWithDuplicateEntries);
+ // return;
+ // }
try {
Hosts.store(newHosts, this.hostsFile);
- }
- catch (IOException e) {
+ } catch (IOException e) {
throw new RuntimeException("Failed to write hosts file [" + this.hostsFile + "].", e);
}
diff --git a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
index ed95283..85f3255 100644
--- a/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
+++ b/modules/plugins/hosts/src/main/java/org/rhq/plugins/hosts/helper/Hosts.java
@@ -22,11 +22,6 @@
*/
package org.rhq.plugins.hosts.helper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
@@ -40,6 +35,11 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
/**
* A set of hosts file entries. The set may contain duplicate entries (i.e. entries for different IP addresses
* containing the same name, either as the canonical name or as an alias).
@@ -47,7 +47,7 @@ import java.util.Set;
* @author Ian Springer
*/
public class Hosts {
- private static final Log LOG = LogFactory.getLog(Hosts.class);
+ private static final Log LOG = LogFactory.getLog(Hosts.class);
private Set<HostsEntry> entries = new LinkedHashSet<HostsEntry>();
private Map<String, Set<HostsEntry>> ipAddressToEntriesMap = new HashMap<String, Set<HostsEntry>>();
@@ -94,12 +94,12 @@ public class Hosts {
@NotNull
public Set<HostsEntry> getEntriesByIpAddress(String ipAddress) {
Set<HostsEntry> entries = this.ipAddressToEntriesMap.get(ipAddress);
- return (entries != null) ? entries : Collections.<HostsEntry>emptySet();
+ return (entries != null) ? entries : Collections.<HostsEntry> emptySet();
}
public Set<HostsEntry> getEntriesByName(String canonicalName) {
Set<HostsEntry> entries = this.nameToEntriesMap.get(canonicalName);
- return (entries != null) ? entries : Collections.<HostsEntry>emptySet();
+ return (entries != null) ? entries : Collections.<HostsEntry> emptySet();
}
public Set<String> getIpAddressesWithDuplicateEntries() {
@@ -122,8 +122,7 @@ public class Hosts {
hosts.addEntry(entry);
}
}
- }
- finally {
+ } finally {
reader.close();
}
@@ -131,11 +130,11 @@ public class Hosts {
}
public static void store(Hosts hosts, File hostsFile) throws IOException {
- Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
- if (!namesWithDuplicateEntries.isEmpty()) {
- throw new IllegalArgumentException("Hosts contains duplicate entries for the following names: "
- + namesWithDuplicateEntries);
- }
+ // Set<String> namesWithDuplicateEntries = hosts.getNamesWithDuplicateEntries();
+ // if (!namesWithDuplicateEntries.isEmpty()) {
+ // throw new IllegalArgumentException("Hosts contains duplicate entries for the following names: "
+ // + namesWithDuplicateEntries);
+ // }
if (!hostsFile.exists()) {
// If a hosts file doesn't already exist, create an empty one.
@@ -156,23 +155,22 @@ public class Hosts {
newHostsFileWriter.println(newLine);
}
}
- }
- finally {
+ } finally {
hostsFileReader.close();
}
// Write out any entries for IP addresses that did not have entries in the original file.
for (HostsEntry newEntry : hosts.getEntries()) {
if (!storedCanonicalNames.contains(newEntry.getCanonicalName())) {
- StringBuilder newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(newEntry.getCanonicalName());
+ StringBuilder newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(
+ newEntry.getCanonicalName());
for (String alias : newEntry.getAliases()) {
newLine.append("\t").append(alias);
}
newHostsFileWriter.println(newLine);
}
}
- }
- finally {
+ } finally {
newHostsFileWriter.close();
}
@@ -184,7 +182,8 @@ public class Hosts {
}
boolean backupSucceeded = hostsFile.renameTo(backupHostsFile);
if (!backupSucceeded) {
- throw new IOException("Failed to backup original hosts file [" + hostsFile + "] to [" + backupHostsFile + "].");
+ throw new IOException("Failed to backup original hosts file [" + hostsFile + "] to [" + backupHostsFile
+ + "].");
}
// And finally, rename the new hosts file (e.g. /etc/hosts-1234567890) to the actual hosts file (e.g. /etc/hosts).
@@ -221,7 +220,7 @@ public class Hosts {
String ipAddress = tokens[0];
if (tokens.length == 1) {
LOG.warn("Hosts file [" + hostsFile + "] contains invalid entry for IP address " + ipAddress
- + " - no canonical name is specified.");
+ + " - no canonical name is specified.");
}
String canonicalName = null;
@@ -229,10 +228,10 @@ public class Hosts {
if (tokens.length >= 2) {
canonicalName = tokens[1];
if (tokens.length >= 3) {
- aliasSet = new LinkedHashSet<String>(tokens.length - 2);
- for (int i = 2; i < tokens.length; i++) {
- aliasSet.add(tokens[i]);
- }
+ aliasSet = new LinkedHashSet<String>(tokens.length - 2);
+ for (int i = 2; i < tokens.length; i++) {
+ aliasSet.add(tokens[i]);
+ }
}
}
@@ -241,7 +240,7 @@ public class Hosts {
@Nullable
private static StringBuilder createNewLine(Hosts hosts, File hostsFile, SimpleUnixConfigFileLine existingLine,
- Set<String> storedCanonicalNames) {
+ Set<String> storedCanonicalNames) {
StringBuilder newLine;
String nonComment = existingLine.getNonComment();
String comment = existingLine.getComment();
@@ -252,15 +251,15 @@ public class Hosts {
if (!newEntries.isEmpty()) {
// replace the existing entry
HostsEntry newEntry = newEntries.iterator().next();
- LOG.debug("Replacing existing entry in hosts file [" + existingEntry + "] with new entry ["
- + newEntry + "]...");
+ LOG.debug("Replacing existing entry in hosts file [" + existingEntry + "] with new entry [" + newEntry
+ + "]...");
newLine = new StringBuilder(newEntry.getIpAddress()).append("\t").append(newEntry.getCanonicalName());
for (String alias : newEntry.getAliases()) {
newLine.append("\t").append(alias);
}
// but still write out the existing comment
if (comment != null) {
- newLine.append(" #").append(comment);
+ newLine.append(" #").append(comment);
}
storedCanonicalNames.add(newEntry.getCanonicalName());
} else {
commit d00a47f9978083571f1f2f9da74c99b460dd2280
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 21:33:27 2009 -0400
Bumping up schema version in pom.xml
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 64c1dc0..e2d9a91 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.58</db.schema.version>
+ <db.schema.version>2.59</db.schema.version>
</properties>
<dependencies>
@@ -272,4 +272,4 @@
</profiles>
-</project>
\ No newline at end of file
+</project>
commit 1f891ea891250f44c32f03968827fbe76f47c70c
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 21:16:10 2009 -0400
Fixing syntax in setup and in upgrade scripts for RHQ_CONFIG foreign key.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 6e2492c..906948e 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -110,16 +110,12 @@ e
<table name="RHQ_RAW_CONFIG">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
- <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG(ID)"/>
<column name="PATH" type="VARCHAR2" required="false" size="512"/>
<column name="CONTENTS" type="BLOB" required="true"/>
<column name="SHA256" type="VARCHAR2" size="64" required="true"/>
<column name="CTIME" type="LONG" required="true"/>
<column name="MTIME" type="LONG" required="true"/>
-
- <index name="RHQ_RAW_idx_config_key" unique="false">
- <field ref="CONFIG_ID"/>
- </index>
</table>
</dbsetup>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 3efef48..948df51 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1570,10 +1570,14 @@ DB Upgrade:
nullable="false"/>
<schema-directSQL>
- <statement desc="Creating index on CONFIG_ID (INTEGER)">
- CREATE INDEX RHQ_RAW_idx_config_key ON RHQ_CONFIG (ID)
+ <statement desc="Creating RHQ_RAW_CONFIG foreign key relation to RHQ_CONFIG">
+ ALTER TABLE RHQ_RAW_CONFIG
+ ADD CONSTRAINT RHQ_RAW_CONFIG_CONFIG_ID_FK
+ FOREIGN KEY (CONFIG_ID)
+ REFERENCES RHQ_CONFIG (ID)
</statement>
</schema-directSQL>
+
</schemaSpec>
</dbupgrade>
commit d213f9e46583c551723f9f08ce8f79dc1a6b5081
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 20:45:19 2009 -0400
Adding config_id to rhq_raw_config table in upgrade script.
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 00d5573..3efef48 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1520,18 +1520,24 @@ DB Upgrade:
<schemaSpec version="2.59">
<schema-directSQL>
- <statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
- CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER )
+ <statement desc="Creating table RHQ_RAW_CONFIG">
+ CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER)
</statement>
</schema-directSQL>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" columnType="INTEGER" nullable="FALSE" />
<schema-createSequence name="RHQ_RAW_CONFIG_ID_SEQ" initial="10001"/>
<schema-directSQL>
<statement desc="Creating primary key for RHQ_PARTITION_EVENT">
- ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY ( ID )
+ ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY (ID)
</statement>
</schema-directSQL>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONFIG_ID" columnType="INTEGER"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CONFIG_ID"
+ columnType="INTEGER"
+ nullable="false"/>
+
<schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" columnType="VARCHAR2"/>
<schema-alterColumn table="RHQ_RAW_CONFIG"
column="PATH"
@@ -1562,6 +1568,12 @@ DB Upgrade:
column="MTIME"
columnType="LONG"
nullable="false"/>
+
+ <schema-directSQL>
+ <statement desc="Creating index on CONFIG_ID (INTEGER)">
+ CREATE INDEX RHQ_RAW_idx_config_key ON RHQ_CONFIG (ID)
+ </statement>
+ </schema-directSQL>
</schemaSpec>
</dbupgrade>
commit c131b8fdf7ea3e7d161bd60c1229f8f32b9f80a0
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 20:10:56 2009 -0400
Fixing syntax errors in dbupgrade script.
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index 69cf483..00d5573 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1521,7 +1521,7 @@ DB Upgrade:
<schemaSpec version="2.59">
<schema-directSQL>
<statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
- CREATE TABLE RHQ_RAW_CONFIG ( _ID INTEGER )
+ CREATE TABLE RHQ_RAW_CONFIG (ID INTEGER )
</statement>
</schema-directSQL>
<schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
@@ -1532,20 +1532,36 @@ DB Upgrade:
</statement>
</schema-directSQL>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" type="VARCHAR2"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="PATH" precision="512"/>
-
- <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" type="BLOB"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="CONTENTS" nullable="false"/>
-
- <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" type="VARCHAR2"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="SHA256" precision="64" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" columnType="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="PATH"
+ columnType="VARCHAR2"
+ precision="512"/>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" type="LONG"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="CTIME" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" columnType="BLOB"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CONTENTS"
+ columnType="BLOB"
+ nullable="false"/>
- <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" type="LONG"/>
- <schema-alterColumn table="RHQ_RAW_CONFIG" column="MTIME" nullable="false"/>
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" columnType="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="SHA256"
+ columnType="VARCHAR2"
+ precision="64"
+ nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" columnType="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="CTIME"
+ columnType="LONG"
+ nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" columnType="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG"
+ column="MTIME"
+ columnType="LONG"
+ nullable="false"/>
</schemaSpec>
</dbupgrade>
commit 3b18a758d688ce5de84727fd725b6eef9639b4d7
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 16:58:20 2009 -0400
Adding dbupgrade script for new raw config table.
Also adding @Column annotation for id field in RawConfiguration.java
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index d5a4e24..69cf483 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -1518,6 +1518,36 @@ DB Upgrade:
<schema-addColumn table="RHQ_ALERT_DEFINITION" column="GROUP_ALERT_DEF_ID" columnType="INTEGER" />
</schemaSpec>
+ <schemaSpec version="2.59">
+ <schema-directSQL>
+ <statement desc="Creating table RHQ_MEASUREMENT_OOB_tmp">
+ CREATE TABLE RHQ_RAW_CONFIG ( _ID INTEGER )
+ </statement>
+ </schema-directSQL>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="ID" nullable="FALSE" />
+ <schema-createSequence name="RHQ_RAW_CONFIG_ID_SEQ" initial="10001"/>
+ <schema-directSQL>
+ <statement desc="Creating primary key for RHQ_PARTITION_EVENT">
+ ALTER TABLE RHQ_RAW_CONFIG ADD PRIMARY KEY ( ID )
+ </statement>
+ </schema-directSQL>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="PATH" type="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="PATH" precision="512"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CONTENTS" type="BLOB"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="CONTENTS" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="SHA256" type="VARCHAR2"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="SHA256" precision="64" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="CTIME" type="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="CTIME" nullable="false"/>
+
+ <schema-addColumn table="RHQ_RAW_CONFIG" column="MTIME" type="LONG"/>
+ <schema-alterColumn table="RHQ_RAW_CONFIG" column="MTIME" nullable="false"/>
+ </schemaSpec>
+
</dbupgrade>
</target>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 82a0e69..965d905 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -59,6 +59,7 @@ public class RawConfiguration implements Serializable {
@GeneratedValue(generator = "SEQ", strategy = GenerationType.AUTO)
@Id
+ @Column(name = "ID")
private int id;
@Column(name = "PATH", nullable = true)
commit 1ce391256450f459011fbceb7ab5979db82df7e0
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 15:43:18 2009 -0400
Updating war plugin configuration to support the war:exploded goal.
diff --git a/modules/enterprise/gui/portal-war/pom.xml b/modules/enterprise/gui/portal-war/pom.xml
index 0cad8f8..42a73c0 100644
--- a/modules/enterprise/gui/portal-war/pom.xml
+++ b/modules/enterprise/gui/portal-war/pom.xml
@@ -397,6 +397,7 @@
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-1</version>
<configuration>
+ <webappDirectory>${rhq.containerDir}/jbossas/server/default/deploy/${rhq.earName}/${rhq.deploymentName}</webappDirectory>
<archive>
<manifest>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
commit 45096f585cc37b6a713c9bc4d9b9b68a0f6b1fc9
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 15:41:40 2009 -0400
Adding comments and renaming field in RawConfiguration from content to contents.
Also changes the corresponding column name to contents.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 0dbb684..6e2492c 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -111,9 +111,9 @@ e
<table name="RHQ_RAW_CONFIG">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
- <column name="PATH" type="VARCHAR2" required="true" size="512"/>
- <column name="CONTENT" type="BLOB" required="true"/>
- <column name="SHA256" type="VARCHAR2" size="64" required="false"/>
+ <column name="PATH" type="VARCHAR2" required="false" size="512"/>
+ <column name="CONTENTS" type="BLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="true"/>
<column name="CTIME" type="LONG" required="true"/>
<column name="MTIME" type="LONG" required="true"/>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 04440da..82a0e69 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -36,6 +36,20 @@ import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import java.io.Serializable;
+/**
+ * Resources support structured configuration as well as raw configuration which is represented by this class. A raw
+ * configuration is typically in the form of a file on the file system. This could be httpd.conf in the case of apache.
+ * Note however that while a raw configuration generally refers to some configuration file, this class does not limit
+ * the actual configuration source to files.
+ * <p/>
+ * A raw configuration is stored as an array of bytes and has a SHA-256 hash with which it can be uniquely identified.
+ * <p/>
+ * A RawConfiguration is always associated with its parent {@link org.rhq.core.domain.configuration.Configuration} which
+ * can be structured, raw, or both. A Configuration can have multiple RawConfigurations associated with it. Suppose for
+ * apache that each virtual host configuration is stored in a separate file. We might have a single Configuration object
+ * that represents all of the apache configuration, and that object may contain multiple RawConfigurations for each of
+ * the virtual host config files.
+ */
@Entity
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
@Table(name = "RHQ_RAW_CONFIG")
@@ -47,10 +61,10 @@ public class RawConfiguration implements Serializable {
@Id
private int id;
- @Column(name = "PATH", nullable = false)
+ @Column(name = "PATH", nullable = true)
private String path;
- @Column(name = "CONTENT", nullable = false)
+ @Column(name = "CONTENTS", nullable = false)
private byte[] contents;
@Column(name = "SHA256", nullable = false)
commit fea55cfd7f1aef790f3644ec835015137b88fa50
Author: John Sanda <john(a)localhost.localdomain>
Date: Fri Oct 9 13:54:17 2009 -0400
Fixing mapping typos in RawConfiguration and adding JPA associatin in Configuration.
Adding a couple tests in ConfigurationTest.java to ensure that the association
is mapped correctly. Also updating tests to make sure that the JTA transaction
is started before I get the entity manager. Getting the entity manager first
and then starting the transaction led to the following exception in one case,
javax.persistence.TransactionRequiredException: no transaction is in progress
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
index c315aed..46ebde4 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/Configuration.java
@@ -34,6 +34,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -154,6 +156,10 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
@XmlTransient
private Map<String, Property> properties;
+ @OneToMany(mappedBy = "configuration")
+ @Cascade({CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DELETE_ORPHAN})
+ private Set<RawConfiguration> rawConfigurations = new HashSet<RawConfiguration>();
+
@Column(name = "NOTES")
private String notes;
@@ -395,6 +401,23 @@ public class Configuration implements Externalizable, Cloneable, AbstractPropert
return map;
}
+ public Set<RawConfiguration> getRawConfigurations() {
+ return rawConfigurations;
+ }
+
+ public void addRawConfiguration(RawConfiguration rawConfiguration) {
+ rawConfiguration.setConfiguration(this);
+ rawConfigurations.add(rawConfiguration);
+ }
+
+ public boolean removeRawConfiguration(RawConfiguration rawConfiguration) {
+ boolean removed = rawConfigurations.remove(rawConfiguration);
+ if (removed) {
+ rawConfiguration.setConfiguration(null);
+ }
+ return removed;
+ }
+
public String getNotes() {
return notes;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 9f7c45f..04440da 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -38,7 +38,7 @@ import java.io.Serializable;
@Entity
@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
-@Table(name = "RAW_CONFIG")
+@Table(name = "RHQ_RAW_CONFIG")
public class RawConfiguration implements Serializable {
private static final long serialVersionUID = 1L;
@@ -50,7 +50,7 @@ public class RawConfiguration implements Serializable {
@Column(name = "PATH", nullable = false)
private String path;
- @Column(name = "CONTENTS", nullable = false)
+ @Column(name = "CONTENT", nullable = false)
private byte[] contents;
@Column(name = "SHA256", nullable = false)
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 79b2a5a..47d40d5 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -32,8 +32,8 @@ public class RawConfigurationTest extends AbstractEJB3Test {
@Test(groups = "integration.ejb3")
public void veryPersistAndFindById() throws Exception {
- EntityManager entityMgr = getEntityManager();
getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
try {
Configuration config = createAndSaveConfiguration();
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
index a4854d8..3183db3 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/test/ConfigurationTest.java
@@ -41,6 +41,7 @@ import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
+import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
@@ -202,6 +203,65 @@ public class ConfigurationTest extends AbstractEJB3Test {
transactionManager.commit();
}
+ @Test(groups = "integration.ejb3")
+ public void verifyPersistSavesRawConfiguration() throws Exception {
+ EntityManager entityMgr = getEntityManager();
+ getTransactionManager().begin();
+
+ try {
+ RawConfiguration rawConfig = createRawConfiguration();
+
+ Configuration config = new Configuration();
+ config.addRawConfiguration(rawConfig);
+
+ entityMgr.persist(config);
+
+ assertTrue("Failed to cascade save to " + RawConfiguration.class.getSimpleName(), rawConfig.getId() != 0);
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ @Test(groups = "integration.ejb3")
+ public void verifyOrphanedRawConfigurationDeletedFromDatabase() throws Exception {
+ getTransactionManager().begin();
+ EntityManager entityMgr = getEntityManager();
+
+ try {
+ RawConfiguration rawConfiguration = createRawConfiguration();
+
+ Configuration config = new Configuration();
+ config.addRawConfiguration(rawConfiguration);
+
+ entityMgr.persist(config);
+
+ config.removeRawConfiguration(rawConfiguration);
+
+ config = entityMgr.merge(config);
+
+ entityMgr.flush();
+ entityMgr.clear();
+
+ assertNull(
+ "Failed to remove the orphaned " + RawConfiguration.class.getSimpleName() + " from the persistence context.",
+ entityMgr.find(RawConfiguration.class, rawConfiguration.getId())
+ );
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ RawConfiguration createRawConfiguration() {
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setContents(new byte[] {});
+ rawConfig.setPath("/tmp/foo");
+ rawConfig.setSha256("38hr3f");
+
+ return rawConfig;
+ }
+
public static void prettyPrintConfiguration(Configuration configuration) {
System.out.println("Configuration: " + configuration.getNotes());
for (Property p : configuration.getProperties()) {
commit dc79932cdfe95f11ee1b9a679bfa50cab8a71c1d
Merge: 00c2a94... 59590a8...
Author: Adam Young <ayoung(a)redhat.com>
Date: Thu Oct 8 17:27:55 2009 -0400
Merge branch 'raw-config' of ssh://git.fedorahosted.org/git/rhq/rhq into raw-config
commit 59590a82cf9ae80c7562c8d1eb17c9fd1ec2e73c
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 8 16:52:51 2009 -0400
Implementing equals(), hashCode(), and toString().
Removing the version field and column as I don't think it is needed. Also
adding nullable attributes in the JPA mappings.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 08e1aef..0dbb684 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -114,7 +114,6 @@ e
<column name="PATH" type="VARCHAR2" required="true" size="512"/>
<column name="CONTENT" type="BLOB" required="true"/>
<column name="SHA256" type="VARCHAR2" size="64" required="false"/>
- <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
<column name="CTIME" type="LONG" required="true"/>
<column name="MTIME" type="LONG" required="true"/>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index 882a0db..9f7c45f 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -47,22 +47,19 @@ public class RawConfiguration implements Serializable {
@Id
private int id;
- @Column(name = "PATH")
+ @Column(name = "PATH", nullable = false)
private String path;
- @Column(name = "CONTENTS")
+ @Column(name = "CONTENTS", nullable = false)
private byte[] contents;
- @Column(name = "VERSION")
- private long version;
-
- @Column(name = "SHA256")
+ @Column(name = "SHA256", nullable = false)
private String sha256;
- @Column(name = "CTIME")
+ @Column(name = "CTIME", nullable = false)
private long ctime = System.currentTimeMillis();
- @Column(name = "MTIME")
+ @Column(name = "MTIME", nullable = false)
private long mtime = System.currentTimeMillis();
@ManyToOne(optional = false)
@@ -93,14 +90,6 @@ public class RawConfiguration implements Serializable {
this.contents = contents;
}
- public long getVersion() {
- return version;
- }
-
- public void setVersion(long version) {
- this.version = version;
- }
-
public String getSha256() {
return sha256;
}
@@ -144,4 +133,48 @@ public class RawConfiguration implements Serializable {
mtime = System.currentTimeMillis();
}
+ /**
+ * Two RawConfiguration objects are considered equal if they have the same SHA-256 sum.
+ *
+ * @param obj The object to compare for equality
+ * @return true if obj is a RawConfiguration and has the same SHA-256 sum, false otherwise. Note that false is
+ * returned if {@link #getSha256()} returns null.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+
+ if (obj == this) {
+ return true;
+ }
+
+ if (obj instanceof RawConfiguration && sha256 != null) {
+ RawConfiguration that = (RawConfiguration) obj;
+ return this.sha256.equals(that.sha256);
+ }
+
+ return false;
+ }
+
+ /**@return A hash which is generated off of {@link #getSha256()} */
+ @Override
+ public int hashCode() {
+ if (sha256 == null) {
+ return 0;
+ }
+ return sha256.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder()
+ .append(getClass().getSimpleName())
+ .append("[id=").append(id)
+ .append(", path=").append(path)
+ .append(", sha256=").append(sha256)
+ .append(", configuration=").append(configuration)
+ .toString();
+ }
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
index 9e5ed37..79b2a5a 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -42,8 +42,13 @@ public class RawConfigurationTest extends AbstractEJB3Test {
rawConfig.setConfiguration(config);
rawConfig.setContents(new byte[] {});
rawConfig.setPath("/tmp/foo");
+ rawConfig.setSha256("12242432nde");
entityMgr.persist(rawConfig);
+
+ RawConfiguration savedRawConfig = entityMgr.find(RawConfiguration.class, rawConfig.getId());
+
+ assertNotNull("Failed to find " + RawConfiguration.class.getSimpleName() + " by id.", savedRawConfig);
}
finally {
getTransactionManager().rollback();
commit df1167f78dc749d229f4aff258a47d7e48f3f7c8
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Oct 8 15:29:03 2009 -0400
Initial commit for RawConfiguration.java and corresponding test class.
Adding the table definition for the new rhq_raw_config table in config-schema.xml. Adding initial JPA mapping for RawConfiguration. Still need to add mappings for the other end of the association in Configuration.
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
index 0e9bbf6..08e1aef 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/config-schema.xml
@@ -99,14 +99,28 @@
</index>
<!-- List entries all have the same name -->
</table>
-
+e
<table name="RHQ_CONFIG_TEMPLATE">
<column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
<column name="NAME" type="VARCHAR2" required="false" size="100"/>
<column name="DESCRIPTION" type="VARCHAR2" required="false" size="500"/>
- <column name="CONFIG_ID" type="INTEGER" required="false" references="RHQ_CONFIG"/>
<column name="CONFIG_DEF_ID" type="INTEGER" required="false" references="RHQ_CONFIG_DEF"/>
<column name="IS_DEFAULT" type="BOOLEAN" required="false"/>
</table>
+ <table name="RHQ_RAW_CONFIG">
+ <column name="ID" type="INTEGER" required="true" default="sequence-only" initial="10001" primarykey="true"/>
+ <column name="CONFIG_ID" type="INTEGER" required="true" references="RHQ_CONFIG"/>
+ <column name="PATH" type="VARCHAR2" required="true" size="512"/>
+ <column name="CONTENT" type="BLOB" required="true"/>
+ <column name="SHA256" type="VARCHAR2" size="64" required="false"/>
+ <column name="VERSION" type="VARCHAR2" required="false" size="50"/>
+ <column name="CTIME" type="LONG" required="true"/>
+ <column name="MTIME" type="LONG" required="true"/>
+
+ <index name="RHQ_RAW_idx_config_key" unique="false">
+ <field ref="CONFIG_ID"/>
+ </index>
+ </table>
+
</dbsetup>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
new file mode 100644
index 0000000..882a0db
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -0,0 +1,147 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+import javax.persistence.Entity;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import java.io.Serializable;
+
+@Entity
+@SequenceGenerator(name = "SEQ", sequenceName = "RHQ_RAW_CONFIG_ID_SEQ")
+@Table(name = "RAW_CONFIG")
+public class RawConfiguration implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @GeneratedValue(generator = "SEQ", strategy = GenerationType.AUTO)
+ @Id
+ private int id;
+
+ @Column(name = "PATH")
+ private String path;
+
+ @Column(name = "CONTENTS")
+ private byte[] contents;
+
+ @Column(name = "VERSION")
+ private long version;
+
+ @Column(name = "SHA256")
+ private String sha256;
+
+ @Column(name = "CTIME")
+ private long ctime = System.currentTimeMillis();
+
+ @Column(name = "MTIME")
+ private long mtime = System.currentTimeMillis();
+
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "CONFIG_ID", nullable = false)
+ private Configuration configuration;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public byte[] getContents() {
+ return contents;
+ }
+
+ public void setContents(byte[] contents) {
+ this.contents = contents;
+ }
+
+ public long getVersion() {
+ return version;
+ }
+
+ public void setVersion(long version) {
+ this.version = version;
+ }
+
+ public String getSha256() {
+ return sha256;
+ }
+
+ public void setSha256(String sha256) {
+ this.sha256 = sha256;
+ }
+
+ public long getCtime() {
+ return ctime;
+ }
+
+ public void setCtime(long ctime) {
+ this.ctime = ctime;
+ }
+
+ public long getMtime() {
+ return mtime;
+ }
+
+ public void setMtime(long mtime) {
+ this.mtime = mtime;
+ }
+
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
+ @PrePersist
+ void onPersist() {
+ mtime = System.currentTimeMillis();
+ ctime = System.currentTimeMillis();
+ }
+
+ @PreUpdate
+ void onUpdate() {
+ mtime = System.currentTimeMillis();
+ }
+
+}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
new file mode 100644
index 0000000..9e5ed37
--- /dev/null
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/RawConfigurationTest.java
@@ -0,0 +1,62 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * 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 and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.rhq.core.domain.configuration;
+
+import org.rhq.core.domain.test.AbstractEJB3Test;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+
+public class RawConfigurationTest extends AbstractEJB3Test {
+
+ @Test(groups = "integration.ejb3")
+ public void veryPersistAndFindById() throws Exception {
+ EntityManager entityMgr = getEntityManager();
+ getTransactionManager().begin();
+
+ try {
+ Configuration config = createAndSaveConfiguration();
+
+ RawConfiguration rawConfig = new RawConfiguration();
+ rawConfig.setConfiguration(config);
+ rawConfig.setContents(new byte[] {});
+ rawConfig.setPath("/tmp/foo");
+
+ entityMgr.persist(rawConfig);
+ }
+ finally {
+ getTransactionManager().rollback();
+ }
+ }
+
+ Configuration createAndSaveConfiguration() {
+ Configuration config = new Configuration();
+ EntityManager entityMgr = getEntityManager();
+
+ entityMgr.persist(config);
+
+ return config;
+ }
+
+}
14 years, 6 months
[rhq] Branch 'content' - modules/enterprise
by Pradeep Kilambi
modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivator.java | 187 ++++++++++
modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnector.java | 187 ----------
modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNProvider.java | 4
modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivatorTest.java | 98 +++++
modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnectorTest.java | 98 -----
modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNHelperTest.java | 81 ++++
6 files changed, 368 insertions(+), 287 deletions(-)
New commits:
commit df940cd54a101e90b251003fb1509d708fad12d9
Author: Pradeep Kilambi <pkilambi(a)redhat.com>
Date: Wed Oct 28 10:42:00 2009 -0400
renaming and tests for helper
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivator.java b/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivator.java
new file mode 100644
index 0000000..60a9430
--- /dev/null
+++ b/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivator.java
@@ -0,0 +1,187 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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.server.plugins.rhnhosted;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintStream;
+import java.net.URL;
+import java.security.KeyException;
+import java.util.ArrayList;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.rhq.enterprise.server.plugins.rhnhosted.certificate.PublicKeyRing;
+import org.rhq.enterprise.server.plugins.rhnhosted.xmlrpc.RhnSSLTransportFactory;
+
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+
+
+
+/**
+ * @author pkilambi
+ *
+ */
+public class RHNActivator {
+
+ private String certificateFileName;
+ private String certificateText;
+ private String systemid;
+ private XmlRpcClient client;
+ private final Log log = LogFactory.getLog(RHNActivator.class);
+
+ /**
+ * RHN Connector Constructor
+ * @param systemidIn systemId file path
+ * @param certificateIn certificate file path
+ * @param serverUrlIn hosted server url as a string
+ *
+ */
+ public RHNActivator(String systemidIn, String certificateIn, String serverUrlIn)
+ throws Exception {
+
+ this.certificateFileName = certificateIn;
+ this.certificateText = FileUtils.readFileToString(new File(this.certificateFileName));
+ URL serverUrl = new URL(serverUrlIn);
+ client = newClient(serverUrl);
+ File systemid_file = new File(systemidIn);
+ this.systemid = FileUtils.readFileToString(systemid_file);
+ }
+
+ /**
+ * RHN Connector Constructor
+ * @param certificateTextIn certificate text as a string
+ * @param serverUrlIn hosted serverUrl
+ *
+ */
+ public RHNActivator(String certificateTextIn, String serverUrlIn) throws Exception {
+ this.certificateText = certificateTextIn;
+
+ // store the file to local server
+ this.writeStringToFile();
+ URL serverUrl = new URL(serverUrlIn);
+ client = newClient(serverUrl);
+ File systemid_file = new File(RHNConstants.DEFAULT_SYSTEM_ID);
+ this.systemid = FileUtils.readFileToString(systemid_file);
+ }
+
+ protected XmlRpcClient newClient(URL serverUrl) {
+ XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
+ config.setServerURL(serverUrl);
+ client = new XmlRpcClient();
+ client.setConfig(config);
+ // Add support for SSL connections to RHN Hosted
+ RhnSSLTransportFactory transportFactory = new RhnSSLTransportFactory(client);
+ client.setTransportFactory(transportFactory);
+ return client;
+ }
+ /**
+ * Call that invokes the server object and passing in the xmlrpc
+ * exposed call to activate the rhq server.
+ *
+ */
+ public void processActivation() throws Exception {
+
+ ArrayList<String> params = new ArrayList<String>();
+ params.add(this.systemid);
+ params.add(this.certificateText);
+
+ this.client.execute("satellite.activateSatellite", params);
+ log.info("Activation successful");
+ }
+
+ /**
+ * Call that invokes the server object and passing in the xmlrpc
+ * exposed call to deactivate the rhq server.
+ *
+ */
+ public void processDeActivation() throws Exception {
+ ArrayList<String> params = new ArrayList<String>();
+ params.add(this.systemid);
+
+ this.client.execute("satellite.deactivateSatellite", params);
+ log.info("Activation successful");
+
+ // this.deleteCertTempFile(this.certificateFileName);
+ }
+
+ public PublicKeyRing readDefaultKeyRing()
+ throws ClassNotFoundException, KeyException, IOException {
+ InputStream keyringStream = new FileInputStream(RHNConstants.DEFAULT_WEBAPP_GPG_KEY_RING);
+ return new PublicKeyRing(keyringStream);
+ }
+
+ /**
+ * Stores the certificate text string as a file on the filesystem
+ *
+ */
+ protected void writeStringToFile() throws Exception {
+ String tmpDir = System.getProperty("java.io.tmpdir");
+
+ this.certificateFileName = tmpDir + "/rhn-entitlement-cert" + ".cert";
+
+ FileOutputStream out = new FileOutputStream(this.certificateFileName);
+ PrintStream printer = new PrintStream(out);
+ try {
+ printer.println(this.certificateText);
+ }
+ finally {
+ printer.close();
+ }
+ }
+
+ /**
+ * Delete the certificate file from the filesystem.
+ * @param fileName certificate filename
+ * @return boolean returns delete operation status
+ *
+ */
+ protected boolean deleteCertTempFile(String fileName) {
+ File f = new File(fileName);
+ return f.delete();
+ }
+
+ public static void main(String[] args) {
+ // commandline test
+ if (args.length > 0) {
+
+ String systemid = args[0];
+ String cert = args[1];
+ String serverUrl = "http://satellite.rhn.redhat.com/rpc/api";
+ try {
+ RHNActivator rhqServer = new RHNActivator(systemid, cert, serverUrl);
+ rhqServer.processActivation();
+ System.out.println("Activation Complete");
+ rhqServer.processDeActivation();
+ System.out.println("De-Activation Complete");
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+}
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnector.java b/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnector.java
deleted file mode 100644
index f8ce152..0000000
--- a/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnector.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.server.plugins.rhnhosted;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.net.URL;
-import java.security.KeyException;
-import java.util.ArrayList;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.rhq.enterprise.server.plugins.rhnhosted.certificate.PublicKeyRing;
-import org.rhq.enterprise.server.plugins.rhnhosted.xmlrpc.RhnSSLTransportFactory;
-
-import org.apache.xmlrpc.client.XmlRpcClient;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-
-
-
-/**
- * @author pkilambi
- *
- */
-public class RHNConnector {
-
- private String certificateFileName;
- private String certificateText;
- private String systemid;
- private XmlRpcClient client;
- private final Log log = LogFactory.getLog(RHNConnector.class);
-
- /**
- * RHN Connector Constructor
- * @param systemidIn systemId file path
- * @param certificateIn certificate file path
- * @param serverUrlIn hosted server url as a string
- *
- */
- public RHNConnector(String systemidIn, String certificateIn, String serverUrlIn)
- throws Exception {
-
- this.certificateFileName = certificateIn;
- this.certificateText = FileUtils.readFileToString(new File(this.certificateFileName));
- URL serverUrl = new URL(serverUrlIn);
- client = newClient(serverUrl);
- File systemid_file = new File(systemidIn);
- this.systemid = FileUtils.readFileToString(systemid_file);
- }
-
- /**
- * RHN Connector Constructor
- * @param certificateTextIn certificate text as a string
- * @param serverUrlIn hosted serverUrl
- *
- */
- public RHNConnector(String certificateTextIn, String serverUrlIn) throws Exception {
- this.certificateText = certificateTextIn;
-
- // store the file to local server
- this.writeStringToFile();
- URL serverUrl = new URL(serverUrlIn);
- client = newClient(serverUrl);
- File systemid_file = new File(RHNConstants.DEFAULT_SYSTEM_ID);
- this.systemid = FileUtils.readFileToString(systemid_file);
- }
-
- protected XmlRpcClient newClient(URL serverUrl) {
- XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- config.setServerURL(serverUrl);
- client = new XmlRpcClient();
- client.setConfig(config);
- // Add support for SSL connections to RHN Hosted
- RhnSSLTransportFactory transportFactory = new RhnSSLTransportFactory(client);
- client.setTransportFactory(transportFactory);
- return client;
- }
- /**
- * Call that invokes the server object and passing in the xmlrpc
- * exposed call to activate the rhq server.
- *
- */
- public void processActivation() throws Exception {
-
- ArrayList<String> params = new ArrayList<String>();
- params.add(this.systemid);
- params.add(this.certificateText);
-
- this.client.execute("satellite.activateSatellite", params);
- log.info("Activation successful");
- }
-
- /**
- * Call that invokes the server object and passing in the xmlrpc
- * exposed call to deactivate the rhq server.
- *
- */
- public void processDeActivation() throws Exception {
- ArrayList<String> params = new ArrayList<String>();
- params.add(this.systemid);
-
- this.client.execute("satellite.deactivateSatellite", params);
- log.info("Activation successful");
-
- // this.deleteCertTempFile(this.certificateFileName);
- }
-
- public PublicKeyRing readDefaultKeyRing()
- throws ClassNotFoundException, KeyException, IOException {
- InputStream keyringStream = new FileInputStream(RHNConstants.DEFAULT_WEBAPP_GPG_KEY_RING);
- return new PublicKeyRing(keyringStream);
- }
-
- /**
- * Stores the certificate text string as a file on the filesystem
- *
- */
- protected void writeStringToFile() throws Exception {
- String tmpDir = System.getProperty("java.io.tmpdir");
-
- this.certificateFileName = tmpDir + "/rhn-entitlement-cert" + ".cert";
-
- FileOutputStream out = new FileOutputStream(this.certificateFileName);
- PrintStream printer = new PrintStream(out);
- try {
- printer.println(this.certificateText);
- }
- finally {
- printer.close();
- }
- }
-
- /**
- * Delete the certificate file from the filesystem.
- * @param fileName certificate filename
- * @return boolean returns delete operation status
- *
- */
- protected boolean deleteCertTempFile(String fileName) {
- File f = new File(fileName);
- return f.delete();
- }
-
- public static void main(String[] args) {
- // commandline test
- if (args.length > 0) {
-
- String systemid = args[0];
- String cert = args[1];
- String serverUrl = "http://satellite.rhn.redhat.com/rpc/api";
- try {
- RHNConnector rhqServer = new RHNConnector(systemid, cert, serverUrl);
- rhqServer.processActivation();
- System.out.println("Activation Complete");
- rhqServer.processDeActivation();
- System.out.println("De-Activation Complete");
-
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- }
-}
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNProvider.java b/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNProvider.java
index 6d893d6..ddbec98 100644
--- a/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNProvider.java
+++ b/modules/enterprise/server/plugins/rhnhosted/src/main/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNProvider.java
@@ -49,7 +49,7 @@ package org.rhq.enterprise.server.plugins.rhnhosted;
public class RHNProvider implements ContentProvider, PackageSource {
private final Log log = LogFactory.getLog(RHNProvider.class);
- private RHNConnector rhnObject;
+ private RHNActivator rhnObject;
private RHNHelper helper;
/**
@@ -104,7 +104,7 @@ public class RHNProvider implements ContentProvider, PackageSource {
// Now we have valid data. Spawn the activation.
try {
- rhnObject = new RHNConnector(certificate, location);
+ rhnObject = new RHNActivator(certificate, location);
rhnObject.processActivation();
log.debug("Activation successful");
} catch (Exception e) {
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivatorTest.java b/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivatorTest.java
new file mode 100644
index 0000000..aa62ca2
--- /dev/null
+++ b/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNActivatorTest.java
@@ -0,0 +1,98 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 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.server.plugins.rhnhosted;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+
+public class RHNActivatorTest extends TestCase {
+
+ private static final String TEST_CERT_PATH = "./entitlement-cert.xml";
+ private static final String TEST_SERVER_URL = "http://satellite.rhn.redhat.com/rpc/api";
+ private static final String TEST_SYSTEM_ID = RHNConstants.DEFAULT_SYSTEM_ID;
+
+ private RHNActivator rhnObject;
+
+ public void setUp() throws Exception {
+ rhnObject = new RHNActivator(TEST_SYSTEM_ID, TEST_CERT_PATH, TEST_SERVER_URL);
+ assertNotNull(rhnObject);
+ }
+
+
+ public final void testActivate() throws Exception {
+ String systemid = readSystemId();
+ String cert = readCertificate();
+ System.out.println("systemid and cert are:" + systemid + cert);
+ if (StringUtils.isBlank(systemid) || StringUtils.isBlank(cert)) {
+ System.out.println("Skipping test since systemid or cert is not readable");
+ return;
+ }
+ boolean success = true;
+ try {
+ rhnObject.processActivation();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ success = false;
+ }
+ assertEquals(true, success);
+ }
+
+ public final void testDeActivate() throws Exception {
+ String systemid = readSystemId();
+ String cert = readCertificate();
+ if (StringUtils.isBlank(systemid) || StringUtils.isBlank(cert)) {
+ System.out.println("Skipping test since systemid or cert is not readable");
+ return;
+ }
+ boolean success = true;
+ try {
+ rhnObject.processDeActivation();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ success = false;
+ }
+ assertEquals(true, success);
+ }
+
+ protected String readSystemId() throws Exception {
+ try {
+ return FileUtils.readFileToString(new File(TEST_SYSTEM_ID));
+ } catch (IOException e) {
+ return "";
+ }
+ }
+
+ protected String readCertificate() throws Exception {
+ try {
+ return FileUtils.readFileToString(new File(TEST_CERT_PATH));
+ } catch (IOException e) {
+ return "";
+ }
+
+ }
+
+}
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnectorTest.java b/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnectorTest.java
deleted file mode 100644
index 73b3a79..0000000
--- a/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNConnectorTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 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.server.plugins.rhnhosted;
-
-import junit.framework.TestCase;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
-
-public class RHNConnectorTest extends TestCase {
-
- private static final String TEST_CERT_PATH = "./entitlement-cert.xml";
- private static final String TEST_SERVER_URL = "http://satellite.rhn.redhat.com/rpc/api";
- private static final String TEST_SYSTEM_ID = RHNConstants.DEFAULT_SYSTEM_ID;
-
- private RHNConnector rhnObject;
-
- public void setUp() throws Exception {
- rhnObject = new RHNConnector(TEST_SYSTEM_ID, TEST_CERT_PATH, TEST_SERVER_URL);
- assertNotNull(rhnObject);
- }
-
-
- public final void testActivate() throws Exception {
- String systemid = readSystemId();
- String cert = readCertificate();
- System.out.println("systemid and cert are:" + systemid + cert);
- if (StringUtils.isBlank(systemid) || StringUtils.isBlank(cert)) {
- System.out.println("Skipping test since systemid or cert is not readable");
- return;
- }
- boolean success = true;
- try {
- rhnObject.processActivation();
- }
- catch (Exception e) {
- e.printStackTrace();
- success = false;
- }
- assertEquals(true, success);
- }
-
- public final void testDeActivate() throws Exception {
- String systemid = readSystemId();
- String cert = readCertificate();
- if (StringUtils.isBlank(systemid) || StringUtils.isBlank(cert)) {
- System.out.println("Skipping test since systemid or cert is not readable");
- return;
- }
- boolean success = true;
- try {
- rhnObject.processDeActivation();
- }
- catch (Exception e) {
- e.printStackTrace();
- success = false;
- }
- assertEquals(true, success);
- }
-
- protected String readSystemId() throws Exception {
- try {
- return FileUtils.readFileToString(new File(TEST_SYSTEM_ID));
- } catch (IOException e) {
- return "";
- }
- }
-
- protected String readCertificate() throws Exception {
- try {
- return FileUtils.readFileToString(new File(TEST_CERT_PATH));
- } catch (IOException e) {
- return "";
- }
-
- }
-
-}
diff --git a/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNHelperTest.java b/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNHelperTest.java
new file mode 100644
index 0000000..070579a
--- /dev/null
+++ b/modules/enterprise/server/plugins/rhnhosted/src/test/java/org/rhq/enterprise/server/plugins/rhnhosted/RHNHelperTest.java
@@ -0,0 +1,81 @@
+package org.rhq.enterprise.server.plugins.rhnhosted;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.IOException;
+import java.io.File;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.io.FileUtils;
+import org.rhq.core.clientapi.server.plugin.content.ContentProviderPackageDetails;
+
+/**
+ * RHNHelper Tester.
+ *
+ * @author pkilambi
+ */
+public class RHNHelperTest extends TestCase {
+
+ private static final String TEST_SERVER_URL = "http://satellite.rhn.redhat.com/";
+ private static final String REPO_LABEL = "rhel-i386-server-vt-5";
+
+ private RHNHelper helper;
+
+ public RHNHelperTest(String name) {
+ super(name);
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ helper = new RHNHelper(TEST_SERVER_URL, REPO_LABEL);
+ }
+
+ public void testGetPackageDetails() throws Exception {
+ boolean success;
+
+ try {
+ List pids = helper.getChannelPackages();
+ List<ContentProviderPackageDetails> pkgdetails = helper.getPackageDetails(pids);
+ for (ContentProviderPackageDetails pkg: pkgdetails) {
+ assertFalse(StringUtils.isBlank(pkg.getDisplayName()));
+ assertFalse(StringUtils.isBlank(pkg.getArchitectureName()));
+ assertFalse(StringUtils.isBlank(pkg.getPackageTypeName()));
+ assertFalse(StringUtils.isBlank(pkg.getName()));
+ assertFalse(StringUtils.isBlank(pkg.getFileName()));
+ assertFalse(StringUtils.isBlank(pkg.getLongDescription()));
+ assertFalse(StringUtils.isBlank(pkg.getMD5()));
+
+ }
+ success = true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ success = false;
+ }
+
+ assertTrue(success);
+ }
+
+ public void testGetChannelPackages() throws Exception {
+ boolean success = true;
+ try {
+ ArrayList pkgIds = helper.getChannelPackages();
+ assertTrue(pkgIds.size() > 0);
+ } catch (Exception e) {
+ e.printStackTrace();
+ success = false;
+ }
+
+ assertTrue(success);
+ }
+
+
+ protected String readSystemId() throws Exception {
+ try {
+ return FileUtils.readFileToString(new File(RHNConstants.DEFAULT_SYSTEM_ID));
+ } catch (IOException e) {
+ return "";
+ }
+ }
+}
14 years, 6 months
[rhq] Branch 'raw-config' - 2 commits - modules/core modules/enterprise modules/plugins
by John Sanda
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java | 2 -
modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java | 11 +++++++++-
modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java | 4 ++-
modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java | 8 +++++++
modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java | 8 ++++++-
5 files changed, 29 insertions(+), 4 deletions(-)
New commits:
commit b3f12c47502e15e6649e44bf218b3199665ca8b0
Author: John Sanda <john(a)localhost.localdomain>
Date: Tue Oct 27 21:46:22 2009 -0400
Disabling test that is failing on build server.
After taking a look at the test, the test appears fragile as it looks like
it depends on the presence of some config files on the file system, namely
grub.conf. This file path exists on the build server but may or may not
exist on other machines; hence, this is a fragile test that ought to be
refactored.
diff --git a/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java b/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
index 774d43a..5511e79 100644
--- a/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
+++ b/modules/plugins/grub/src/test/java/org/rhq/plugins/grub/GrubComponentTest.java
@@ -52,7 +52,13 @@ public class GrubComponentTest {
pluginConfiguration.put(new PropertySimple("augeas-grub-path", "/files/etc/grub.conf/*"));
}
- @Test
+ // Disabling test since it is failing on hudson build. Upon inspection, it looks like the behavior of the
+ // class under test will be influenced by the presence of the files listed above whose paths are added as
+ // properties to the pluginConfiguration object. Since those files may or may not be present on the local
+ // file system, it is another reason to disable this test
+ //
+ // jsanda
+ @Test(enabled = false)
public void loadResourceConfiguration() throws Exception {
Configuration configuration;
try {
commit 9bbcbff5471505254cc137368d1cab2baeb9226a
Author: John Sanda <john(a)localhost.localdomain>
Date: Tue Oct 27 21:42:58 2009 -0400
Fixing failing tests, disabling one, debugging another.
The failure in ConfigurationTest was a legitimate failure due to a bug in
RawConfiguration.deepCopy(). The failure in PluginTest was a result of trying
to use bad data. Adding some debugging to ScriptAssertTest as I have a hunch
that the javax.script libraries are not installed with the openjdk packages
that are being used on the build server.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
index e8cfddc..ca02070 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/RawConfiguration.java
@@ -247,7 +247,7 @@ public class RawConfiguration implements Serializable, DeepCopyable<RawConfigura
RawConfiguration copy = new RawConfiguration();
copy.path = this.path;
if (this.contents != null) {
- copy.contents = this.getContents();
+ copy.setContents(this.getContents());
}
return copy;
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
index c502f99..36084ec 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/configuration/ConfigurationTest.java
@@ -28,6 +28,7 @@ import static org.testng.Assert.*;
import org.testng.annotations.Test;
import java.util.Random;
+import java.util.Set;
/**
* This class has tests for Configuration just like org.rhq.core.domain.configuration.test.ConfigurationTest. These
@@ -110,7 +111,15 @@ public class ConfigurationTest {
original.getRawConfigurations(),
"The rawConfigurations property should not refer to the original rawConfigurations of the copied object."
);
- assertEquals(copy.getRawConfigurations(), original.getRawConfigurations(), "Failed to copy rawConfigurations property.");
+
+ assertRawConfigurationsEquals(copy.getRawConfigurations(), original.getRawConfigurations(), "Failed to copy rawConfigurations property.");
+ }
+
+ void assertRawConfigurationsEquals(Set<RawConfiguration> actual, Set<RawConfiguration> expected, String msg) {
+ assertEquals(actual.size(), expected.size(), msg + " -- The rawConfigurations set has the wrong number of elements.");
+ for (RawConfiguration rawConfig : expected) {
+ assertTrue(actual.contains(rawConfig), msg + " -- Failed to find " + rawConfig);
+ }
}
@Test
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
index 9fc810a..9327b2a 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/resource/test/PluginTest.java
@@ -96,7 +96,7 @@ public class PluginTest extends AbstractEJB3Test {
enabled = !enabled;
md5 = md5 + "00000";
String version = "version-UPDATED";
- String ampsVersion = "ampsVersion-UPDATED";
+ String ampsVersion = "2.1";
String description = "description-UPDATED";
String help = "help-UPDATED";
@@ -147,6 +147,8 @@ public class PluginTest extends AbstractEJB3Test {
em.close();
getTransactionManager().commit();
done = true;
+ } catch (Throwable t) {
+ t.printStackTrace();
} finally {
if (!done) {
getTransactionManager().rollback();
diff --git a/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java b/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
index 6d72759..3ab3284 100644
--- a/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
+++ b/modules/enterprise/remoting/cli/src/test/java/org/rhq/enterprise/client/utility/ScriptAssertTest.java
@@ -23,13 +23,21 @@
package org.rhq.enterprise.client.utility;
+import static org.testng.Assert.*;
+
import org.testng.annotations.Test;
+import org.testng.annotations.BeforeClass;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class ScriptAssertTest {
+ @BeforeClass
+ public void verifyScriptEngineIsAvailable() {
+ assertNotNull(createScriptEngine(), "ScriptEngine is not available. Are the required libraries on the classpath?");
+ }
+
@Test
public void assertExistsShouldReturnTrueWhenVariableIsBound() {
ScriptEngine scriptEngine = createScriptEngine();
14 years, 6 months
[rhq] modules/enterprise
by Greg Hinkle
modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
New commits:
commit 133b6a9ad83acfdc20fd95bedabbdbbb0ef6816c
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Tue Oct 27 21:10:02 2009 -0400
Attempt to support builds on platforms without separate JRE directories
diff --git a/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml b/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
index 0925313..d03c271 100644
--- a/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
+++ b/modules/enterprise/remoting/webservices/src/main/scripts/rhq-client.build.xml
@@ -117,7 +117,8 @@
<!-- Classpath for WSConsume/WSProvide. Defined globally so that custom task defs can reference. -->
<!-- So,it's JBossws version specific (and assumes compatibility between JBossws and AS -->
<path id="jbossws.native.classpath">
- <fileset dir="${java.jre.home}/../lib/" includes="*.jar" />
+ <fileset dir="${java.jre.home}/lib/" includes="*.jar" erroronmissingdir="false" />
+ <fileset dir="${java.jre.home}/../lib/" includes="*.jar" erroronmissingdir="false" />
<!-- AS dependencies -->
<fileset dir="${jboss.home}/lib/endorsed/" includes="*.jar" />
14 years, 6 months
[rhq] Branch 'linux-config' - modules/plugins
by Shannon Hughes
modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java | 7 ++++++-
modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaShareComponent.java | 4 ----
modules/plugins/samba/src/main/resources/META-INF/rhq-plugin.xml | 2 +-
3 files changed, 7 insertions(+), 6 deletions(-)
New commits:
commit 8218fe227a305ec253384d2d65f2e27eb055609b
Author: Shannon Hughes <shughes(a)fred.hughes.lan>
Date: Tue Oct 27 15:12:46 2009 -0400
fixes to samba share create using augeas plugin. added report prop logic
diff --git a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
index 5bcfbb8..d26aceb 100644
--- a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
+++ b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaServerComponent.java
@@ -52,7 +52,12 @@ public class SambaServerComponent extends AugeasConfigurationComponent {
}
@Override
- public CreateResourceReport createResource(CreateResourceReport report) {
+ public CreateResourceReport createResource(CreateResourceReport reportIn) {
+ CreateResourceReport report = reportIn;
+ Configuration config = report.getResourceConfiguration();
+ String name = config.getSimple(SambaShareComponent.NAME_RESOURCE_CONFIG_PROP).getStringValue();
+ report.setResourceKey(name);
+ report.setResourceName(name);
return super.createResource(report);
}
diff --git a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaShareComponent.java b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaShareComponent.java
index 747241f..c123e86 100644
--- a/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaShareComponent.java
+++ b/modules/plugins/samba/src/main/java/org/rhq/plugins/samba/SambaShareComponent.java
@@ -81,8 +81,4 @@ public class SambaShareComponent extends AugeasConfigurationComponent<SambaServe
super.deleteResource();
}
- public CreateResourceReport createResource(CreateResourceReport report) {
- return super.createResource(report);
- }
-
}
diff --git a/modules/plugins/samba/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/samba/src/main/resources/META-INF/rhq-plugin.xml
index 0d4cb7c..a98da65 100644
--- a/modules/plugins/samba/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/samba/src/main/resources/META-INF/rhq-plugin.xml
@@ -50,7 +50,7 @@
</c:group>
<c:group name="Printing">
- <c:simple-property name="load printers" displayName="Printing Enabled" type="boolean" description="Controls whether all printers in the printcap will be loaded for browsing by default"/>
+ <c:simple-property name="load printers" required="false" displayName="Printing Enabled" type="boolean" description="Controls whether all printers in the printcap will be loaded for browsing by default"/>
<c:simple-property name="cups options" required="false" description="Free form string of options passed to cups library"/>
</c:group>
14 years, 6 months
[rhq] Branch 'linux-config' - 2 commits - modules/helpers
by Partha Aji
modules/helpers/pluginAnnotations/pom.xml | 2 +-
modules/helpers/pluginGen/pom.xml | 2 +-
modules/helpers/pom.xml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
New commits:
commit 63254c634b7ea33ffaf259dbeb69e63b8ea868f7
Merge: 3145a64... dcc37be...
Author: Partha Aji <paji(a)redhat.com>
Date: Tue Oct 27 14:57:37 2009 -0400
Merge branch 'master' into linux-config
commit dcc37be2ccb608d9a84d00245d16c55931f4d862
Author: Heiko W. Rupp <pilhuhn(a)fedorapeople.org>
Date: Tue Oct 27 11:53:25 2009 +0100
More pom work to make users happy that obtain the pugin* stuff from a remote repo.
diff --git a/modules/helpers/pluginAnnotations/pom.xml b/modules/helpers/pluginAnnotations/pom.xml
index a3dc269..dbf2bad 100644
--- a/modules/helpers/pluginAnnotations/pom.xml
+++ b/modules/helpers/pluginAnnotations/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
diff --git a/modules/helpers/pluginGen/pom.xml b/modules/helpers/pluginGen/pom.xml
index 0fd3ff7..3197e9e 100644
--- a/modules/helpers/pluginGen/pom.xml
+++ b/modules/helpers/pluginGen/pom.xml
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
diff --git a/modules/helpers/pom.xml b/modules/helpers/pom.xml
index 6814e97..6731258 100644
--- a/modules/helpers/pom.xml
+++ b/modules/helpers/pom.xml
@@ -8,7 +8,7 @@
<version>1.4.0-SNAPSHOT</version>
</parent>
- <groupId>org.rhq</groupId>
+ <groupId>org.rhq.helpers</groupId>
<artifactId>rhq-helpers</artifactId>
<packaging>pom</packaging>
14 years, 6 months
[rhq] Branch 'linux-config' - modules/plugins
by Partha Aji
modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java | 11 +++++++++-
modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java | 3 +-
modules/plugins/sudoers/src/main/resources/META-INF/rhq-plugin.xml | 6 +++--
3 files changed, 16 insertions(+), 4 deletions(-)
New commits:
commit 3145a6481b06ea4984212c5f89452c2cc28fe9c3
Author: Partha Aji <paji(a)redhat.com>
Date: Tue Oct 27 14:57:02 2009 -0400
Got the add functionality working with sudoers
diff --git a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
index 0bfcef0..803804d 100644
--- a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
+++ b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/AugeasConfigurationComponent.java
@@ -72,6 +72,7 @@ public class AugeasConfigurationComponent<T extends ResourceComponent> implement
public static final String EXCLUDE_GLOBS_PROP = "configurationFilesExclusionPatterns";
public static final String RESOURCE_CONFIGURATION_ROOT_NODE_PROP = "resourceConfigurationRootNode";
public static final String AUGEAS_MODULE_NAME_PROP = "augeasModuleName";
+ public static final String NEW_NODE_EXPRESSION = "newNodeExpression";
private static final boolean IS_WINDOWS = (File.separatorChar == '\\');
private static final String AUGEAS_LOAD_PATH = "/usr/share/augeas/lenses";
@@ -468,6 +469,9 @@ public class AugeasConfigurationComponent<T extends ResourceComponent> implement
protected void setNodeFromPropertyList(PropertyDefinitionList propDefList, PropertyList propList, Augeas augeas,
AugeasNode listNode) {
PropertyDefinition listMemberPropDef = propDefList.getMemberDefinition();
+
+ PropertySimple newNodeExpression = resourceContext.getPluginConfiguration().getSimple(NEW_NODE_EXPRESSION);
+
if (!(listMemberPropDef instanceof PropertyDefinitionMap)) {
throw new IllegalArgumentException(
"Invalid Resource ConfigurationDefinition - only lists of maps are supported.");
@@ -490,10 +494,15 @@ public class AugeasConfigurationComponent<T extends ResourceComponent> implement
// Keep track of the existing nodes that we'll be updating, so that we can remove all other existing
// nodes.
updatedListMemberNodes.add(memberNodeToUpdate);
+ } else if (newNodeExpression != null) {
+ String var = "var" + listIndex;
+ augeas.defineNode(var, newNodeExpression.getStringValue(), null);
+ memberNodeToUpdate = new AugeasNode("$" + var);
} else {
// The maps in the list are non-keyed, or there is no map in the list with the same key as the map
// being added, so create a new node for the map to add to the list.
- memberNodeToUpdate = new AugeasNode(listNode, "0" + (listIndex++));
+ memberNodeToUpdate = new AugeasNode(listNode, "0" + (listIndex));
+ listIndex++;
}
// Update the node's children.
diff --git a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
index 7c01a14..cc62907 100644
--- a/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
+++ b/modules/plugins/augeas/src/main/java/org/rhq/plugins/augeas/helper/AugeasNode.java
@@ -25,6 +25,7 @@ package org.rhq.plugins.augeas.helper;
*/
public class AugeasNode {
public static final char SEPARATOR_CHAR = '/';
+ public static final char VARIABLE_CHAR = '$';
public static final String SEPARATOR = new String(new char[] { SEPARATOR_CHAR });
private String path;
@@ -33,7 +34,7 @@ public class AugeasNode {
if (path == null) {
throw new IllegalArgumentException("'path' parameter must not be null.");
}
- if (path.charAt(0) != SEPARATOR_CHAR) {
+ if (path.charAt(0) != SEPARATOR_CHAR && path.charAt(0) != VARIABLE_CHAR) {
throw new IllegalArgumentException("Specified path (" + path + ") is not absolute.");
}
diff --git a/modules/plugins/sudoers/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/sudoers/src/main/resources/META-INF/rhq-plugin.xml
index fda6e03..828878d 100644
--- a/modules/plugins/sudoers/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/sudoers/src/main/resources/META-INF/rhq-plugin.xml
@@ -32,13 +32,15 @@
<c:simple-property name="configurationFilesInclusionPatterns" displayName="Sudoers File Path" required="true" readOnly="true"
default="/etc/sudoers" description="Location of the sudoers file."/>
<c:simple-property name="resourceConfigurationRootNode" required="true" readOnly="true"
- default="/files/etc/sudoers"/>
+ default="/files/etc/sudoers"/>
+ <c:simple-property name="newNodeExpression" required="true" readOnly="true"
+ default="/files/etc/sudoers/spec[last()+1]"/>
</plugin-configuration>
<resource-configuration>
<c:list-property name="." displayName="Entries">
<c:map-property name="spec[*]">
- <c:simple-property name="user" displayName="User/Group" type="string" required="true" activationPolicy="immediate"
+ <c:simple-property name="user" displayName="User/Group" type="string" required="true" readOnly="true" activationPolicy="immediate"
description="The User/User Alias/Group/Group Alias who needs to be given access to run a command. Alternatively you can specify aliases defined using User_Alias. Eg: if you had this defined previously User_Alias OPERATORS = joe, mike, jude - You could enter OPERATORS for the user"/>
<c:simple-property name="host_group/host" displayName="Host Alias" type="string" required="true" activationPolicy="immediate"
description="The Host alias of the terminal from which the above user can run the given command. Set it to ALL if the user is allowed to execute from any host. Alternatively if you have a Host_Alias defined you can use that here. Eg: if you defined Host_Alias OFNET = 10.1.2.0/255.255.255.0 - you could use "OFNET'" here"/>
14 years, 6 months