Changes to 'refs/tags/spacewalk-backend-1.10.50-1'
by Grant Gainey
Tag 'spacewalk-backend-1.10.50-1' created by Grant Gainey <ggainey(a)redhat.com> at 2013-06-25 13:39 +0000
Tagging package [spacewalk-backend] version [1.10.50-1] in directory [backend/].
Changes since spacewalk-java-1.10.105-1:
Grant Gainey (1):
Automatic commit of package [spacewalk-backend] release [1.10.50-1].
---
backend/spacewalk-backend.spec | 13 ++++++++++++-
rel-eng/packages/spacewalk-backend | 2 +-
2 files changed, 13 insertions(+), 2 deletions(-)
---
10 years, 9 months
2 commits - backend/spacewalk-backend.spec rel-eng/packages schema/spacewalk
by Grant Gainey
backend/spacewalk-backend.spec | 13 ++++++++++++-
rel-eng/packages/spacewalk-backend | 2 +-
rel-eng/packages/spacewalk-schema | 2 +-
schema/spacewalk/spacewalk-schema.spec | 13 ++++++++++++-
4 files changed, 26 insertions(+), 4 deletions(-)
New commits:
commit e5d301780f8c093c490d2497c4675f7e873c3211
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 25 09:41:18 2013 -0400
Automatic commit of package [spacewalk-schema] release [1.10.50-1].
diff --git a/rel-eng/packages/spacewalk-schema b/rel-eng/packages/spacewalk-schema
index 090d811..2c55452 100644
--- a/rel-eng/packages/spacewalk-schema
+++ b/rel-eng/packages/spacewalk-schema
@@ -1 +1 @@
-1.10.49-1 schema/spacewalk/
+1.10.50-1 schema/spacewalk/
diff --git a/schema/spacewalk/spacewalk-schema.spec b/schema/spacewalk/spacewalk-schema.spec
index 5f94d21..16642e9 100644
--- a/schema/spacewalk/spacewalk-schema.spec
+++ b/schema/spacewalk/spacewalk-schema.spec
@@ -4,7 +4,7 @@ Name: spacewalk-schema
Group: Applications/Internet
Summary: Oracle SQL schema for Spacewalk server
-Version: 1.10.49
+Version: 1.10.50
Release: 1%{?dist}
Source0: %{name}-%{version}.tar.gz
@@ -71,6 +71,17 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/spacewalk-sql*
%changelog
+* Tue Jun 25 2013 Grant Gainey 1.10.50-1
+- ISS: mv sql-updates in prep for last(?) merge from master
+- ISS: Mapping tables shouldn't have ID columns
+- ISS: Resolve upgrade-script name conflicts
+- ISS: Fixing whitespace
+- ISS: Naming is important - clean ours up so it makes more sense
+- ISS: A master-org might not be mapped
+- ISS: Make master-to-slave-org mapping be many-to-one instead of many-to-many
+- ISS: Schema chgs for ISS Slave-side setup
+- ISS: DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
+
* Mon Jun 24 2013 Michael Mraka <michael.mraka(a)redhat.com> 1.10.49-1
- fixed syntax error in rhn_confrevision_del_trig_fun
commit 69631feb2339046a27910590513118e150713c03
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 25 09:39:54 2013 -0400
Automatic commit of package [spacewalk-backend] release [1.10.50-1].
diff --git a/backend/spacewalk-backend.spec b/backend/spacewalk-backend.spec
index 26fafe9..91c862e 100644
--- a/backend/spacewalk-backend.spec
+++ b/backend/spacewalk-backend.spec
@@ -12,7 +12,7 @@ Name: spacewalk-backend
Summary: Common programs needed to be installed on the Spacewalk servers/proxies
Group: Applications/Internet
License: GPLv2
-Version: 1.10.49
+Version: 1.10.50
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -638,6 +638,17 @@ rm -f %{rhnconf}/rhnSecret.py*
# $Id$
%changelog
+* Tue Jun 25 2013 Grant Gainey 1.10.50-1
+- ISS: checking a couple of potentially None values
+- ISS: make sure new satellites can sync to old ones
+- ISS: Channel trust syncing now works
+- ISS: Implemented sat-sync options and db work for org / org trusts
+- ISS: Bunch of changes for ISS, not working yet
+- ISS: export org and org-trust data
+- ISS: export channel access permissions
+- ISS: First pieces of backend code for using the iss-cfg tables
+- support numerals only for db-name, db-user and db-password
+
* Thu Jun 20 2013 Tomas Kasparek <tkasparek(a)redhat.com> 1.10.49-1
- 852250 - filter out bad package/architecture combinations
diff --git a/rel-eng/packages/spacewalk-backend b/rel-eng/packages/spacewalk-backend
index 002b9c2..a05284d 100644
--- a/rel-eng/packages/spacewalk-backend
+++ b/rel-eng/packages/spacewalk-backend
@@ -1 +1 @@
-1.10.49-1 backend/
+1.10.50-1 backend/
10 years, 9 months
Changes to 'refs/tags/spacewalk-java-1.10.105-1'
by Grant Gainey
Tag 'spacewalk-java-1.10.105-1' created by Grant Gainey <ggainey(a)redhat.com> at 2013-06-25 13:29 +0000
Tagging package [spacewalk-java] version [1.10.105-1] in directory [java/].
Changes since spacewalk-java-1.10.104-1:
Grant Gainey (37):
FIRST DRAFT: ISS Org-Sync UI work
Fixes from review comments
DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
ISS master-to-slave org-mapping
Schema chgs for ISS Slave-side setup
Make master-to-slave-org mapping be many-to-one instead of many-to-many
A master-org might not be mapped
Map join-tables correctly so that delete works
Fix rmv-master and cascades
I18N updates
Fix incorrect L10N strings
Tweaks to L10N strings
Remove test-class that should never have been committed
Naming is important - clean ours up so it makes more sense
First pieces of backend code for using the iss-cfg tables
Fixing whitespace
Resolve upgrade-script name conflicts
Add XMLRPC API for Master side of ISS
ISS: XMLRPC doesn't recognize Long
ISS: Naming nitpick: It's one IssMasterOrg, not several
ISS: Add IssSlave API calls
ISS: Add num-orgs-allowed-to per slave on master.jsp
ISS Fix minor UI ordering weirdness
ISS Fix navigation weirdness, add messaging and L10N
ISS Mapping tables shouldn't have ID columns
ISS Correctly separate allow-all from allowed-org-list
ISS Correctly center columns
ISS Missed slave.jsp centering
ISS sync_setup - apply doesn't work, most everything else does
ISS Add sync.slave.getSlaveByName API
ISS sync_setup master-side
ISS fix bad I18N key
ISS Fix inappropriate cascade when deleting a Slave
ISS mv sql-updates in prep for last(?) merge from master
ISS rmv whitespace
Automatic commit of package [spacewalk-java] release [1.10.105-1].
Milan Zazrivec (1):
spacewalk-setup-postgresql: state the requirement for address/netmask format explicitly
Stephen Herr (7):
export channel access permissions
export org and org-trust data
Bunch of changes for ISS, not working yet
Implemented sat-sync options and db work for org / org trusts
Channel trust syncing now works
ISS: make sure new satellites can sync to old ones
ISS: checking a couple of potentially None values
---
backend/satellite_exporter/handlers/non_auth_dumper.py | 12
backend/satellite_exporter/satexport.py | 23
backend/satellite_tools/constants.py | 7
backend/satellite_tools/diskImportLib.py | 18
backend/satellite_tools/disk_dumper/dumper.py | 31
backend/satellite_tools/disk_dumper/iss.py | 70
backend/satellite_tools/disk_dumper/iss_actions.py | 5
backend/satellite_tools/disk_dumper/iss_ui.py | 6
backend/satellite_tools/exporter/exportLib.py | 65
backend/satellite_tools/satsync.py | 46
backend/satellite_tools/sync_handlers.py | 34
backend/satellite_tools/xmlDiskSource.py | 13
backend/satellite_tools/xmlSource.py | 30
backend/satellite_tools/xmlWireSource.py | 5
backend/server/handlers/sat/auth.py | 15
backend/server/importlib/Makefile | 2
backend/server/importlib/backend.py | 158 +
backend/server/importlib/backendOracle.py | 10
backend/server/importlib/channelImport.py | 10
backend/server/importlib/importLib.py | 18
backend/server/importlib/orgImport.py | 111 +
java/code/src/com/redhat/rhn/domain/iss/IssFactory.java | 148 +
java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml | 38
java/code/src/com/redhat/rhn/domain/iss/IssMaster.java | 200 ++
java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.hbm.xml | 25
java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.java | 164 +
java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml | 42
java/code/src/com/redhat/rhn/domain/iss/IssSlave.java | 224 ++
java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml | 17
java/code/src/com/redhat/rhn/domain/org/Org.java | 18
java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java | 172 +
java/code/src/com/redhat/rhn/frontend/action/iss/DeleteSlaveAction.java | 87
java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java | 158 +
java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java | 168 +
java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java | 183 ++
java/code/src/com/redhat/rhn/frontend/action/iss/MasterAction.java | 131 +
java/code/src/com/redhat/rhn/frontend/action/iss/RemoveMastersAction.java | 164 +
java/code/src/com/redhat/rhn/frontend/action/iss/RemoveSlavesAction.java | 162 +
java/code/src/com/redhat/rhn/frontend/action/iss/SlaveAction.java | 121 +
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssEditSlaveActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMapOrgsActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMasterActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssSlaveActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 10
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 301 ++-
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml | 18
java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java | 45
java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateMasterException.java | 38
java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateSlaveException.java | 38
java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt | 3
java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml | 2
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgSerializer.java | 64
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterSerializer.java | 59
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssSlaveSerializer.java | 63
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java | 3
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java | 71
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java | 373 ++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java | 408 ++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java | 249 ++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/test/SlaveHandlerTest.java | 233 ++
java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java | 9
java/code/webapp/WEB-INF/nav/iss_config.xml | 9
java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml | 35
java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp | 58
java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp | 84
java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp | 108 +
java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp | 77
java/code/webapp/WEB-INF/pages/admin/iss/master.jsp | 99 +
java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp | 64
java/code/webapp/WEB-INF/struts-config.xml | 912 +++++-----
java/spacewalk-java.spec | 32
rel-eng/packages/spacewalk-java | 2
schema/spacewalk/common/tables/rhnISSMaster.sql | 7
schema/spacewalk/common/tables/rhnISSMasterOrgs.sql | 12
schema/spacewalk/common/tables/rhnISSSlave.sql | 13
schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql | 6
schema/spacewalk/common/tables/tables.deps | 2
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSSlave.sql | 12
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSSlaveOrgs.sql | 5
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/024-rhnISSMaster.sql | 7
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/025-rhnISSMasterOrgs.sql | 12
spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql | 3
sync_setup/src/bin/sync_setup | 491 +++++
83 files changed, 6579 insertions(+), 501 deletions(-)
---
10 years, 9 months
java/spacewalk-java.spec rel-eng/packages
by Grant Gainey
java/spacewalk-java.spec | 32 +++++++++++++++++++++++++++++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 32 insertions(+), 2 deletions(-)
New commits:
commit dad7bf34524b25b0a1b47a971d957d40430a12e0
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 25 09:29:54 2013 -0400
Automatic commit of package [spacewalk-java] release [1.10.105-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index cfe9e36..f18f2ff 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -28,7 +28,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.10.104
+Version: 1.10.105
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -751,6 +751,36 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Tue Jun 25 2013 Grant Gainey 1.10.105-1
+Feature: Support channel-permissions on ISS
+- ISS: Fix inappropriate cascade when deleting a Slave
+- ISS: fix bad I18N key
+- ISS: Add sync.slave.getSlaveByName API
+- ISS: Missed slave.jsp centering
+- ISS: Correctly center columns
+- ISS: Correctly separate allow-all from allowed-org-list
+- ISS: Fix navigation weirdness, add messaging and L10N
+- ISS: Fix minor UI ordering weirdness
+- ISS: Add num-orgs-allowed-to per slave on master.jsp
+- ISS: Add IssSlave API calls Fix slave-to-allowed-orgs mapping
+- ISS: Naming nitpick: It's one IssMasterOrg, not several
+- ISS: XMLRPC doesn't recognize Long XMLRPC wants Map input, not Objects
+ Set up serializers and register them Fix Hibernate collection-mapping
+ smeantics so they, like, work
+- ISS: Add XMLRPC API for Master side of ISS
+- ISS: Naming is important - clean ours up so it makes more sense
+- ISS: Remove test-class that should never have been committed
+- ISS: Tweaks to L10N strings
+- ISS: Fix incorrect L10N strings
+- ISS: I18N updates
+- ISS: Fix rmv-master and cascades
+- ISS: Map join-tables correctly so that delete works
+- ISS master-to-slave org-mapping
+- ISS: DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
+- ISS: DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
+- ISS: Fixes from review comments
+- ISS: FIRST DRAFT: ISS Org-Sync UI work
+
* Tue Jun 25 2013 Tomas Kasparek <tkasparek(a)redhat.com> 1.10.104-1
- use real product name in strings instead of RHN
- 695638 - rewrite C style to java
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index bd164c1..72ab8b4 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.10.104-1 java/
+1.10.105-1 java/
10 years, 9 months
43 commits - backend/satellite_exporter backend/satellite_tools backend/server java/code schema/spacewalk sync_setup/src
by Grant Gainey
backend/satellite_exporter/handlers/non_auth_dumper.py | 12
backend/satellite_exporter/satexport.py | 23
backend/satellite_tools/constants.py | 7
backend/satellite_tools/diskImportLib.py | 18
backend/satellite_tools/disk_dumper/dumper.py | 31
backend/satellite_tools/disk_dumper/iss.py | 70
backend/satellite_tools/disk_dumper/iss_actions.py | 5
backend/satellite_tools/disk_dumper/iss_ui.py | 6
backend/satellite_tools/exporter/exportLib.py | 65
backend/satellite_tools/satsync.py | 46
backend/satellite_tools/sync_handlers.py | 34
backend/satellite_tools/xmlDiskSource.py | 13
backend/satellite_tools/xmlSource.py | 30
backend/satellite_tools/xmlWireSource.py | 5
backend/server/handlers/sat/auth.py | 15
backend/server/importlib/Makefile | 2
backend/server/importlib/backend.py | 158 +
backend/server/importlib/backendOracle.py | 10
backend/server/importlib/channelImport.py | 10
backend/server/importlib/importLib.py | 18
backend/server/importlib/orgImport.py | 111 +
java/code/src/com/redhat/rhn/domain/iss/IssFactory.java | 148 +
java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml | 38
java/code/src/com/redhat/rhn/domain/iss/IssMaster.java | 200 ++
java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.hbm.xml | 25
java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.java | 164 +
java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml | 42
java/code/src/com/redhat/rhn/domain/iss/IssSlave.java | 224 ++
java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml | 17
java/code/src/com/redhat/rhn/domain/org/Org.java | 18
java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java | 172 +
java/code/src/com/redhat/rhn/frontend/action/iss/DeleteSlaveAction.java | 87
java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java | 158 +
java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java | 168 +
java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java | 183 ++
java/code/src/com/redhat/rhn/frontend/action/iss/MasterAction.java | 131 +
java/code/src/com/redhat/rhn/frontend/action/iss/RemoveMastersAction.java | 164 +
java/code/src/com/redhat/rhn/frontend/action/iss/RemoveSlavesAction.java | 162 +
java/code/src/com/redhat/rhn/frontend/action/iss/SlaveAction.java | 121 +
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssEditSlaveActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMapOrgsActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMasterActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/action/iss/test/IssSlaveActionTest.java | 33
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 10
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 301 ++-
java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml | 18
java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java | 45
java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateMasterException.java | 38
java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateSlaveException.java | 38
java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt | 3
java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml | 2
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgSerializer.java | 64
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterSerializer.java | 59
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssSlaveSerializer.java | 63
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java | 3
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java | 71
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java | 373 ++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java | 408 ++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java | 249 ++
java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/test/SlaveHandlerTest.java | 233 ++
java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java | 9
java/code/webapp/WEB-INF/nav/iss_config.xml | 9
java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml | 35
java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp | 58
java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp | 84
java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp | 108 +
java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp | 77
java/code/webapp/WEB-INF/pages/admin/iss/master.jsp | 99 +
java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp | 64
java/code/webapp/WEB-INF/struts-config.xml | 912 +++++-----
schema/spacewalk/common/tables/rhnISSMaster.sql | 7
schema/spacewalk/common/tables/rhnISSMasterOrgs.sql | 12
schema/spacewalk/common/tables/rhnISSSlave.sql | 13
schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql | 6
schema/spacewalk/common/tables/tables.deps | 2
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSSlave.sql | 12
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSSlaveOrgs.sql | 5
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/024-rhnISSMaster.sql | 7
schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/025-rhnISSMasterOrgs.sql | 12
sync_setup/src/bin/sync_setup | 491 +++++
80 files changed, 6545 insertions(+), 498 deletions(-)
New commits:
commit 2712558a2d7cc9d98bb7c459c67022185aea4a2d
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon Jun 24 17:26:28 2013 -0400
ISS rmv whitespace
commit 9fe1b4cf5cee3b2035e1f0c4b849614df731716a
Author: Stephen Herr <sherr(a)redhat.com>
Date: Mon Jun 24 16:48:29 2013 -0400
ISS: checking a couple of potentially None values
diff --git a/backend/satellite_tools/sync_handlers.py b/backend/satellite_tools/sync_handlers.py
index db755a7..974ffc9 100644
--- a/backend/satellite_tools/sync_handlers.py
+++ b/backend/satellite_tools/sync_handlers.py
@@ -228,7 +228,7 @@ def import_channels(channels, orgid=None, master=None):
str(c_obj['org_id'])
# If there's a trust list on the channel, transform the org ids to
# the local ones
- if c_obj.has_key('trust_list'):
+ if c_obj.has_key('trust_list') and c_obj['trust_list']:
trusts = []
for trust in c_obj['trust_list']:
if org_map.has_key(trust['org_trust_id']):
diff --git a/backend/server/importlib/channelImport.py b/backend/server/importlib/channelImport.py
index 58b53c5..cd2fccc 100644
--- a/backend/server/importlib/channelImport.py
+++ b/backend/server/importlib/channelImport.py
@@ -133,7 +133,8 @@ class ChannelImport(Import):
for channel in self.batch:
if channel.ignored:
continue
- if channel.has_key('trust_list'):
+ if (channel.has_key('trust_list')
+ and channel['trust_list']):
for trust in channel['trust_list']:
channel_trusts.append({'channel-label': channel['label'],
'org-id': trust['org_trust_id']})
commit e4cc53a075b92f1f3d457d5f8deef7f54ba659aa
Author: Stephen Herr <sherr(a)redhat.com>
Date: Mon Jun 24 16:41:26 2013 -0400
ISS: make sure new satellites can sync to old ones
diff --git a/backend/satellite_tools/constants.py b/backend/satellite_tools/constants.py
index 1dd2eb8..2a5963e 100644
--- a/backend/satellite_tools/constants.py
+++ b/backend/satellite_tools/constants.py
@@ -17,9 +17,12 @@ Constant values (protocol versions, etc) for satellite sync/exporter.
"""
# XML dump version we export
-PROTOCOL_VERSION = 3.6
+PROTOCOL_VERSION = 3.7
-ALLOWED_SYNC_PROTOCOL_VERSIONS = ['3.6', '3.5', '3.4', '3.3', '3.2', '3.1', '3.0']
+ALLOWED_SYNC_PROTOCOL_VERSIONS = ['3.7', '3.6', '3.5', '3.4', '3.3', '3.2', '3.1', '3.0']
+
+# Support for syncing orgs / org trusts / channel trusts
+ORG_SUPPORTED_VERSION = 3.7
# Support for checksums other then md5
SHA256_SUPPORTED_VERSION = 3.5
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index 4302ebe..aa465d7 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -352,7 +352,12 @@ class Runner:
self.syncer.import_kickstarts()
def _step_orgs(self):
- self.syncer.import_orgs()
+ try:
+ self.syncer.import_orgs()
+ except RhnSyncException, e:
+ # the orgs() method doesn't exist; that's fine we just
+ # won't sync the orgs
+ log(1, [_("The upstream Satellite does not support syncing orgs data."), _("Skipping...")])
def sendMail(forceEmail=0):
""" Send email summary """
commit 0307f864aadf5f01368174faebddb66b26117b29
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon Jun 24 13:06:13 2013 -0400
ISS mv sql-updates in prep for last(?) merge from master
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql
deleted file mode 100644
index dfd56e4..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnISSSlave (
- id number not null constraint rhn_isss_id_pk primary key,
- slave varchar2(512) not null constraint rhn_isss_name_uq unique,
- enabled char(1) not null default 'Y',
- constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
- allow_all_orgs char(1) not null default 'Y',
- constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
- created timestamp with local time zone default (current_timestamp) not null,
- modified timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
deleted file mode 100644
index 3a09fd9..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
+++ /dev/null
@@ -1,5 +0,0 @@
-create table rhnISSSlaveOrgs (
- slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
- org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
- created timestamp with local time zone default (current_timestamp) not null
-);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql
deleted file mode 100644
index 54db1a5..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnIssMaster (
- id number not null constraint rhn_iss_master_id_pk primary key,
- label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSSlave.sql
new file mode 100644
index 0000000..dfd56e4
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSSlave.sql
@@ -0,0 +1,12 @@
+create table rhnISSSlave (
+ id number not null constraint rhn_isss_id_pk primary key,
+ slave varchar2(512) not null constraint rhn_isss_name_uq unique,
+ enabled char(1) not null default 'Y',
+ constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
+ allow_all_orgs char(1) not null default 'Y',
+ constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
+ created timestamp with local time zone default (current_timestamp) not null,
+ modified timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql
deleted file mode 100644
index 7991435..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnIssMasterOrgs (
- id number not null constraint rhn_issmasterorgs_id_pk primary key,
- master_id number not null
- constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
- master_org_id number not null,
- master_org_name varchar2(512) not null,
- local_org_id number
- constraint rhn_issmasterorgs_lid_fk references web_customer(id),
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issmasterorgs_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSSlaveOrgs.sql
new file mode 100644
index 0000000..3a09fd9
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSSlaveOrgs.sql
@@ -0,0 +1,5 @@
+create table rhnISSSlaveOrgs (
+ slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
+ org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/024-rhnISSMaster.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/024-rhnISSMaster.sql
new file mode 100644
index 0000000..54db1a5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/024-rhnISSMaster.sql
@@ -0,0 +1,7 @@
+create table rhnIssMaster (
+ id number not null constraint rhn_iss_master_id_pk primary key,
+ label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/025-rhnISSMasterOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/025-rhnISSMasterOrgs.sql
new file mode 100644
index 0000000..7991435
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/025-rhnISSMasterOrgs.sql
@@ -0,0 +1,12 @@
+create table rhnIssMasterOrgs (
+ id number not null constraint rhn_issmasterorgs_id_pk primary key,
+ master_id number not null
+ constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
+ master_org_id number not null,
+ master_org_name varchar2(512) not null,
+ local_org_id number
+ constraint rhn_issmasterorgs_lid_fk references web_customer(id),
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmasterorgs_seq;
commit dcd72ac289b38c2012de05ea26545567ee984469
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon Jun 24 08:44:30 2013 -0400
ISS Fix inappropriate cascade when deleting a Slave
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
index faf13d0..9be738a 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -21,8 +21,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
table="rhnissslaveorgs"
inverse="false"
lazy="true"
- fetch="select"
- cascade="all">
+ fetch="select">
<key column="slave_id" not-null="true"/>
<many-to-many column="org_id" class="com.redhat.rhn.domain.org.Org" />
</set>
commit ed4fcab48f20e3d2bc6a3c85b4e13edcd7bd7ec3
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon Jun 24 08:42:31 2013 -0400
ISS fix bad I18N key
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
index 4f94eb4..3b6ef82 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -36,7 +36,7 @@
<rhn:csrf />
<rhn:submitted />
<rl:list dataset="pageList" name="issSlaveList"
- emptykey="master.jsp.noslaves">
+ emptykey="iss.master.jsp.noslaves">
<rl:decorator name="SelectableDecorator" />
<rl:selectablecolumn value="${current.selectionKey}"
selected="${current.selected}" />
commit f952fa3393946ca009e00c878091cd5c73f1d435
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Sun Jun 23 19:18:12 2013 -0400
ISS sync_setup master-side
diff --git a/sync_setup/src/bin/sync_setup b/sync_setup/src/bin/sync_setup
index b75ad50..f230eb0 100755
--- a/sync_setup/src/bin/sync_setup
+++ b/sync_setup/src/bin/sync_setup
@@ -2,7 +2,7 @@
""" iss_setup - a tool for easing the pain of setting up organization-mappings for ISS """
-import logging, os, re, sys, xmlrpclib
+import logging, os, re, sys, xmlrpclib, string
from ConfigParser import SafeConfigParser, NoOptionError
from optparse import OptionParser, OptionGroup
from os import path, access, R_OK
@@ -13,24 +13,27 @@ DEFAULT_MASTER_SETUP_FILENAME = home + '/.spacewalk/master.txt'
DEFAULT_SLAVE_SETUP_FILENAME = home + '/.spacewalk/slave.txt'
DEFAULT_CONFIG = """
-# Default defines the slave and/or master we should connec tto by default
+# Default defines the slave and/or master we should connect to by default
[Default]
# Default slave FQDN
-slave.default=
+slave.default=SLAVE
# Default master FQDN
-master.default=
+master.default=MASTER
+"""
-# Any spacewalk Fully-Qualified-Domain-Name (FQDN) can have a stanza,
+DEFAULT_CONFIG_FQDN_STANZA = """
+# Any spacewalk Fully-Qualified-Domain-Name (fqdn) can have a stanza,
# defining logins and setup files to use
-[a.spacewalk.fqdn.com]
-# Login (and optionally pwd) of a sat-admin login for this instance
+[FQDN]
+# Login of a sat-admin login for this instance
+login = LOGIN
# NOTE: Putting passwords in cfg-files is suboptimal. The tool will ask
# But if you really want to, go ahead
-login = login[@pwd]
+password = PASSWORD
# Where's the slave-side setup file for this spacewalk instance?
-slave.setup =
+slave.setup = SLAVE_FILE
# Where's the master-side setup file for this spacewalk instance?
-master.setup =
+master.setup = MASTER_FILE
"""
def setupOptions():
@@ -38,28 +41,36 @@ def setupOptions():
parser = OptionParser(usage=usage)
cnxGrp = OptionGroup(parser, "Connections", "Identify the spacewalk instances we're going to connect to");
- cnxGrp.add_option('--slave', action='store', dest='slave',
- help="name of a slave to connect to. Optionally can be login/password@name")
- cnxGrp.add_option('--master', action='store', dest='master',
- help="name of a master to connect to. Optionally can be login/password@name")
+ cnxGrp.add_option('--ss', '--slave-server', action='store', dest='slave',
+ help="name of a slave to connect to.")
+ cnxGrp.add_option('--sl', '--slave-login', action='store', dest='slave_login', default="",
+ help="A sat-admin login for slave-server")
+ cnxGrp.add_option('--sp', '--slave-password', action='store', dest='slave_password', default="",
+ help="Password for login slave-login on slave-server")
+ cnxGrp.add_option('--ms', '--master-server', action='store', dest='master',
+ help="name of a master to connect to.")
+ cnxGrp.add_option('--ml', '--master-login', action='store', dest='master_login', default="",
+ help="A sat-admin login for master-server")
+ cnxGrp.add_option('--mp', '--master-password', action='store', dest='master_password', default="",
+ help="Password for login master-login on master-server")
parser.add_option_group(cnxGrp)
tmplGrp = OptionGroup(parser, "Templates", "Options for creating initial versions of setup files")
- tmplGrp.add_option('--create-slave-template', action='store_true', dest='slave_template', default=False,
+ tmplGrp.add_option('--cst', '--create-slave-template', action='store_true', dest='slave_template', default=False,
help="Create a setup file for the slave we're pointed at, "
"based on information from the master we're pointed at")
- tmplGrp.add_option('--create-master-template', action='store_true', dest='master_template', default=False,
+ tmplGrp.add_option('--cmt', '--create-master-template', action='store_true', dest='master_template', default=False,
help="Create a setup file for the master we're pointed at, "
"based on information from the slave we're pointed at")
- tmplGrp.add_option('--create-templates', action='store_true', dest='both_template', default=False,
+ tmplGrp.add_option('--ct', '--create-templates', action='store_true', dest='both_template', default=False,
help="Create both a master and a slave setup file, for the master/slave pair we're pointed at")
parser.add_option_group(tmplGrp)
setupGrp = OptionGroup(parser, "Setup",
"Specify the setup files we're actually going to apply to a slave/master")
- setupGrp.add_option('--master-setup-file', action='store', dest='master_file', metavar='FILE',
+ setupGrp.add_option('--msf', '--master-setup-file', action='store', dest='master_file', metavar='FILE',
help='Specify the master-setup-file we should use')
- setupGrp.add_option('--slave-setup-file', action='store', dest='slave_file', metavar='FILE',
+ setupGrp.add_option('--ssf', '--slave-setup-file', action='store', dest='slave_file', metavar='FILE',
help='Specify the slave-setup-file we should use')
parser.add_option_group(setupGrp)
@@ -84,9 +95,9 @@ def setupOptions():
def setupLogging(opt):
# determine the logging level
- if options.debug:
+ if opt.debug:
level = logging.DEBUG
- elif options.quiet:
+ elif opt.quiet:
level = logging.ERROR
else:
level = logging.INFO
@@ -96,12 +107,57 @@ def setupLogging(opt):
return
+def initializeConfig(opt, handle):
+ "We don't have any defaults - create some, using CLI if we have them"
+ hdr = DEFAULT_CONFIG
+
+ slave_stanza = DEFAULT_CONFIG_FQDN_STANZA
+ master_stanza = DEFAULT_CONFIG_FQDN_STANZA
+
+ if 'slave' in opt.__dict__:
+ hdr = hdr.replace('SLAVE', opt.slave)
+ slave_stanza = slave_stanza.replace('FQDN', opt.slave)
+
+ if 'slave_login' in opt.__dict__:
+ slave_stanza = slave_stanza.replace('LOGIN', opt.slave_login)
+
+ if 'slave_password' in opt.__dict__:
+ slave_stanza = slave_stanza.replace('PASSWORD', opt.slave_password)
+
+ if 'slave_file' in opt.__dict__:
+ slave_stanza = slave_stanza.replace('SLAVE_FILE', opt.slave_file)
+
+ if 'master' in opt.__dict__:
+ hdr = hdr.replace('MASTER', opt.master)
+ master_stanza = master_stanza.replace('FQDN', opt.master)
+
+ if 'master_login' in opt.__dict__:
+ master_stanza = master_stanza.replace('LOGIN', opt.master_login)
+
+ if 'master_password' in opt.__dict__:
+ master_stanza = master_stanza.replace('PASSWORD', opt.master_password)
+
+ if 'master_file' in opt.__dict__:
+ master_stanza = master_stanza.replace('MASTER_FILE', opt.master_file)
+
+ logging.debug("Header is now " + hdr)
+ logging.debug("Slave-stanza is now " + slave_stanza)
+ logging.debug("Master-stanza is now " + master_stanza)
+
+ handle.write(hdr)
+ handle.write(slave_stanza)
+ handle.write(master_stanza)
+
+ return
+
+
def setupConfig(opt):
"The cfg-values we recognize include: \n"
" * default master \n"
" * default slave \n"
" * For specific FQDNs: \n"
- " * login/pwd \n"
+ " * login \n"
+ " * password \n"
" * master-setup-file \n"
" * slave-setup-file \n"
@@ -123,38 +179,100 @@ def setupConfig(opt):
# create a template configuration file
logging.debug('Creating configuration file: %s' % user_conf_file)
handle = open(user_conf_file, 'w')
-
- handle.write(DEFAULT_CONFIG)
-
+ initializeConfig(opt, handle)
handle.close()
except IOError:
logging.error('Could not create %s' % user_conf_file)
- # load options from configuration files
- files_read = config.read( [ user_conf_file ] )
-
- for item in files_read:
- logging.debug('Read configuration from %s' % item)
+ # load options from configuration file
+ config.read( [ user_conf_file ] )
return config;
def getMasterConnectionInfo(opt, cfg):
- # Make sure we have login, password, and fqdn for MASTER, based on options and config-files
- # Anything we're missing - ask for
- info = {'fqdn': 'ggainey-beast.usersys.redhat.com', 'login':'ggainey', 'password':'redhat'}
+ "Make sure we have login, password, and fqdn for MASTER, based on options and config-files"
+ info = {}
+
+ if 'master' in opt.__dict__:
+ info['fqdn'] = opt.master
+ elif cfg.has_option('Default', 'master.default'):
+ info['fqdn'] = cfg.get('Default', 'master.default')
+ else: # No master - skip
+ return info
+
+ # Now that we have a master fqdn, we can get login info
+ if 'master_login' in opt.__dict__:
+ info['login'] = opt.master_login
+ elif cfg.has_option(info['fqdn'], 'login'):
+ info['login'] = cfg.has_option(info['fqdn'], 'login')
+ else:
+ return info
+
+ # And finally pwd
+ if 'master_password' in opt.__dict__:
+ info['password'] = opt.master_password
+ elif cfg.has_option(info['fqdn'], 'password'):
+ info['password'] = cfg.has_option(info['fqdn'], 'password')
+ else:
+ return info;
+
return info
def getSlaveConnectionInfo(opt, cfg):
- # Make sure we have login, password, and fqdn for SLAVE, based on options and config-files
- # Anything we're missing - ask for
- info = {'fqdn': 'localhost', 'login':'ggainey', 'password':'redhat'}
+ "Make sure we have login, password, and fqdn for SLAVE, based on options and config-files"
+ info = {}
+
+ if 'slave' in opt.__dict__:
+ info['fqdn'] = opt.slave
+ elif cfg.has_option('Default', 'slave.default'):
+ info['fqdn'] = cfg.get('Default', 'slave.default')
+ else: # No slave - skip
+ return info
+
+ # Now that we have a slave fqdn, we can get login info
+ if 'slave_login' in opt.__dict__:
+ info['login'] = opt.slave_login
+ elif cfg.has_option(info['fqdn'], 'login'):
+ info['login'] = cfg.has_option(info['fqdn'], 'login')
+ else:
+ return info
+
+ # And finally pwd
+ if 'slave_password' in opt.__dict__:
+ info['password'] = opt.slave_password
+ elif cfg.has_option(info['fqdn'], 'password'):
+ info['password'] = cfg.has_option(info['fqdn'], 'password')
+ else:
+ return info;
+
+ return info
+
+
+def validateConnectInfo(info):
+ "Something needs to connect - make sure we have fqdn/login/pwd, and ask for "
+ " anything missing"
+
+ if not 'fqdn' in info or len(info['fqdn']) == 0:
+ fail("Can't connect, I don't know what machine you want to go to!")
+
+ if not 'login' in info or len(info['login']) == 0:
+ info['login'] = ask("Satellite-Admin login for " + info['fqdn'])
+ if not 'login' in info:
+ fail("Can't connect, I don't have a login to use!")
+
+ if not 'password' in info or len(info['password']) == 0:
+ info['password'] = ask("Password for " + info['login'] + " on machine " + info['fqdn'])
+ # I would love to check for empty-pwd here - but some people use empty passwords :(
+
return info
def connectTo(info):
logging.debug("Connect-to info = %s" % info)
+ logging.info("Connecting to " + info['login'] + "@" + info['fqdn'])
+ info = validateConnectInfo(info)
url = "https://{0}/rpc/api".format(info['fqdn'])
client = xmlrpclib.Server(url, verbose=0)
key = client.auth.login(info['login'], info['password'])
@@ -191,6 +309,8 @@ def determineTemplateFilename(kind, fqdn, opt, cfg):
def gen_slave_template(slave_session, master_session, master, filename):
"Generates a default setup applying to the specified master, for the connected-slave"
+ logging.info("Generating slave-setup file " + filename)
+
master_orgs = master_session['client'].org.listOrgs(master_session['key'])
master_map = orgByName(master_orgs)
logging.debug("MASTER ORG MAP %s" % master_map)
@@ -210,11 +330,11 @@ def gen_slave_template(slave_session, master_session, master, filename):
for org in master_orgs:
if org['name'] in slave_map:
- master_org = {'masterOrgId':org['id'], 'masterOrgName':org['name'], 'localOrgId':slave_map[org['name']]}
+ master_org = "%s|%s|%s" % (org['id'], org['name'], slave_map[org['name']])
slave_setup.set(master, str(org['id']), str(master_org))
else:
- master_org = {'masterOrgId':org['id'], 'masterOrgName':org['name'], 'localOrgId':1}
- slave_setup.set(master, str(org['id']), str(master_org))
+ master_org = "%s|%s|%s" % (org['id'], org['name'], 1)
+ slave_setup.set(master, str(org['id']), master_org)
with open(filename, 'w+') as configfile:
slave_setup.write(configfile)
@@ -223,8 +343,9 @@ def gen_slave_template(slave_session, master_session, master, filename):
return
-def gen_master_template(master_session, slave, setupfile):
+def gen_master_template(master_session, slave, filename):
"Generates a default setup applying to the specified slave, for the connected-master"
+ logging.info("Generating master-setup file " + filename)
master_setup = SafeConfigParser()
master_setup.optionxform = str
@@ -257,35 +378,97 @@ def gen_master_template(master_session, slave, setupfile):
def apply_slave_template(slave_session, slave_setup_filename):
"Updates the connected slave with information for the master(s) contained in the specified slave-setup-file"
+ logging.info("Applying slave-setup " + slave_setup_filename)
+ client = slave_session['client']
+ key = slave_session['key']
slave_setup = SafeConfigParser()
- if path.isfile(filename) and access(filename, R_OK):
+ if path.isfile(slave_setup_filename) and access(slave_setup_filename, R_OK):
slave_setup.readfp(open(filename))
+ else:
+ fail("Can't find slave-setup file [" + slave_setup_filename + "]")
+
+ fqdns = slave_setup.sections()
+
+ for fqdn in fqdns:
+ try:
+ master = client.sync.master.getMasterByLabel(key, fqdn)
+ except Exception, e:
+ master = client.sync.master.create(key, fqdn)
+
+ master_orgs = []
+ moids = slave_setup.options(fqdn)
+ for moid in moids: # moid|moname|local_oid
+ minfo = slave_setup.get(fqdn, moid)
+ elts = string.split(minfo, '|')
+ orginfo = {}
+ orginfo['masterOrgId'] = int(elts[0])
+ orginfo['masterOrgName'] = elts[1]
+ if len(elts[2]) > 0:
+ orginfo['localOrgId'] = int(elts[2])
+ master_orgs.append(orginfo)
+
+ client.sync.master.setMasterOrgs(key, master['id'], master_orgs)
return
def apply_master_template(master_session, master_setup_filename):
"Updates the connected master with information for the slave(s) contained in the specified master-setup-file"
+ logging.info("Applying master-setup " + master_setup_filename)
+ client = master_session['client']
+ key = master_session['key']
+
+ master_setup = SafeConfigParser()
+ if path.isfile(master_setup_filename) and access(master_setup_filename, R_OK):
+ master_setup.readfp(open(filename))
+ else:
+ fail("Can't find master-setup file [" + master_setup_filename + "]")
+
+ fqdns = master_setup.sections()
+
+ for fqdn in fqdns:
+ try:
+ slave = client.sync.slave.getSlaveByName(key, fqdn)
+ except Exception, e:
+ slave = client.sync.slave.create(key, fqdn, True, True)
+
+ client.sync.slave.update(key, slave['id'], fqdn,
+ master_setup.getboolean(fqdn, 'isEnabled'),
+ master_setup.getboolean(fqdn, 'allowAllOrgs'))
+ master_orgs = [int(x) for x in master_setup.get(fqdn, 'allowedOrgs').split(',')]
+ client.sync.slave.setAllowedOrgs(key, slave['id'], master_orgs)
return
+def ask(msg):
+ val = raw_input(msg + " : ")
+ return val
+
+
+def fail(msg):
+ logging.error(msg)
+ sys.exit(msg)
+
+
if __name__ == '__main__':
parser = setupOptions()
(options, args) = parser.parse_args()
- print("OPTIONS = %s" % options)
setupLogging(options)
+ logging.debug("OPTIONS = %s" % options)
config = setupConfig(options)
logging.debug("CONFIG = %s" % config)
master_info = getMasterConnectionInfo(options, config)
- master_cnx = connectTo(master_info)
- logging.debug("Master cnx = %s" % master_cnx)
+ if options.master_template or options.slave_template or options.both_template or options.master_file:
+ master_cnx = connectTo(master_info)
+ logging.debug("Master cnx = %s" % master_cnx)
slave_info = getSlaveConnectionInfo(options, config)
- slave_cnx = connectTo(slave_info)
- logging.debug("Slave cnx = %s" % slave_cnx)
+ if options.master_template or options.slave_template or options.both_template or options.slave_file:
+ slave_cnx = connectTo(slave_info)
+ logging.debug("Slave cnx = %s" % slave_cnx)
if options.master_template or options.both_template:
filename = determineTemplateFilename('master', slave_info['fqdn'], options, config)
commit de7551116c87093781f1df5bbc2e0c458d16e5a0
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Sun Jun 23 18:24:33 2013 -0400
ISS Add sync.slave.getSlaveByName API
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
index ebe6d65..09b63a5 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
@@ -133,7 +133,7 @@ public class SlaveHandler extends BaseHandler {
* @param slaveId Id of the Slave to look for
* @return the specified Slave if found, exception otherwise
*
- * @xmlrpc.doc Remove the specified Slave
+ * @xmlrpc.doc Find a Slave by specifying its ID
* @xmlrpc.param #param("string", "sessionKey")
* @xmlrpc.param #param_desc("int", "id", "Id of the desired Slave")
* @xmlrpc.returntype $IssSlaveSerializer
@@ -147,6 +147,25 @@ public class SlaveHandler extends BaseHandler {
}
/**
+ * Find a Slave by specifying its Fully-Qualified Domain Name
+ * @param sessionKey User's session key.
+ * @param slaveFqdn Domain name of the Slave to look for
+ * @return the specified Slave if found, exception otherwise
+ *
+ * @xmlrpc.doc Find a Slave by specifying its Fully-Qualified Domain Name
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("string", "fqdn", "Domain-name of the desired Slave")
+ * @xmlrpc.returntype $IssSlaveSerializer
+ */
+ public IssSlave getSlaveByName(String sessionKey, String slaveFqdn) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ IssSlave slave = IssFactory.lookupSlaveByName(slaveFqdn);
+ validateExists(slave, slaveFqdn);
+ return slave;
+ }
+
+ /**
* Get all the slaves this master knows about
* @param sessionKey User's session key.
* @return list of all the IssSlaves we know about
commit c3ecd25f31bae426ae343cfc195665d4326644a7
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu Jun 20 20:16:14 2013 -0400
ISS sync_setup - apply doesn't work, most everything else does
diff --git a/sync_setup/src/bin/sync_setup b/sync_setup/src/bin/sync_setup
new file mode 100755
index 0000000..b75ad50
--- /dev/null
+++ b/sync_setup/src/bin/sync_setup
@@ -0,0 +1,308 @@
+#!/usr/bin/python
+
+""" iss_setup - a tool for easing the pain of setting up organization-mappings for ISS """
+
+import logging, os, re, sys, xmlrpclib
+from ConfigParser import SafeConfigParser, NoOptionError
+from optparse import OptionParser, OptionGroup
+from os import path, access, R_OK
+from os.path import expanduser
+
+home = expanduser("~")
+DEFAULT_MASTER_SETUP_FILENAME = home + '/.spacewalk/master.txt'
+DEFAULT_SLAVE_SETUP_FILENAME = home + '/.spacewalk/slave.txt'
+
+DEFAULT_CONFIG = """
+# Default defines the slave and/or master we should connec tto by default
+[Default]
+# Default slave FQDN
+slave.default=
+# Default master FQDN
+master.default=
+
+# Any spacewalk Fully-Qualified-Domain-Name (FQDN) can have a stanza,
+# defining logins and setup files to use
+[a.spacewalk.fqdn.com]
+# Login (and optionally pwd) of a sat-admin login for this instance
+# NOTE: Putting passwords in cfg-files is suboptimal. The tool will ask
+# But if you really want to, go ahead
+login = login[@pwd]
+# Where's the slave-side setup file for this spacewalk instance?
+slave.setup =
+# Where's the master-side setup file for this spacewalk instance?
+master.setup =
+"""
+
+def setupOptions():
+ usage = 'usage: %prog [options]'
+ parser = OptionParser(usage=usage)
+
+ cnxGrp = OptionGroup(parser, "Connections", "Identify the spacewalk instances we're going to connect to");
+ cnxGrp.add_option('--slave', action='store', dest='slave',
+ help="name of a slave to connect to. Optionally can be login/password@name")
+ cnxGrp.add_option('--master', action='store', dest='master',
+ help="name of a master to connect to. Optionally can be login/password@name")
+ parser.add_option_group(cnxGrp)
+
+ tmplGrp = OptionGroup(parser, "Templates", "Options for creating initial versions of setup files")
+ tmplGrp.add_option('--create-slave-template', action='store_true', dest='slave_template', default=False,
+ help="Create a setup file for the slave we're pointed at, "
+ "based on information from the master we're pointed at")
+ tmplGrp.add_option('--create-master-template', action='store_true', dest='master_template', default=False,
+ help="Create a setup file for the master we're pointed at, "
+ "based on information from the slave we're pointed at")
+ tmplGrp.add_option('--create-templates', action='store_true', dest='both_template', default=False,
+ help="Create both a master and a slave setup file, for the master/slave pair we're pointed at")
+ parser.add_option_group(tmplGrp)
+
+ setupGrp = OptionGroup(parser, "Setup",
+ "Specify the setup files we're actually going to apply to a slave/master")
+ setupGrp.add_option('--master-setup-file', action='store', dest='master_file', metavar='FILE',
+ help='Specify the master-setup-file we should use')
+ setupGrp.add_option('--slave-setup-file', action='store', dest='slave_file', metavar='FILE',
+ help='Specify the slave-setup-file we should use')
+ parser.add_option_group(setupGrp)
+
+ actionGrp = OptionGroup(parser, "Action", "Should we actually affect the specified spacewalk instances?")
+ actionGrp.add_option('--dry-run', action='store_true', dest='dry_run', default=True,
+ help="Don't actually change anything, but tell us what you would have done")
+ actionGrp.add_option('--apply', action='store_true', dest='apply', default=False,
+ help="make the changes specified by the setup files to the specified spacewalk instances")
+ actionGrp.add_option('--default-ok', action='store_true', dest='default_ok', default=False,
+ help="Even if I don't explicitly tell you about a master or slave on the command-line, it's ok to try to apply changes to them!")
+ parser.add_option_group(actionGrp)
+
+ utilGrp = OptionGroup(parser, "Utility")
+ utilGrp.add_option('-d', '--debug', action='store_true', default=False, dest='debug',
+ help='Log debugging output')
+ utilGrp.add_option('-q', '--quiet', action='store_true', default=False, dest='quiet',
+ help='Log only errors')
+ parser.add_option_group(utilGrp)
+
+ return parser
+
+
+def setupLogging(opt):
+ # determine the logging level
+ if options.debug:
+ level = logging.DEBUG
+ elif options.quiet:
+ level = logging.ERROR
+ else:
+ level = logging.INFO
+
+ # configure logging
+ logging.basicConfig(level=level, format='%(levelname)s: %(message)s')
+ return
+
+
+def setupConfig(opt):
+ "The cfg-values we recognize include: \n"
+ " * default master \n"
+ " * default slave \n"
+ " * For specific FQDNs: \n"
+ " * login/pwd \n"
+ " * master-setup-file \n"
+ " * slave-setup-file \n"
+
+ # files are loaded from ~/.spacewalk/
+ conf_dir = os.path.expanduser('~/.spacewalk')
+ user_conf_file = os.path.join(conf_dir, 'config')
+
+ # server-specifics will be loaded from the configuration file later
+ config = SafeConfigParser()
+
+ # create an empty configuration file if one's not present
+ if not os.path.isfile(user_conf_file):
+ try:
+ # create ~/.spacewalk
+ if not os.path.isdir(conf_dir):
+ logging.debug('Creating %s' % conf_dir)
+ os.mkdir(conf_dir, 0700)
+
+ # create a template configuration file
+ logging.debug('Creating configuration file: %s' % user_conf_file)
+ handle = open(user_conf_file, 'w')
+
+ handle.write(DEFAULT_CONFIG)
+
+ handle.close()
+ except IOError:
+ logging.error('Could not create %s' % user_conf_file)
+
+ # load options from configuration files
+ files_read = config.read( [ user_conf_file ] )
+
+ for item in files_read:
+ logging.debug('Read configuration from %s' % item)
+
+ return config;
+
+
+def getMasterConnectionInfo(opt, cfg):
+ # Make sure we have login, password, and fqdn for MASTER, based on options and config-files
+ # Anything we're missing - ask for
+ info = {'fqdn': 'ggainey-beast.usersys.redhat.com', 'login':'ggainey', 'password':'redhat'}
+ return info
+
+
+def getSlaveConnectionInfo(opt, cfg):
+ # Make sure we have login, password, and fqdn for SLAVE, based on options and config-files
+ # Anything we're missing - ask for
+ info = {'fqdn': 'localhost', 'login':'ggainey', 'password':'redhat'}
+ return info
+
+
+def connectTo(info):
+ logging.debug("Connect-to info = %s" % info)
+ url = "https://{0}/rpc/api".format(info['fqdn'])
+ client = xmlrpclib.Server(url, verbose=0)
+ key = client.auth.login(info['login'], info['password'])
+ return { "client" : client, "key" : key }
+
+
+def orgByName(orgs):
+ org_map = {}
+ for org in orgs:
+ org_map[org['name']] = org['id']
+ return org_map
+
+
+def determineTemplateFilename(kind, fqdn, opt, cfg):
+ logging.debug("detTmplFilename kind = %s, fqdn = %s, opt = %s, cfg = %s" % (kind, fqdn, opt, cfg))
+
+ if kind == 'master':
+ if opt.master_file:
+ return opt.master_file
+ elif cfg.has_option(fqdn, 'master.setup'):
+ return cfg.get(fqdn, 'master.setup')
+ else:
+ return DEFAULT_MASTER_SETUP_FILENAME
+ elif kind == 'slave':
+ if opt.slave_file:
+ return opt.slave_file
+ elif cfg.has_option(fqdn, 'slave.setup') and len(cfg.get(fqdn, 'slave.setup')) != 0:
+ return cfg.get(fqdn, 'slave.setup')
+ else:
+ return DEFAULT_SLAVE_SETUP_FILENAME
+ else:
+ return None
+
+
+def gen_slave_template(slave_session, master_session, master, filename):
+ "Generates a default setup applying to the specified master, for the connected-slave"
+ master_orgs = master_session['client'].org.listOrgs(master_session['key'])
+ master_map = orgByName(master_orgs)
+ logging.debug("MASTER ORG MAP %s" % master_map)
+
+ slave_orgs = slave_session['client'].org.listOrgs(slave_session['key'])
+ slave_map = orgByName(slave_orgs)
+ logging.debug("SLAVE ORG MAP %s" % slave_map)
+
+ slave_setup = SafeConfigParser()
+ slave_setup.optionxform = str
+
+ if path.isfile(filename) and access(filename, R_OK):
+ slave_setup.readfp(open(filename))
+
+ if not slave_setup.has_section(master):
+ slave_setup.add_section(master)
+
+ for org in master_orgs:
+ if org['name'] in slave_map:
+ master_org = {'masterOrgId':org['id'], 'masterOrgName':org['name'], 'localOrgId':slave_map[org['name']]}
+ slave_setup.set(master, str(org['id']), str(master_org))
+ else:
+ master_org = {'masterOrgId':org['id'], 'masterOrgName':org['name'], 'localOrgId':1}
+ slave_setup.set(master, str(org['id']), str(master_org))
+
+ with open(filename, 'w+') as configfile:
+ slave_setup.write(configfile)
+ configfile.close()
+
+ return
+
+
+def gen_master_template(master_session, slave, setupfile):
+ "Generates a default setup applying to the specified slave, for the connected-master"
+
+ master_setup = SafeConfigParser()
+ master_setup.optionxform = str
+
+ if path.isfile(filename) and access(filename, R_OK):
+ master_setup.readfp(open(filename, 'r'))
+
+ if not master_setup.has_section(slave):
+ master_setup.add_section(slave)
+
+ if not master_setup.has_option(slave, "isEnabled"):
+ master_setup.set(slave, 'isEnabled', str(1))
+
+ if not master_setup.has_option(slave, "allowAllOrgs"):
+ master_setup.set(slave, 'allowAllOrgs', str(1))
+
+ if not master_setup.has_option(slave, "allowedOrgs"):
+ idlist = []
+ for org in master_session['client'].org.listOrgs(master_session['key']):
+ idlist.append(org['id'])
+ logging.debug("idlist %s" % idlist)
+ master_setup.set(slave, 'allowedOrgs', ",".join(str(i) for i in idlist))
+
+ with open(filename, 'w+') as mfile:
+ master_setup.write(mfile)
+ mfile.close()
+
+ return
+
+
+def apply_slave_template(slave_session, slave_setup_filename):
+ "Updates the connected slave with information for the master(s) contained in the specified slave-setup-file"
+
+ slave_setup = SafeConfigParser()
+ if path.isfile(filename) and access(filename, R_OK):
+ slave_setup.readfp(open(filename))
+
+ return
+
+
+def apply_master_template(master_session, master_setup_filename):
+ "Updates the connected master with information for the slave(s) contained in the specified master-setup-file"
+ return
+
+
+if __name__ == '__main__':
+ parser = setupOptions()
+ (options, args) = parser.parse_args()
+ print("OPTIONS = %s" % options)
+ setupLogging(options)
+
+ config = setupConfig(options)
+ logging.debug("CONFIG = %s" % config)
+
+ master_info = getMasterConnectionInfo(options, config)
+ master_cnx = connectTo(master_info)
+ logging.debug("Master cnx = %s" % master_cnx)
+
+ slave_info = getSlaveConnectionInfo(options, config)
+ slave_cnx = connectTo(slave_info)
+ logging.debug("Slave cnx = %s" % slave_cnx)
+
+ if options.master_template or options.both_template:
+ filename = determineTemplateFilename('master', slave_info['fqdn'], options, config)
+ gen_master_template(master_cnx, slave_info['fqdn'], filename)
+
+ if options.slave_template or options.both_template:
+ filename = determineTemplateFilename('slave', master_info['fqdn'], options, config)
+ gen_slave_template(slave_cnx, master_cnx, master_info['fqdn'], filename)
+
+ if options.master_file:
+ filename = determineTemplateFilename('master', slave_info['fqdn'], options, config)
+ if options.apply and (options.master or options.default_ok):
+ apply_master_template(master_cnx, filename)
+
+ if options.slave_file:
+ filename = determineTemplateFilename('slave', master_info['fqdn'], options, config)
+ if options.apply and (options.slave or options.default_ok):
+ apply_slave_template(slave_cnx, filename)
+
+# vim:ts=4:expandtab:
commit 397f81b267e37a85ca272cffbe2785a9b1b692a5
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu Jun 20 20:11:45 2013 -0400
ISS Missed slave.jsp centering
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
index 9c9d129..9da3d27 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
@@ -43,10 +43,10 @@
<c:out value="${current.label}" />
</html:link>
</rl:column>
- <rl:column headerkey="iss.num.master.orgs">
+ <rl:column headerkey="iss.num.master.orgs" styleclass="center" headerclass="center">
<c:out value="${current.numMasterOrgs}" />
</rl:column>
- <rl:column headerkey="iss.num.unmapped.orgs">
+ <rl:column headerkey="iss.num.unmapped.orgs" styleclass="center" headerclass="center">
<c:out value="${current.numMasterOrgs - current.numMappedMasterOrgs}" />
</rl:column>
</rl:list>
commit b36aee67450a98223bed49023cbfa0bd6d973d36
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 18 09:48:03 2013 -0400
ISS Correctly center columns
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
index 0b2b74f..410f197 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
@@ -46,7 +46,7 @@
sortattr="sourceOrgName">
<c:out value="${current.masterOrgName}" />
</rl:column>
- <rl:column headerkey="iss.slave.orgs">
+ <rl:column headerkey="iss.slave.orgs" styleclass="center" headerclass="center">
<select name="${current.id}">
<c:forEach var="localOrg" items="${requestScope.slave_org_list}">
<c:choose>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
index dce668f..4f94eb4 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -46,7 +46,7 @@
</html:link>
</rl:column>
<rl:column bound="false" headerkey="iss.slave.isEnabled"
- sortattr="enabled">
+ sortattr="enabled" styleclass="center" headerclass="center">
<c:if test="${current.enabled == 'Y'}">
<img src="/img/rhn-listicon-checked.gif"
alt="<bean:message key="iss.slave.enabled"/>"
@@ -59,7 +59,7 @@
</c:if>
</rl:column>
<rl:column bound="false" headerkey="iss.slave.toAll"
- sortattr="allOrgs">
+ sortattr="allOrgs" styleclass="center" headerclass="center">
<c:if test="${current.allowAllOrgs == 'Y'}">
<img src="/img/rhn-listicon-checked.gif"
alt="<bean:message key="iss.slave.all"/>"
@@ -71,7 +71,8 @@
title="<bean:message key="iss.slave.notAll"/>" />
</c:if>
</rl:column>
- <rl:column bound="false" headerkey="iss.slave.num-orgs-allowed">
+ <rl:column bound="false" headerkey="iss.slave.num-orgs-allowed"
+ styleclass="center" headerclass="center">
<c:if test="${current.enabled != 'Y'}">
<bean:message key="iss.slave.disabled"/>
</c:if>
commit 2c62e37ddc90f9579f3da646d25047162adb1cb1
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 18 09:46:59 2013 -0400
ISS Correctly separate allow-all from allowed-org-list
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java
index 602bbbf..8e784ae 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java
@@ -43,8 +43,6 @@ import com.redhat.rhn.manager.rhnset.RhnSetDecl;
*/
public class EditSlaveAction extends RhnAction {
- private static final String LIST_NAME = "localOrgsList";
-
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
ActionForm formIn,
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
index 3817187..d1c2603 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
@@ -98,15 +98,13 @@ public class EditSlaveSetupAction extends RhnAction {
SessionSetHelper helper = new SessionSetHelper(request);
// if I have a previous set selections populate data using it
- boolean isSubmitted = ctxt.isSubmitted();
if (!sessionSet.isEmpty()) {
helper.syncSelections(sessionSet, locals);
ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
}
else {
for (OrgDto o : locals) {
- o.setSelected("Y".equals(theSlave.getAllowAllOrgs()) ||
- mappedOrgs.contains(o.getId()));
+ o.setSelected(mappedOrgs.contains(o.getId()));
}
}
request.setAttribute(LIST_NAME, locals);
commit 423e84c84199ffbf297fe3e4b014424b69feba50
Author: Stephen Herr <sherr(a)redhat.com>
Date: Fri Jun 14 18:32:32 2013 -0400
Channel trust syncing now works
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index e1b34a9..4302ebe 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -391,7 +391,7 @@ class Syncer:
self._systemidPath = OPTIONS.systemid or _DEFAULT_SYSTEMID_PATH
self._batch_size = OPTIONS.batch_size
self.master_label = OPTIONS.master
- self.create_orgs = OPTIONS.create_missing_orgs
+ #self.create_orgs = OPTIONS.create_missing_orgs
self.xml_dump_version = OPTIONS.dump_version or str(constants.PROTOCOL_VERSION)
self.check_rpms = check_rpms
self.keep_rpms = OPTIONS.keep_rpms
@@ -401,7 +401,7 @@ class Syncer:
self._channel_collection = sync_handlers.ChannelCollection()
self.containerHandler = sync_handlers.ContainerHandler(
- self.master_label, self.create_orgs)
+ self.master_label)
# instantiated in self.initialize()
self.xmlDataServer = None
@@ -668,8 +668,9 @@ Please contact your RHN representative""") % (generation, sat_cert.generation))
requested_channels = self._channel_req.get_requested_channels()
try:
- importer = sync_handlers.import_channels(requested_channels, \
- orgid=OPTIONS.orgid or None)
+ importer = sync_handlers.import_channels(requested_channels,
+ orgid=OPTIONS.orgid or None,
+ master=OPTIONS.master or None)
for label in requested_channels:
timestamp = self._channel_collection.get_channel_timestamp(label)
ch = self._channel_collection.get_channel(label, timestamp)
@@ -2111,8 +2112,9 @@ def processCommandline():
help=_('do not remove rpms when importing from local dump')),
Option( '--master', action='store',
help=_('the fully qualified doman name of the master Satellite. Valid with --mount-point only. Required if you want to import org data and channel permissions.')),
- Option( '--create-missing-orgs', action='store_true',
- help=_('create orgs on this Satellite to match orgs exported by the master Satellite if local orgs have not already been mapped to the master orgs (use with --mount-point or --iss-parent only)')),
+ # We can't have this option because then the new org won't have a user:
+ #Option( '--create-missing-orgs', action='store_true',
+ # help=_('create orgs on this Satellite to match orgs exported by the master Satellite if local orgs have not already been mapped to the master orgs (use with --mount-point or --iss-parent only)')),
# DEFERRED:
#Option( '--source-packages', action='store_true', help='sync source rpms/metadata as well.'),
@@ -2186,14 +2188,14 @@ def processCommandline():
if not OPTIONS.mount_point:
mst = _("ERROR: The --master option is only valid with the --mount-point option")
log2stderr(-1, msg, cleanYN=1)
- sys.exit(29)
+ sys.exit(28)
elif CFG.ISS_PARENT:
OPTIONS.master = CFG.ISS_PARENT
- if OPTIONS.create_missing_orgs and not OPTIONS.master:
- msg = _("ERROR: Org syncing is only available during an Inter Satellite Sync or import of a channel dump created by another Satellite with --master specified.")
- log2stderr(-1, msg, cleanYN=1)
- sys.exit(28)
+ #if OPTIONS.create_missing_orgs and not OPTIONS.master:
+ # msg = _("ERROR: Org syncing is only available during an Inter Satellite Sync or import of a channel dump created by another Satellite with --master specified.")
+ # log2stderr(-1, msg, cleanYN=1)
+ # sys.exit(29)
if OPTIONS.orgid:
# verify if its a valid org
@@ -2364,8 +2366,7 @@ def processCommandline():
_(" 25 - no such directory"),
_(" 26 - mount_point does not exist"),
_(" 27 - No such org"),
- _(" 28 - error: --create-missing-orgs requires --iss-parent or --mount-point"),
- _(" 29 - error: --master is only valid with --mount-point"),]
+ _(" 28 - error: --master is only valid with --mount-point"),]
log(-1, msg, 1, 1, sys.stderr)
sys.exit(0)
diff --git a/backend/satellite_tools/sync_handlers.py b/backend/satellite_tools/sync_handlers.py
index 2c40867..db755a7 100644
--- a/backend/satellite_tools/sync_handlers.py
+++ b/backend/satellite_tools/sync_handlers.py
@@ -187,11 +187,15 @@ class ChannelContainer(SyncHandlerContainer, xmlSource.ChannelContainer):
def get_channel_handler():
return get_sync_handler(ChannelContainer())
-def import_channels(channels, orgid=None):
+def import_channels(channels, orgid=None, master=None):
collection = ChannelCollection()
batch = []
import satCerts
orgs = map(lambda a: a['id'], satCerts.get_all_orgs())
+ org_map = None
+ my_backend = diskImportLib.get_backend()
+ if master:
+ org_map = my_backend.lookupOrgMap(master)['master-id-to-local-id']
for c in channels:
try:
timestamp = collection.get_channel_timestamp(c)
@@ -211,17 +215,32 @@ def import_channels(channels, orgid=None):
orgid = DEFAULT_ORG
if orgid is not None and c_obj['org_id'] is not None and \
c_obj['org_id'] != orgid:
- #Only set the channel family if its a custom channel
- c_obj['org_id'] = orgid
+ #If we know the master this is coming from and the master org
+ #has been mapped to a local org, transform org_id to the local
+ #org_id. Otherwise just put it in the default org.
+ if (org_map and c_obj['org_id'] in org_map.keys()
+ and org_map[c_obj['org_id']]):
+ c_obj['org_id'] = org_map[c_obj['org_id']]
+ else:
+ c_obj['org_id'] = orgid
for family in c_obj['families']:
family['label'] = 'private-channel-family-' + \
str(c_obj['org_id'])
+ # If there's a trust list on the channel, transform the org ids to
+ # the local ones
+ if c_obj.has_key('trust_list'):
+ trusts = []
+ for trust in c_obj['trust_list']:
+ if org_map.has_key(trust['org_trust_id']):
+ trust['org_trust_id'] = org_map[trust['org_trust_id']]
+ trusts.append(trust)
+ c_obj['trust_list'] = trusts
syncLib.log(6, "Syncing Channel %s to Org %s " % \
(c_obj['label'], c_obj['org_id']))
batch.append(c_obj)
- importer = channelImport.ChannelImport(batch, diskImportLib.get_backend())
+ importer = channelImport.ChannelImport(batch, my_backend)
# Don't commit just yet
importer.will_commit = 0
importer.run()
diff --git a/backend/satellite_tools/xmlSource.py b/backend/satellite_tools/xmlSource.py
index 280e76e..6e72793 100644
--- a/backend/satellite_tools/xmlSource.py
+++ b/backend/satellite_tools/xmlSource.py
@@ -459,7 +459,7 @@ class ChannelItem(BaseItem):
'rhn-channel-receiving-updates' : 'receiving_updates',
'rhn-channel-checksum-type' : 'checksum_type',
'rhn-channel-comps-last-modified' : 'comps_last_modified',
- 'sharing' : 'sharing',
+ 'sharing' : 'channel_access',
'rhn-channel-trusted-orgs' : 'trust_list',
}
def populateFromElements(self, obj, elements):
@@ -495,7 +495,7 @@ class ChannelTrustItem(BaseItem):
item_name = 'rhn-channel-trusted-org'
item_class = importLib.ChannelTrust
tagMap = {
- 'org-id' : 'org_id',
+ 'org-id' : 'org_trust_id',
}
addItem(ChannelTrustItem)
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py
index fadf257..fc73cde 100644
--- a/backend/server/importlib/backend.py
+++ b/backend/server/importlib/backend.py
@@ -260,7 +260,7 @@ class Backend:
# Finally, update the hash
arch_types_hash.update(results)
- def lookupOrg(self):
+ def _lookupOrg(self):
# Returns the org id
sql = "select min(id) as id from web_customer"
h = self.dbmodule.prepare(sql)
@@ -270,6 +270,18 @@ class Backend:
raise ValueError, "No user is created"
return rows[0]['id']
+ def lookupOrg(self, org_name=None):
+ if not org_name:
+ return self._lookupOrg()
+ # Returns id of the org if found, None otherwise
+ sql = "select id from web_customer where name = :name"
+ h = self.dbmodule.prepare(sql)
+ h.execute(name=org_name)
+ row = h.fetchone_dict()
+ if not row:
+ return None
+ return row['id']
+
def lookupMaster(self, master_label):
# Returns the master record (if it exists)
sql = "select * from rhnISSMaster where label = :label"
@@ -324,15 +336,15 @@ class Backend:
# Update the master org to local org mapping
insert = [[],[]]
for org in master_orgs:
- insert[0] = org['master_id']
- insert[1] = org['local_id']
+ insert[0].append(org['master_id'])
+ insert[1].append(org['local_id'])
sql = """
update rhnISSMasterOrgs
set local_org_id=:local
- where master_id=:master
+ where master_org_id=:master
"""
h = self.dbmodule.prepare(sql)
- h.executemany(local=insert[0], master=insert[1])
+ h.executemany(master=insert[0], local=insert[1])
def lookupOrgTrusts(self):
# Return a hash of org trusts
@@ -341,10 +353,11 @@ class Backend:
h.execute()
rows = h.fetchall_dict()
ret = {}
- for row in rows:
- if row['org_id'] not in ret.keys():
- ret[row['org_id']] = []
- ret[row['org_id']].append(row['org_trust_id'])
+ if rows:
+ for row in rows:
+ if row['org_id'] not in ret.keys():
+ ret[row['org_id']] = []
+ ret[row['org_id']].append(row['org_trust_id'])
return ret
def createOrgTrusts(self, trusts):
@@ -371,9 +384,26 @@ class Backend:
h = self.dbmodule.prepare(sql)
h.execute(master_label=master_label)
rows = h.fetchall_dict()
+ maps = {'master-name-to-master-id':{},
+ 'master-id-to-local-id':{}}
if not rows:
- return []
- return rows
+ return maps
+ mn_to_mi = {} # master org name to master org id map
+ mi_to_li = {} # master org id to local org id map
+ for org in rows:
+ if ('master_org_id' in org.keys()
+ and 'master_org_name' in org.keys()
+ and org['master_org_id']
+ and org['master_org_name']):
+ mn_to_mi[org['master_org_name']] = org['master_org_id']
+ if ('master_org_id' in org.keys()
+ and 'local_org_id' in org.keys()
+ and org['master_org_id']
+ and org['local_org_id']):
+ mi_to_li[org['master_org_id']] = org['local_org_id']
+ maps['master-name-to-master-id'] = mn_to_mi
+ maps['master-id-to-local-id'] = mi_to_li
+ return maps
def lookupChannels(self, hash):
if not hash:
@@ -896,6 +926,20 @@ class Backend:
self.__processObjectCollection(channels, 'rhnChannel', childTables,
'channel_id', uploadForce=4, ignoreUploaded=1, forceVerify=1)
+ def processChannelTrusts(self, channel_trusts):
+ # Create channel trusts
+ insert = [[],[]]
+ for trust in channel_trusts:
+ insert[0].append(trust['channel-label'])
+ insert[1].append(trust['org-id'])
+ sql = """
+ insert into rhnChannelTrust (channel_id, org_trust_id)
+ values ((select id from rhnChannel where label = :label),
+ :org_id)
+ """
+ h = self.dbmodule.prepare(sql)
+ h.executemany(label=insert[0], org_id=insert[1])
+
def processChannelFamilies(self, channels):
childTables = []
self.__processObjectCollection(channels, 'rhnChannelFamily',
diff --git a/backend/server/importlib/backendOracle.py b/backend/server/importlib/backendOracle.py
index 96be1e1..7aa68ef 100644
--- a/backend/server/importlib/backendOracle.py
+++ b/backend/server/importlib/backendOracle.py
@@ -326,6 +326,7 @@ class OracleBackend(Backend):
'last_modified' : DBdateTime(),
'channel_product_id' : DBint(),
'checksum_type_id' : DBint(),
+ 'channel_access': DBstring(10),
},
pk = ['label'],
severityHash = {
@@ -366,6 +367,15 @@ class OracleBackend(Backend):
attribute = 'release',
defaultSeverity = 4,
),
+ Table('rhnChannelTrust',
+ fields = {
+ 'channel_id' : DBint(),
+ 'org_trust_id' : DBint(),
+ },
+ pk = ['channel_id', 'org_trust_id'],
+ attribute = 'trust_list',
+ defaultSeverity = 4,
+ ),
Table('rhnChannelFamilyMembers',
fields = {
'channel_id' : DBint(),
diff --git a/backend/server/importlib/channelImport.py b/backend/server/importlib/channelImport.py
index da20eea..58b53c5 100644
--- a/backend/server/importlib/channelImport.py
+++ b/backend/server/importlib/channelImport.py
@@ -129,9 +129,14 @@ class ChannelImport(Import):
# Split the batch into null and non-null parent channels
nullParentBatch = []
nonNullParentBatch = []
+ channel_trusts = []
for channel in self.batch:
if channel.ignored:
continue
+ if channel.has_key('trust_list'):
+ for trust in channel['trust_list']:
+ channel_trusts.append({'channel-label': channel['label'],
+ 'org-id': trust['org_trust_id']})
parent = channel['parent_channel']
if not parent:
nullParentBatch.append(channel)
@@ -193,6 +198,10 @@ class ChannelImport(Import):
self.backend.rollback()
raise
+ # Process the channel trusts
+ if len(channel_trusts) > 0:
+ self.backend.processChannelTrusts(channel_trusts)
+
# Finally go back and add the products, if any
for channel in self.batch:
if channel.ignored:
diff --git a/backend/server/importlib/importLib.py b/backend/server/importlib/importLib.py
index 9ee5155..bcecc02 100644
--- a/backend/server/importlib/importLib.py
+++ b/backend/server/importlib/importLib.py
@@ -191,7 +191,7 @@ class IncompleteSourcePackage(Information):
class ChannelTrust(Information):
attributeTypes = {
- 'org_id' : IntType,
+ 'org_trust_id' : IntType,
}
class Channel(Information):
@@ -210,7 +210,7 @@ class Channel(Information):
'channel_product_id': IntType,
'receiving_updates' : StringType,
'checksum_type' : StringType, # xml dumps >= 3.5
- 'sharing' : StringType,
+ 'channel_access' : StringType,
# XXX Not really useful stuff
'basedir' : StringType,
'product_name' : StringType,
diff --git a/backend/server/importlib/orgImport.py b/backend/server/importlib/orgImport.py
index 3edd473..da0b807 100644
--- a/backend/server/importlib/orgImport.py
+++ b/backend/server/importlib/orgImport.py
@@ -21,12 +21,6 @@ from importLib import Import
# Here is how this is supposed to work:
# 1) Satellite sync creates a bunch of importLib.Org objects.
# All ids are master ids.
-# 2) Always happens: if it does not exist, we create a master record
-# 3) Always happens: if each org has not been synced before,
-# create master org record.
-# 4) Iff we are force-creating local orgs, create any orgs that are
-# not already mapped to local orgs.
-# 5) Iff we have a master org mapped to local org, create org trust records
class OrgImport(Import):
def __init__(self, batch, backend, master_label, create_orgs=False):
@@ -36,26 +30,18 @@ class OrgImport(Import):
self._create_maps()
def _create_maps(self):
- self.org_map = self.backend.lookupOrgMap(self.master_label)
- self.mn_to_mi = {} # master org name to master org id map
- self.mi_to_li = {} # master org id to local org id map
- for org in self.org_map:
- if ('master_org_id' in org.keys()
- and 'master_org_name' in org.keys()
- and org['master_org_id']
- and org['master_org_name']):
- self.mn_to_mi[org['master_org_name']] = org['master_org_id']
- if ('master_org_id' in org.keys()
- and 'local_org_id' in org.keys()
- and org['master_org_id']
- and org['local_org_id']):
- self.mi_to_li[org['master_org_id']] = org['local_org_id']
+ org_map = self.backend.lookupOrgMap(self.master_label)
+ self.mn_to_mi = org_map['master-name-to-master-id']
+ self.mi_to_li = org_map['master-id-to-local-id']
def submit(self):
try:
+ # Always happens: if it does not exist, we create a master record
if not self.backend.lookupMaster(self.master_label):
self.backend.createMaster(self.master_label)
+ # Always happens: if each org has not been synced before,
+ # create master org record.
missing_master_orgs = []
for org in self.batch:
if org['name'] not in self.mn_to_mi.keys():
@@ -64,34 +50,59 @@ class OrgImport(Import):
self.backend.createMasterOrgs(self.master_label,
missing_master_orgs)
+ # Iff we are force-creating local orgs, create any orgs that are
+ # not already mapped to local orgs. If a local org exists with
+ # the same name as the master org, use that instead. Link local
+ # orgs with master orgs.
if self.create_orgs:
orgs_to_create = []
+ orgs_to_link = []
+ update_master_orgs = []
for org in self.batch:
if (org['id'] not in self.mi_to_li.keys()
or not self.mi_to_li[org['id']]):
- orgs_to_create.append(org['name'])
+ local_id = self.backend.lookupOrg(org['name'])
+ if local_id:
+ orgs_to_link.append({
+ 'master_id': org['id'],
+ 'local_id': local_id})
+ else:
+ orgs_to_create.append(org['name'])
if len(orgs_to_create) > 0:
new_org_map = self.backend.createOrgs(orgs_to_create)
- update_master_orgs = []
for org in orgs_to_create:
- update_master_org.append({
+ update_master_orgs.append({
'master_id': self.mn_to_mi[org],
- 'local_org_id': new_org_map[self.mn_to_mi[org]]})
+ 'local_id': new_org_map[org]})
+ update_master_orgs += orgs_to_link
+ if len(update_master_orgs) > 0:
self.backend.updateMasterOrgs(update_master_orgs)
+ # refresh maps after we've just changed things
self._create_maps()
+
+ # Iff we have a master org mapped to local org, create org
+ # trust records
existing_trusts = self.backend.lookupOrgTrusts()
trusts_to_create = []
+ # we need to uniquify in case user has mapped multiple orgs
+ # together
+ hashes = set([])
for org in self.batch:
for trust in org['org_trust_ids']:
if (org['id'] in self.mi_to_li.keys()
- and trust['org_id'] in self.mi_to_li.keys()
- and not (org['id'] in existing_trusts.keys()
- and trust['org_id'] in
- existing_trusts[org['id']])):
- trusts_to_create.append({
- 'org_id': self.mi_to_li[org['id']],
- 'trust': self.mi_to_li[trust['org_id']]})
+ and trust['org_id'] in self.mi_to_li.keys()):
+ my_org_id = self.mi_to_li[org['id']]
+ my_trust_id = self.mi_to_li[trust['org_id']]
+ _hash = (str(self.mi_to_li[org['id']]) +
+ str(self.mi_to_li[trust['org_id']]))
+ if (_hash not in hashes
+ and not (my_org_id in existing_trusts.keys()
+ and my_trust_id in existing_trusts[my_org_id])):
+ trusts_to_create.append({
+ 'org_id': my_org_id,
+ 'trust': my_trust_id})
+ hashes.add(_hash)
if len(trusts_to_create) > 0:
self.backend.createOrgTrusts(trusts_to_create)
except:
commit ad5b1b98c77a4d0235a2cab84de3adcb9321a5dc
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri Jun 14 15:24:45 2013 -0400
ISS Mapping tables shouldn't have ID columns
diff --git a/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql b/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql
index 4a229f5..c98d496 100644
--- a/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql
+++ b/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql
@@ -1,9 +1,6 @@
create table rhnISSSlaveOrgs (
- id number not null constraint rhn_isssorg_id_pk primary key,
slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
created timestamp with local time zone default (current_timestamp) not null
);
-
-create sequence rhn_issslave_org_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
index 3b6b882..3a09fd9 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
@@ -1,8 +1,5 @@
create table rhnISSSlaveOrgs (
- id number not null constraint rhn_isssorg_id_pk primary key,
slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
created timestamp with local time zone default (current_timestamp) not null
);
-
-create sequence rhn_issslave_org_seq;
commit 82da91c79925a7b4ecaeb3336a9e10d12147fa0e
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri Jun 14 15:21:24 2013 -0400
ISS Fix navigation weirdness, add messaging and L10N
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
index 77915ee..ba07512 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
@@ -29,6 +29,8 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
@@ -113,7 +115,7 @@ public class AllowSlaveOrgsAction extends RhnAction {
Map params = makeParamMap(request);
if (sid != null) {
- params.put("sid", sid);
+ params.put(IssSlave.SID, sid);
}
return StrutsDelegate.getInstance().forwardParams(
mapping.findForward("default"), params);
@@ -132,7 +134,18 @@ public class AllowSlaveOrgsAction extends RhnAction {
allowedOrgs.add(anOrg);
}
s.setAllowedOrgs(allowedOrgs);
- return mapping.findForward("success");
+
+ ActionMessages msg = new ActionMessages();
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_allowed_orgs_updated", s.getSlave()));
+ getStrutsDelegate().saveMessages(context.getRequest(), msg);
+
+ Map params = makeParamMap(context.getRequest());
+ if (sid != null) {
+ params.put("sid", sid);
+ }
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("success"), params);
}
protected OrgDto createOrgDto(Long id, String name) {
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
index 37952a4..e979414 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
@@ -85,7 +85,6 @@ public class MapOrgsAction extends RhnAction {
// Get all of our orgs and turn into OrgDtos
List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
-
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI() +
"?mid=" + mid.toString());
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 e7b4566..cb921e3 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
@@ -7052,6 +7052,12 @@ Follow this url to see the full list of inactive systems:
<trans-unit id="org.entitlements.software.proposedwarning">
<source>Warning: Your Proposed {0} allocation provides less entitlements than are currently in use in the {1} organization. Please adjust your proposed allocation to no less then the amount of entitlements currently in use.</source>
</trans-unit>
+ <trans-unit id="api.iss.duplicatemaster">
+ <source>A record for Master satellite {0} already exists</source>
+ </trans-unit>
+ <trans-unit id="api.iss.duplicateslave">
+ <source>A record for Slave satellite {0} already exists</source>
+ </trans-unit>
<trans-unit id="securityErrata">
<source>Security Errata</source>
</trans-unit>
@@ -7355,8 +7361,8 @@ Follow this url to see the full list of inactive systems:
</trans-unit>
<trans-unit id="package.remove.cant.rollback">
<source>One or more of the packages you have selected for removal below are not contained in
- a software channel that this system is subscribed to. If you choose to continue with the removal
- you will not be able to rollback this system to this snapshot or any prior snapshot.</source>
+ a software channel that this system is subscribed to. If you choose to continue with the removal
+ you will not be able to rollback this system to this snapshot or any prior snapshot.</source>
</trans-unit>
<trans-unit id="list.filter.iprange">
<source>Single Ip Address</source>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 8e0a0be..0e7f513 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -362,6 +362,30 @@
<trans-unit id="lookup.jsp.reason3">
<source>You've found an error in our site.</source>
</trans-unit>
+ <trans-unit id="lookup.issslave.title">
+ <source>We're sorry, but the requested slave could not be found</source>
+ </trans-unit>
+ <trans-unit id="lookup.issslave.reason1">
+ <source>No slave with the name {0} is identified on this master.</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmaster.title">
+ <source>We're sorry, but the requested master could not be found</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmaster.reason1">
+ <source>No master with the label {0} is identified to this slave.</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmaster.local.title">
+ <source>We're sorry, but the requested organization could not be found</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmaster.local.reason1">
+ <source>No local organization with the ID {0} exists on this slave.</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmasterorg.title">
+ <source>We're sorry, but the requested organization could not be found</source>
+ </trans-unit>
+ <trans-unit id="lookup.issmasterorg.reason1">
+ <source>No master organization with the ID {0} is identified to this slave.</source>
+ </trans-unit>
</group>
<trans-unit id="emptyspace.jsp">
<source> </source>
@@ -19956,6 +19980,12 @@ given channel.</source>
<trans-unit id="iss.slave.notAll">
<source>Do Not Sync All</source>
</trans-unit>
+ <trans-unit id="iss.slave.num-orgs-allowed">
+ <source>Number of Orgs Exported</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.all-allowed">
+ <source>All Organizations Exported</source>
+ </trans-unit>
<trans-unit id="iss.localorg.name">
<source>Local Organization</source>
</trans-unit>
@@ -20025,6 +20055,9 @@ given channel.</source>
<trans-unit id="message.iss_master_removed">
<source>Master {0} removed</source>
</trans-unit>
+ <trans-unit id="message.iss_slave_allowed_orgs_updated">
+ <source>List of organizations exported to {0} updated</source>
+ </trans-unit>
<group>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/iss/Master.do</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
index e5eac10..31a197a 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
@@ -296,7 +296,8 @@ public class MasterHandler extends BaseHandler {
Org localOrg = OrgFactory.lookupById(localOrgId.longValue());
if (localOrg == null) {
fail("Unable to locate or access Local Organization :" + localOrgId,
- "lookup.issmaster.local.title", "lookup.issmaster.local.reason1");
+ "lookup.issmaster.local.title", "lookup.issmaster.local.reason1",
+ localOrgId.toString());
}
for (IssMasterOrg o : orgs) {
@@ -309,7 +310,8 @@ public class MasterHandler extends BaseHandler {
if (!found) {
fail("Unable to locate or access ISS Master Organization : " + masterOrgId,
- "lookup.issmasterorg.title", "lookup.issmasterorg.reason1");
+ "lookup.issmasterorg.title", "lookup.issmasterorg.reason1",
+ masterOrgId.toString());
}
IssFactory.save(master);
@@ -356,15 +358,15 @@ public class MasterHandler extends BaseHandler {
private void validateExists(IssMaster master, String srchString) {
if (master == null) {
fail("Unable to locate or access ISS Master : " + srchString,
- "lookup.issmaster.title", "lookup.issmaster.reason1");
+ "lookup.issmaster.title", "lookup.issmaster.reason1", srchString);
}
}
- private void fail(String msg, String titleKey, String reasonKey) {
+ private void fail(String msg, String titleKey, String reasonKey, String arg) {
LocalizationService ls = LocalizationService.getInstance();
LookupException e = new LookupException(msg);
e.setLocalizedTitle(ls.getMessage(titleKey));
- e.setLocalizedReason1(ls.getMessage(reasonKey));
+ e.setLocalizedReason1(ls.getMessage(reasonKey, arg));
throw e;
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
index fe99ed5..ebe6d65 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
@@ -207,15 +207,15 @@ public class SlaveHandler extends BaseHandler {
private void validateExists(IssSlave slave, String srchString) {
if (slave == null) {
fail("Unable to locate or access ISS Slave : " + srchString,
- "lookup.issslave.title", "lookup.issslave.reason1");
+ "lookup.issslave.title", "lookup.issslave.reason1", srchString);
}
}
- private void fail(String msg, String titleKey, String reasonKey) {
+ private void fail(String msg, String titleKey, String reasonKey, String arg) {
LocalizationService ls = LocalizationService.getInstance();
LookupException e = new LookupException(msg);
e.setLocalizedTitle(ls.getMessage(titleKey));
- e.setLocalizedReason1(ls.getMessage(reasonKey));
+ e.setLocalizedReason1(ls.getMessage(reasonKey, arg));
throw e;
}
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index e3d48a6..e3941ff 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -331,7 +331,7 @@
<form-property name="submitted" type="java.lang.Boolean" />
</form-bean>
- <form-bean name="systemSearchForm"
+ <form-bean name="systemSearchForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_string" type="java.lang.String" />
<form-property name="view_mode" type="java.lang.String" />
@@ -5227,7 +5227,7 @@
<forward name="default"
path="/WEB-INF/pages/admin/iss/editslave.jsp"/>
<forward name="success"
- path="/admin/iss/Master.do" redirect="true"/>
+ path="/admin/iss/EditSlave.do" redirect="true"/>
</action>
<action path="/admin/iss/UpdateSlave"
@@ -5240,7 +5240,7 @@
<forward name="default"
path="/WEB-INF/pages/admin/iss/editslave.jsp"/>
<forward name="success"
- path="/admin/iss/Master.do" redirect="true"/>
+ path="/admin/iss/EditSlave.do" redirect="true"/>
</action>
<action path="/admin/iss/AllowSlaveOrgs"
@@ -5253,7 +5253,7 @@
<forward name="default"
path="/admin/iss/EditSlave.do" redirect="true"/>
<forward name="success"
- path="/admin/iss/Master.do" redirect="true"/>
+ path="/admin/iss/EditSlave.do" redirect="true"/>
</action>
<action path="/admin/iss/RemoveSlaveConfirm"
commit a6cc5d5cc19929a2c2bdafca14b13808c7e11036
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri Jun 14 15:19:46 2013 -0400
ISS Fix minor UI ordering weirdness
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
index 4a67afc..aa616e7 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
@@ -32,7 +32,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</query>
<query name="IssMaster.lookupAll">
- <![CDATA[from com.redhat.rhn.domain.iss.IssMaster]]>
+ <![CDATA[from com.redhat.rhn.domain.iss.IssMaster as m order by m.label]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
index b22d941..faf13d0 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -37,7 +37,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</query>
<query name="IssSlave.lookupAll">
- <![CDATA[from com.redhat.rhn.domain.iss.IssSlave]]>
+ <![CDATA[from com.redhat.rhn.domain.iss.IssSlave as s order by s.slave]]>
</query>
</hibernate-mapping>
commit 8354ac8222d3731b581e9e9fbe72ba6cf565ddd2
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri Jun 14 15:19:12 2013 -0400
ISS: Add num-orgs-allowed-to per slave on master.jsp
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index 0e39a77..43c5379 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -177,6 +177,14 @@ public class IssSlave extends BaseDto {
}
/**
+ * How many of our orgs are allowed to be exported to this slave?
+ * @return num allowed orgs
+ */
+ public int getNumAllowedOrgs() {
+ return getAllowedOrgs().size();
+ }
+
+ /**
* @return hashCode based on id
*/
public int hashCode() {
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
index ca93a0a..dce668f 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -71,6 +71,18 @@
title="<bean:message key="iss.slave.notAll"/>" />
</c:if>
</rl:column>
+ <rl:column bound="false" headerkey="iss.slave.num-orgs-allowed">
+ <c:if test="${current.enabled != 'Y'}">
+ <bean:message key="iss.slave.disabled"/>
+ </c:if>
+ <c:if test="${current.enabled == 'Y' && current.allowAllOrgs == 'Y'}">
+ <bean:message key="iss.slave.all-allowed"/>
+ </c:if>
+ <c:if test="${current.enabled == 'Y' && current.allowAllOrgs != 'Y'}">
+ <c:out value="${current.numAllowedOrgs}" />
+ </c:if>
+ </rl:column>
+
</rl:list>
<c:if test="${not empty requestScope.all}">
<div align="right">
commit 581dc7d013c1887db21929319590cb6de65f4d56
Author: Stephen Herr <sherr(a)redhat.com>
Date: Thu Jun 13 17:13:05 2013 -0400
Implemented sat-sync options and db work for org / org trusts
diff --git a/backend/satellite_tools/diskImportLib.py b/backend/satellite_tools/diskImportLib.py
index f8e0ee6..7e72767 100644
--- a/backend/satellite_tools/diskImportLib.py
+++ b/backend/satellite_tools/diskImportLib.py
@@ -62,8 +62,22 @@ class diskImportLibContainer:
importer.run()
self.batch = []
-class OrgContainer(diskImportLibContainer, xmlSource.OrgContainer):
+class OrgContainer(xmlSource.OrgContainer):
importer_class = orgImport.OrgImport
+ def __init__(self):
+ xmlSource.OrgContainer.__init__(self)
+ self.master_label = None
+ self.create_orgs = False
+
+ def set_master_and_create_org_args(self, master, create_orgs):
+ self.master_label = master
+ self.create_orgs = create_orgs
+
+ def endContainerCallback(self):
+ importer = self.importer_class(self.batch, get_backend(),
+ self.master_label, self.create_orgs)
+ importer.run()
+ self.batch = []
class ProductNamesContainer(diskImportLibContainer, xmlSource.ProductNamesContainer):
importer_class = productNamesImport.ProductNamesImport
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index 21a9509..e1b34a9 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -109,9 +109,9 @@ class Runner:
# The step hierarchy. We need access to it both for command line
# processing and for the actions themselves
step_hierarchy = [
+ 'orgs',
'channel-families',
'arches',
- 'orgs',
'channels',
'short',
'download-packages',
@@ -390,6 +390,8 @@ class Syncer:
self.sslYN = not OPTIONS.no_ssl
self._systemidPath = OPTIONS.systemid or _DEFAULT_SYSTEMID_PATH
self._batch_size = OPTIONS.batch_size
+ self.master_label = OPTIONS.master
+ self.create_orgs = OPTIONS.create_missing_orgs
self.xml_dump_version = OPTIONS.dump_version or str(constants.PROTOCOL_VERSION)
self.check_rpms = check_rpms
self.keep_rpms = OPTIONS.keep_rpms
@@ -398,7 +400,8 @@ class Syncer:
self._channel_req = None
self._channel_collection = sync_handlers.ChannelCollection()
- self.containerHandler = sync_handlers.ContainerHandler()
+ self.containerHandler = sync_handlers.ContainerHandler(
+ self.master_label, self.create_orgs)
# instantiated in self.initialize()
self.xmlDataServer = None
@@ -2106,8 +2109,10 @@ def processCommandline():
help=_('alternative email address(es) for sync output (--email option)')),
Option( '--keep-rpms', action='store_true',
help=_('do not remove rpms when importing from local dump')),
+ Option( '--master', action='store',
+ help=_('the fully qualified doman name of the master Satellite. Valid with --mount-point only. Required if you want to import org data and channel permissions.')),
Option( '--create-missing-orgs', action='store_true',
- help=_('create orgs on this Satellite to match orgs exported by the master Satellite (use with --mount-point or --iss-parent only)')),
+ help=_('create orgs on this Satellite to match orgs exported by the master Satellite if local orgs have not already been mapped to the master orgs (use with --mount-point or --iss-parent only)')),
# DEFERRED:
#Option( '--source-packages', action='store_true', help='sync source rpms/metadata as well.'),
@@ -2177,6 +2182,18 @@ def processCommandline():
CFG.show()
sys.exit(0)
+ if OPTIONS.master:
+ if not OPTIONS.mount_point:
+ mst = _("ERROR: The --master option is only valid with the --mount-point option")
+ log2stderr(-1, msg, cleanYN=1)
+ sys.exit(29)
+ elif CFG.ISS_PARENT:
+ OPTIONS.master = CFG.ISS_PARENT
+
+ if OPTIONS.create_missing_orgs and not OPTIONS.master:
+ msg = _("ERROR: Org syncing is only available during an Inter Satellite Sync or import of a channel dump created by another Satellite with --master specified.")
+ log2stderr(-1, msg, cleanYN=1)
+ sys.exit(28)
if OPTIONS.orgid:
# verify if its a valid org
@@ -2252,7 +2269,6 @@ def processCommandline():
"force_all_packages" : 'force-all-packages',
"force_all_errata" : 'force-all-errata',
'no_ssl' : 'no-ssl',
- "create_missing_orgs": 'create-missing-orgs',
}
for oa in otherActions.keys():
@@ -2261,12 +2277,6 @@ def processCommandline():
else:
actionDict[otherActions[oa]] = 0
- if actionDict['create-missing-orgs'] and not (CFG.ISS_PARENT
- or OPTIONS.mount_point):
- msg = _("ERROR: Org syncing is only available during an Inter Satellite Sync or import of a channel dump created by another Satellite.")
- log2stderr(-1, msg, cleanYN=1)
- sys.exit(28)
-
if actionDict['no-kickstarts']:
actionDict['kickstarts'] = 0
@@ -2290,6 +2300,9 @@ def processCommandline():
#if actionDict['no-srpms']:
actionDict['srpms'] = 0
+ if not OPTIONS.master:
+ actionDict['orgs'] = 0
+
if OPTIONS.batch_size:
try:
OPTIONS.batch_size = int(OPTIONS.batch_size)
@@ -2351,7 +2364,8 @@ def processCommandline():
_(" 25 - no such directory"),
_(" 26 - mount_point does not exist"),
_(" 27 - No such org"),
- _(" 28 - error: --create-missing-orgs requires --iss-parent"),]
+ _(" 28 - error: --create-missing-orgs requires --iss-parent or --mount-point"),
+ _(" 29 - error: --master is only valid with --mount-point"),]
log(-1, msg, 1, 1, sys.stderr)
sys.exit(0)
diff --git a/backend/satellite_tools/sync_handlers.py b/backend/satellite_tools/sync_handlers.py
index 87c8bcd..2c40867 100644
--- a/backend/satellite_tools/sync_handlers.py
+++ b/backend/satellite_tools/sync_handlers.py
@@ -414,7 +414,7 @@ class ContainerHandler:
"""generate and set container XML handlers"""
- def __init__(self):
+ def __init__(self, master_label, create_orgs=False):
self.handler = xmlSource.SatelliteDispatchHandler()
# arch containers
self.setServerArchContainer()
@@ -428,7 +428,7 @@ class ContainerHandler:
# all other containers
self.setChannelFamilyContainer()
self.setProductNamesContainer()
- self.setOrgContainer()
+ self.setOrgContainer(master_label, create_orgs)
def __del__(self):
self.handler.close() # kill the circular reference.
@@ -471,8 +471,10 @@ class ContainerHandler:
self.handler.set_container(ChannelFamilyContainer())
def setProductNamesContainer(self):
self.handler.set_container(diskImportLib.ProductNamesContainer())
- def setOrgContainer(self):
+ def setOrgContainer(self, master_label, create_orgs):
self.handler.set_container(diskImportLib.OrgContainer())
+ self.handler.get_container('rhn-orgs').set_master_and_create_org_args(
+ master_label, create_orgs)
#
# more containers
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py
index 66dcf84..fadf257 100644
--- a/backend/server/importlib/backend.py
+++ b/backend/server/importlib/backend.py
@@ -270,12 +270,104 @@ class Backend:
raise ValueError, "No user is created"
return rows[0]['id']
+ def lookupMaster(self, master_label):
+ # Returns the master record (if it exists)
+ sql = "select * from rhnISSMaster where label = :label"
+ h = self.dbmodule.prepare(sql)
+ h.execute(label=master_label)
+ return h.fetchone_dict()
+
+ def createMaster(self, master_label):
+ # Creates a master record with label master_label
+ sql = """
+ insert into rhnISSMaster (id, label)
+ values (sequence_nextval('rhn_issmaster_seq'), :label)
+ """
+ h = self.dbmodule.prepare(sql)
+ h.execute(label=master_label)
+
+ def createMasterOrgs(self, master, orgs):
+ # Create master org records
+ insert = [[],[],[]]
+ for org in orgs:
+ insert[0].append(master)
+ insert[1].append(org['id'])
+ insert[2].append(org['name'])
+ sql = """
+ insert into rhnISSMasterOrgs
+ (id, master_id, master_org_id, master_org_name)
+ values (sequence_nextval('rhn_issmasterorgs_seq'),
+ (select id from rhnISSMaster where label = :label),
+ :id, :name)
+ """
+ h = self.dbmodule.prepare(sql)
+ h.executemany(label=insert[0], id=insert[1], name=insert[2])
+
+ def createOrgs(self, orgs):
+ # Create local org records
+ sql = """
+ insert into web_customer (id, name)
+ values (sequence_nextval('web_customer_id_seq'), :name)
+ """
+ h = self.dbmodule.prepare(sql)
+ h.executemany(name=orgs)
+ sql = "select id, name from web_customer"
+ h = self.dbmodule.prepare(sql)
+ h.execute()
+ rows = h.fetchall_dict()
+ ret = {}
+ for row in rows:
+ ret[row['name']] = row['id']
+ return ret
+
+ def updateMasterOrgs(self, master_orgs):
+ # Update the master org to local org mapping
+ insert = [[],[]]
+ for org in master_orgs:
+ insert[0] = org['master_id']
+ insert[1] = org['local_id']
+ sql = """
+ update rhnISSMasterOrgs
+ set local_org_id=:local
+ where master_id=:master
+ """
+ h = self.dbmodule.prepare(sql)
+ h.executemany(local=insert[0], master=insert[1])
+
+ def lookupOrgTrusts(self):
+ # Return a hash of org trusts
+ sql = "select org_id, org_trust_id from rhnTrustedOrgs"
+ h = self.dbmodule.prepare(sql)
+ h.execute()
+ rows = h.fetchall_dict()
+ ret = {}
+ for row in rows:
+ if row['org_id'] not in ret.keys():
+ ret[row['org_id']] = []
+ ret[row['org_id']].append(row['org_trust_id'])
+ return ret
+
+ def createOrgTrusts(self, trusts):
+ # Create org trusts
+ insert = [[],[]]
+ for trust in trusts:
+ insert[0].append(trust['org_id'])
+ insert[1].append(trust['trust'])
+ sql = """
+ insert into rhnTrustedOrgs (org_id, org_trust_id)
+ values (:id, :trust)
+ """
+ h = self.dbmodule.prepare(sql)
+ h.executemany(id=insert[0], trust=insert[1])
+
def lookupOrgMap(self, master_label):
- sql = "select imo.master_org_id, imo.master_org_name, imo.local_org_id
- from rhnISSMasterOrgs imo,
- rhnISSMaster im,
- where im.id = imo.master_id
- and im.label = :master_label"
+ sql = """
+ select imo.master_org_id, imo.master_org_name, imo.local_org_id
+ from rhnISSMasterOrgs imo,
+ rhnISSMaster im
+ where im.id = imo.master_id
+ and im.label = :master_label
+ """
h = self.dbmodule.prepare(sql)
h.execute(master_label=master_label)
rows = h.fetchall_dict()
diff --git a/backend/server/importlib/importLib.py b/backend/server/importlib/importLib.py
index c86ae39..9ee5155 100644
--- a/backend/server/importlib/importLib.py
+++ b/backend/server/importlib/importLib.py
@@ -189,6 +189,11 @@ class IncompleteSourcePackage(Information):
'last_modified' : DateType,
}
+class ChannelTrust(Information):
+ attributeTypes = {
+ 'org_id' : IntType,
+ }
+
class Channel(Information):
attributeTypes = {
'label' : StringType,
@@ -227,11 +232,6 @@ class Channel(Information):
'export-start-date' : StringType,
}
-class ChannelTrust(Information):
- attributeTypes = {
- 'org_id' : IntType,
- }
-
class OrgTrust(Information):
attributeTypes = {
'org_id' : IntType,
@@ -244,15 +244,6 @@ class Org(Information):
'org_trust_ids' : [OrgTrust],
}
-class MasterOrg(Information):
- attributeTypes = {
- 'master_id' : IntType,
- 'master_org_id' : IntType,
- 'master_org_name' : StringType,
- 'local_org_id' : IntType,
- }
-
-
class File(Item):
attributeTypes = {
'name' : StringType,
diff --git a/backend/server/importlib/orgImport.py b/backend/server/importlib/orgImport.py
new file mode 100644
index 0000000..3edd473
--- /dev/null
+++ b/backend/server/importlib/orgImport.py
@@ -0,0 +1,100 @@
+#
+# Copyright (c) 2013 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.
+#
+#
+# Org import process
+#
+
+from importLib import Import
+
+# Here is how this is supposed to work:
+# 1) Satellite sync creates a bunch of importLib.Org objects.
+# All ids are master ids.
+# 2) Always happens: if it does not exist, we create a master record
+# 3) Always happens: if each org has not been synced before,
+# create master org record.
+# 4) Iff we are force-creating local orgs, create any orgs that are
+# not already mapped to local orgs.
+# 5) Iff we have a master org mapped to local org, create org trust records
+
+class OrgImport(Import):
+ def __init__(self, batch, backend, master_label, create_orgs=False):
+ Import.__init__(self, batch, backend)
+ self.master_label = master_label
+ self.create_orgs = create_orgs
+ self._create_maps()
+
+ def _create_maps(self):
+ self.org_map = self.backend.lookupOrgMap(self.master_label)
+ self.mn_to_mi = {} # master org name to master org id map
+ self.mi_to_li = {} # master org id to local org id map
+ for org in self.org_map:
+ if ('master_org_id' in org.keys()
+ and 'master_org_name' in org.keys()
+ and org['master_org_id']
+ and org['master_org_name']):
+ self.mn_to_mi[org['master_org_name']] = org['master_org_id']
+ if ('master_org_id' in org.keys()
+ and 'local_org_id' in org.keys()
+ and org['master_org_id']
+ and org['local_org_id']):
+ self.mi_to_li[org['master_org_id']] = org['local_org_id']
+
+ def submit(self):
+ try:
+ if not self.backend.lookupMaster(self.master_label):
+ self.backend.createMaster(self.master_label)
+
+ missing_master_orgs = []
+ for org in self.batch:
+ if org['name'] not in self.mn_to_mi.keys():
+ missing_master_orgs.append(org)
+ if len(missing_master_orgs) > 0:
+ self.backend.createMasterOrgs(self.master_label,
+ missing_master_orgs)
+
+ if self.create_orgs:
+ orgs_to_create = []
+ for org in self.batch:
+ if (org['id'] not in self.mi_to_li.keys()
+ or not self.mi_to_li[org['id']]):
+ orgs_to_create.append(org['name'])
+ if len(orgs_to_create) > 0:
+ new_org_map = self.backend.createOrgs(orgs_to_create)
+ update_master_orgs = []
+ for org in orgs_to_create:
+ update_master_org.append({
+ 'master_id': self.mn_to_mi[org],
+ 'local_org_id': new_org_map[self.mn_to_mi[org]]})
+ self.backend.updateMasterOrgs(update_master_orgs)
+
+ self._create_maps()
+ existing_trusts = self.backend.lookupOrgTrusts()
+ trusts_to_create = []
+ for org in self.batch:
+ for trust in org['org_trust_ids']:
+ if (org['id'] in self.mi_to_li.keys()
+ and trust['org_id'] in self.mi_to_li.keys()
+ and not (org['id'] in existing_trusts.keys()
+ and trust['org_id'] in
+ existing_trusts[org['id']])):
+ trusts_to_create.append({
+ 'org_id': self.mi_to_li[org['id']],
+ 'trust': self.mi_to_li[trust['org_id']]})
+ if len(trusts_to_create) > 0:
+ self.backend.createOrgTrusts(trusts_to_create)
+ except:
+ self.backend.rollback()
+ raise
+ self.backend.commit()
commit 7675a7063e381bf7af983d5b7180952a73bc39dd
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu Jun 13 17:04:38 2013 -0400
ISS: Add IssSlave API calls
Fix slave-to-allowed-orgs mapping
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
index 2990efe..5eaf9ad 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
@@ -20,7 +20,6 @@ import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
-import org.hibernate.Query;
import com.redhat.rhn.common.hibernate.HibernateFactory;
@@ -59,6 +58,18 @@ public class IssFactory extends HibernateFactory {
}
/**
+ * Lookup a IssSlave by its name
+ * @param inName the slave to search for
+ * @return the IssSlave found
+ */
+ public static IssSlave lookupSlaveByName(String inName) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("slave", inName);
+ return (IssSlave) singleton.lookupObjectByNamedQuery(
+ "IssSlave.findByName", params);
+ }
+
+ /**
* List all IssSlaves for this Master
* @return list of all the slaves
*/
@@ -68,18 +79,6 @@ public class IssFactory extends HibernateFactory {
"IssSlave.lookupAll", params);
}
- /**
- * Remove all entries mapping local-orgs to specified slave
- * @param sid ID of slave whose entries we're removing
- */
- public static void clearMapsForSlave(Long sid) {
- Map<String, Long> params = new HashMap<String, Long>();
- params.put("sid", sid);
- Query q = HibernateFactory.getSession().getNamedQuery("IssSlaveOrgs.removeAll");
- q.setParameter("sid", sid);
- q.executeUpdate();
- }
-
/***
* IssMaster helpers
***/
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
index 16d1333b..b22d941 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -17,9 +17,14 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
<property name="modified" column="MODIFIED" type="timestamp" insert="false" update="false"/>
- <set name="mappedOrgs" table="rhnissslaveorgs">
- <key column="slave_id" />
- <many-to-many class="com.redhat.rhn.domain.org.Org" column="org_id"/>
+ <set name="allowedOrgs"
+ table="rhnissslaveorgs"
+ inverse="false"
+ lazy="true"
+ fetch="select"
+ cascade="all">
+ <key column="slave_id" not-null="true"/>
+ <many-to-many column="org_id" class="com.redhat.rhn.domain.org.Org" />
</set>
</class>
@@ -27,6 +32,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[from com.redhat.rhn.domain.iss.IssSlave as s where s.id = :id]]>
</query>
+ <query name="IssSlave.findByName">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssSlave as s where s.slave = :slave]]>
+ </query>
+
<query name="IssSlave.lookupAll">
<![CDATA[from com.redhat.rhn.domain.iss.IssSlave]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index 02aa85c..0e39a77 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -43,7 +43,7 @@ public class IssSlave extends BaseDto {
private String slave;
private String enabled;
private String allowAllOrgs;
- private Set<Org> mappedOrgs;
+ private Set<Org> allowedOrgs;
private Date created;
private Date modified;
@@ -164,16 +164,53 @@ public class IssSlave extends BaseDto {
* Getter for all orgs allowed to be visible to this slave
* @return list of currently-mapped orgs
*/
- public Set<Org> getMappedOrgs() {
- return mappedOrgs;
+ public Set<Org> getAllowedOrgs() {
+ return allowedOrgs;
}
/**
- * Setter for mapped orgs
- * @param mappedOrgsIn get current mappedOrgs
+ * Setter for allowed orgs
+ * @param allowedOrgsIn get current orgs we can export to this slave
*/
- public void setMappedOrgs(Set<Org> mappedOrgsIn) {
- this.mappedOrgs = mappedOrgsIn;
+ public void setAllowedOrgs(Set<Org> allowedOrgsIn) {
+ this.allowedOrgs = allowedOrgsIn;
+ }
+
+ /**
+ * @return hashCode based on id
+ */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ /**
+ * Equality based on id
+ * @param obj The Thing we're comparing against
+ * @return true if obj.Id equal our.Id, false else
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ IssSlave other = (IssSlave) obj;
+ if (id == null) {
+ if (other.id != null) {
+ return false;
+ }
+ }
+ else if (!id.equals(other.id)) {
+ return false;
+ }
+ return true;
}
}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml
deleted file mode 100644
index 1c4b195..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping
-PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<hibernate-mapping>
- <class name="com.redhat.rhn.domain.iss.IssSlaveOrgs"
- table="rhnissslaveorgs" >
- <id name="id" type="long" column="ID">
- <meta attribute="scope-set">protected</meta>
- <generator class="sequence">
- <param name="sequence">rhn_issslave_org_seq</param>
- </generator>
- </id>
- <property name="slaveId" column="SLAVE_ID" type="long" />
- <property name="orgId" column="ORG_ID" type="long" />
- <property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
- </class>
-
- <query name="IssSlaveOrgs.removeAll">
- <![CDATA[delete com.redhat.rhn.domain.iss.IssSlaveOrgs so where so.slaveId = :sid]]>
- </query>
-
-</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java
deleted file mode 100644
index f4415ef..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (c) 2008--2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.domain.iss;
-
-import java.util.Date;
-
-import com.redhat.rhn.domain.org.Org;
-
-/**
- * IssSlaveOrgs - Class representation of the table rhnissslaveorgs.
- * @version $Rev: 1 $
- */
-public class IssSlaveOrgs {
-
- private Long id;
- private Long slaveId;
- private Long orgId;
- private Org org;
- private IssSlave slave;
-
- private Date created;
- /**
- * Getter for id
- * @return Long to get
- */
- public Long getId() {
- return this.id;
- }
-
- /**
- * Setter for id
- * @param idIn to set
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * Getter for slaveId
- * @return Long to get
- */
- public Long getSlaveId() {
- return this.slaveId;
- }
-
- /**
- * Setter for slaveId
- * @param slaveIdIn to set
- */
- public void setSlaveId(Long slaveIdIn) {
- this.slaveId = slaveIdIn;
- }
-
- /**
- * Getter for orgId
- * @return Long to get
- */
- public Long getOrgId() {
- return this.orgId;
- }
-
- /**
- * Setter for orgId
- * @param orgIdIn to set
- */
- public void setOrgId(Long orgIdIn) {
- this.orgId = orgIdIn;
- }
-
- /**
- * Getter for created
- * @return Date to get
- */
- public Date getCreated() {
- return this.created;
- }
-
- /**
- * Setter for created
- * @param createdIn to set
- */
- public void setCreated(Date createdIn) {
- this.created = createdIn;
- }
-
- /**
- * Get associated Org
- * @return Org associated w/the specified slave
- */
- public Org getOrg() {
- return org;
- }
-
- /**
- * Set associated Org
- * @param orgIn org to associate to specified slave
- */
- public void setOrg(Org orgIn) {
- this.org = orgIn;
- }
-
- /**
- * Get slave specified by this entry
- * @return the salve
- */
- public IssSlave getSlave() {
- return slave;
- }
-
- /**
- * Set the slave specified by this entry
- * @param slaveIn specified slave
- */
- public void setSlave(IssSlave slaveIn) {
- this.slave = slaveIn;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml b/java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml
index db1bc1d..c9d2a25 100644
--- a/java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/org/Org.hbm.xml
@@ -55,9 +55,18 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<many-to-many column="org_trust_id" outer-join="true" class="com.redhat.rhn.domain.org.Org" />
</set>
+ <set name="allowedToSlaves"
+ table="rhnissslaveorgs"
+ inverse="true"
+ lazy="true"
+ fetch="select">
+ <key column="org_id" />
+ <many-to-many column="slave_id" class="com.redhat.rhn.domain.iss.IssSlave" />
+ </set>
+
<join table="rhnRegTokenOrgDefault" optional="true">
- <key column="org_id"/>
- <many-to-one name="token" column="reg_token_id" not-null="true" unique="true"/>
+ <key column="org_id"/>
+ <many-to-one name="token" column="reg_token_id" not-null="true" unique="true"/>
</join>
</class>
@@ -80,7 +89,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
WHERE cfp.org_id = :org_id]]>
<return alias="c" class="com.redhat.rhn.domain.channel.Channel" />
</sql-query>
- <sql-query name="Org.numOfOrgAdmins">
+ <sql-query name="Org.numOfOrgAdmins">
<return-scalar type="long" column="user_id"/>
SELECT ugm.user_id
FROM rhnUserGroupMembers ugm
@@ -92,7 +101,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
AND exists (select wc.id
from rhnwebcontactenabled wc
where wc.id = ugm.user_id)
- ORDER BY ugm.user_id
+ ORDER BY ugm.user_id
</sql-query>
<sql-query name="Org.numOfActiveUsers">
<return-scalar type="long" column="users"/>
diff --git a/java/code/src/com/redhat/rhn/domain/org/Org.java b/java/code/src/com/redhat/rhn/domain/org/Org.java
index ad7975d..005e9d0 100644
--- a/java/code/src/com/redhat/rhn/domain/org/Org.java
+++ b/java/code/src/com/redhat/rhn/domain/org/Org.java
@@ -25,6 +25,7 @@ import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelFamily;
import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
import com.redhat.rhn.domain.entitlement.Entitlement;
+import com.redhat.rhn.domain.iss.IssSlave;
import com.redhat.rhn.domain.org.usergroup.UserGroup;
import com.redhat.rhn.domain.org.usergroup.UserGroupFactory;
import com.redhat.rhn.domain.role.Role;
@@ -72,6 +73,7 @@ public class Org extends BaseDomainHelper {
private Set ownedChannels;
private Set customDataKeys;
private Set<Org> trustedOrgs;
+ private Set<IssSlave> allowedToSlaves;
private Token token;
private Set monitoringScouts;
@@ -592,6 +594,22 @@ public class Org extends BaseDomainHelper {
}
/**
+ * Gets the list of Slaves we're specifically allowed to be exported to
+ * @return A set of IssSlaves
+ */
+ public Set<IssSlave> getAllowedToSlaves() {
+ return allowedToSlaves;
+ }
+
+ /**
+ * Set up slaves we can be exported to
+ * @param inSlaves allowed slaves
+ */
+ protected void setAllowedToSlaves(Set<IssSlave> inSlaves) {
+ allowedToSlaves = inSlaves;
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
index e0cd0ae..77915ee 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
@@ -18,6 +18,7 @@ package com.redhat.rhn.frontend.action.iss;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -33,7 +34,6 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.iss.IssSlaveOrgs;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.dto.OrgDto;
@@ -73,7 +73,7 @@ public class AllowSlaveOrgsAction extends RhnAction {
request.setAttribute(ListTagHelper.PARENT_URL,
"/rhn/admin/iss/EditSlave.do?sid=" + sid);
request.setAttribute(IssSlave.SID, sid);
-
+ IssSlave theSlave = IssFactory.lookupSlaveById(sid);
Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
.getLabel());
@@ -88,7 +88,8 @@ public class AllowSlaveOrgsAction extends RhnAction {
// Before creating entries for whatever selection we have,
// DELETE THE OLD ONES - less error-prone than trying to do
// set-theoretic operations based on set-diffs
- IssFactory.clearMapsForSlave(sid);
+ //IssFactory.clearMapsForSlave(sid);
+ theSlave.setAllowedOrgs(new HashSet<Org>());
helper.updateSet(sessionSet, LIST_NAME);
return handleDispatchAction(mapping, requestContext, sid, sessionSet);
}
@@ -123,14 +124,14 @@ public class AllowSlaveOrgsAction extends RhnAction {
Long sid,
Set sessionSet) {
Set<String> soids = (Set<String>) sessionSet;
+ Set<Org> allowedOrgs = new HashSet<Org>();
+ IssSlave s = IssFactory.lookupSlaveById(sid);
for (String soid : soids) {
- // Make IssSlaveOrgs entry for this slave/orgid pair
Long oid = Long.parseLong(soid);
- IssSlaveOrgs iso = new IssSlaveOrgs();
- iso.setOrgId(oid);
- iso.setSlaveId(sid);
- IssFactory.save(iso);
+ Org anOrg = OrgFactory.lookupById(oid);
+ allowedOrgs.add(anOrg);
}
+ s.setAllowedOrgs(allowedOrgs);
return mapping.findForward("success");
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
index ac9b131..3817187 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
@@ -90,7 +90,7 @@ public class EditSlaveSetupAction extends RhnAction {
IssSlave theSlave = IssFactory.lookupSlaveById(sid);
Set<Long> mappedOrgs = mappedLocalOrgs(
- new ArrayList<Org>(theSlave.getMappedOrgs()));
+ new ArrayList<Org>(theSlave.getAllowedOrgs()));
List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateMasterException.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateMasterException.java
new file mode 100644
index 0000000..08b36be
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateMasterException.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2013 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;
+
+import com.redhat.rhn.FaultException;
+import com.redhat.rhn.common.localization.LocalizationService;
+
+/**
+ * ISS Master we're trying to create already exists
+ *
+ * @version $Rev$
+ */
+public class IssDuplicateMasterException extends FaultException {
+
+ private static final long serialVersionUID = -272385595779582534L;
+
+ /**
+ * Tried to create a master when one already exists w/a given label
+ * @param label label we tried to use
+ */
+ public IssDuplicateMasterException(String label) {
+ super(3000, "duplicateMaster", LocalizationService.getInstance().
+ getMessage("api.iss.duplicatemaster", label));
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateSlaveException.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateSlaveException.java
new file mode 100644
index 0000000..fd73d19
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/IssDuplicateSlaveException.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2013 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;
+
+import com.redhat.rhn.FaultException;
+import com.redhat.rhn.common.localization.LocalizationService;
+
+/**
+ * ISS Slave we're trying to create already exists
+ *
+ * @version $Rev$
+ */
+public class IssDuplicateSlaveException extends FaultException {
+
+ private static final long serialVersionUID = -736057155929214695L;
+
+ /**
+ * Tried to create a slave when one already exists w/a given name
+ * @param inSlave label we tried to use
+ */
+ public IssDuplicateSlaveException(String inSlave) {
+ super(3001, "duplicateSlave", LocalizationService.getInstance().
+ getMessage("api.iss.duplicateslave", inSlave));
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt b/java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt
index 6c3869e..aabde55 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/exception_ranges.txt
@@ -23,4 +23,5 @@ Kickstart Exceptions 2750-2799
Misc Exceptions 2800-2850
Org Exceptions 2850-2900
SearchServer Exceptions 2901-2949
-Authentication Exceptions 2950-2959
+Authentication Exceptions 2950-2999
+ISS Exceptions 3000-3049
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
index 3a688ca..400647d 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
@@ -41,4 +41,5 @@
<template name="taskomatic" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticHandler" />
<template name="taskomatic.org" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticOrgHandler" />
<template name="sync.master" classname="com.redhat.rhn.frontend.xmlrpc.sync.master.MasterHandler" />
+ <template name="sync.slave" classname="com.redhat.rhn.frontend.xmlrpc.sync.slave.SlaveHandler" />
</factory>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssSlaveSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssSlaveSerializer.java
new file mode 100644
index 0000000..f37d85f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssSlaveSerializer.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2009--2011 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.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+/**
+ * IssSlaveSerializer
+ * @version $Rev$
+ *
+ * @xmlrpc.doc
+ * #struct("IssSlave info")
+ * #prop("int", "id")
+ * #prop("string", "slave")
+ * #prop("boolean", "enabled")
+ * #prop("boolean", "allowAllOrgs")
+ * #struct_end()
+ */
+public class IssSlaveSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return IssSlave.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object obj, Writer writer, XmlRpcSerializer serializer)
+ throws XmlRpcException, IOException {
+ SerializerHelper helper = new SerializerHelper(serializer);
+
+ IssSlave slave = (IssSlave) obj;
+ helper.add("id", slave.getId());
+ helper.add("label", slave.getSlave());
+ helper.add("enabled", "Y".equals(slave.getEnabled()));
+ helper.add("allowAllOrgs", "Y".equals(slave.getAllowAllOrgs()));
+ helper.writeTo(writer);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
index 71447ea..c0cee29 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
@@ -122,6 +122,7 @@ public class SerializerRegistry {
SERIALIZER_CLASSES.add(XccdfRuleResultDtoSerializer.class);
SERIALIZER_CLASSES.add(IssMasterSerializer.class);
SERIALIZER_CLASSES.add(IssMasterOrgSerializer.class);
+ SERIALIZER_CLASSES.add(IssSlaveSerializer.class);
}
/**
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
index 6184308..e5eac10 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
@@ -31,6 +31,7 @@ import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
+import com.redhat.rhn.frontend.xmlrpc.IssDuplicateMasterException;
/**
* MasterHandler
@@ -74,6 +75,9 @@ public class MasterHandler extends BaseHandler {
public IssMaster create(String sessionKey, String label) {
User u = getLoggedInUser(sessionKey);
ensureSatAdmin(u);
+ if (IssFactory.lookupMasterByLabel(label) != null) {
+ throw new IssDuplicateMasterException(label);
+ }
IssMaster master = new IssMaster();
master.setLabel(label);
IssFactory.save(master);
@@ -158,6 +162,24 @@ public class MasterHandler extends BaseHandler {
}
/**
+ * Get all the masters this slave knows about
+ * @param sessionKey User's session key.
+ * @return list of all the IssMasters we know about
+ *
+ * @xmlrpc.doc Get all the masters this slave knows about
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.returntype
+ * #array()
+ * $IssMasterSerializer
+ * #array_end()
+ */
+ public List<IssMaster> getMasters(String sessionKey) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ return IssFactory.listAllMasters();
+ }
+
+ /**
* List all organizations the specified Master has exported to this Slave
*
* @param sessionKey User's session key.
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
new file mode 100644
index 0000000..fe99ed5
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/SlaveHandler.java
@@ -0,0 +1,230 @@
+/**
+ * Copyright (c) 2013 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.sync.slave;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.redhat.rhn.common.hibernate.LookupException;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
+import com.redhat.rhn.frontend.xmlrpc.IssDuplicateSlaveException;
+
+/**
+ * SlaveHandler
+ *
+ * @version $Rev$
+ *
+ * @xmlrpc.namespace sync.slave
+ * @xmlrpc.doc Contains methods to set up information about allowed-"slaves", for use
+ * on the "master" side of ISS
+ */
+public class SlaveHandler extends BaseHandler {
+
+ /**
+ * Create a new Slave, known to this Master.
+ * @param sessionKey User's session key.
+ * @param inSlave Slave's fully-qualified domain name
+ * @param inEnabled Is this Slave allowed to talk to us?
+ * @param inAllowAllOrgs Should we export all orgs to this Slave?
+ * @return Newly created ISSSlave object.
+ *
+ * @xmlrpc.doc Create a new Slave, known to this Slave.
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("string", "slave", "Slave's fully-qualified domain name")
+ * @xmlrpc.param #param_desc("boolean",
+ * "enabled", "Let this slave talk to us?")
+ * @xmlrpc.param #param_desc("boolean",
+ * "allowAllOrgs", "Export all our orgs to this slave?")
+ * @xmlrpc.returntype $IssSlaveSerializer
+ */
+ public IssSlave create(String sessionKey,
+ String inSlave,
+ Boolean inEnabled,
+ Boolean inAllowAllOrgs) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ if (IssFactory.lookupSlaveByName(inSlave) != null) {
+ throw new IssDuplicateSlaveException(inSlave);
+ }
+
+ IssSlave slave = new IssSlave();
+ slave.setSlave(inSlave);
+ slave.setEnabled(inEnabled ? "Y" : "N");
+ slave.setAllowAllOrgs(inAllowAllOrgs ? "Y" : "N");
+ IssFactory.save(slave);
+ slave = (IssSlave) IssFactory.reload(slave);
+ return slave;
+ }
+
+ /**
+ * Updates the label of the specified Slave
+ * @param sessionKey User's session key.
+ * @param inSlaveId id of slave to update
+ * @param inSlave Slave's fully-qualified domain name
+ * @param inEnabled Is this Slave allowed to talk to us?
+ * @param inAllowAllOrgs Should we export all orgs to this Slave?
+ * @return updated IssSlave
+ *
+ * @xmlrpc.doc Updates the label of the specified Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the Slave to update")
+ * @xmlrpc.param #param_desc("string", "slave", "Slave's fully-qualified domain name")
+ * @xmlrpc.param #param_desc("boolean",
+ * "enabled", "Let this slave talk to us?")
+ * @xmlrpc.param #param_desc("boolean",
+ * "allowAllOrgs", "Export all our orgs to this slave?")
+ * @xmlrpc.returntype $IssSlaveSerializer
+ */
+ public IssSlave update(String sessionKey,
+ Integer inSlaveId,
+ String inSlave,
+ Boolean inEnabled,
+ Boolean inAllowAllOrgs) {
+ IssSlave slave = getSlave(sessionKey, inSlaveId);
+ slave.setSlave(inSlave);
+ slave.setEnabled(inEnabled ? "Y" : "N");
+ slave.setAllowAllOrgs(inAllowAllOrgs ? "Y" : "N");
+ IssFactory.save(slave);
+ slave = (IssSlave) IssFactory.reload(slave);
+ return slave;
+ }
+
+ /**
+ * Removes a specified Slave
+ *
+ * @param sessionKey User's session key.
+ * @param inSlaveId Id of the Slave to remove
+ * @return 1 on success, exception otherwise
+ *
+ * @xmlrpc.doc Remove the specified Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the Slave to remove")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int delete(String sessionKey, Integer inSlaveId) {
+ IssSlave slave = getSlave(sessionKey, inSlaveId);
+ IssFactory.delete(slave);
+ return 1;
+ }
+
+ /**
+ * Find a Slave by specifying its ID
+ * @param sessionKey User's session key.
+ * @param slaveId Id of the Slave to look for
+ * @return the specified Slave if found, exception otherwise
+ *
+ * @xmlrpc.doc Remove the specified Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Slave")
+ * @xmlrpc.returntype $IssSlaveSerializer
+ */
+ public IssSlave getSlave(String sessionKey, Integer slaveId) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ IssSlave slave = IssFactory.lookupSlaveById(slaveId.longValue());
+ validateExists(slave, slaveId.toString());
+ return slave;
+ }
+
+ /**
+ * Get all the slaves this master knows about
+ * @param sessionKey User's session key.
+ * @return list of all the IssSlaves we know about
+ *
+ * @xmlrpc.doc Get all the slaves this master knows about
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.returntype
+ * #array()
+ * $IssSlaveSerializer
+ * #array_end()
+ */
+ public List<IssSlave> getSlaves(String sessionKey) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ return IssFactory.listAllIssSlaves();
+ }
+
+ /**
+ * Get all the orgs that this master is willing to export to the specified slave
+ * @param sessionKey User's session key.
+ * @param slaveId Id of the Slave to look for
+ * @return list of all the IssSlaves we know about
+ *
+ * @xmlrpc.doc Get all the slaves this master knows about
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Slave")
+ * @xmlrpc.returntype #array_single("int", "ids of allowed organizations")
+ */
+ public List<Integer> getAllowedOrgs(String sessionKey, Integer slaveId) {
+ IssSlave slave = getSlave(sessionKey, slaveId);
+ List<Integer> allowedOrgIds = new ArrayList<Integer>();
+ for (Org o : slave.getAllowedOrgs()) {
+ allowedOrgIds.add(o.getId().intValue());
+ }
+ return allowedOrgIds;
+ }
+
+ /**
+ * Set the orgs that this master is willing to export to the specified slave
+ * @param sessionKey User's session key.
+ * @param slaveId Id of the Slave to look for
+ * @param orgIds List of org-ids we're willing to export
+ * @return 1 for success, exception otherwise
+ *
+ * @xmlrpc.doc Get all the slaves this master knows about
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Slave")
+ * @xmlrpc.param #array_single("int", "List of revisions to delete")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int setAllowedOrgs(String sessionKey, Integer slaveId, List<Integer> orgIds) {
+ IssSlave slave = getSlave(sessionKey, slaveId);
+ Set<Org> orgs = getOrgsFromIds(orgIds);
+ slave.setAllowedOrgs(orgs);
+ return 1;
+ }
+
+ private void validateExists(IssSlave slave, String srchString) {
+ if (slave == null) {
+ fail("Unable to locate or access ISS Slave : " + srchString,
+ "lookup.issslave.title", "lookup.issslave.reason1");
+ }
+ }
+
+ private void fail(String msg, String titleKey, String reasonKey) {
+ LocalizationService ls = LocalizationService.getInstance();
+ LookupException e = new LookupException(msg);
+ e.setLocalizedTitle(ls.getMessage(titleKey));
+ e.setLocalizedReason1(ls.getMessage(reasonKey));
+ throw e;
+ }
+
+ private Set<Org> getOrgsFromIds(List<Integer> orgIds) {
+ Set<Org> orgs = new HashSet<Org>();
+ for (Integer oid : orgIds) {
+ Org o = OrgFactory.lookupById(oid.longValue());
+ orgs.add(o);
+ }
+ return orgs;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/test/SlaveHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/test/SlaveHandlerTest.java
new file mode 100644
index 0000000..876ba65
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/slave/test/SlaveHandlerTest.java
@@ -0,0 +1,233 @@
+/**
+ * Copyright (c) 2013 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.sync.slave.test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.role.RoleFactory;
+import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException;
+import com.redhat.rhn.frontend.xmlrpc.sync.slave.SlaveHandler;
+import com.redhat.rhn.frontend.xmlrpc.test.BaseHandlerTestCase;
+
+public class SlaveHandlerTest extends BaseHandlerTestCase {
+
+ private SlaveHandler handler = new SlaveHandler();
+
+ public void setUp() throws Exception {
+ super.setUp();
+ admin.addRole(RoleFactory.SAT_ADMIN);
+ }
+
+ public void testCreate() {
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssSlave slave = handler.create(regularKey, "testCreate", true, true);
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, true);
+ assertEquals("testCreate", slave.getSlave());
+ assertTrue("Y".equals(slave.getEnabled()));
+ assertTrue("Y".equals(slave.getAllowAllOrgs()));
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testUpdate() {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, true);
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssSlave updSlave = handler.update(regularKey,
+ slave.getId().intValue(),
+ "testCreateNew",
+ false,
+ false);
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssSlave updSlave = handler.update(adminKey, slave.getId().intValue(),
+ "testCreateNew", false, false);
+ assertEquals("testCreateNew", updSlave.getSlave());
+ assertEquals(slave.getId(), updSlave.getId());
+ assertTrue("N".equals(slave.getEnabled()));
+ assertTrue("N".equals(slave.getAllowAllOrgs()));
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testDelete() {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, true);
+ Long slaveId = slave.getId();
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ int rmvd = handler.delete(regularKey, slave.getId().intValue());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ int rmvd = handler.delete(adminKey, slave.getId().intValue());
+ assertEquals(1, rmvd);
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+
+ // Make sure it's actually gone
+ IssSlave mstr = IssFactory.lookupSlaveById(slaveId);
+ assertNull(mstr);
+ }
+
+ public void testGetSlave() {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, true);
+ Integer slaveId = slave.getId().intValue();
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssSlave gotSlave = handler.getSlave(regularKey, slaveId);
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssSlave gotSlave = handler.getSlave(adminKey, slaveId);
+ assertEquals(slaveId.intValue(), gotSlave.getId().intValue());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testGetAllowedOrgs() {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, false);
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ List<Integer> orgs = handler.getAllowedOrgs(regularKey,
+ slave.getId().intValue());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ List<Integer> orgs = handler.getAllowedOrgs(adminKey,
+ slave.getId().intValue());
+ assertNotNull(orgs);
+ assertEquals(0, orgs.size());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testSetAllowedOrgs() {
+ IssSlave slave = handler.create(adminKey, "testCreate", true, false);
+
+ List<Integer> orgs = getBareOrgs();
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssSlave m = handler.getSlave(adminKey, slave.getId().intValue());
+ assertNotNull(m);
+ orgs = handler.getAllowedOrgs(regularKey, slave.getId().intValue());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssSlave m = handler.getSlave(adminKey, slave.getId().intValue());
+ assertNotNull(m);
+ assertEquals(0, m.getAllowedOrgs().size());
+ int rc = handler.setAllowedOrgs(adminKey, m.getId().intValue(), orgs);
+ assertEquals(1, rc);
+ IssSlave m2 = handler.getSlave(adminKey, slave.getId().intValue());
+ assertEquals(orgs.size(), m2.getAllowedOrgs().size());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+
+ orgs.clear();
+ orgs.add(1);
+
+ // Make sure setting to one-new-one, really sets to one
+ IssSlave m3 = handler.getSlave(adminKey, slave.getId().intValue());
+ int rc = handler.setAllowedOrgs(adminKey,
+ m3.getId().intValue(),
+ orgs);
+ assertEquals(1, rc);
+ orgs = handler.getAllowedOrgs(adminKey,
+ slave.getId().intValue());
+ assertNotNull(orgs);
+ assertEquals(1, orgs.size());
+
+ // Make sure resetting to "empty" works
+ IssSlave m4 = handler.getSlave(adminKey, slave.getId().intValue());
+ rc = handler.setAllowedOrgs(adminKey,
+ m4.getId().intValue(),
+ new ArrayList<Integer>());
+ assertEquals(1, rc);
+ orgs = handler.getAllowedOrgs(adminKey, slave.getId().intValue());
+ assertNotNull(orgs);
+ assertEquals(0, orgs.size());
+
+ }
+
+ // Add half of any existing Orgs to this list
+ private List<Integer> getBareOrgs() {
+ List<Integer> orgs = new ArrayList();
+ int i = 0;
+ for (Org o : OrgFactory.lookupAllOrgs()) {
+ if (i++ % 2 == 0) {
+ orgs.add(o.getId().intValue());
+ }
+ }
+ return orgs;
+ }
+
+}
commit a78ab17d9f204b298d97524bb94a53c27daa30ce
Author: Stephen Herr <sherr(a)redhat.com>
Date: Wed Jun 12 16:18:14 2013 -0400
Bunch of changes for ISS, not working yet
Exporter should (hopefully) be in final state.
Import code should be able to handle new files and create correct objects from export.
Need to do:
Implement master recognition in sat-sync
Implement code to actually save things to db
Test and possibly bump protocol version
diff --git a/backend/satellite_tools/diskImportLib.py b/backend/satellite_tools/diskImportLib.py
index 06df5c7..f8e0ee6 100644
--- a/backend/satellite_tools/diskImportLib.py
+++ b/backend/satellite_tools/diskImportLib.py
@@ -27,6 +27,7 @@ from spacewalk.server.importlib.channelImport import ChannelImport, ChannelFamil
from spacewalk.server.importlib.packageImport import PackageImport, SourcePackageImport
from spacewalk.server.importlib import archImport
from spacewalk.server.importlib import productNamesImport
+from spacewalk.server.importlib import orgImport
class Backend:
__backend = None
@@ -61,6 +62,9 @@ class diskImportLibContainer:
importer.run()
self.batch = []
+class OrgContainer(diskImportLibContainer, xmlSource.OrgContainer):
+ importer_class = orgImport.OrgImport
+
class ProductNamesContainer(diskImportLibContainer, xmlSource.ProductNamesContainer):
importer_class = productNamesImport.ProductNamesImport
def endContainerCallback(self):
diff --git a/backend/satellite_tools/disk_dumper/iss.py b/backend/satellite_tools/disk_dumper/iss.py
index 65a0dc9..8bcca92 100644
--- a/backend/satellite_tools/disk_dumper/iss.py
+++ b/backend/satellite_tools/disk_dumper/iss.py
@@ -71,7 +71,7 @@ class FileMapper:
'arches-extra' : xmlDiskSource.ArchesExtraDiskSource(self.mp),
'blacklists' : xmlDiskSource.BlacklistsDiskSource(self.mp),
'channelfamilies' : xmlDiskSource.ChannelFamilyDiskSource(self.mp),
- 'orgs' : xmlDiskSource.OrgDiskSource(self.mp),
+ 'orgs' : xmlDiskSource.OrgsDiskSource(self.mp),
'channels' : xmlDiskSource.ChannelDiskSource(self.mp),
'channel-pkg-short' : ISSChannelPackageShortDiskSource(self.mp),
'packages-short' : xmlDiskSource.ShortPackageDiskSource(self.mp),
diff --git a/backend/satellite_tools/exporter/exportLib.py b/backend/satellite_tools/exporter/exportLib.py
index 2138234..f69abe3 100644
--- a/backend/satellite_tools/exporter/exportLib.py
+++ b/backend/satellite_tools/exporter/exportLib.py
@@ -198,14 +198,21 @@ class SatelliteDumper(BaseDumper):
def set_iterator(self):
return ArrayIterator(self._dumpers)
+class _OrgTrustDumper(BaseDumper):
+ tag_name = 'rhn-org-trusts'
+
+ def dump_subelement(self, data):
+ c = EmptyDumper(self._writer, 'rhn-org-trust', attributes={
+ 'org-id' : data['org_trust_id'],
+ })
+ c.dump()
+
class _OrgDumper(BaseDumper):
tag_name = 'rhn-org'
def __init__(self, writer, org):
self.org = org
- h = rhnSQL.prepare(self._query_org_trusts)
- h.execute(org_id=org['id'])
- BaseDumper.__init__(self, writer, h)
+ BaseDumper.__init__(self, writer)
_query_org_trusts = """
select rto.org_trust_id
@@ -213,10 +220,11 @@ class _OrgDumper(BaseDumper):
where rto.org_id = :org_id
"""
- def dump_subelement(self, data):
- d = SimpleDumper(self._writer, 'rhn-org-trust',
- data['org_trust_id'])
- d.dump()
+ def set_iterator(self):
+ # trusts
+ h = rhnSQL.prepare(self._query_org_trusts)
+ h.execute(org_id=self.org['id'])
+ return ArrayIterator([_OrgTrustDumper(self._writer, data_iterator=h)])
def set_attributes(self):
attributes = {
@@ -235,21 +243,15 @@ class OrgsDumper(BaseDumper):
org = _OrgDumper(self._writer, data)
org.dump()
-class ChannelAccessDumper(BaseDumper):
- tag_name = 'rhn-channel-access'
-
- def __init__(self, writer, access_level, data_iterator=None):
- BaseDumper.__init__(self, writer, data_iterator)
- self.access_level = access_level
+class ChannelTrustedOrgsDumper(BaseDumper):
+ tag_name = 'rhn-channel-trusted-orgs'
def dump_subelement(self, data):
- d = SimpleDumper(self._writer, 'rhn-channel-trusted-org',
- data['org_trust_id'])
+ d = EmptyDumper(self._writer, 'rhn-channel-trusted-org',
+ attributes={'org-id' : data['org_trust_id'],
+ })
d.dump()
- def set_attributes(self):
- return {'sharing' : self.access_level}
-
class _ChannelDumper(BaseRowDumper):
tag_name = 'rhn-channel'
@@ -278,6 +280,7 @@ class _ChannelDumper(BaseRowDumper):
'packages' : ' '.join(packages),
'channel-errata' : ' '.join(errata),
'kickstartable-trees' : ' '.join(ks_trees),
+ 'sharing' : self._row['channel_access'],
}
_query_channel_families = rhnSQL.Statement("""
@@ -334,8 +337,7 @@ class _ChannelDumper(BaseRowDumper):
h = rhnSQL.prepare(self._query_get_channel_trusts)
h.execute(channel_id=channel_id)
- arr.append(ChannelAccessDumper(self._writer,
- self._row['channel_access'], data_iterator=h))
+ arr.append(ChannelTrustedOrgsDumper(self._writer, data_iterator=h))
h = rhnSQL.prepare(self._query_channel_families)
h.execute(channel_id=channel_id)
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index 3095146..21a9509 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -103,6 +103,7 @@ class Runner:
'download-source-packages' : [''],
'download-kickstarts' : [''],
'arches' : [''], #5/26/05 wregglej 156079 Added arches to precedence list.
+ 'orgs' : [''],
}
# The step hierarchy. We need access to it both for command line
@@ -110,6 +111,7 @@ class Runner:
step_hierarchy = [
'channel-families',
'arches',
+ 'orgs',
'channels',
'short',
'download-packages',
@@ -349,6 +351,9 @@ class Runner:
def _step_kickstarts(self):
self.syncer.import_kickstarts()
+ def _step_orgs(self):
+ self.syncer.import_orgs()
+
def sendMail(forceEmail=0):
""" Send email summary """
if forceEmail or (OPTIONS is not None and OPTIONS.email):
@@ -518,6 +523,9 @@ class Syncer:
self._process_simple("getArchesXmlStream", "arches")
self._process_simple("getArchesExtraXmlStream", "additional arches")
+ def import_orgs(self):
+ self._process_simple("getOrgsXmlStream", "orgs")
+
def syncCert(self):
"sync the Red Hat Satellite cert if applicable (to local DB & filesystem)"
@@ -2098,6 +2106,8 @@ def processCommandline():
help=_('alternative email address(es) for sync output (--email option)')),
Option( '--keep-rpms', action='store_true',
help=_('do not remove rpms when importing from local dump')),
+ Option( '--create-missing-orgs', action='store_true',
+ help=_('create orgs on this Satellite to match orgs exported by the master Satellite (use with --mount-point or --iss-parent only)')),
# DEFERRED:
#Option( '--source-packages', action='store_true', help='sync source rpms/metadata as well.'),
@@ -2242,6 +2252,7 @@ def processCommandline():
"force_all_packages" : 'force-all-packages',
"force_all_errata" : 'force-all-errata',
'no_ssl' : 'no-ssl',
+ "create_missing_orgs": 'create-missing-orgs',
}
for oa in otherActions.keys():
@@ -2250,6 +2261,12 @@ def processCommandline():
else:
actionDict[otherActions[oa]] = 0
+ if actionDict['create-missing-orgs'] and not (CFG.ISS_PARENT
+ or OPTIONS.mount_point):
+ msg = _("ERROR: Org syncing is only available during an Inter Satellite Sync or import of a channel dump created by another Satellite.")
+ log2stderr(-1, msg, cleanYN=1)
+ sys.exit(28)
+
if actionDict['no-kickstarts']:
actionDict['kickstarts'] = 0
@@ -2333,7 +2350,8 @@ def processCommandline():
_(" 24 - no such file"),
_(" 25 - no such directory"),
_(" 26 - mount_point does not exist"),
- _(" 27 - No such org"),]
+ _(" 27 - No such org"),
+ _(" 28 - error: --create-missing-orgs requires --iss-parent"),]
log(-1, msg, 1, 1, sys.stderr)
sys.exit(0)
diff --git a/backend/satellite_tools/sync_handlers.py b/backend/satellite_tools/sync_handlers.py
index fa59627..87c8bcd 100644
--- a/backend/satellite_tools/sync_handlers.py
+++ b/backend/satellite_tools/sync_handlers.py
@@ -428,6 +428,7 @@ class ContainerHandler:
# all other containers
self.setChannelFamilyContainer()
self.setProductNamesContainer()
+ self.setOrgContainer()
def __del__(self):
self.handler.close() # kill the circular reference.
@@ -470,6 +471,8 @@ class ContainerHandler:
self.handler.set_container(ChannelFamilyContainer())
def setProductNamesContainer(self):
self.handler.set_container(diskImportLib.ProductNamesContainer())
+ def setOrgContainer(self):
+ self.handler.set_container(diskImportLib.OrgContainer())
#
# more containers
diff --git a/backend/satellite_tools/xmlDiskSource.py b/backend/satellite_tools/xmlDiskSource.py
index 66fb6fe..c2deddf 100644
--- a/backend/satellite_tools/xmlDiskSource.py
+++ b/backend/satellite_tools/xmlDiskSource.py
@@ -102,7 +102,7 @@ class ChannelFamilyDiskSource(DiskSource):
return "%s/channel_families.xml" % dirname
-class OrgDiskSource(DiskSource):
+class OrgsDiskSource(DiskSource):
subdir = 'orgs'
def _getFile(self, create=0):
@@ -265,6 +265,9 @@ class MetadataDiskSource:
def getChannelFamilyXmlStream(self):
return ChannelFamilyDiskSource(self.mountpoint).load()
+ def getOrgsXmlStream(self):
+ return OrgsDiskSource(self.mountpoint).load()
+
def getProductNamesXmlStream(self):
return ProductnamesDiskSource(self.mountpoint).load()
diff --git a/backend/satellite_tools/xmlSource.py b/backend/satellite_tools/xmlSource.py
index 4958fd7..280e76e 100644
--- a/backend/satellite_tools/xmlSource.py
+++ b/backend/satellite_tools/xmlSource.py
@@ -459,6 +459,8 @@ class ChannelItem(BaseItem):
'rhn-channel-receiving-updates' : 'receiving_updates',
'rhn-channel-checksum-type' : 'checksum_type',
'rhn-channel-comps-last-modified' : 'comps_last_modified',
+ 'sharing' : 'sharing',
+ 'rhn-channel-trusted-orgs' : 'trust_list',
}
def populateFromElements(self, obj, elements):
# bz 808516, to retain compatibility with Satellite <= 5.3 we
@@ -489,6 +491,32 @@ class ChannelItem(BaseItem):
addItem(ChannelItem)
+class ChannelTrustItem(BaseItem):
+ item_name = 'rhn-channel-trusted-org'
+ item_class = importLib.ChannelTrust
+ tagMap = {
+ 'org-id' : 'org_id',
+ }
+addItem(ChannelTrustItem)
+
+class OrgTrustItem(BaseItem):
+ item_name = 'rhn-org-trust'
+ item_class = importLib.OrgTrust
+ tagMap = {
+ 'org-id' : 'org_id',
+ }
+addItem(OrgTrustItem)
+
+class OrgItem(BaseItem):
+ item_name = 'rhn-org'
+ item_class = importLib.Org
+ tagMap = {
+ 'id' : 'id',
+ 'name' : 'name',
+ 'rhn-org-trusts': 'org_trust_ids',
+ }
+addItem(OrgItem)
+
class BaseChecksummedItem(BaseItem):
def populate(self, attributes, elements):
item = BaseItem.populate(self, attributes, elements)
@@ -1090,3 +1118,5 @@ class ProductNamesContainer(ContainerHandler):
class KickstartableTreesContainer(ContainerHandler):
container_name = 'rhn-kickstartable-trees'
+class OrgContainer(ContainerHandler):
+ container_name = 'rhn-orgs'
diff --git a/backend/satellite_tools/xmlWireSource.py b/backend/satellite_tools/xmlWireSource.py
index 23a9e08..46a8a19 100644
--- a/backend/satellite_tools/xmlWireSource.py
+++ b/backend/satellite_tools/xmlWireSource.py
@@ -215,7 +215,7 @@ class MetadataWireSource(BaseWireSource):
self._prepare()
return self._openSocketStream("dump.channel_families", (self.systemid,))
- def getOrgXmlStream(self):
+ def getOrgsXmlStream(self):
"""retrieve xml stream for org data."""
self._prepare()
return self._openSocketStream("dump.orgs", (self.systemid,))
diff --git a/backend/server/importlib/Makefile b/backend/server/importlib/Makefile
index 865b278..635c5e3 100644
--- a/backend/server/importlib/Makefile
+++ b/backend/server/importlib/Makefile
@@ -8,7 +8,7 @@ SUBDIR = server/importlib
SPACEWALK_FILES = __init__ archImport backendLib backendOracle backend backend_checker \
channelImport debPackage errataCache errataImport headerSource importLib \
- kickstartImport mpmSource \
+ kickstartImport mpmSource orgImport \
packageImport productNamesImport packageUpload userAuth
include $(TOP)/Makefile.defs
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py
index 8df5f22..66dcf84 100644
--- a/backend/server/importlib/backend.py
+++ b/backend/server/importlib/backend.py
@@ -270,6 +270,19 @@ class Backend:
raise ValueError, "No user is created"
return rows[0]['id']
+ def lookupOrgMap(self, master_label):
+ sql = "select imo.master_org_id, imo.master_org_name, imo.local_org_id
+ from rhnISSMasterOrgs imo,
+ rhnISSMaster im,
+ where im.id = imo.master_id
+ and im.label = :master_label"
+ h = self.dbmodule.prepare(sql)
+ h.execute(master_label=master_label)
+ rows = h.fetchall_dict()
+ if not rows:
+ return []
+ return rows
+
def lookupChannels(self, hash):
if not hash:
return
@@ -582,6 +595,13 @@ class Backend:
self.__processObjectCollection(arches, 'rhnCPUArch',
uploadForce=4, ignoreUploaded=1, severityLimit=4)
+ def processMasterOrgs(self, orgs):
+ self.__processObjectCollection(orgs, 'rhnISSMasterOrgs',
+ uploadForce=4, ignoreUploaded=1, severityLimit=4)
+
+ def processOrgs(self, orgs):
+ self.__processObjectCollection(orgs, 'web_customer',
+ uploadForce=4, ignoreUploaded=1, severityLimit=4)
def processServerPackageArchCompatMap(self, entries):
self.__populateTable('rhnServerPackageArchCompat', entries,
diff --git a/backend/server/importlib/importLib.py b/backend/server/importlib/importLib.py
index f4ff0e2..c86ae39 100644
--- a/backend/server/importlib/importLib.py
+++ b/backend/server/importlib/importLib.py
@@ -205,6 +205,7 @@ class Channel(Information):
'channel_product_id': IntType,
'receiving_updates' : StringType,
'checksum_type' : StringType, # xml dumps >= 3.5
+ 'sharing' : StringType,
# XXX Not really useful stuff
'basedir' : StringType,
'product_name' : StringType,
@@ -220,11 +221,37 @@ class Channel(Information):
'errata' : [StringType],
'errata_timestamps' : [ChannelErratum],
'kickstartable_trees' : [StringType],
+ 'trust_list' : [ChannelTrust],
'export-type' : StringType,
'export-end-date' : StringType,
'export-start-date' : StringType,
}
+class ChannelTrust(Information):
+ attributeTypes = {
+ 'org_id' : IntType,
+ }
+
+class OrgTrust(Information):
+ attributeTypes = {
+ 'org_id' : IntType,
+ }
+
+class Org(Information):
+ attributeTypes = {
+ 'id' : IntType,
+ 'name' : StringType,
+ 'org_trust_ids' : [OrgTrust],
+ }
+
+class MasterOrg(Information):
+ attributeTypes = {
+ 'master_id' : IntType,
+ 'master_org_id' : IntType,
+ 'master_org_name' : StringType,
+ 'local_org_id' : IntType,
+ }
+
class File(Item):
attributeTypes = {
commit 93c5b12885890d68cf8824ff59d4ebd1c23aaa8e
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 11 15:28:10 2013 -0400
ISS: Naming nitpick: It's one IssMasterOrg, not several
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
index 00574f2..4a67afc 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
@@ -18,7 +18,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
inverse="true"
cascade="all-delete-orphan">
<key column="master_id" not-null="true"/>
- <one-to-many class="com.redhat.rhn.domain.iss.IssMasterOrgs"/>
+ <one-to-many class="com.redhat.rhn.domain.iss.IssMasterOrg"/>
</set>
</class>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
index 7f2b0f2..3978846 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
@@ -34,7 +34,7 @@ public class IssMaster extends BaseDto {
private Long id;
private String label;
- private Set<IssMasterOrgs> masterOrgs = new HashSet<IssMasterOrgs>();
+ private Set<IssMasterOrg> masterOrgs = new HashSet<IssMasterOrg>();
/**
* Getter for id
@@ -72,7 +72,7 @@ public class IssMaster extends BaseDto {
* Get Orgs this master has let us know about
* @return list of orgs Master has told us about
*/
- public Set<IssMasterOrgs> getMasterOrgs() {
+ public Set<IssMasterOrg> getMasterOrgs() {
return this.masterOrgs;
}
@@ -82,7 +82,7 @@ public class IssMaster extends BaseDto {
* orgs and this master. This API is used by Hibernate
* @param inOrgs orgs of the master that we know of
*/
- protected void setMasterOrgs(Set<IssMasterOrgs> inOrgs) {
+ protected void setMasterOrgs(Set<IssMasterOrg> inOrgs) {
this.masterOrgs = inOrgs;
}
@@ -90,7 +90,7 @@ public class IssMaster extends BaseDto {
* Reset the orgs for this master to a new map
* @param inOrgs orgs of the master that we know of
*/
- public void resetMasterOrgs(Set<IssMasterOrgs> inOrgs) {
+ public void resetMasterOrgs(Set<IssMasterOrg> inOrgs) {
setMasterOrgsInternal(inOrgs, true);
}
@@ -98,16 +98,16 @@ public class IssMaster extends BaseDto {
* Add a single new master-org, to this Master
* @param org org to be added
*/
- public void addToMaster(IssMasterOrgs org) {
- Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ public void addToMaster(IssMasterOrg org) {
+ Set<IssMasterOrg> orgs = new HashSet<IssMasterOrg>();
orgs.add(org);
setMasterOrgsInternal(orgs, false);
}
- private void setMasterOrgsInternal(Set<IssMasterOrgs> inOrgs, boolean replace) {
+ private void setMasterOrgsInternal(Set<IssMasterOrg> inOrgs, boolean replace) {
// Make sure everything incoming points to "us"
- Map<String, IssMasterOrgs> findIncoming = new HashMap<String, IssMasterOrgs>();
- for (IssMasterOrgs org : inOrgs) {
+ Map<String, IssMasterOrg> findIncoming = new HashMap<String, IssMasterOrg>();
+ for (IssMasterOrg org : inOrgs) {
findIncoming.put(org.getMasterOrgName(), org);
org.setMaster(this);
}
@@ -128,10 +128,10 @@ public class IssMaster extends BaseDto {
// Make sure localOrgId is set correctly - we need this because having/not-having
// a local-org-id doesn't make a MasterOrg different in the equals/hash sense, so
// we can't rely on Set "doing the right thing" for it
- private void setLocals(Map<String, IssMasterOrgs> findIncoming) {
- for (IssMasterOrgs o : this.getMasterOrgs()) {
+ private void setLocals(Map<String, IssMasterOrg> findIncoming) {
+ for (IssMasterOrg o : this.getMasterOrgs()) {
if (findIncoming.containsKey(o.getMasterOrgName())) {
- IssMasterOrgs fromIncoming = findIncoming.get(o.getMasterOrgName());
+ IssMasterOrg fromIncoming = findIncoming.get(o.getMasterOrgName());
o.setLocalOrg(fromIncoming.getLocalOrg());
}
}
@@ -152,7 +152,7 @@ public class IssMaster extends BaseDto {
*/
public int getNumMappedMasterOrgs() {
int mappedSources = 0;
- for (IssMasterOrgs so : getMasterOrgs()) {
+ for (IssMasterOrg so : getMasterOrgs()) {
if (so.getLocalOrg() != null) {
mappedSources++;
}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.hbm.xml
new file mode 100644
index 0000000..0a68bec
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.hbm.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssMasterOrg"
+ table="rhnissmasterorgs" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_issmasterorgs_seq</param>
+ </generator>
+ </id>
+ <property name="masterOrgId" column="MASTER_ORG_ID" type="long" />
+ <property name="masterOrgName" column="MASTER_ORG_NAME" type="string" length="256" />
+
+ <many-to-one name="master"
+ column="MASTER_ID" class="com.redhat.rhn.domain.iss.IssMaster"
+ not-null="true"/>
+
+ <many-to-one name="localOrg"
+ column="LOCAL_ORG_ID" class="com.redhat.rhn.domain.org.Org"
+ />
+ </class>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.java b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.java
new file mode 100644
index 0000000..b372bef
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrg.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+
+/**
+ * IssMasterOrg - Class representation of the table rhnissmasterorgs.
+ * @version $Rev: 1 $
+ */
+public class IssMasterOrg extends BaseDto {
+
+ public static final Long NO_MAP_ID = new Long(-1L);
+
+ private Long id;
+ private Long masterOrgId;
+ private String masterOrgName;
+ private Org localOrg;
+ private IssMaster master;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for masterOrgId
+ * @return Long to get
+ */
+ public Long getMasterOrgId() {
+ return this.masterOrgId;
+ }
+
+ /**
+ * Setter for masterOrgId
+ * @param masterOrgIdIn to set
+ */
+ public void setMasterOrgId(Long masterOrgIdIn) {
+ this.masterOrgId = masterOrgIdIn;
+ }
+
+ /**
+ * Getter for masterOrgName
+ * @return String to get
+ */
+ public String getMasterOrgName() {
+ return this.masterOrgName;
+ }
+
+ /**
+ * Setter for masterOrgName
+ * @param masterOrgNameIn to set
+ */
+ public void setMasterOrgName(String masterOrgNameIn) {
+ this.masterOrgName = masterOrgNameIn;
+ }
+
+ /**
+ *
+ * @return local org associated with this master-org
+ */
+ public Org getLocalOrg() {
+ return this.localOrg;
+ }
+
+ /**
+ * Map a local org to a specific master org
+ * @param localOrgIn local org to be associated with this master org
+ */
+ public void setLocalOrg(Org localOrgIn) {
+ this.localOrg = localOrgIn;
+ }
+
+ /**
+ * What Master do we belong to?
+ * @return the master
+ */
+ public IssMaster getMaster() {
+ return this.master;
+ }
+
+ /**
+ * Assign us to a Master
+ * @param inMaster the master we should belong to
+ */
+ public void setMaster(IssMaster inMaster) {
+ this.master = inMaster;
+ }
+
+ /**
+ * @return hashCode based on master-org-id and master-org-name
+ */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((masterOrgId == null) ? 0 : masterOrgId.hashCode());
+ result = prime * result + ((masterOrgName == null) ? 0 : masterOrgName.hashCode());
+ return result;
+ }
+
+ /**
+ * Equality based on master-org-id and master-org-name - everything else is subject
+ * to change
+ * @param obj The Thing we're comparing against
+ * @return true if obj.masterOrg{Id,name} equal our.masterorg{Id,Name}, false else
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ IssMasterOrg other = (IssMasterOrg) obj;
+ if (masterOrgId == null) {
+ if (other.masterOrgId != null) {
+ return false;
+ }
+ }
+ else if (!masterOrgId.equals(other.masterOrgId)) {
+ return false;
+ }
+ if (masterOrgName == null) {
+ if (other.masterOrgName != null) {
+ return false;
+ }
+ }
+ else if (!masterOrgName.equals(other.masterOrgName)) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
deleted file mode 100644
index b4ec866..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping
-PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<hibernate-mapping>
- <class name="com.redhat.rhn.domain.iss.IssMasterOrgs"
- table="rhnissmasterorgs" >
- <id name="id" type="long" column="ID">
- <meta attribute="scope-set">protected</meta>
- <generator class="sequence">
- <param name="sequence">rhn_issmasterorgs_seq</param>
- </generator>
- </id>
- <property name="masterOrgId" column="MASTER_ORG_ID" type="long" />
- <property name="masterOrgName" column="MASTER_ORG_NAME" type="string" length="256" />
-
- <many-to-one name="master"
- column="MASTER_ID" class="com.redhat.rhn.domain.iss.IssMaster"
- not-null="true"/>
-
- <many-to-one name="localOrg"
- column="LOCAL_ORG_ID" class="com.redhat.rhn.domain.org.Org"
- />
- </class>
-</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
deleted file mode 100644
index e5ef733..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.domain.iss;
-
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.frontend.dto.BaseDto;
-
-
-/**
- * IssMasterOrgs - Class representation of the table rhnissmasterorgs.
- * @version $Rev: 1 $
- */
-public class IssMasterOrgs extends BaseDto {
-
- public static final Long NO_MAP_ID = new Long(-1L);
-
- private Long id;
- private Long masterOrgId;
- private String masterOrgName;
- private Org localOrg;
- private IssMaster master;
-
- /**
- * Getter for id
- * @return Long to get
- */
- public Long getId() {
- return this.id;
- }
-
- /**
- * Setter for id
- * @param idIn to set
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * Getter for masterOrgId
- * @return Long to get
- */
- public Long getMasterOrgId() {
- return this.masterOrgId;
- }
-
- /**
- * Setter for masterOrgId
- * @param masterOrgIdIn to set
- */
- public void setMasterOrgId(Long masterOrgIdIn) {
- this.masterOrgId = masterOrgIdIn;
- }
-
- /**
- * Getter for masterOrgName
- * @return String to get
- */
- public String getMasterOrgName() {
- return this.masterOrgName;
- }
-
- /**
- * Setter for masterOrgName
- * @param masterOrgNameIn to set
- */
- public void setMasterOrgName(String masterOrgNameIn) {
- this.masterOrgName = masterOrgNameIn;
- }
-
- /**
- *
- * @return local org associated with this master-org
- */
- public Org getLocalOrg() {
- return this.localOrg;
- }
-
- /**
- * Map a local org to a specific master org
- * @param localOrgIn local org to be associated with this master org
- */
- public void setLocalOrg(Org localOrgIn) {
- this.localOrg = localOrgIn;
- }
-
- /**
- * What Master do we belong to?
- * @return the master
- */
- public IssMaster getMaster() {
- return this.master;
- }
-
- /**
- * Assign us to a Master
- * @param inMaster the master we should belong to
- */
- public void setMaster(IssMaster inMaster) {
- this.master = inMaster;
- }
-
- /**
- * @return hashCode based on master-org-id and master-org-name
- */
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((masterOrgId == null) ? 0 : masterOrgId.hashCode());
- result = prime * result + ((masterOrgName == null) ? 0 : masterOrgName.hashCode());
- return result;
- }
-
- /**
- * Equality based on master-org-id and master-org-name - everything else is subject
- * to change
- * @param obj The Thing we're comparing against
- * @return true if obj.masterOrg{Id,name} equal our.masterorg{Id,Name}, false else
- */
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- IssMasterOrgs other = (IssMasterOrgs) obj;
- if (masterOrgId == null) {
- if (other.masterOrgId != null) {
- return false;
- }
- }
- else if (!masterOrgId.equals(other.masterOrgId)) {
- return false;
- }
- if (masterOrgName == null) {
- if (other.masterOrgName != null) {
- return false;
- }
- }
- else if (!masterOrgName.equals(other.masterOrgName)) {
- return false;
- }
- return true;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
index fad74cc..37952a4 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
@@ -35,7 +35,7 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssMaster;
-import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.iss.IssMasterOrg;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.dto.OrgDto;
@@ -78,7 +78,7 @@ public class MapOrgsAction extends RhnAction {
return handleDispatchAction(mapping, ctxt, oc);
}
- List<IssMasterOrgs> result = new ArrayList<IssMasterOrgs>(
+ List<IssMasterOrg> result = new ArrayList<IssMasterOrg>(
oc.getMasterOrgs());
Collections.sort(result, new IssSyncOrgComparator());
@@ -101,17 +101,17 @@ public class MapOrgsAction extends RhnAction {
RequestContext ctxt,
IssMaster master) {
//TODO: Figure out what we're doing, and how, and then DO IT
- List<IssMasterOrgs> masterOrgs =
- new ArrayList<IssMasterOrgs>(master.getMasterOrgs());
+ List<IssMasterOrg> masterOrgs =
+ new ArrayList<IssMasterOrg>(master.getMasterOrgs());
List<Org> locals = OrgFactory.lookupAllOrgs();
Map<Long, Org> findLocals = new HashMap<Long, Org>();
for (Org o : locals) {
findLocals.put(o.getId(), o);
}
- for (IssMasterOrgs entry : masterOrgs) {
+ for (IssMasterOrg entry : masterOrgs) {
Long targetId = ctxt.getParamAsLong(entry.getId().toString());
- if (targetId == null || targetId.equals(IssMasterOrgs.NO_MAP_ID)) {
+ if (targetId == null || targetId.equals(IssMasterOrg.NO_MAP_ID)) {
entry.setLocalOrg(null);
}
else {
@@ -142,7 +142,7 @@ public class MapOrgsAction extends RhnAction {
}
Collections.sort(outList, new OrgComparator());
- OrgDto noMap = createOrgDto(IssMasterOrgs.NO_MAP_ID, "NOT MAPPED");
+ OrgDto noMap = createOrgDto(IssMasterOrg.NO_MAP_ID, "NOT MAPPED");
outList.add(0, noMap);
return outList;
@@ -171,10 +171,10 @@ class OrgComparator implements Comparator<OrgDto> {
* @author ggainey
*
*/
- class IssSyncOrgComparator implements Comparator<IssMasterOrgs> {
+ class IssSyncOrgComparator implements Comparator<IssMasterOrg> {
@Override
- public int compare(IssMasterOrgs so1, IssMasterOrgs so2) {
+ public int compare(IssMasterOrg so1, IssMasterOrg so2) {
if (so1 == null || so2 == null) {
throw new NullPointerException("Can't compare IssSyncOrg with null");
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgSerializer.java
new file mode 100644
index 0000000..e77cdd4
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgSerializer.java
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2009--2011 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.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.iss.IssMasterOrg;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+/**
+ * IssMasterOrgSerializer
+ * @version $Rev$
+ *
+ * @xmlrpc.doc
+ * #struct("IssMasterOrg info")
+ * #prop("int", "masterOrgId")
+ * #prop("string", "masterOrgName")
+ * #prop("int", "localOrgId")
+ * #struct_end()
+ */
+public class IssMasterOrgSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return IssMasterOrg.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object obj, Writer writer, XmlRpcSerializer serializer)
+ throws XmlRpcException, IOException {
+ SerializerHelper helper = new SerializerHelper(serializer);
+
+ IssMasterOrg anOrg = (IssMasterOrg) obj;
+ helper.add("masterOrgId", anOrg.getMasterOrgId());
+ helper.add("masterOrgName", anOrg.getMasterOrgName());
+ if (anOrg.getLocalOrg() != null) {
+ helper.add("localOrgId", anOrg.getLocalOrg().getId());
+
+ }
+ helper.writeTo(writer);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
deleted file mode 100644
index 7b1937c..0000000
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Copyright (c) 2009--2011 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.serializer;
-
-import java.io.IOException;
-import java.io.Writer;
-
-import redstone.xmlrpc.XmlRpcCustomSerializer;
-import redstone.xmlrpc.XmlRpcException;
-import redstone.xmlrpc.XmlRpcSerializer;
-
-import com.redhat.rhn.domain.iss.IssMasterOrgs;
-import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
-
-/**
- * IssMasterOrgsSerializer
- * @version $Rev$
- *
- * @xmlrpc.doc
- * #struct("IssMasterOrgs info")
- * #prop("int", "masterOrgId")
- * #prop("string", "masterOrgName")
- * #prop("int", "localOrgId")
- * #struct_end()
- */
-public class IssMasterOrgsSerializer implements XmlRpcCustomSerializer {
-
- /**
- * {@inheritDoc}
- */
- public Class getSupportedClass() {
- return IssMasterOrgs.class;
- }
-
- /**
- * {@inheritDoc}
- */
- public void serialize(Object obj, Writer writer, XmlRpcSerializer serializer)
- throws XmlRpcException, IOException {
- SerializerHelper helper = new SerializerHelper(serializer);
-
- IssMasterOrgs anOrg = (IssMasterOrgs) obj;
- helper.add("masterOrgId", anOrg.getMasterOrgId());
- helper.add("masterOrgName", anOrg.getMasterOrgName());
- if (anOrg.getLocalOrg() != null) {
- helper.add("localOrgId", anOrg.getLocalOrg().getId());
-
- }
- helper.writeTo(writer);
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
index f84ccb5..71447ea 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
@@ -121,7 +121,7 @@ public class SerializerRegistry {
SERIALIZER_CLASSES.add(XccdfTestResultSerializer.class);
SERIALIZER_CLASSES.add(XccdfRuleResultDtoSerializer.class);
SERIALIZER_CLASSES.add(IssMasterSerializer.class);
- SERIALIZER_CLASSES.add(IssMasterOrgsSerializer.class);
+ SERIALIZER_CLASSES.add(IssMasterOrgSerializer.class);
}
/**
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
index 95beaa3..1aa5c83 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
@@ -13,8 +13,8 @@ import redstone.xmlrpc.XmlRpcSerializer;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssMaster;
-import com.redhat.rhn.domain.iss.IssMasterOrgs;
-import com.redhat.rhn.frontend.xmlrpc.serializer.IssMasterOrgsSerializer;
+import com.redhat.rhn.domain.iss.IssMasterOrg;
+import com.redhat.rhn.frontend.xmlrpc.serializer.IssMasterOrgSerializer;
import com.redhat.rhn.frontend.xmlrpc.serializer.IssMasterSerializer;
public class IssMasterSerializerTest extends MockObjectTestCase {
@@ -34,15 +34,15 @@ public class IssMasterSerializerTest extends MockObjectTestCase {
assertTrue(result.contains(">" + master.getLabel() + "<"));
}
- public void testMasterOrgsSerialize() throws XmlRpcException, IOException {
- IssMasterOrgsSerializer os = new IssMasterOrgsSerializer();
+ public void testMasterOrgSerialize() throws XmlRpcException, IOException {
+ IssMasterOrgSerializer os = new IssMasterOrgSerializer();
IssMaster master = setUpMaster();
- IssMasterOrgs org = master.getMasterOrgs().toArray(new IssMasterOrgs[0])[0];
+ IssMasterOrg org = master.getMasterOrgs().toArray(new IssMasterOrg[0])[0];
Writer output = new StringWriter();
os.serialize(org, output, new XmlRpcSerializer());
String result = output.toString();
- assertEquals(os.getSupportedClass(), IssMasterOrgs.class);
+ assertEquals(os.getSupportedClass(), IssMasterOrg.class);
assertTrue(result.contains("name>masterOrgId</name"));
assertTrue(result.contains(">" + org.getMasterOrgId() + "<"));
assertTrue(result.contains("name>masterOrgName</name"));
@@ -55,15 +55,15 @@ public class IssMasterSerializerTest extends MockObjectTestCase {
IssMaster master = new IssMaster();
master.setLabel("testMaster");
- Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ Set<IssMasterOrg> orgs = new HashSet<IssMasterOrg>();
for (String orgName : masterOrgNames) {
- IssMasterOrgs anOrg = new IssMasterOrgs();
+ IssMasterOrg anOrg = new IssMasterOrg();
anOrg.setMasterOrgId(baseId++);
anOrg.setMasterOrgName(orgName);
anOrg.setLocalOrg(null);
orgs.add(anOrg);
}
- master.setMasterOrgs(orgs);
+ master.resetMasterOrgs(orgs);
IssFactory.save(master);
return master;
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
index b8ff98d..6184308 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
@@ -26,7 +26,7 @@ import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssMaster;
-import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.iss.IssMasterOrg;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.domain.user.User;
@@ -169,12 +169,12 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
* @xmlrpc.returntype
* #array()
- * $IssMasterOrgsSerializer
+ * $IssMasterOrgSerializer
* #array_end()
*/
- public List<IssMasterOrgs> getMasterOrgs(String sessionKey, Integer masterId) {
+ public List<IssMasterOrg> getMasterOrgs(String sessionKey, Integer masterId) {
IssMaster master = getMaster(sessionKey, masterId);
- ArrayList<IssMasterOrgs> orgs = new ArrayList<IssMasterOrgs>();
+ ArrayList<IssMasterOrg> orgs = new ArrayList<IssMasterOrg>();
orgs.addAll(master.getMasterOrgs());
return orgs;
}
@@ -204,9 +204,9 @@ public class MasterHandler extends BaseHandler {
Integer masterId,
List<Map<String, Object>> orgMaps) {
IssMaster master = getMaster(sessionKey, masterId);
- Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ Set<IssMasterOrg> orgs = new HashSet<IssMasterOrg>();
for (Map<String, Object> anOrgMap : orgMaps) {
- IssMasterOrgs o = validateOrg(anOrgMap);
+ IssMasterOrg o = validateOrg(anOrgMap);
orgs.add(o);
}
master.resetMasterOrgs(orgs);
@@ -239,7 +239,7 @@ public class MasterHandler extends BaseHandler {
Integer masterId,
Map<String, Object> newOrg) {
IssMaster master = getMaster(sessionKey, masterId);
- IssMasterOrgs org = validateOrg(newOrg);
+ IssMasterOrg org = validateOrg(newOrg);
master.addToMaster(org);
return 1;
}
@@ -269,7 +269,7 @@ public class MasterHandler extends BaseHandler {
boolean found = false;
IssMaster master = getMaster(sessionKey, masterId);
- Set<IssMasterOrgs> orgs = master.getMasterOrgs();
+ Set<IssMasterOrg> orgs = master.getMasterOrgs();
Org localOrg = OrgFactory.lookupById(localOrgId.longValue());
if (localOrg == null) {
@@ -277,7 +277,7 @@ public class MasterHandler extends BaseHandler {
"lookup.issmaster.local.title", "lookup.issmaster.local.reason1");
}
- for (IssMasterOrgs o : orgs) {
+ for (IssMasterOrg o : orgs) {
if (o.getMasterOrgId().equals(masterOrgId.longValue())) {
o.setLocalOrg(localOrg);
found = true;
@@ -302,7 +302,7 @@ public class MasterHandler extends BaseHandler {
return REQUIREDMASTERORGATTRS;
}
- private IssMasterOrgs validateOrg(Map<String, Object> anOrg) {
+ private IssMasterOrg validateOrg(Map<String, Object> anOrg) {
validateMap(getValidMasterOrgsAttrs(), anOrg);
Set<String> attrs = anOrg.keySet();
@@ -312,7 +312,7 @@ public class MasterHandler extends BaseHandler {
REQUIREDMASTERORGATTRS);
}
- IssMasterOrgs o = new IssMasterOrgs();
+ IssMasterOrg o = new IssMasterOrg();
for (String attr : attrs) {
if ("localOrgId".equals(attr)) {
Integer localId = (Integer)anOrg.get(attr);
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
index b95296b..67db63f 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
@@ -22,7 +22,7 @@ import java.util.Map;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssMaster;
-import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.iss.IssMasterOrg;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException;
import com.redhat.rhn.frontend.xmlrpc.sync.master.MasterHandler;
@@ -162,7 +162,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ List<IssMasterOrg> orgs = handler.getMasterOrgs(regularKey,
master.getId().intValue());
fail();
}
@@ -172,7 +172,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey,
+ List<IssMasterOrg> orgs = handler.getMasterOrgs(adminKey,
master.getId().intValue());
assertNotNull(orgs);
assertEquals(0, orgs.size());
@@ -191,7 +191,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ List<IssMasterOrg> orgs = handler.getMasterOrgs(regularKey,
master.getId().intValue());
fail();
}
@@ -200,7 +200,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// Make sure satellite-admin can
- List<IssMasterOrgs> orgs = null;
+ List<IssMasterOrg> orgs = null;
try {
orgs = handler.getMasterOrgs(adminKey, master.getId().intValue());
assertNotNull(orgs);
@@ -211,19 +211,19 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// OK, we got access - none of these IssMasterOrgs should be mapped
- for (IssMasterOrgs o : orgs) {
+ for (IssMasterOrg o : orgs) {
assertNull(o.getLocalOrg());
}
// OK, they're not mapped. Map them, and try again
- for (IssMasterOrgs o : orgs) {
+ for (IssMasterOrg o : orgs) {
o.setLocalOrg(admin.getOrg());
}
- master.resetMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ master.resetMasterOrgs(new HashSet<IssMasterOrg>(orgs));
orgs = handler.getMasterOrgs(adminKey, master.getId().intValue());
- for (IssMasterOrgs o : orgs) {
+ for (IssMasterOrg o : orgs) {
assertEquals(o.getLocalOrg().getId(), admin.getOrg().getId());
}
@@ -232,13 +232,13 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
public void testSetMasterOrgs() {
IssMaster master = handler.create(adminKey, "testCreate");
- List<IssMasterOrgs> someOrgs = getBareOrgs(true);
+ List<IssMasterOrg> someOrgs = getBareOrgs(true);
// Make sure that non-sat-admin users cannot access
try {
IssMaster m = handler.getMaster(adminKey, master.getId().intValue());
assertNotNull(m);
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ List<IssMasterOrg> orgs = handler.getMasterOrgs(regularKey,
master.getId().intValue());
fail();
}
@@ -262,7 +262,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// Make sure setting to one-new-one, really sets to one
- IssMasterOrgs org = new IssMasterOrgs();
+ IssMasterOrg org = new IssMasterOrg();
org.setMasterOrgName("newMasterOrg");
org.setMasterOrgId(1013L);
List<Map<String, Object>> mapOrgs = new ArrayList();
@@ -272,7 +272,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
m3.getId().intValue(),
mapOrgs);
assertEquals(1, rc);
- List<IssMasterOrgs> orgSet = handler.getMasterOrgs(adminKey,
+ List<IssMasterOrg> orgSet = handler.getMasterOrgs(adminKey,
master.getId().intValue());
assertNotNull(orgSet);
assertEquals(1, orgSet.size());
@@ -291,7 +291,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
public void testAddOrg() {
IssMaster master = handler.create(adminKey, "testCreate");
- IssMasterOrgs org = new IssMasterOrgs();
+ IssMasterOrg org = new IssMasterOrg();
org.setMasterOrgName("newMasterOrg");
org.setMasterOrgId(1001L);
@@ -309,10 +309,10 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
int rc = handler.addToMaster(adminKey, master.getId().intValue(),
orgToMap(org));
assertEquals(1, rc);
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey,
+ List<IssMasterOrg> orgs = handler.getMasterOrgs(adminKey,
master.getId().intValue());
boolean found = false;
- for (IssMasterOrgs o : orgs) {
+ for (IssMasterOrg o : orgs) {
found |= (1001L == o.getMasterOrgId() &&
"newMasterOrg".equals(o.getMasterOrgName()));
}
@@ -329,9 +329,9 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
IssFactory.save(master);
addOrgsTo(master, false);
- IssMasterOrgs masterOrg = null;
+ IssMasterOrg masterOrg = null;
- for (IssMasterOrgs o : master.getMasterOrgs()) {
+ for (IssMasterOrg o : master.getMasterOrgs()) {
if (masterOrgNames[1].equals(o.getMasterOrgName())) {
masterOrg = o;
}
@@ -353,7 +353,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
masterOrg.getMasterOrgId().intValue(),
admin.getOrg().getId().intValue());
assertEquals(1, rc);
- for (IssMasterOrgs o : master.getMasterOrgs()) {
+ for (IssMasterOrg o : master.getMasterOrgs()) {
if (masterOrgNames[1].equals(o.getMasterOrgName())) {
assertEquals(o.getLocalOrg(), admin.getOrg());
}
@@ -365,16 +365,16 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
private void addOrgsTo(IssMaster master, boolean map) {
- List<IssMasterOrgs> orgs = getBareOrgs(map);
- master.resetMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ List<IssMasterOrg> orgs = getBareOrgs(map);
+ master.resetMasterOrgs(new HashSet<IssMasterOrg>(orgs));
IssFactory.save(master);
}
- private List<IssMasterOrgs> getBareOrgs(boolean map) {
+ private List<IssMasterOrg> getBareOrgs(boolean map) {
long id = 1001L;
- List<IssMasterOrgs> orgs = new ArrayList();
+ List<IssMasterOrg> orgs = new ArrayList();
for (String name : masterOrgNames) {
- IssMasterOrgs org = new IssMasterOrgs();
+ IssMasterOrg org = new IssMasterOrg();
org.setMasterOrgName(name);
org.setMasterOrgId(id++);
if (map) {
@@ -386,16 +386,16 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// "masterId", "masterOrgId", "masterOrgName", "localOrgId"
- private List<Map<String, Object>> orgsToMaps(List<IssMasterOrgs> orgs) {
+ private List<Map<String, Object>> orgsToMaps(List<IssMasterOrg> orgs) {
List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
- for (IssMasterOrgs org : orgs) {
+ for (IssMasterOrg org : orgs) {
Map<String, Object> orgMap = orgToMap(org);
maps.add(orgMap);
}
return maps;
}
- private Map<String, Object> orgToMap(IssMasterOrgs org) {
+ private Map<String, Object> orgToMap(IssMasterOrg org) {
Map<String, Object> orgMap = new HashMap<String, Object>();
orgMap.put("masterOrgId", org.getMasterOrgId().intValue());
commit 1533ed6ac10338e4d5661fefb3c1b625e6e176a1
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 11 14:29:41 2013 -0400
ISS: XMLRPC doesn't recognize Long
XMLRPC wants Map input, not Objects
Set up serializers and register them
Fix Hibernate collection-mapping smeantics so they, like, work
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
index f48088b..00574f2 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
@@ -14,8 +14,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="label" column="LABEL" type="string" length="256" />
- <set name="masterOrgs" inverse="true" cascade="all">
- <key column="master_id"/>
+ <set name="masterOrgs"
+ inverse="true"
+ cascade="all-delete-orphan">
+ <key column="master_id" not-null="true"/>
<one-to-many class="com.redhat.rhn.domain.iss.IssMasterOrgs"/>
</set>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
index 4035921..7f2b0f2 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
@@ -16,6 +16,9 @@
*/
package com.redhat.rhn.domain.iss;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import com.redhat.rhn.frontend.dto.BaseDto;
@@ -31,7 +34,7 @@ public class IssMaster extends BaseDto {
private Long id;
private String label;
- private Set<IssMasterOrgs> masterOrgs;
+ private Set<IssMasterOrgs> masterOrgs = new HashSet<IssMasterOrgs>();
/**
* Getter for id
@@ -74,14 +77,67 @@ public class IssMaster extends BaseDto {
}
/**
- * Set the orgs for this master
+ * Set the orgs for this master - protected, we want callers to either add-to the list,
+ * or to give us a chance to do the Right Thing in terms of connecting the incoming
+ * orgs and this master. This API is used by Hibernate
* @param inOrgs orgs of the master that we know of
*/
- public void setMasterOrgs(Set<IssMasterOrgs> inOrgs) {
+ protected void setMasterOrgs(Set<IssMasterOrgs> inOrgs) {
this.masterOrgs = inOrgs;
}
/**
+ * Reset the orgs for this master to a new map
+ * @param inOrgs orgs of the master that we know of
+ */
+ public void resetMasterOrgs(Set<IssMasterOrgs> inOrgs) {
+ setMasterOrgsInternal(inOrgs, true);
+ }
+
+ /**
+ * Add a single new master-org, to this Master
+ * @param org org to be added
+ */
+ public void addToMaster(IssMasterOrgs org) {
+ Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ orgs.add(org);
+ setMasterOrgsInternal(orgs, false);
+ }
+
+ private void setMasterOrgsInternal(Set<IssMasterOrgs> inOrgs, boolean replace) {
+ // Make sure everything incoming points to "us"
+ Map<String, IssMasterOrgs> findIncoming = new HashMap<String, IssMasterOrgs>();
+ for (IssMasterOrgs org : inOrgs) {
+ findIncoming.put(org.getMasterOrgName(), org);
+ org.setMaster(this);
+ }
+
+ // If we're replacing, get rid of anything not in the incoming set
+ if (replace) {
+ this.masterOrgs.retainAll(inOrgs);
+ }
+
+ // Add to the Collection, letting Set "do the right thing" when master-orgs
+ // are the same
+ this.masterOrgs.addAll(inOrgs);
+
+ // Fix up local-orgs
+ setLocals(findIncoming);
+ }
+
+ // Make sure localOrgId is set correctly - we need this because having/not-having
+ // a local-org-id doesn't make a MasterOrg different in the equals/hash sense, so
+ // we can't rely on Set "doing the right thing" for it
+ private void setLocals(Map<String, IssMasterOrgs> findIncoming) {
+ for (IssMasterOrgs o : this.getMasterOrgs()) {
+ if (findIncoming.containsKey(o.getMasterOrgName())) {
+ IssMasterOrgs fromIncoming = findIncoming.get(o.getMasterOrgName());
+ o.setLocalOrg(fromIncoming.getLocalOrg());
+ }
+ }
+ }
+
+ /**
* How many orgs did Master tell us about? (NOTE: we add this because you can't
* do ${current.orgs.size} in the JSPs :( )
* @return number of orgs from this master we know of
@@ -104,4 +160,41 @@ public class IssMaster extends BaseDto {
return mappedSources;
}
+ /**
+ * @return hashCode based on id
+ */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ /**
+ * Equality based on id
+ * @param obj The Thing we're comparing against
+ * @return true if obj.Id equal our.Id, false else
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ IssMaster other = (IssMaster) obj;
+ if (id == null) {
+ if (other.id != null) {
+ return false;
+ }
+ }
+ else if (!id.equals(other.id)) {
+ return false;
+ }
+ return true;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
index 341faf3..b4ec866 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
@@ -16,7 +16,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<many-to-one name="master"
column="MASTER_ID" class="com.redhat.rhn.domain.iss.IssMaster"
- />
+ not-null="true"/>
<many-to-one name="localOrg"
column="LOCAL_ORG_ID" class="com.redhat.rhn.domain.org.Org"
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
index 8698e10..e5ef733 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
@@ -50,7 +50,7 @@ public class IssMasterOrgs extends BaseDto {
this.id = idIn;
}
- /**
+ /**
* Getter for masterOrgId
* @return Long to get
*/
@@ -99,19 +99,66 @@ public class IssMasterOrgs extends BaseDto {
}
/**
- *
- * @return master-node that owns this master-org
+ * What Master do we belong to?
+ * @return the master
*/
public IssMaster getMaster() {
return this.master;
}
/**
- *
- * @param masterIn master node that should own this org
+ * Assign us to a Master
+ * @param inMaster the master we should belong to
+ */
+ public void setMaster(IssMaster inMaster) {
+ this.master = inMaster;
+ }
+
+ /**
+ * @return hashCode based on master-org-id and master-org-name
+ */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((masterOrgId == null) ? 0 : masterOrgId.hashCode());
+ result = prime * result + ((masterOrgName == null) ? 0 : masterOrgName.hashCode());
+ return result;
+ }
+
+ /**
+ * Equality based on master-org-id and master-org-name - everything else is subject
+ * to change
+ * @param obj The Thing we're comparing against
+ * @return true if obj.masterOrg{Id,name} equal our.masterorg{Id,Name}, false else
*/
- public void setMaster(IssMaster masterIn) {
- this.master = masterIn;
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ IssMasterOrgs other = (IssMasterOrgs) obj;
+ if (masterOrgId == null) {
+ if (other.masterOrgId != null) {
+ return false;
+ }
+ }
+ else if (!masterOrgId.equals(other.masterOrgId)) {
+ return false;
+ }
+ if (masterOrgName == null) {
+ if (other.masterOrgName != null) {
+ return false;
+ }
+ }
+ else if (!masterOrgName.equals(other.masterOrgName)) {
+ return false;
+ }
+ return true;
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java
index 4ba1bf7..a762dcd 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/BaseHandler.java
@@ -15,9 +15,24 @@
package com.redhat.rhn.frontend.xmlrpc;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+
+import redstone.xmlrpc.XmlRpcFault;
+import redstone.xmlrpc.XmlRpcInvocationHandler;
+
import com.redhat.rhn.FaultException;
import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.translation.Translator;
+import com.redhat.rhn.common.util.MethodUtil;
import com.redhat.rhn.common.util.StringUtil;
import com.redhat.rhn.domain.entitlement.Entitlement;
import com.redhat.rhn.domain.org.OrgFactory;
@@ -29,20 +44,6 @@ import com.redhat.rhn.manager.entitlement.EntitlementManager;
import com.redhat.rhn.manager.satellite.CertificateManager;
import com.redhat.rhn.manager.session.SessionManager;
-import org.apache.log4j.Logger;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import redstone.xmlrpc.XmlRpcFault;
-import redstone.xmlrpc.XmlRpcInvocationHandler;
-
/**
* A basic xmlrpc handler class. Uses reflection + an arbitrary algorithm
* to call the appropriate method on a subclass. So, an xmlrpc call to
@@ -401,4 +402,20 @@ public class BaseHandler implements XmlRpcInvocationHandler {
throw new InvalidArgsException(errors);
}
}
+
+ /**
+ * Take an attributeName and value, and apply them to an Object.
+ * Takes advantage of introspection and bean-stds to decide what call to make
+ * @param attrName Attribute to set - assumes entity.set<Attrname>(value) exists
+ * @param entity The Object we are updating
+ * @param value The new value to pass to set<AttrName>
+ */
+ protected void setEntityAttribute(String attrName, Object entity, Object value) {
+ String methodName = StringUtil.beanify("set_" + attrName);
+ Object[] params = {
+ value
+ };
+ MethodUtil.callMethod(entity, methodName, params);
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
index 9174ab7..3a688ca 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
@@ -40,4 +40,5 @@
<template name="distchannel" classname="com.redhat.rhn.frontend.xmlrpc.distchannel.DistChannelHandler" />
<template name="taskomatic" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticHandler" />
<template name="taskomatic.org" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticOrgHandler" />
+ <template name="sync.master" classname="com.redhat.rhn.frontend.xmlrpc.sync.master.MasterHandler" />
</factory>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
index e8e378a..7b1937c 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
@@ -30,7 +30,6 @@ import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
*
* @xmlrpc.doc
* #struct("IssMasterOrgs info")
- * #prop("int", "masterId")
* #prop("int", "masterOrgId")
* #prop("string", "masterOrgName")
* #prop("int", "localOrgId")
@@ -53,7 +52,6 @@ public class IssMasterOrgsSerializer implements XmlRpcCustomSerializer {
SerializerHelper helper = new SerializerHelper(serializer);
IssMasterOrgs anOrg = (IssMasterOrgs) obj;
- helper.add("masterId", anOrg.getMaster().getId());
helper.add("masterOrgId", anOrg.getMasterOrgId());
helper.add("masterOrgName", anOrg.getMasterOrgName());
if (anOrg.getLocalOrg() != null) {
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
index e948c94..f84ccb5 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/SerializerRegistry.java
@@ -120,6 +120,8 @@ public class SerializerRegistry {
SERIALIZER_CLASSES.add(XccdfTestResultDtoSerializer.class);
SERIALIZER_CLASSES.add(XccdfTestResultSerializer.class);
SERIALIZER_CLASSES.add(XccdfRuleResultDtoSerializer.class);
+ SERIALIZER_CLASSES.add(IssMasterSerializer.class);
+ SERIALIZER_CLASSES.add(IssMasterOrgsSerializer.class);
}
/**
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
index c56e9d5..95beaa3 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
@@ -43,8 +43,6 @@ public class IssMasterSerializerTest extends MockObjectTestCase {
os.serialize(org, output, new XmlRpcSerializer());
String result = output.toString();
assertEquals(os.getSupportedClass(), IssMasterOrgs.class);
- assertTrue(result.contains("<name>masterId</name>"));
- assertTrue(result.contains(">" + master.getId() + "<"));
assertTrue(result.contains("name>masterOrgId</name"));
assertTrue(result.contains(">" + org.getMasterOrgId() + "<"));
assertTrue(result.contains("name>masterOrgName</name"));
@@ -60,7 +58,6 @@ public class IssMasterSerializerTest extends MockObjectTestCase {
Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
for (String orgName : masterOrgNames) {
IssMasterOrgs anOrg = new IssMasterOrgs();
- anOrg.setMaster(master);
anOrg.setMasterOrgId(baseId++);
anOrg.setMasterOrgName(orgName);
anOrg.setLocalOrg(null);
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
index 527e50a..b8ff98d 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
@@ -15,10 +15,13 @@
package com.redhat.rhn.frontend.xmlrpc.sync.master;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import com.redhat.rhn.FaultException;
import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.domain.iss.IssFactory;
@@ -34,12 +37,29 @@ import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
*
* @version $Rev$
*
- * @xmlrpc.namespace iss.master
+ * @xmlrpc.namespace sync.master
* @xmlrpc.doc Contains methods to set up information about known-"masters", for use
* on the "slave" side of ISS
*/
public class MasterHandler extends BaseHandler {
+ public static final String[] VALID_MASTER_ORG_ATTRS = {
+ "masterId", "masterOrgId", "masterOrgName", "localOrgId"
+ };
+ private static final Set<String> VALIDMASTERORGATTR;
+ static {
+ VALIDMASTERORGATTR = new HashSet<String>(Arrays.asList(VALID_MASTER_ORG_ATTRS));
+ }
+
+ public static final String[] REQUIRED_MASTER_ORG_ATTRS = {
+ "masterOrgId", "masterOrgName"
+ };
+ private static final Set<String> REQUIREDMASTERORGATTRS;
+ static {
+ REQUIREDMASTERORGATTRS =
+ new HashSet<String>(Arrays.asList(REQUIRED_MASTER_ORG_ATTRS));
+ }
+
/**
* Create a new Master, known to this Slave.
* @param sessionKey User's session key.
@@ -74,7 +94,7 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.param #param_desc("string", "label", "Desired new label")
* @xmlrpc.returntype $IssMasterSerializer
*/
- public IssMaster update(String sessionKey, Long masterId, String newLabel) {
+ public IssMaster update(String sessionKey, Integer masterId, String newLabel) {
IssMaster master = getMaster(sessionKey, masterId);
master.setLabel(newLabel);
IssFactory.save(master);
@@ -93,7 +113,7 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.param #param_desc("int", "id", "Id of the Master to remove")
* @xmlrpc.returntype #return_int_success()
*/
- public int delete(String sessionKey, Long masterId) {
+ public int delete(String sessionKey, Integer masterId) {
IssMaster master = getMaster(sessionKey, masterId);
IssFactory.delete(master);
return 1;
@@ -110,10 +130,10 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
* @xmlrpc.returntype $IssMasterSerializer
*/
- public IssMaster getMaster(String sessionKey, Long masterId) {
+ public IssMaster getMaster(String sessionKey, Integer masterId) {
User u = getLoggedInUser(sessionKey);
ensureSatAdmin(u);
- IssMaster master = IssFactory.lookupMasterById(masterId);
+ IssMaster master = IssFactory.lookupMasterById(masterId.longValue());
validateExists(master, masterId.toString());
return master;
}
@@ -152,9 +172,11 @@ public class MasterHandler extends BaseHandler {
* $IssMasterOrgsSerializer
* #array_end()
*/
- public List<IssMasterOrgs> getMasterOrgs(String sessionKey, Long masterId) {
+ public List<IssMasterOrgs> getMasterOrgs(String sessionKey, Integer masterId) {
IssMaster master = getMaster(sessionKey, masterId);
- return new ArrayList<IssMasterOrgs>(master.getMasterOrgs());
+ ArrayList<IssMasterOrgs> orgs = new ArrayList<IssMasterOrgs>();
+ orgs.addAll(master.getMasterOrgs());
+ return orgs;
}
/**
@@ -162,7 +184,7 @@ public class MasterHandler extends BaseHandler {
*
* @param sessionKey User's session key.
* @param masterId Id of the Master to look for
- * @param orgs List of MasterOrgs we know about
+ * @param orgMaps List of MasterOrgs we know about
* @return 1 if successful, exception otherwise
*
* @xmlrpc.doc List all organizations the specified Master has exported to this Slave
@@ -170,17 +192,24 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
* @xmlrpc.param
* #array()
- * $IssMasterOrgsSerializer
+ * #struct("master-org details")
+ * #prop("int", "masterOrgId")
+ * #prop("string", "masterOrgName")
+ * #prop("int", "localOrgId")
+ * #struct_end()
* #array_end()
* @xmlrpc.returntype #return_int_success()
*/
- public int setMasterOrgs(String sessionKey, Long masterId, List<IssMasterOrgs> orgs) {
+ public int setMasterOrgs(String sessionKey,
+ Integer masterId,
+ List<Map<String, Object>> orgMaps) {
IssMaster master = getMaster(sessionKey, masterId);
- for (IssMasterOrgs o : orgs) {
- o.setMaster(master);
+ Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ for (Map<String, Object> anOrgMap : orgMaps) {
+ IssMasterOrgs o = validateOrg(anOrgMap);
+ orgs.add(o);
}
- master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
- IssFactory.save(master);
+ master.resetMasterOrgs(orgs);
return 1;
}
@@ -196,18 +225,22 @@ public class MasterHandler extends BaseHandler {
* @xmlrpc.doc Add a single organizations to the list of those the specified Master has
* exported to this Slave
* @xmlrpc.param #param("string", "sessionKey")
- * @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
- * @xmlrpc.param #param("newOrg", $IssMasterOrgsSerializer)
+ * @xmlrpc.param #param_desc("long", "id", "Id of the desired Master")
+ * @xmlrpc.param #param("newOrg",
+ * #struct("master-org details")
+ * #prop("int", "masterOrgId")
+ * #prop("string", "masterOrgName")
+ * #prop("int", "localOrgId")
+ * #struct_end()
* @xmlrpc.returntype #return_int_success()
*
*/
- public int addToMaster(String sessionKey, Long masterId, IssMasterOrgs newOrg) {
+ public int addToMaster(String sessionKey,
+ Integer masterId,
+ Map<String, Object> newOrg) {
IssMaster master = getMaster(sessionKey, masterId);
- newOrg.setMaster(master);
- Set<IssMasterOrgs> orgs = master.getMasterOrgs();
- orgs.add(newOrg);
- master.setMasterOrgs(orgs);
- IssFactory.save(master);
+ IssMasterOrgs org = validateOrg(newOrg);
+ master.addToMaster(org);
return 1;
}
@@ -230,22 +263,22 @@ public class MasterHandler extends BaseHandler {
*
*/
public int mapToLocal(String sessionKey,
- Long masterId,
- Long masterOrgId,
- Long localOrgId) {
+ Integer masterId,
+ Integer masterOrgId,
+ Integer localOrgId) {
boolean found = false;
IssMaster master = getMaster(sessionKey, masterId);
Set<IssMasterOrgs> orgs = master.getMasterOrgs();
- Org localOrg = OrgFactory.lookupById(localOrgId);
+ Org localOrg = OrgFactory.lookupById(localOrgId.longValue());
if (localOrg == null) {
fail("Unable to locate or access Local Organization :" + localOrgId,
"lookup.issmaster.local.title", "lookup.issmaster.local.reason1");
}
for (IssMasterOrgs o : orgs) {
- if (o.getMasterOrgId().equals(masterOrgId)) {
+ if (o.getMasterOrgId().equals(masterOrgId.longValue())) {
o.setLocalOrg(localOrg);
found = true;
break;
@@ -261,6 +294,43 @@ public class MasterHandler extends BaseHandler {
return 1;
}
+ private static Set<String> getValidMasterOrgsAttrs() {
+ return VALIDMASTERORGATTR;
+ }
+
+ private static Set<String> getRequiredMasterOrgsAttrs() {
+ return REQUIREDMASTERORGATTRS;
+ }
+
+ private IssMasterOrgs validateOrg(Map<String, Object> anOrg) {
+ validateMap(getValidMasterOrgsAttrs(), anOrg);
+ Set<String> attrs = anOrg.keySet();
+
+ if (!attrs.containsAll(getRequiredMasterOrgsAttrs())) {
+ throw new FaultException(-6, "requiredOptionMissing",
+ "Required option missing. List of required options: " +
+ REQUIREDMASTERORGATTRS);
+ }
+
+ IssMasterOrgs o = new IssMasterOrgs();
+ for (String attr : attrs) {
+ if ("localOrgId".equals(attr)) {
+ Integer localId = (Integer)anOrg.get(attr);
+ Org local = OrgFactory.lookupById(localId.longValue());
+ o.setLocalOrg(local);
+ }
+ else if ("masterOrgId".equals(attr)) {
+ Integer moId = (Integer)anOrg.get(attr);
+ o.setMasterOrgId(moId.longValue());
+ }
+ else {
+ setEntityAttribute(attr, o, anOrg.get(attr));
+ }
+ }
+
+ return o;
+ }
+
private void validateExists(IssMaster master, String srchString) {
if (master == null) {
fail("Unable to locate or access ISS Master : " + srchString,
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
index 0c72c9d..b95296b 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
@@ -15,8 +15,10 @@
package com.redhat.rhn.frontend.xmlrpc.sync.master.test;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssMaster;
@@ -62,7 +64,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
IssMaster updMaster = handler.update(regularKey,
- master.getId(),
+ master.getId().intValue(),
"testCreateNew");
fail();
}
@@ -72,7 +74,8 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
- IssMaster updMaster = handler.update(adminKey, master.getId(), "testCreateNew");
+ IssMaster updMaster = handler.update(adminKey, master.getId().intValue(),
+ "testCreateNew");
assertEquals("testCreateNew", updMaster.getLabel());
assertEquals(master.getId(), updMaster.getId());
}
@@ -87,7 +90,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- int rmvd = handler.delete(regularKey, master.getId());
+ int rmvd = handler.delete(regularKey, master.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
@@ -96,7 +99,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
- int rmvd = handler.delete(adminKey, master.getId());
+ int rmvd = handler.delete(adminKey, master.getId().intValue());
assertEquals(1, rmvd);
}
catch (PermissionCheckFailureException e) {
@@ -110,7 +113,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
public void testGetMaster() {
IssMaster master = handler.create(adminKey, "testCreate");
- Long mstrId = master.getId();
+ Integer mstrId = master.getId().intValue();
// Make sure that non-sat-admin users cannot access
try {
@@ -124,7 +127,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
IssMaster gotMaster = handler.getMaster(adminKey, mstrId);
- assertEquals(mstrId, gotMaster.getId());
+ assertEquals(mstrId.intValue(), gotMaster.getId().intValue());
}
catch (PermissionCheckFailureException e) {
fail();
@@ -159,7 +162,8 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ master.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
@@ -168,7 +172,8 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey, master.getId());
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey,
+ master.getId().intValue());
assertNotNull(orgs);
assertEquals(0, orgs.size());
assertEquals(master.getNumMasterOrgs(), orgs.size());
@@ -186,7 +191,8 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ master.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
@@ -196,7 +202,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
List<IssMasterOrgs> orgs = null;
try {
- orgs = handler.getMasterOrgs(adminKey, master.getId());
+ orgs = handler.getMasterOrgs(adminKey, master.getId().intValue());
assertNotNull(orgs);
assertEquals(masterOrgNames.length, orgs.size());
}
@@ -214,9 +220,9 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
o.setLocalOrg(admin.getOrg());
}
- master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ master.resetMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
- orgs = handler.getMasterOrgs(adminKey, master.getId());
+ orgs = handler.getMasterOrgs(adminKey, master.getId().intValue());
for (IssMasterOrgs o : orgs) {
assertEquals(o.getLocalOrg().getId(), admin.getOrg().getId());
}
@@ -230,9 +236,10 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- IssMaster m = handler.getMaster(adminKey, master.getId());
+ IssMaster m = handler.getMaster(adminKey, master.getId().intValue());
assertNotNull(m);
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey,
+ master.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
@@ -241,25 +248,42 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure satellite-admin can
try {
- IssMaster m = handler.getMaster(adminKey, master.getId());
+ IssMaster m = handler.getMaster(adminKey, master.getId().intValue());
assertNotNull(m);
assertEquals(0, m.getNumMasterOrgs());
- int rc = handler.setMasterOrgs(adminKey, m.getId(), someOrgs);
+ int rc = handler.setMasterOrgs(adminKey, m.getId().intValue(),
+ orgsToMaps(someOrgs));
assertEquals(1, rc);
- IssMaster m2 = handler.getMaster(adminKey, master.getId());
+ IssMaster m2 = handler.getMaster(adminKey, master.getId().intValue());
assertEquals(someOrgs.size(), m2.getNumMasterOrgs());
}
catch (PermissionCheckFailureException e) {
fail();
}
- // Make sure resetting to "empty" works
- IssMaster m = handler.getMaster(adminKey, master.getId());
+ // Make sure setting to one-new-one, really sets to one
+ IssMasterOrgs org = new IssMasterOrgs();
+ org.setMasterOrgName("newMasterOrg");
+ org.setMasterOrgId(1013L);
+ List<Map<String, Object>> mapOrgs = new ArrayList();
+ mapOrgs.add(orgToMap(org));
+ IssMaster m3 = handler.getMaster(adminKey, master.getId().intValue());
int rc = handler.setMasterOrgs(adminKey,
- m.getId(),
- new ArrayList<IssMasterOrgs>());
+ m3.getId().intValue(),
+ mapOrgs);
assertEquals(1, rc);
- List<IssMasterOrgs> orgSet = handler.getMasterOrgs(adminKey, master.getId());
+ List<IssMasterOrgs> orgSet = handler.getMasterOrgs(adminKey,
+ master.getId().intValue());
+ assertNotNull(orgSet);
+ assertEquals(1, orgSet.size());
+
+ // Make sure resetting to "empty" works
+ IssMaster m4 = handler.getMaster(adminKey, master.getId().intValue());
+ rc = handler.setMasterOrgs(adminKey,
+ m4.getId().intValue(),
+ new ArrayList<Map<String, Object>>());
+ assertEquals(1, rc);
+ orgSet = handler.getMasterOrgs(adminKey, master.getId().intValue());
assertNotNull(orgSet);
assertEquals(0, orgSet.size());
@@ -273,7 +297,8 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- int rc = handler.addToMaster(regularKey, master.getId(), org);
+ int rc = handler.addToMaster(regularKey, master.getId().intValue(),
+ orgToMap(org));
fail();
}
catch (PermissionCheckFailureException e) {
@@ -281,10 +306,17 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// Make sure satellite-admin can
try {
- int rc = handler.addToMaster(adminKey, master.getId(), org);
+ int rc = handler.addToMaster(adminKey, master.getId().intValue(),
+ orgToMap(org));
assertEquals(1, rc);
- List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey, master.getId());
- assertTrue(orgs.contains(org));
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey,
+ master.getId().intValue());
+ boolean found = false;
+ for (IssMasterOrgs o : orgs) {
+ found |= (1001L == o.getMasterOrgId() &&
+ "newMasterOrg".equals(o.getMasterOrgName()));
+ }
+ assertTrue(found);
}
catch (PermissionCheckFailureException e) {
fail();
@@ -307,9 +339,9 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
// Make sure that non-sat-admin users cannot access
try {
- int rc = handler.mapToLocal(regularKey, master.getId(),
- masterOrg.getMasterOrgId(),
- admin.getOrg().getId());
+ int rc = handler.mapToLocal(regularKey, master.getId().intValue(),
+ masterOrg.getMasterOrgId().intValue(),
+ admin.getOrg().getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
@@ -317,9 +349,9 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
// Make sure satellite-admin can
try {
- int rc = handler.mapToLocal(adminKey, master.getId(),
- masterOrg.getMasterOrgId(),
- admin.getOrg().getId());
+ int rc = handler.mapToLocal(adminKey, master.getId().intValue(),
+ masterOrg.getMasterOrgId().intValue(),
+ admin.getOrg().getId().intValue());
assertEquals(1, rc);
for (IssMasterOrgs o : master.getMasterOrgs()) {
if (masterOrgNames[1].equals(o.getMasterOrgName())) {
@@ -334,10 +366,7 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
private void addOrgsTo(IssMaster master, boolean map) {
List<IssMasterOrgs> orgs = getBareOrgs(map);
- for (IssMasterOrgs o : orgs) {
- o.setMaster(master);
- }
- master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ master.resetMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
IssFactory.save(master);
}
@@ -355,4 +384,25 @@ public class MasterHandlerTest extends BaseHandlerTestCase {
}
return orgs;
}
+
+ // "masterId", "masterOrgId", "masterOrgName", "localOrgId"
+ private List<Map<String, Object>> orgsToMaps(List<IssMasterOrgs> orgs) {
+ List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
+ for (IssMasterOrgs org : orgs) {
+ Map<String, Object> orgMap = orgToMap(org);
+ maps.add(orgMap);
+ }
+ return maps;
+ }
+
+ private Map<String, Object> orgToMap(IssMasterOrgs org) {
+ Map<String, Object> orgMap = new HashMap<String, Object>();
+
+ orgMap.put("masterOrgId", org.getMasterOrgId().intValue());
+ orgMap.put("masterOrgName", org.getMasterOrgName());
+ if (org.getLocalOrg() != null) {
+ orgMap.put("localOrgId", org.getLocalOrg().getId().intValue());
+ }
+ return orgMap;
+ }
}
commit 4ae41e46f073d0c47e4298a8f54af9dd631bde77
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri Jun 7 15:21:27 2013 -0400
Add XMLRPC API for Master side of ISS
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
index bc04b4b..2990efe 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
@@ -81,7 +81,7 @@ public class IssFactory extends HibernateFactory {
}
/***
- * IssOrgCatalogue helpers
+ * IssMaster helpers
***/
/**
@@ -97,6 +97,18 @@ public class IssFactory extends HibernateFactory {
}
/**
+ * Lookup a IssMaster by its name
+ * @param label the label of the desired master
+ * @return the IssMaster entry found
+ */
+ public static IssMaster lookupMasterByLabel(String label) {
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("label", label);
+ return (IssMaster) singleton.lookupObjectByNamedQuery(
+ "IssMaster.findByLabel", params);
+ }
+
+ /**
* List all IssMaster entries for this Slave
* @return list of all masters known to this slave
*/
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
index 50b5572..f48088b 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
@@ -25,6 +25,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[from com.redhat.rhn.domain.iss.IssMaster as m where m.id = :id]]>
</query>
+ <query name="IssMaster.findByLabel">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssMaster as m where m.label = :label]]>
+ </query>
+
<query name="IssMaster.lookupAll">
<![CDATA[from com.redhat.rhn.domain.iss.IssMaster]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
new file mode 100644
index 0000000..e8e378a
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterOrgsSerializer.java
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2009--2011 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.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+/**
+ * IssMasterOrgsSerializer
+ * @version $Rev$
+ *
+ * @xmlrpc.doc
+ * #struct("IssMasterOrgs info")
+ * #prop("int", "masterId")
+ * #prop("int", "masterOrgId")
+ * #prop("string", "masterOrgName")
+ * #prop("int", "localOrgId")
+ * #struct_end()
+ */
+public class IssMasterOrgsSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return IssMasterOrgs.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object obj, Writer writer, XmlRpcSerializer serializer)
+ throws XmlRpcException, IOException {
+ SerializerHelper helper = new SerializerHelper(serializer);
+
+ IssMasterOrgs anOrg = (IssMasterOrgs) obj;
+ helper.add("masterId", anOrg.getMaster().getId());
+ helper.add("masterOrgId", anOrg.getMasterOrgId());
+ helper.add("masterOrgName", anOrg.getMasterOrgName());
+ if (anOrg.getLocalOrg() != null) {
+ helper.add("localOrgId", anOrg.getLocalOrg().getId());
+
+ }
+ helper.writeTo(writer);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterSerializer.java
new file mode 100644
index 0000000..754233f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/IssMasterSerializer.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2009--2011 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.serializer;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+
+/**
+ * IssMasterSerializer
+ * @version $Rev$
+ *
+ * @xmlrpc.doc
+ * #struct("IssMaster info")
+ * #prop("int", "id")
+ * #prop("string", "label")
+ * #struct_end()
+ */
+public class IssMasterSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return IssMaster.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object obj, Writer writer, XmlRpcSerializer serializer)
+ throws XmlRpcException, IOException {
+ SerializerHelper helper = new SerializerHelper(serializer);
+
+ IssMaster master = (IssMaster) obj;
+ helper.add("id", master.getId());
+ helper.add("label", master.getLabel());
+ helper.writeTo(writer);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
new file mode 100644
index 0000000..c56e9d5
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/test/IssMasterSerializerTest.java
@@ -0,0 +1,74 @@
+package com.redhat.rhn.frontend.xmlrpc.serializer.test;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jmock.MockObjectTestCase;
+
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.frontend.xmlrpc.serializer.IssMasterOrgsSerializer;
+import com.redhat.rhn.frontend.xmlrpc.serializer.IssMasterSerializer;
+
+public class IssMasterSerializerTest extends MockObjectTestCase {
+ private String[] masterOrgNames = {"masterOrg1", "masterOrg2", "masterOrg3"};
+
+ public void testMasterSerialize() throws XmlRpcException, IOException {
+ IssMasterSerializer os = new IssMasterSerializer();
+ IssMaster master = setUpMaster();
+
+ Writer output = new StringWriter();
+ os.serialize(master, output, new XmlRpcSerializer());
+ String result = output.toString();
+ assertEquals(os.getSupportedClass(), IssMaster.class);
+ assertTrue(result.contains("<name>id</name>"));
+ assertTrue(result.contains(">" + master.getId() + "<"));
+ assertTrue(result.contains("name>label</name"));
+ assertTrue(result.contains(">" + master.getLabel() + "<"));
+ }
+
+ public void testMasterOrgsSerialize() throws XmlRpcException, IOException {
+ IssMasterOrgsSerializer os = new IssMasterOrgsSerializer();
+ IssMaster master = setUpMaster();
+ IssMasterOrgs org = master.getMasterOrgs().toArray(new IssMasterOrgs[0])[0];
+
+ Writer output = new StringWriter();
+ os.serialize(org, output, new XmlRpcSerializer());
+ String result = output.toString();
+ assertEquals(os.getSupportedClass(), IssMasterOrgs.class);
+ assertTrue(result.contains("<name>masterId</name>"));
+ assertTrue(result.contains(">" + master.getId() + "<"));
+ assertTrue(result.contains("name>masterOrgId</name"));
+ assertTrue(result.contains(">" + org.getMasterOrgId() + "<"));
+ assertTrue(result.contains("name>masterOrgName</name"));
+ assertTrue(result.contains(">" + org.getMasterOrgName() + "<"));
+
+ }
+
+ private IssMaster setUpMaster() {
+ long baseId = 1001L;
+
+ IssMaster master = new IssMaster();
+ master.setLabel("testMaster");
+ Set<IssMasterOrgs> orgs = new HashSet<IssMasterOrgs>();
+ for (String orgName : masterOrgNames) {
+ IssMasterOrgs anOrg = new IssMasterOrgs();
+ anOrg.setMaster(master);
+ anOrg.setMasterOrgId(baseId++);
+ anOrg.setMasterOrgName(orgName);
+ anOrg.setLocalOrg(null);
+ orgs.add(anOrg);
+ }
+ master.setMasterOrgs(orgs);
+ IssFactory.save(master);
+ return master;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
new file mode 100644
index 0000000..527e50a
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/MasterHandler.java
@@ -0,0 +1,279 @@
+/**
+ * Copyright (c) 2013 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.sync.master;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.redhat.rhn.common.hibernate.LookupException;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
+
+/**
+ * MasterHandler
+ *
+ * @version $Rev$
+ *
+ * @xmlrpc.namespace iss.master
+ * @xmlrpc.doc Contains methods to set up information about known-"masters", for use
+ * on the "slave" side of ISS
+ */
+public class MasterHandler extends BaseHandler {
+
+ /**
+ * Create a new Master, known to this Slave.
+ * @param sessionKey User's session key.
+ * @param label Master's fully-qualified domain name
+ * @return Newly created ISSMaster object.
+ *
+ * @xmlrpc.doc Create a new Master, known to this Slave.
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("string", "label", "Master's fully-qualified domain name")
+ * @xmlrpc.returntype $IssMasterSerializer
+ */
+ public IssMaster create(String sessionKey, String label) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ IssMaster master = new IssMaster();
+ master.setLabel(label);
+ IssFactory.save(master);
+ master = (IssMaster) IssFactory.reload(master);
+ return master;
+ }
+
+ /**
+ * Updates the label of the specified Master
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to update
+ * @param newLabel new label
+ * @return updated IssMaster
+ *
+ * @xmlrpc.doc Updates the label of the specified Master
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the Master to update")
+ * @xmlrpc.param #param_desc("string", "label", "Desired new label")
+ * @xmlrpc.returntype $IssMasterSerializer
+ */
+ public IssMaster update(String sessionKey, Long masterId, String newLabel) {
+ IssMaster master = getMaster(sessionKey, masterId);
+ master.setLabel(newLabel);
+ IssFactory.save(master);
+ return master;
+ }
+
+ /**
+ * Removes a specified Master
+ *
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to remove
+ * @return 1 on success, exception otherwise
+ *
+ * @xmlrpc.doc Remove the specified Master
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the Master to remove")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int delete(String sessionKey, Long masterId) {
+ IssMaster master = getMaster(sessionKey, masterId);
+ IssFactory.delete(master);
+ return 1;
+ }
+
+ /**
+ * Find a Master by specifying its ID
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to look for
+ * @return the specified Master if found, exception otherwise
+ *
+ * @xmlrpc.doc Remove the specified Master
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
+ * @xmlrpc.returntype $IssMasterSerializer
+ */
+ public IssMaster getMaster(String sessionKey, Long masterId) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ IssMaster master = IssFactory.lookupMasterById(masterId);
+ validateExists(master, masterId.toString());
+ return master;
+ }
+
+ /**
+ * Find a Master by specifying its label
+ * @param sessionKey User's session key.
+ * @param masterLabel Label of the Master to look for
+ * @return the specified Master if found, exception otherwise
+ *
+ * @xmlrpc.doc Remove the specified Master
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("string", "label", "Label of the desired Master")
+ * @xmlrpc.returntype $IssMasterSerializer
+ */
+ public IssMaster getMasterByLabel(String sessionKey, String masterLabel) {
+ User u = getLoggedInUser(sessionKey);
+ ensureSatAdmin(u);
+ IssMaster master = IssFactory.lookupMasterByLabel(masterLabel);
+ validateExists(master, masterLabel);
+ return master;
+ }
+
+ /**
+ * List all organizations the specified Master has exported to this Slave
+ *
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to look for
+ * @return List of MasterOrgs we know about
+ *
+ * @xmlrpc.doc List all organizations the specified Master has exported to this Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
+ * @xmlrpc.returntype
+ * #array()
+ * $IssMasterOrgsSerializer
+ * #array_end()
+ */
+ public List<IssMasterOrgs> getMasterOrgs(String sessionKey, Long masterId) {
+ IssMaster master = getMaster(sessionKey, masterId);
+ return new ArrayList<IssMasterOrgs>(master.getMasterOrgs());
+ }
+
+ /**
+ * Reset all organizations the specified Master has exported to this Slave
+ *
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to look for
+ * @param orgs List of MasterOrgs we know about
+ * @return 1 if successful, exception otherwise
+ *
+ * @xmlrpc.doc List all organizations the specified Master has exported to this Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
+ * @xmlrpc.param
+ * #array()
+ * $IssMasterOrgsSerializer
+ * #array_end()
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int setMasterOrgs(String sessionKey, Long masterId, List<IssMasterOrgs> orgs) {
+ IssMaster master = getMaster(sessionKey, masterId);
+ for (IssMasterOrgs o : orgs) {
+ o.setMaster(master);
+ }
+ master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ IssFactory.save(master);
+ return 1;
+ }
+
+ /**
+ * Add a single organizations to the list of those the specified Master has
+ * exported to this Slave
+ *
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to look for
+ * @param newOrg new master-organization to add
+ * @return 1 if success, exception otherwise
+ *
+ * @xmlrpc.doc Add a single organizations to the list of those the specified Master has
+ * exported to this Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "id", "Id of the desired Master")
+ * @xmlrpc.param #param("newOrg", $IssMasterOrgsSerializer)
+ * @xmlrpc.returntype #return_int_success()
+ *
+ */
+ public int addToMaster(String sessionKey, Long masterId, IssMasterOrgs newOrg) {
+ IssMaster master = getMaster(sessionKey, masterId);
+ newOrg.setMaster(master);
+ Set<IssMasterOrgs> orgs = master.getMasterOrgs();
+ orgs.add(newOrg);
+ master.setMasterOrgs(orgs);
+ IssFactory.save(master);
+ return 1;
+ }
+
+ /**
+ * Map a given master-organization to a specific local-organization
+ *
+ * @param sessionKey User's session key.
+ * @param masterId Id of the Master to look for
+ * @param masterOrgId id of the master-organization to work with
+ * @param localOrgId id of the local organization to map to masterOrgId
+ * @return 1 if success, exception otherwise
+ *
+ * @xmlrpc.doc Add a single organizations to the list of those the specified Master has
+ * exported to this Slave
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param_desc("int", "masterId", "Id of the desired Master")
+ * @xmlrpc.param #param_desc("int", "masterOrgId", "Id of the desired Master")
+ * @xmlrpc.param #param_desc("int", "localOrgId", "Id of the desired Master")
+ * @xmlrpc.returntype #return_int_success()
+ *
+ */
+ public int mapToLocal(String sessionKey,
+ Long masterId,
+ Long masterOrgId,
+ Long localOrgId) {
+ boolean found = false;
+
+ IssMaster master = getMaster(sessionKey, masterId);
+ Set<IssMasterOrgs> orgs = master.getMasterOrgs();
+
+ Org localOrg = OrgFactory.lookupById(localOrgId);
+ if (localOrg == null) {
+ fail("Unable to locate or access Local Organization :" + localOrgId,
+ "lookup.issmaster.local.title", "lookup.issmaster.local.reason1");
+ }
+
+ for (IssMasterOrgs o : orgs) {
+ if (o.getMasterOrgId().equals(masterOrgId)) {
+ o.setLocalOrg(localOrg);
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ fail("Unable to locate or access ISS Master Organization : " + masterOrgId,
+ "lookup.issmasterorg.title", "lookup.issmasterorg.reason1");
+ }
+
+ IssFactory.save(master);
+ return 1;
+ }
+
+ private void validateExists(IssMaster master, String srchString) {
+ if (master == null) {
+ fail("Unable to locate or access ISS Master : " + srchString,
+ "lookup.issmaster.title", "lookup.issmaster.reason1");
+ }
+ }
+
+ private void fail(String msg, String titleKey, String reasonKey) {
+ LocalizationService ls = LocalizationService.getInstance();
+ LookupException e = new LookupException(msg);
+ e.setLocalizedTitle(ls.getMessage(titleKey));
+ e.setLocalizedReason1(ls.getMessage(reasonKey));
+ throw e;
+
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
new file mode 100644
index 0000000..0c72c9d
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/sync/master/test/MasterHandlerTest.java
@@ -0,0 +1,358 @@
+/**
+ * Copyright (c) 2013 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.sync.master.test;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.role.RoleFactory;
+import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException;
+import com.redhat.rhn.frontend.xmlrpc.sync.master.MasterHandler;
+import com.redhat.rhn.frontend.xmlrpc.test.BaseHandlerTestCase;
+
+public class MasterHandlerTest extends BaseHandlerTestCase {
+
+ private MasterHandler handler = new MasterHandler();
+ private String[] masterOrgNames = {"masterOrg01", "masterOrg02", "masterOrg03"};
+
+ public void setUp() throws Exception {
+ super.setUp();
+ admin.addRole(RoleFactory.SAT_ADMIN);
+ }
+
+ public void testCreate() {
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssMaster master = handler.create(regularKey, "testCreate");
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssMaster master = handler.create(adminKey, "testCreate");
+ assertEquals("testCreate", master.getLabel());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testUpdate() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssMaster updMaster = handler.update(regularKey,
+ master.getId(),
+ "testCreateNew");
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssMaster updMaster = handler.update(adminKey, master.getId(), "testCreateNew");
+ assertEquals("testCreateNew", updMaster.getLabel());
+ assertEquals(master.getId(), updMaster.getId());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testDelete() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+ Long mstrId = master.getId();
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ int rmvd = handler.delete(regularKey, master.getId());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ int rmvd = handler.delete(adminKey, master.getId());
+ assertEquals(1, rmvd);
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+
+ // Make sure it's actually gone
+ IssMaster mstr = IssFactory.lookupMasterById(mstrId);
+ assertNull(mstr);
+ }
+
+ public void testGetMaster() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+ Long mstrId = master.getId();
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssMaster gotMaster = handler.getMaster(regularKey, mstrId);
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssMaster gotMaster = handler.getMaster(adminKey, mstrId);
+ assertEquals(mstrId, gotMaster.getId());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testGetMasterByLabel() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssMaster gotMaster = handler.getMasterByLabel(regularKey, "testCreate");
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssMaster gotMaster = handler.getMasterByLabel(adminKey, "testCreate");
+ assertNotNull(gotMaster);
+ assertEquals("testCreate", gotMaster.getLabel());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testGetMasterOrgs() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey, master.getId());
+ assertNotNull(orgs);
+ assertEquals(0, orgs.size());
+ assertEquals(master.getNumMasterOrgs(), orgs.size());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testMappedMasterOrgs() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+ addOrgsTo(master, false);
+ assertEquals(0, master.getNumMappedMasterOrgs());
+ assertEquals(masterOrgNames.length, master.getNumMasterOrgs());
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ List<IssMasterOrgs> orgs = null;
+ try {
+ orgs = handler.getMasterOrgs(adminKey, master.getId());
+ assertNotNull(orgs);
+ assertEquals(masterOrgNames.length, orgs.size());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+
+ // OK, we got access - none of these IssMasterOrgs should be mapped
+ for (IssMasterOrgs o : orgs) {
+ assertNull(o.getLocalOrg());
+ }
+
+ // OK, they're not mapped. Map them, and try again
+ for (IssMasterOrgs o : orgs) {
+ o.setLocalOrg(admin.getOrg());
+ }
+
+ master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+
+ orgs = handler.getMasterOrgs(adminKey, master.getId());
+ for (IssMasterOrgs o : orgs) {
+ assertEquals(o.getLocalOrg().getId(), admin.getOrg().getId());
+ }
+
+ }
+
+ public void testSetMasterOrgs() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+
+ List<IssMasterOrgs> someOrgs = getBareOrgs(true);
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ IssMaster m = handler.getMaster(adminKey, master.getId());
+ assertNotNull(m);
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(regularKey, master.getId());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+
+ // Make sure satellite-admin can
+ try {
+ IssMaster m = handler.getMaster(adminKey, master.getId());
+ assertNotNull(m);
+ assertEquals(0, m.getNumMasterOrgs());
+ int rc = handler.setMasterOrgs(adminKey, m.getId(), someOrgs);
+ assertEquals(1, rc);
+ IssMaster m2 = handler.getMaster(adminKey, master.getId());
+ assertEquals(someOrgs.size(), m2.getNumMasterOrgs());
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+
+ // Make sure resetting to "empty" works
+ IssMaster m = handler.getMaster(adminKey, master.getId());
+ int rc = handler.setMasterOrgs(adminKey,
+ m.getId(),
+ new ArrayList<IssMasterOrgs>());
+ assertEquals(1, rc);
+ List<IssMasterOrgs> orgSet = handler.getMasterOrgs(adminKey, master.getId());
+ assertNotNull(orgSet);
+ assertEquals(0, orgSet.size());
+
+ }
+
+ public void testAddOrg() {
+ IssMaster master = handler.create(adminKey, "testCreate");
+ IssMasterOrgs org = new IssMasterOrgs();
+ org.setMasterOrgName("newMasterOrg");
+ org.setMasterOrgId(1001L);
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ int rc = handler.addToMaster(regularKey, master.getId(), org);
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+ // Make sure satellite-admin can
+ try {
+ int rc = handler.addToMaster(adminKey, master.getId(), org);
+ assertEquals(1, rc);
+ List<IssMasterOrgs> orgs = handler.getMasterOrgs(adminKey, master.getId());
+ assertTrue(orgs.contains(org));
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ public void testMapToLocal() {
+ IssMaster master = new IssMaster();
+ master.setLabel("testCreate");
+ IssFactory.save(master);
+ addOrgsTo(master, false);
+
+ IssMasterOrgs masterOrg = null;
+
+ for (IssMasterOrgs o : master.getMasterOrgs()) {
+ if (masterOrgNames[1].equals(o.getMasterOrgName())) {
+ masterOrg = o;
+ }
+ }
+
+ // Make sure that non-sat-admin users cannot access
+ try {
+ int rc = handler.mapToLocal(regularKey, master.getId(),
+ masterOrg.getMasterOrgId(),
+ admin.getOrg().getId());
+ fail();
+ }
+ catch (PermissionCheckFailureException e) {
+ //success
+ }
+ // Make sure satellite-admin can
+ try {
+ int rc = handler.mapToLocal(adminKey, master.getId(),
+ masterOrg.getMasterOrgId(),
+ admin.getOrg().getId());
+ assertEquals(1, rc);
+ for (IssMasterOrgs o : master.getMasterOrgs()) {
+ if (masterOrgNames[1].equals(o.getMasterOrgName())) {
+ assertEquals(o.getLocalOrg(), admin.getOrg());
+ }
+ }
+ }
+ catch (PermissionCheckFailureException e) {
+ fail();
+ }
+ }
+
+ private void addOrgsTo(IssMaster master, boolean map) {
+ List<IssMasterOrgs> orgs = getBareOrgs(map);
+ for (IssMasterOrgs o : orgs) {
+ o.setMaster(master);
+ }
+ master.setMasterOrgs(new HashSet<IssMasterOrgs>(orgs));
+ IssFactory.save(master);
+ }
+
+ private List<IssMasterOrgs> getBareOrgs(boolean map) {
+ long id = 1001L;
+ List<IssMasterOrgs> orgs = new ArrayList();
+ for (String name : masterOrgNames) {
+ IssMasterOrgs org = new IssMasterOrgs();
+ org.setMasterOrgName(name);
+ org.setMasterOrgId(id++);
+ if (map) {
+ org.setLocalOrg(admin.getOrg());
+ }
+ orgs.add(org);
+ }
+ return orgs;
+ }
+}
commit 72e391eee6e5dcec5a9697eae13b5abb84033201
Author: Stephen Herr <sherr(a)redhat.com>
Date: Thu Jun 6 16:45:16 2013 -0400
export org and org-trust data
diff --git a/backend/satellite_exporter/handlers/non_auth_dumper.py b/backend/satellite_exporter/handlers/non_auth_dumper.py
index 2a47949..10bf50e 100644
--- a/backend/satellite_exporter/handlers/non_auth_dumper.py
+++ b/backend/satellite_exporter/handlers/non_auth_dumper.py
@@ -56,7 +56,6 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
self._headers_sent = 0
self._is_closed = 0
self._compressed_stream = None
- self.iss_slave_condition = "1 = 0"
self.functions = [
'arches',
@@ -74,6 +73,7 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
'get_rpm',
'kickstartable_trees',
'get_ks_file',
+ 'orgs',
]
self.system_id = None
@@ -85,17 +85,17 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
and c.label in (%s)
and cfm.channel_family_id = cf.id
and cf.label != 'rh-public'
- and %s
+ and cf.org_id in (%s)
union
select id channel_family_id, NULL quantity
from rhnChannelFamily
where label = 'rh-public'
- and %s
+ and org_id in (%s)
"""
self._channel_family_query_public = """
select id channel_family_id, 0 quantity
from rhnChannelFamily
- where %s
+ where org_id in (%s)
"""
self._channel_family_query = None
@@ -157,17 +157,15 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
self._is_closed = 1
log_debug(3, "Closed")
- def set_iss_slave_condition(self, iss_slave_condition):
- self.iss_slave_condition = iss_slave_condition
def set_channel_family_query(self, channel_labels=[]):
if not channel_labels:
# All null-pwned channel families
- self._channel_family_query = self._channel_family_query_public % self.iss_slave_condition
+ self._channel_family_query = self._channel_family_query_public % self.exportable_orgs
return self
self._channel_family_query = self._channel_family_query_template % (
- ', '.join(["'%s'" % x for x in channel_labels]), self.iss_slave_condition, self.iss_slave_condition )
+ ', '.join(["'%s'" % x for x in channel_labels]), self.exportable_orgs, self.exportable_orgs)
return self
def _get_channel_data(self, channels):
@@ -330,6 +328,9 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
self.set_channel_family_query()
return self.dump_errata(errata=errata)
+ def orgs(self):
+ return self.dump_orgs()
+
def kickstartable_trees(self, kickstart_labels=[]):
self.set_channel_family_query()
return self.dump_kickstartable_trees(kickstart_labels=kickstart_labels)
diff --git a/backend/satellite_exporter/satexport.py b/backend/satellite_exporter/satexport.py
index a16d295..4f01d69 100644
--- a/backend/satellite_exporter/satexport.py
+++ b/backend/satellite_exporter/satexport.py
@@ -196,7 +196,7 @@ class ApacheServer(BaseApacheServer):
raise FunctionRetrievalError("Module %s not found" % module_name)
mod = handler_classes[module_name](req)
- mod.set_iss_slave_condition(iss_slave_condition)
+ mod.set_exportable_orgs(iss_slave_condition)
f = mod.get_function(function_name)
if f is None:
raise FunctionRetrievalError(
@@ -215,9 +215,9 @@ class ApacheServer(BaseApacheServer):
raise rhnFault(2004,
_('Server "%s" is not enabled for ISS.')
% remote_hostname)
- iss_slave_condition = "1 = 1"
+ iss_slave_condition = "select id from web_contact"
if not(row['allow_all_orgs'] == 'Y'):
- iss_slave_condition = "rhnChannelFamily.org_id in ( select rhnISSSlaveOrgs.org_id from rhnISSSlaveOrgs where slave_id = %d )" % row['id']
+ iss_slave_condition = "select rhnISSSlaveOrgs.org_id from rhnISSSlaveOrgs where slave_id = %d" % row['id']
return iss_slave_condition
@staticmethod
diff --git a/backend/satellite_tools/disk_dumper/dumper.py b/backend/satellite_tools/disk_dumper/dumper.py
index c83d12d..bbf0d75 100644
--- a/backend/satellite_tools/disk_dumper/dumper.py
+++ b/backend/satellite_tools/disk_dumper/dumper.py
@@ -41,6 +41,7 @@ class XML_Dumper:
"""
self.channel_ids = []
self.channel_ids_for_families = []
+ self.exportable_orgs = 'null'
def send(self, data):
# to be overwritten in subclass
@@ -60,6 +61,14 @@ class XML_Dumper:
""" % self._channel_family_query
return rhnSQL.prepare(query)
+ def get_orgs_statement(self, org_ids):
+ query = """
+ select wc.id, wc.name
+ from web_customer wc
+ where wc.id in (%s)
+ """ % org_ids
+ return rhnSQL.prepare(query)
+
def get_channel_families_statement_new(self, cids):
args = {
@@ -195,6 +204,23 @@ class XML_Dumper:
data_iterator=h, null_max_members=0)
return 0
+ def set_exportable_orgs(self, org_list):
+ if not org_list or len(org_list) == 0:
+ self.exportable_orgs = 'null'
+ elif type(org_list) == type(''):
+ self.exportable_orgs = org_list
+ else:
+ self.exportable_orgs = ', '.join([str(x) for x in org_list])
+
+ def dump_orgs(self):
+ log_debug(2)
+
+ h = self.get_orgs_statement(self.exportable_orgs)
+ h.execute()
+
+ self._write_dump(exportLib.OrgsDumper, data_iterator=h)
+ return 0
+
def dump_channels(self, channel_labels=None, start_date=None, end_date=None, use_rhn_date=True, whole_errata=False):
log_debug(2)
#channels = self._validate_channels(channel_labels=channel_labels)
diff --git a/backend/satellite_tools/disk_dumper/iss.py b/backend/satellite_tools/disk_dumper/iss.py
index 2ad364e..65a0dc9 100644
--- a/backend/satellite_tools/disk_dumper/iss.py
+++ b/backend/satellite_tools/disk_dumper/iss.py
@@ -71,6 +71,7 @@ class FileMapper:
'arches-extra' : xmlDiskSource.ArchesExtraDiskSource(self.mp),
'blacklists' : xmlDiskSource.BlacklistsDiskSource(self.mp),
'channelfamilies' : xmlDiskSource.ChannelFamilyDiskSource(self.mp),
+ 'orgs' : xmlDiskSource.OrgDiskSource(self.mp),
'channels' : xmlDiskSource.ChannelDiskSource(self.mp),
'channel-pkg-short' : ISSChannelPackageShortDiskSource(self.mp),
'packages-short' : xmlDiskSource.ShortPackageDiskSource(self.mp),
@@ -105,6 +106,9 @@ class FileMapper:
def getBlacklistsFile(self):
return self.setup_file(self.filemap['blacklists']._getFile())
+ def getOrgsFile(self):
+ return self.setup_file(self.filemap['orgs']._getFile())
+
def getChannelFamiliesFile(self):
return self.setup_file(self.filemap['channelfamilies']._getFile())
@@ -153,8 +157,8 @@ class Dumper(dumper.XML_Dumper):
the _get_xml_writer method and adds a set_stream method,
which will let it write to a file instead of over the wire.
"""
- def __init__(self, outputdir, channel_labels, hardlinks, start_date, \
- end_date, use_rhn_date, whole_errata):
+ def __init__(self, outputdir, channel_labels, org_ids, hardlinks,
+ start_date, end_date, use_rhn_date, whole_errata):
dumper.XML_Dumper.__init__(self)
self.fm = FileMapper(outputdir)
self.mp = outputdir
@@ -203,6 +207,8 @@ class Dumper(dumper.XML_Dumper):
#The keys are 'channel_id', 'label', and 'last_modified'.
self.channel_comps = {}
+ self.set_exportable_orgs(org_ids)
+
#Channel_labels should be the list of channels passed into rhn-satellite-exporter by the user.
log2stdout(1, "Gathering channel info...")
for ids in channel_labels:
@@ -645,6 +651,13 @@ class Dumper(dumper.XML_Dumper):
"Channel Families exported to %s",
"%s caught in dump_channel_families.")
+ def dump_orgs(self):
+ self._dump_simple(self.fm.getOrgsFile(),
+ dumper.XML_Dumper.dump_orgs,
+ "Exporting orgs...",
+ "Orgs exported to %s",
+ "%s caught in dump_orgs.")
+
def dump_channels(self):
try:
print "\n"
@@ -1045,6 +1058,10 @@ class ExporterMain:
self.print_list_channels(self.list_channels())
sys.exit(0)
+ if self.options.list_orgs:
+ self.print_orgs(self.list_orgs())
+ sys.exit(0)
+
#From this point on everything should assume a list of channels, so it needs to be a list
#even if there's only one entry.
if self.options.all_channels:
@@ -1060,6 +1077,33 @@ class ExporterMain:
sys.stdout.write("--channel not included!\n")
sys.exit(0)
+ #Same as above but for orgs
+ if self.options.all_orgs:
+ orgs = self.list_orgs()
+ self.options.org = []
+ for org in orgs:
+ self.options.org.append(org['id'])
+ elif self.options.org:
+ if type(self.options.org) != type([]):
+ self.options.org = [self.options.org]
+ orgs = {}
+ for org in self.list_orgs():
+ orgs[org['name']] = str(org['id'])
+ using_orgs = []
+ for org in self.options.org:
+ #User might have specified org name or org id, try both
+ if org in orgs.values(): #ids
+ using_orgs.append(org)
+ elif org in orgs.keys(): #names
+ using_orgs.append(orgs[org])
+ else:
+ sys.stdout.write("Org not found: %s\n" % org)
+ exit(0)
+ self.options.org = using_orgs
+ else:
+ self.options.org = []
+ self.options.org = [str(x) for x in self.options.org]
+
#Since everything gets dumped to a directory it wouldn't make
#much sense if it wasn't required.
if self.options.dir:
@@ -1110,6 +1154,7 @@ class ExporterMain:
if os.path.isdir(self.outputdir):
self.dumper = Dumper(self.outputdir,
self.options.channel,
+ self.options.org,
self.options.hard_links,
start_date=self.start_date,
end_date=self.end_date,
@@ -1129,6 +1174,7 @@ class ExporterMain:
'kickstarts' : {'dump' : [self.dumper.dump_kickstart_data,
self.dumper.dump_kickstart_files]},
'rpms' : {'dump' : self.dumper.dump_rpms},
+ 'orgs' : {'dump' : self.dumper.dump_orgs},
}
else:
print "The output directory is not a directory"
@@ -1214,7 +1260,25 @@ class ExporterMain:
else:
print "No Channels available for listing."
-
+ def list_orgs(self):
+ """
+ Return a list of all orgs.
+ """
+ org_query = rhnSQL.Statement("""
+ select id, name
+ from web_customer
+ """)
+ org_data = rhnSQL.prepare(org_query)
+ org_data.execute()
+ return org_data.fetchall_dict()
+
+ def print_orgs(self, orgs):
+ if orgs and len(orgs) > 0:
+ print "Orgs available for export:"
+ for org in orgs:
+ print "Id: %s, Name: \'%s\'" % (org['id'], org['name'])
+ else:
+ print "No Orgs available for listing."
def main(self):
try:
diff --git a/backend/satellite_tools/disk_dumper/iss_actions.py b/backend/satellite_tools/disk_dumper/iss_actions.py
index 1c2a7d0..5706ab4 100644
--- a/backend/satellite_tools/disk_dumper/iss_actions.py
+++ b/backend/satellite_tools/disk_dumper/iss_actions.py
@@ -19,6 +19,7 @@ class ActionDeps:
def __init__(self, options):
#self.step_precedence contains the dependencies among the export steps.
self.step_precedence = {
+ 'orgs' : [''],
'packages' : [''],
'source-packages' : [''],
'errata' : [''],
@@ -35,6 +36,7 @@ class ActionDeps:
#self.step_hierarchy lists the export steps in the order they need to be run.
self.step_hierarchy = [
+ 'orgs',
'channel-families',
'arches',
'arches-extra',
@@ -95,6 +97,9 @@ class ActionDeps:
if self.options.no_kickstarts:
self.action_dict['kickstarts'] = 0
+ if not self.options.all_orgs and not self.options.org:
+ self.action_dict['orgs'] = 0
+
if self.options.list_channels:
self.action_dict['channels'] = 1
self.action_dict['blacklists'] = 0
diff --git a/backend/satellite_tools/disk_dumper/iss_ui.py b/backend/satellite_tools/disk_dumper/iss_ui.py
index fd16d5e..5f78415 100644
--- a/backend/satellite_tools/disk_dumper/iss_ui.py
+++ b/backend/satellite_tools/disk_dumper/iss_ui.py
@@ -69,6 +69,12 @@ class UI:
help="Email a report of what was exported."),
option( "--traceback-mail", action="store",
help="Alternative email address for --email."),
+ option( "--all-orgs", action="store_true",
+ help="Export all orgs."),
+ option("-o", "--org", action="append",
+ help="Include the org with this id in the export."),
+ option( "--list-orgs", action="store_true",
+ help="List all orgs that can be exported"),
]
self.optionparser = option_parser(option_list=self.optiontable)
self.options, self.args = self.optionparser.parse_args()
diff --git a/backend/satellite_tools/exporter/exportLib.py b/backend/satellite_tools/exporter/exportLib.py
index d7fb533..2138234 100644
--- a/backend/satellite_tools/exporter/exportLib.py
+++ b/backend/satellite_tools/exporter/exportLib.py
@@ -198,6 +198,43 @@ class SatelliteDumper(BaseDumper):
def set_iterator(self):
return ArrayIterator(self._dumpers)
+class _OrgDumper(BaseDumper):
+ tag_name = 'rhn-org'
+
+ def __init__(self, writer, org):
+ self.org = org
+ h = rhnSQL.prepare(self._query_org_trusts)
+ h.execute(org_id=org['id'])
+ BaseDumper.__init__(self, writer, h)
+
+ _query_org_trusts = """
+ select rto.org_trust_id
+ from rhnTrustedOrgs rto
+ where rto.org_id = :org_id
+ """
+
+ def dump_subelement(self, data):
+ d = SimpleDumper(self._writer, 'rhn-org-trust',
+ data['org_trust_id'])
+ d.dump()
+
+ def set_attributes(self):
+ attributes = {
+ 'id' : self.org['id'],
+ 'name' : self.org['name'],
+ }
+ return attributes
+
+class OrgsDumper(BaseDumper):
+ tag_name = 'rhn-orgs'
+
+ def __init__(self, writer, data_iterator=None):
+ BaseDumper.__init__(self, writer, data_iterator)
+
+ def dump_subelement(self, data):
+ org = _OrgDumper(self._writer, data)
+ org.dump()
+
class ChannelAccessDumper(BaseDumper):
tag_name = 'rhn-channel-access'
diff --git a/backend/satellite_tools/xmlDiskSource.py b/backend/satellite_tools/xmlDiskSource.py
index aba3c80..66fb6fe 100644
--- a/backend/satellite_tools/xmlDiskSource.py
+++ b/backend/satellite_tools/xmlDiskSource.py
@@ -102,6 +102,16 @@ class ChannelFamilyDiskSource(DiskSource):
return "%s/channel_families.xml" % dirname
+class OrgDiskSource(DiskSource):
+ subdir = 'orgs'
+
+ def _getFile(self, create=0):
+ dirname = self._getDir(create)
+ if create and not os.path.isdir(dirname):
+ createPath(dirname)
+ return "%s/orgs.xml" % dirname
+
+
class ChannelDiskSource(DiskSource):
subdir = 'channels'
diff --git a/backend/satellite_tools/xmlWireSource.py b/backend/satellite_tools/xmlWireSource.py
index 8e95f71..23a9e08 100644
--- a/backend/satellite_tools/xmlWireSource.py
+++ b/backend/satellite_tools/xmlWireSource.py
@@ -215,6 +215,11 @@ class MetadataWireSource(BaseWireSource):
self._prepare()
return self._openSocketStream("dump.channel_families", (self.systemid,))
+ def getOrgXmlStream(self):
+ """retrieve xml stream for org data."""
+ self._prepare()
+ return self._openSocketStream("dump.orgs", (self.systemid,))
+
def getChannelXmlStream(self, channels):
"""retrieve xml stream for channel data given a
list of channel labels."""
commit 185f59e4a146ecc1ddda152e8442ef6a2552e8dd
Author: Stephen Herr <sherr(a)redhat.com>
Date: Tue Jun 4 17:32:05 2013 -0400
export channel access permissions
diff --git a/backend/satellite_tools/disk_dumper/dumper.py b/backend/satellite_tools/disk_dumper/dumper.py
index a9d6d34..c83d12d 100644
--- a/backend/satellite_tools/disk_dumper/dumper.py
+++ b/backend/satellite_tools/disk_dumper/dumper.py
@@ -668,7 +668,7 @@ class ChannelsDumper(exportLib.ChannelsDumper):
c.summary, c.description, c.gpg_key_url,
ct.label checksum_type,
TO_CHAR(c.last_modified, 'YYYYMMDDHH24MISS') last_modified,
- pc.label parent_channel
+ pc.label parent_channel, c.channel_access
from rhnChannel c left outer join rhnChannel pc on c.parent_channel = pc.id
left outer join rhnChecksumType ct on c.checksum_type_id = ct.id, rhnChannelArch ca
where c.id = :channel_id
@@ -708,7 +708,8 @@ class ChannelsDumperEx(CachedDumper, exportLib.ChannelsDumper):
cp.version channel_product_version,
cp.beta channel_product_beta,
c.receiving_updates,
- ct.label checksum_type
+ ct.label checksum_type,
+ c.channel_access
from rhnChannel c left outer join rhnChannel pc on c.parent_channel = pc.id
left outer join rhnChannelProduct cp on c.channel_product_id = cp.id
left outer join rhnChecksumType ct on c.checksum_type_id = ct.id,
diff --git a/backend/satellite_tools/exporter/exportLib.py b/backend/satellite_tools/exporter/exportLib.py
index 1709912..d7fb533 100644
--- a/backend/satellite_tools/exporter/exportLib.py
+++ b/backend/satellite_tools/exporter/exportLib.py
@@ -198,6 +198,21 @@ class SatelliteDumper(BaseDumper):
def set_iterator(self):
return ArrayIterator(self._dumpers)
+class ChannelAccessDumper(BaseDumper):
+ tag_name = 'rhn-channel-access'
+
+ def __init__(self, writer, access_level, data_iterator=None):
+ BaseDumper.__init__(self, writer, data_iterator)
+ self.access_level = access_level
+
+ def dump_subelement(self, data):
+ d = SimpleDumper(self._writer, 'rhn-channel-trusted-org',
+ data['org_trust_id'])
+ d.dump()
+
+ def set_attributes(self):
+ return {'sharing' : self.access_level}
+
class _ChannelDumper(BaseRowDumper):
tag_name = 'rhn-channel'
@@ -242,6 +257,12 @@ class _ChannelDumper(BaseRowDumper):
and dcm.org_id is null
""")
+ _query_get_channel_trusts = rhnSQL.Statement("""
+ select org_trust_id
+ from rhnChannelTrust
+ where channel_id = :channel_id
+ """)
+
def set_iterator(self):
channel_id = self._row['id']
arr = []
@@ -274,6 +295,11 @@ class _ChannelDumper(BaseRowDumper):
_dbtime2timestamp(comp_last_modified[0]))
)
+ h = rhnSQL.prepare(self._query_get_channel_trusts)
+ h.execute(channel_id=channel_id)
+ arr.append(ChannelAccessDumper(self._writer,
+ self._row['channel_access'], data_iterator=h))
+
h = rhnSQL.prepare(self._query_channel_families)
h.execute(channel_id=channel_id)
arr.append(ChannelFamiliesDumper(self._writer, data_iterator=h,
commit e69b60a5d924a3a09743f9b4e56e89be43c2b8b3
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 4 10:00:11 2013 -0400
Resolve upgrade-script name conflicts
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
deleted file mode 100644
index dfd56e4..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnISSSlave (
- id number not null constraint rhn_isss_id_pk primary key,
- slave varchar2(512) not null constraint rhn_isss_name_uq unique,
- enabled char(1) not null default 'Y',
- constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
- allow_all_orgs char(1) not null default 'Y',
- constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
- created timestamp with local time zone default (current_timestamp) not null,
- modified timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
deleted file mode 100644
index 3b6b882..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-create table rhnISSSlaveOrgs (
- id number not null constraint rhn_isssorg_id_pk primary key,
- slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
- org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issslave_org_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql
deleted file mode 100644
index 54db1a5..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnIssMaster (
- id number not null constraint rhn_iss_master_id_pk primary key,
- label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql
deleted file mode 100644
index 7991435..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnIssMasterOrgs (
- id number not null constraint rhn_issmasterorgs_id_pk primary key,
- master_id number not null
- constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
- master_org_id number not null,
- master_org_name varchar2(512) not null,
- local_org_id number
- constraint rhn_issmasterorgs_lid_fk references web_customer(id),
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_issmasterorgs_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql
new file mode 100644
index 0000000..dfd56e4
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSSlave.sql
@@ -0,0 +1,12 @@
+create table rhnISSSlave (
+ id number not null constraint rhn_isss_id_pk primary key,
+ slave varchar2(512) not null constraint rhn_isss_name_uq unique,
+ enabled char(1) not null default 'Y',
+ constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
+ allow_all_orgs char(1) not null default 'Y',
+ constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
+ created timestamp with local time zone default (current_timestamp) not null,
+ modified timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
new file mode 100644
index 0000000..3b6b882
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnISSSlaveOrgs.sql
@@ -0,0 +1,8 @@
+create table rhnISSSlaveOrgs (
+ id number not null constraint rhn_isssorg_id_pk primary key,
+ slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
+ org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_org_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql
new file mode 100644
index 0000000..54db1a5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/022-rhnISSMaster.sql
@@ -0,0 +1,7 @@
+create table rhnIssMaster (
+ id number not null constraint rhn_iss_master_id_pk primary key,
+ label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql
new file mode 100644
index 0000000..7991435
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/023-rhnISSMasterOrgs.sql
@@ -0,0 +1,12 @@
+create table rhnIssMasterOrgs (
+ id number not null constraint rhn_issmasterorgs_id_pk primary key,
+ master_id number not null
+ constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
+ master_org_id number not null,
+ master_org_name varchar2(512) not null,
+ local_org_id number
+ constraint rhn_issmasterorgs_lid_fk references web_customer(id),
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmasterorgs_seq;
commit d31dde4c5e7716b8549a0aa9eadf85a0b64f1006
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue Jun 4 09:58:58 2013 -0400
Fixing whitespace
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
index 36f9838..dfd56e4 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
@@ -1,13 +1,12 @@
-
create table rhnISSSlave (
- id number not null constraint rhn_isss_id_pk primary key,
- slave varchar2(512) not null constraint rhn_isss_name_uq unique,
- enabled char(1) not null default 'Y',
- constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
- allow_all_orgs char(1) not null default 'Y',
- constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
- created timestamp with local time zone default (current_timestamp) not null,
- modified timestamp with local time zone default (current_timestamp) not null
+ id number not null constraint rhn_isss_id_pk primary key,
+ slave varchar2(512) not null constraint rhn_isss_name_uq unique,
+ enabled char(1) not null default 'Y',
+ constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
+ allow_all_orgs char(1) not null default 'Y',
+ constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
+ created timestamp with local time zone default (current_timestamp) not null,
+ modified timestamp with local time zone default (current_timestamp) not null
);
create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
index 4a229f5..3b6b882 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
@@ -1,9 +1,8 @@
-
create table rhnISSSlaveOrgs (
- id number not null constraint rhn_isssorg_id_pk primary key,
- slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
- org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
- created timestamp with local time zone default (current_timestamp) not null
+ id number not null constraint rhn_isssorg_id_pk primary key,
+ slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
+ org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
);
create sequence rhn_issslave_org_seq;
commit e3132d1f360e14cd3d4668119ded72b43a0e66da
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Fri May 31 15:36:51 2013 -0400
First pieces of backend code for using the iss-cfg tables
diff --git a/backend/satellite_exporter/handlers/non_auth_dumper.py b/backend/satellite_exporter/handlers/non_auth_dumper.py
index 0dd812b..2a47949 100644
--- a/backend/satellite_exporter/handlers/non_auth_dumper.py
+++ b/backend/satellite_exporter/handlers/non_auth_dumper.py
@@ -56,6 +56,7 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
self._headers_sent = 0
self._is_closed = 0
self._compressed_stream = None
+ self.iss_slave_condition = "1 = 0"
self.functions = [
'arches',
@@ -84,14 +85,17 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
and c.label in (%s)
and cfm.channel_family_id = cf.id
and cf.label != 'rh-public'
+ and %s
union
select id channel_family_id, NULL quantity
from rhnChannelFamily
where label = 'rh-public'
+ and %s
"""
self._channel_family_query_public = """
select id channel_family_id, 0 quantity
from rhnChannelFamily
+ where %s
"""
self._channel_family_query = None
@@ -153,14 +157,17 @@ class NonAuthenticatedDumper(rhnHandler, dumper.XML_Dumper):
self._is_closed = 1
log_debug(3, "Closed")
+ def set_iss_slave_condition(self, iss_slave_condition):
+ self.iss_slave_condition = iss_slave_condition
+
def set_channel_family_query(self, channel_labels=[]):
if not channel_labels:
# All null-pwned channel families
- self._channel_family_query = self._channel_family_query_public
+ self._channel_family_query = self._channel_family_query_public % self.iss_slave_condition
return self
self._channel_family_query = self._channel_family_query_template % (
- ', '.join(["'%s'" % x for x in channel_labels]), )
+ ', '.join(["'%s'" % x for x in channel_labels]), self.iss_slave_condition, self.iss_slave_condition )
return self
def _get_channel_data(self, channels):
diff --git a/backend/satellite_exporter/satexport.py b/backend/satellite_exporter/satexport.py
index 1053818..a16d295 100644
--- a/backend/satellite_exporter/satexport.py
+++ b/backend/satellite_exporter/satexport.py
@@ -29,7 +29,7 @@ from spacewalk.server import rhnSQL, rhnImport
from spacewalk.satellite_tools.disk_dumper.dumper import ClosedConnectionError
from spacewalk.satellite_tools import constants
-from rhn.connections import idn_ascii_to_pune
+from rhn.connections import idn_pune_to_unicode
class BaseApacheServer:
def __init__(self):
@@ -185,7 +185,7 @@ class ApacheServer(BaseApacheServer):
# pylint: disable=R0201
def get_function(self, method_name, req):
- self.auth_system(req)
+ iss_slave_condition = self.auth_system(req)
# Get the module name
idx = method_name.rfind('.')
module_name, function_name = method_name[:idx], method_name[idx+1:]
@@ -196,6 +196,7 @@ class ApacheServer(BaseApacheServer):
raise FunctionRetrievalError("Module %s not found" % module_name)
mod = handler_classes[module_name](req)
+ mod.set_iss_slave_condition(iss_slave_condition)
f = mod.get_function(function_name)
if f is None:
raise FunctionRetrievalError(
@@ -207,21 +208,17 @@ class ApacheServer(BaseApacheServer):
if CFG.DISABLE_ISS:
raise rhnFault(2005, _('ISS is disabled on this satellite.'))
- if CFG.ALLOWED_ISS_SLAVES:
- if not isinstance(CFG.ALLOWED_ISS_SLAVES, list):
- allowed_iss_slaves = [CFG.ALLOWED_ISS_SLAVES]
- else:
- allowed_iss_slaves = CFG.ALLOWED_ISS_SLAVES
- allowed_iss_slaves = [idn_ascii_to_pune(x) for x in allowed_iss_slaves]
- else:
- allowed_iss_slaves = []
-
remote_hostname = req.get_remote_host(apache.REMOTE_DOUBLE_REV)
- if remote_hostname not in allowed_iss_slaves:
+ row = rhnSQL.fetchone_dict("select id, allow_all_orgs from rhnISSSlave where slave = :hostname and enabled = 'Y'",
+ hostname = idn_pune_to_unicode(remote_hostname))
+ if not row:
raise rhnFault(2004,
_('Server "%s" is not enabled for ISS.')
% remote_hostname)
- return remote_hostname
+ iss_slave_condition = "1 = 1"
+ if not(row['allow_all_orgs'] == 'Y'):
+ iss_slave_condition = "rhnChannelFamily.org_id in ( select rhnISSSlaveOrgs.org_id from rhnISSSlaveOrgs where slave_id = %d )" % row['id']
+ return iss_slave_condition
@staticmethod
def _validate_version(req):
diff --git a/backend/server/handlers/sat/auth.py b/backend/server/handlers/sat/auth.py
index 9201927..c0a7768 100644
--- a/backend/server/handlers/sat/auth.py
+++ b/backend/server/handlers/sat/auth.py
@@ -15,7 +15,7 @@
# Satellite specific authentication xmlrpc method.
import time
-from rhn.connections import idn_ascii_to_pune
+from rhn.connections import idn_pune_to_unicode
from spacewalk.common.rhnLog import log_debug
from spacewalk.common.rhnConfig import CFG
@@ -23,6 +23,7 @@ from spacewalk.common.rhnException import rhnFault
from spacewalk.common.rhnTranslate import _
from spacewalk.server.rhnHandler import rhnHandler
from spacewalk.server import rhnLib
+from spacewalk.server import rhnSQL
class Authentication(rhnHandler):
""" Simple authentication based on hostname and allowed_iss_slaves
@@ -41,16 +42,8 @@ class Authentication(rhnHandler):
if CFG.DISABLE_ISS:
raise rhnFault(2005, _('ISS is disabled on this satellite.'))
- if CFG.ALLOWED_ISS_SLAVES:
- if not isinstance(CFG.ALLOWED_ISS_SLAVES, list):
- allowed_iss_slaves = [CFG.ALLOWED_ISS_SLAVES]
- else:
- allowed_iss_slaves = CFG.ALLOWED_ISS_SLAVES
- allowed_iss_slaves = [idn_ascii_to_pune(x) for x in allowed_iss_slaves]
- else:
- allowed_iss_slaves = []
-
- if self.remote_hostname not in allowed_iss_slaves:
+ if not rhnSQL.fetchone_dict("select 1 from rhnISSSlave where slave = :hostname and enabled = 'Y'",
+ hostname = idn_pune_to_unicode(self.remote_hostname)):
raise rhnFault(2004,
_('Server "%s" is not enabled for ISS.')
% self.remote_hostname)
commit f884f2875b3138debfd4d47bb5b2bb9b8f4cf071
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu May 30 13:27:19 2013 -0400
Naming is important - clean ours up so it makes more sense
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
index 197074e..bc04b4b 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
@@ -85,25 +85,25 @@ public class IssFactory extends HibernateFactory {
***/
/**
- * Lookup a IssOrgCatalogue by its id
+ * Lookup a IssMaster by its id
* @param id the id to search for
- * @return the IssOrgCatalogue entry found
+ * @return the IssMaster entry found
*/
- public static IssOrgCatalogue lookupMasterById(Long id) {
+ public static IssMaster lookupMasterById(Long id) {
Map<String, Long> params = new HashMap<String, Long>();
params.put("id", id);
- return (IssOrgCatalogue) singleton.lookupObjectByNamedQuery(
- "IssOrgCatalogue.findById", params);
+ return (IssMaster) singleton.lookupObjectByNamedQuery(
+ "IssMaster.findById", params);
}
/**
- * List all IssOrgCatalogue entries for this Slave
+ * List all IssMaster entries for this Slave
* @return list of all masters known to this slave
*/
- public static List<IssOrgCatalogue> listAllMasters() {
+ public static List<IssMaster> listAllMasters() {
Map params = new HashMap();
- return (List<IssOrgCatalogue>)singleton.listObjectsByNamedQuery(
- "IssOrgCatalogue.lookupAll", params);
+ return (List<IssMaster>)singleton.listObjectsByNamedQuery(
+ "IssMaster.lookupAll", params);
}
/***
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
new file mode 100644
index 0000000..50b5572
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.hbm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssMaster"
+ table="rhnissmaster" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_issmaster_seq</param>
+ </generator>
+ </id>
+
+ <property name="label" column="LABEL" type="string" length="256" />
+
+ <set name="masterOrgs" inverse="true" cascade="all">
+ <key column="master_id"/>
+ <one-to-many class="com.redhat.rhn.domain.iss.IssMasterOrgs"/>
+ </set>
+
+ </class>
+
+ <query name="IssMaster.findById">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssMaster as m where m.id = :id]]>
+ </query>
+
+ <query name="IssMaster.lookupAll">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssMaster]]>
+ </query>
+
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
new file mode 100644
index 0000000..4035921
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMaster.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import java.util.Set;
+
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+/**
+ * IssMaster - Class representation of the table rhnissmaster.
+ * @version $Rev: 1 $
+ */
+public class IssMaster extends BaseDto {
+
+ public static final String ID = "id";
+ public static final String LABEL = "label";
+
+ private Long id;
+ private String label;
+ private Set<IssMasterOrgs> masterOrgs;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for label
+ * @return String to get
+ */
+ public String getLabel() {
+ return this.label;
+ }
+
+ /**
+ * Setter for label
+ * @param labelIn to set
+ */
+ public void setLabel(String labelIn) {
+ this.label = labelIn;
+ }
+
+ /**
+ * Get Orgs this master has let us know about
+ * @return list of orgs Master has told us about
+ */
+ public Set<IssMasterOrgs> getMasterOrgs() {
+ return this.masterOrgs;
+ }
+
+ /**
+ * Set the orgs for this master
+ * @param inOrgs orgs of the master that we know of
+ */
+ public void setMasterOrgs(Set<IssMasterOrgs> inOrgs) {
+ this.masterOrgs = inOrgs;
+ }
+
+ /**
+ * How many orgs did Master tell us about? (NOTE: we add this because you can't
+ * do ${current.orgs.size} in the JSPs :( )
+ * @return number of orgs from this master we know of
+ */
+ public int getNumMasterOrgs() {
+ return getMasterOrgs().size();
+ }
+
+ /**
+ * How many master-orgs have been mapped?
+ * @return number of unique master-orgs that have non-null local orgs
+ */
+ public int getNumMappedMasterOrgs() {
+ int mappedSources = 0;
+ for (IssMasterOrgs so : getMasterOrgs()) {
+ if (so.getLocalOrg() != null) {
+ mappedSources++;
+ }
+ }
+ return mappedSources;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
new file mode 100644
index 0000000..341faf3
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.hbm.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssMasterOrgs"
+ table="rhnissmasterorgs" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_issmasterorgs_seq</param>
+ </generator>
+ </id>
+ <property name="masterOrgId" column="MASTER_ORG_ID" type="long" />
+ <property name="masterOrgName" column="MASTER_ORG_NAME" type="string" length="256" />
+
+ <many-to-one name="master"
+ column="MASTER_ID" class="com.redhat.rhn.domain.iss.IssMaster"
+ />
+
+ <many-to-one name="localOrg"
+ column="LOCAL_ORG_ID" class="com.redhat.rhn.domain.org.Org"
+ />
+ </class>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
new file mode 100644
index 0000000..8698e10
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssMasterOrgs.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+
+/**
+ * IssMasterOrgs - Class representation of the table rhnissmasterorgs.
+ * @version $Rev: 1 $
+ */
+public class IssMasterOrgs extends BaseDto {
+
+ public static final Long NO_MAP_ID = new Long(-1L);
+
+ private Long id;
+ private Long masterOrgId;
+ private String masterOrgName;
+ private Org localOrg;
+ private IssMaster master;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for masterOrgId
+ * @return Long to get
+ */
+ public Long getMasterOrgId() {
+ return this.masterOrgId;
+ }
+
+ /**
+ * Setter for masterOrgId
+ * @param masterOrgIdIn to set
+ */
+ public void setMasterOrgId(Long masterOrgIdIn) {
+ this.masterOrgId = masterOrgIdIn;
+ }
+
+ /**
+ * Getter for masterOrgName
+ * @return String to get
+ */
+ public String getMasterOrgName() {
+ return this.masterOrgName;
+ }
+
+ /**
+ * Setter for masterOrgName
+ * @param masterOrgNameIn to set
+ */
+ public void setMasterOrgName(String masterOrgNameIn) {
+ this.masterOrgName = masterOrgNameIn;
+ }
+
+ /**
+ *
+ * @return local org associated with this master-org
+ */
+ public Org getLocalOrg() {
+ return this.localOrg;
+ }
+
+ /**
+ * Map a local org to a specific master org
+ * @param localOrgIn local org to be associated with this master org
+ */
+ public void setLocalOrg(Org localOrgIn) {
+ this.localOrg = localOrgIn;
+ }
+
+ /**
+ *
+ * @return master-node that owns this master-org
+ */
+ public IssMaster getMaster() {
+ return this.master;
+ }
+
+ /**
+ *
+ * @param masterIn master node that should own this org
+ */
+ public void setMaster(IssMaster masterIn) {
+ this.master = masterIn;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
deleted file mode 100644
index 7bc2991..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping
-PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<hibernate-mapping>
- <class name="com.redhat.rhn.domain.iss.IssOrgCatalogue"
- table="rhnsyncorgcatalogue" >
- <id name="id" type="long" column="ID">
- <meta attribute="scope-set">protected</meta>
- <generator class="sequence">
- <param name="sequence">rhn_syncorgcatalogue_seq</param>
- </generator>
- </id>
-
- <property name="label" column="LABEL" type="string" length="256" />
-
- <set name="sourceOrgs" inverse="true" cascade="all">
- <key column="catalogue_id"/>
- <one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrg"/>
- </set>
-
- </class>
-
- <query name="IssOrgCatalogue.findById">
- <![CDATA[from com.redhat.rhn.domain.iss.IssOrgCatalogue as c where c.id = :id]]>
- </query>
-
- <query name="IssOrgCatalogue.lookupAll">
- <![CDATA[from com.redhat.rhn.domain.iss.IssOrgCatalogue]]>
- </query>
-
-</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
deleted file mode 100644
index 37418d3..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.domain.iss;
-
-import java.util.Set;
-
-import com.redhat.rhn.frontend.dto.BaseDto;
-
-/**
- * IssOrgCatalogue - Class representation of the table rhnsyncorgcatalogue.
- * @version $Rev: 1 $
- */
-public class IssOrgCatalogue extends BaseDto {
-
- public static final String ID = "id";
- public static final String LABEL = "label";
-
- private Long id;
- private String label;
- private Set<IssSyncOrg> srcOrgs;
-
- /**
- * Getter for id
- * @return Long to get
- */
- public Long getId() {
- return this.id;
- }
-
- /**
- * Setter for id
- * @param idIn to set
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * Getter for label
- * @return String to get
- */
- public String getLabel() {
- return this.label;
- }
-
- /**
- * Setter for label
- * @param labelIn to set
- */
- public void setLabel(String labelIn) {
- this.label = labelIn;
- }
-
- /**
- * Get Orgs this master has let us know about
- * @return list of orgs Master has told us about
- */
- public Set<IssSyncOrg> getSourceOrgs() {
- return this.srcOrgs;
- }
-
- /**
- * Set the orgs for this master
- * @param inOrgs orgs of the master that we know of
- */
- public void setSourceOrgs(Set<IssSyncOrg> inOrgs) {
- this.srcOrgs = inOrgs;
- }
-
- /**
- * How many orgs did Master tell us about?
- * @return number of orgs from this master we know of
- */
- public int getNumSourceOrgs() {
- return getSourceOrgs().size();
- }
-
- /**
- * How many source-orgs have been mapped?
- * @return number of unique source-orgs that have non-null targets
- */
- public int getNumMappedSourceOrgs() {
- int mappedSources = 0;
- for (IssSyncOrg so : getSourceOrgs()) {
- if (so.getTargetOrg() != null) {
- mappedSources++;
- }
- }
- return mappedSources;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index e8a004f..02aa85c 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -36,7 +36,7 @@ public class IssSlave extends BaseDto {
public static final String CREATED = "created";
public static final String MODIFIED = "modified";
- /** salve-id parameter name */
+ /** slave-id parameter name */
public static final String SID = "sid";
private Long id;
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
deleted file mode 100644
index 18796c5..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping
-PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<hibernate-mapping>
- <class name="com.redhat.rhn.domain.iss.IssSyncOrg"
- table="rhnsyncorgs" >
- <id name="id" type="long" column="ID">
- <meta attribute="scope-set">protected</meta>
- <generator class="sequence">
- <param name="sequence">rhn_syncorgs_seq</param>
- </generator>
- </id>
- <property name="sourceOrgId" column="SOURCE_ORG_ID" type="long" />
- <property name="sourceOrgName" column="SOURCE_ORG_NAME" type="string" length="256" />
-
- <many-to-one name="catalogue"
- column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue"
- />
-
- <many-to-one name="targetOrg"
- column="TARGET_ID" class="com.redhat.rhn.domain.org.Org"
- />
- </class>
-</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java
deleted file mode 100644
index bcb770f..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.domain.iss;
-
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.frontend.dto.BaseDto;
-
-
-/**
- * IssSyncOrg - Class representation of the table rhnsyncorgs.
- * @version $Rev: 1 $
- */
-public class IssSyncOrg extends BaseDto {
-
- public static final Long NO_MAP_ID = new Long(-1L);
-
- private Long id;
- private Long sourceOrgId;
- private String sourceOrgName;
- private Org targetOrg;
- private IssOrgCatalogue catalogue;
-
- /**
- * Getter for id
- * @return Long to get
- */
- public Long getId() {
- return this.id;
- }
-
- /**
- * Setter for id
- * @param idIn to set
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * Getter for sourceOrgId
- * @return Long to get
- */
- public Long getSourceOrgId() {
- return this.sourceOrgId;
- }
-
- /**
- * Setter for sourceOrgId
- * @param sourceOrgIdIn to set
- */
- public void setSourceOrgId(Long sourceOrgIdIn) {
- this.sourceOrgId = sourceOrgIdIn;
- }
-
- /**
- * Getter for sourceOrgName
- * @return String to get
- */
- public String getSourceOrgName() {
- return this.sourceOrgName;
- }
-
- /**
- * Setter for sourceOrgName
- * @param sourceOrgNameIn to set
- */
- public void setSourceOrgName(String sourceOrgNameIn) {
- this.sourceOrgName = sourceOrgNameIn;
- }
-
- /**
- *
- * @return target org associated with this source-org
- */
- public Org getTargetOrg() {
- return this.targetOrg;
- }
-
- /**
- *
- * @param targetOrgIn target org to be associated with this source org
- */
- public void setTargetOrg(Org targetOrgIn) {
- this.targetOrg = targetOrgIn;
- }
-
- /**
- *
- * @return master-node that owns this source-org
- */
- public IssOrgCatalogue getCatalogue() {
- return this.catalogue;
- }
-
- /**
- *
- * @param catalogueIn master node that should own this org
- */
- public void setCatalogue(IssOrgCatalogue catalogueIn) {
- this.catalogue = catalogueIn;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
new file mode 100644
index 0000000..e0cd0ae
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/AllowSlaveOrgsAction.java
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssSlaveOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * AllowSlaveOrgsAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class AllowSlaveOrgsAction extends RhnAction {
+
+ private static final String LIST_NAME = "localOrgsList";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ "/rhn/admin/iss/EditSlave.do?sid=" + sid);
+ request.setAttribute(IssSlave.SID, sid);
+
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+
+ if (!requestContext.isSubmitted()) {
+ sessionSet.clear();
+ }
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ // Before creating entries for whatever selection we have,
+ // DELETE THE OLD ONES - less error-prone than trying to do
+ // set-theoretic operations based on set-diffs
+ IssFactory.clearMapsForSlave(sid);
+ helper.updateSet(sessionSet, LIST_NAME);
+ return handleDispatchAction(mapping, requestContext, sid, sessionSet);
+ }
+
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+ request.setAttribute(LIST_NAME, locals);
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, locals);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, locals);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ Map params = makeParamMap(request);
+ if (sid != null) {
+ params.put("sid", sid);
+ }
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context,
+ Long sid,
+ Set sessionSet) {
+ Set<String> soids = (Set<String>) sessionSet;
+ for (String soid : soids) {
+ // Make IssSlaveOrgs entry for this slave/orgid pair
+ Long oid = Long.parseLong(soid);
+ IssSlaveOrgs iso = new IssSlaveOrgs();
+ iso.setOrgId(oid);
+ iso.setSlaveId(sid);
+ IssFactory.save(iso);
+ }
+ return mapping.findForward("success");
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+
+ Collections.sort(outList, new OrgComparator());
+
+ return outList;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/DeleteSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/DeleteSlaveAction.java
new file mode 100644
index 0000000..f46e3c8
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/DeleteSlaveAction.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.manager.acl.AclManager;
+
+/**
+ * DeleteSlaveAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class DeleteSlaveAction extends RhnAction {
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls
+ .getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls
+ .getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ Long sid = deleteSlave(mapping, dynaForm, request, response);
+ ActionForward retval = mapping.findForward("default");
+
+ return retval;
+ }
+
+ private Long deleteSlave(ActionMapping mapping, DynaActionForm dynaForm,
+ HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
+
+ IssSlave slave = null;
+ if (!isNew) {
+ slave = IssFactory.lookupSlaveById(sid);
+ IssFactory.remove(slave);
+ ActionMessages msg = new ActionMessages();
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_removed", slave.getSlave()));
+ getStrutsDelegate().saveMessages(request, msg);
+ }
+ return sid;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java
new file mode 100644
index 0000000..602bbbf
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveAction.java
@@ -0,0 +1,160 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+
+/**
+ * EditSlaveAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class EditSlaveAction extends RhnAction {
+
+ private static final String LIST_NAME = "localOrgsList";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ if (isSubmitted(dynaForm)) {
+ Long sid = updateSlaveDetails(mapping, dynaForm, request, response);
+ retval = mapping.findForward("success");
+ retval = getStrutsDelegate().forwardParam(retval, IssSlave.SID, sid.toString());
+ }
+ else {
+ setupFormValues(request, dynaForm);
+ }
+ return retval;
+ }
+
+ private void setupFormValues(HttpServletRequest request,
+ DynaActionForm daForm) {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ if (sid == null) { // Creating new
+ daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
+ daForm.set(IssSlave.ENABLED, true);
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
+ }
+ else {
+ IssSlave slave = IssFactory.lookupSlaveById(sid);
+
+ daForm.set(IssSlave.ID, sid);
+ daForm.set(IssSlave.SLAVE, slave.getSlave());
+ daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
+
+ request.setAttribute(IssSlave.SID, sid);
+ }
+ }
+
+ private Long updateSlaveDetails(ActionMapping mapping,
+ DynaActionForm dynaForm,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ Long sid = null;
+ if (validateForm(request, dynaForm)) {
+ sid = (Long) dynaForm.get(IssSlave.ID);
+ boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
+
+ IssSlave slave = null;
+ if (isNew) {
+ slave = new IssSlave();
+ }
+ else {
+ slave = IssFactory.lookupSlaveById(sid);
+ }
+
+ String fqdn = dynaForm.getString(IssSlave.SLAVE);
+ slave.setSlave(fqdn);
+ Boolean enabled = (Boolean) dynaForm.get(IssSlave.ENABLED);
+ if (enabled == null) {
+ enabled = Boolean.FALSE;
+ }
+ slave.setEnabled(enabled ? "Y" : "N");
+ Boolean allowAll = (Boolean) dynaForm.get(IssSlave.ALLOWED_ALL_ORGS);
+ if (allowAll == null) {
+ allowAll = Boolean.FALSE;
+ }
+ slave.setAllowAllOrgs(allowAll ? "Y" : "N");
+
+ if (isNew) {
+ IssFactory.save(slave);
+ slave = (IssSlave)IssFactory.reload(slave);
+ sid = slave.getId();
+ }
+
+ ActionMessages msg = new ActionMessages();
+ if (isNew) {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_created", fqdn));
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_updated", fqdn));
+ }
+ getStrutsDelegate().saveMessages(request, msg);
+ }
+ return sid;
+ }
+
+ private boolean validateForm(HttpServletRequest request, DynaActionForm form) {
+ boolean retval = true;
+ return retval;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
new file mode 100644
index 0000000..ac9b131
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/EditSlaveSetupAction.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+
+/**
+ * EditSlaveSetupAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class EditSlaveSetupAction extends RhnAction {
+
+ private static final String LIST_NAME = "localOrgsList";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ setupFormValues(request, dynaForm);
+ setupOrgList(mapping, request, response);
+
+ ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ return retval;
+ }
+
+ private void setupOrgList(ActionMapping mapping, HttpServletRequest request,
+ HttpServletResponse response) {
+ RequestContext ctxt = new RequestContext(request);
+ Long sid = ctxt.getParamAsLong(IssSlave.SID);
+ if (sid == null) {
+ return;
+ }
+
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ "/rhn/admin/iss/AllowSlaveOrgs.do?sid=" + sid);
+
+ IssSlave theSlave = IssFactory.lookupSlaveById(sid);
+ Set<Long> mappedOrgs = mappedLocalOrgs(
+ new ArrayList<Org>(theSlave.getMappedOrgs()));
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ // if I have a previous set selections populate data using it
+ boolean isSubmitted = ctxt.isSubmitted();
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, locals);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+ else {
+ for (OrgDto o : locals) {
+ o.setSelected("Y".equals(theSlave.getAllowAllOrgs()) ||
+ mappedOrgs.contains(o.getId()));
+ }
+ }
+ request.setAttribute(LIST_NAME, locals);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+ }
+
+ private void setupFormValues(HttpServletRequest request,
+ DynaActionForm daForm) {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ if (sid == null) { // Creating new
+ daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
+ daForm.set(IssSlave.ENABLED, true);
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
+ }
+ else {
+ IssSlave slave = IssFactory.lookupSlaveById(sid);
+
+ daForm.set(IssSlave.ID, sid);
+ daForm.set(IssSlave.SLAVE, slave.getSlave());
+ daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
+
+ request.setAttribute(IssSlave.SID, sid);
+ }
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+
+ Collections.sort(outList, new OrgComparator());
+
+ return outList;
+ }
+
+ protected Set<Long> mappedLocalOrgs(List<Org> orgs) {
+ Set<Long> outIds = new HashSet<Long>();
+ for (Org o : orgs) {
+ outIds.add(o.getId());
+ }
+
+ return outIds;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java
deleted file mode 100644
index bbe6006..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.iss.IssSlaveOrgs;
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.domain.org.OrgFactory;
-import com.redhat.rhn.frontend.dto.OrgDto;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-/**
- * IssMasterAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssAllowSlaveOrgsAction extends RhnAction {
-
- private static final String LIST_NAME = "localOrgsList";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex =
- new PermissionException("Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- RequestContext requestContext = new RequestContext(request);
- Long sid = requestContext.getParamAsLong(IssSlave.SID);
-
- request.setAttribute(ListTagHelper.PARENT_URL,
- "/rhn/admin/iss/EditSlave.do?sid=" + sid);
- request.setAttribute(IssSlave.SID, sid);
-
-
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
- .getLabel());
-
- if (!requestContext.isSubmitted()) {
- sessionSet.clear();
- }
-
- SessionSetHelper helper = new SessionSetHelper(request);
-
- if (request.getParameter("dispatch") != null) {
- // Before creating entries for whatever selection we have,
- // DELETE THE OLD ONES - less error-prone than trying to do
- // set-theoretic operations based on set-diffs
- IssFactory.clearMapsForSlave(sid);
- helper.updateSet(sessionSet, LIST_NAME);
- return handleDispatchAction(mapping, requestContext, sid, sessionSet);
- }
-
- List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
- request.setAttribute(LIST_NAME, locals);
-
- // if its a list action update the set and the selections
- if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
- helper.execute(sessionSet, LIST_NAME, locals);
- }
-
- // if I have a previous set selections populate data using it
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, locals);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
- request);
- }
-
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
-
- Map params = makeParamMap(request);
- if (sid != null) {
- params.put("sid", sid);
- }
- return StrutsDelegate.getInstance().forwardParams(
- mapping.findForward("default"), params);
- }
-
- private ActionForward handleDispatchAction(ActionMapping mapping,
- RequestContext context,
- Long sid,
- Set sessionSet) {
- Set<String> soids = (Set<String>) sessionSet;
- for (String soid : soids) {
- // Make IssSlaveOrgs entry for this slave/orgid pair
- Long oid = Long.parseLong(soid);
- IssSlaveOrgs iso = new IssSlaveOrgs();
- iso.setOrgId(oid);
- iso.setSlaveId(sid);
- IssFactory.save(iso);
- }
- return mapping.findForward("success");
- }
-
- protected OrgDto createOrgDto(Long id, String name) {
- OrgDto oi = new OrgDto();
- oi.setId(id);
- oi.setName(name);
- return oi;
- }
-
- protected List<OrgDto> fromOrgs(List<Org> orgs) {
- List<OrgDto> outList = new ArrayList<OrgDto>();
- for (Org o : orgs) {
- outList.add(createOrgDto(o.getId(), o.getName()));
- }
-
- Collections.sort(outList, new OrgComparator());
-
- return outList;
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_LOCAL_ORGS;
- }
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
deleted file mode 100644
index 9424ac0..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-import org.apache.struts.action.DynaActionForm;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.manager.acl.AclManager;
-
-/**
- * IssEditSlaveAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssDeleteSlaveAction extends RhnAction {
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex = new PermissionException(
- "Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls
- .getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls
- .getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- DynaActionForm dynaForm = (DynaActionForm) formIn;
- Long sid = deleteSlave(mapping, dynaForm, request, response);
- ActionForward retval = mapping.findForward("default");
-
- return retval;
- }
-
- private Long deleteSlave(ActionMapping mapping, DynaActionForm dynaForm,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
-
- RequestContext requestContext = new RequestContext(request);
- Long sid = requestContext.getParamAsLong(IssSlave.SID);
-
- boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
-
- IssSlave slave = null;
- if (!isNew) {
- slave = IssFactory.lookupSlaveById(sid);
- IssFactory.remove(slave);
- ActionMessages msg = new ActionMessages();
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_removed", slave.getSlave()));
- getStrutsDelegate().saveMessages(request, msg);
- }
- return sid;
- }
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
deleted file mode 100644
index 7000959..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-import org.apache.struts.action.DynaActionForm;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-
-/**
- * IssEditSlaveAction extends RhnAction
- * @version $Rev: 1 $
- */
-public class IssEditSlaveAction extends RhnAction {
-
- private static final String LIST_NAME = "localOrgsList";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping,
- ActionForm formIn,
- HttpServletRequest request,
- HttpServletResponse response) throws Exception {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex =
- new PermissionException("Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
-
- DynaActionForm dynaForm = (DynaActionForm) formIn;
- if (isSubmitted(dynaForm)) {
- Long sid = updateSlaveDetails(mapping, dynaForm, request, response);
- retval = mapping.findForward("success");
- retval = getStrutsDelegate().forwardParam(retval, IssSlave.SID, sid.toString());
- }
- else {
- setupFormValues(request, dynaForm);
- }
- return retval;
- }
-
- private void setupFormValues(HttpServletRequest request,
- DynaActionForm daForm) {
-
- RequestContext requestContext = new RequestContext(request);
- Long sid = requestContext.getParamAsLong(IssSlave.SID);
-
- if (sid == null) { // Creating new
- daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
- daForm.set(IssSlave.ENABLED, true);
- daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
- }
- else {
- IssSlave slave = IssFactory.lookupSlaveById(sid);
-
- daForm.set(IssSlave.ID, sid);
- daForm.set(IssSlave.SLAVE, slave.getSlave());
- daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
- daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
-
- request.setAttribute(IssSlave.SID, sid);
- }
- }
-
- private Long updateSlaveDetails(ActionMapping mapping,
- DynaActionForm dynaForm,
- HttpServletRequest request,
- HttpServletResponse response) throws Exception {
-
- Long sid = null;
- if (validateForm(request, dynaForm)) {
- sid = (Long) dynaForm.get(IssSlave.ID);
- boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
-
- IssSlave slave = null;
- if (isNew) {
- slave = new IssSlave();
- }
- else {
- slave = IssFactory.lookupSlaveById(sid);
- }
-
- String fqdn = dynaForm.getString(IssSlave.SLAVE);
- slave.setSlave(fqdn);
- Boolean enabled = (Boolean) dynaForm.get(IssSlave.ENABLED);
- if (enabled == null) {
- enabled = Boolean.FALSE;
- }
- slave.setEnabled(enabled ? "Y" : "N");
- Boolean allowAll = (Boolean) dynaForm.get(IssSlave.ALLOWED_ALL_ORGS);
- if (allowAll == null) {
- allowAll = Boolean.FALSE;
- }
- slave.setAllowAllOrgs(allowAll ? "Y" : "N");
-
- if (isNew) {
- IssFactory.save(slave);
- slave = (IssSlave)IssFactory.reload(slave);
- sid = slave.getId();
- }
-
- ActionMessages msg = new ActionMessages();
- if (isNew) {
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_created", fqdn));
- }
- else {
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_updated", fqdn));
- }
- getStrutsDelegate().saveMessages(request, msg);
- }
- return sid;
- }
-
- private boolean validateForm(HttpServletRequest request, DynaActionForm form) {
- boolean retval = true;
- return retval;
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_LOCAL_ORGS;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
deleted file mode 100644
index a94cfd3..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.DynaActionForm;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.domain.org.OrgFactory;
-import com.redhat.rhn.frontend.dto.OrgDto;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-
-/**
- * IssEditSlaveSetupAction extends RhnAction
- * @version $Rev: 1 $
- */
-public class IssEditSlaveSetupAction extends RhnAction {
-
- private static final String LIST_NAME = "localOrgsList";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping,
- ActionForm formIn,
- HttpServletRequest request,
- HttpServletResponse response) throws Exception {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex =
- new PermissionException("Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- DynaActionForm dynaForm = (DynaActionForm) formIn;
- setupFormValues(request, dynaForm);
- setupOrgList(mapping, request, response);
-
- ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
- return retval;
- }
-
- private void setupOrgList(ActionMapping mapping, HttpServletRequest request,
- HttpServletResponse response) {
- RequestContext ctxt = new RequestContext(request);
- Long sid = ctxt.getParamAsLong(IssSlave.SID);
- if (sid == null) {
- return;
- }
-
- request.setAttribute(ListTagHelper.PARENT_URL,
- "/rhn/admin/iss/AllowSlaveOrgs.do?sid=" + sid);
-
- IssSlave theSlave = IssFactory.lookupSlaveById(sid);
- Set<Long> mappedOrgs = mappedLocalOrgs(
- new ArrayList<Org>(theSlave.getMappedOrgs()));
- List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
-
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
- .getLabel());
- SessionSetHelper helper = new SessionSetHelper(request);
-
- // if I have a previous set selections populate data using it
- boolean isSubmitted = ctxt.isSubmitted();
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, locals);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
- }
- else {
- for (OrgDto o : locals) {
- o.setSelected("Y".equals(theSlave.getAllowAllOrgs()) ||
- mappedOrgs.contains(o.getId()));
- }
- }
- request.setAttribute(LIST_NAME, locals);
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
- }
-
- private void setupFormValues(HttpServletRequest request,
- DynaActionForm daForm) {
-
- RequestContext requestContext = new RequestContext(request);
- Long sid = requestContext.getParamAsLong(IssSlave.SID);
-
- if (sid == null) { // Creating new
- daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
- daForm.set(IssSlave.ENABLED, true);
- daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
- }
- else {
- IssSlave slave = IssFactory.lookupSlaveById(sid);
-
- daForm.set(IssSlave.ID, sid);
- daForm.set(IssSlave.SLAVE, slave.getSlave());
- daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
- daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
-
- request.setAttribute(IssSlave.SID, sid);
- }
- }
-
- protected OrgDto createOrgDto(Long id, String name) {
- OrgDto oi = new OrgDto();
- oi.setId(id);
- oi.setName(name);
- return oi;
- }
-
- protected List<OrgDto> fromOrgs(List<Org> orgs) {
- List<OrgDto> outList = new ArrayList<OrgDto>();
- for (Org o : orgs) {
- outList.add(createOrgDto(o.getId(), o.getName()));
- }
-
- Collections.sort(outList, new OrgComparator());
-
- return outList;
- }
-
- protected Set<Long> mappedLocalOrgs(List<Org> orgs) {
- Set<Long> outIds = new HashSet<Long>();
- for (Org o : orgs) {
- outIds.add(o.getId());
- }
-
- return outIds;
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_LOCAL_ORGS;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
deleted file mode 100644
index 8114a61..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.DynaActionForm;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.domain.iss.IssSyncOrg;
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.domain.org.OrgFactory;
-import com.redhat.rhn.frontend.dto.OrgDto;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-
-/**
- * IssMapOrgsAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssMapOrgsAction extends RhnAction {
- private static final String DATA_SET = "all";
- private static final String SLAVES = "slave_org_list";
- private static final String MASTER = "master";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex = new PermissionException(
- "Only satellite admins can work with org-mappings");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- RequestContext ctxt = new RequestContext(request);
-
- Long mid = ctxt.getRequiredParam("mid");
- request.setAttribute("mid", mid);
-
- // Get all the known-orgs from the selected Master
- IssOrgCatalogue oc = IssFactory.lookupMasterById(mid);
- if (request.getParameter("dispatch") != null) {
- return handleDispatchAction(mapping, ctxt, oc);
- }
-
- List<IssSyncOrg> result = new ArrayList<IssSyncOrg>(
- oc.getSourceOrgs());
- Collections.sort(result, new IssSyncOrgComparator());
-
- // Get all of our orgs and turn into OrgDtos
- List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
-
-
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI() +
- "?mid=" + mid.toString());
-
- request.setAttribute(DATA_SET, result);
- request.setAttribute(SLAVES, locals);
- request.setAttribute(MASTER, oc.getLabel());
-
- return mapping.findForward("default");
- }
-
- protected ActionForward handleDispatchAction(
- ActionMapping mapping,
- RequestContext ctxt,
- IssOrgCatalogue master) {
- //TODO: Figure out what we're doing, and how, and then DO IT
- List<IssSyncOrg> masterOrgs = new ArrayList<IssSyncOrg>(master.getSourceOrgs());
- List<Org> locals = OrgFactory.lookupAllOrgs();
- Map<Long, Org> findLocals = new HashMap<Long, Org>();
- for (Org o : locals) {
- findLocals.put(o.getId(), o);
- }
-
- for (IssSyncOrg entry : masterOrgs) {
- Long targetId = ctxt.getParamAsLong(entry.getId().toString());
- if (targetId == null || targetId.equals(IssSyncOrg.NO_MAP_ID)) {
- entry.setTargetOrg(null);
- }
- else {
- entry.setTargetOrg(findLocals.get(targetId));
- }
- IssFactory.save(entry);
- }
- return mapping.findForward("success");
- }
-
- protected void setupForm(ActionForm formIn, IssOrgCatalogue master) {
- DynaActionForm form = (DynaActionForm) formIn;
- form.set(IssOrgCatalogue.ID, master.getId());
- form.set(IssOrgCatalogue.LABEL, master.getLabel());
- }
-
- protected OrgDto createOrgDto(Long id, String name) {
- OrgDto oi = new OrgDto();
- oi.setId(id);
- oi.setName(name);
- return oi;
- }
-
- protected List<OrgDto> fromOrgs(List<Org> orgs) {
- List<OrgDto> outList = new ArrayList<OrgDto>();
- for (Org o : orgs) {
- outList.add(createOrgDto(o.getId(), o.getName()));
- }
- Collections.sort(outList, new OrgComparator());
-
- OrgDto noMap = createOrgDto(IssSyncOrg.NO_MAP_ID, "NOT MAPPED");
- outList.add(0, noMap);
-
- return outList;
- }
-
-}
-
-/**
- * Compares OrgDtos by name
- * @author ggainey
- *
- */
-class OrgComparator implements Comparator<OrgDto> {
-
- @Override
- public int compare(OrgDto o1, OrgDto o2) {
- if (o1 == null || o2 == null) {
- throw new NullPointerException("Can't compare OrgDto with null");
- }
- return o1.getName().compareTo(o2.getName());
- }
-}
-
- /**
- * Compares IssSyncOrg by Catalogue/source-org-name
- * @author ggainey
- *
- */
- class IssSyncOrgComparator implements Comparator<IssSyncOrg> {
-
- @Override
- public int compare(IssSyncOrg so1, IssSyncOrg so2) {
- if (so1 == null || so2 == null) {
- throw new NullPointerException("Can't compare IssSyncOrg with null");
- }
- return so1.getSourceOrgName().compareTo(so2.getSourceOrgName());
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
deleted file mode 100644
index 0c4b574..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-/**
- * IssMasterAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssMasterAction extends RhnAction {
-
- private static final String LIST_NAME = "issSlaveList";
- public static final String DATA_SET = "all";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex =
- new PermissionException("Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- RequestContext ctxt = new RequestContext(request);
- SessionSetHelper helper = new SessionSetHelper(request);
-
- Set sessionSet = getSessionSet(request);
-
-
- if (request.getParameter("dispatch") != null) {
- // if its one of the Dispatch actions handle it..
- helper.updateSet(sessionSet, LIST_NAME);
- if (!sessionSet.isEmpty()) {
- return handleDispatchAction(mapping, ctxt);
- }
- RhnHelper.handleEmptySelection(request);
- }
-
- List<IssSlave> slaves = IssFactory.listAllIssSlaves();
-
- // if its a list action update the set and the selections
- if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
- helper.execute(sessionSet, LIST_NAME, slaves);
- }
-
- // if I have a previous set selections populate data using it
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, slaves);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
- request);
- }
-
- Map params = makeParamMap(request);
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
-
- request.setAttribute(DATA_SET, slaves);
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
-
- return StrutsDelegate.getInstance().forwardParams(
- mapping.findForward("default"), params);
- }
-
- private ActionForward handleDispatchAction(ActionMapping mapping,
- RequestContext context) {
-
- return mapping.findForward("confirm");
- }
-
- protected Set getSessionSet(HttpServletRequest request) {
- RequestContext ctxt = new RequestContext(request);
- Set slaveSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
- Set localSet = SessionSetHelper.lookupAndBind(request,
- getLocalSetDecl().getLabel());
- if (!ctxt.isSubmitted()) {
- slaveSet.clear();
- localSet.clear();
- }
- return slaveSet;
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_SLAVES;
- }
-
- protected RhnSetDecl getLocalSetDecl() {
- return RhnSetDecl.ISS_LOCAL_ORGS;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
deleted file mode 100644
index 16e7d6c..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.frontend.struts.RequestContext;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-
-/**
- * IssSlaveAction extends RhnAction
- * @version $Rev: 1 $
- */
-public class IssOrgCatalogueAction extends RhnAction {
-
- private static final String LIST_NAME = "issMasterList";
- public static final String DATA_SET = "all";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping,
- ActionForm formIn,
- HttpServletRequest request,
- HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex =
- new PermissionException("Only satellite admins can work with known masters");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- RequestContext requestContext = new RequestContext(request);
-
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
- .getLabel());
- if (!requestContext.isSubmitted()) {
- sessionSet.clear();
- }
-
- SessionSetHelper helper = new SessionSetHelper(request);
-
- if (request.getParameter("dispatch") != null) {
- // if its one of the Dispatch actions handle it..
- helper.updateSet(sessionSet, LIST_NAME);
- if (!sessionSet.isEmpty()) {
- return handleDispatchAction(mapping, requestContext);
- }
- RhnHelper.handleEmptySelection(request);
- }
-
- List<IssOrgCatalogue> masters = IssFactory.listAllMasters();
- request.setAttribute(DATA_SET, masters);
-
- // if its a list action update the set and the selections
- if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
- helper.execute(sessionSet, LIST_NAME, masters);
- }
-
- // if I have a previous set selections populate data using it
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, masters);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
- request);
- }
-
- Map params = makeParamMap(request);
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
-
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
-
- return StrutsDelegate.getInstance().forwardParams(
- mapping.findForward("default"), params);
- }
-
- private ActionForward handleDispatchAction(ActionMapping mapping,
- RequestContext context) {
-
- return mapping.findForward("confirm");
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_MASTERS;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
deleted file mode 100644
index adf9001..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-/**
- * IssMasterAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssRemoveMastersAction extends RhnAction {
-
- private static final String LIST_NAME = "issMasterList";
- public static final String DATA_SET = "all";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex = new PermissionException(
- "Only satellite admins can remove known masters");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- ActionForward destination = null;
- Set sessionSet = null;
-
- Long mid = getMid(request);
- if (mid == null) {
- sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
- }
- else {
- request.setAttribute(ListTagHelper.PARENT_URL,
- request.getRequestURI() + "?mid=" + mid.toString());
- }
-
- List<IssOrgCatalogue> masters = findSelectedMasters(sessionSet, mid);
-
- if (request.getParameter("dispatch") != null) {
- if (!masters.isEmpty()) {
- destination = handleDispatchAction(mapping, request, sessionSet, masters);
- if (sessionSet != null) {
- sessionSet.clear();
- }
- return destination;
- }
- else {
- RhnHelper.handleEmptySelection(request);
- }
- }
-
- // if I have a previous set selections populate data using it
- if (sessionSet != null && !sessionSet.isEmpty()) {
- SessionSetHelper helper = new SessionSetHelper(request);
- helper.syncSelections(sessionSet, masters);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
- }
-
- request.setAttribute(DATA_SET, masters);
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
-
- return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
- makeParamMap(request));
- }
-
- private Long getMid(HttpServletRequest req) {
- String mid = req.getParameter("mid");
-
- if (mid != null) {
- return Long.parseLong(mid);
- }
- else {
- return null;
- }
- }
-
- private List<IssOrgCatalogue> findSelectedMasters(Set sessionSet, Long midIn) {
- List<IssOrgCatalogue> masters = new ArrayList<IssOrgCatalogue>();
-
- if (sessionSet != null) {
- Set<String> mids = (Set<String>) sessionSet;
- for (String mid : mids) {
- IssOrgCatalogue aMaster = IssFactory.lookupMasterById(Long.parseLong(mid));
- masters.add(aMaster);
- }
- }
- else if (midIn != null) {
- masters.add(IssFactory.lookupMasterById(Long.parseLong(midIn.toString())));
- }
-
- return masters;
- }
-
- private ActionForward handleDispatchAction(ActionMapping mapping,
- HttpServletRequest request,
- Set sessionSet,
- List<IssOrgCatalogue> masters) {
- for (IssOrgCatalogue master : masters) {
- IssFactory.remove(master);
- }
-
- ActionMessages msg = new ActionMessages();
- if (masters.size() == 1) {
- IssOrgCatalogue master = masters.get(0);
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_master_removed", master.getLabel()));
-
- }
- else {
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_masters_removed"));
- }
- getStrutsDelegate().saveMessages(request, msg);
- return mapping.findForward("confirm");
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_MASTERS;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
deleted file mode 100644
index 5c25470..0000000
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.action.iss;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.action.ActionMessage;
-import org.apache.struts.action.ActionMessages;
-
-import com.redhat.rhn.common.localization.LocalizationService;
-import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssFactory;
-import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.RhnHelper;
-import com.redhat.rhn.frontend.struts.SessionSetHelper;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
-import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
-import com.redhat.rhn.manager.acl.AclManager;
-import com.redhat.rhn.manager.rhnset.RhnSetDecl;
-
-/**
- * IssMasterAction extends RhnAction
- *
- * @version $Rev: 1 $
- */
-public class IssRemoveSlavesAction extends RhnAction {
-
- private static final String LIST_NAME = "issSlaveList";
- public static final String DATA_SET = "all";
-
- /** {@inheritDoc} */
- public ActionForward execute(ActionMapping mapping, ActionForm formIn,
- HttpServletRequest request, HttpServletResponse response) {
-
- if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
- LocalizationService ls = LocalizationService.getInstance();
- PermissionException pex = new PermissionException(
- "Only satellite admins can modify allowed-slaves");
- pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
- pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
- throw pex;
- }
-
- ActionForward destination = null;
- Set sessionSet = null;
-
- Long sid = getSid(request);
- if (sid == null) {
- sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
- }
- else {
- request.setAttribute(ListTagHelper.PARENT_URL,
- request.getRequestURI() + "?sid=" + sid.toString());
- }
-
- List<IssSlave> slaves = findSelectedSlaves(sessionSet, sid);
-
- if (request.getParameter("dispatch") != null) {
- if (!slaves.isEmpty()) {
- destination = handleDispatchAction(mapping, request, slaves);
- if (sessionSet != null) {
- sessionSet.clear();
- }
- return destination;
- }
- else {
- RhnHelper.handleEmptySelection(request);
- }
- }
-
- // if I have a previous set selections populate data using it
- if (sessionSet != null && !sessionSet.isEmpty()) {
- SessionSetHelper helper = new SessionSetHelper(request);
- helper.syncSelections(sessionSet, slaves);
- ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
- }
-
- request.setAttribute(DATA_SET, slaves);
- ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
-
- return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
- makeParamMap(request));
- }
-
- private Long getSid(HttpServletRequest req) {
- String sid = req.getParameter("sid");
-
- if (sid != null) {
- return Long.parseLong(sid);
- }
- else {
- return null;
- }
- }
-
- private List<IssSlave> findSelectedSlaves(Set sessionSet, Object sidIn) {
- List<IssSlave> slaves = new ArrayList<IssSlave>();
-
- if (sessionSet != null) {
- Set<String> sids = (Set<String>) sessionSet;
- for (String sid : sids) {
- IssSlave aSlave = IssFactory.lookupSlaveById(Long.parseLong(sid));
- slaves.add(aSlave);
- }
- }
- else if (sidIn != null) {
- slaves.add(IssFactory.lookupSlaveById(Long.parseLong(sidIn.toString())));
- }
-
- return slaves;
- }
-
- private ActionForward handleDispatchAction(ActionMapping mapping,
- HttpServletRequest request, List<IssSlave> slaves) {
- for (IssSlave slave : slaves) {
- IssFactory.remove(slave);
- }
-
- ActionMessages msg = new ActionMessages();
- if (slaves.size() == 1) {
- IssSlave slave = slaves.get(0);
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_removed", slave.getSlave()));
-
- }
- else {
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slaves_removed"));
- }
- getStrutsDelegate().saveMessages(request, msg);
- return mapping.findForward("confirm");
- }
-
- protected RhnSetDecl getSetDecl() {
- return RhnSetDecl.ISS_SLAVES;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
new file mode 100644
index 0000000..fad74cc
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/MapOrgsAction.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.domain.iss.IssMasterOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+
+/**
+ * MapOrgsAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class MapOrgsAction extends RhnAction {
+ private static final String DATA_SET = "all";
+ private static final String SLAVES = "slave_org_list";
+ private static final String MASTER = "master";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can work with org-mappings");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext ctxt = new RequestContext(request);
+
+ Long mid = ctxt.getRequiredParam("mid");
+ request.setAttribute("mid", mid);
+
+ // Get all the known-orgs from the selected Master
+ IssMaster oc = IssFactory.lookupMasterById(mid);
+ if (request.getParameter("dispatch") != null) {
+ return handleDispatchAction(mapping, ctxt, oc);
+ }
+
+ List<IssMasterOrgs> result = new ArrayList<IssMasterOrgs>(
+ oc.getMasterOrgs());
+ Collections.sort(result, new IssSyncOrgComparator());
+
+ // Get all of our orgs and turn into OrgDtos
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI() +
+ "?mid=" + mid.toString());
+
+ request.setAttribute(DATA_SET, result);
+ request.setAttribute(SLAVES, locals);
+ request.setAttribute(MASTER, oc.getLabel());
+
+ return mapping.findForward("default");
+ }
+
+ protected ActionForward handleDispatchAction(
+ ActionMapping mapping,
+ RequestContext ctxt,
+ IssMaster master) {
+ //TODO: Figure out what we're doing, and how, and then DO IT
+ List<IssMasterOrgs> masterOrgs =
+ new ArrayList<IssMasterOrgs>(master.getMasterOrgs());
+ List<Org> locals = OrgFactory.lookupAllOrgs();
+ Map<Long, Org> findLocals = new HashMap<Long, Org>();
+ for (Org o : locals) {
+ findLocals.put(o.getId(), o);
+ }
+
+ for (IssMasterOrgs entry : masterOrgs) {
+ Long targetId = ctxt.getParamAsLong(entry.getId().toString());
+ if (targetId == null || targetId.equals(IssMasterOrgs.NO_MAP_ID)) {
+ entry.setLocalOrg(null);
+ }
+ else {
+ entry.setLocalOrg(findLocals.get(targetId));
+ }
+ IssFactory.save(entry);
+ }
+ return mapping.findForward("success");
+ }
+
+ protected void setupForm(ActionForm formIn, IssMaster master) {
+ DynaActionForm form = (DynaActionForm) formIn;
+ form.set(IssMaster.ID, master.getId());
+ form.set(IssMaster.LABEL, master.getLabel());
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+ Collections.sort(outList, new OrgComparator());
+
+ OrgDto noMap = createOrgDto(IssMasterOrgs.NO_MAP_ID, "NOT MAPPED");
+ outList.add(0, noMap);
+
+ return outList;
+ }
+
+}
+
+/**
+ * Compares OrgDtos by name
+ * @author ggainey
+ *
+ */
+class OrgComparator implements Comparator<OrgDto> {
+
+ @Override
+ public int compare(OrgDto o1, OrgDto o2) {
+ if (o1 == null || o2 == null) {
+ throw new NullPointerException("Can't compare OrgDto with null");
+ }
+ return o1.getName().compareTo(o2.getName());
+ }
+}
+
+ /**
+ * Compares IssSyncOrg by Catalogue/source-org-name
+ * @author ggainey
+ *
+ */
+ class IssSyncOrgComparator implements Comparator<IssMasterOrgs> {
+
+ @Override
+ public int compare(IssMasterOrgs so1, IssMasterOrgs so2) {
+ if (so1 == null || so2 == null) {
+ throw new NullPointerException("Can't compare IssSyncOrg with null");
+ }
+ return so1.getMasterOrgName().compareTo(so2.getMasterOrgName());
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/MasterAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/MasterAction.java
new file mode 100644
index 0000000..f818a31
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/MasterAction.java
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * MasterAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class MasterAction extends RhnAction {
+
+ private static final String LIST_NAME = "issSlaveList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext ctxt = new RequestContext(request);
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ Set sessionSet = getSessionSet(request);
+
+
+ if (request.getParameter("dispatch") != null) {
+ // if its one of the Dispatch actions handle it..
+ helper.updateSet(sessionSet, LIST_NAME);
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, ctxt);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ List<IssSlave> slaves = IssFactory.listAllIssSlaves();
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, slaves);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, slaves);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ Map params = makeParamMap(request);
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ request.setAttribute(DATA_SET, slaves);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context) {
+
+ return mapping.findForward("confirm");
+ }
+
+ protected Set getSessionSet(HttpServletRequest request) {
+ RequestContext ctxt = new RequestContext(request);
+ Set slaveSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ Set localSet = SessionSetHelper.lookupAndBind(request,
+ getLocalSetDecl().getLabel());
+ if (!ctxt.isSubmitted()) {
+ slaveSet.clear();
+ localSet.clear();
+ }
+ return slaveSet;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_SLAVES;
+ }
+
+ protected RhnSetDecl getLocalSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveMastersAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveMastersAction.java
new file mode 100644
index 0000000..45b8bb8
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveMastersAction.java
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * RemoveMastersAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class RemoveMastersAction extends RhnAction {
+
+ private static final String LIST_NAME = "issMasterList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can remove known masters");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ ActionForward destination = null;
+ Set sessionSet = null;
+
+ Long mid = getMid(request);
+ if (mid == null) {
+ sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+ }
+ else {
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ request.getRequestURI() + "?mid=" + mid.toString());
+ }
+
+ List<IssMaster> masters = findSelectedMasters(sessionSet, mid);
+
+ if (request.getParameter("dispatch") != null) {
+ if (!masters.isEmpty()) {
+ destination = handleDispatchAction(mapping, request, sessionSet, masters);
+ if (sessionSet != null) {
+ sessionSet.clear();
+ }
+ return destination;
+ }
+ else {
+ RhnHelper.handleEmptySelection(request);
+ }
+ }
+
+ // if I have a previous set selections populate data using it
+ if (sessionSet != null && !sessionSet.isEmpty()) {
+ SessionSetHelper helper = new SessionSetHelper(request);
+ helper.syncSelections(sessionSet, masters);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+
+ request.setAttribute(DATA_SET, masters);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
+ makeParamMap(request));
+ }
+
+ private Long getMid(HttpServletRequest req) {
+ String mid = req.getParameter("mid");
+
+ if (mid != null) {
+ return Long.parseLong(mid);
+ }
+ else {
+ return null;
+ }
+ }
+
+ private List<IssMaster> findSelectedMasters(Set sessionSet, Long midIn) {
+ List<IssMaster> masters = new ArrayList<IssMaster>();
+
+ if (sessionSet != null) {
+ Set<String> mids = (Set<String>) sessionSet;
+ for (String mid : mids) {
+ IssMaster aMaster = IssFactory.lookupMasterById(Long.parseLong(mid));
+ masters.add(aMaster);
+ }
+ }
+ else if (midIn != null) {
+ masters.add(IssFactory.lookupMasterById(Long.parseLong(midIn.toString())));
+ }
+
+ return masters;
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ HttpServletRequest request,
+ Set sessionSet,
+ List<IssMaster> masters) {
+ for (IssMaster master : masters) {
+ IssFactory.remove(master);
+ }
+
+ ActionMessages msg = new ActionMessages();
+ if (masters.size() == 1) {
+ IssMaster master = masters.get(0);
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_master_removed", master.getLabel()));
+
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_masters_removed"));
+ }
+ getStrutsDelegate().saveMessages(request, msg);
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_MASTERS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveSlavesAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveSlavesAction.java
new file mode 100644
index 0000000..c089412
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/RemoveSlavesAction.java
@@ -0,0 +1,162 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * RemoveSlavesAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class RemoveSlavesAction extends RhnAction {
+
+ private static final String LIST_NAME = "issSlaveList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ ActionForward destination = null;
+ Set sessionSet = null;
+
+ Long sid = getSid(request);
+ if (sid == null) {
+ sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+ }
+ else {
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ request.getRequestURI() + "?sid=" + sid.toString());
+ }
+
+ List<IssSlave> slaves = findSelectedSlaves(sessionSet, sid);
+
+ if (request.getParameter("dispatch") != null) {
+ if (!slaves.isEmpty()) {
+ destination = handleDispatchAction(mapping, request, slaves);
+ if (sessionSet != null) {
+ sessionSet.clear();
+ }
+ return destination;
+ }
+ else {
+ RhnHelper.handleEmptySelection(request);
+ }
+ }
+
+ // if I have a previous set selections populate data using it
+ if (sessionSet != null && !sessionSet.isEmpty()) {
+ SessionSetHelper helper = new SessionSetHelper(request);
+ helper.syncSelections(sessionSet, slaves);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+
+ request.setAttribute(DATA_SET, slaves);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
+ makeParamMap(request));
+ }
+
+ private Long getSid(HttpServletRequest req) {
+ String sid = req.getParameter("sid");
+
+ if (sid != null) {
+ return Long.parseLong(sid);
+ }
+ else {
+ return null;
+ }
+ }
+
+ private List<IssSlave> findSelectedSlaves(Set sessionSet, Object sidIn) {
+ List<IssSlave> slaves = new ArrayList<IssSlave>();
+
+ if (sessionSet != null) {
+ Set<String> sids = (Set<String>) sessionSet;
+ for (String sid : sids) {
+ IssSlave aSlave = IssFactory.lookupSlaveById(Long.parseLong(sid));
+ slaves.add(aSlave);
+ }
+ }
+ else if (sidIn != null) {
+ slaves.add(IssFactory.lookupSlaveById(Long.parseLong(sidIn.toString())));
+ }
+
+ return slaves;
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ HttpServletRequest request, List<IssSlave> slaves) {
+ for (IssSlave slave : slaves) {
+ IssFactory.remove(slave);
+ }
+
+ ActionMessages msg = new ActionMessages();
+ if (slaves.size() == 1) {
+ IssSlave slave = slaves.get(0);
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_removed", slave.getSlave()));
+
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slaves_removed"));
+ }
+ getStrutsDelegate().saveMessages(request, msg);
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_SLAVES;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/SlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/SlaveAction.java
new file mode 100644
index 0000000..57b8659
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/SlaveAction.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssMaster;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+
+/**
+ * SlaveAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class SlaveAction extends RhnAction {
+
+ private static final String LIST_NAME = "issMasterList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can work with known masters");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+ if (!requestContext.isSubmitted()) {
+ sessionSet.clear();
+ }
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ // if its one of the Dispatch actions handle it..
+ helper.updateSet(sessionSet, LIST_NAME);
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, requestContext);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ List<IssMaster> masters = IssFactory.listAllMasters();
+ request.setAttribute(DATA_SET, masters);
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, masters);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, masters);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ Map params = makeParamMap(request);
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context) {
+
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_MASTERS;
+ }
+
+}
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
index 8f0a36b..0b2b74f 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
@@ -44,13 +44,13 @@
emptykey="iss.maporgs.jsp.nomasterorgs">
<rl:column sortable="true" headerkey="iss.master.org.name"
sortattr="sourceOrgName">
- <c:out value="${current.sourceOrgName}" />
+ <c:out value="${current.masterOrgName}" />
</rl:column>
<rl:column headerkey="iss.slave.orgs">
<select name="${current.id}">
<c:forEach var="localOrg" items="${requestScope.slave_org_list}">
<c:choose>
- <c:when test="${localOrg.id == current.targetOrg.id}">
+ <c:when test="${localOrg.id == current.localOrg.id}">
<option value="${localOrg.id}" selected>
</c:when>
<c:otherwise>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
index b1cab1d..9c9d129 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
@@ -44,10 +44,10 @@
</html:link>
</rl:column>
<rl:column headerkey="iss.num.master.orgs">
- <c:out value="${current.numSourceOrgs}" />
+ <c:out value="${current.numMasterOrgs}" />
</rl:column>
<rl:column headerkey="iss.num.unmapped.orgs">
- <c:out value="${current.numSourceOrgs - current.numMappedSourceOrgs}" />
+ <c:out value="${current.numMasterOrgs - current.numMappedMasterOrgs}" />
</rl:column>
</rl:list>
<c:if test="${not empty requestScope.all}">
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 4967ff0..e3d48a6 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -5205,7 +5205,7 @@
<action path="/admin/iss/Master"
scope="request"
input="/WEB-INF/pages/admin/iss/master.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssMasterAction"
+ type="com.redhat.rhn.frontend.action.iss.MasterAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5221,7 +5221,7 @@
scope="request"
name="editSlaveForm"
input="/WEB-INF/pages/admin/iss/editslave.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssEditSlaveSetupAction"
+ type="com.redhat.rhn.frontend.action.iss.EditSlaveSetupAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5234,7 +5234,7 @@
scope="request"
name="editSlaveForm"
input="/WEB-INF/pages/admin/iss/editslave.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssEditSlaveAction"
+ type="com.redhat.rhn.frontend.action.iss.EditSlaveAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5247,7 +5247,7 @@
scope="request"
name="editSlaveForm"
input="/WEB-INF/pages/admin/iss/editslave.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssAllowSlaveOrgsAction"
+ type="com.redhat.rhn.frontend.action.iss.AllowSlaveOrgsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5260,7 +5260,7 @@
scope="request"
name="editSlaveForm"
input="/WEB-INF/pages/admin/iss/confirmslaveremove.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssRemoveSlavesAction"
+ type="com.redhat.rhn.frontend.action.iss.RemoveSlavesAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5272,7 +5272,7 @@
<action path="/admin/iss/DeleteSlave"
scope="request"
input="/WEB-INF/pages/admin/iss/editslave.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssDeleteSlaveAction"
+ type="com.redhat.rhn.frontend.action.iss.DeleteSlaveAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5282,7 +5282,7 @@
<action path="/admin/iss/Slave"
scope="request"
input="/WEB-INF/pages/admin/iss/slave.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssOrgCatalogueAction"
+ type="com.redhat.rhn.frontend.action.iss.SlaveAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5295,7 +5295,7 @@
<action path="/admin/iss/RemoveMasterConfirm"
scope="request"
input="/WEB-INF/pages/admin/iss/confirmmasterremove.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssRemoveMastersAction"
+ type="com.redhat.rhn.frontend.action.iss.RemoveMastersAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
@@ -5308,7 +5308,7 @@
scope="request"
name="mapOrgsForm"
input="/WEB-INF/pages/admin/iss/maporgs.jsp"
- type="com.redhat.rhn.frontend.action.iss.IssMapOrgsAction"
+ type="com.redhat.rhn.frontend.action.iss.MapOrgsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
diff --git a/schema/spacewalk/common/tables/rhnISSMaster.sql b/schema/spacewalk/common/tables/rhnISSMaster.sql
new file mode 100644
index 0000000..54db1a5
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnISSMaster.sql
@@ -0,0 +1,7 @@
+create table rhnIssMaster (
+ id number not null constraint rhn_iss_master_id_pk primary key,
+ label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/common/tables/rhnISSMasterOrgs.sql b/schema/spacewalk/common/tables/rhnISSMasterOrgs.sql
new file mode 100644
index 0000000..7991435
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnISSMasterOrgs.sql
@@ -0,0 +1,12 @@
+create table rhnIssMasterOrgs (
+ id number not null constraint rhn_issmasterorgs_id_pk primary key,
+ master_id number not null
+ constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
+ master_org_id number not null,
+ master_org_name varchar2(512) not null,
+ local_org_id number
+ constraint rhn_issmasterorgs_lid_fk references web_customer(id),
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmasterorgs_seq;
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql b/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql
deleted file mode 100644
index 83f709b..0000000
--- a/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnSyncOrgCatalogue (
- id number not null constraint rhn_sync_org_cat_id_pk primary key,
- label varchar2(256) not null constraint rhn_sync_org_cat_label_uq unique,
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_syncorgcatalogue_seq;
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgs.sql b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
deleted file mode 100644
index 9085fdc..0000000
--- a/schema/spacewalk/common/tables/rhnSyncOrgs.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnSyncOrgs (
- id number not null constraint rhn_syncorgs_id_pk primary key,
- catalogue_id number not null
- constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
- source_org_id number not null,
- source_org_name varchar2(512) not null,
- target_id number
- constraint rhn_syncorgs_tid_fk references web_customer(id),
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_syncorgs_seq;
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 5ab6b5f..e32ce2f 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -265,4 +265,4 @@ rhnXccdfRuleresult :: rhnXccdfTestresult rhnXccdfIdent rhnXccdfRuler
rhnXccdfTestresult :: rhnServer rhnActionScap rhnXccdfBenchmark rhnXccdfProfile
rhnXccdfRuleIdentMap :: rhnXccdfRuleresult
rhnISSSlaveOrgs :: rhnISSSlave web_customer
-rhnSyncOrgs :: rhnSyncOrgCatalogue web_customer
+rhnISSMasterOrgs :: rhnISSMaster web_customer
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql
new file mode 100644
index 0000000..54db1a5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnISSMaster.sql
@@ -0,0 +1,7 @@
+create table rhnIssMaster (
+ id number not null constraint rhn_iss_master_id_pk primary key,
+ label varchar2(256) not null constraint rhn_iss_master_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmaster_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql
deleted file mode 100644
index 83f709b..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnSyncOrgCatalogue (
- id number not null constraint rhn_sync_org_cat_id_pk primary key,
- label varchar2(256) not null constraint rhn_sync_org_cat_label_uq unique,
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_syncorgcatalogue_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql
new file mode 100644
index 0000000..7991435
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnISSMasterOrgs.sql
@@ -0,0 +1,12 @@
+create table rhnIssMasterOrgs (
+ id number not null constraint rhn_issmasterorgs_id_pk primary key,
+ master_id number not null
+ constraint rhn_issmasterorgs_cid_fk references rhnIssMaster(id) on delete cascade,
+ master_org_id number not null,
+ master_org_name varchar2(512) not null,
+ local_org_id number
+ constraint rhn_issmasterorgs_lid_fk references web_customer(id),
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issmasterorgs_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
deleted file mode 100644
index 9085fdc..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-create table rhnSyncOrgs (
- id number not null constraint rhn_syncorgs_id_pk primary key,
- catalogue_id number not null
- constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
- source_org_id number not null,
- source_org_name varchar2(512) not null,
- target_id number
- constraint rhn_syncorgs_tid_fk references web_customer(id),
- created timestamp with local time zone default (current_timestamp) not null
-);
-
-create sequence rhn_syncorgs_seq;
commit 348090dd457c8ebe6b2081f6edb5724a3199ce77
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Wed May 29 14:47:54 2013 -0400
Remove test-class that should never have been committed
diff --git a/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java b/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java
deleted file mode 100644
index 32334bf..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.redhat.rhn.domain.iss;
-
-import com.redhat.rhn.frontend.dto.BaseDto;
-
-/**
- * @author ggainey
- *
- */
-public class SlaveItem extends BaseDto {
- private Long id;
- private String fqdn;
- private String ip;
- private Boolean enabled;
- private Boolean allOrgs;
- private Boolean selectable;
-
- /**
- * @param idIn test
- * @param fqdnIn test
- * @param ipIn test
- * @param enabledIn test
- * @param allOrgsIn test
- * @param selectableIn test
- */
- public SlaveItem(Long idIn, String fqdnIn, String ipIn, Boolean enabledIn,
- Boolean allOrgsIn, Boolean selectableIn) {
- super();
- this.id = idIn;
- this.fqdn = fqdnIn;
- this.ip = ipIn;
- this.enabled = enabledIn;
- this.allOrgs = allOrgsIn;
- this.selectable = selectableIn;
- }
-
- /**
- * @return test
- */
- public Long getId() {
- return id;
- }
-
- /**
- * @param idIn test
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * @return test
- */
- public String getFqdn() {
- return fqdn;
- }
-
- /**
- * @param fqdnIn test
- */
- public void setFqdn(String fqdnIn) {
- this.fqdn = fqdnIn;
- }
-
- /**
- * @return test
- */
- public String getIp() {
- return ip;
- }
-
- /**
- * @param ipIn test
- */
- public void setIp(String ipIn) {
- this.ip = ipIn;
- }
-
- /**
- * @return test
- */
- public Boolean getEnabled() {
- return enabled;
- }
-
- /**
- * @param enabledIn test
- */
- public void setEnabled(Boolean enabledIn) {
- this.enabled = enabledIn;
- }
-
- /**
- * @return test
- */
- public Boolean getAllOrgs() {
- return allOrgs;
- }
-
- /**
- * @param allOrgsIn test
- */
- public void setAllOrgs(Boolean allOrgsIn) {
- this.allOrgs = allOrgsIn;
- }
-
- /**
- * @return test
- */
- public Boolean getSelectable() {
- return selectable;
- }
-
- /**
- * @param selectableIn test
- */
- public void setSelectable(Boolean selectableIn) {
- this.selectable = selectableIn;
- }
-}
commit 3fa0b368d8d024e5ccb33ac1807e67980d3d1f45
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Wed May 29 14:46:57 2013 -0400
Tweaks to L10N strings
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 325e84b..8e0a0be 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -20056,7 +20056,7 @@ given channel.</source>
<source>Edit Slave Details</source>
</trans-unit>
<trans-unit id="iss.editslave.jsp.allowed.orgs.header">
- <source>Allow Export of the Selected Orgs</source>
+ <source>Allow Export of the Selected Organizations</source>
</trans-unit>
<trans-unit id="iss.editslave.jsp.nolocalorgs">
<source>No local organizations available</source>
@@ -20105,7 +20105,7 @@ given channel.</source>
</trans-unit>
<trans-unit id="iss.confirmmasterremove.jsp.areyousure">
<source>
- Removing the masters below will remove any master-to-slave Org mappings you have created.
+ Removing the masters below will remove any master-to-slave organization mappings you have created.
This operation cannot be undone - make sure you really want to do this!
</source>
</trans-unit>
@@ -20126,10 +20126,9 @@ given channel.</source>
<trans-unit id="iss.maporgs.jsp.explanation">
<source>
In order to synchronize channel access-permissions from Master to Slave,
- each known Master Org must be mapped to a local Org in this @@PRODUCT_NAME@@ instance.
- On this page the administrator can map Master orgs to existing local orgs,
- create new local orgs automatically,
- or choose not to map specific Master orgs' permissions to this @@PRODUCT_NAME@@ instance.
+ each known Master organization must be mapped to a local organization in this @@PRODUCT_NAME@@ instance.
+ On this page the administrator can accomplish this mapping. Note that if a Master organization is not mapped,
+ channels that were restricted to that oragnization on the Master will be public in this @@PRODUCT_NAME@@ instance.
</source>
</trans-unit>
<trans-unit id="iss.maporgs.jsp.header2">
commit 5809b67546da6e5c06b5199581593ddae8475f67
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Wed May 29 07:49:00 2013 -0400
Fix incorrect L10N strings
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 819238f..325e84b 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -20017,13 +20017,13 @@ given channel.</source>
<source>Slave {0} removed</source>
</trans-unit>
<trans-unit id="message.iss_masters_removed">
- <source>Selected slaves have been removed</source>
+ <source>Selected masters have been removed</source>
</trans-unit>
<trans-unit id="message.iss_master_updated">
- <source>Slave {0} updated</source>
+ <source>Master {0} updated</source>
</trans-unit>
<trans-unit id="message.iss_master_removed">
- <source>Slave {0} removed</source>
+ <source>Master {0} removed</source>
</trans-unit>
<group>
<context-group name="ctx">
@@ -20136,7 +20136,7 @@ given channel.</source>
<source>Configure Master-to-Slave Org Mappings for {0}</source>
</trans-unit>
<trans-unit id="iss.maporgs.jsp.nomasterorgs">
- <source>No master organizations are known to this slave</source>
+ <source>This master did not export any of its organizations to this slave</source>
</trans-unit>
</group>
</body>
commit a3a4162f0b85e49bd4774ed204ccd0344df4d2ae
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 28 14:32:38 2013 -0400
I18N updates
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 55db7f6..819238f 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -19956,6 +19956,9 @@ given channel.</source>
<trans-unit id="iss.slave.notAll">
<source>Do Not Sync All</source>
</trans-unit>
+ <trans-unit id="iss.localorg.name">
+ <source>Local Organization</source>
+ </trans-unit>
<trans-unit id="toolbar.create.slave">
<source>Add new slave</source>
</trans-unit>
@@ -19974,9 +19977,15 @@ given channel.</source>
<trans-unit id="iss.slave.create">
<source>Create</source>
</trans-unit>
+ <trans-unit id="iss.slave.associate">
+ <source>Allow Orgs</source>
+ </trans-unit>
<trans-unit id="iss.confirm.remove.slaves">
<source>Remove Slaves</source>
</trans-unit>
+ <trans-unit id="iss.confirm.remove.masters">
+ <source>Remove Masters</source>
+ </trans-unit>
<trans-unit id="iss.num.master.orgs">
<source>Known Orgs</source>
</trans-unit>
@@ -20007,6 +20016,15 @@ given channel.</source>
<trans-unit id="message.iss_slave_removed">
<source>Slave {0} removed</source>
</trans-unit>
+ <trans-unit id="message.iss_masters_removed">
+ <source>Selected slaves have been removed</source>
+ </trans-unit>
+ <trans-unit id="message.iss_master_updated">
+ <source>Slave {0} updated</source>
+ </trans-unit>
+ <trans-unit id="message.iss_master_removed">
+ <source>Slave {0} removed</source>
+ </trans-unit>
<group>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/iss/Master.do</context>
@@ -20020,6 +20038,9 @@ given channel.</source>
<trans-unit id="iss.master.jsp.header2">
<source>Known Slave Instances</source>
</trans-unit>
+ <trans-unit id="iss.master.jsp.noslaves">
+ <source>No ISS Slaves are currently defined</source>
+ </trans-unit>
</group>
<group>
<context-group name="ctx">
@@ -20034,6 +20055,12 @@ given channel.</source>
<trans-unit id="iss.editslave.jsp.header2">
<source>Edit Slave Details</source>
</trans-unit>
+ <trans-unit id="iss.editslave.jsp.allowed.orgs.header">
+ <source>Allow Export of the Selected Orgs</source>
+ </trans-unit>
+ <trans-unit id="iss.editslave.jsp.nolocalorgs">
+ <source>No local organizations available</source>
+ </trans-unit>
</group>
<group>
<context-group name="ctx">
@@ -20065,6 +20092,9 @@ given channel.</source>
<trans-unit id="iss.slave.jsp.header2">
<source>Known Master Instances</source>
</trans-unit>
+ <trans-unit id="iss.slave.jsp.nomasters">
+ <source>No Masters known to this Slave</source>
+ </trans-unit>
</group>
<group>
<context-group name="ctx">
@@ -20082,6 +20112,9 @@ given channel.</source>
<trans-unit id="iss.confirmmasterremove.jsp.header2">
<source>Masters To Be Removed</source>
</trans-unit>
+ <trans-unit id="iss.confirmslaveremove.jsp.nomasters">
+ <source>No Masters known to this Slave</source>
+ </trans-unit>
</group>
<group>
<context-group name="ctx">
@@ -20102,6 +20135,9 @@ given channel.</source>
<trans-unit id="iss.maporgs.jsp.header2">
<source>Configure Master-to-Slave Org Mappings for {0}</source>
</trans-unit>
+ <trans-unit id="iss.maporgs.jsp.nomasterorgs">
+ <source>No master organizations are known to this slave</source>
+ </trans-unit>
</group>
</body>
</file>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
index 8fceb3f..23b1784 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
@@ -36,7 +36,7 @@
<rhn:csrf />
<rhn:submitted />
<rl:list dataset="pageList" name="issMasterList"
- emptykey="slave.jsp.nomasters">
+ emptykey="iss.slave.jsp.nomasters">
<rl:column sortable="true" headerkey="iss.master.name" sortattr="label">
<html:link href="/rhn/admin/iss/MapOrgs.do?mid=${current.id}">
<c:out value="${current.label}" />
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
index a0c2089..321fe2f 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
@@ -36,7 +36,7 @@
<rhn:csrf />
<rhn:submitted />
<rl:list dataset="pageList" name="issSlaveList"
- emptykey="master.jsp.nomasters">
+ emptykey="iss.confirmslaveremove.jsp.nomasters">
<rl:column sortable="true" headerkey="iss.slave.name" sortattr="slave">
<html:link href="/rhn/admin/iss/EditSlave.do?sid=${current.id}">
<c:out value="${current.slave}" />
commit caab1a0495afec63f9618eab43ce4d478e758587
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 28 13:49:52 2013 -0400
Fix rmv-master and cascades
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
index 9320b50..7bc2991 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
@@ -14,7 +14,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="label" column="LABEL" type="string" length="256" />
- <set name="sourceOrgs" inverse="true" cascade="delete">
+ <set name="sourceOrgs" inverse="true" cascade="all">
<key column="catalogue_id"/>
<one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrg"/>
</set>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
index 0b248e6..18796c5 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
@@ -14,8 +14,12 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="sourceOrgId" column="SOURCE_ORG_ID" type="long" />
<property name="sourceOrgName" column="SOURCE_ORG_NAME" type="string" length="256" />
- <many-to-one name="catalogue" column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue" />
+ <many-to-one name="catalogue"
+ column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue"
+ />
- <many-to-one name="targetOrg" column="TARGET_ID" class="com.redhat.rhn.domain.org.Org" />
+ <many-to-one name="targetOrg"
+ column="TARGET_ID" class="com.redhat.rhn.domain.org.Org"
+ />
</class>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
index 35e82c9..adf9001 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
@@ -18,7 +18,6 @@ package com.redhat.rhn.frontend.action.iss;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
@@ -27,13 +26,13 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.frontend.struts.SessionSetHelper;
@@ -65,55 +64,96 @@ public class IssRemoveMastersAction extends RhnAction {
throw pex;
}
- RequestContext requestContext = new RequestContext(request);
- Map params = makeParamMap(request);
+ ActionForward destination = null;
+ Set sessionSet = null;
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
-
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
- List<IssOrgCatalogue> masters = findSelectedMasters(sessionSet);
+ Long mid = getMid(request);
+ if (mid == null) {
+ sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+ }
+ else {
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ request.getRequestURI() + "?mid=" + mid.toString());
+ }
- SessionSetHelper helper = new SessionSetHelper(request);
+ List<IssOrgCatalogue> masters = findSelectedMasters(sessionSet, mid);
if (request.getParameter("dispatch") != null) {
- if (!sessionSet.isEmpty()) {
- return handleDispatchAction(mapping, requestContext, sessionSet, masters);
+ if (!masters.isEmpty()) {
+ destination = handleDispatchAction(mapping, request, sessionSet, masters);
+ if (sessionSet != null) {
+ sessionSet.clear();
+ }
+ return destination;
+ }
+ else {
+ RhnHelper.handleEmptySelection(request);
}
- RhnHelper.handleEmptySelection(request);
}
- DataList<IssOrgCatalogue> result = new DataList<IssOrgCatalogue>(masters);
-
// if I have a previous set selections populate data using it
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, result);
+ if (sessionSet != null && !sessionSet.isEmpty()) {
+ SessionSetHelper helper = new SessionSetHelper(request);
+ helper.syncSelections(sessionSet, masters);
ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
}
- request.setAttribute(DATA_SET, result);
+ request.setAttribute(DATA_SET, masters);
ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
- params);
+ makeParamMap(request));
}
- private List<IssOrgCatalogue> findSelectedMasters(Set sessionSet) {
- Set<String> mids = (Set<String>) sessionSet;
+ private Long getMid(HttpServletRequest req) {
+ String mid = req.getParameter("mid");
+
+ if (mid != null) {
+ return Long.parseLong(mid);
+ }
+ else {
+ return null;
+ }
+ }
+
+ private List<IssOrgCatalogue> findSelectedMasters(Set sessionSet, Long midIn) {
List<IssOrgCatalogue> masters = new ArrayList<IssOrgCatalogue>();
- for (String mid : mids) {
- IssOrgCatalogue aMaster = IssFactory.lookupMasterById(Long.parseLong(mid));
- masters.add(aMaster);
+
+ if (sessionSet != null) {
+ Set<String> mids = (Set<String>) sessionSet;
+ for (String mid : mids) {
+ IssOrgCatalogue aMaster = IssFactory.lookupMasterById(Long.parseLong(mid));
+ masters.add(aMaster);
+ }
+ }
+ else if (midIn != null) {
+ masters.add(IssFactory.lookupMasterById(Long.parseLong(midIn.toString())));
}
+
return masters;
}
private ActionForward handleDispatchAction(ActionMapping mapping,
- RequestContext context, Set sessionSet, List<IssOrgCatalogue> masters) {
+ HttpServletRequest request,
+ Set sessionSet,
+ List<IssOrgCatalogue> masters) {
for (IssOrgCatalogue master : masters) {
IssFactory.remove(master);
}
- sessionSet.clear();
+ ActionMessages msg = new ActionMessages();
+ if (masters.size() == 1) {
+ IssOrgCatalogue master = masters.get(0);
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_master_removed", master.getLabel()));
+
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_masters_removed"));
+ }
+ getStrutsDelegate().saveMessages(request, msg);
return mapping.findForward("confirm");
}
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
index 477ea3f..8fceb3f 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
@@ -37,7 +37,7 @@
<rhn:submitted />
<rl:list dataset="pageList" name="issMasterList"
emptykey="slave.jsp.nomasters">
- <rl:column sortable="true" headerkey="iss.master.fqdn" sortattr="label">
+ <rl:column sortable="true" headerkey="iss.master.name" sortattr="label">
<html:link href="/rhn/admin/iss/MapOrgs.do?mid=${current.id}">
<c:out value="${current.label}" />
</html:link>
commit f75b157a89519cf3fef569804669a9775fcd3b8e
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 28 11:08:46 2013 -0400
Map join-tables correctly so that delete works
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
index c43f343..37418d3 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
@@ -16,10 +16,8 @@
*/
package com.redhat.rhn.domain.iss;
-import java.util.HashSet;
import java.util.Set;
-import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.frontend.dto.BaseDto;
/**
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
index 9580948..16d1333b 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -16,9 +16,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="allowAllOrgs" column="ALLOW_ALL_ORGS" type="string" length="1" />
<property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
<property name="modified" column="MODIFIED" type="timestamp" insert="false" update="false"/>
- <set name="orgMappings">
+
+ <set name="mappedOrgs" table="rhnissslaveorgs">
<key column="slave_id" />
- <one-to-many class="com.redhat.rhn.domain.iss.IssSlaveOrgs" />
+ <many-to-many class="com.redhat.rhn.domain.org.Org" column="org_id"/>
</set>
</class>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index 0d6516a..e8a004f 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -19,6 +19,7 @@ package com.redhat.rhn.domain.iss;
import java.util.Date;
import java.util.Set;
+import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.frontend.dto.BaseDto;
/**
@@ -42,7 +43,7 @@ public class IssSlave extends BaseDto {
private String slave;
private String enabled;
private String allowAllOrgs;
- private Set<IssSlaveOrgs> orgMappings;
+ private Set<Org> mappedOrgs;
private Date created;
private Date modified;
@@ -161,18 +162,18 @@ public class IssSlave extends BaseDto {
/**
* Getter for all orgs allowed to be visible to this slave
- * @return list of currently-mapped org entries
+ * @return list of currently-mapped orgs
*/
- public Set<IssSlaveOrgs> getOrgMappings() {
- return orgMappings;
+ public Set<Org> getMappedOrgs() {
+ return mappedOrgs;
}
/**
- * Setter for orgMappings
- * @param orgMappingsIn get current orgMappings
+ * Setter for mapped orgs
+ * @param mappedOrgsIn get current mappedOrgs
*/
- public void setOrgMappings(Set<IssSlaveOrgs> orgMappingsIn) {
- this.orgMappings = orgMappingsIn;
+ public void setMappedOrgs(Set<Org> mappedOrgsIn) {
+ this.mappedOrgs = mappedOrgsIn;
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
index 7eee106..a94cfd3 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
@@ -34,7 +34,6 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssSlave;
-import com.redhat.rhn.domain.iss.IssSlaveOrgs;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.dto.OrgDto;
@@ -91,7 +90,7 @@ public class IssEditSlaveSetupAction extends RhnAction {
IssSlave theSlave = IssFactory.lookupSlaveById(sid);
Set<Long> mappedOrgs = mappedLocalOrgs(
- new ArrayList<IssSlaveOrgs>(theSlave.getOrgMappings()));
+ new ArrayList<Org>(theSlave.getMappedOrgs()));
List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
@@ -155,10 +154,10 @@ public class IssEditSlaveSetupAction extends RhnAction {
return outList;
}
- protected Set<Long> mappedLocalOrgs(List<IssSlaveOrgs> orgs) {
+ protected Set<Long> mappedLocalOrgs(List<Org> orgs) {
Set<Long> outIds = new HashSet<Long>();
- for (IssSlaveOrgs o : orgs) {
- outIds.add(o.getOrgId());
+ for (Org o : orgs) {
+ outIds.add(o.getId());
}
return outIds;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
index 942fb07..16e7d6c 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
@@ -31,7 +31,6 @@ import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
commit 0598e8ac77f9e71a1d38809a7d38d4bfdc991d5f
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon May 27 12:08:38 2013 -0400
A master-org might not be mapped
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgs.sql b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
index 8d6125f..9085fdc 100644
--- a/schema/spacewalk/common/tables/rhnSyncOrgs.sql
+++ b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
@@ -4,7 +4,7 @@ create table rhnSyncOrgs (
constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
source_org_id number not null,
source_org_name varchar2(512) not null,
- target_id number not null
+ target_id number
constraint rhn_syncorgs_tid_fk references web_customer(id),
created timestamp with local time zone default (current_timestamp) not null
);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
index 8d6125f..9085fdc 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
@@ -4,7 +4,7 @@ create table rhnSyncOrgs (
constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
source_org_id number not null,
source_org_name varchar2(512) not null,
- target_id number not null
+ target_id number
constraint rhn_syncorgs_tid_fk references web_customer(id),
created timestamp with local time zone default (current_timestamp) not null
);
commit 046e1137c7c4b5be5c6f2df45cc419fb297c02d8
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon May 27 11:55:12 2013 -0400
Make master-to-slave-org mapping be many-to-one instead of many-to-many
diff --git a/schema/spacewalk/common/tables/rhnSyncMap.sql b/schema/spacewalk/common/tables/rhnSyncMap.sql
deleted file mode 100644
index 86354ef..0000000
--- a/schema/spacewalk/common/tables/rhnSyncMap.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnSyncMap (
- source_id number not null
- constraint rhn_sync_orgs_sid_fk references rhnSyncOrgs(id) on delete cascade,
- target_id number not null
- constraint web_customer_tid_fk references web_customer(id) on delete cascade,
- created timestamp with local time zone default (current_timestamp) not null
-);
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgs.sql b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
index 49d1d39..8d6125f 100644
--- a/schema/spacewalk/common/tables/rhnSyncOrgs.sql
+++ b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
@@ -1,9 +1,11 @@
create table rhnSyncOrgs (
id number not null constraint rhn_syncorgs_id_pk primary key,
catalogue_id number not null
- constraint rhn_syncorgcatalogue_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
+ constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
source_org_id number not null,
source_org_name varchar2(512) not null,
+ target_id number not null
+ constraint rhn_syncorgs_tid_fk references web_customer(id),
created timestamp with local time zone default (current_timestamp) not null
);
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 4da7c1a..5ab6b5f 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -265,5 +265,4 @@ rhnXccdfRuleresult :: rhnXccdfTestresult rhnXccdfIdent rhnXccdfRuler
rhnXccdfTestresult :: rhnServer rhnActionScap rhnXccdfBenchmark rhnXccdfProfile
rhnXccdfRuleIdentMap :: rhnXccdfRuleresult
rhnISSSlaveOrgs :: rhnISSSlave web_customer
-rhnSyncOrgs :: rhnSyncOrgCatalogue
-rhnSyncMap :: rhnSyncOrgs web_customer
+rhnSyncOrgs :: rhnSyncOrgCatalogue web_customer
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
index 49d1d39..8d6125f 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
@@ -1,9 +1,11 @@
create table rhnSyncOrgs (
id number not null constraint rhn_syncorgs_id_pk primary key,
catalogue_id number not null
- constraint rhn_syncorgcatalogue_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
+ constraint rhn_syncorgs_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
source_org_id number not null,
source_org_name varchar2(512) not null,
+ target_id number not null
+ constraint rhn_syncorgs_tid_fk references web_customer(id),
created timestamp with local time zone default (current_timestamp) not null
);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql
deleted file mode 100644
index 86354ef..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-create table rhnSyncMap (
- source_id number not null
- constraint rhn_sync_orgs_sid_fk references rhnSyncOrgs(id) on delete cascade,
- target_id number not null
- constraint web_customer_tid_fk references web_customer(id) on delete cascade,
- created timestamp with local time zone default (current_timestamp) not null
-);
commit 41b8af0d1137463763b7cef63255d6879d06009d
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Mon May 27 10:29:12 2013 -0400
Schema chgs for ISS Slave-side setup
diff --git a/schema/spacewalk/common/tables/rhnSyncMap.sql b/schema/spacewalk/common/tables/rhnSyncMap.sql
new file mode 100644
index 0000000..86354ef
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnSyncMap.sql
@@ -0,0 +1,7 @@
+create table rhnSyncMap (
+ source_id number not null
+ constraint rhn_sync_orgs_sid_fk references rhnSyncOrgs(id) on delete cascade,
+ target_id number not null
+ constraint web_customer_tid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql b/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql
new file mode 100644
index 0000000..83f709b
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnSyncOrgCatalogue.sql
@@ -0,0 +1,7 @@
+create table rhnSyncOrgCatalogue (
+ id number not null constraint rhn_sync_org_cat_id_pk primary key,
+ label varchar2(256) not null constraint rhn_sync_org_cat_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_syncorgcatalogue_seq;
diff --git a/schema/spacewalk/common/tables/rhnSyncOrgs.sql b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
new file mode 100644
index 0000000..49d1d39
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnSyncOrgs.sql
@@ -0,0 +1,10 @@
+create table rhnSyncOrgs (
+ id number not null constraint rhn_syncorgs_id_pk primary key,
+ catalogue_id number not null
+ constraint rhn_syncorgcatalogue_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
+ source_org_id number not null,
+ source_org_name varchar2(512) not null,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_syncorgs_seq;
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index e444b48..4da7c1a 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -265,3 +265,5 @@ rhnXccdfRuleresult :: rhnXccdfTestresult rhnXccdfIdent rhnXccdfRuler
rhnXccdfTestresult :: rhnServer rhnActionScap rhnXccdfBenchmark rhnXccdfProfile
rhnXccdfRuleIdentMap :: rhnXccdfRuleresult
rhnISSSlaveOrgs :: rhnISSSlave web_customer
+rhnSyncOrgs :: rhnSyncOrgCatalogue
+rhnSyncMap :: rhnSyncOrgs web_customer
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql
new file mode 100644
index 0000000..83f709b
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/019-rhnSyncOrgCatalogue.sql
@@ -0,0 +1,7 @@
+create table rhnSyncOrgCatalogue (
+ id number not null constraint rhn_sync_org_cat_id_pk primary key,
+ label varchar2(256) not null constraint rhn_sync_org_cat_label_uq unique,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_syncorgcatalogue_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
new file mode 100644
index 0000000..49d1d39
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/020-rhnSyncOrgs.sql
@@ -0,0 +1,10 @@
+create table rhnSyncOrgs (
+ id number not null constraint rhn_syncorgs_id_pk primary key,
+ catalogue_id number not null
+ constraint rhn_syncorgcatalogue_cid_fk references rhnSyncOrgCatalogue(id) on delete cascade,
+ source_org_id number not null,
+ source_org_name varchar2(512) not null,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_syncorgs_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql
new file mode 100644
index 0000000..86354ef
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/021-rhnSyncMap.sql
@@ -0,0 +1,7 @@
+create table rhnSyncMap (
+ source_id number not null
+ constraint rhn_sync_orgs_sid_fk references rhnSyncOrgs(id) on delete cascade,
+ target_id number not null
+ constraint web_customer_tid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
commit a0889bacb2af83fe8f74ffb29d089d5cfd367d92
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu May 23 07:57:55 2013 -0400
ISS master-to-slave org-mapping
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
index ff4cdcb..9320b50 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
@@ -14,7 +14,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="label" column="LABEL" type="string" length="256" />
- <set name="sourceOrgs" inverse="true">
+ <set name="sourceOrgs" inverse="true" cascade="delete">
<key column="catalogue_id"/>
<one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrg"/>
</set>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
index 21f02a1..c43f343 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
@@ -92,17 +92,17 @@ public class IssOrgCatalogue extends BaseDto {
}
/**
- * How many local-orgs are mapped to source-orgs from this master?
- * @return number of unique local-orgs that are mapped
+ * How many source-orgs have been mapped?
+ * @return number of unique source-orgs that have non-null targets
*/
- public int getNumMappedLocals() {
- Set<Org> targets = new HashSet<Org>();
+ public int getNumMappedSourceOrgs() {
+ int mappedSources = 0;
for (IssSyncOrg so : getSourceOrgs()) {
if (so.getTargetOrg() != null) {
- targets.add(so.getTargetOrg());
+ mappedSources++;
}
}
- return targets.size();
+ return mappedSources;
}
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
index 1169adc..942fb07 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
@@ -50,7 +50,6 @@ public class IssOrgCatalogueAction extends RhnAction {
private static final String LIST_NAME = "issMasterList";
public static final String DATA_SET = "all";
- public static final String NUM_LOCALS = "numLocalOrgs";
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
@@ -104,8 +103,6 @@ public class IssOrgCatalogueAction extends RhnAction {
Map params = makeParamMap(request);
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
- request.setAttribute(NUM_LOCALS, OrgFactory.getTotalOrgCount());
-
ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
return StrutsDelegate.getInstance().forwardParams(
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
index 6c45330..8f0a36b 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
@@ -17,7 +17,7 @@
<c:if test="${requestScope.mid > 0}">
<rhn:toolbar base="h1" img="/img/rhn-icon-info.gif"
- deletionUrl="/rhn/admin/iss/DeleteMaster.do?mid=${requestScope.mid}"
+ deletionUrl="/rhn/admin/iss/RemoveMasterConfirm.do?mid=${requestScope.mid}"
deletionType="master" deletionAcl="user_role(satellite_admin)">
<bean:message key="iss.maporgs.jsp.toolbar" />
</rhn:toolbar>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
index 5447ca4..b1cab1d 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
@@ -47,7 +47,7 @@
<c:out value="${current.numSourceOrgs}" />
</rl:column>
<rl:column headerkey="iss.num.unmapped.orgs">
- <c:out value="${requestScope.numLocalOrgs - current.numMappedLocals}" />
+ <c:out value="${current.numSourceOrgs - current.numMappedSourceOrgs}" />
</rl:column>
</rl:list>
<c:if test="${not empty requestScope.all}">
commit a98a2831074e10c7d587bcec17bb7396ca453392
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 21 09:49:36 2013 -0400
DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
index ea38578..8114a61 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
@@ -19,6 +19,7 @@ package com.redhat.rhn.frontend.action.iss;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -40,19 +41,18 @@ import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.dto.OrgDto;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
-import com.redhat.rhn.frontend.struts.StrutsDelegate;
import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
import com.redhat.rhn.manager.acl.AclManager;
/**
- * IssMapOrgsAction extends RhnAction - Class representation of the table
- * ###TABLE###.
+ * IssMapOrgsAction extends RhnAction
*
* @version $Rev: 1 $
*/
public class IssMapOrgsAction extends RhnAction {
private static final String DATA_SET = "all";
private static final String SLAVES = "slave_org_list";
+ private static final String MASTER = "master";
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping, ActionForm formIn,
@@ -72,31 +72,53 @@ public class IssMapOrgsAction extends RhnAction {
Long mid = ctxt.getRequiredParam("mid");
request.setAttribute("mid", mid);
+ // Get all the known-orgs from the selected Master
+ IssOrgCatalogue oc = IssFactory.lookupMasterById(mid);
if (request.getParameter("dispatch") != null) {
- return handleDispatchAction(mapping, ctxt);
+ return handleDispatchAction(mapping, ctxt, oc);
}
- // Get all the known-orgs from the selected Master
List<IssSyncOrg> result = new ArrayList<IssSyncOrg>(
- IssFactory.lookupMasterById(mid).getSourceOrgs());
+ oc.getSourceOrgs());
+ Collections.sort(result, new IssSyncOrgComparator());
+
// Get all of our orgs and turn into OrgDtos
- List<OrgDto> infos = fromOrgs(OrgFactory.lookupAllOrgs());
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+
- Map params = makeParamMap(request);
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI() +
"?mid=" + mid.toString());
request.setAttribute(DATA_SET, result);
- request.setAttribute(SLAVES, infos);
+ request.setAttribute(SLAVES, locals);
+ request.setAttribute(MASTER, oc.getLabel());
- return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
- params);
+ return mapping.findForward("default");
}
protected ActionForward handleDispatchAction(
- ActionMapping mapping, RequestContext ctxt) {
+ ActionMapping mapping,
+ RequestContext ctxt,
+ IssOrgCatalogue master) {
//TODO: Figure out what we're doing, and how, and then DO IT
- return null;
+ List<IssSyncOrg> masterOrgs = new ArrayList<IssSyncOrg>(master.getSourceOrgs());
+ List<Org> locals = OrgFactory.lookupAllOrgs();
+ Map<Long, Org> findLocals = new HashMap<Long, Org>();
+ for (Org o : locals) {
+ findLocals.put(o.getId(), o);
+ }
+
+ for (IssSyncOrg entry : masterOrgs) {
+ Long targetId = ctxt.getParamAsLong(entry.getId().toString());
+ if (targetId == null || targetId.equals(IssSyncOrg.NO_MAP_ID)) {
+ entry.setTargetOrg(null);
+ }
+ else {
+ entry.setTargetOrg(findLocals.get(targetId));
+ }
+ IssFactory.save(entry);
+ }
+ return mapping.findForward("success");
}
protected void setupForm(ActionForm formIn, IssOrgCatalogue master) {
@@ -117,18 +139,18 @@ public class IssMapOrgsAction extends RhnAction {
for (Org o : orgs) {
outList.add(createOrgDto(o.getId(), o.getName()));
}
- OrgDto noMap = createOrgDto(IssSyncOrg.NO_MAP_ID, "NOT MAPPED");
-
- outList.add(noMap);
Collections.sort(outList, new OrgComparator());
+ OrgDto noMap = createOrgDto(IssSyncOrg.NO_MAP_ID, "NOT MAPPED");
+ outList.add(0, noMap);
+
return outList;
}
}
/**
- * Compares OrgDtos by ID
+ * Compares OrgDtos by name
* @author ggainey
*
*/
@@ -139,7 +161,23 @@ class OrgComparator implements Comparator<OrgDto> {
if (o1 == null || o2 == null) {
throw new NullPointerException("Can't compare OrgDto with null");
}
- return o1.getId().compareTo(o2.getId());
+ return o1.getName().compareTo(o2.getName());
}
+}
+
+ /**
+ * Compares IssSyncOrg by Catalogue/source-org-name
+ * @author ggainey
+ *
+ */
+ class IssSyncOrgComparator implements Comparator<IssSyncOrg> {
+
+ @Override
+ public int compare(IssSyncOrg so1, IssSyncOrg so2) {
+ if (so1 == null || so2 == null) {
+ throw new NullPointerException("Can't compare IssSyncOrg with null");
+ }
+ return so1.getSourceOrgName().compareTo(so2.getSourceOrgName());
+ }
}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index f1c3d7b..55db7f6 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -20100,7 +20100,7 @@ given channel.</source>
</source>
</trans-unit>
<trans-unit id="iss.maporgs.jsp.header2">
- <source>Configure Master-to-Slave Org Mappings</source>
+ <source>Configure Master-to-Slave Org Mappings for {0}</source>
</trans-unit>
</group>
</body>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
index f244066..6c45330 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
@@ -32,13 +32,11 @@
renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
<h2>
- <bean:message key="iss.maporgs.jsp.header2" />
+ <bean:message key="iss.maporgs.jsp.header2" arg0="${requestScope.master}"/>
</h2>
<html:form action="/admin/iss/MapOrgs.do?mid=${requestScope.mid}">
<rhn:csrf />
- <html:hidden property="submitted" value="true" />
- <html:hidden property="id" />
<rl:listset name="issMasterListSet">
<rhn:csrf />
<rhn:submitted />
@@ -48,15 +46,23 @@
sortattr="sourceOrgName">
<c:out value="${current.sourceOrgName}" />
</rl:column>
- <rl:column headerkey="iss.slave.orgs">
- <html:select property="id" value="${current.id}">
- <html:options
- collection="slave_org_list"
- property="id"
- labelProperty="name" />
- </html:select>
- </rl:column>
- </rl:list>
+ <rl:column headerkey="iss.slave.orgs">
+ <select name="${current.id}">
+ <c:forEach var="localOrg" items="${requestScope.slave_org_list}">
+ <c:choose>
+ <c:when test="${localOrg.id == current.targetOrg.id}">
+ <option value="${localOrg.id}" selected>
+ </c:when>
+ <c:otherwise>
+ <option value="${localOrg.id}">
+ </c:otherwise>
+ </c:choose>
+ <c:out value="${localOrg.name}" />
+ </option>
+ </c:forEach>
+ </select>
+ </rl:column>
+ </rl:list>
<div align="right">
<rhn:submitted />
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 1c90876..4967ff0 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -5313,6 +5313,8 @@
<set-property property="acls" value="user_role(satellite_admin);"/>
<forward name="default"
path="/WEB-INF/pages/admin/iss/maporgs.jsp"/>
+ <forward name="success"
+ path="/admin/iss/Slave.do" redirect="true"/>
</action>
<!-- /ISS Config Pages -->
commit f5ecc2cc73826fb46c475716413aa09a9c822542
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 21 09:49:36 2013 -0400
DRAFT #2: adelton's DB changes, affects on Java, slave-to-org-mapping
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
index ec00247..197074e 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
@@ -20,6 +20,7 @@ import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
+import org.hibernate.Query;
import com.redhat.rhn.common.hibernate.HibernateFactory;
@@ -67,6 +68,18 @@ public class IssFactory extends HibernateFactory {
"IssSlave.lookupAll", params);
}
+ /**
+ * Remove all entries mapping local-orgs to specified slave
+ * @param sid ID of slave whose entries we're removing
+ */
+ public static void clearMapsForSlave(Long sid) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("sid", sid);
+ Query q = HibernateFactory.getSession().getNamedQuery("IssSlaveOrgs.removeAll");
+ q.setParameter("sid", sid);
+ q.executeUpdate();
+ }
+
/***
* IssOrgCatalogue helpers
***/
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
index 53effbb..9580948 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -11,12 +11,15 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<param name="sequence">rhn_issslave_seq</param>
</generator>
</id>
- <property name="fqdn" column="SLAVE_FQDN" type="string" length="256" />
- <property name="ip" column="SLAVE_IP" type="string" length="256" />
+ <property name="slave" column="SLAVE" type="string" length="256" />
<property name="enabled" column="ENABLED" type="string" length="1" />
<property name="allowAllOrgs" column="ALLOW_ALL_ORGS" type="string" length="1" />
<property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
<property name="modified" column="MODIFIED" type="timestamp" insert="false" update="false"/>
+ <set name="orgMappings">
+ <key column="slave_id" />
+ <one-to-many class="com.redhat.rhn.domain.iss.IssSlaveOrgs" />
+ </set>
</class>
<query name="IssSlave.findById">
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index ba9a750..0d6516a 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -17,6 +17,7 @@
package com.redhat.rhn.domain.iss;
import java.util.Date;
+import java.util.Set;
import com.redhat.rhn.frontend.dto.BaseDto;
@@ -28,7 +29,7 @@ import com.redhat.rhn.frontend.dto.BaseDto;
public class IssSlave extends BaseDto {
public static final long NEW_SLAVE_ID = -1L;
public static final String ID = "id";
- public static final String FQDN = "fqdn";
+ public static final String SLAVE = "slave";
public static final String ENABLED = "enabled";
public static final String ALLOWED_ALL_ORGS = "allowAllOrgs";
public static final String CREATED = "created";
@@ -38,9 +39,10 @@ public class IssSlave extends BaseDto {
public static final String SID = "sid";
private Long id;
- private String fqdn;
+ private String slave;
private String enabled;
private String allowAllOrgs;
+ private Set<IssSlaveOrgs> orgMappings;
private Date created;
private Date modified;
@@ -64,22 +66,22 @@ public class IssSlave extends BaseDto {
}
/**
- * Getter for Fqdn
+ * Getter for slave-name
*
* @return String to get
*/
- public String getFqdn() {
- return this.fqdn;
+ public String getSlave() {
+ return this.slave;
}
/**
- * Setter for fqdn
+ * Setter for slave-name
*
- * @param fqdnIn
+ * @param slaveIn
* to set
*/
- public void setFqdn(String fqdnIn) {
- this.fqdn = fqdnIn;
+ public void setSlave(String slaveIn) {
+ this.slave = slaveIn;
}
/**
@@ -151,11 +153,26 @@ public class IssSlave extends BaseDto {
/**
* Setter for modified
*
- * @param modifiedIn
- * to set
+ * @param modifiedIn to set
*/
public void setModified(Date modifiedIn) {
this.modified = modifiedIn;
}
+ /**
+ * Getter for all orgs allowed to be visible to this slave
+ * @return list of currently-mapped org entries
+ */
+ public Set<IssSlaveOrgs> getOrgMappings() {
+ return orgMappings;
+ }
+
+ /**
+ * Setter for orgMappings
+ * @param orgMappingsIn get current orgMappings
+ */
+ public void setOrgMappings(Set<IssSlaveOrgs> orgMappingsIn) {
+ this.orgMappings = orgMappingsIn;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml
new file mode 100644
index 0000000..1c4b195
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.hbm.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssSlaveOrgs"
+ table="rhnissslaveorgs" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_issslave_org_seq</param>
+ </generator>
+ </id>
+ <property name="slaveId" column="SLAVE_ID" type="long" />
+ <property name="orgId" column="ORG_ID" type="long" />
+ <property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
+ </class>
+
+ <query name="IssSlaveOrgs.removeAll">
+ <![CDATA[delete com.redhat.rhn.domain.iss.IssSlaveOrgs so where so.slaveId = :sid]]>
+ </query>
+
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java
new file mode 100644
index 0000000..f4415ef
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlaveOrgs.java
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2008--2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import java.util.Date;
+
+import com.redhat.rhn.domain.org.Org;
+
+/**
+ * IssSlaveOrgs - Class representation of the table rhnissslaveorgs.
+ * @version $Rev: 1 $
+ */
+public class IssSlaveOrgs {
+
+ private Long id;
+ private Long slaveId;
+ private Long orgId;
+ private Org org;
+ private IssSlave slave;
+
+ private Date created;
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for slaveId
+ * @return Long to get
+ */
+ public Long getSlaveId() {
+ return this.slaveId;
+ }
+
+ /**
+ * Setter for slaveId
+ * @param slaveIdIn to set
+ */
+ public void setSlaveId(Long slaveIdIn) {
+ this.slaveId = slaveIdIn;
+ }
+
+ /**
+ * Getter for orgId
+ * @return Long to get
+ */
+ public Long getOrgId() {
+ return this.orgId;
+ }
+
+ /**
+ * Setter for orgId
+ * @param orgIdIn to set
+ */
+ public void setOrgId(Long orgIdIn) {
+ this.orgId = orgIdIn;
+ }
+
+ /**
+ * Getter for created
+ * @return Date to get
+ */
+ public Date getCreated() {
+ return this.created;
+ }
+
+ /**
+ * Setter for created
+ * @param createdIn to set
+ */
+ public void setCreated(Date createdIn) {
+ this.created = createdIn;
+ }
+
+ /**
+ * Get associated Org
+ * @return Org associated w/the specified slave
+ */
+ public Org getOrg() {
+ return org;
+ }
+
+ /**
+ * Set associated Org
+ * @param orgIn org to associate to specified slave
+ */
+ public void setOrg(Org orgIn) {
+ this.org = orgIn;
+ }
+
+ /**
+ * Get slave specified by this entry
+ * @return the salve
+ */
+ public IssSlave getSlave() {
+ return slave;
+ }
+
+ /**
+ * Set the slave specified by this entry
+ * @param slaveIn specified slave
+ */
+ public void setSlave(IssSlave slaveIn) {
+ this.slave = slaveIn;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java
new file mode 100644
index 0000000..bbe6006
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssAllowSlaveOrgsAction.java
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssSlaveOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * IssMasterAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class IssAllowSlaveOrgsAction extends RhnAction {
+
+ private static final String LIST_NAME = "localOrgsList";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ "/rhn/admin/iss/EditSlave.do?sid=" + sid);
+ request.setAttribute(IssSlave.SID, sid);
+
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+
+ if (!requestContext.isSubmitted()) {
+ sessionSet.clear();
+ }
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ // Before creating entries for whatever selection we have,
+ // DELETE THE OLD ONES - less error-prone than trying to do
+ // set-theoretic operations based on set-diffs
+ IssFactory.clearMapsForSlave(sid);
+ helper.updateSet(sessionSet, LIST_NAME);
+ return handleDispatchAction(mapping, requestContext, sid, sessionSet);
+ }
+
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+ request.setAttribute(LIST_NAME, locals);
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, locals);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, locals);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ Map params = makeParamMap(request);
+ if (sid != null) {
+ params.put("sid", sid);
+ }
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context,
+ Long sid,
+ Set sessionSet) {
+ Set<String> soids = (Set<String>) sessionSet;
+ for (String soid : soids) {
+ // Make IssSlaveOrgs entry for this slave/orgid pair
+ Long oid = Long.parseLong(soid);
+ IssSlaveOrgs iso = new IssSlaveOrgs();
+ iso.setOrgId(oid);
+ iso.setSlaveId(sid);
+ IssFactory.save(iso);
+ }
+ return mapping.findForward("success");
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+
+ Collections.sort(outList, new OrgComparator());
+
+ return outList;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
index 089ae7f..9424ac0 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
@@ -79,7 +79,7 @@ public class IssDeleteSlaveAction extends RhnAction {
IssFactory.remove(slave);
ActionMessages msg = new ActionMessages();
msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_removed", slave.getFqdn()));
+ "message.iss_slave_removed", slave.getSlave()));
getStrutsDelegate().saveMessages(request, msg);
}
return sid;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
index 6364bfb..7000959 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
@@ -34,6 +34,7 @@ import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
/**
@@ -42,6 +43,8 @@ import com.redhat.rhn.manager.acl.AclManager;
*/
public class IssEditSlaveAction extends RhnAction {
+ private static final String LIST_NAME = "localOrgsList";
+
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
ActionForm formIn,
@@ -86,7 +89,7 @@ public class IssEditSlaveAction extends RhnAction {
IssSlave slave = IssFactory.lookupSlaveById(sid);
daForm.set(IssSlave.ID, sid);
- daForm.set(IssSlave.FQDN, slave.getFqdn());
+ daForm.set(IssSlave.SLAVE, slave.getSlave());
daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
@@ -112,8 +115,8 @@ public class IssEditSlaveAction extends RhnAction {
slave = IssFactory.lookupSlaveById(sid);
}
- String fqdn = dynaForm.getString(IssSlave.FQDN);
- slave.setFqdn(fqdn);
+ String fqdn = dynaForm.getString(IssSlave.SLAVE);
+ slave.setSlave(fqdn);
Boolean enabled = (Boolean) dynaForm.get(IssSlave.ENABLED);
if (enabled == null) {
enabled = Boolean.FALSE;
@@ -149,4 +152,9 @@ public class IssEditSlaveAction extends RhnAction {
boolean retval = true;
return retval;
}
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
new file mode 100644
index 0000000..7eee106
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveSetupAction.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssSlaveOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+
+/**
+ * IssEditSlaveSetupAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class IssEditSlaveSetupAction extends RhnAction {
+
+ private static final String LIST_NAME = "localOrgsList";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ setupFormValues(request, dynaForm);
+ setupOrgList(mapping, request, response);
+
+ ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+ return retval;
+ }
+
+ private void setupOrgList(ActionMapping mapping, HttpServletRequest request,
+ HttpServletResponse response) {
+ RequestContext ctxt = new RequestContext(request);
+ Long sid = ctxt.getParamAsLong(IssSlave.SID);
+ if (sid == null) {
+ return;
+ }
+
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ "/rhn/admin/iss/AllowSlaveOrgs.do?sid=" + sid);
+
+ IssSlave theSlave = IssFactory.lookupSlaveById(sid);
+ Set<Long> mappedOrgs = mappedLocalOrgs(
+ new ArrayList<IssSlaveOrgs>(theSlave.getOrgMappings()));
+ List<OrgDto> locals = fromOrgs(OrgFactory.lookupAllOrgs());
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ // if I have a previous set selections populate data using it
+ boolean isSubmitted = ctxt.isSubmitted();
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, locals);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+ else {
+ for (OrgDto o : locals) {
+ o.setSelected("Y".equals(theSlave.getAllowAllOrgs()) ||
+ mappedOrgs.contains(o.getId()));
+ }
+ }
+ request.setAttribute(LIST_NAME, locals);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+ }
+
+ private void setupFormValues(HttpServletRequest request,
+ DynaActionForm daForm) {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ if (sid == null) { // Creating new
+ daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
+ daForm.set(IssSlave.ENABLED, true);
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
+ }
+ else {
+ IssSlave slave = IssFactory.lookupSlaveById(sid);
+
+ daForm.set(IssSlave.ID, sid);
+ daForm.set(IssSlave.SLAVE, slave.getSlave());
+ daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
+
+ request.setAttribute(IssSlave.SID, sid);
+ }
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+
+ Collections.sort(outList, new OrgComparator());
+
+ return outList;
+ }
+
+ protected Set<Long> mappedLocalOrgs(List<IssSlaveOrgs> orgs) {
+ Set<Long> outIds = new HashSet<Long>();
+ for (IssSlaveOrgs o : orgs) {
+ outIds.add(o.getOrgId());
+ }
+
+ return outIds;
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
index 5d71d5e..0c4b574 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
@@ -63,21 +63,17 @@ public class IssMasterAction extends RhnAction {
throw pex;
}
- RequestContext requestContext = new RequestContext(request);
+ RequestContext ctxt = new RequestContext(request);
+ SessionSetHelper helper = new SessionSetHelper(request);
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
- .getLabel());
- if (!requestContext.isSubmitted()) {
- sessionSet.clear();
- }
+ Set sessionSet = getSessionSet(request);
- SessionSetHelper helper = new SessionSetHelper(request);
if (request.getParameter("dispatch") != null) {
// if its one of the Dispatch actions handle it..
helper.updateSet(sessionSet, LIST_NAME);
if (!sessionSet.isEmpty()) {
- return handleDispatchAction(mapping, requestContext);
+ return handleDispatchAction(mapping, ctxt);
}
RhnHelper.handleEmptySelection(request);
}
@@ -112,8 +108,24 @@ public class IssMasterAction extends RhnAction {
return mapping.findForward("confirm");
}
+ protected Set getSessionSet(HttpServletRequest request) {
+ RequestContext ctxt = new RequestContext(request);
+ Set slaveSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ Set localSet = SessionSetHelper.lookupAndBind(request,
+ getLocalSetDecl().getLabel());
+ if (!ctxt.isSubmitted()) {
+ slaveSet.clear();
+ localSet.clear();
+ }
+ return slaveSet;
+ }
+
protected RhnSetDecl getSetDecl() {
return RhnSetDecl.ISS_SLAVES;
}
+ protected RhnSetDecl getLocalSetDecl() {
+ return RhnSetDecl.ISS_LOCAL_ORGS;
+ }
+
}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
index 6b455bf..5c25470 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
@@ -144,7 +144,7 @@ public class IssRemoveSlavesAction extends RhnAction {
if (slaves.size() == 1) {
IssSlave slave = slaves.get(0);
msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slave_removed", slave.getFqdn()));
+ "message.iss_slave_removed", slave.getSlave()));
}
else {
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index b8440e4..f1c3d7b 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -19932,7 +19932,7 @@ given channel.</source>
<trans-unit id="credentials.jsp.url">
<source>URL</source>
</trans-unit>
- <trans-unit id="iss.slave.fqdn">
+ <trans-unit id="iss.slave.name">
<source>Slave Fully-Qualified Domain Name</source>
</trans-unit>
<trans-unit id="iss.master.name">
diff --git a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
index 65132b6..b87ac03 100644
--- a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
+++ b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
@@ -391,6 +391,9 @@ public class RhnSetDecl {
public static final RhnSetDecl ISS_MASTERS = make(
"iss_masters", SetCleanup.NOOP);
+ public static final RhnSetDecl ISS_LOCAL_ORGS = make(
+ "iss_local_orgs", SetCleanup.NOOP);
+
private SetCleanup cleanup;
private String label;
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
index 72f4e50..a0c2089 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
@@ -37,9 +37,9 @@
<rhn:submitted />
<rl:list dataset="pageList" name="issSlaveList"
emptykey="master.jsp.nomasters">
- <rl:column sortable="true" headerkey="iss.slave.fqdn" sortattr="fqdn">
+ <rl:column sortable="true" headerkey="iss.slave.name" sortattr="slave">
<html:link href="/rhn/admin/iss/EditSlave.do?sid=${current.id}">
- <c:out value="${current.fqdn}" />
+ <c:out value="${current.slave}" />
</html:link>
</rl:column>
<rl:column bound="false" headerkey="iss.slave.isEnabled"
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
index 308505e..ebd20c4 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
@@ -42,15 +42,15 @@
<bean:message key="iss.editslave.jsp.header2" />
</h2>
- <html:form action="/admin/iss/EditSlave">
+ <html:form action="/admin/iss/UpdateSlave">
<rhn:csrf />
<html:hidden property="submitted" value="true" />
<html:hidden property="id" />
<table class="details" align="center">
<tr>
- <th><label for="fqdn"><rhn:required-field key="iss.slave.fqdn" />:</label></th>
- <td><html:text property="fqdn" size="45" maxlength="256"
- styleId="fqdn" /></td>
+ <th><label for="slave"><rhn:required-field key="iss.slave.name" />:</label></th>
+ <td><html:text property="slave" size="45" maxlength="256"
+ styleId="slave" /></td>
</tr>
<tr>
<th><label for="enabled"><bean:message key="iss.slave.isEnabled" /></label>
@@ -78,5 +78,31 @@
</div>
</html:form>
+ <c:if test="${requestScope.sid > 0}">
+ <h2>
+ <bean:message key="iss.editslave.jsp.allowed.orgs.header" />
+ </h2>
+ <rl:listset name="localOrgsListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="localOrgsList" name="localOrgsList"
+ emptykey="editslave.jsp.nolocalorgs">
+ <rl:decorator name="SelectableDecorator" />
+ <rl:selectablecolumn value="${current.selectionKey}"
+ selected="${current.selected}" />
+ <rl:column sortable="true" headerkey="iss.localorg.name" sortattr="name">
+ <c:out value="${current.name}" />
+ </rl:column>
+ </rl:list>
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.slave.associate"/>' />
+ </div>
+ </rl:listset>
+ </c:if>
+
</body>
</html>
+
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
index 5153009..ca93a0a 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -40,9 +40,9 @@
<rl:decorator name="SelectableDecorator" />
<rl:selectablecolumn value="${current.selectionKey}"
selected="${current.selected}" />
- <rl:column sortable="true" headerkey="iss.slave.fqdn" sortattr="fqdn">
+ <rl:column sortable="true" headerkey="iss.slave.name" sortattr="slave">
<html:link href="/rhn/admin/iss/EditSlave.do?sid=${current.id}">
- <c:out value="${current.fqdn}" />
+ <c:out value="${current.slave}" />
</html:link>
</rl:column>
<rl:column bound="false" headerkey="iss.slave.isEnabled"
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 479db90..1c90876 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -1240,8 +1240,7 @@
<form-bean name="editSlaveForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="id" type="java.lang.Long" />
- <form-property name="fqdn" type="java.lang.String" />
- <form-property name="ip" type="java.lang.String" />
+ <form-property name="slave" type="java.lang.String" />
<form-property name="enabled" type="java.lang.Boolean" />
<form-property name="allowAllOrgs" type="java.lang.Boolean" />
<form-property name="submitted" type="java.lang.Boolean"/>
@@ -5222,6 +5221,19 @@
scope="request"
name="editSlaveForm"
input="/WEB-INF/pages/admin/iss/editslave.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssEditSlaveSetupAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/editslave.jsp"/>
+ <forward name="success"
+ path="/admin/iss/Master.do" redirect="true"/>
+ </action>
+
+ <action path="/admin/iss/UpdateSlave"
+ scope="request"
+ name="editSlaveForm"
+ input="/WEB-INF/pages/admin/iss/editslave.jsp"
type="com.redhat.rhn.frontend.action.iss.IssEditSlaveAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="user_role(satellite_admin);"/>
@@ -5231,6 +5243,19 @@
path="/admin/iss/Master.do" redirect="true"/>
</action>
+ <action path="/admin/iss/AllowSlaveOrgs"
+ scope="request"
+ name="editSlaveForm"
+ input="/WEB-INF/pages/admin/iss/editslave.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssAllowSlaveOrgsAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/admin/iss/EditSlave.do" redirect="true"/>
+ <forward name="success"
+ path="/admin/iss/Master.do" redirect="true"/>
+ </action>
+
<action path="/admin/iss/RemoveSlaveConfirm"
scope="request"
name="editSlaveForm"
diff --git a/schema/spacewalk/common/tables/rhnISSSlave.sql b/schema/spacewalk/common/tables/rhnISSSlave.sql
new file mode 100644
index 0000000..36f9838
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnISSSlave.sql
@@ -0,0 +1,13 @@
+
+create table rhnISSSlave (
+ id number not null constraint rhn_isss_id_pk primary key,
+ slave varchar2(512) not null constraint rhn_isss_name_uq unique,
+ enabled char(1) not null default 'Y',
+ constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
+ allow_all_orgs char(1) not null default 'Y',
+ constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
+ created timestamp with local time zone default (current_timestamp) not null,
+ modified timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql b/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql
new file mode 100644
index 0000000..4a229f5
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnISSSlaveOrgs.sql
@@ -0,0 +1,9 @@
+
+create table rhnISSSlaveOrgs (
+ id number not null constraint rhn_isssorg_id_pk primary key,
+ slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
+ org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_org_seq;
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 1288631..e444b48 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -264,3 +264,4 @@ rhnXccdfIdent :: rhnXccdfIdentSystem
rhnXccdfRuleresult :: rhnXccdfTestresult rhnXccdfIdent rhnXccdfRuleresultType
rhnXccdfTestresult :: rhnServer rhnActionScap rhnXccdfBenchmark rhnXccdfProfile
rhnXccdfRuleIdentMap :: rhnXccdfRuleresult
+rhnISSSlaveOrgs :: rhnISSSlave web_customer
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
new file mode 100644
index 0000000..36f9838
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/017-rhnISSSlave.sql
@@ -0,0 +1,13 @@
+
+create table rhnISSSlave (
+ id number not null constraint rhn_isss_id_pk primary key,
+ slave varchar2(512) not null constraint rhn_isss_name_uq unique,
+ enabled char(1) not null default 'Y',
+ constraint rhn_isss_enabled_yn check (enabled in ( 'Y', 'N' )),
+ allow_all_orgs char(1) not null default 'Y',
+ constraint rhn_isss_allorgs_yn check (allow_all_orgs in ( 'Y', 'N' )),
+ created timestamp with local time zone default (current_timestamp) not null,
+ modified timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_seq;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
new file mode 100644
index 0000000..4a229f5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.9-to-spacewalk-schema-1.10/018-rhnISSSlaveOrgs.sql
@@ -0,0 +1,9 @@
+
+create table rhnISSSlaveOrgs (
+ id number not null constraint rhn_isssorg_id_pk primary key,
+ slave_id number not null constraint rhn_isssorg_sid_fk references rhnISSSlave(id) on delete cascade,
+ org_id number not null constraint rhn_isssorg_oid_fk references web_customer(id) on delete cascade,
+ created timestamp with local time zone default (current_timestamp) not null
+);
+
+create sequence rhn_issslave_org_seq;
commit 2d1b855e513b269f14f5edb88037b1530194da84
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Thu May 16 10:42:34 2013 -0400
Fixes from review comments
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
index 636b441..ff4cdcb 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
@@ -14,9 +14,9 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="label" column="LABEL" type="string" length="256" />
- <set name="orgs" inverse="true">
+ <set name="sourceOrgs" inverse="true">
<key column="catalogue_id"/>
- <one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrgs"/>
+ <one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrg"/>
</set>
</class>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
index bca3714..21f02a1 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
@@ -16,8 +16,10 @@
*/
package com.redhat.rhn.domain.iss;
+import java.util.HashSet;
import java.util.Set;
+import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.frontend.dto.BaseDto;
/**
@@ -31,7 +33,7 @@ public class IssOrgCatalogue extends BaseDto {
private Long id;
private String label;
- private Set<IssSyncOrgs> orgs;
+ private Set<IssSyncOrg> srcOrgs;
/**
* Getter for id
@@ -69,24 +71,38 @@ public class IssOrgCatalogue extends BaseDto {
* Get Orgs this master has let us know about
* @return list of orgs Master has told us about
*/
- public Set<IssSyncOrgs> getOrgs() {
- return this.orgs;
+ public Set<IssSyncOrg> getSourceOrgs() {
+ return this.srcOrgs;
}
/**
* Set the orgs for this master
* @param inOrgs orgs of the master that we know of
*/
- public void setOrgs(Set<IssSyncOrgs> inOrgs) {
- this.orgs = inOrgs;
+ public void setSourceOrgs(Set<IssSyncOrg> inOrgs) {
+ this.srcOrgs = inOrgs;
}
/**
* How many orgs did Master tell us about?
* @return number of orgs from this master we know of
*/
- public int getNumOrgs() {
- return getOrgs().size();
+ public int getNumSourceOrgs() {
+ return getSourceOrgs().size();
+ }
+
+ /**
+ * How many local-orgs are mapped to source-orgs from this master?
+ * @return number of unique local-orgs that are mapped
+ */
+ public int getNumMappedLocals() {
+ Set<Org> targets = new HashSet<Org>();
+ for (IssSyncOrg so : getSourceOrgs()) {
+ if (so.getTargetOrg() != null) {
+ targets.add(so.getTargetOrg());
+ }
+ }
+ return targets.size();
}
}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
index 3b9423a..ba9a750 100644
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -29,7 +29,6 @@ public class IssSlave extends BaseDto {
public static final long NEW_SLAVE_ID = -1L;
public static final String ID = "id";
public static final String FQDN = "fqdn";
- public static final String IP = "ip";
public static final String ENABLED = "enabled";
public static final String ALLOWED_ALL_ORGS = "allowAllOrgs";
public static final String CREATED = "created";
@@ -40,7 +39,6 @@ public class IssSlave extends BaseDto {
private Long id;
private String fqdn;
- private String ip;
private String enabled;
private String allowAllOrgs;
private Date created;
@@ -85,25 +83,6 @@ public class IssSlave extends BaseDto {
}
/**
- * Getter for ip
- *
- * @return String to get
- */
- public String getIp() {
- return this.ip;
- }
-
- /**
- * Setter for ip
- *
- * @param ipIn
- * to set
- */
- public void setIp(String ipIn) {
- this.ip = ipIn;
- }
-
- /**
* Getter for enabled
*
* @return true if enabled = 'Y', false otherwise
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
new file mode 100644
index 0000000..0b248e6
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.hbm.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssSyncOrg"
+ table="rhnsyncorgs" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_syncorgs_seq</param>
+ </generator>
+ </id>
+ <property name="sourceOrgId" column="SOURCE_ORG_ID" type="long" />
+ <property name="sourceOrgName" column="SOURCE_ORG_NAME" type="string" length="256" />
+
+ <many-to-one name="catalogue" column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue" />
+
+ <many-to-one name="targetOrg" column="TARGET_ID" class="com.redhat.rhn.domain.org.Org" />
+ </class>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java
new file mode 100644
index 0000000..bcb770f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrg.java
@@ -0,0 +1,117 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+
+/**
+ * IssSyncOrg - Class representation of the table rhnsyncorgs.
+ * @version $Rev: 1 $
+ */
+public class IssSyncOrg extends BaseDto {
+
+ public static final Long NO_MAP_ID = new Long(-1L);
+
+ private Long id;
+ private Long sourceOrgId;
+ private String sourceOrgName;
+ private Org targetOrg;
+ private IssOrgCatalogue catalogue;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for sourceOrgId
+ * @return Long to get
+ */
+ public Long getSourceOrgId() {
+ return this.sourceOrgId;
+ }
+
+ /**
+ * Setter for sourceOrgId
+ * @param sourceOrgIdIn to set
+ */
+ public void setSourceOrgId(Long sourceOrgIdIn) {
+ this.sourceOrgId = sourceOrgIdIn;
+ }
+
+ /**
+ * Getter for sourceOrgName
+ * @return String to get
+ */
+ public String getSourceOrgName() {
+ return this.sourceOrgName;
+ }
+
+ /**
+ * Setter for sourceOrgName
+ * @param sourceOrgNameIn to set
+ */
+ public void setSourceOrgName(String sourceOrgNameIn) {
+ this.sourceOrgName = sourceOrgNameIn;
+ }
+
+ /**
+ *
+ * @return target org associated with this source-org
+ */
+ public Org getTargetOrg() {
+ return this.targetOrg;
+ }
+
+ /**
+ *
+ * @param targetOrgIn target org to be associated with this source org
+ */
+ public void setTargetOrg(Org targetOrgIn) {
+ this.targetOrg = targetOrgIn;
+ }
+
+ /**
+ *
+ * @return master-node that owns this source-org
+ */
+ public IssOrgCatalogue getCatalogue() {
+ return this.catalogue;
+ }
+
+ /**
+ *
+ * @param catalogueIn master node that should own this org
+ */
+ public void setCatalogue(IssOrgCatalogue catalogueIn) {
+ this.catalogue = catalogueIn;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml
deleted file mode 100644
index c4fe1d5..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping
-PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
-"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
-<hibernate-mapping>
- <class name="com.redhat.rhn.domain.iss.IssSyncOrgs"
- table="rhnsyncorgs" >
- <id name="id" type="long" column="ID">
- <meta attribute="scope-set">protected</meta>
- <generator class="sequence">
- <param name="sequence">rhn_syncorgs_seq</param>
- </generator>
- </id>
- <property name="sourceOrgId" column="SOURCE_ORG_ID" type="long" />
- <property name="sourceOrgName" column="SOURCE_ORG_NAME" type="string" length="256" />
-
- <many-to-one name="catalogue" column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue" />
-
- <many-to-one name="targetOrg" column="TARGET_ID" class="com.redhat.rhn.domain.org.Org" />
- </class>
-</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java
deleted file mode 100644
index 86e092e..0000000
--- a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * Copyright (c) 2013 Red Hat, Inc.
- * All Rights Reserved.
- *
- * 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.domain.iss;
-
-import com.redhat.rhn.domain.org.Org;
-import com.redhat.rhn.frontend.dto.BaseDto;
-
-
-/**
- * IssSyncOrgs - Class representation of the table rhnsyncorgs.
- * @version $Rev: 1 $
- */
-public class IssSyncOrgs extends BaseDto {
-
- public static final Long NO_MAP_ID = new Long(-2L);
- public static final Long CREATE_MATCHING_ID = new Long(-1L);
-
- private Long id;
- private Long sourceOrgId;
- private String sourceOrgName;
- private Org targetOrg;
- private IssOrgCatalogue catalogue;
-
- /**
- * Getter for id
- * @return Long to get
- */
- public Long getId() {
- return this.id;
- }
-
- /**
- * Setter for id
- * @param idIn to set
- */
- public void setId(Long idIn) {
- this.id = idIn;
- }
-
- /**
- * Getter for sourceOrgId
- * @return Long to get
- */
- public Long getSourceOrgId() {
- return this.sourceOrgId;
- }
-
- /**
- * Setter for sourceOrgId
- * @param sourceOrgIdIn to set
- */
- public void setSourceOrgId(Long sourceOrgIdIn) {
- this.sourceOrgId = sourceOrgIdIn;
- }
-
- /**
- * Getter for sourceOrgName
- * @return String to get
- */
- public String getSourceOrgName() {
- return this.sourceOrgName;
- }
-
- /**
- * Setter for sourceOrgName
- * @param sourceOrgNameIn to set
- */
- public void setSourceOrgName(String sourceOrgNameIn) {
- this.sourceOrgName = sourceOrgNameIn;
- }
-
- /**
- *
- * @return target org associated with this source-org
- */
- public Org getTargetOrg() {
- return this.targetOrg;
- }
-
- /**
- *
- * @param targetOrgIn target org to be associated with this source org
- */
- public void setTargetOrg(Org targetOrgIn) {
- this.targetOrg = targetOrgIn;
- }
-
- /**
- *
- * @return master-node that owns this source-org
- */
- public IssOrgCatalogue getCatalogue() {
- return this.catalogue;
- }
-
- /**
- *
- * @param catalogueIn master node that should own this org
- */
- public void setCatalogue(IssOrgCatalogue catalogueIn) {
- this.catalogue = catalogueIn;
- }
-
-}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
index 1b468a7..6364bfb 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
@@ -87,7 +87,6 @@ public class IssEditSlaveAction extends RhnAction {
daForm.set(IssSlave.ID, sid);
daForm.set(IssSlave.FQDN, slave.getFqdn());
- daForm.set(IssSlave.IP, slave.getIp());
daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
@@ -115,7 +114,6 @@ public class IssEditSlaveAction extends RhnAction {
String fqdn = dynaForm.getString(IssSlave.FQDN);
slave.setFqdn(fqdn);
- slave.setIp(dynaForm.getString(IssSlave.IP));
Boolean enabled = (Boolean) dynaForm.get(IssSlave.ENABLED);
if (enabled == null) {
enabled = Boolean.FALSE;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
index dc9602d..ea38578 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
@@ -30,12 +30,11 @@ import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssOrgCatalogue;
-import com.redhat.rhn.domain.iss.IssSyncOrgs;
+import com.redhat.rhn.domain.iss.IssSyncOrg;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.dto.OrgDto;
@@ -53,7 +52,6 @@ import com.redhat.rhn.manager.acl.AclManager;
*/
public class IssMapOrgsAction extends RhnAction {
private static final String DATA_SET = "all";
- private static final String LIST_NAME = "master_list";
private static final String SLAVES = "slave_org_list";
/** {@inheritDoc} */
@@ -63,7 +61,7 @@ public class IssMapOrgsAction extends RhnAction {
if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
LocalizationService ls = LocalizationService.getInstance();
PermissionException pex = new PermissionException(
- "Only satellite admins can work with prg-mappings");
+ "Only satellite admins can work with org-mappings");
pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
throw pex;
@@ -79,8 +77,8 @@ public class IssMapOrgsAction extends RhnAction {
}
// Get all the known-orgs from the selected Master
- DataList<IssSyncOrgs> result = new DataList<IssSyncOrgs>(IssFactory
- .lookupMasterById(mid).getOrgs());
+ List<IssSyncOrg> result = new ArrayList<IssSyncOrg>(
+ IssFactory.lookupMasterById(mid).getSourceOrgs());
// Get all of our orgs and turn into OrgDtos
List<OrgDto> infos = fromOrgs(OrgFactory.lookupAllOrgs());
@@ -119,11 +117,9 @@ public class IssMapOrgsAction extends RhnAction {
for (Org o : orgs) {
outList.add(createOrgDto(o.getId(), o.getName()));
}
- OrgDto noMap = createOrgDto(IssSyncOrgs.NO_MAP_ID, "NOT MAPPED");
- OrgDto autoCreate = createOrgDto(IssSyncOrgs.CREATE_MATCHING_ID, "CREATE MATCHING");
+ OrgDto noMap = createOrgDto(IssSyncOrg.NO_MAP_ID, "NOT MAPPED");
outList.add(noMap);
- outList.add(autoCreate);
Collections.sort(outList, new OrgComparator());
return outList;
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
index a50e2e4..5d71d5e 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
@@ -27,11 +27,10 @@ import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
-import com.redhat.rhn.domain.iss.IssSlave;
import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
@@ -84,16 +83,15 @@ public class IssMasterAction extends RhnAction {
}
List<IssSlave> slaves = IssFactory.listAllIssSlaves();
- DataList<IssSlave> result = new DataList<IssSlave>(slaves);
// if its a list action update the set and the selections
if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
- helper.execute(sessionSet, LIST_NAME, result);
+ helper.execute(sessionSet, LIST_NAME, slaves);
}
// if I have a previous set selections populate data using it
if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, result);
+ helper.syncSelections(sessionSet, slaves);
ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
request);
}
@@ -101,7 +99,7 @@ public class IssMasterAction extends RhnAction {
Map params = makeParamMap(request);
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
- request.setAttribute(DATA_SET, result);
+ request.setAttribute(DATA_SET, slaves);
ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
return StrutsDelegate.getInstance().forwardParams(
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
index ecbdf76..1169adc 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
@@ -27,11 +27,11 @@ import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssOrgCatalogue;
+import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
@@ -50,6 +50,7 @@ public class IssOrgCatalogueAction extends RhnAction {
private static final String LIST_NAME = "issMasterList";
public static final String DATA_SET = "all";
+ public static final String NUM_LOCALS = "numLocalOrgs";
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
@@ -86,16 +87,16 @@ public class IssOrgCatalogueAction extends RhnAction {
}
List<IssOrgCatalogue> masters = IssFactory.listAllMasters();
- DataList<IssOrgCatalogue> result = new DataList<IssOrgCatalogue>(masters);
+ request.setAttribute(DATA_SET, masters);
// if its a list action update the set and the selections
if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
- helper.execute(sessionSet, LIST_NAME, result);
+ helper.execute(sessionSet, LIST_NAME, masters);
}
// if I have a previous set selections populate data using it
if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, result);
+ helper.syncSelections(sessionSet, masters);
ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
request);
}
@@ -103,7 +104,8 @@ public class IssOrgCatalogueAction extends RhnAction {
Map params = makeParamMap(request);
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
- request.setAttribute(DATA_SET, result);
+ request.setAttribute(NUM_LOCALS, OrgFactory.getTotalOrgCount());
+
ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
return StrutsDelegate.getInstance().forwardParams(
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
index e23935b..6b455bf 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
@@ -18,7 +18,6 @@ package com.redhat.rhn.frontend.action.iss;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
@@ -30,7 +29,6 @@ import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
-import com.redhat.rhn.common.db.datasource.DataList;
import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.domain.iss.IssFactory;
@@ -66,60 +64,94 @@ public class IssRemoveSlavesAction extends RhnAction {
throw pex;
}
- Map params = makeParamMap(request);
+ ActionForward destination = null;
+ Set sessionSet = null;
- request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
-
- Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
- List<IssSlave> slaves = findSelectedSlaves(sessionSet);
+ Long sid = getSid(request);
+ if (sid == null) {
+ sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+ }
+ else {
+ request.setAttribute(ListTagHelper.PARENT_URL,
+ request.getRequestURI() + "?sid=" + sid.toString());
+ }
- SessionSetHelper helper = new SessionSetHelper(request);
+ List<IssSlave> slaves = findSelectedSlaves(sessionSet, sid);
if (request.getParameter("dispatch") != null) {
- if (!sessionSet.isEmpty()) {
- return handleDispatchAction(mapping, request, sessionSet, slaves);
+ if (!slaves.isEmpty()) {
+ destination = handleDispatchAction(mapping, request, slaves);
+ if (sessionSet != null) {
+ sessionSet.clear();
+ }
+ return destination;
+ }
+ else {
+ RhnHelper.handleEmptySelection(request);
}
- RhnHelper.handleEmptySelection(request);
}
- DataList<IssSlave> result = new DataList<IssSlave>(slaves);
-
// if I have a previous set selections populate data using it
- if (!sessionSet.isEmpty()) {
- helper.syncSelections(sessionSet, result);
+ if (sessionSet != null && !sessionSet.isEmpty()) {
+ SessionSetHelper helper = new SessionSetHelper(request);
+ helper.syncSelections(sessionSet, slaves);
ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
}
- request.setAttribute(DATA_SET, result);
+ request.setAttribute(DATA_SET, slaves);
ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
- params);
+ makeParamMap(request));
}
- private List<IssSlave> findSelectedSlaves(Set sessionSet) {
- Set<String> sids = (Set<String>) sessionSet;
+ private Long getSid(HttpServletRequest req) {
+ String sid = req.getParameter("sid");
+
+ if (sid != null) {
+ return Long.parseLong(sid);
+ }
+ else {
+ return null;
+ }
+ }
+
+ private List<IssSlave> findSelectedSlaves(Set sessionSet, Object sidIn) {
List<IssSlave> slaves = new ArrayList<IssSlave>();
- for (String sid : sids) {
- IssSlave aSlave = IssFactory.lookupSlaveById(Long.parseLong(sid));
- slaves.add(aSlave);
+
+ if (sessionSet != null) {
+ Set<String> sids = (Set<String>) sessionSet;
+ for (String sid : sids) {
+ IssSlave aSlave = IssFactory.lookupSlaveById(Long.parseLong(sid));
+ slaves.add(aSlave);
+ }
+ }
+ else if (sidIn != null) {
+ slaves.add(IssFactory.lookupSlaveById(Long.parseLong(sidIn.toString())));
}
+
return slaves;
}
private ActionForward handleDispatchAction(ActionMapping mapping,
- HttpServletRequest request,
- Set sessionSet,
- List<IssSlave> slaves) {
+ HttpServletRequest request, List<IssSlave> slaves) {
for (IssSlave slave : slaves) {
IssFactory.remove(slave);
}
ActionMessages msg = new ActionMessages();
- msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
- "message.iss_slaves_removed"));
+ if (slaves.size() == 1) {
+ IssSlave slave = slaves.get(0);
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_removed", slave.getFqdn()));
+
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slaves_removed"));
+ }
getStrutsDelegate().saveMessages(request, msg);
- sessionSet.clear();
return mapping.findForward("confirm");
}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index e7f738d..b8440e4 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -19935,11 +19935,8 @@ given channel.</source>
<trans-unit id="iss.slave.fqdn">
<source>Slave Fully-Qualified Domain Name</source>
</trans-unit>
- <trans-unit id="iss.master.fqdn">
- <source>Master Fully-Qualified Domain Name</source>
- </trans-unit>
- <trans-unit id="iss.slave.ip">
- <source>Slave IP Address</source>
+ <trans-unit id="iss.master.name">
+ <source>Master Name</source>
</trans-unit>
<trans-unit id="iss.slave.isEnabled">
<source>Allow Slave to Sync?</source>
@@ -19981,7 +19978,10 @@ given channel.</source>
<source>Remove Slaves</source>
</trans-unit>
<trans-unit id="iss.num.master.orgs">
- <source>Number of Known Orgs</source>
+ <source>Known Orgs</source>
+ </trans-unit>
+ <trans-unit id="iss.num.unmapped.orgs">
+ <source>Unmapped Orgs</source>
</trans-unit>
<trans-unit id="iss.master.org.name">
<source>Master Org Name</source>
@@ -20044,7 +20044,7 @@ given channel.</source>
</trans-unit>
<trans-unit id="iss.confirmslaveremove.jsp.areyousure">
<source>
- Removing the slaves below will prevent them from being able to synchronize from this @@PRODUCT_NAME@@ instance.
+ Removing the slave(s) below will remove whatever setup you have done for them, as well as preventing them from being able to synchronize from this @@PRODUCT_NAME@@ instance.
This operation cannot be undone - make sure you really want to do this!
</source>
</trans-unit>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
index 47c53ae..72f4e50 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
@@ -42,9 +42,6 @@
<c:out value="${current.fqdn}" />
</html:link>
</rl:column>
- <rl:column sortable="true" headerkey="iss.slave.ip" sortattr="ip">
- <c:out value="${current.ip}" />
- </rl:column>
<rl:column bound="false" headerkey="iss.slave.isEnabled"
sortattr="enabled">
<c:if test="${current.enabled == 'Y'}">
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
index 17b0e54..308505e 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
@@ -18,7 +18,7 @@
<c:choose>
<c:when test="${requestScope.sid > 0}">
<rhn:toolbar base="h1" img="/img/rhn-icon-info.gif"
- deletionUrl="/rhn/admin/iss/DeleteSlave.do?sid=${requestScope.sid}"
+ deletionUrl="/rhn/admin/iss/RemoveSlaveConfirm.do?sid=${requestScope.sid}"
deletionType="slave" deletionAcl="user_role(satellite_admin)">
<bean:message key="iss.editslave.jsp.toolbar" />
</rhn:toolbar>
@@ -53,11 +53,6 @@
styleId="fqdn" /></td>
</tr>
<tr>
- <th><label for="ip"><rhn:required-field key="iss.slave.ip" />:</label></th>
- <td><html:text property="ip" size="15" maxlength="15"
- styleId="ip" /></td>
- </tr>
- <tr>
<th><label for="enabled"><bean:message key="iss.slave.isEnabled" /></label>
</th>
<td><html:checkbox property="enabled" styleId="enabled" /></td>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
index ec8220c..5153009 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -45,9 +45,6 @@
<c:out value="${current.fqdn}" />
</html:link>
</rl:column>
- <rl:column sortable="true" headerkey="iss.slave.ip" sortattr="ip">
- <c:out value="${current.ip}" />
- </rl:column>
<rl:column bound="false" headerkey="iss.slave.isEnabled"
sortattr="enabled">
<c:if test="${current.enabled == 'Y'}">
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
index 614404c..5447ca4 100644
--- a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
@@ -38,13 +38,16 @@
<rl:decorator name="SelectableDecorator" />
<rl:selectablecolumn value="${current.selectionKey}"
selected="${current.selected}" />
- <rl:column sortable="true" headerkey="iss.master.fqdn" sortattr="label">
+ <rl:column sortable="true" headerkey="iss.master.name" sortattr="label">
<html:link href="/rhn/admin/iss/MapOrgs.do?mid=${current.id}">
<c:out value="${current.label}" />
</html:link>
</rl:column>
<rl:column headerkey="iss.num.master.orgs">
- <c:out value="${current.numOrgs}" />
+ <c:out value="${current.numSourceOrgs}" />
+ </rl:column>
+ <rl:column headerkey="iss.num.unmapped.orgs">
+ <c:out value="${requestScope.numLocalOrgs - current.numMappedLocals}" />
</rl:column>
</rl:list>
<c:if test="${not empty requestScope.all}">
commit cb0438f03944c3e1290a6e0dc29ec6a89622a08c
Author: Grant Gainey <ggainey(a)redhat.com>
Date: Tue May 14 16:01:03 2013 -0400
FIRST DRAFT: ISS Org-Sync UI work
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
new file mode 100644
index 0000000..ec00247
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssFactory.java
@@ -0,0 +1,124 @@
+/**
+ * Copyright (c) 2013 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.domain.iss;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+
+/**
+ * IssSlaveFactory - the singleton class used to fetch and store
+ * com.redhat.rhn.domain.server.IssSlave objects from the database.
+ * @version $Rev$
+ */
+public class IssFactory extends HibernateFactory {
+
+ private static IssFactory singleton = new IssFactory();
+ private static Logger log = Logger.getLogger(IssFactory.class);
+
+ private IssFactory() {
+ super();
+ }
+
+ protected Logger getLogger() {
+ return log;
+ }
+
+ /***
+ * IssSlave helpers
+ ***/
+
+ /**
+ * Lookup a IssSlave by its id
+ * @param id the id to search for
+ * @return the IssSlave found
+ */
+ public static IssSlave lookupSlaveById(Long id) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("id", id);
+ return (IssSlave) singleton.lookupObjectByNamedQuery(
+ "IssSlave.findById", params);
+ }
+
+ /**
+ * List all IssSlaves for this Master
+ * @return list of all the slaves
+ */
+ public static List<IssSlave> listAllIssSlaves() {
+ Map params = new HashMap();
+ return (List<IssSlave>)singleton.listObjectsByNamedQuery(
+ "IssSlave.lookupAll", params);
+ }
+
+ /***
+ * IssOrgCatalogue helpers
+ ***/
+
+ /**
+ * Lookup a IssOrgCatalogue by its id
+ * @param id the id to search for
+ * @return the IssOrgCatalogue entry found
+ */
+ public static IssOrgCatalogue lookupMasterById(Long id) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("id", id);
+ return (IssOrgCatalogue) singleton.lookupObjectByNamedQuery(
+ "IssOrgCatalogue.findById", params);
+ }
+
+ /**
+ * List all IssOrgCatalogue entries for this Slave
+ * @return list of all masters known to this slave
+ */
+ public static List<IssOrgCatalogue> listAllMasters() {
+ Map params = new HashMap();
+ return (List<IssOrgCatalogue>)singleton.listObjectsByNamedQuery(
+ "IssOrgCatalogue.lookupAll", params);
+ }
+
+ /***
+ * Common helpers
+ ***/
+
+ /**
+ * Delete an entity.
+ * @param entity to delete.
+ */
+ public static void delete(Object entity) {
+ singleton.removeObject(entity);
+ }
+
+ /**
+ * Insert or Update an entity.
+ * @param entity to be stored in database.
+ */
+ public static void save(Object entity) {
+ singleton.saveObject(entity);
+ }
+
+ /**
+ * Remove an entity from the DB
+ * @param entity to be removed from database.
+ */
+ public static void remove(Object entity) {
+ singleton.removeObject(entity);
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
new file mode 100644
index 0000000..636b441
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.hbm.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssOrgCatalogue"
+ table="rhnsyncorgcatalogue" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_syncorgcatalogue_seq</param>
+ </generator>
+ </id>
+
+ <property name="label" column="LABEL" type="string" length="256" />
+
+ <set name="orgs" inverse="true">
+ <key column="catalogue_id"/>
+ <one-to-many class="com.redhat.rhn.domain.iss.IssSyncOrgs"/>
+ </set>
+
+ </class>
+
+ <query name="IssOrgCatalogue.findById">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssOrgCatalogue as c where c.id = :id]]>
+ </query>
+
+ <query name="IssOrgCatalogue.lookupAll">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssOrgCatalogue]]>
+ </query>
+
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
new file mode 100644
index 0000000..bca3714
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssOrgCatalogue.java
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import java.util.Set;
+
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+/**
+ * IssOrgCatalogue - Class representation of the table rhnsyncorgcatalogue.
+ * @version $Rev: 1 $
+ */
+public class IssOrgCatalogue extends BaseDto {
+
+ public static final String ID = "id";
+ public static final String LABEL = "label";
+
+ private Long id;
+ private String label;
+ private Set<IssSyncOrgs> orgs;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for label
+ * @return String to get
+ */
+ public String getLabel() {
+ return this.label;
+ }
+
+ /**
+ * Setter for label
+ * @param labelIn to set
+ */
+ public void setLabel(String labelIn) {
+ this.label = labelIn;
+ }
+
+ /**
+ * Get Orgs this master has let us know about
+ * @return list of orgs Master has told us about
+ */
+ public Set<IssSyncOrgs> getOrgs() {
+ return this.orgs;
+ }
+
+ /**
+ * Set the orgs for this master
+ * @param inOrgs orgs of the master that we know of
+ */
+ public void setOrgs(Set<IssSyncOrgs> inOrgs) {
+ this.orgs = inOrgs;
+ }
+
+ /**
+ * How many orgs did Master tell us about?
+ * @return number of orgs from this master we know of
+ */
+ public int getNumOrgs() {
+ return getOrgs().size();
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
new file mode 100644
index 0000000..53effbb
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.hbm.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssSlave"
+ table="rhnissslave" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_issslave_seq</param>
+ </generator>
+ </id>
+ <property name="fqdn" column="SLAVE_FQDN" type="string" length="256" />
+ <property name="ip" column="SLAVE_IP" type="string" length="256" />
+ <property name="enabled" column="ENABLED" type="string" length="1" />
+ <property name="allowAllOrgs" column="ALLOW_ALL_ORGS" type="string" length="1" />
+ <property name="created" column="CREATED" type="timestamp" insert="false" update="false"/>
+ <property name="modified" column="MODIFIED" type="timestamp" insert="false" update="false"/>
+ </class>
+
+ <query name="IssSlave.findById">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssSlave as s where s.id = :id]]>
+ </query>
+
+ <query name="IssSlave.lookupAll">
+ <![CDATA[from com.redhat.rhn.domain.iss.IssSlave]]>
+ </query>
+
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
new file mode 100644
index 0000000..3b9423a
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSlave.java
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import java.util.Date;
+
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+/**
+ * IssSlave - Class representation of the table rhnissslave.
+ *
+ * @version $Rev: 1 $
+ */
+public class IssSlave extends BaseDto {
+ public static final long NEW_SLAVE_ID = -1L;
+ public static final String ID = "id";
+ public static final String FQDN = "fqdn";
+ public static final String IP = "ip";
+ public static final String ENABLED = "enabled";
+ public static final String ALLOWED_ALL_ORGS = "allowAllOrgs";
+ public static final String CREATED = "created";
+ public static final String MODIFIED = "modified";
+
+ /** salve-id parameter name */
+ public static final String SID = "sid";
+
+ private Long id;
+ private String fqdn;
+ private String ip;
+ private String enabled;
+ private String allowAllOrgs;
+ private Date created;
+ private Date modified;
+
+ /**
+ * Getter for id
+ *
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ *
+ * @param idIn
+ * to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for Fqdn
+ *
+ * @return String to get
+ */
+ public String getFqdn() {
+ return this.fqdn;
+ }
+
+ /**
+ * Setter for fqdn
+ *
+ * @param fqdnIn
+ * to set
+ */
+ public void setFqdn(String fqdnIn) {
+ this.fqdn = fqdnIn;
+ }
+
+ /**
+ * Getter for ip
+ *
+ * @return String to get
+ */
+ public String getIp() {
+ return this.ip;
+ }
+
+ /**
+ * Setter for ip
+ *
+ * @param ipIn
+ * to set
+ */
+ public void setIp(String ipIn) {
+ this.ip = ipIn;
+ }
+
+ /**
+ * Getter for enabled
+ *
+ * @return true if enabled = 'Y', false otherwise
+ */
+ public String getEnabled() {
+ return this.enabled;
+ }
+
+ /**
+ * Setter for enabled
+ *
+ * @param enabledIn
+ * to set
+ */
+ public void setEnabled(String enabledIn) {
+ this.enabled = enabledIn;
+ }
+
+ /**
+ * Getter for allowAllOrgs
+ *
+ * @return String to get
+ */
+ public String getAllowAllOrgs() {
+ return this.allowAllOrgs;
+ }
+
+ /**
+ * Setter for allowAllOrgs
+ *
+ * @param allowAllOrgsIn
+ * to set
+ */
+ public void setAllowAllOrgs(String allowAllOrgsIn) {
+ this.allowAllOrgs = allowAllOrgsIn;
+ }
+
+ /**
+ * Getter for created
+ *
+ * @return Date to get
+ */
+ public Date getCreated() {
+ return this.created;
+ }
+
+ /**
+ * Setter for created
+ *
+ * @param createdIn
+ * to set
+ */
+ public void setCreated(Date createdIn) {
+ this.created = createdIn;
+ }
+
+ /**
+ * Getter for modified
+ *
+ * @return Date to get
+ */
+ public Date getModified() {
+ return this.modified;
+ }
+
+ /**
+ * Setter for modified
+ *
+ * @param modifiedIn
+ * to set
+ */
+ public void setModified(Date modifiedIn) {
+ this.modified = modifiedIn;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml
new file mode 100644
index 0000000..c4fe1d5
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.hbm.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping
+PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="com.redhat.rhn.domain.iss.IssSyncOrgs"
+ table="rhnsyncorgs" >
+ <id name="id" type="long" column="ID">
+ <meta attribute="scope-set">protected</meta>
+ <generator class="sequence">
+ <param name="sequence">rhn_syncorgs_seq</param>
+ </generator>
+ </id>
+ <property name="sourceOrgId" column="SOURCE_ORG_ID" type="long" />
+ <property name="sourceOrgName" column="SOURCE_ORG_NAME" type="string" length="256" />
+
+ <many-to-one name="catalogue" column="CATALOGUE_ID" class="com.redhat.rhn.domain.iss.IssOrgCatalogue" />
+
+ <many-to-one name="targetOrg" column="TARGET_ID" class="com.redhat.rhn.domain.org.Org" />
+ </class>
+</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java
new file mode 100644
index 0000000..86e092e
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/IssSyncOrgs.java
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.domain.iss;
+
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+
+/**
+ * IssSyncOrgs - Class representation of the table rhnsyncorgs.
+ * @version $Rev: 1 $
+ */
+public class IssSyncOrgs extends BaseDto {
+
+ public static final Long NO_MAP_ID = new Long(-2L);
+ public static final Long CREATE_MATCHING_ID = new Long(-1L);
+
+ private Long id;
+ private Long sourceOrgId;
+ private String sourceOrgName;
+ private Org targetOrg;
+ private IssOrgCatalogue catalogue;
+
+ /**
+ * Getter for id
+ * @return Long to get
+ */
+ public Long getId() {
+ return this.id;
+ }
+
+ /**
+ * Setter for id
+ * @param idIn to set
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * Getter for sourceOrgId
+ * @return Long to get
+ */
+ public Long getSourceOrgId() {
+ return this.sourceOrgId;
+ }
+
+ /**
+ * Setter for sourceOrgId
+ * @param sourceOrgIdIn to set
+ */
+ public void setSourceOrgId(Long sourceOrgIdIn) {
+ this.sourceOrgId = sourceOrgIdIn;
+ }
+
+ /**
+ * Getter for sourceOrgName
+ * @return String to get
+ */
+ public String getSourceOrgName() {
+ return this.sourceOrgName;
+ }
+
+ /**
+ * Setter for sourceOrgName
+ * @param sourceOrgNameIn to set
+ */
+ public void setSourceOrgName(String sourceOrgNameIn) {
+ this.sourceOrgName = sourceOrgNameIn;
+ }
+
+ /**
+ *
+ * @return target org associated with this source-org
+ */
+ public Org getTargetOrg() {
+ return this.targetOrg;
+ }
+
+ /**
+ *
+ * @param targetOrgIn target org to be associated with this source org
+ */
+ public void setTargetOrg(Org targetOrgIn) {
+ this.targetOrg = targetOrgIn;
+ }
+
+ /**
+ *
+ * @return master-node that owns this source-org
+ */
+ public IssOrgCatalogue getCatalogue() {
+ return this.catalogue;
+ }
+
+ /**
+ *
+ * @param catalogueIn master node that should own this org
+ */
+ public void setCatalogue(IssOrgCatalogue catalogueIn) {
+ this.catalogue = catalogueIn;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java b/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java
new file mode 100644
index 0000000..32334bf
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/domain/iss/SlaveItem.java
@@ -0,0 +1,119 @@
+package com.redhat.rhn.domain.iss;
+
+import com.redhat.rhn.frontend.dto.BaseDto;
+
+/**
+ * @author ggainey
+ *
+ */
+public class SlaveItem extends BaseDto {
+ private Long id;
+ private String fqdn;
+ private String ip;
+ private Boolean enabled;
+ private Boolean allOrgs;
+ private Boolean selectable;
+
+ /**
+ * @param idIn test
+ * @param fqdnIn test
+ * @param ipIn test
+ * @param enabledIn test
+ * @param allOrgsIn test
+ * @param selectableIn test
+ */
+ public SlaveItem(Long idIn, String fqdnIn, String ipIn, Boolean enabledIn,
+ Boolean allOrgsIn, Boolean selectableIn) {
+ super();
+ this.id = idIn;
+ this.fqdn = fqdnIn;
+ this.ip = ipIn;
+ this.enabled = enabledIn;
+ this.allOrgs = allOrgsIn;
+ this.selectable = selectableIn;
+ }
+
+ /**
+ * @return test
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * @param idIn test
+ */
+ public void setId(Long idIn) {
+ this.id = idIn;
+ }
+
+ /**
+ * @return test
+ */
+ public String getFqdn() {
+ return fqdn;
+ }
+
+ /**
+ * @param fqdnIn test
+ */
+ public void setFqdn(String fqdnIn) {
+ this.fqdn = fqdnIn;
+ }
+
+ /**
+ * @return test
+ */
+ public String getIp() {
+ return ip;
+ }
+
+ /**
+ * @param ipIn test
+ */
+ public void setIp(String ipIn) {
+ this.ip = ipIn;
+ }
+
+ /**
+ * @return test
+ */
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ /**
+ * @param enabledIn test
+ */
+ public void setEnabled(Boolean enabledIn) {
+ this.enabled = enabledIn;
+ }
+
+ /**
+ * @return test
+ */
+ public Boolean getAllOrgs() {
+ return allOrgs;
+ }
+
+ /**
+ * @param allOrgsIn test
+ */
+ public void setAllOrgs(Boolean allOrgsIn) {
+ this.allOrgs = allOrgsIn;
+ }
+
+ /**
+ * @return test
+ */
+ public Boolean getSelectable() {
+ return selectable;
+ }
+
+ /**
+ * @param selectableIn test
+ */
+ public void setSelectable(Boolean selectableIn) {
+ this.selectable = selectableIn;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
new file mode 100644
index 0000000..089ae7f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssDeleteSlaveAction.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.manager.acl.AclManager;
+
+/**
+ * IssEditSlaveAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class IssDeleteSlaveAction extends RhnAction {
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls
+ .getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls
+ .getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ Long sid = deleteSlave(mapping, dynaForm, request, response);
+ ActionForward retval = mapping.findForward("default");
+
+ return retval;
+ }
+
+ private Long deleteSlave(ActionMapping mapping, DynaActionForm dynaForm,
+ HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
+
+ IssSlave slave = null;
+ if (!isNew) {
+ slave = IssFactory.lookupSlaveById(sid);
+ IssFactory.remove(slave);
+ ActionMessages msg = new ActionMessages();
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_removed", slave.getFqdn()));
+ getStrutsDelegate().saveMessages(request, msg);
+ }
+ return sid;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
new file mode 100644
index 0000000..1b468a7
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssEditSlaveAction.java
@@ -0,0 +1,154 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+
+
+/**
+ * IssEditSlaveAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class IssEditSlaveAction extends RhnAction {
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ ActionForward retval = mapping.findForward(RhnHelper.DEFAULT_FORWARD);
+
+ DynaActionForm dynaForm = (DynaActionForm) formIn;
+ if (isSubmitted(dynaForm)) {
+ Long sid = updateSlaveDetails(mapping, dynaForm, request, response);
+ retval = mapping.findForward("success");
+ retval = getStrutsDelegate().forwardParam(retval, IssSlave.SID, sid.toString());
+ }
+ else {
+ setupFormValues(request, dynaForm);
+ }
+ return retval;
+ }
+
+ private void setupFormValues(HttpServletRequest request,
+ DynaActionForm daForm) {
+
+ RequestContext requestContext = new RequestContext(request);
+ Long sid = requestContext.getParamAsLong(IssSlave.SID);
+
+ if (sid == null) { // Creating new
+ daForm.set(IssSlave.ID, IssSlave.NEW_SLAVE_ID);
+ daForm.set(IssSlave.ENABLED, true);
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, true);
+ }
+ else {
+ IssSlave slave = IssFactory.lookupSlaveById(sid);
+
+ daForm.set(IssSlave.ID, sid);
+ daForm.set(IssSlave.FQDN, slave.getFqdn());
+ daForm.set(IssSlave.IP, slave.getIp());
+ daForm.set(IssSlave.ENABLED, "Y".equals(slave.getEnabled()));
+ daForm.set(IssSlave.ALLOWED_ALL_ORGS, "Y".equals(slave.getAllowAllOrgs()));
+
+ request.setAttribute(IssSlave.SID, sid);
+ }
+ }
+
+ private Long updateSlaveDetails(ActionMapping mapping,
+ DynaActionForm dynaForm,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ Long sid = null;
+ if (validateForm(request, dynaForm)) {
+ sid = (Long) dynaForm.get(IssSlave.ID);
+ boolean isNew = (IssSlave.NEW_SLAVE_ID == sid);
+
+ IssSlave slave = null;
+ if (isNew) {
+ slave = new IssSlave();
+ }
+ else {
+ slave = IssFactory.lookupSlaveById(sid);
+ }
+
+ String fqdn = dynaForm.getString(IssSlave.FQDN);
+ slave.setFqdn(fqdn);
+ slave.setIp(dynaForm.getString(IssSlave.IP));
+ Boolean enabled = (Boolean) dynaForm.get(IssSlave.ENABLED);
+ if (enabled == null) {
+ enabled = Boolean.FALSE;
+ }
+ slave.setEnabled(enabled ? "Y" : "N");
+ Boolean allowAll = (Boolean) dynaForm.get(IssSlave.ALLOWED_ALL_ORGS);
+ if (allowAll == null) {
+ allowAll = Boolean.FALSE;
+ }
+ slave.setAllowAllOrgs(allowAll ? "Y" : "N");
+
+ if (isNew) {
+ IssFactory.save(slave);
+ slave = (IssSlave)IssFactory.reload(slave);
+ sid = slave.getId();
+ }
+
+ ActionMessages msg = new ActionMessages();
+ if (isNew) {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_created", fqdn));
+ }
+ else {
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slave_updated", fqdn));
+ }
+ getStrutsDelegate().saveMessages(request, msg);
+ }
+ return sid;
+ }
+
+ private boolean validateForm(HttpServletRequest request, DynaActionForm form) {
+ boolean retval = true;
+ return retval;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
new file mode 100644
index 0000000..dc9602d
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMapOrgsAction.java
@@ -0,0 +1,149 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.DynaActionForm;
+
+import com.redhat.rhn.common.db.datasource.DataList;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssOrgCatalogue;
+import com.redhat.rhn.domain.iss.IssSyncOrgs;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.frontend.dto.OrgDto;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+
+/**
+ * IssMapOrgsAction extends RhnAction - Class representation of the table
+ * ###TABLE###.
+ *
+ * @version $Rev: 1 $
+ */
+public class IssMapOrgsAction extends RhnAction {
+ private static final String DATA_SET = "all";
+ private static final String LIST_NAME = "master_list";
+ private static final String SLAVES = "slave_org_list";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can work with prg-mappings");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext ctxt = new RequestContext(request);
+
+ Long mid = ctxt.getRequiredParam("mid");
+ request.setAttribute("mid", mid);
+
+ if (request.getParameter("dispatch") != null) {
+ return handleDispatchAction(mapping, ctxt);
+ }
+
+ // Get all the known-orgs from the selected Master
+ DataList<IssSyncOrgs> result = new DataList<IssSyncOrgs>(IssFactory
+ .lookupMasterById(mid).getOrgs());
+ // Get all of our orgs and turn into OrgDtos
+ List<OrgDto> infos = fromOrgs(OrgFactory.lookupAllOrgs());
+
+ Map params = makeParamMap(request);
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI() +
+ "?mid=" + mid.toString());
+
+ request.setAttribute(DATA_SET, result);
+ request.setAttribute(SLAVES, infos);
+
+ return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
+ params);
+ }
+
+ protected ActionForward handleDispatchAction(
+ ActionMapping mapping, RequestContext ctxt) {
+ //TODO: Figure out what we're doing, and how, and then DO IT
+ return null;
+ }
+
+ protected void setupForm(ActionForm formIn, IssOrgCatalogue master) {
+ DynaActionForm form = (DynaActionForm) formIn;
+ form.set(IssOrgCatalogue.ID, master.getId());
+ form.set(IssOrgCatalogue.LABEL, master.getLabel());
+ }
+
+ protected OrgDto createOrgDto(Long id, String name) {
+ OrgDto oi = new OrgDto();
+ oi.setId(id);
+ oi.setName(name);
+ return oi;
+ }
+
+ protected List<OrgDto> fromOrgs(List<Org> orgs) {
+ List<OrgDto> outList = new ArrayList<OrgDto>();
+ for (Org o : orgs) {
+ outList.add(createOrgDto(o.getId(), o.getName()));
+ }
+ OrgDto noMap = createOrgDto(IssSyncOrgs.NO_MAP_ID, "NOT MAPPED");
+ OrgDto autoCreate = createOrgDto(IssSyncOrgs.CREATE_MATCHING_ID, "CREATE MATCHING");
+
+ outList.add(noMap);
+ outList.add(autoCreate);
+ Collections.sort(outList, new OrgComparator());
+
+ return outList;
+ }
+
+}
+
+/**
+ * Compares OrgDtos by ID
+ * @author ggainey
+ *
+ */
+class OrgComparator implements Comparator<OrgDto> {
+
+ @Override
+ public int compare(OrgDto o1, OrgDto o2) {
+ if (o1 == null || o2 == null) {
+ throw new NullPointerException("Can't compare OrgDto with null");
+ }
+ return o1.getId().compareTo(o2.getId());
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
new file mode 100644
index 0000000..a50e2e4
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssMasterAction.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.db.datasource.DataList;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * IssMasterAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class IssMasterAction extends RhnAction {
+
+ private static final String LIST_NAME = "issSlaveList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+ if (!requestContext.isSubmitted()) {
+ sessionSet.clear();
+ }
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ // if its one of the Dispatch actions handle it..
+ helper.updateSet(sessionSet, LIST_NAME);
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, requestContext);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ List<IssSlave> slaves = IssFactory.listAllIssSlaves();
+ DataList<IssSlave> result = new DataList<IssSlave>(slaves);
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, result);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, result);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ Map params = makeParamMap(request);
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ request.setAttribute(DATA_SET, result);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context) {
+
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_SLAVES;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
new file mode 100644
index 0000000..ecbdf76
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssOrgCatalogueAction.java
@@ -0,0 +1,123 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.db.datasource.DataList;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssOrgCatalogue;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+
+/**
+ * IssSlaveAction extends RhnAction
+ * @version $Rev: 1 $
+ */
+public class IssOrgCatalogueAction extends RhnAction {
+
+ private static final String LIST_NAME = "issMasterList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping,
+ ActionForm formIn,
+ HttpServletRequest request,
+ HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex =
+ new PermissionException("Only satellite admins can work with known masters");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.master"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl()
+ .getLabel());
+ if (!requestContext.isSubmitted()) {
+ sessionSet.clear();
+ }
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ // if its one of the Dispatch actions handle it..
+ helper.updateSet(sessionSet, LIST_NAME);
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, requestContext);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ List<IssOrgCatalogue> masters = IssFactory.listAllMasters();
+ DataList<IssOrgCatalogue> result = new DataList<IssOrgCatalogue>(masters);
+
+ // if its a list action update the set and the selections
+ if (ListTagHelper.getListAction(LIST_NAME, request) != null) {
+ helper.execute(sessionSet, LIST_NAME, result);
+ }
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, result);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(),
+ request);
+ }
+
+ Map params = makeParamMap(request);
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ request.setAttribute(DATA_SET, result);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(
+ mapping.findForward("default"), params);
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context) {
+
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_MASTERS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
new file mode 100644
index 0000000..35e82c9
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveMastersAction.java
@@ -0,0 +1,124 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+
+import com.redhat.rhn.common.db.datasource.DataList;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssOrgCatalogue;
+import com.redhat.rhn.frontend.struts.RequestContext;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * IssMasterAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class IssRemoveMastersAction extends RhnAction {
+
+ private static final String LIST_NAME = "issMasterList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can remove known masters");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ RequestContext requestContext = new RequestContext(request);
+ Map params = makeParamMap(request);
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ List<IssOrgCatalogue> masters = findSelectedMasters(sessionSet);
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, requestContext, sessionSet, masters);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ DataList<IssOrgCatalogue> result = new DataList<IssOrgCatalogue>(masters);
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, result);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+
+ request.setAttribute(DATA_SET, result);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
+ params);
+ }
+
+ private List<IssOrgCatalogue> findSelectedMasters(Set sessionSet) {
+ Set<String> mids = (Set<String>) sessionSet;
+ List<IssOrgCatalogue> masters = new ArrayList<IssOrgCatalogue>();
+ for (String mid : mids) {
+ IssOrgCatalogue aMaster = IssFactory.lookupMasterById(Long.parseLong(mid));
+ masters.add(aMaster);
+ }
+ return masters;
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ RequestContext context, Set sessionSet, List<IssOrgCatalogue> masters) {
+ for (IssOrgCatalogue master : masters) {
+ IssFactory.remove(master);
+ }
+
+ sessionSet.clear();
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_MASTERS;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
new file mode 100644
index 0000000..e23935b
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/IssRemoveSlavesAction.java
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2013 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+
+import com.redhat.rhn.common.db.datasource.DataList;
+import com.redhat.rhn.common.localization.LocalizationService;
+import com.redhat.rhn.common.security.PermissionException;
+import com.redhat.rhn.domain.iss.IssFactory;
+import com.redhat.rhn.domain.iss.IssSlave;
+import com.redhat.rhn.frontend.struts.RhnAction;
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.frontend.struts.SessionSetHelper;
+import com.redhat.rhn.frontend.struts.StrutsDelegate;
+import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
+import com.redhat.rhn.manager.acl.AclManager;
+import com.redhat.rhn.manager.rhnset.RhnSetDecl;
+
+/**
+ * IssMasterAction extends RhnAction
+ *
+ * @version $Rev: 1 $
+ */
+public class IssRemoveSlavesAction extends RhnAction {
+
+ private static final String LIST_NAME = "issSlaveList";
+ public static final String DATA_SET = "all";
+
+ /** {@inheritDoc} */
+ public ActionForward execute(ActionMapping mapping, ActionForm formIn,
+ HttpServletRequest request, HttpServletResponse response) {
+
+ if (!AclManager.hasAcl("user_role(satellite_admin)", request, null)) {
+ LocalizationService ls = LocalizationService.getInstance();
+ PermissionException pex = new PermissionException(
+ "Only satellite admins can modify allowed-slaves");
+ pex.setLocalizedTitle(ls.getMessage("permission.jsp.title.iss.slave"));
+ pex.setLocalizedSummary(ls.getMessage("permission.jsp.summary.general"));
+ throw pex;
+ }
+
+ Map params = makeParamMap(request);
+
+ request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
+
+ Set sessionSet = SessionSetHelper.lookupAndBind(request, getSetDecl().getLabel());
+ List<IssSlave> slaves = findSelectedSlaves(sessionSet);
+
+ SessionSetHelper helper = new SessionSetHelper(request);
+
+ if (request.getParameter("dispatch") != null) {
+ if (!sessionSet.isEmpty()) {
+ return handleDispatchAction(mapping, request, sessionSet, slaves);
+ }
+ RhnHelper.handleEmptySelection(request);
+ }
+
+ DataList<IssSlave> result = new DataList<IssSlave>(slaves);
+
+ // if I have a previous set selections populate data using it
+ if (!sessionSet.isEmpty()) {
+ helper.syncSelections(sessionSet, result);
+ ListTagHelper.setSelectedAmount(LIST_NAME, sessionSet.size(), request);
+ }
+
+ request.setAttribute(DATA_SET, result);
+ ListTagHelper.bindSetDeclTo(LIST_NAME, getSetDecl(), request);
+
+ return StrutsDelegate.getInstance().forwardParams(mapping.findForward("default"),
+ params);
+ }
+
+ private List<IssSlave> findSelectedSlaves(Set sessionSet) {
+ Set<String> sids = (Set<String>) sessionSet;
+ List<IssSlave> slaves = new ArrayList<IssSlave>();
+ for (String sid : sids) {
+ IssSlave aSlave = IssFactory.lookupSlaveById(Long.parseLong(sid));
+ slaves.add(aSlave);
+ }
+ return slaves;
+ }
+
+ private ActionForward handleDispatchAction(ActionMapping mapping,
+ HttpServletRequest request,
+ Set sessionSet,
+ List<IssSlave> slaves) {
+ for (IssSlave slave : slaves) {
+ IssFactory.remove(slave);
+ }
+
+ ActionMessages msg = new ActionMessages();
+ msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
+ "message.iss_slaves_removed"));
+ getStrutsDelegate().saveMessages(request, msg);
+ sessionSet.clear();
+ return mapping.findForward("confirm");
+ }
+
+ protected RhnSetDecl getSetDecl() {
+ return RhnSetDecl.ISS_SLAVES;
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssEditSlaveActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssEditSlaveActionTest.java
new file mode 100644
index 0000000..ca3498b
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssEditSlaveActionTest.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2008--2012 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss.test;
+
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.testing.RhnMockStrutsTestCase;
+
+/**
+ * IssEditSlaveActionTest
+ * @version $Rev: 1 $
+ */
+public class IssEditSlaveActionTest extends RhnMockStrutsTestCase {
+
+ public void testExecute() throws Exception {
+ setRequestPathInfo("/asmin/iss/IssEditSlave");
+ actionPerform();
+ assertNotNull(request.getAttribute(RhnHelper.TARGET_USER));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMapOrgsActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMapOrgsActionTest.java
new file mode 100644
index 0000000..274b6ef
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMapOrgsActionTest.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2008--2012 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss.test;
+
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.testing.RhnMockStrutsTestCase;
+
+/**
+ * IssMapOrgsActionTest
+ * @version $Rev: 1 $
+ */
+public class IssMapOrgsActionTest extends RhnMockStrutsTestCase {
+
+ public void testExecute() throws Exception {
+ setRequestPathInfo("/asmin/iss/IssMapOrgs");
+ actionPerform();
+ assertNotNull(request.getAttribute(RhnHelper.TARGET_USER));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMasterActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMasterActionTest.java
new file mode 100644
index 0000000..a741a82
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssMasterActionTest.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2008--2012 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss.test;
+
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.testing.RhnMockStrutsTestCase;
+
+/**
+ * IssMasterActionTest
+ * @version $Rev: 1 $
+ */
+public class IssMasterActionTest extends RhnMockStrutsTestCase {
+
+ public void testExecute() throws Exception {
+ setRequestPathInfo("/asmin/iss/IssMaster");
+ actionPerform();
+ assertNotNull(request.getAttribute(RhnHelper.TARGET_USER));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssSlaveActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssSlaveActionTest.java
new file mode 100644
index 0000000..ffd3cdb
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/action/iss/test/IssSlaveActionTest.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) 2008--2012 Red Hat, Inc.
+ * All Rights Reserved.
+ *
+ * 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.action.iss.test;
+
+import com.redhat.rhn.frontend.struts.RhnHelper;
+import com.redhat.rhn.testing.RhnMockStrutsTestCase;
+
+/**
+ * IssSlaveActionTest
+ * @version $Rev: 1 $
+ */
+public class IssSlaveActionTest extends RhnMockStrutsTestCase {
+
+ public void testExecute() throws Exception {
+ setRequestPathInfo("/asmin/iss/IssSlave");
+ actionPerform();
+ assertNotNull(request.getAttribute(RhnHelper.TARGET_USER));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 53e805d..e7f738d 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -8296,7 +8296,7 @@ Please note that some manual configuration of these scripts may still be require
</trans-unit>
<trans-unit id="kickstart.variable.jsp.summary">
<source>Kickstart variables can be used to substitute values into kickstart profiles. To define a variable simply add 'name=value' to the box below.
- You would then use $name within the profile to substitute in the value.</source>
+ You would then use $name within the profile to substitute in the value.</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/kickstart</context>
</context-group>
@@ -12304,7 +12304,7 @@ Note that if a given system overrides a given file, or has it in that system's l
<context context-type="sourcefile">/rhn/configuration/RevisionDeploy.do</context>
<context context-type="paramnotes">
Tip: If you would like to deploy this file to a system not in this list, request a Configuration Administrator to subscribe the system to the _ConfigChan3_ configuration channel, then return to this screen.
- </context>
+ </context>
</context-group>
</trans-unit>
<trans-unit id="deployglobal.jspf.tip.configadmin">
@@ -12313,7 +12313,7 @@ Tip: If you would like to deploy this file to a system not in this list, request
<context context-type="sourcefile">/rhn/configuration/RevisionDeploy.do</context>
<context context-type="paramnotes">
Tip: If you would like to deploy this file to a system not in this list, you'll need to first subscribe that system to the _Configgy_ configuration channel using the _'Target Systems' tab_ for that channel, then return to this screen. Also, note that the target system must have provisioning entitlements.
- </context>
+ </context>
</context-group>
</trans-unit>
<trans-unit id="deployglobal.jspf.not_deployable">
@@ -12328,7 +12328,7 @@ Tip: If you would like to deploy this file to a system not in this list, you'll
<context context-type="sourcefile">/rhn/configuration/RevisionDeploy.do</context>
<context context-type="paramnotes">
You may grant provisioning entitlements _here_.
- </context>
+ </context>
</context-group>
</trans-unit>
<!-- date-picker strings -->
@@ -12359,7 +12359,7 @@ You may grant provisioning entitlements _here_.
</trans-unit>
<trans-unit id="deploylocal.jspf.local">
<source>
- You can deploy the latest revision (<a href="{1}">Revision {0}</a>) of this file to <a href="{3}">{2}</a> - this file is part of that system's locally-managed config channel.
+ You can deploy the latest revision (<a href="{1}">Revision {0}</a>) of this file to <a href="{3}">{2}</a> - this file is part of that system's locally-managed config channel.
</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/RevisionDeploy.do</context>
@@ -12442,9 +12442,9 @@ centrally-managed configuration channel, {2}; below is a list of systems you may
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/file/GlobalRevisionDeploy.do</context>
<context context-type="paramnotes">
- You can deploy the latest revision of this file (_Revision 7_) of this file to any of the systems subscribed to this file's
- centrally-managed configuration channel, _@@PRODUCT_NAME@@Config_; below is a list of systems you may deploy this file to.
- </context>
+ You can deploy the latest revision of this file (_Revision 7_) of this file to any of the systems subscribed to this file's
+ centrally-managed configuration channel, _@@PRODUCT_NAME@@Config_; below is a list of systems you may deploy this file to.
+ </context>
</context-group>
</trans-unit>
<trans-unit id="globalDeploy.jsp.noSystems">
@@ -12601,8 +12601,8 @@ centrally-managed configuration channel, {2}; below is a list of systems you may
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/FileDetails.do</context>
<context context-type="paramnotes">
- Revision 7 of /etc/sysconfig/rhn/up2date from channel _@@PRODUCT_NAME@@Config_
- </context>
+ Revision 7 of /etc/sysconfig/rhn/up2date from channel _@@PRODUCT_NAME@@Config_
+ </context>
</context-group>
</trans-unit>
<!-- Tips -->
@@ -12629,8 +12629,8 @@ centrally-managed configuration channel, {2}; below is a list of systems you may
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/FileDetails.do</context>
<context context-type="paramnotes">
- <strong>Tip:</strong> Please note that the maximum allowed size for configuration files is <strong>128K</strong>.
- </context>
+ <strong>Tip:</strong> Please note that the maximum allowed size for configuration files is <strong>128K</strong>.
+ </context>
</context-group>
</trans-unit>
<trans-unit id="filedetails.jsp.tip.edit">
@@ -12688,8 +12688,8 @@ centrally-managed configuration channel, {2}; below is a list of systems you may
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/file/FileDetails.do</context>
<context context-type="paramnotes">
- Error "Invalid I/O Operation" attempting to download file /etc/sysconfig/rhn/up2date
- </context>
+ Error "Invalid I/O Operation" attempting to download file /etc/sysconfig/rhn/up2date
+ </context>
</context-group>
</trans-unit>
<trans-unit id="filedetails.jsp.update">
@@ -12914,7 +12914,7 @@ You can, however, download this file, edit it locally on your computer, and uplo
<context context-type="paramnotes">
You can't edit this file here because it is too large (files must be less than <strong>32K</strong> to be editable in this form).
You can, however, download this file, edit it locally on your computer, and upload your changes here.
- </context>
+ </context>
</context-group>
</trans-unit>
<trans-unit id="filedetails.contents.jspf.toolarge-display">
@@ -12927,7 +12927,7 @@ You can, however, download this file.
<context context-type="paramnotes">
This file is too large to display here. (files must be less than <strong>32K</strong> to be displayed).
You can, however, download this file.
- </context>
+ </context>
</context-group>
</trans-unit>
<trans-unit id="filedetails.contents.jspf.download-header">
@@ -12944,7 +12944,7 @@ You can, however, download this file.
<context context-type="sourcefile">/rhn/configuration/file/FileDetails.do</context>
<context context-type="paramnotes">
_Download /etc/sysconfig/rhn/up2date_ (Revision 7, 96 bytes)
- </context>
+ </context>
</context-group>
</trans-unit>
<!-- header.jspf -->
@@ -13030,8 +13030,8 @@ any of these revisions. Are you sure you want to do this?</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/configuration/file/ManageRevisions.do</context>
<context context-type="paramnotes">
- File /etc/sig successfully deleted
- </context>
+ File /etc/sig successfully deleted
+ </context>
</context-group>
</trans-unit>
<!-- quota.jsp -->
@@ -16215,7 +16215,7 @@ The Tree Path, Kickstart RPM, Base Channel, and Installer Generation should alwa
<context-group name="ctx">
<context context-type="sourcefile">/systems/details/Overview.do</context>
<context context-type="paramnotes">{0} - Ping status, will be either online or offline
- This string will be followed by a date in a localized format</context>
+ This string will be followed by a date in a localized format</context>
</context-group>
</trans-unit>
<trans-unit id="sdc.details.overview.osa.status.ping">
@@ -17159,7 +17159,7 @@ The Tree Path, Kickstart RPM, Base Channel, and Installer Generation should alwa
- </group>
+ </group>
<!-- download-ISOs pages -->
<group>
<!-- common -->
@@ -18144,7 +18144,7 @@ Below is a list of channels in your organization.
As a Channel Administrator, you may change the base channels your systems are subscribed to. Valid channels are either channels created by your organization, or the default Red Hat base channel for your operating system version and processor type. Systems will be unsubscribed from all channels, and subscribed to their new base channels.
<p/>
<strong>This operation can have a dramatic effect on the packages and errata available to the systems, and should be used with caution.</strong>
- </source>
+ </source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/channel/ssm/BaseChannelSubscribe.do</context>
</context-group>
@@ -18556,7 +18556,7 @@ given channel.</source>
</trans-unit>
<trans-unit id="help.jsp.chatinfo">
<source>This page allows you to join an IRC chat room for discussions with other users
- of @@PRODUCT_NAME@@.</source>
+ of @@PRODUCT_NAME@@.</source>
</trans-unit>
<trans-unit id="help.jsp.chatlink">
<source>Access <a href="http://webchat.freenode.net?channels=#spacewalk" target="_blank">#spacewalk</a> channel on IRC.</source>
@@ -18629,15 +18629,15 @@ given channel.</source>
</trans-unit>
<trans-unit id="channel.jsp.package.remove">
<source>Below is the list of packages which you have selected to remove from this channel. Removing a package from this channel does not affect the systems which are subscribed to it, or the errata which are applicable to it.
- </source>
+ </source>
</trans-unit>
<trans-unit id="channel.jsp.details.title">
<source>Details
- </source>
+ </source>
</trans-unit>
<trans-unit id="channel.jsp.package.removesuccess">
<source>{0} package(s) removed from channel {1}
- </source>
+ </source>
</trans-unit>
<trans-unit id="channel.jsp.package.removebutton">
<source>Confirm Removal</source>
@@ -18683,7 +18683,7 @@ given channel.</source>
</trans-unit>
<trans-unit id="channel.jsp.package.addsuccess">
<source>{0} package(s) added to channel {1}
- </source>
+ </source>
</trans-unit>
<trans-unit id="channel.jsp.package.addbutton">
<source>Add Package(s)</source>
@@ -18697,14 +18697,14 @@ given channel.</source>
<trans-unit id="channel.jsp.package.addmessage">
<source>Below is the list of packages you can add to this channel. The "Channel" select box allows you to restrict the set of available packages. To add a package to this channel, select it here, and click 'Add Packages' below.
- Only packages of a compatible arch will be shown</source>
+ Only packages of a compatible arch will be shown</source>
</trans-unit>
<trans-unit id="channel.jsp.package.add.confirm.title">
<source>Confirm Package Addition</source>
</trans-unit>
<trans-unit id="channel.jsp.package.add.confirm.msg">
<source>Below is the list of packages which you have selected to add to this channel. Adding a package to this channel does not automatically affect the systems which are subscribed to it, or the errata which are applicable to it.
- </source>
+ </source>
</trans-unit>
<trans-unit id="channel.jsp.package.addtitle">
<source>Add Packages</source>
@@ -18811,7 +18811,7 @@ given channel.</source>
<trans-unit id="channel.jsp.manage.package.remove.message">
<source>Are you certain you want to delete these packages?
- This process can take several seconds. Be patient and do not click the button below more than once.</source>
+ This process can take several seconds. Be patient and do not click the button below more than once.</source>
</trans-unit>
<trans-unit id="baddownload.jsp.title">
<source>File Download Failed</source>
@@ -19746,7 +19746,7 @@ given channel.</source>
</trans-unit>
<trans-unit id="channel.jsp.errata.sync.message">
<source>The following errata were cloned from errata that have since been updated.
- This page will allow you to synchronize your cloned errata to that of its original.</source>
+ This page will allow you to synchronize your cloned errata to that of its original.</source>
</trans-unit>
<trans-unit id="channel.jsp.errata.sync.note">
<source>Packages that were omitted as part of the original cloning process will be included here.</source>
@@ -19932,6 +19932,177 @@ given channel.</source>
<trans-unit id="credentials.jsp.url">
<source>URL</source>
</trans-unit>
+ <trans-unit id="iss.slave.fqdn">
+ <source>Slave Fully-Qualified Domain Name</source>
+ </trans-unit>
+ <trans-unit id="iss.master.fqdn">
+ <source>Master Fully-Qualified Domain Name</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.ip">
+ <source>Slave IP Address</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.isEnabled">
+ <source>Allow Slave to Sync?</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.enabled">
+ <source>Slave is enabled</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.disabled">
+ <source>Slave is disabled</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.toAll">
+ <source>Sync All Orgs to Slave?</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.all">
+ <source>Sync All</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.notAll">
+ <source>Do Not Sync All</source>
+ </trans-unit>
+ <trans-unit id="toolbar.create.slave">
+ <source>Add new slave</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.remove">
+ <source>Remove selected slaves</source>
+ </trans-unit>
+ <trans-unit id="iss.master.remove">
+ <source>Remove selected masters</source>
+ </trans-unit>
+ <trans-unit id="toolbar.delete.slave">
+ <source>Delete slave</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.edit">
+ <source>Update</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.create">
+ <source>Create</source>
+ </trans-unit>
+ <trans-unit id="iss.confirm.remove.slaves">
+ <source>Remove Slaves</source>
+ </trans-unit>
+ <trans-unit id="iss.num.master.orgs">
+ <source>Number of Known Orgs</source>
+ </trans-unit>
+ <trans-unit id="iss.master.org.name">
+ <source>Master Org Name</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.orgs">
+ <source>Matching Local Org</source>
+ </trans-unit>
+ <trans-unit id="iss.update.org.mapping">
+ <source>Update Mapping</source>
+ </trans-unit>
+ <trans-unit id="toolbar.delete.master">
+ <source>Delete master</source>
+ </trans-unit>
+ <trans-unit id="message.iss_slaves_removed">
+ <source>Selected slaves have been removed</source>
+ </trans-unit>
+ <trans-unit id="message.iss_slave_updated">
+ <source>Slave {0} updated</source>
+ </trans-unit>
+ <trans-unit id="message.iss_slave_created">
+ <source>Slave {0} created</source>
+ </trans-unit>
+ <trans-unit id="message.iss_slave_removed">
+ <source>Slave {0} removed</source>
+ </trans-unit>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/Master.do</context>
+ </context-group>
+ <trans-unit id="iss.master.jsp.toolbar">
+ <source>ISS Configuration - Master Setup</source>
+ </trans-unit>
+ <trans-unit id="iss.master.jsp.explanation">
+ <source>Below are the slaves that are allowed to synchronize content from this @@PRODUCT_NAME@@ instance.</source>
+ </trans-unit>
+ <trans-unit id="iss.master.jsp.header2">
+ <source>Known Slave Instances</source>
+ </trans-unit>
+ </group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/EditSlave.do</context>
+ </context-group>
+ <trans-unit id="iss.editslave.jsp.toolbar">
+ <source>ISS Configuration - Update Slave</source>
+ </trans-unit>
+ <trans-unit id="iss.editslave.jsp.explanation">
+ <source>Update the details of the slave selected below.</source>
+ </trans-unit>
+ <trans-unit id="iss.editslave.jsp.header2">
+ <source>Edit Slave Details</source>
+ </trans-unit>
+ </group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/RemoveSlaveConfirm.do</context>
+ </context-group>
+ <trans-unit id="iss.confirmslaveremove.jsp.toolbar">
+ <source>ISS Configuration - Confirm Slave Removal</source>
+ </trans-unit>
+ <trans-unit id="iss.confirmslaveremove.jsp.areyousure">
+ <source>
+ Removing the slaves below will prevent them from being able to synchronize from this @@PRODUCT_NAME@@ instance.
+ This operation cannot be undone - make sure you really want to do this!
+ </source>
+ </trans-unit>
+ <trans-unit id="iss.confirmslaveremove.jsp.header2">
+ <source>Slaves To Be Removed</source>
+ </trans-unit>
+ </group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/Slave.do</context>
+ </context-group>
+ <trans-unit id="iss.slave.jsp.toolbar">
+ <source>ISS Configuration - Slave Setup</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.jsp.explanation">
+ <source>Below are all the master @@PRODUCT_NAME@@ instances that this @@PRODUCT_NAME@@ instance has ever synchronized content from.</source>
+ </trans-unit>
+ <trans-unit id="iss.slave.jsp.header2">
+ <source>Known Master Instances</source>
+ </trans-unit>
+ </group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/RemoveMasterConfirm.do</context>
+ </context-group>
+ <trans-unit id="iss.confirmmasterremove.jsp.toolbar">
+ <source>ISS Configuration - Confirm Master Removal</source>
+ </trans-unit>
+ <trans-unit id="iss.confirmmasterremove.jsp.areyousure">
+ <source>
+ Removing the masters below will remove any master-to-slave Org mappings you have created.
+ This operation cannot be undone - make sure you really want to do this!
+ </source>
+ </trans-unit>
+ <trans-unit id="iss.confirmmasterremove.jsp.header2">
+ <source>Masters To Be Removed</source>
+ </trans-unit>
+ </group>
+ <group>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/admin/iss/MapOrgs.do</context>
+ </context-group>
+ <trans-unit id="iss.maporgs.jsp.toolbar">
+ <source>ISS Configuration - Map Master to Slave Orgs</source>
+ </trans-unit>
+ <trans-unit id="iss.maporgs.jsp.explanation">
+ <source>
+ In order to synchronize channel access-permissions from Master to Slave,
+ each known Master Org must be mapped to a local Org in this @@PRODUCT_NAME@@ instance.
+ On this page the administrator can map Master orgs to existing local orgs,
+ create new local orgs automatically,
+ or choose not to map specific Master orgs' permissions to this @@PRODUCT_NAME@@ instance.
+ </source>
+ </trans-unit>
+ <trans-unit id="iss.maporgs.jsp.header2">
+ <source>Configure Master-to-Slave Org Mappings</source>
+ </trans-unit>
+ </group>
</body>
</file>
</xliff>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
index 53d965e..fe4456d 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/nav/StringResource_en_US.xml
@@ -575,6 +575,24 @@
<context context-type="sourcefile">Navigation Menu</context>
</context-group>
</trans-unit>
+ <trans-unit id="ISS Configuration">
+ <source>ISS Configuration</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation Menu</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="Master Setup">
+ <source>Master Setup</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation Menu</context>
+ </context-group>
+ </trans-unit>
+ <trans-unit id="Slave Setup">
+ <source>Slave Setup</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">Navigation Menu</context>
+ </context-group>
+ </trans-unit>
<trans-unit id="Remote Command">
<source>Remote Command</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
index 905a416..65132b6 100644
--- a/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
+++ b/java/code/src/com/redhat/rhn/manager/rhnset/RhnSetDecl.java
@@ -385,6 +385,12 @@ public class RhnSetDecl {
public static final RhnSetDecl SSM_CHANNEL_UNSUBSCRIBE = make(
"ssm_channel_unsubscribe", SetCleanup.NOOP);
+ public static final RhnSetDecl ISS_SLAVES = make(
+ "iss_slaves", SetCleanup.NOOP);
+
+ public static final RhnSetDecl ISS_MASTERS = make(
+ "iss_masters", SetCleanup.NOOP);
+
private SetCleanup cleanup;
private String label;
diff --git a/java/code/webapp/WEB-INF/nav/iss_config.xml b/java/code/webapp/WEB-INF/nav/iss_config.xml
new file mode 100644
index 0000000..ea79568
--- /dev/null
+++ b/java/code/webapp/WEB-INF/nav/iss_config.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<rhn-navi-tree invisible="1" title-depth="1" >
+ <rhn-tab name="Master Setup" acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/iss/Master.do</rhn-tab-url>
+ </rhn-tab>
+ <rhn-tab name="Slave Setup" acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/iss/Slave.do</rhn-tab-url>
+ </rhn-tab>
+</rhn-navi-tree>
diff --git a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
index 64cf570..cc1657e 100644
--- a/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
+++ b/java/code/webapp/WEB-INF/nav/sitenav-authenticated.xml
@@ -20,10 +20,10 @@
<rhn-tab name="Subscription Management" url="/rhn/systems/SystemEntitlements.do" acl="user_role(org_admin)" >
<rhn-tab name="System Entitlements" url="/rhn/systems/SystemEntitlements.do" acl="user_role(org_admin)" />
<rhn-tab name="virtualization.entitlements" url="/rhn/systems/entitlements/GuestLimitedHosts.do" acl="user_role(org_admin)">
- <rhn-tab-url>/rhn/systems/entitlements/GuestUnlimitedHosts.do</rhn-tab-url>
- <rhn-tab-url>/rhn/systems/entitlements/PhysicalHosts.do</rhn-tab-url>
- <rhn-tab-url>/rhn/systems/entitlements/FlexGuests.do</rhn-tab-url>
- <rhn-tab-url>/rhn/systems/entitlements/EligibleFlexGuests.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/systems/entitlements/GuestUnlimitedHosts.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/systems/entitlements/PhysicalHosts.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/systems/entitlements/FlexGuests.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/systems/entitlements/EligibleFlexGuests.do</rhn-tab-url>
</rhn-tab>
<rhn-tab name="Software Channel Entitlements" url="/rhn/channels/software/Entitlements.do" acl="user_role(org_admin)" />
</rhn-tab>
@@ -68,8 +68,8 @@
<rhn-tab-directory>/rhn/systems/ssm</rhn-tab-directory>
<rhn-tab-directory>/rhn/ssm</rhn-tab-directory>
<rhn-tab name="ssm.nav.status" url="/rhn/ssm/ViewAllLog.do" acl="org_entitlement(sw_mgr_enterprise)">
- <rhn-tab-url>/rhn/ssm/ViewLog.do</rhn-tab-url>
- <rhn-tab-url>/rhn/ssm/ViewCompletedLog.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/ssm/ViewLog.do</rhn-tab-url>
+ <rhn-tab-url>/rhn/ssm/ViewCompletedLog.do</rhn-tab-url>
</rhn-tab>
</rhn-tab>
<rhn-tab name="Advanced Search" url="/rhn/systems/Search.do" acl="org_entitlement(sw_mgr_enterprise)" />
@@ -152,7 +152,7 @@
<rhn-tab-directory>/rhn/channels</rhn-tab-directory>
<rhn-tab name="channel.nav.all" url="/rhn/software/channels/All.do"/>
<rhn-tab name="channel.nav.vendor" url="/rhn/software/channels/Vendor.do" acl="is_satellite()"/>
- <rhn-tab name="channel.nav.popular" url="/rhn/software/channels/Popular.do"/>
+ <rhn-tab name="channel.nav.popular" url="/rhn/software/channels/Popular.do"/>
<rhn-tab name="channel.nav.custom" url="/rhn/software/channels/Custom.do"/>
<rhn-tab name="channel.nav.shared" url="/rhn/software/channels/Shared.do"/>
<rhn-tab name="channel.nav.retired" url="/rhn/software/channels/Retired.do"/>
@@ -307,9 +307,18 @@
<rhn-tab name="Restart" acl="user_role(satellite_admin)">
<rhn-tab-url>/rhn/admin/config/Restart.do</rhn-tab-url>
</rhn-tab>
- <rhn-tab name="Cobbler" acl="user_role(satellite_admin)">
- <rhn-tab-url>/rhn/admin/config/Cobbler.do</rhn-tab-url>
- </rhn-tab>
+ <rhn-tab name="Cobbler" acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/config/Cobbler.do</rhn-tab-url>
+ </rhn-tab>
+ </rhn-tab>
+
+ <rhn-tab name="ISS Configuration" acl="user_role(satellite_admin)" url="/rhn/admin/iss/Master.do">
+ <rhn-tab name="Master Setup" acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/iss/Master.do</rhn-tab-url>
+ </rhn-tab>
+ <rhn-tab name="Slave Setup" acl="user_role(satellite_admin)">
+ <rhn-tab-url>/rhn/admin/iss/Slave.do</rhn-tab-url>
+ </rhn-tab>
</rhn-tab>
<rhn-tab name="Task Schedules" acl="user_role(satellite_admin)">
@@ -350,9 +359,9 @@
<rhn-tab name="3.2.0" url="/help/release-notes/unix/unix-release-notes-3.2.0.html"/>
</rhn-tab>
<rhn-tab name="API" url="/rhn/apidoc/index.jsp">
- <rhn-tab name="Overview" url="/rhn/apidoc/index.jsp">
- <rhn-tab-directory>/rhn/apidoc</rhn-tab-directory>
- </rhn-tab>
+ <rhn-tab name="Overview" url="/rhn/apidoc/index.jsp">
+ <rhn-tab-directory>/rhn/apidoc</rhn-tab-directory>
+ </rhn-tab>
<rhn-tab name="FAQs" url="/rhn/apidoc/faqs.jsp" />
<rhn-tab name="Sample Scripts" url="/rhn/apidoc/scripts.jsp" />
</rhn-tab>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
new file mode 100644
index 0000000..477ea3f
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmmastersremove.jsp
@@ -0,0 +1,58 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif">
+ <bean:message key="iss.confirmmasterremove.jsp.toolbar" />
+ </rhn:toolbar>
+
+ <p>
+ <bean:message key="iss.confirmmasterremove.jsp.areyousure" />
+ </p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+ <c:set var="pageList" value="${requestScope.all}" />
+
+ <h2>
+ <bean:message key="iss.confirmmasterremove.jsp.header2" />
+ </h2>
+
+ <rl:listset name="issMasterListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="pageList" name="issMasterList"
+ emptykey="slave.jsp.nomasters">
+ <rl:column sortable="true" headerkey="iss.master.fqdn" sortattr="label">
+ <html:link href="/rhn/admin/iss/MapOrgs.do?mid=${current.id}">
+ <c:out value="${current.label}" />
+ </html:link>
+ </rl:column>
+ </rl:list>
+ <c:if test="${not empty requestScope.all}">
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.confirm.remove.masters"/>' />
+ </div>
+ </c:if>
+ </rl:listset>
+
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
new file mode 100644
index 0000000..47c53ae
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/confirmslaveremove.jsp
@@ -0,0 +1,87 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif">
+ <bean:message key="iss.confirmslaveremove.jsp.toolbar" />
+ </rhn:toolbar>
+
+ <p>
+ <bean:message key="iss.confirmslaveremove.jsp.areyousure" />
+ </p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+ <c:set var="pageList" value="${requestScope.all}" />
+
+ <h2>
+ <bean:message key="iss.confirmslaveremove.jsp.header2" />
+ </h2>
+
+ <rl:listset name="issSlaveListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="pageList" name="issSlaveList"
+ emptykey="master.jsp.nomasters">
+ <rl:column sortable="true" headerkey="iss.slave.fqdn" sortattr="fqdn">
+ <html:link href="/rhn/admin/iss/EditSlave.do?sid=${current.id}">
+ <c:out value="${current.fqdn}" />
+ </html:link>
+ </rl:column>
+ <rl:column sortable="true" headerkey="iss.slave.ip" sortattr="ip">
+ <c:out value="${current.ip}" />
+ </rl:column>
+ <rl:column bound="false" headerkey="iss.slave.isEnabled"
+ sortattr="enabled">
+ <c:if test="${current.enabled == 'Y'}">
+ <img src="/img/rhn-listicon-checked.gif"
+ alt="<bean:message key="iss.slave.enabled"/>"
+ title="<bean:message key="iss.slave.enabled"/>" />
+ </c:if>
+ <c:if test="${current.enabled != 'Y'}">
+ <img src="/img/rhn-listicon-unchecked.gif"
+ alt="<bean:message key="iss.slave.disabled"/>"
+ title="<bean:message key="iss.slave.disabled"/>" />
+ </c:if>
+ </rl:column>
+ <rl:column bound="false" headerkey="iss.slave.toAll"
+ sortattr="allOrgs">
+ <c:if test="${current.allowAllOrgs == 'Y'}">
+ <img src="/img/rhn-listicon-checked.gif"
+ alt="<bean:message key="iss.slave.all"/>"
+ title="<bean:message key="iss.slave.all"/>" />
+ </c:if>
+ <c:if test="${current.allowAllOrgs != 'Y'}">
+ <img src="/img/rhn-listicon-unchecked.gif"
+ alt="<bean:message key="iss.slave.notAll"/>"
+ title="<bean:message key="iss.slave.notAll"/>" />
+ </c:if>
+ </rl:column>
+ </rl:list>
+ <c:if test="${not empty requestScope.all}">
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.confirm.remove.slaves"/>' />
+ </div>
+ </c:if>
+ </rl:listset>
+
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
new file mode 100644
index 0000000..17b0e54
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/editslave.jsp
@@ -0,0 +1,87 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <c:choose>
+ <c:when test="${requestScope.sid > 0}">
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif"
+ deletionUrl="/rhn/admin/iss/DeleteSlave.do?sid=${requestScope.sid}"
+ deletionType="slave" deletionAcl="user_role(satellite_admin)">
+ <bean:message key="iss.editslave.jsp.toolbar" />
+ </rhn:toolbar>
+ </c:when>
+ <c:otherwise>
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif">
+ <bean:message key="iss.editslave.jsp.toolbar" />
+ </rhn:toolbar>
+ </c:otherwise>
+ </c:choose>
+
+ <p>
+ <bean:message key="iss.editslave.jsp.explanation" />
+ </p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+
+ <h2>
+ <bean:message key="iss.editslave.jsp.header2" />
+ </h2>
+
+ <html:form action="/admin/iss/EditSlave">
+ <rhn:csrf />
+ <html:hidden property="submitted" value="true" />
+ <html:hidden property="id" />
+ <table class="details" align="center">
+ <tr>
+ <th><label for="fqdn"><rhn:required-field key="iss.slave.fqdn" />:</label></th>
+ <td><html:text property="fqdn" size="45" maxlength="256"
+ styleId="fqdn" /></td>
+ </tr>
+ <tr>
+ <th><label for="ip"><rhn:required-field key="iss.slave.ip" />:</label></th>
+ <td><html:text property="ip" size="15" maxlength="15"
+ styleId="ip" /></td>
+ </tr>
+ <tr>
+ <th><label for="enabled"><bean:message key="iss.slave.isEnabled" /></label>
+ </th>
+ <td><html:checkbox property="enabled" styleId="enabled" /></td>
+ </tr>
+ <tr>
+ <th><label for="allowAllOrgs"><bean:message key="iss.slave.toAll" /></label></th>
+ <td><html:checkbox property="allowAllOrgs"
+ styleId="allowAllOrgs" /> </td>
+ </tr>
+ </table>
+ <div align="right">
+
+ <html:submit>
+ <c:choose>
+ <c:when test="${requestScope.sid > 0}">
+ <bean:message key="iss.slave.edit" />
+ </c:when>
+ <c:otherwise>
+ <bean:message key="iss.slave.create" />
+ </c:otherwise>
+ </c:choose>
+ </html:submit>
+ </div>
+
+ </html:form>
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
new file mode 100644
index 0000000..f244066
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/maporgs.jsp
@@ -0,0 +1,71 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <c:if test="${requestScope.mid > 0}">
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif"
+ deletionUrl="/rhn/admin/iss/DeleteMaster.do?mid=${requestScope.mid}"
+ deletionType="master" deletionAcl="user_role(satellite_admin)">
+ <bean:message key="iss.maporgs.jsp.toolbar" />
+ </rhn:toolbar>
+ </c:if>
+
+ <p>
+ <bean:message key="iss.maporgs.jsp.explanation" />
+ </p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+
+ <h2>
+ <bean:message key="iss.maporgs.jsp.header2" />
+ </h2>
+
+ <html:form action="/admin/iss/MapOrgs.do?mid=${requestScope.mid}">
+ <rhn:csrf />
+ <html:hidden property="submitted" value="true" />
+ <html:hidden property="id" />
+ <rl:listset name="issMasterListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="all" name="issMasterList"
+ emptykey="iss.maporgs.jsp.nomasterorgs">
+ <rl:column sortable="true" headerkey="iss.master.org.name"
+ sortattr="sourceOrgName">
+ <c:out value="${current.sourceOrgName}" />
+ </rl:column>
+ <rl:column headerkey="iss.slave.orgs">
+ <html:select property="id" value="${current.id}">
+ <html:options
+ collection="slave_org_list"
+ property="id"
+ labelProperty="name" />
+ </html:select>
+ </rl:column>
+ </rl:list>
+
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.update.org.mapping"/>' />
+ </div>
+ </rl:listset>
+
+ </html:form>
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
new file mode 100644
index 0000000..ec8220c
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/master.jsp
@@ -0,0 +1,89 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif"
+ creationUrl="/rhn/admin/iss/EditSlave.do" creationType="slave"
+ creationAcl="user_role(satellite_admin)">
+ <bean:message key="iss.master.jsp.toolbar" />
+ </rhn:toolbar>
+
+<p><bean:message key="iss.master.jsp.explanation" /></p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+ <c:set var="pageList" value="${requestScope.all}" />
+
+ <h2>
+ <bean:message key="iss.master.jsp.header2" />
+ </h2>
+
+ <rl:listset name="issSlaveListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="pageList" name="issSlaveList"
+ emptykey="master.jsp.noslaves">
+ <rl:decorator name="SelectableDecorator" />
+ <rl:selectablecolumn value="${current.selectionKey}"
+ selected="${current.selected}" />
+ <rl:column sortable="true" headerkey="iss.slave.fqdn" sortattr="fqdn">
+ <html:link href="/rhn/admin/iss/EditSlave.do?sid=${current.id}">
+ <c:out value="${current.fqdn}" />
+ </html:link>
+ </rl:column>
+ <rl:column sortable="true" headerkey="iss.slave.ip" sortattr="ip">
+ <c:out value="${current.ip}" />
+ </rl:column>
+ <rl:column bound="false" headerkey="iss.slave.isEnabled"
+ sortattr="enabled">
+ <c:if test="${current.enabled == 'Y'}">
+ <img src="/img/rhn-listicon-checked.gif"
+ alt="<bean:message key="iss.slave.enabled"/>"
+ title="<bean:message key="iss.slave.enabled"/>" />
+ </c:if>
+ <c:if test="${current.enabled != 'Y'}">
+ <img src="/img/rhn-listicon-unchecked.gif"
+ alt="<bean:message key="iss.slave.disabled"/>"
+ title="<bean:message key="iss.slave.disabled"/>" />
+ </c:if>
+ </rl:column>
+ <rl:column bound="false" headerkey="iss.slave.toAll"
+ sortattr="allOrgs">
+ <c:if test="${current.allowAllOrgs == 'Y'}">
+ <img src="/img/rhn-listicon-checked.gif"
+ alt="<bean:message key="iss.slave.all"/>"
+ title="<bean:message key="iss.slave.all"/>" />
+ </c:if>
+ <c:if test="${current.allowAllOrgs != 'Y'}">
+ <img src="/img/rhn-listicon-unchecked.gif"
+ alt="<bean:message key="iss.slave.notAll"/>"
+ title="<bean:message key="iss.slave.notAll"/>" />
+ </c:if>
+ </rl:column>
+ </rl:list>
+ <c:if test="${not empty requestScope.all}">
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.slave.remove"/>' />
+ </div>
+ </c:if>
+ </rl:listset>
+
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
new file mode 100644
index 0000000..614404c
--- /dev/null
+++ b/java/code/webapp/WEB-INF/pages/admin/iss/slave.jsp
@@ -0,0 +1,61 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://rhn.redhat.com/rhn" prefix="rhn"%>
+<%@ taglib uri="http://rhn.redhat.com/tags/list" prefix="rl"%>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
+<html:xhtml />
+
+<html>
+<body>
+
+ <html:errors />
+ <html:messages id="message" message="true">
+ <rhn:messages>
+ <c:out escapeXml="false" value="${message}" />
+ </rhn:messages>
+ </html:messages>
+
+ <rhn:toolbar base="h1" img="/img/rhn-icon-info.gif">
+ <bean:message key="iss.slave.jsp.toolbar" />
+ </rhn:toolbar>
+
+<p><bean:message key="iss.slave.jsp.explanation" /></p>
+
+ <rhn:dialogmenu mindepth="0" maxdepth="1"
+ definition="/WEB-INF/nav/iss_config.xml"
+ renderer="com.redhat.rhn.frontend.nav.DialognavRenderer" />
+ <c:set var="pageList" value="${requestScope.all}" />
+
+ <h2>
+ <bean:message key="iss.slave.jsp.header2" />
+ </h2>
+
+ <rl:listset name="issMasterListSet">
+ <rhn:csrf />
+ <rhn:submitted />
+ <rl:list dataset="pageList" name="issMasterList"
+ emptykey="iss.slave.jsp.nomasters">
+ <rl:decorator name="SelectableDecorator" />
+ <rl:selectablecolumn value="${current.selectionKey}"
+ selected="${current.selected}" />
+ <rl:column sortable="true" headerkey="iss.master.fqdn" sortattr="label">
+ <html:link href="/rhn/admin/iss/MapOrgs.do?mid=${current.id}">
+ <c:out value="${current.label}" />
+ </html:link>
+ </rl:column>
+ <rl:column headerkey="iss.num.master.orgs">
+ <c:out value="${current.numOrgs}" />
+ </rl:column>
+ </rl:list>
+ <c:if test="${not empty requestScope.all}">
+ <div align="right">
+ <rhn:submitted />
+ <hr />
+ <input type="submit" name="dispatch"
+ value='<bean:message key="iss.master.remove"/>' />
+ </div>
+ </c:if>
+ </rl:listset>
+
+</body>
+</html>
diff --git a/java/code/webapp/WEB-INF/struts-config.xml b/java/code/webapp/WEB-INF/struts-config.xml
index 788c643..479db90 100644
--- a/java/code/webapp/WEB-INF/struts-config.xml
+++ b/java/code/webapp/WEB-INF/struts-config.xml
@@ -67,7 +67,7 @@
<form-property name="zip" type="java.lang.String"/>
<form-property name="usepam" type="java.lang.Boolean"/>
<form-property name="no_scrub" type="java.lang.String"
- initial="desiredpassword, desiredpasswordConfirm"/>
+ initial="desiredpassword, desiredpasswordConfirm"/>
<form-property name="preferredLocale" type="java.lang.String" />
<form-property name="timezone" type="java.lang.Integer"/>
</form-bean>
@@ -97,8 +97,8 @@
<form-property name="title" type="java.lang.String"/>
<form-property name="zip" type="java.lang.String"/>
<form-property name="usepam" type="java.lang.Boolean"/>
- <form-property name="no_scrub" type="java.lang.String"
- initial="desiredpassword, desiredpasswordConfirm"/>
+ <form-property name="no_scrub" type="java.lang.String"
+ initial="desiredpassword, desiredpasswordConfirm"/>
</form-bean>
<form-bean name="userDetailsForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
@@ -128,8 +128,8 @@
<form-property name="lastName" type="java.lang.String"/>
<form-property name="usepam" type="java.lang.Boolean"/>
<form-property name="submitted" type="java.lang.Boolean" />
- <form-property name="no_scrub" type="java.lang.String"
- initial="desiredpassword, desiredpasswordConfirm"/>
+ <form-property name="no_scrub" type="java.lang.String"
+ initial="desiredpassword, desiredpasswordConfirm"/>
</form-bean>
<form-bean name="orgDetailsForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
@@ -332,7 +332,7 @@
</form-bean>
<form-bean name="systemSearchForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_string" type="java.lang.String" />
<form-property name="view_mode" type="java.lang.String" />
<form-property name="whereToSearch" type="java.lang.String" />
@@ -340,7 +340,7 @@
<form-property name="fineGrained" type="java.lang.Boolean" />
<form-property name="submitted" type="java.lang.Boolean" />
<form-property name="no_scrub" type="java.lang.String"
- initial="search_string"/>
+ initial="search_string"/>
</form-bean>
<form-bean name="docsSearchForm"
@@ -351,7 +351,7 @@
</form-bean>
<form-bean name="searchForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="search_type" type="java.lang.String" />
<form-property name="search_string" type="java.lang.String" />
<form-property name="submitted" type="java.lang.Boolean" />
@@ -446,9 +446,9 @@
<form-property name="date_hour" type="java.lang.Integer"/>
<form-property name="date_minute" type="java.lang.Integer"/>
<form-property name="date_am_pm" type="java.lang.Integer"/>
- <form-property name="no_scrub" type="java.lang.String"
- initial="run_script, script"/>
-
+ <form-property name="no_scrub" type="java.lang.String"
+ initial="run_script, script"/>
+
</form-bean>
<form-bean name="errataPublishForm"
@@ -563,17 +563,17 @@
<form-property name="web|is_monitoring_backend" type="java.lang.Boolean"/>
<form-property name="submitted" type="java.lang.Boolean"/>
<form-property name="no_scrub" type="java.lang.String"
- initial="server|satellite|http_proxy_password, server|satellite|http_proxy_password_confirm"/>
-
+ initial="server|satellite|http_proxy_password, server|satellite|http_proxy_password_confirm"/>
+
</form-bean>
<form-bean name="certificateConfigForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="cert_file" type="org.apache.struts.upload.FormFile"/>
<form-property name="cert_text" type="java.lang.String"/>
<form-property name="submitted" type="java.lang.Boolean"/>
- <form-property name="no_scrub" type="java.lang.String"
- initial="cert_text"/>
+ <form-property name="no_scrub" type="java.lang.String"
+ initial="cert_text"/>
</form-bean>
<form-bean name="bootstrapConfigForm"
@@ -589,7 +589,7 @@
<form-property name="http-proxy-password" type="java.lang.String"/>
<form-property name="submitted" type="java.lang.Boolean"/>
<form-property name="no_scrub" type="java.lang.String"
- initial="http-proxy-password"/>
+ initial="http-proxy-password"/>
</form-bean>
<form-bean name="restartForm"
@@ -607,7 +607,7 @@
<form-property name="no_scrub" type="java.lang.String" initial="contents"/>
</form-bean>
- <form-bean name="cryptoKeyDeleteForm"
+ <form-bean name="cryptoKeyDeleteForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="description" type="java.lang.String"/>
<form-property name="type" type="java.lang.String"/>
@@ -621,7 +621,7 @@
<form-property name="submitted" type="java.lang.Boolean"/>
</form-bean>
- <form-bean name="cloneErrataForm"
+ <form-bean name="cloneErrataForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="channel" type="java.lang.String"/>
<form-property name="showalreadycloned" type="java.lang.Boolean"/>
@@ -630,8 +630,8 @@
<form-bean name="packagePushForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
- <form-property name="cid" type="java.lang.Long"/>
- <form-property name="eid" type="java.lang.Long"/>
+ <form-property name="cid" type="java.lang.Long"/>
+ <form-property name="eid" type="java.lang.Long"/>
</form-bean>
<!-- Kickstart Form Beans -->
@@ -649,17 +649,17 @@
<form-property name="virtualizationTypeLabel" type="java.lang.String" />
<form-property name="kernel_options" type="java.lang.String"/>
<form-property name="post_kernel_options" type="java.lang.String"/>
- <form-property name="virt_disk_path" type="java.lang.String"/>
- <form-property name="virt_mem_mb" type="java.lang.Integer"/>
- <form-property name="virt_cpus" type="java.lang.Integer"/>
- <form-property name="virt_disk_size" type="java.lang.Integer"/>
- <form-property name="virt_bridge" type="java.lang.String"/>
+ <form-property name="virt_disk_path" type="java.lang.String"/>
+ <form-property name="virt_mem_mb" type="java.lang.Integer"/>
+ <form-property name="virt_cpus" type="java.lang.Integer"/>
+ <form-property name="virt_disk_size" type="java.lang.Integer"/>
+ <form-property name="virt_bridge" type="java.lang.String"/>
</form-bean>
<form-bean name="kickstartDeleteForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
- <form-property name="submitted" type="java.lang.Boolean"/>
+ <form-property name="submitted" type="java.lang.Boolean"/>
</form-bean>
<form-bean name="kickstartSoftwareForm"
@@ -672,7 +672,7 @@
<form-property name="submitted" type="java.lang.Boolean"/>
<form-property name="fieldChanged" type="java.lang.String" />
<form-property name="child_channels" type="java.lang.String[]"/>
- <form-property name="possibleRepos"
+ <form-property name="possibleRepos"
type="com.redhat.rhn.frontend.struts.LabelValueEnabledBean[]"/>
<form-property name="selectedRepos" type="java.lang.String[]"/>
@@ -703,8 +703,8 @@
<form-property name="rootPasswordConfirm" type="java.lang.String" />
<form-property name="submitted" type="java.lang.Boolean" />
<form-property name="no_scrub" type="java.lang.String"
- initial="rootPassword, rootPasswordConfirm"/>
-
+ initial="rootPassword, rootPasswordConfirm"/>
+
</form-bean>
<form-bean name="kickstartScriptForm"
@@ -772,8 +772,8 @@
<form-property name="kstreeId" type="java.lang.Long" />
<form-property name="virtualizationTypes" type="java.util.List" />
<form-property name="virtualizationTypeLabel" type="java.lang.String" />
- <form-property name="updateAll" type="java.lang.Boolean" />
- <form-property name="updateRedHat" type="java.lang.Boolean" />
+ <form-property name="updateAll" type="java.lang.Boolean" />
+ <form-property name="updateRedHat" type="java.lang.Boolean" />
<form-property name="fileUpload" type="org.apache.struts.upload.FormFile" />
<form-property name="contents" type="java.lang.String" />
<form-property name="org_default" type="java.lang.Boolean" />
@@ -809,16 +809,16 @@
<form-property name="rootPassword" type="java.lang.String" />
<form-property name="rootPasswordConfirm" type="java.lang.String" />
<form-property name="virtualizationTypes" type="java.util.List" />
- <form-property name="virtualizationTypeLabel" type="java.lang.String" />
- <form-property name="isRaw" type="java.lang.Boolean" />
- <form-property name="rawData" type="java.lang.String" />
- <form-property name="cffUpload" type="org.apache.struts.upload.FormFile" />
+ <form-property name="virtualizationTypeLabel" type="java.lang.String" />
+ <form-property name="isRaw" type="java.lang.Boolean" />
+ <form-property name="rawData" type="java.lang.String" />
+ <form-property name="cffUpload" type="org.apache.struts.upload.FormFile" />
<form-property name="no_scrub" type="java.lang.String"
- initial="rootPassword, rootPasswordConfirm"/>
+ initial="rootPassword, rootPasswordConfirm"/>
</form-bean>
<form-bean name="kickstartScheduleWizardForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="sid" type="java.lang.Long" />
<form-property name="ksid" type="java.lang.Long" />
<form-property name="cobbler_id" type="java.lang.String" />
@@ -858,16 +858,16 @@
<form-property name="date_hour" type="java.lang.Integer" />
<form-property name="date_minute" type="java.lang.Integer" />
<form-property name="date_am_pm" type="java.lang.Integer" />
- <!-- Needed for scheduling Virtualization stuff-->
- <form-property name="memoryAllocation" type="java.lang.String" />
- <form-property name="virtualCpus" type="java.lang.String" />
- <form-property name="virtBridge" type="java.lang.String" />
+ <!-- Needed for scheduling Virtualization stuff-->
+ <form-property name="memoryAllocation" type="java.lang.String" />
+ <form-property name="virtualCpus" type="java.lang.String" />
+ <form-property name="virtBridge" type="java.lang.String" />
<form-property name="macAddress" type="java.lang.String" />
- <form-property name="diskPath" type="java.lang.String" />
- <form-property name="storageType" type="java.lang.String" />
- <form-property name="localStorageGigabytes" type="java.lang.String" />
- <form-property name="guestName" type="java.lang.String" />
- <form-property name="destroyDisks" type="java.lang.String" />
+ <form-property name="diskPath" type="java.lang.String" />
+ <form-property name="storageType" type="java.lang.String" />
+ <form-property name="localStorageGigabytes" type="java.lang.String" />
+ <form-property name="guestName" type="java.lang.String" />
+ <form-property name="destroyDisks" type="java.lang.String" />
</form-bean>
@@ -932,8 +932,8 @@
</form-bean>
<form-bean name="systemEntitlementsForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
- <form-property name="addOnEntitlement" type="java.lang.String"/>
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="addOnEntitlement" type="java.lang.String"/>
</form-bean>
<form-bean name="localePreferencesForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
@@ -943,11 +943,11 @@
<form-property name="uid" type="java.lang.Long" />
</form-bean>
- <form-bean name="deactivateSelfForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm" >
- <form-property name="submitted" type="java.lang.Boolean" />
- </form-bean>
-
+ <form-bean name="deactivateSelfForm"
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm" >
+ <form-property name="submitted" type="java.lang.Boolean" />
+ </form-bean>
+
<form-bean name="channelEditForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="submitted" type="java.lang.Boolean" />
@@ -983,52 +983,52 @@
<form-property name="submitted" type="java.lang.Boolean"/>
</form-bean>
- <!-- Audit forms -->
- <form-bean name="scheduleXccdfForm"
- type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
- <form-property name="params" type="java.lang.String"/>
- <form-property name="path" type="java.lang.String"/>
- <form-property name="submitted" type="java.lang.Boolean"/>
- <!-- fields needed by datePicker -->
- <form-property name="use_date" type="java.lang.Boolean"/>
- <form-property name="date_year" type="java.lang.Integer"/>
- <form-property name="date_month" type="java.lang.Integer"/>
- <form-property name="date_day" type="java.lang.Integer"/>
- <form-property name="date_hour" type="java.lang.Integer"/>
- <form-property name="date_minute" type="java.lang.Integer"/>
- <form-property name="date_am_pm" type="java.lang.Integer"/>
- </form-bean>
-
- <!-- ConfigChannel forms -->
+ <!-- Audit forms -->
+ <form-bean name="scheduleXccdfForm"
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="params" type="java.lang.String"/>
+ <form-property name="path" type="java.lang.String"/>
+ <form-property name="submitted" type="java.lang.Boolean"/>
+ <!-- fields needed by datePicker -->
+ <form-property name="use_date" type="java.lang.Boolean"/>
+ <form-property name="date_year" type="java.lang.Integer"/>
+ <form-property name="date_month" type="java.lang.Integer"/>
+ <form-property name="date_day" type="java.lang.Integer"/>
+ <form-property name="date_hour" type="java.lang.Integer"/>
+ <form-property name="date_minute" type="java.lang.Integer"/>
+ <form-property name="date_am_pm" type="java.lang.Integer"/>
+ </form-bean>
+
+ <!-- ConfigChannel forms -->
<form-bean name="channelOverviewForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm" >
<form-property name="cofName" type="java.lang.String"/>
<form-property name="cofLabel" type="java.lang.String"/>
<form-property name="cofDescription" type="java.lang.String"/>
<form-property name="editing" type="java.lang.Boolean"/>
- <form-property name="creating" type="java.lang.Boolean"/>
+ <form-property name="creating" type="java.lang.Boolean"/>
<form-property name="submitted" type="java.lang.Boolean"/>
</form-bean>
-
+
<form-bean name="configFileForm"
type="com.redhat.rhn.frontend.action.configuration.ConfigFileForm" >
<form-property name="cffPath" type="java.lang.String"/>
<form-property name="cffUid" type="java.lang.String"/>
<form-property name="cffGid" type="java.lang.String"/>
<form-property name="cffSELinuxCtx" type="java.lang.String"/>
- <form-property name="cffPermissions" type="java.lang.String"/>
- <form-property name="cffMacroStart" type="java.lang.String"/>
- <form-property name="cffMacroEnd" type="java.lang.String"/>
+ <form-property name="cffPermissions" type="java.lang.String"/>
+ <form-property name="cffMacroStart" type="java.lang.String"/>
+ <form-property name="cffMacroEnd" type="java.lang.String"/>
<form-property name="cffUpload" type="org.apache.struts.upload.FormFile" />
- <form-property name="contents" type="java.lang.String"/>
- <form-property name="targetPath" type="java.lang.String"/>
- <form-property name="filetype" type="java.lang.String" />
- <form-property name="revnum" type="java.lang.String" />
- <form-property name="binary" type="java.lang.Boolean" />
+ <form-property name="contents" type="java.lang.String"/>
+ <form-property name="targetPath" type="java.lang.String"/>
+ <form-property name="filetype" type="java.lang.String" />
+ <form-property name="revnum" type="java.lang.String" />
+ <form-property name="binary" type="java.lang.Boolean" />
<form-property name="submitted" type="java.lang.Boolean"/>
<form-property name="no_scrub" type="java.lang.String"
initial="contents, cffMacroStart, cffMacroEnd"/>
-
+
</form-bean>
<form-bean name="virtualGuestsForm"
@@ -1051,7 +1051,7 @@
</form-bean>
<!--END ConfigChannel forms -->
-
+
<form-bean name="recentlyRegisteredSystemsForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="threshold" type="java.lang.String"/>
@@ -1067,7 +1067,7 @@
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="sid" type="java.lang.Long"/>
<form-property name="submitted" type="java.lang.Boolean"/>
- <form-property name="primaryInterface" type="java.lang.String"/>
+ <form-property name="primaryInterface" type="java.lang.String"/>
</form-bean>
<form-bean name="systemDetailsForm"
@@ -1097,7 +1097,7 @@
<form-bean name="systemChannelsForm"
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
<form-property name="child_channels" type="java.lang.String[]"/>
- <form-property name="base_channels" type="org.apache.struts.util.LabelValueBean[]"/>
+ <form-property name="base_channels" type="org.apache.struts.util.LabelValueBean[]"/>
<form-property name="new_base_channel_id" type="java.lang.Long"/>
<form-property name="submitted" type="java.lang.Boolean"/>
</form-bean>
@@ -1163,13 +1163,13 @@
type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm" >
<form-property name="submitted" type="java.lang.Boolean" />
</form-bean>
-
- <form-bean name="scrollForm"
- type="org.apache.struts.action.DynaActionForm">
+
+ <form-bean name="scrollForm"
+ type="org.apache.struts.action.DynaActionForm">
<form-property name="xPosition" type="java.lang.Integer"/>
<form-property name="yPosition" type="java.lang.Integer"/>
- </form-bean>
-
+ </form-bean>
+
<form-bean name="channelDetailForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="global" type="java.lang.String" />
@@ -1236,6 +1236,24 @@
<form-property name="channel_label" type="java.lang.String" />
</form-bean>
+ <!-- ISS Admin forms -->
+ <form-bean name="editSlaveForm"
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="id" type="java.lang.Long" />
+ <form-property name="fqdn" type="java.lang.String" />
+ <form-property name="ip" type="java.lang.String" />
+ <form-property name="enabled" type="java.lang.Boolean" />
+ <form-property name="allowAllOrgs" type="java.lang.Boolean" />
+ <form-property name="submitted" type="java.lang.Boolean"/>
+ </form-bean>
+
+ <form-bean name="mapOrgsForm"
+ type="com.redhat.rhn.frontend.struts.ScrubbingDynaActionForm">
+ <form-property name="id" type="java.lang.Long" />
+ <form-property name="label" type="java.lang.String" />
+ <form-property name="submitted" type="java.lang.Boolean"/>
+ </form-bean>
+
</form-beans>
<global-exceptions>
@@ -1251,7 +1269,7 @@
<exception type="com.redhat.rhn.frontend.xmlrpc.NoSuchKickstartException"
path="/WEB-INF/pages/common/errors/nosuchkickstart.jsp" key="date"
handler="com.redhat.rhn.common.errors.NoSuchKickstartExceptionHandler"/>
- <exception type="com.redhat.rhn.manager.MissingCapabilityException"
+ <exception type="com.redhat.rhn.manager.MissingCapabilityException"
path="/WEB-INF/pages/common/errors/missingcapability.jsp" key="date"
handler="com.redhat.rhn.common.errors.SatelliteExceptionHandler"/>
</global-exceptions>
@@ -1484,7 +1502,7 @@
scope="request"
type="com.redhat.rhn.frontend.action.user.UserLocalePrefAction">
<forward name="display" path="/account/LocalePreferences.do"
- redirect="true" />
+ redirect="true" />
<forward name="default" path="/WEB-INF/pages/user/edit/localepreference.jsp" />
</action>
@@ -1667,7 +1685,7 @@
<set-property property="acls"
value="user_role(org_admin)"/>
<forward name="default" path="/WEB-INF/pages/admin/users/disabledlist.jsp" />
- <forward name="enable" path="/users/EnableConfirm.do" redirect="true" />
+ <forward name="enable" path="/users/EnableConfirm.do" redirect="true" />
</action>
<action path="/users/EnableConfirm"
@@ -1874,7 +1892,7 @@
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/schedule/completedactions.jsp" />
- <forward name="archive" path="/schedule/CompletedActions.do" redirect="true"/>
+ <forward name="archive" path="/schedule/CompletedActions.do" redirect="true"/>
</action>
@@ -1886,7 +1904,7 @@
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/schedule/archivedactions.jsp" />
- <forward name="success" path="/schedule/ArchivedActions.do" redirect="true"/>
+ <forward name="success" path="/schedule/ArchivedActions.do" redirect="true"/>
</action>
@@ -2125,8 +2143,8 @@
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/errata/affectedsystems.jsp" />
- <forward name="confirm"
- path="/errata/details/SystemsAffectedSubmit.do" />
+ <forward name="confirm"
+ path="/errata/details/SystemsAffectedSubmit.do" />
</action>
<action path="/errata/details/SystemsAffectedSubmit"
@@ -2539,35 +2557,35 @@
<!-- ===== CHANNELS ===== -->
<action path="/software/channels/Vendor"
- scope="request"
- input="/WEB-INF/pages/channel/vendor.jsp"
- type="com.redhat.rhn.frontend.action.channel.VendorChannelTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/vendor.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/vendor.jsp"
+ type="com.redhat.rhn.frontend.action.channel.VendorChannelTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/vendor.jsp" />
</action>
<action path="/software/channels/Popular"
- scope="request"
- input="/WEB-INF/pages/channel/popular.jsp"
- type="com.redhat.rhn.frontend.action.channel.PopularChannelTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/popular.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/popular.jsp"
+ type="com.redhat.rhn.frontend.action.channel.PopularChannelTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/popular.jsp" />
</action>
<action path="/software/channels/Custom"
- scope="request"
- input="/WEB-INF/pages/channel/custom.jsp"
- type="com.redhat.rhn.frontend.action.channel.MyChannelTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/custom.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/custom.jsp"
+ type="com.redhat.rhn.frontend.action.channel.MyChannelTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/custom.jsp" />
</action>
<action path="/software/channels/All"
- scope="request"
- input="/WEB-INF/pages/channel/all.jsp"
- type="com.redhat.rhn.frontend.action.channel.AllChannelTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/all.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/all.jsp"
+ type="com.redhat.rhn.frontend.action.channel.AllChannelTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/all.jsp" />
</action>
<action path="/software/channels/Shared"
@@ -2579,35 +2597,35 @@
</action>
<action path="/software/channels/Retired"
- scope="request"
- input="/WEB-INF/pages/channel/retired.jsp"
- type="com.redhat.rhn.frontend.action.channel.RetiredChannelTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/retired.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/retired.jsp"
+ type="com.redhat.rhn.frontend.action.channel.RetiredChannelTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/retired.jsp" />
</action>
<action path="/software/channels/ChannelFamilyTree"
- scope="request"
- input="/WEB-INF/pages/channel/channel_family_tree.jsp"
- type="com.redhat.rhn.frontend.action.channel.ChannelFamilyTreeAction">
- <forward name="default"
- path="/WEB-INF/pages/channel/channel_family_tree.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/channel/channel_family_tree.jsp"
+ type="com.redhat.rhn.frontend.action.channel.ChannelFamilyTreeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/channel/channel_family_tree.jsp" />
</action>
<action path="/multiorg/channels/Consumed"
- scope="request"
- input="/WEB-INF/pages/multiorg/channels/consumed.jsp"
- type="com.redhat.rhn.frontend.action.multiorg.ChannelConsumeAction">
- <forward name="default"
- path="/WEB-INF/pages/multiorg/channels/consumed.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/multiorg/channels/consumed.jsp"
+ type="com.redhat.rhn.frontend.action.multiorg.ChannelConsumeAction">
+ <forward name="default"
+ path="/WEB-INF/pages/multiorg/channels/consumed.jsp" />
</action>
<action path="/multiorg/channels/Provided"
- scope="request"
- input="/WEB-INF/pages/multiorg/channels/provided.jsp"
- type="com.redhat.rhn.frontend.action.multiorg.ChannelProvideAction">
- <forward name="default"
- path="/WEB-INF/pages/multiorg/channels/provided.jsp" />
+ scope="request"
+ input="/WEB-INF/pages/multiorg/channels/provided.jsp"
+ type="com.redhat.rhn.frontend.action.multiorg.ChannelProvideAction">
+ <forward name="default"
+ path="/WEB-INF/pages/multiorg/channels/provided.jsp" />
</action>
<action path="/channels/software/Entitlements"
@@ -2757,13 +2775,13 @@
<forward name="hostname"
path="/systems/DuplicateHostName"
redirect="true"/>
- <forward name="ip"
+ <forward name="ip"
path="/systems/DuplicateIPList"
redirect="true"/>
- <forward name="ipv6"
+ <forward name="ipv6"
path="/systems/DuplicateIPv6List"
redirect="true"/>
- <forward name="macaddress"
+ <forward name="macaddress"
path="/systems/DuplicateMacAddress"
redirect="true"/>
</action>
@@ -2934,7 +2952,7 @@
</action>
<action path="/systems/SystemEntitlements"
- name="systemEntitlementsForm"
+ name="systemEntitlementsForm"
scope="request"
input="/WEB-INF/pages/systems/entitlements/entitlements.jsp"
type="com.redhat.rhn.frontend.action.systems.entitlements.SystemEntitlementsSetupAction"
@@ -2959,7 +2977,7 @@
<action path="/systems/Search"
- name="systemSearchForm"
+ name="systemSearchForm"
scope="request"
input="/WEB-INF/pages/systems/systemsearch.jsp"
type="com.redhat.rhn.frontend.action.systems.SystemSearchSetupAction"
@@ -3130,7 +3148,7 @@
<forward name="confirm"
path="/systems/details/packages/Packages.do"
redirect="true" />
- <forward name="remotecmd"
+ <forward name="remotecmd"
path="/systems/details/packages/ScheduleRemoteCommand.do"
redirect="true" />
</action>
@@ -3371,7 +3389,7 @@
value="system_feature(ftr_errata_updates); not is_solaris()"/>
<forward name="default"
path="/WEB-INF/pages/systems/errata.jsp"/>
- <forward name="confirm"
+ <forward name="confirm"
path="/systems/details/ErrataConfirm.do"
redirect="true"/>
</action>
@@ -3379,13 +3397,13 @@
<action path="/systems/details/ErrataConfirm"
scope="request"
input="/WEB-INF/pages/systems/errataconfirm.jsp"
- name="applyErrataConfirmForm"
+ name="applyErrataConfirmForm"
type="com.redhat.rhn.frontend.action.systems.ErrataConfirmSetupAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/systems/errataconfirm.jsp"/>
- <forward name="confirmed"
+ <forward name="confirmed"
path="/systems/details/ErrataList.do"
redirect="true"/>
</action>
@@ -3453,7 +3471,7 @@
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/ssm/systems/ssmdeleteconfirm.jsp"/>
- <forward name="confirm"
+ <forward name="confirm"
path="/ssm/ViewAllLog.do" redirect="true"/>
</action>
@@ -3968,7 +3986,7 @@
<action path="/systems/details/configuration/addfiles/CreateFile"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/sdc/createfile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.LocalAddFileAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -3983,7 +4001,7 @@
<action path="/systems/details/configuration/addfiles/UploadFile"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/sdc/uploadfile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.LocalAddFileAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -3998,7 +4016,7 @@
<action path="/systems/details/configuration/addfiles/ImportFile"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/sdc/importfile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.ImportFileAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4012,7 +4030,7 @@
<action path="/systems/details/configuration/addfiles/ImportFileSubmit"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/sdc/importfile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.ImportFileSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
@@ -4030,7 +4048,7 @@
<action path="/systems/details/configuration/addfiles/ImportFileConfirm"
scope="request"
- name="datePickerForm"
+ name="datePickerForm"
input="/WEB-INF/pages/configuration/sdc/importfileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.ImportFileConfirmAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4044,8 +4062,8 @@
<action path="/systems/details/configuration/addfiles/ImportFileConfirmSubmit"
scope="request"
- name="datePickerForm"
- parameter="dispatch"
+ name="datePickerForm"
+ parameter="dispatch"
input="/WEB-INF/pages/configuration/sdc/importfileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListConfirmSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4075,7 +4093,7 @@
<action path="/systems/details/configuration/DeployFileSubmit"
scope="request"
- parameter="dispatch"
+ parameter="dispatch"
input="/WEB-INF/pages/configuration/sdc/deployfile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4092,7 +4110,7 @@
<action path="/systems/details/configuration/DeployFileConfirm"
scope="request"
- name="datePickerForm"
+ name="datePickerForm"
input="/WEB-INF/pages/configuration/sdc/deployfileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListConfirmSetupAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4106,8 +4124,8 @@
<action path="/systems/details/configuration/DeployFileConfirmSubmit"
scope="request"
- name="datePickerForm"
- parameter="dispatch"
+ name="datePickerForm"
+ parameter="dispatch"
input="/WEB-INF/pages/configuration/sdc/deployfileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListConfirmSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4131,13 +4149,13 @@
value="system_feature(ftr_config);client_capable(configfiles.diff)"/>
<set-property property="mixins"
value="com.redhat.rhn.common.security.acl.SystemAclHandler"/>
- <forward name="default"
+ <forward name="default"
path="/WEB-INF/pages/configuration/sdc/difffile.jsp"/>
</action>
<action path="/systems/details/configuration/DiffFileSubmit"
scope="request"
- parameter="dispatch"
+ parameter="dispatch"
input="/WEB-INF/pages/configuration/sdc/difffile.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4154,7 +4172,7 @@
<action path="/systems/details/configuration/DiffFileConfirm"
scope="request"
- name="datePickerForm"
+ name="datePickerForm"
input="/WEB-INF/pages/configuration/sdc/difffileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListConfirmSetupAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4168,8 +4186,8 @@
<action path="/systems/details/configuration/DiffFileConfirmSubmit"
scope="request"
- name="datePickerForm"
- parameter="dispatch"
+ name="datePickerForm"
+ parameter="dispatch"
input="/WEB-INF/pages/configuration/sdc/difffileconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.sdc.FileListConfirmSubmitAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -4200,15 +4218,15 @@
input="/WEB-INF/pages/systems/details/virtualization/virtualguestslist.jsp"
type="com.redhat.rhn.frontend.action.systems.virtualization.VirtualGuestsListAction"
name="virtualGuestsForm"
- parameter="dispatch"
+ parameter="dispatch"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequired" value="true" />
<forward name="default"
path="/systems/details/virtualization/VirtualGuestsList.do"
- redirect="true"/>
+ redirect="true"/>
<forward name="confirm"
path="/systems/details/virtualization/VirtualGuestsConfirm.do"
- redirect="true"/>
+ redirect="true"/>
</action>
<action path="/systems/details/virtualization/VirtualGuestsConfirm"
@@ -4223,15 +4241,15 @@
scope="request"
input="/WEB-INF/pages/systems/details/virtualization/virtualguests_confirm.jsp"
type="com.redhat.rhn.frontend.action.systems.virtualization.VirtualGuestsConfirmAction"
- parameter="dispatch"
+ parameter="dispatch"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequired" value="true" />
<forward name="default"
path="/systems/details/virtualization/VirtualGuestsList.do"
- redirect="true"/>
+ redirect="true"/>
<forward name="success"
path="/systems/details/virtualization/VirtualGuestsList.do"
- redirect="true"/>
+ redirect="true"/>
</action>
<!-- MONITORING -->
@@ -5184,6 +5202,95 @@
path="/WEB-INF/pages/admin/catalina.jsp"/>
</action>
+ <!-- ISS Config Pages -->
+ <action path="/admin/iss/Master"
+ scope="request"
+ input="/WEB-INF/pages/admin/iss/master.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssMasterAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/master.jsp"/>
+ <forward name="edit"
+ path="/admin/iss/EditSlave.do" redirect="true"/>
+ <forward name="confirm"
+ path="/admin/iss/RemoveSlaveConfirm.do"
+ redirect="true" />
+ </action>
+
+ <action path="/admin/iss/EditSlave"
+ scope="request"
+ name="editSlaveForm"
+ input="/WEB-INF/pages/admin/iss/editslave.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssEditSlaveAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/editslave.jsp"/>
+ <forward name="success"
+ path="/admin/iss/Master.do" redirect="true"/>
+ </action>
+
+ <action path="/admin/iss/RemoveSlaveConfirm"
+ scope="request"
+ name="editSlaveForm"
+ input="/WEB-INF/pages/admin/iss/confirmslaveremove.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssRemoveSlavesAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/confirmslaveremove.jsp"/>
+ <forward name="confirm"
+ path="/admin/iss/Master.do" redirect="true"/>
+ </action>
+
+ <action path="/admin/iss/DeleteSlave"
+ scope="request"
+ input="/WEB-INF/pages/admin/iss/editslave.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssDeleteSlaveAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/admin/iss/Master.do" redirect="true"/>
+ </action>
+
+ <action path="/admin/iss/Slave"
+ scope="request"
+ input="/WEB-INF/pages/admin/iss/slave.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssOrgCatalogueAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/slave.jsp"/>
+ <forward name="confirm"
+ path="/admin/iss/RemoveMasterConfirm.do"
+ redirect="true" />
+ </action>
+
+ <action path="/admin/iss/RemoveMasterConfirm"
+ scope="request"
+ input="/WEB-INF/pages/admin/iss/confirmmasterremove.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssRemoveMastersAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/confirmmastersremove.jsp"/>
+ <forward name="confirm"
+ path="/admin/iss/Slave.do" redirect="true"/>
+ </action>
+
+ <action path="/admin/iss/MapOrgs"
+ scope="request"
+ name="mapOrgsForm"
+ input="/WEB-INF/pages/admin/iss/maporgs.jsp"
+ type="com.redhat.rhn.frontend.action.iss.IssMapOrgsAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <set-property property="acls" value="user_role(satellite_admin);"/>
+ <forward name="default"
+ path="/WEB-INF/pages/admin/iss/maporgs.jsp"/>
+ </action>
+ <!-- /ISS Config Pages -->
+
<action path="/YourRhnClips"
scope="request"
input="/WEB-INF/pages/common/fragments/yourrhn/yourrhnclips.jsp"
@@ -5478,9 +5585,9 @@
path="/WEB-INF/pages/admin/multiorg/entitlementorgs.jsp"/>
</action>
- <!-- Activation Key Pages-->
+ <!-- Activation Key Pages-->
<action path="/activationkeys/List"
- name="activationKeyForm"
+ name="activationKeyForm"
scope="request"
input="/WEB-INF/pages/activationkeys/list.jsp"
type="com.redhat.rhn.frontend.action.token.ActivationKeysListAction"
@@ -5494,9 +5601,9 @@
path="/activationkeys/List.do"
redirect = "true"/>
</action>
-
+
<action path="/activationkeys/Create"
- name="activationKeyForm"
+ name="activationKeyForm"
scope="request"
input="/WEB-INF/pages/activationkeys/create.jsp"
type="com.redhat.rhn.frontend.action.token.ActivationKeyDetailsAction"
@@ -5513,10 +5620,10 @@
</action>
<action path="/activationkeys/Edit"
- name="activationKeyForm"
+ name="activationKeyForm"
scope="request"
input="/WEB-INF/pages/activationkeys/edit.jsp"
- type="com.redhat.rhn.frontend.action.token.ActivationKeyDetailsAction"
+ type="com.redhat.rhn.frontend.action.token.ActivationKeyDetailsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="edit">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5527,10 +5634,10 @@
path="/activationkeys/Edit.do"/>
</action>
- <action path="/activationkeys/Delete"
+ <action path="/activationkeys/Delete"
scope="request"
input="/WEB-INF/pages/activationkeys/delete.jsp"
- type="com.redhat.rhn.frontend.action.token.ActivationKeyDeleteConfirmAction"
+ type="com.redhat.rhn.frontend.action.token.ActivationKeyDeleteConfirmAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5557,10 +5664,10 @@
</action>
<action path="/activationkeys/packages/Packages"
- name="activationKeyPackagesForm"
+ name="activationKeyPackagesForm"
scope="request"
input="/WEB-INF/pages/activationkeys/packages/listeditpackages.jsp"
- type="com.redhat.rhn.frontend.action.token.ActivationKeyPackagesAction"
+ type="com.redhat.rhn.frontend.action.token.ActivationKeyPackagesAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5571,10 +5678,10 @@
path="/activationkeys/packages/Packages.do"/>
</action>
- <action path="/activationkeys/configuration/List"
+ <action path="/activationkeys/configuration/List"
scope="request"
input="/WEB-INF/pages/activationkeys/configuration/list.jsp"
- type="com.redhat.rhn.frontend.action.token.configuration.ListRemoveChannelsAction"
+ type="com.redhat.rhn.frontend.action.token.configuration.ListRemoveChannelsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5585,10 +5692,10 @@
path="/activationkeys/configuration/List.do"/>
</action>
- <action path="/activationkeys/configuration/Subscribe"
+ <action path="/activationkeys/configuration/Subscribe"
scope="request"
input="/WEB-INF/pages/activationkeys/configuration/subscribe.jsp"
- type="com.redhat.rhn.frontend.action.token.configuration.SubscribeChannelsAction"
+ type="com.redhat.rhn.frontend.action.token.configuration.SubscribeChannelsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5602,11 +5709,11 @@
</action>
- <action path="/activationkeys/configuration/Rank"
- name = "channelRanksForm"
+ <action path="/activationkeys/configuration/Rank"
+ name = "channelRanksForm"
scope="request"
input="/WEB-INF/pages/activationkeys/configuration/rank.jsp"
- type="com.redhat.rhn.frontend.action.token.configuration.RankChannelsAction"
+ type="com.redhat.rhn.frontend.action.token.configuration.RankChannelsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5617,10 +5724,10 @@
path="/activationkeys/configuration/List.do"/>
</action>
- <action path="/activationkeys/groups/List"
+ <action path="/activationkeys/groups/List"
scope="request"
input="/WEB-INF/pages/activationkeys/groups/list.jsp"
- type="com.redhat.rhn.frontend.action.token.groups.ListRemoveGroupsAction"
+ type="com.redhat.rhn.frontend.action.token.groups.ListRemoveGroupsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5631,10 +5738,10 @@
path="/activationkeys/groups/List.do"/>
</action>
- <action path="/activationkeys/groups/Add"
+ <action path="/activationkeys/groups/Add"
scope="request"
input="/WEB-INF/pages/activationkeys/groups/list.jsp"
- type="com.redhat.rhn.frontend.action.token.groups.AddGroupsAction"
+ type="com.redhat.rhn.frontend.action.token.groups.AddGroupsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5645,10 +5752,10 @@
path="/activationkeys/groups/List.do"/>
</action>
- <action path="/activationkeys/systems/List"
+ <action path="/activationkeys/systems/List"
scope="request"
input="/WEB-INF/pages/activationkeys/systems/list.jsp"
- type="com.redhat.rhn.frontend.action.token.ActivatedSystemsAction"
+ type="com.redhat.rhn.frontend.action.token.ActivatedSystemsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -5700,8 +5807,8 @@
<forward name="deleted" path="/profiles/List.do" redirect="true" />
</action>
- <!-- Kickstart Pages SSM -->
- <action path="/systems/ssm/kickstart/KickstartableSystems"
+ <!-- Kickstart Pages SSM -->
+ <action path="/systems/ssm/kickstart/KickstartableSystems"
scope="request"
input="/WEB-INF/pages/kickstart/ssm/kickstartablesystems.jsp"
type="com.redhat.rhn.frontend.action.kickstart.ssm.SsmKickstartableSystemsAction"
@@ -5713,12 +5820,12 @@
<forward name="scheduleByIp"
path="/systems/ssm/kickstart/ScheduleByIp.do"
redirect= "true"/>
- <forward name="scheduleByProfile"
+ <forward name="scheduleByProfile"
path="/systems/ssm/kickstart/ScheduleByProfile.do"
redirect= "true"/>
</action>
- <action path="/systems/ssm/kickstart/ScheduleByProfile"
- name ="kickstartScheduleWizardForm"
+ <action path="/systems/ssm/kickstart/ScheduleByProfile"
+ name ="kickstartScheduleWizardForm"
scope="request"
input="/WEB-INF/pages/kickstart/ssm/schedule.jsp"
type="com.redhat.rhn.frontend.action.kickstart.ssm.SsmKSScheduleAction"
@@ -5732,8 +5839,8 @@
path="/systems/ssm/kickstart/KickstartableSystems.do"/>
</action>
- <action path="/systems/ssm/kickstart/ScheduleByIp"
- name ="kickstartScheduleWizardForm"
+ <action path="/systems/ssm/kickstart/ScheduleByIp"
+ name ="kickstartScheduleWizardForm"
scope="request"
input="/WEB-INF/pages/kickstart/ssm/schedule.jsp"
type="com.redhat.rhn.frontend.action.kickstart.ssm.SsmKSScheduleAction"
@@ -5747,7 +5854,7 @@
path="/systems/ssm/kickstart/KickstartableSystems.do"/>
</action>
- <!-- Kickstart Pages -->
+ <!-- Kickstart Pages -->
<action path="/kickstart/Kickstarts"
scope="request"
@@ -5800,7 +5907,7 @@
type="com.redhat.rhn.frontend.action.kickstart.KickstartDetailsEditAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
- <set-property property="acls"
+ <set-property property="acls"
value="org_entitlement(rhn_provisioning); user_role(config_admin)"/>
<forward name="default"
path="/WEB-INF/pages/kickstart/kickstartdetails.jsp"/>
@@ -5912,7 +6019,7 @@
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="start"
path="/kickstart/CreateProfileWizard.do"
- redirect="true" />
+ redirect="true" />
<forward name="first"
path="/WEB-INF/pages/kickstart/wizard/profile/first.jsp" />
<forward name="second"
@@ -5929,7 +6036,7 @@
parameter="create"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
- <set-property property="acls"
+ <set-property property="acls"
value="org_entitlement(rhn_provisioning); user_role(config_admin)"/>
<forward name="default"
path="/WEB-INF/pages/kickstart/wizard/profile/advanced/create.jsp"/>
@@ -5945,7 +6052,7 @@
type="com.redhat.rhn.frontend.action.kickstart.KickstartProfileVariableAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
- <set-property property="acls"
+ <set-property property="acls"
value="org_entitlement(rhn_provisioning); user_role(config_admin)"/>
<forward name="default"
path="/WEB-INF/pages/kickstart/kickstartvariables.jsp"/>
@@ -5958,7 +6065,7 @@
type="com.redhat.rhn.frontend.action.kickstart.tree.KickstartTreeVariableAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
- <set-property property="acls"
+ <set-property property="acls"
value="org_entitlement(rhn_provisioning); user_role(config_admin)"/>
<forward name="default"
path="/WEB-INF/pages/kickstart/kickstarttreevariables.jsp"/>
@@ -5973,7 +6080,7 @@
parameter="edit"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
- <set-property property="acls"
+ <set-property property="acls"
value="org_entitlement(rhn_provisioning); user_role(config_admin)"/>
<forward name="default"
path="/WEB-INF/pages/kickstart/wizard/profile/advanced/edit.jsp"/>
@@ -6339,7 +6446,7 @@
scope="request"
input="/WEB-INF/pages/kickstart/file_preservation_list.jsp"
type="com.redhat.rhn.frontend.action.kickstart.KickstartPreservationListSubmitAction"
- parameter="dispatch"
+ parameter="dispatch"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequired" value="true" />
<forward name="default"
@@ -6354,7 +6461,7 @@
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
- path="/WEB-INF/pages/kickstart/packageprofiles.jsp" />
+ path="/WEB-INF/pages/kickstart/packageprofiles.jsp" />
<forward name="success"
path="/kickstart/KickstartPackageProfileEdit.do" redirect="true"/>
</action>
@@ -6439,7 +6546,7 @@
<action path="/systems/details/virtualization/ProvisionVirtualizationWizard"
scope="request"
- name="kickstartScheduleWizardForm"
+ name="kickstartScheduleWizardForm"
type="com.redhat.rhn.frontend.action.systems.virtualization.ProvisionVirtualizationWizardAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
@@ -6520,7 +6627,7 @@
<action path="/systems/details/kickstart/SessionStatus"
scope="request"
- name="scrollForm"
+ name="scrollForm"
input="/WEB-INF/pages/systems/details/kickstart/session_status.jsp"
type="com.redhat.rhn.frontend.action.systems.provisioning.kickstart.SessionStatusAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -6597,9 +6704,9 @@
<!-- ===== CONFIGURATION ===== -->
- <!--
- ** OVERVIEW ACTIONS
- -->
+ <!--
+ ** OVERVIEW ACTIONS
+ -->
<action path="/configuration/Overview"
scope="request"
input="/WEB-INF/pages/configuration/overview/overview.jsp"
@@ -6691,38 +6798,38 @@
path="/WEB-INF/pages/configuration/overview/summary.jsp"/>
</action>
- <!--
- ** CHANNEL ACTIONS
- -->
- <action path="/configuration/ChannelOverview"
- name="channelOverviewForm"
- validate="false"
+ <!--
+ ** CHANNEL ACTIONS
+ -->
+ <action path="/configuration/ChannelOverview"
+ name="channelOverviewForm"
+ validate="false"
scope="request"
input="/WEB-INF/pages/configuration/channelOverview.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelOverviewAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/configuration/channel/channelOverview.jsp"/>
<forward name="sandbox"
- path="/systems/details/configuration/ViewModifySandboxPaths.do"
- redirect="true"/>
+ path="/systems/details/configuration/ViewModifySandboxPaths.do"
+ redirect="true"/>
<forward name="local"
- path="/systems/details/configuration/ViewModifyLocalPaths.do"
- redirect="true"/>
+ path="/systems/details/configuration/ViewModifyLocalPaths.do"
+ redirect="true"/>
<forward name="success" redirect="true"
path="/configuration/ChannelOverview.do"/>
<forward name="error"
path="/WEB-INF/pages/configuration/channel/channelOverview.jsp"/>
</action>
- <action path="/configuration/ChannelCreate"
- name="channelOverviewForm"
- validate="false"
+ <action path="/configuration/ChannelCreate"
+ name="channelOverviewForm"
+ validate="false"
scope="request"
input="/WEB-INF/pages/configuration/channel/channelcreate.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelOverviewAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<set-property property="acls" value="user_role(config_admin)"/>
<forward name="default"
@@ -6733,100 +6840,100 @@
path="/WEB-INF/pages/configuration/channel/channelcreate.jsp"/>
</action>
- <action path="/configuration/DeleteChannel"
- name="submittedForm"
+ <action path="/configuration/DeleteChannel"
+ name="submittedForm"
scope="request"
input="/WEB-INF/pages/configuration/channel/deleteChannel.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.DeleteChannelAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<set-property property="acls" value="user_role(config_admin);"/>
<forward name="submit" redirect="true"
- path="/configuration/GlobalConfigChannelList.do"/>
+ path="/configuration/GlobalConfigChannelList.do"/>
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/deleteChannel.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/deleteChannel.jsp"/>
</action>
<action path="/configuration/ChannelFiles"
scope="request"
input="/WEB-INF/pages/configuration/channel/channelfiles.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFilesListSetup"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/channelfiles.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/channelfiles.jsp"/>
</action>
<action path="/configuration/ChannelFilesSubmit"
scope="request"
input="/WEB-INF/pages/configuration/channel/channelfiles.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFilesListSubmit"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
<forward name="default"
- path="/configuration/ChannelFiles.do"/>
+ path="/configuration/ChannelFiles.do"/>
<forward name="copy2systems" redirect="true"
- path="/configuration/channel/Copy2Systems.do"/>
+ path="/configuration/channel/Copy2Systems.do"/>
<forward name="copy2channels" redirect="true"
- path="/configuration/channel/Copy2Channels.do"/>
+ path="/configuration/channel/Copy2Channels.do"/>
</action>
<action path="/configuration/channel/Copy2Systems"
scope="request"
input="/WEB-INF/pages/configuration/channel/copy2systems.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.Copy2SystemsAction"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/copy2systems.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/copy2systems.jsp"/>
<forward name="success"
- path="/configuration/ChannelFiles.do"/>
+ path="/configuration/ChannelFiles.do"/>
</action>
<action path="/configuration/channel/Copy2Channels"
scope="request"
input="/WEB-INF/pages/configuration/channel/copy2channels.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.Copy2ChannelsAction"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/copy2channels.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/copy2channels.jsp"/>
<forward name="success"
- path="/configuration/ChannelFiles.do"/>
+ path="/configuration/ChannelFiles.do"/>
</action>
- <action path="/configuration/channel/ChannelSystems"
+ <action path="/configuration/channel/ChannelSystems"
scope="request"
input="/WEB-INF/pages/configuration/channel/channelsystems.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemsListSetup"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="acls" value="config_channel_type(normal);"/>
<set-property property="mixins" value="com.redhat.rhn.common.security.acl.ConfigAclHandler" />
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/channelsystems.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/channelsystems.jsp"/>
</action>
<action path="/configuration/channel/ChannelSystemsSubmit"
scope="request"
input="/WEB-INF/pages/configuration/channel/channelfiles.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemsListSubmit"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
<set-property property="acls" value="config_channel_type(normal);"/>
<set-property property="mixins" value="com.redhat.rhn.common.security.acl.ConfigAclHandler" />
<forward name="default"
- path="/configuration/channel/ChannelSystems.do"/>
+ path="/configuration/channel/ChannelSystems.do"/>
<forward name="success" redirect="true"
- path="/configuration/channel/ChannelSystems.do"/>
+ path="/configuration/channel/ChannelSystems.do"/>
</action>
<action path="/configuration/channel/TargetSystems"
@@ -6838,7 +6945,7 @@
<set-property property="acls" value="config_channel_type(normal);user_role(config_admin);"/>
<set-property property="mixins" value="com.redhat.rhn.common.security.acl.ConfigAclHandler" />
<forward name="default"
- path="/WEB-INF/pages/configuration/channel/targetsystems.jsp"/>
+ path="/WEB-INF/pages/configuration/channel/targetsystems.jsp"/>
</action>
<action path="/configuration/channel/TargetSystemsSubmit"
@@ -6847,110 +6954,110 @@
type="com.redhat.rhn.frontend.action.configuration.channel.TargetSystemsListSubmit"
name="submittedForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
- <set-property property="acls" value="config_channel_type(normal);user_role(config_admin);"/>
+ <set-property property="acls" value="config_channel_type(normal);user_role(config_admin);"/>
<set-property property="mixins" value="com.redhat.rhn.common.security.acl.ConfigAclHandler" />
<forward name="default"
- path="/configuration/channel/TargetSystems.do"/>
+ path="/configuration/channel/TargetSystems.do"/>
<forward name="success" redirect="true"
- path="/configuration/channel/TargetSystems.do"/>
+ path="/configuration/channel/TargetSystems.do"/>
</action>
- <!-- router-action - sets up data and forwards to appropriate screens -->
- <action path="/configuration/channel/ChannelDeployTasks"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deploy.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelOverviewTasks"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ <!-- router-action - sets up data and forwards to appropriate screens -->
+ <action path="/configuration/channel/ChannelDeployTasks"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deploy.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelOverviewTasks"
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<forward name="all2all"
- path="/configuration/channel/DeployConfirm.do"/>
+ path="/configuration/channel/DeployConfirm.do"/>
<forward name="sel2all" redirect="true"
- path="/configuration/channel/ChooseFiles.do"/>
+ path="/configuration/channel/ChooseFiles.do"/>
<forward name="all2sel" redirect="true"
- path="/configuration/channel/ChooseSystems.do"/>
+ path="/configuration/channel/ChooseSystems.do"/>
<forward name="sel2sel" redirect="true"
- path="/configuration/channel/ChooseFiles.do"/>
+ path="/configuration/channel/ChooseFiles.do"/>
<forward name="compare" redirect="true"
- path="/configuration/ChannelOverview.do"/>
+ path="/configuration/ChannelOverview.do"/>
<forward name="default" redirect="true"
- path="/configuration/ChannelOverview.do"/>
- </action>
-
- <action path="/configuration/channel/ChooseFiles"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deploy.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFileDeploySetup"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
- <forward name="default"
- path="/WEB-INF/pages/configuration/channel/deploy.jsp"/>
- </action>
-
- <action path="/configuration/channel/ChooseFilesSubmit"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deploy.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFileDeploySubmit"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ path="/configuration/ChannelOverview.do"/>
+ </action>
+
+ <action path="/configuration/channel/ChooseFiles"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deploy.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFileDeploySetup"
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
+ <forward name="default"
+ path="/WEB-INF/pages/configuration/channel/deploy.jsp"/>
+ </action>
+
+ <action path="/configuration/channel/ChooseFilesSubmit"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deploy.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFileDeploySubmit"
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
<forward name="default"
- path="/configuration/channel/ChooseFiles.do"/>
+ path="/configuration/channel/ChooseFiles.do"/>
<forward name="success" redirect="true"
- path="/configuration/channel/ChooseSystems.do"/>
- </action>
-
- <action path="/configuration/channel/ChooseSystems"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deploysystems.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemDeploySetup"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
- <forward name="default"
- path="/WEB-INF/pages/configuration/channel/deploysystems.jsp"/>
- </action>
-
- <action path="/configuration/channel/ChooseSystemsSubmit"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deploysystems.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemDeploySubmit"
- name="submittedForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ path="/configuration/channel/ChooseSystems.do"/>
+ </action>
+
+ <action path="/configuration/channel/ChooseSystems"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deploysystems.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemDeploySetup"
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
+ <forward name="default"
+ path="/WEB-INF/pages/configuration/channel/deploysystems.jsp"/>
+ </action>
+
+ <action path="/configuration/channel/ChooseSystemsSubmit"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deploysystems.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelSystemDeploySubmit"
+ name="submittedForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
<forward name="default"
- path="/configuration/channel/ChooseSystems.do"/>
+ path="/configuration/channel/ChooseSystems.do"/>
<forward name="confirm" redirect="true"
- path="/configuration/channel/DeployConfirm.do"/>
+ path="/configuration/channel/DeployConfirm.do"/>
<forward name="success" redirect="true"
- path="/configuration/channel/Overview.do"/>
+ path="/configuration/channel/Overview.do"/>
<forward name="failure" redirect="true"
- path="/configuration/channel/ChooseSystems.do"/>
- </action>
-
- <action path="/configuration/channel/DeployConfirm"
- scope="request"
- input="/WEB-INF/pages/configuration/channel/deployconfirm.jsp"
- type="com.redhat.rhn.frontend.action.configuration.channel.ChannelDeployConfirmAction"
- name="datePickerForm"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
- <forward name="default"
- path="/WEB-INF/pages/configuration/channel/deployconfirm.jsp"/>
+ path="/configuration/channel/ChooseSystems.do"/>
+ </action>
+
+ <action path="/configuration/channel/DeployConfirm"
+ scope="request"
+ input="/WEB-INF/pages/configuration/channel/deployconfirm.jsp"
+ type="com.redhat.rhn.frontend.action.configuration.channel.ChannelDeployConfirmAction"
+ name="datePickerForm"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping"
+ parameter="dispatch">
+ <forward name="default"
+ path="/WEB-INF/pages/configuration/channel/deployconfirm.jsp"/>
<forward name="success" redirect="true"
- path="/configuration/ChannelOverview.do"/>
+ path="/configuration/ChannelOverview.do"/>
<forward name="failure" redirect="true"
- path="/configuration/channel/DeployConfirm.do"/>
- </action>
+ path="/configuration/channel/DeployConfirm.do"/>
+ </action>
<action path="/configuration/ChannelUploadFiles"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/channel/fileup.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelAddFilesAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -6965,7 +7072,7 @@
<action path="/configuration/ChannelImportFiles"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/channel/fileimport.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFilesImportSetup"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -6977,13 +7084,13 @@
<action path="/configuration/ChannelImportFilesSubmit"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/channel/fileimport.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelFilesImportSubmit"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
- <set-property property="acls" value="config_channel_editable();"/>
+ <set-property property="acls" value="config_channel_editable();"/>
<set-property property="mixins" value="com.redhat.rhn.common.security.acl.ConfigAclHandler" />
<forward name="default" redirect="true"
path="/configuration/ChannelImportFiles.do"/>
@@ -6991,7 +7098,7 @@
<action path="/configuration/ChannelCreateFiles"
scope="request"
- name="configFileForm"
+ name="configFileForm"
input="/WEB-INF/pages/configuration/channel/filecreate.jsp"
type="com.redhat.rhn.frontend.action.configuration.channel.ChannelAddFilesAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
@@ -7004,9 +7111,9 @@
path="/configuration/file/FileDetails.do"/>
</action>
- <!--
- ** CONFIG FILE ACTIONS
- -->
+ <!--
+ ** CONFIG FILE ACTIONS
+ -->
<action path="/configuration/file/ManageRevision"
scope="request"
input="/WEB-INF/pages/configuration/files/manage.jsp"
@@ -7023,7 +7130,7 @@
name="configFileForm"
parameter="dispatch"
type="com.redhat.rhn.frontend.action.configuration.files.ManageRevisionSubmit"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequired" value="true" />
<forward name="default"
path="/configuration/file/ManageRevision.do"/>
@@ -7134,7 +7241,7 @@
scope="request"
input="/WEB-INF/pages/configuration/files/filedetails.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.FileDetailsAction"
- name="configFileForm"
+ name="configFileForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
@@ -7147,7 +7254,7 @@
scope="request"
input="/WEB-INF/pages/configuration/files/filedetails.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.FileDownloadAction"
- name="configFileForm"
+ name="configFileForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
@@ -7160,7 +7267,7 @@
scope="request"
input="/WEB-INF/pages/configuration/files/deleterev.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.DeleteRevisionAction"
- name="configFileForm"
+ name="configFileForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<set-property property="acls" value="config_channel_editable();"/>
@@ -7178,7 +7285,7 @@
<action path="/configuration/file/DeleteFile"
scope="request"
type="com.redhat.rhn.frontend.action.configuration.files.DeleteFileAction"
- name="configFileForm"
+ name="configFileForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<set-property property="acls" value="config_channel_editable();"/>
@@ -7191,7 +7298,7 @@
path="/configuration/file/FileDetails.do"/>
</action>
- <action path="/configuration/file/CompareDeployed"
+ <action path="/configuration/file/CompareDeployed"
scope="request"
input="/WEB-INF/pages/configuration/files/comparedeployed.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.CompareDeployedAction"
@@ -7232,39 +7339,39 @@
path="/configuration/file/Diff.do"/>
</action>
- <action path="/configuration/file/RevisionDeploy"
+ <action path="/configuration/file/RevisionDeploy"
scope="request"
input="/WEB-INF/pages/configuration/files/deploy.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.LocalRevisionDeployAction"
- name="datePickerForm"
+ name="datePickerForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/configuration/files/deploy.jsp"/>
<forward name="global" redirect="true"
path="/configuration/file/GlobalRevisionDeploy.do"/>
- <forward name="success" redirect="true"
- path="/configuration/file/FileDetails.do" />
+ <forward name="success" redirect="true"
+ path="/configuration/file/FileDetails.do" />
</action>
- <action path="/configuration/file/GlobalRevisionDeploy"
+ <action path="/configuration/file/GlobalRevisionDeploy"
scope="request"
input="/WEB-INF/pages/configuration/files/deploy.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.GlobalRevisionDeploySetup"
- name="submittedForm"
+ name="submittedForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/configuration/files/deploy.jsp"/>
</action>
- <action path="/configuration/file/GlobalRevisionDeploySubmit"
+ <action path="/configuration/file/GlobalRevisionDeploySubmit"
scope="request"
input="/WEB-INF/pages/configuration/files/deploy.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.GlobalRevisionDeploySubmit"
- name="submittedForm"
+ name="submittedForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ parameter="dispatch">
<set-property property="postRequired" value="true" />
<forward name="default"
path="/configuration/file/GlobalRevisionDeploy.do"/>
@@ -7272,23 +7379,23 @@
path="/configuration/file/GlobalRevisionDeployConfirm.do"/>
</action>
- <action path="/configuration/file/GlobalRevisionDeployConfirm"
+ <action path="/configuration/file/GlobalRevisionDeployConfirm"
scope="request"
input="/WEB-INF/pages/configuration/files/deployconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.GlobalRevisionDeployConfirmSetup"
- name="datePickerForm"
+ name="datePickerForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<forward name="default"
path="/WEB-INF/pages/configuration/files/deployconfirm.jsp"/>
</action>
- <action path="/configuration/file/GlobalRevisionDeployConfirmSubmit"
+ <action path="/configuration/file/GlobalRevisionDeployConfirmSubmit"
scope="request"
input="/WEB-INF/pages/configuration/files/deployconfirm.jsp"
type="com.redhat.rhn.frontend.action.configuration.files.GlobalRevisionDeployConfirmSubmit"
- name="datePickerForm"
+ name="datePickerForm"
className="com.redhat.rhn.frontend.struts.RhnActionMapping"
- parameter="dispatch">
+ parameter="dispatch">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default"
path="/WEB-INF/pages/configuration/files/deployconfirm.jsp"/>
@@ -7297,8 +7404,8 @@
<forward name="failure" redirect="true"
path="/WEB-INF/pages/configuration/files/deployconfirm.jsp"/>
</action>
- <!-- ===== END CONFIGURATION ===== -->
-
+ <!-- ===== END CONFIGURATION ===== -->
+
<action path="/systems/entitlements/GuestLimitedHosts"
scope="request"
type="com.redhat.rhn.frontend.action.systems.entitlements.VirtualizationEntitlementsAction"
@@ -7571,23 +7678,23 @@
<forward name="complete" path="/channels/manage/ChannelPackages.do" redirect="true" />
</action>
- <action path="/channels/ChannelSubscribers"
- type="com.redhat.rhn.frontend.action.channel.ChannelSubscribedAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <action path="/channels/ChannelSubscribers"
+ type="com.redhat.rhn.frontend.action.channel.ChannelSubscribedAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default" path="/WEB-INF/pages/channel/subscribedsystems.jsp" />
</action>
- <action path="/channels/TargetSystems"
- type="com.redhat.rhn.frontend.action.channel.TargetSystemsAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
- <forward name="confirm" path="/channels/ConfirmTargetSystems.do" redirect="true"/>
+ <action path="/channels/TargetSystems"
+ type="com.redhat.rhn.frontend.action.channel.TargetSystemsAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <forward name="confirm" path="/channels/ConfirmTargetSystems.do" redirect="true"/>
<forward name="default" path="/WEB-INF/pages/channel/targetsystems.jsp" />
</action>
- <action path="/channels/ConfirmTargetSystems"
- type="com.redhat.rhn.frontend.action.channel.TargetSystemsConfirmAction"
- className="com.redhat.rhn.frontend.struts.RhnActionMapping">
+ <action path="/channels/ConfirmTargetSystems"
+ type="com.redhat.rhn.frontend.action.channel.TargetSystemsConfirmAction"
+ className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<set-property property="postRequiredIfSubmitted" value="true" />
<forward name="default" path="/WEB-INF/pages/channel/confirmtargetsystems.jsp" />
<forward name="success" path="/channels/TargetSystems.do" redirect="true" />
@@ -7658,7 +7765,7 @@
type="com.redhat.rhn.frontend.action.rhnpackage.PackageDetailsAction"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
<forward name="default" path="/WEB-INF/pages/rhnpackage/packagedetail.jsp" />
- <forward name="package" path="/software/packages/Details.do" redirect="true"/>
+ <forward name="package" path="/software/packages/Details.do" redirect="true"/>
</action>
<action path="/software/packages/ChangeLog"
@@ -7761,7 +7868,7 @@
scope="request"
type="com.redhat.rhn.frontend.action.common.DownloadFile"
className="com.redhat.rhn.frontend.struts.RhnActionMapping">
- <forward name="error"
+ <forward name="error"
path="/WEB-INF/pages/common/errors/baddownloadaction.jsp"/>
</action>
@@ -7772,12 +7879,12 @@
<action path="/Load"
forward="/WEB-INF/pages/common/loading/loading.jsp" />
- <!-- Used by CSVTag, data must be stored in session context -->
- <action path="/CSVDownloadAction"
- type="com.redhat.rhn.frontend.action.CSVDownloadAction">
- <forward name="error"
+ <!-- Used by CSVTag, data must be stored in session context -->
+ <action path="/CSVDownloadAction"
+ type="com.redhat.rhn.frontend.action.CSVDownloadAction">
+ <forward name="error"
path="/WEB-INF/pages/common/errors/badcsvaction.jsp"/>
- </action>
+ </action>
<action path="/help/Search"
scope="request"
10 years, 9 months
spacewalk/spacewalk-setup-postgresql
by Milan Zazrivec
spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
New commits:
commit 0584b92073a1262dbc4a3eb34e56fd4ee3d6785c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Tue Jun 25 13:34:15 2013 +0200
spacewalk-setup-postgresql: state the requirement for address/netmask format explicitly
diff --git a/spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql b/spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql
index 33f5ff2..5adee44 100755
--- a/spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql
+++ b/spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql
@@ -15,6 +15,7 @@ help() {
echo " --address <local-addresses> Comma-separated list of local addresses to listen on"
echo " Use '*' for all addresses"
echo " --remote <remote-addresses> Comma-separated list of remote addresses to allow connections from"
+ echo " Use address/netmask format"
echo ""
echo "Options for the 'remove' command:"
echo " --db <database-name> Name of the database to remove"
@@ -51,7 +52,7 @@ create() {
if $STANDALONE; then
[ -z "$ADDRESS" ] && ask true "Local addresses to listen on (comma-separated, RETURN for all): " ADDRESS
[ -z "$ADDRESS" ] && ADDRESS="*"
- [ -z "$REMOTE" ] && ask true "Remote addresses to allow connection from (CIDR format, comma-separated): " REMOTE
+ [ -z "$REMOTE" ] && ask true "Remote addresses to allow connection from (address/netmask format, comma-separated): " REMOTE
fi
postgresql_service enable
10 years, 9 months
Changes to 'refs/tags/spacewalk-java-1.10.104-1'
by Tomáš Kašpárek
Tag 'spacewalk-java-1.10.104-1' created by Tomas Kasparek <tkasparek(a)redhat.com> at 2013-06-25 11:26 +0000
Tagging package [spacewalk-java] version [1.10.104-1] in directory [java/].
Changes since spacewalk-proxy-1.10.7-1:
Milan Zazrivec (2):
spacewalk-setup-postgresql: --help option
support numerals only for db-name, db-user and db-password
Tomas Kasparek (3):
973310 - adding last checkin field to Inactive systems
use real product name in strings instead of RHN
Automatic commit of package [spacewalk-java] release [1.10.104-1].
Tomas Lestach (1):
695638 - rewrite C style to java
---
backend/server/rhnSQL/driver_postgresql.py | 8
java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java | 11 -
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml | 2
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml | 2
java/code/webapp/WEB-INF/pages/common/fragments/systems/system_listdisplay.jspf | 9
java/code/webapp/WEB-INF/pages/systems/inactivelist.jsp | 2
java/spacewalk-java.spec | 11 -
rel-eng/packages/spacewalk-java | 2
spacewalk/spacewalk-setup-postgresql/bin/spacewalk-setup-postgresql | 104 +++++-----
23 files changed, 102 insertions(+), 77 deletions(-)
---
10 years, 9 months
java/spacewalk-java.spec rel-eng/packages
by Tomáš Kašpárek
java/spacewalk-java.spec | 11 ++++++++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 11 insertions(+), 2 deletions(-)
New commits:
commit 010e0b1249844e62250075bb0c2526105f4bb10d
Author: Tomas Kasparek <tkasparek(a)redhat.com>
Date: Tue Jun 25 13:26:21 2013 +0200
Automatic commit of package [spacewalk-java] release [1.10.104-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 773e878..cfe9e36 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -28,7 +28,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.10.103
+Version: 1.10.104
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -751,6 +751,15 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Tue Jun 25 2013 Tomas Kasparek <tkasparek(a)redhat.com> 1.10.104-1
+- use real product name in strings instead of RHN
+- 695638 - rewrite C style to java
+- 973310 - adding last checkin field to Inactive systems
+- minor branding cleanup
+- 977301 - removing incorrect tag
+- 687903 - fix of api doc
+- 976371 - don't offer channels which system can't subscribe to
+
* Mon Jun 24 2013 Jan Dobes 1.10.103-1
- correcting ProfileHandlerTest to changed API
- 976722 - kickstart script name is required
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 499fcf3..bd164c1 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.10.103-1 java/
+1.10.104-1 java/
10 years, 9 months
java/code
by Tomáš Kašpárek
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml | 2 +-
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml | 2 +-
16 files changed, 16 insertions(+), 16 deletions(-)
New commits:
commit cf3cbec4bd334b13e39d11426ec8d073c83ca2af
Author: Tomas Kasparek <tkasparek(a)redhat.com>
Date: Tue Jun 25 13:23:25 2013 +0200
use real product name in strings instead of RHN
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml
index 59d849e..f8128a2 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_bn_IN.xml
@@ -4959,7 +4959,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>সিস্টেম এনটাইটেল করা হয়নি</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml
index 58c3ed2..2e10f68 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_de.xml
@@ -6389,7 +6389,7 @@ für diese Berechtigung, mit Ausnahme des Verbrauchs der Standardorganisation.</
<target>System nicht berechtigt</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index a716f45..53e805d 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -4662,7 +4662,7 @@ value for this entitlement, excluding the default organization's consumption.</s
</context-group>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml
index 9418f83..6adbabd 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_es.xml
@@ -6386,7 +6386,7 @@ para este derecho, excluyendo el consumo de la organización predeterminada.</ta
<target>Sistema sin derechos</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml
index eb83a8f..d9b84f8 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_fr.xml
@@ -6388,7 +6388,7 @@ pour ce droit d'accès, moins la consommation par défaut de l'organisation.</ta
<target>Système sans droit</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml
index 031adb8..37ad5d8 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_gu.xml
@@ -4959,7 +4959,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>સિસ્ટમની ઉમેદવારી થયેલ નથી</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml
index 07ab826..642c36e 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_hi.xml
@@ -4959,7 +4959,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>सिस्टम एंटाइटेल नहीं</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml
index 25534c2..d4be00a 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_it.xml
@@ -6387,7 +6387,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>Sistema non avente diritto</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml
index f7df971..5a162f1 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ja.xml
@@ -6382,7 +6382,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>システムにエンタイトルメントがありません</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml
index 3fe49fb..2b28f07 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ko.xml
@@ -6386,7 +6386,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>시스템에 인타이틀먼트가 없음</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml
index acef8b0..8f3cc7d 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pa.xml
@@ -4959,7 +4959,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>ਸਿਸਟਮ ਇੰਟਾਈਟਲ ਨਹੀਂ ਹੈ</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml
index bc43204..43e3e5e 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_pt_BR.xml
@@ -6385,7 +6385,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>Sistema sem serviços</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml
index 0ca9933..e08a63a 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ru.xml
@@ -6384,7 +6384,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>Система без полномочий</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml
index 825f007..dc4183d 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_ta.xml
@@ -4959,7 +4959,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>கணினி உரிமப்படுத்தப்படவில்லை</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml
index f8774d2..9e8c621 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_CN.xml
@@ -6387,7 +6387,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>系统没有权利</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml
index 2775889..7499f2f 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_zh_TW.xml
@@ -6384,7 +6384,7 @@ value for this entitlement, excluding the default organization's consumption.</s
<target>系統並未賦予權利</target>
</trans-unit>
<trans-unit id="systemlist.jsp.notcheckingin">
- <source>System not checking in with R H N</source>
+ <source>System not checking in with @@PRODUCT_NAME@@</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/systems/SystemList</context>
<context context-type="sourcefile">/systems/SystemEntitlements</context>
10 years, 9 months
java/code
by Tomas Lestach
java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java | 11 ++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
New commits:
commit 557a08eea27445e93aa206a985f84ed3aeda8b97
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jun 25 10:09:26 2013 +0200
695638 - rewrite C style to java
+ do not skip the following channel right after a proxy channel
diff --git a/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java b/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java
index 03fadcd..3087dac 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/kickstart/KickstartSoftwareEditAction.java
@@ -36,6 +36,7 @@ import org.cobbler.Distro;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -179,10 +180,12 @@ public class KickstartSoftwareEditAction extends BaseKickstartEditAction {
if (childchannels == null || childchannels.size() == 0) {
ctx.getRequest().setAttribute("nochildchannels", "true");
}
- // Remove the Proxy channels from the child channel list
- for (int i = 0; i < childchannels.size(); i++) {
- if (childchannels.get(i).isProxy()) {
- childchannels.remove(i);
+ else {
+ // Remove the Proxy channels from the child channel list
+ for (Iterator<Channel> iter = childchannels.iterator(); iter.hasNext();) {
+ if (iter.next().isProxy()) {
+ iter.remove();
+ }
}
}
log.debug("AVAIL_CHILD_CHANNELS: " + childchannels);
10 years, 9 months