java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
| 9
java/code/src/com/redhat/rhn/common/db/datasource/xml/Procedure_queries.xml
| 124 ++++++++
java/code/src/com/redhat/rhn/common/db/datasource/xml/SystemGroup_queries.xml
| 2
java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
| 13
java/code/src/com/redhat/rhn/common/db/datasource/xml/file-list.xml
| 1
java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
| 10
java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
| 14
java/code/src/com/redhat/rhn/domain/channel/PrivateChannelFamily.hbm.xml
| 5
java/code/src/com/redhat/rhn/domain/config/ConfigChannel.hbm.xml
| 7
java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
| 15
java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
| 12
java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
| 7
java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
| 14
java/code/src/com/redhat/rhn/domain/server/ServerGroupFactory.java
| 10
java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/internal/EntitlementProcedureHandler.java
| 57 +++
java/code/src/com/redhat/rhn/frontend/xmlrpc/test/MockHandlerFactory.java
| 1
java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
| 4
java/code/src/com/redhat/rhn/manager/channel/ChannelProcedure.java
| 12
java/code/src/com/redhat/rhn/manager/entitlement/EntitlementProcedure.java
| 94 ++++++
java/code/src/com/redhat/rhn/manager/org/OrgProcedure.java
| 155 ++++++++++
java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
| 13
java/code/src/com/redhat/rhn/manager/system/SystemManager.java
| 18 +
22 files changed, 575 insertions(+), 22 deletions(-)
New commits:
commit 89018671ae5abaa4554483ad6a10cd27ab87ba27
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri May 28 13:51:53 2010 -0400
adding missing files for org removal stored procedure
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Procedure_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Procedure_queries.xml
new file mode 100644
index 0000000..d4444ab
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Procedure_queries.xml
@@ -0,0 +1,124 @@
+<datasource_modes>
+
+<write-mode name="unsubscribe_custom_channels">
+ <query params="cid">
+ delete from rhnServerChannel where channel_id = :cid
+ </query>
+</write-mode>
+
+<write-mode name="delete_server_packge_profiles_for_channel">
+ <query params="cid">
+ delete from rhnServerProfilePackage where server_profile_id in (
+ select id from rhnServerProfile where base_channel = :cid
+ )
+ </query>
+</write-mode>
+
+<write-mode name="delete_server_profiles_for_channel">
+ <query params="cid">
+ delete from rhnServerProfile where base_channel = :cid
+ </query>
+</write-mode>
+
+<write-mode name="delete_errata_packages">
+ <query params="eid">
+ delete from rhnErrataPackage where errata_id = :eid
+ </query>
+</write-mode>
+
+
+<write-mode name="delete_org_channels">
+ <query params="oid">
+ delete from rhnChannel where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_daily_summary">
+ <query params="oid">
+ delete from rhnDailySummaryQueue where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_qutoa">
+ <query params="oid">
+ delete from rhnOrgQuota where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_info">
+ <query params="oid">
+ delete from rhnOrgInfo where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_file_list">
+ <query params="oid">
+ delete from rhnFileList where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_server_group">
+ <query params="oid">
+ delete from rhnServerGroup where org_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_check_suites">
+ <query params="oid">
+ delete from rhn_check_suites where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_command_target">
+ <query params="oid">
+ delete from rhn_command_target where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_contact_group">
+ <query params="oid">
+ delete from rhn_contact_groups where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_notif_format">
+ <query params="oid">
+ delete from rhn_notification_formats where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_probe">
+ <query params="oid">
+ delete from rhn_probe where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_redirect">
+ <query params="oid">
+ delete from rhn_redirects where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_sat_cluster">
+ <query params="oid">
+ delete from rhn_sat_cluster where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org_schedule">
+ <query params="oid">
+ delete from rhn_schedules where customer_id = :oid
+ </query>
+</write-mode>
+
+<write-mode name="delete_org">
+ <query params="oid">
+ delete from web_customer where id = :oid
+ </query>
+</write-mode>
+
+
+
+
+
+</datasource_modes>
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/internal/EntitlementProcedureHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/internal/EntitlementProcedureHandler.java
new file mode 100644
index 0000000..2ed98f3
--- /dev/null
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/internal/EntitlementProcedureHandler.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2010 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.frontend.xmlrpc.channel.internal;
+
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.server.Server;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.domain.user.UserFactory;
+import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.system.SystemManager;
+import com.redhat.rhn.manager.system.UpdateBaseChannelCommand;
+
+
+/**
+ * ChannelProcedureHandler
+ * @version $Rev$
+ */
+public class EntitlementProcedureHandler extends BaseHandler {
+
+
+ /**
+ * Runs the subscribe channel procedure
+ * @param serverId the id of the server
+ * @param channelId the id of the channel
+ * @param userId the id of the user
+ * @return 1 on success exception otherwise
+ */
+ public int subscribeChannelToSystem(Integer serverId,
+ Integer channelId, Integer userId) {
+ User user = UserFactory.lookupById(userId.longValue());
+ Channel channel = ChannelManager.lookupByIdAndUser(channelId.longValue(), user);
+ Server server = SystemManager.lookupByIdAndUser(serverId.longValue(), user);
+ if (channel.isBaseChannel()) {
+ UpdateBaseChannelCommand cmd =
+ new UpdateBaseChannelCommand(user, server, channel.getId());
+ cmd.store();
+ }
+ else {
+ SystemManager.subscribeServerToChannel(user, server, channel);
+ }
+
+ return 1;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/manager/entitlement/EntitlementProcedure.java
b/java/code/src/com/redhat/rhn/manager/entitlement/EntitlementProcedure.java
new file mode 100644
index 0000000..dfafc51
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/entitlement/EntitlementProcedure.java
@@ -0,0 +1,94 @@
+/**
+ * Copyright (c) 2009--2010 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.manager.entitlement;
+
+import com.redhat.rhn.domain.channel.ChannelFactory;
+import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
+import com.redhat.rhn.domain.channel.PrivateChannelFamily;
+import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.server.EntitlementServerGroup;
+import com.redhat.rhn.domain.server.ServerGroupFactory;
+import com.redhat.rhn.frontend.xmlrpc.SatelliteOrgException;
+
+import java.util.List;
+
+/**
+ *
+ * EntitlementProcedure
+ *
+ * Entitlement related procedures
+ * @version $Rev$
+ */
+public class EntitlementProcedure {
+
+
+ private static final EntitlementProcedure INSTANCE = new EntitlementProcedure();
+
+ private EntitlementProcedure() {
+
+ }
+
+ /**
+ * @return an instance of the EntitlementProcedure object
+ */
+ public static EntitlementProcedure getInstance() {
+ return INSTANCE;
+ }
+
+ /**
+ * Remove All entitlements from an org
+ * Just handles the math logic, doesn't actually unsubscribe any systems
+ * @param orgId The orgId
+ */
+ public void removeOrgEntitlements(Long orgId) {
+ if (orgId.equals(1L)) {
+ throw new SatelliteOrgException();
+ }
+
+
+ Org org = OrgFactory.lookupById(orgId);
+ Org masterOrg = OrgFactory.lookupById(1L);
+
+
+ //For each Entitlement take the Max for the org, and return it to the
+ // master org, locking both rows since we update and read them both.
+ List<EntitlementServerGroup> systemEnts =
+ ServerGroupFactory.listEntitlementGroups(org);
+ for (EntitlementServerGroup sysEnt : systemEnts) {
+ EntitlementServerGroup masterEnt = ServerGroupFactory.lookupEntitled(
+ masterOrg, sysEnt.getGroupType());
+ ServerGroupFactory.lockEntitledServerGroup(sysEnt);
+ ServerGroupFactory.lockEntitledServerGroup(masterEnt);
+ masterEnt.setMaxMembers(masterEnt.getMaxMembers() + sysEnt.getMaxMembers());
+ sysEnt.setMaxMembers(0L);
+ }
+
+
+ //Do the same for the Channel entitlements
+ List<PrivateChannelFamily> privChannels =
+ ChannelFamilyFactory.listPrivateChannelFamiles(org);
+ for (PrivateChannelFamily priv : privChannels) {
+ PrivateChannelFamily masterFam =
+ priv.getChannelFamily().getChannelFamilyAllocationFor(masterOrg);
+ ChannelFactory.lockPrivateChannelFamily(priv);
+ ChannelFactory.lockPrivateChannelFamily(masterFam);
+ masterFam.setMaxMembers(masterFam.getMaxMembers() + priv.getMaxMembers());
+ priv.setMaxMembers(0L);
+ }
+
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/manager/org/OrgProcedure.java
b/java/code/src/com/redhat/rhn/manager/org/OrgProcedure.java
new file mode 100644
index 0000000..bc3e13f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/org/OrgProcedure.java
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2009--2010 Red Hat, Inc.
+ *
+ * This software is licensed to you under the GNU General Public License,
+ * version 2 (GPLv2). There is NO WARRANTY for this software, express or
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ *
http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package
com.redhat.rhn.manager.org;
+
+import com.redhat.rhn.common.db.datasource.CallableMode;
+import com.redhat.rhn.common.db.datasource.ModeFactory;
+import com.redhat.rhn.common.db.datasource.WriteMode;
+import com.redhat.rhn.domain.config.ConfigChannel;
+import com.redhat.rhn.domain.config.ConfigurationFactory;
+import com.redhat.rhn.domain.errata.ErrataFactory;
+import
com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.server.ServerFactory;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.domain.user.UserFactory;
+import com.redhat.rhn.frontend.dto.ChannelOverview;
+import com.redhat.rhn.frontend.dto.SystemOverview;
+import com.redhat.rhn.frontend.xmlrpc.SatelliteOrgException;
+import com.redhat.rhn.manager.channel.ChannelManager;
+import com.redhat.rhn.manager.entitlement.EntitlementProcedure;
+import com.redhat.rhn.manager.system.SystemManager;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * OrgProcedure
+ *
+ * Organization related procedures
+ *
+ * @version $Rev$
+ */
+public class OrgProcedure {
+
+
+ private static final OrgProcedure INSTANCE = new OrgProcedure();
+
+ private OrgProcedure() {
+
+ }
+
+ /**
+ * @return an instance of the OrgProcedure object
+ */
+ public static OrgProcedure getInstance() {
+ return INSTANCE;
+ }
+
+
+
+ /**
+ * Delete an Org
+ * @param org The org to delete
+ */
+ public static void deleteOrg(Org org) {
+
+ if (org.getId() == 1) {
+ throw new SatelliteOrgException();
+ }
+
+ List<User> users = UserFactory.getInstance().findAllUsers(org);
+ for (User u : users) {
+ CallableMode m = ModeFactory.getCallableMode("User_queries",
+ "delete_user");
+ Map inParams = new HashMap();
+ Map outParams = new HashMap();
+ inParams.put("user_id", u.getId());
+ m.execute(inParams, outParams);
+ }
+
+ List<SystemOverview> systems = SystemManager.systemListShort(org, null);
+ for (SystemOverview sys : systems) {
+ ServerFactory.delete(sys.getId());
+ }
+
+ List<ConfigChannel> configChannels =
ConfigurationFactory.listConfigChannels(org);
+ for (ConfigChannel config : configChannels) {
+ ConfigurationFactory.removeConfigChannel(config);
+ }
+
+ List<ChannelOverview> channels =
+ ChannelManager.channelsOwnedByOrg(org.getId(), null);
+ for (ChannelOverview chan : channels) {
+ deleteCustomChannelAssociations(chan.getId());
+ }
+
+
+ List<Long> errata = ErrataFactory.listErrataIds(org);
+ for (Long e : errata) {
+ deleteErrataPackage(e);
+ }
+
+ EntitlementProcedure.getInstance().removeOrgEntitlements(org.getId());
+
+ String[] modes = {"delete_org_channels",
+ "delete_org_daily_summary",
+ "delete_org_qutoa",
+ "delete_org_info",
+ "delete_org_file_list",
+ "delete_org_server_group",
+ "delete_org_check_suites",
+ "delete_org_command_target",
+ "delete_org_contact_group",
+ "delete_org_notif_format",
+ "delete_org_probe",
+ "delete_org_redirect",
+ "delete_org_sat_cluster",
+ "delete_org_schedule",
+ "delete_org"};
+
+ Map params = new HashMap();
+ params.put("oid", org.getId());
+ for (String mode : modes) {
+ WriteMode m = ModeFactory.getWriteMode("Procedure_queries", mode);
+ m.executeUpdate(params);
+ }
+
+
+ }
+
+ private static void deleteCustomChannelAssociations(Long cid) {
+ String[] modes = {"unsubscribe_custom_channels",
+ "delete_server_packge_profiles_for_channel",
+ "delete_server_profiles_for_channel"};
+
+ Map params = new HashMap();
+ params.put("cid", cid);
+ for (String mode : modes) {
+ WriteMode m = ModeFactory.getWriteMode("Procedure_queries", mode);
+ m.executeUpdate(params);
+ }
+ }
+
+ private static void deleteErrataPackage(Long eid) {
+ Map params = new HashMap();
+ params.put("eid", eid);
+ WriteMode m = ModeFactory.getWriteMode("Procedure_queries",
+ "delete_errata_packages");
+ m.executeUpdate(params);
+ }
+
+}
commit 92d967985d8c758d3c10c4300ee1e415d32134af
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri May 28 13:51:28 2010 -0400
adding remove org stored procedure
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
index 0cf52fd..c482685 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
@@ -1230,15 +1230,6 @@ GROUP BY C.id, C.name
</mode>
-<mode name="lock_current_members">
- <query params="org_id, cfid">
- select current_members
- from rhnPrivateChannelFamily
- where org_id = :org_id and channel_family_id = :cfid
- for update of current_members
- </query>
-</mode>
-
<mode name="compute_channel_family_curent_members">
<query params="org_id, cfid">
select count(distinct server_id) as count
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/SystemGroup_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/SystemGroup_queries.xml
index f86a511..d1ae64c 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/SystemGroup_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/SystemGroup_queries.xml
@@ -158,4 +158,6 @@ SELECT SUM(max_members - current_members) AS available
</query>
</mode>
+
+
</datasource_modes>
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index 9d89f37..7e187a1 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -398,6 +398,19 @@ ORDER BY UPPER(NVL(S.name, '(none)')), S.id
</query>
</mode>
+<mode name="visible_to_org"
class="com.redhat.rhn.frontend.dto.SystemOverview">
+ <query params="org_id">
+ SELECT DISTINCT S.id AS ID,
+ S.name AS NAME,
+ INFO.checkin AS LAST_CHECKIN
+ FROM rhnServer S, rhnServerInfo INFO
+ WHERE
+ S.org_id = :org_id
+ S.id = INFO.server_id
+ </query>
+</mode>
+
+
<mode name="visible_to_user_from_sysid_list"
class="com.redhat.rhn.frontend.dto.SystemSearchResult">
<query name="available_to_user_from_sysid_list" />
<elaborator name="system_overview" />
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/file-list.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/file-list.xml
index c5ec1f0..d789dd1 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/file-list.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/file-list.xml
@@ -23,6 +23,7 @@
<template name="ssm_operation_queries"
filename="xml/ssm_operation_queries.xml" />
<template name="util_queries" filename="xml/util_queries.xml"
/>
<template name="ErrataCache_queries"
filename="xml/ErrataCache_queries.xml" />
+ <template name="Procedure_queries"
filename="xml/Procedure_queries.xml" />
<!-- queries used to test the datasource system -->
<template name="test_queries" filename="xml/test_queries.xml"
/>
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
index 5fbc56b..269a7d2 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
@@ -25,6 +25,7 @@ import java.util.Set;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
+import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Projections;
@@ -932,4 +933,13 @@ public class ChannelFactory extends HibernateFactory {
criteria.add(Restrictions.eq("channel", ch));
return (Integer)criteria.uniqueResult() > 0;
}
+
+ /**
+ * Lock a private channel family object
+ * @param priv the private channel family
+ */
+ public static void lockPrivateChannelFamily(PrivateChannelFamily priv) {
+ getSession().lock(priv, LockMode.UPGRADE);
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
b/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
index f414335..3eac0ca 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFamilyFactory.java
@@ -138,6 +138,20 @@ public class ChannelFamilyFactory extends HibernateFactory {
return cfam;
}
+
+ /**
+ * Get a list of all PrivateChannelFamiles for an org. Not just their special one
+ * @param org the org
+ * @return list of PrivateChannelFamiles
+ */
+ public static List<PrivateChannelFamily> listPrivateChannelFamiles(Org org) {
+ Map params = new HashMap();
+ params.put("orgId", org.getId());
+ return (List<PrivateChannelFamily>) singleton.listObjectsByNamedQuery(
+ "PrivateChannelFamily.findByOrg", params);
+
+ }
+
/**
* Checks if the org has permission to its channel family.
* If it does not, grants permissions.
diff --git a/java/code/src/com/redhat/rhn/domain/channel/PrivateChannelFamily.hbm.xml
b/java/code/src/com/redhat/rhn/domain/channel/PrivateChannelFamily.hbm.xml
index aaeb897..62a6f7b 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/PrivateChannelFamily.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/channel/PrivateChannelFamily.hbm.xml
@@ -20,4 +20,9 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="modified" column="MODIFIED"
not-null="true"
type="timestamp" insert="false" update="false" />
</class>
+
+ <query name="PrivateChannelFamily.findByOrg">
+ <![CDATA[from com.redhat.rhn.domain.channel.PrivateChannelFamily as cfam where
cfam.org.id = :orgId]]>
+ </query>
+
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/config/ConfigChannel.hbm.xml
b/java/code/src/com/redhat/rhn/domain/config/ConfigChannel.hbm.xml
index 6d249d0..2ac0e4c 100644
--- a/java/code/src/com/redhat/rhn/domain/config/ConfigChannel.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/config/ConfigChannel.hbm.xml
@@ -34,4 +34,11 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<one-to-many class="com.redhat.rhn.domain.config.ConfigFile"/>
</set>
</class>
+
+ <query name="ConfigChannel.listByOrg">
+ <![CDATA[
+ from com.redhat.rhn.domain.config.ConfigChannel as c where c.org = :org
+ ]]>
+ </query>
+
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
b/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
index 391a4d5..381732b 100644
--- a/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/config/ConfigurationFactory.java
@@ -36,6 +36,7 @@ import java.io.InputStream;
import java.sql.Types;
import java.util.Date;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -427,6 +428,20 @@ public class ConfigurationFactory extends HibernateFactory {
.uniqueResult();
}
+
+ /**
+ * List all Config channels for an org
+ * @param org the org
+ * @return the config chanenls
+ */
+ public static List<ConfigChannel> listConfigChannels(Org org) {
+ Session session = HibernateFactory.getSession();
+ Map params = new HashMap();
+ params.put("org", org);
+ return singleton.listObjectsByNamedQuery("ConfigChannel.listByOrg",
params);
+ }
+
+
/**
* Used to look up ConfigFileStates. Note: there is a static list of
* ConfigFileStates and therefore a static list of labels. This method
diff --git a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
index b6b8038..adb09a6 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
@@ -1042,6 +1042,18 @@ public class ErrataFactory extends HibernateFactory {
new HashMap(), ids, "list");
}
+ /**
+ * List errata objects by ID
+ * @param org the org
+ * @return List of longs
+ */
+ public static List<Long> listErrataIds(Org org) {
+ Map params = new HashMap();
+ params.put("org", org);
+ return
singleton.listObjectsByNamedQuery("PublishedErrata.listIdsByOrg",
+ params);
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
index b305f66..6420dd2 100644
--- a/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/errata/impl/PublishedErrata.hbm.xml
@@ -103,6 +103,13 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
where c.original = :original
and c.org = :org]]>
</query>
+ <query name="PublishedErrata.listIdsByOrg">
+ <return-scalar type="long" column="id"/>
+ <![CDATA[
+ Select e.id as id
+ from com.redhat.rhn.domain.errata.impl.PublishedErrata as e
+ where e.org = :org]]>
+ </query>
<query name="PublishedErrata.findByAdvisory">
<![CDATA[from com.redhat.rhn.domain.errata.impl.PublishedErrata as e
where e.advisory = :advisory]]>
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
index c8aa4d1..a5ba37c 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
@@ -337,14 +337,24 @@ public class ServerFactory extends HibernateFactory {
*/
public static void delete(Server server) {
HibernateFactory.getSession().evict(server);
+ delete(server.getId());
+ HibernateFactory.getSession().evict(server);
+ }
+
+ /**
+ * Deletes a server
+ *
+ * @param serverId The server to delete
+ */
+ public static void delete(Long serverId) {
CallableMode m = ModeFactory.getCallableMode("System_queries",
"delete_server");
Map in = new HashMap();
- in.put("server_id", server.getId());
+ in.put("server_id", serverId);
m.execute(in, new HashMap());
- HibernateFactory.getSession().evict(server);
}
+
private static void updateServerPerms(Server server) {
CallableMode m = ModeFactory.getCallableMode("System_queries",
"update_perms_for_server");
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerGroupFactory.java
b/java/code/src/com/redhat/rhn/domain/server/ServerGroupFactory.java
index 18d4cbb..0a4b371 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerGroupFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerGroupFactory.java
@@ -22,6 +22,7 @@ import com.redhat.rhn.domain.user.User;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
+import org.hibernate.LockMode;
import org.hibernate.Session;
import java.util.ArrayList;
@@ -335,4 +336,13 @@ public class ServerGroupFactory extends HibernateFactory {
params.put("threshold", threshold);
return SINGLETON.listObjectsByNamedQuery(query, params);
}
+
+ /**
+ * Lock an EntitlementServerGroup for update
+ * @param grp the server group
+ */
+ public static void lockEntitledServerGroup(EntitlementServerGroup grp) {
+ getSession().lock(grp, LockMode.UPGRADE);
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/test/MockHandlerFactory.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/test/MockHandlerFactory.java
index 2f834fc..4f1ce9d 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/test/MockHandlerFactory.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/test/MockHandlerFactory.java
@@ -14,7 +14,6 @@
*/
package com.redhat.rhn.frontend.xmlrpc.test;
-import com.redhat.rhn.common.util.manifestfactory.ClassBuilder;
import com.redhat.rhn.frontend.xmlrpc.HandlerFactory;
/**
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
index b6835ec..f53e716 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -684,7 +684,8 @@ public class ChannelManager extends BaseManager {
* @param pc page control for the user
* @return Returns a data result containing ChannelOverview dtos
*/
- public static DataResult channelsOwnedByOrg(Long orgId, PageControl pc) {
+ public static DataResult<ChannelOverview> channelsOwnedByOrg(Long orgId,
+ PageControl pc) {
SelectMode m = ModeFactory.getMode("Channel_queries",
"channels_owned_by_org");
Map params = new HashMap();
@@ -2905,4 +2906,5 @@ public class ChannelManager extends BaseManager {
return toRet;
}
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelProcedure.java
b/java/code/src/com/redhat/rhn/manager/channel/ChannelProcedure.java
index 829a690..7b4aed4 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelProcedure.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelProcedure.java
@@ -20,6 +20,7 @@ import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.ChannelFactory;
import com.redhat.rhn.domain.channel.ChannelFamily;
import
com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.server.Server;
@@ -134,7 +135,8 @@ public class ChannelProcedure {
Org org = (channel.getOrg() == null) ? server.getOrg() : channel.getOrg();
//need do a select for update Lock on current Members
- lockCurrentMembers(channel.getChannelFamily(), org);
+ ChannelFactory.lockPrivateChannelFamily(
+ channel.getChannelFamily().getChannelFamilyAllocationFor(org));
if (channel.getChannelFamily().hasAvailableSlots(org) ||
canConsumeVirtChannels(server, channel)) {
ServerHistoryEvent event = new ServerHistoryEvent();
@@ -183,14 +185,6 @@ public class ChannelProcedure {
}
}
- private void lockCurrentMembers(ChannelFamily channelFamilyIn, Org orgIn) {
- SelectMode m = ModeFactory.getMode("Channel_queries",
- "lock_current_members");
- Map params = new HashMap();
- params.put("org_id", orgIn.getId());
- params.put("cfid", channelFamilyIn.getId());
- m.execute(params);
- }
private void updateChannelFamilyCounts(ChannelFamily channelFamilyIn,
Org orgIn) {
diff --git a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
index f629618..b388f5e 100644
--- a/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/ServerGroupManager.java
@@ -441,4 +441,17 @@ public class ServerGroupManager {
public List<Long> listInactiveServers(ServerGroup sg, Long threshold) {
return ServerGroupFactory.listInactiveServerIds(sg, threshold);
}
+
+ /**
+ * Lock a given server group
+ * @param serverGroup the server group to lock
+ */
+ public static void lockServerGroup(EntitlementServerGroup serverGroup) {
+ SelectMode m = ModeFactory.getMode("ServerGroup_queries",
+ "lock_group_row");
+ Map params = new HashMap();
+ params.put("gid", serverGroup.getId());
+ m.execute(params);
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
index edeb6d5..5e099d5 100644
--- a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java
@@ -330,6 +330,24 @@ public class SystemManager extends BaseManager {
}
/**
+ * Returns list of all systems visible to the org
+ * Ignores user permissions
+ * @param org the org
+ * @param pc PageControl
+ * @return list of SystemOverviews.
+ */
+ public static DataResult<SystemOverview> systemListShort(Org org, PageControl
pc) {
+ SelectMode m = ModeFactory.getMode("System_queries",
"visible_to_org",
+ SystemOverview.class);
+ Map params = new HashMap();
+ params.put("org_id", org.getId());
+ Map elabParams = new HashMap();
+
+ return makeDataResult(params, elabParams, pc, m);
+ }
+
+
+ /**
* Returns list of all systems that are visible to user
* but not in the given server group.
* @param user Currently logged in user.