java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml | 4
java/code/src/com/redhat/rhn/domain/server/Crash.java | 15 +
java/code/src/com/redhat/rhn/domain/server/CrashFactory.java | 11 +
java/code/src/com/redhat/rhn/domain/server/CrashNote.hbm.xml | 3
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/crash/CrashHandler.java | 81 ++++++++++
java/code/src/com/redhat/rhn/manager/system/CrashManager.java | 11 +
6 files changed, 125 insertions(+)
New commits:
commit 60a0c0785da1f5a2c7a13b33274c77c1ac7546f9
Author: Tomas Kasparek <tkasparek(a)redhat.com>
Date: Mon Mar 18 13:38:32 2013 +0100
abrt - crash note api
methods for creating, deleting and listing crash note
diff --git a/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml b/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
index 26b4412..71d118a 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
@@ -16,6 +16,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<key column="crash_id"/>
<one-to-many class="com.redhat.rhn.domain.server.CrashFile"/>
</set>
+ <set name="crashNotes" cascade="all-delete-orphan" lazy="true" inverse="true">
+ <key column="crash_id"/>
+ <one-to-many class="com.redhat.rhn.domain.server.CrashNote"/>
+ </set>
<property name="crash" column="crash" type="string"/>
<property name="path" column="path" type="string"/>
<property name="count" column="count" type="long"/>
diff --git a/java/code/src/com/redhat/rhn/domain/server/Crash.java b/java/code/src/com/redhat/rhn/domain/server/Crash.java
index e18f8e5..82c0f6c 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Crash.java
+++ b/java/code/src/com/redhat/rhn/domain/server/Crash.java
@@ -48,6 +48,7 @@ public class Crash extends BaseDomainHelper {
private Date created;
private Date modified;
private Set<CrashFile> crashFiles;
+ private Set<CrashNote> crashNotes;
/**
* Represents application crash information.
@@ -382,4 +383,18 @@ public class Crash extends BaseDomainHelper {
this.crashFiles = cf;
}
+ /**
+ * @return crashNotes for crash
+ */
+ public Set<CrashNote> getCrashNotes() {
+ return crashNotes;
+ }
+
+ /**
+ * @param crashNotesIn crash notes to set
+ */
+ public void setCrashNotes(Set<CrashNote> crashNotesIn) {
+ crashNotes = crashNotesIn;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/CrashFactory.java b/java/code/src/com/redhat/rhn/domain/server/CrashFactory.java
index d7a33df..c14456a 100644
--- a/java/code/src/com/redhat/rhn/domain/server/CrashFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/server/CrashFactory.java
@@ -88,6 +88,17 @@ public class CrashFactory extends HibernateFactory {
}
/**
+ * @param crashNoteId Crash note id
+ * @return Crash note for given id
+ */
+ public static CrashNote lookupCrashNoteById(Long crashNoteId) {
+ Map params = new HashMap();
+ params.put("id", crashNoteId);
+ return (CrashNote) singleton.lookupObjectByNamedQuery(
+ "CrashNote.findById", params);
+ }
+
+ /**
* Lists crash notes of a specified crash
* @param crashIn crash
* @return crash notes for given crash
diff --git a/java/code/src/com/redhat/rhn/domain/server/CrashNote.hbm.xml b/java/code/src/com/redhat/rhn/domain/server/CrashNote.hbm.xml
index 4d1e3c6..2b8b070 100644
--- a/java/code/src/com/redhat/rhn/domain/server/CrashNote.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/CrashNote.hbm.xml
@@ -35,4 +35,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<query name="CrashNote.listByCrash">
<![CDATA[FROM com.redhat.rhn.domain.server.CrashNote AS cn where cn.crash = :crash]]>
</query>
+ <query name="CrashNote.findById">
+ <![CDATA[FROM com.redhat.rhn.domain.server.CrashNote AS cn where cn.id = :id]]>
+ </query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/crash/CrashHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/crash/CrashHandler.java
index 23c42f3..e0e325f 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/crash/CrashHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/crash/CrashHandler.java
@@ -24,7 +24,9 @@ import com.redhat.rhn.domain.rhnpackage.PackageFactory;
import com.redhat.rhn.domain.rhnpackage.PackageName;
import com.redhat.rhn.domain.server.Crash;
import com.redhat.rhn.domain.server.CrashCount;
+import com.redhat.rhn.domain.server.CrashFactory;
import com.redhat.rhn.domain.server.CrashFile;
+import com.redhat.rhn.domain.server.CrashNote;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
@@ -313,4 +315,83 @@ public class CrashHandler extends BaseHandler {
return Base64.encodeBase64(plainFile);
}
+
+ /**
+ * @param sessionKey Session key
+ * @param crashId Crash ID
+ * @param subject Crash note subject
+ * @param details Crash note details
+ * @return 1 on success
+ *
+ * @xmlrpc.doc Create a crash note
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "crashId")
+ * @xmlrpc.param #param("string", "subject")
+ * @xmlrpc.param #param("string", "details")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int createCrashNote(String sessionKey, Integer crashId,
+ String subject, String details) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ CrashNote cn = new CrashNote();
+ cn.setSubject(subject);
+ cn.setNote(details);
+ cn.setCreator(loggedInUser);
+ cn.setCrash(CrashManager.lookupCrashByUserAndId(loggedInUser,
+ crashId.longValue()));
+ CrashFactory.save(cn);
+ return 1;
+ }
+
+ /**
+ * @param sessionKey Session ID
+ * @param crashNoteId Crash note ID
+ * @return 1 on success
+ *
+ * @xmlrpc.doc Delete a crash note
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "crashNoteId")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int deleteCrashNote(String sessionKey, Integer crashNoteId) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ CrashNote cn = CrashManager.lookupCrashNoteByUserAndId(loggedInUser,
+ crashNoteId.longValue());
+ CrashFactory.delete(cn);
+ return 1;
+ }
+
+ /**
+ * @param sessionKey Session ID
+ * @param crashId Crash ID
+ * @return Crash notes for crash
+ *
+ * @xmlrpc.doc List crash notes for crash
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "crashId")
+ * @xmlrpc.returntype
+ * #array()
+ * #struct("crashNote")
+ * #prop("int", "id")
+ * #prop("string", "subject")
+ * #prop("string", "details")
+ * #prop("string", "updated")
+ * #struct_end()
+ * #array_end()
+ */
+ public List getCrashNotesForCrash(String sessionKey, Integer crashId) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ Crash c = CrashManager.lookupCrashByUserAndId(loggedInUser,
+ crashId.longValue());
+ List returnList = new ArrayList();
+ for (CrashNote cn : c.getCrashNotes()) {
+ HashMap crashNotesMap = new HashMap();
+ crashNotesMap.put("id", cn.getId());
+ crashNotesMap.put("subject", cn.getSubject());
+ crashNotesMap.put("details", cn.getNote());
+ crashNotesMap.put("updated", cn.getModifiedString());
+ returnList.add(crashNotesMap);
+ }
+ return returnList;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/manager/system/CrashManager.java b/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
index 8da1058..909b452 100644
--- a/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
@@ -119,4 +119,15 @@ public class CrashManager extends BaseManager {
public static CrashNote lookupCrashNoteByIdAndCrash(Long crashNoteId, Crash crash) {
return CrashFactory.lookupCrashNoteByIdAndCrash(crashNoteId, crash);
}
+
+ /**
+ * @param user User to check permissions for
+ * @param crashNoteId Crash note id to lookup for
+ * @return Crash note for given ID
+ */
+ public static CrashNote lookupCrashNoteByUserAndId(User user, Long crashNoteId) {
+ CrashNote cn = CrashFactory.lookupCrashNoteById(crashNoteId);
+ lookupCrashByUserAndId(user, cn.getCrash().getId());
+ return cn;
+ }
}