java/code/src/com/redhat/rhn/domain/action/errata/ErrataAction.java | 8 -
java/code/src/com/redhat/rhn/domain/action/errata/ErrataActionFormatter.java | 41 +++---
java/code/src/com/redhat/rhn/frontend/action/systems/ErrataConfirmSetupAction.java | 26 +---
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 8 +
java/code/src/com/redhat/rhn/manager/action/ActionManager.java | 56 +-------
java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java | 64 ++++++++--
6 files changed, 108 insertions(+), 95 deletions(-)
New commits:
commit c423cdd3693d783d37f77c306480d888b90c9439
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Oct 22 10:57:20 2012 +0200
checkstyle fixes
addressing:
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/errata/ErrataManager.java:1429:41: Expected @param tag for 'user'.
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/errata/ErrataManager.java:1429:52: Expected @param tag for 'errataIds'.
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/errata/ErrataManager.java:1429:68: Expected @param tag for 'earliest'.
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/errata/ErrataManager.java:1430:24: Expected @param tag for 'serverIds'.
Audit done.
Starting audit...
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/action/ActionManager.java:51:8: Unused import - com.redhat.rhn.domain.errata.impl.PublishedErrata.
/builddir/build/BUILD/spacewalk-java-git-3.35df254/./code/src/com/redhat/rhn/manager/action/ActionManager.java:1651: Line is longer than 92 characters.
diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
index 900f672..4697c16 100644
--- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
+++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
@@ -48,7 +48,6 @@ import com.redhat.rhn.domain.config.ConfigFileName;
import com.redhat.rhn.domain.config.ConfigRevision;
import com.redhat.rhn.domain.config.ConfigurationFactory;
import com.redhat.rhn.domain.errata.Errata;
-import com.redhat.rhn.domain.errata.impl.PublishedErrata;
import com.redhat.rhn.domain.image.Image;
import com.redhat.rhn.domain.image.ProxyConfig;
import com.redhat.rhn.domain.kickstart.KickstartData;
@@ -1648,7 +1647,8 @@ public class ActionManager extends BaseManager {
public static void scheduleAllErrataUpdate(User scheduler, Server srvr,
Date earliest) {
// Do not elaborate, we need only the IDs in here
- DataResult<Errata> errata = SystemManager.unscheduledErrata(scheduler, srvr.getId(), null);
+ DataResult<Errata> errata = SystemManager.unscheduledErrata(scheduler,
+ srvr.getId(), null);
List<Long> errataIds = new ArrayList<Long>();
for (Errata e : errata) {
errataIds.add(e.getId());
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index 95de2fe..2a0cfe2 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -1421,10 +1421,10 @@ public class ErrataManager extends BaseManager {
/**
* Apply a list of errata to a list of servers.
- * @param user
- * @param errataIds
- * @param earliest
- * @param serverIds
+ * @param user user
+ * @param errataIds errata ids
+ * @param earliest schedule time
+ * @param serverIds server ids
*/
public static void applyErrata(User user, List errataIds, Date earliest,
List<Long> serverIds) {
commit 35df254e989dd949e1aaf09502c0d64020345ed9
Author: Johannes Renner <jrenner(a)suse.de>
Date: Fri Oct 19 13:21:03 2012 +0200
Make applyErrata() work with Longs and Integers
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index 87ce201..95de2fe 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -1395,7 +1395,7 @@ public class ErrataManager extends BaseManager {
}
// at this point all errata is applicable to all systems, so let's apply
- applyErrata(loggedInUser, convertToLongs(errataIds), earliestOccurrence, systemIds);
+ applyErrata(loggedInUser, errataIds, earliestOccurrence, systemIds);
}
private static void checkApplicableErrata(User loggedInUser, List<Integer> errataIds,
@@ -1426,12 +1426,16 @@ public class ErrataManager extends BaseManager {
* @param earliest
* @param serverIds
*/
- public static void applyErrata(User user, List<Long> errataIds, Date earliest,
+ public static void applyErrata(User user, List errataIds, Date earliest,
List<Long> serverIds) {
// Schedule updates to the software update stack first
ErrataAction swStackUpdate = null;
List<Errata> errata = new ArrayList<Errata>();
- for (Long currentId : errataIds) {
+ for (Iterator it = errataIds.iterator(); it.hasNext();) {
+ Object next = it.next();
+ Long currentId = next instanceof Long ? (Long) next :
+ ((Integer) next).longValue();
+
Errata erratum = ErrataManager.lookupErrata(currentId, user);
if (erratum.hasKeyword("restart_suggested")) {
if (swStackUpdate == null) {
@@ -1472,15 +1476,4 @@ public class ErrataManager extends BaseManager {
}
return (ErrataAction) update;
}
-
- /**
- * Convert a list of {@link Integer} to a list of {@link Long}.
- */
- private static List<Long> convertToLongs(List<Integer> list) {
- List<Long> ret = new ArrayList<Long>();
- for (Integer i : list) {
- ret.add(i.longValue());
- }
- return ret;
- }
}
commit 19322df032a57b379dfefc2b40f3c50dc8230145
Author: Johannes Renner <jrenner(a)suse.de>
Date: Thu Oct 18 17:48:59 2012 +0200
Show errata details for all errata in the given list
diff --git a/java/code/src/com/redhat/rhn/domain/action/errata/ErrataAction.java b/java/code/src/com/redhat/rhn/domain/action/errata/ErrataAction.java
index 8339ac1..c0ed236 100644
--- a/java/code/src/com/redhat/rhn/domain/action/errata/ErrataAction.java
+++ b/java/code/src/com/redhat/rhn/domain/action/errata/ErrataAction.java
@@ -27,19 +27,19 @@ import java.util.Set;
*/
public class ErrataAction extends Action {
- private Set errata;
+ private Set<Errata> errata;
/**
* @return Returns the errata.
*/
- public Set getErrata() {
+ public Set<Errata> getErrata() {
return errata;
}
/**
* @param errataIn The errata to set.
*/
- public void setErrata(Set errataIn) {
+ public void setErrata(Set<Errata> errataIn) {
this.errata = errataIn;
}
@@ -49,7 +49,7 @@ public class ErrataAction extends Action {
*/
public void addErrata(Errata e) {
if (errata == null) {
- errata = new HashSet();
+ errata = new HashSet<Errata>();
}
errata.add(e);
}
diff --git a/java/code/src/com/redhat/rhn/domain/action/errata/ErrataActionFormatter.java b/java/code/src/com/redhat/rhn/domain/action/errata/ErrataActionFormatter.java
index fe0760f..e3ffe15 100644
--- a/java/code/src/com/redhat/rhn/domain/action/errata/ErrataActionFormatter.java
+++ b/java/code/src/com/redhat/rhn/domain/action/errata/ErrataActionFormatter.java
@@ -42,29 +42,30 @@ public class ErrataActionFormatter extends ActionFormatter {
*/
protected String getNotesBody() {
StringBuffer retval = new StringBuffer();
- Set erratas = ((ErrataAction) this.getAction()).getErrata();
+ Set<Errata> erratas = ((ErrataAction) this.getAction()).getErrata();
if (erratas != null && erratas.size() > 0) {
- Errata errata = (Errata) erratas.toArray()[0];
- retval.append("<strong><a href=\"/rhn/errata/details/Details.do?eid=");
- retval.append(errata.getId().toString());
- retval.append("\">");
- retval.append(errata.getAdvisory());
- retval.append("</a></strong><br/><br/>");
- retval.append("<strong>");
- retval.append(errata.getSynopsis());
- retval.append("</strong><br/><br/>");
- retval.append(errata.getAdvisoryType());
- retval.append("<br/><br/>");
- if (errata.getTopic() != null) {
- retval.append(StringUtil.htmlifyText(errata.getTopic()));
+ for (Errata errata : erratas) {
+ retval.append("<strong><a href=\"/rhn/errata/details/Details.do?eid=");
+ retval.append(errata.getId().toString());
+ retval.append("\">");
+ retval.append(errata.getAdvisory());
+ retval.append("</a></strong><br/><br/>");
+ retval.append("<strong>");
+ retval.append(errata.getSynopsis());
+ retval.append("</strong><br/><br/>");
+ retval.append(errata.getAdvisoryType());
+ retval.append("<br/><br/>");
+ if (errata.getTopic() != null) {
+ retval.append(StringUtil.htmlifyText(errata.getTopic()));
+ }
+ retval.append("<br/>");
+ if (errata.getDescription() != null) {
+ retval.append(StringUtil.htmlifyText(errata.getDescription()));
+ }
+ retval.append("<br/>");
+ retval.append("<br/>");
}
- retval.append("<br/>");
- if (errata.getDescription() != null) {
- retval.append(StringUtil.htmlifyText(errata.getDescription()));
- }
- retval.append("<br/>");
}
-
return retval.toString();
}
commit 5167f69da57d9b3192483a4fa516c8e0a024caf4
Author: Johannes Renner <jrenner(a)suse.de>
Date: Thu Oct 18 17:26:01 2012 +0200
Schedule updates for software update stack first
diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/ErrataConfirmSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/systems/ErrataConfirmSetupAction.java
index 675ce52..3814ea7 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/systems/ErrataConfirmSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/systems/ErrataConfirmSetupAction.java
@@ -15,9 +15,6 @@
package com.redhat.rhn.frontend.action.systems;
import com.redhat.rhn.common.util.DatePicker;
-import com.redhat.rhn.domain.action.Action;
-import com.redhat.rhn.domain.errata.Errata;
-import com.redhat.rhn.domain.errata.ErrataFactory;
import com.redhat.rhn.domain.rhnset.RhnSet;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
@@ -27,7 +24,7 @@ import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.frontend.struts.StrutsDelegate;
import com.redhat.rhn.frontend.taglibs.list.helper.ListRhnSetHelper;
import com.redhat.rhn.frontend.taglibs.list.helper.Listable;
-import com.redhat.rhn.manager.action.ActionManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.manager.system.SystemManager;
import org.apache.struts.action.ActionForm;
@@ -37,9 +34,13 @@ import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -113,16 +114,14 @@ public class ErrataConfirmSetupAction extends RhnAction implements Listable {
Server server = SystemManager.lookupByIdAndUser(sid, user);
RhnSet set = ErrataSetupAction.getSetDecl(sid).get(user);
- List<Errata> errataList = ErrataFactory.listErrata(set.getElementValues());
-
+ // Get the errata IDs
+ Set<Long> errataList = set.getElementValues();
if (server != null && !errataList.isEmpty()) {
- for (Errata e : errataList) {
- Action update = ActionManager.createErrataAction(user, e);
- ActionManager.addServerToAction(server.getId(), update);
- update.setEarliestAction(getStrutsDelegate().readDatePicker(form, "date",
- DatePicker.YEAR_RANGE_POSITIVE));
- ActionManager.storeAction(update);
- }
+ Date earliest = getStrutsDelegate().readDatePicker(form, "date",
+ DatePicker.YEAR_RANGE_POSITIVE);
+ List<Long> serverIds = Arrays.asList(server.getId());
+ List<Long> errataIds = new ArrayList<Long>(errataList);
+ ErrataManager.applyErrata(user, errataIds, earliest, serverIds);
ActionMessages msg = new ActionMessages();
Object[] args = new Object[3];
@@ -153,7 +152,6 @@ public class ErrataConfirmSetupAction extends RhnAction implements Listable {
mapping.findForward(RhnHelper.DEFAULT_FORWARD), params);
}
-
/**
* Makes a parameter map containing request params that need to
* be forwarded on to the success mapping.
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 5b4f5bb..2bfacdd 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -2125,6 +2125,14 @@ available for this kickstart profile to function properly.
</context-group>
</trans-unit>
+ <trans-unit id="errata.swstack">
+<source>Errata Update: Combined update for the software update stack ({0} errata)</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/errata/details/ErrataConfirm.do</context>
+ <context context-type="paramnotes">Errata Update: combined software stack update (4 errata)</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="errata.schedule">
<source><strong>{0}</strong> errata update has been scheduled for <a href="/rhn/systems/details/Overview.do?sid={2}">{1}</a>.</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
index 5467c64..900f672 100644
--- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
+++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
@@ -70,6 +70,7 @@ import com.redhat.rhn.manager.MissingCapabilityException;
import com.redhat.rhn.manager.MissingEntitlementException;
import com.redhat.rhn.manager.configuration.ConfigurationManager;
import com.redhat.rhn.manager.entitlement.EntitlementManager;
+import com.redhat.rhn.manager.errata.ErrataManager;
import com.redhat.rhn.manager.kickstart.ProvisionVirtualInstanceCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerVirtualSystemCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
@@ -80,6 +81,7 @@ import org.apache.log4j.Logger;
import org.cobbler.Profile;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
@@ -1642,53 +1644,17 @@ public class ActionManager extends BaseManager {
* @param scheduler Person scheduling the action.
* @param srvr Server whose errata is going to be scheduled.
* @param earliest Earliest possible time action will occur.
- * @return Currently scheduled Errata Actions
*/
- public static List scheduleAllErrataUpdate(User scheduler, Server srvr,
+ public static void scheduleAllErrataUpdate(User scheduler, Server srvr,
Date earliest) {
- DataResult errata = SystemManager.unscheduledErrata(scheduler, srvr.getId(), null);
- errata.elaborate();
- // I don't have time to model SQL into Hibernate lingo, and I don't want
- // to have to write yet another one off SQL query just to overcome
- // Hibernate.
- // If someone wants to model this into Hibernate please do so:
- // SELECT DISTINCT E.id, E.update_date
- // FROM rhnErrata E,
- // rhnServerNeededPackageCache SNPC
- // WHERE EXISTS (SELECT server_id FROM rhnUserServerPerms USP
- // WHERE USP.user_id = :user_id AND USP.server_id = :sid)
- // AND SNPC.server_id = :sid
- // AND SNPC.errata_id = E.id
- // AND NOT EXISTS (SELECT SA.server_id
- // FROM rhnActionErrataUpdate AEU,
- // rhnServerAction SA,
- // rhnActionStatus AST
- // WHERE SA.server_id = :sid
- // AND SA.status = AST.id
- // AND AST.name IN('Queued', 'Picked Up')
- // AND AEU.action_id = SA.action_id
- // AND AEU.errata_id = E.id )
- // ORDER BY E.update_date, E.id
- //
- // And don't forget the errataOverview elaborator
- List actions = new LinkedList();
- for (Iterator itr = errata.iterator(); itr.hasNext();) {
- PublishedErrata e = (PublishedErrata) itr.next();
-
- Object[] args = new Object[2];
- args[0] = e.getAdvisory();
- args[1] = e.getSynopsis();
- String name = LocalizationService.getInstance().getMessage(
- "action.name", args);
-
- ErrataAction action = (ErrataAction) scheduleAction(scheduler, srvr,
- ActionFactory.TYPE_ERRATA, name, earliest);
- action.addErrata(e);
- ActionFactory.save(action);
- actions.add(action);
+ // Do not elaborate, we need only the IDs in here
+ DataResult<Errata> errata = SystemManager.unscheduledErrata(scheduler, srvr.getId(), null);
+ List<Long> errataIds = new ArrayList<Long>();
+ for (Errata e : errata) {
+ errataIds.add(e.getId());
}
-
- return actions;
+ List<Long> serverIds = Arrays.asList(srvr.getId());
+ ErrataManager.applyErrata(scheduler, errataIds, earliest, serverIds);
}
/**
diff --git a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
index 4ee5a65..87ce201 100644
--- a/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
+++ b/java/code/src/com/redhat/rhn/manager/errata/ErrataManager.java
@@ -29,6 +29,7 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.messaging.MessageQueue;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.action.Action;
+import com.redhat.rhn.domain.action.errata.ErrataAction;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelFactory;
import com.redhat.rhn.domain.errata.Bug;
@@ -1394,7 +1395,7 @@ public class ErrataManager extends BaseManager {
}
// at this point all errata is applicable to all systems, so let's apply
- applyErrata(loggedInUser, errataIds, earliestOccurrence, systemIds);
+ applyErrata(loggedInUser, convertToLongs(errataIds), earliestOccurrence, systemIds);
}
private static void checkApplicableErrata(User loggedInUser, List<Integer> errataIds,
@@ -1418,22 +1419,68 @@ public class ErrataManager extends BaseManager {
}
}
- private static void applyErrata(User loggedInUser, List errataIds,
- Date earliestOccurrence, List<Long> serverIds) {
- for (Iterator it = errataIds.iterator(); it.hasNext();) {
- Integer currentId = (Integer)it.next();
- Errata errata = ErrataManager.lookupErrata(currentId.longValue(),
- loggedInUser);
- Action update = ActionManager.createErrataAction(loggedInUser, errata);
- if (earliestOccurrence != null) {
- update.setEarliestAction(earliestOccurrence);
+ /**
+ * Apply a list of errata to a list of servers.
+ * @param user
+ * @param errataIds
+ * @param earliest
+ * @param serverIds
+ */
+ public static void applyErrata(User user, List<Long> errataIds, Date earliest,
+ List<Long> serverIds) {
+ // Schedule updates to the software update stack first
+ ErrataAction swStackUpdate = null;
+ List<Errata> errata = new ArrayList<Errata>();
+ for (Long currentId : errataIds) {
+ Errata erratum = ErrataManager.lookupErrata(currentId, user);
+ if (erratum.hasKeyword("restart_suggested")) {
+ if (swStackUpdate == null) {
+ swStackUpdate = createErrataAction(user, erratum, earliest, serverIds);
+ }
+ else {
+ swStackUpdate.addErrata(erratum);
+ }
}
-
- for (Long serverId : serverIds) {
- ActionManager.addServerToAction(serverId, update);
+ else {
+ errata.add(erratum);
}
+ }
+ if (swStackUpdate != null) {
+ Object[] args = new Object[] {swStackUpdate.getErrata().size()};
+ swStackUpdate.setName(LocalizationService.getInstance().getMessage(
+ "errata.swstack", args));
+ ActionManager.storeAction(swStackUpdate);
+ }
- ActionManager.storeAction(update);
+ // Schedule remaining errata actions
+ for (Errata e : errata) {
+ ActionManager.storeAction(createErrataAction(user, e, earliest, serverIds));
+ }
+ }
+
+ /**
+ * Create a single {@link ErrataAction}.
+ */
+ private static ErrataAction createErrataAction(User user, Errata erratum, Date earliest,
+ List<Long> serverIds) {
+ Action update = ActionManager.createErrataAction(user, erratum);
+ if (earliest != null) {
+ update.setEarliestAction(earliest);
+ }
+ for (Long serverId : serverIds) {
+ ActionManager.addServerToAction(serverId, update);
+ }
+ return (ErrataAction) update;
+ }
+
+ /**
+ * Convert a list of {@link Integer} to a list of {@link Long}.
+ */
+ private static List<Long> convertToLongs(List<Integer> list) {
+ List<Long> ret = new ArrayList<Long>();
+ for (Integer i : list) {
+ ret.add(i.longValue());
}
+ return ret;
}
}