java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
| 12 +
java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
| 43 ++++++
java/code/src/com/redhat/rhn/domain/server/ServerSnapshot.java
| 15 ++
java/code/src/com/redhat/rhn/domain/server/SnapshotTag.hbm.xml
| 5
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
| 8 +
java/code/src/com/redhat/rhn/frontend/xmlrpc/NoSuchSnapshotTagException.java
| 40 ++++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/SnapshotTagAlreadyExistsException.java
| 40 ++++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
| 62 +++++++++-
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
| 22 +++
9 files changed, 246 insertions(+), 1 deletion(-)
New commits:
commit bf6eba9de2555c76d09a7620453ee25041917a93
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Sep 21 15:13:26 2011 +0200
680489 - introduce tag system tag related API calls
- system.tagLatestSnapshot
- system.deleteTagFromSnapshot
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index 33bec6a..94cd23f 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -1383,6 +1383,12 @@ SELECT S.id,
</query>
</callable-mode>
+<callable-mode name="remove_tag_from_snapshot">
+ <query params="server_id, tag_id">
+ { call rhn_server.tag_delete(:server_id, :tag_id) }
+ </query>
+</callable-mode>
+
<callable-mode name="can_entitle_server">
<query params="sid, entitlement">
{:retval = call rhn_entitlements.can_entitle_server(:sid, :entitlement)}
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
index d8aa095..bcf38a6 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
@@ -828,4 +828,32 @@ public class ServerFactory extends HibernateFactory {
inParams.put("tag_name", tagName);
m.execute(inParams, new HashMap());
}
+
+ /**
+ * Removes tag from system snapshot
+ * @param serverId server id
+ * @param tag snapshot tag
+ */
+ public static void removeTagFromSnapshot(Long serverId, SnapshotTag tag) {
+ CallableMode m = ModeFactory.getCallableMode("System_queries",
+ "remove_tag_from_snapshot");
+ Map inParams = new HashMap();
+ inParams.put("server_id", serverId);
+ inParams.put("tag_id", tag.getId());
+ m.execute(inParams, new HashMap());
+ }
+
+ /**
+ * Looks up snapshot tag by tag name
+ * @param tagName name of the tag
+ * @return snapshot tag
+ */
+ public static SnapshotTag lookupSnapshotTagbyName(String tagName) {
+ SnapshotTag retval = (SnapshotTag) HibernateFactory
+ .getSession().getNamedQuery("SnapshotTag.lookupByTagName")
+ .setString("tag_name", tagName)
+ // Retrieve from cache if there
+ .setCacheable(true).uniqueResult();
+ return retval;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/SnapshotTag.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/SnapshotTag.hbm.xml
index e189c32..5e111c5 100644
--- a/java/code/src/com/redhat/rhn/domain/server/SnapshotTag.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/SnapshotTag.hbm.xml
@@ -22,4 +22,9 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
column="name_id" cascade="all"/>
</class>
+ <query name="SnapshotTag.lookupByTagName">
+ <![CDATA[from com.redhat.rhn.domain.server.SnapshotTag as st
+ where st.name.name = :tag_name]]>
+ </query>
+
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 0e35d01..bf7c206 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
@@ -8109,6 +8109,10 @@ Follow this url to see the full list of inactive systems:
<source>Snapshot tag already exists: {0}</source>
</trans-unit>
+ <trans-unit id="api.provisioning.snapshot.nosuchtag">
+ <source>No such server snapshot tag: {0}</source>
+ </trans-unit>
+
<trans-unit id="api.package.provider.invalidKeyType">
<source>The package key type specified ({0}) is invalid.</source>
</trans-unit>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/NoSuchSnapshotTagException.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/NoSuchSnapshotTagException.java
new file mode 100644
index 0000000..2916fe2
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/NoSuchSnapshotTagException.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 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;
+
+import com.redhat.rhn.FaultException;
+import com.redhat.rhn.common.localization.LocalizationService;
+
+
+/**
+ * NoSuchSnapshotTagException
+ * @version $Rev$
+ */
+public class NoSuchSnapshotTagException extends FaultException {
+
+ /**
+ * Comment for <code>serialVersionUID</code>
+ */
+ private static final long serialVersionUID = 1631706001739029048L;
+
+ /**
+ * Constructor
+ * @param tagName name of the tag
+ */
+ public NoSuchSnapshotTagException(String tagName) {
+ super(1212, "NoSuchSnapshotTag", LocalizationService.getInstance().
+ getMessage("api.provisioning.snapshot.nosuchtag", new Object []
{tagName}));
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index 9239b56..800d5fc 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -66,6 +66,8 @@ import com.redhat.rhn.domain.server.Note;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.server.ServerGroupFactory;
+import com.redhat.rhn.domain.server.ServerSnapshot;
+import com.redhat.rhn.domain.server.SnapshotTag;
import com.redhat.rhn.domain.server.VirtualInstance;
import com.redhat.rhn.domain.server.VirtualInstanceFactory;
import com.redhat.rhn.domain.token.ActivationKey;
@@ -90,6 +92,7 @@ import com.redhat.rhn.frontend.xmlrpc.MethodInvalidParamException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchActionException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchCobblerSystemRecordException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchPackageException;
+import com.redhat.rhn.frontend.xmlrpc.NoSuchSnapshotTagException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchSystemException;
import com.redhat.rhn.frontend.xmlrpc.NotEnoughEntitlementsException;
import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException;
@@ -97,6 +100,7 @@ import com.redhat.rhn.frontend.xmlrpc.ProfileNameTooLongException;
import com.redhat.rhn.frontend.xmlrpc.ProfileNameTooShortException;
import com.redhat.rhn.frontend.xmlrpc.ProfileNoBaseChannelException;
import com.redhat.rhn.frontend.xmlrpc.RhnXmlRpcServer;
+import com.redhat.rhn.frontend.xmlrpc.SnapshotTagAlreadyExistsException;
import com.redhat.rhn.frontend.xmlrpc.SystemIdInstantiationException;
import com.redhat.rhn.frontend.xmlrpc.SystemsNotDeletedException;
import com.redhat.rhn.frontend.xmlrpc.UndefinedCustomFieldsException;
@@ -4814,7 +4818,7 @@ public class SystemHandler extends BaseHandler {
*
* @xmlrpc.doc Get the UUID from the given system ID.
* @xmlrpc.param #param("string", "sessionKey")
- * @xmlrpc.param #param("string", "serverId")
+ * @xmlrpc.param #param("int", "serverId")
* @xmlrpc.returntype string
*/
public String getUuid(String sessionKey, Integer serverId) {
@@ -4828,4 +4832,60 @@ public class SystemHandler extends BaseHandler {
return "";
}
}
+
+ /**
+ * Tags latest system snapshot
+ * @param sessionKey the session key
+ * @param serverId server id
+ * @param tagName tag
+ * @return 1 on success, exception thrown otherwise.
+ *
+ * @xmlrpc.doc Tags latest system snapshot
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "serverId")
+ * @xmlrpc.param #param("string", "tagName")
+ * @xmlrpc.return int - #return_int_success()
+ */
+ public int tagLatestSnapshot(String sessionKey, Integer serverId, String tagName) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ Server server = lookupServer(loggedInUser, serverId);
+ if (!(server.hasEntitlement(EntitlementManager.PROVISIONING))) {
+ throw new FaultException(-2, "provisionError",
+ "System does not have provisioning entitlement: " +
server.getId());
+ }
+ List<ServerSnapshot> snps =
ServerFactory.listSnapshots(loggedInUser.getOrg(),
+ server, null, null);
+ if (snps.isEmpty()) {
+ SystemManager.snapshotServer(server, "Initial snapshot");
+ snps = ServerFactory.listSnapshots(loggedInUser.getOrg(), server, null,
null);
+ }
+ if (!snps.get(0).addTag(tagName)) {
+ throw new SnapshotTagAlreadyExistsException(tagName);
+ }
+ return 1;
+ }
+
+ /**
+ * Deletes tag from system snapshot
+ * @param sessionKey the session key
+ * @param serverId server id
+ * @param tagName tag
+ * @return 1 on success, exception thrown otherwise.
+ *
+ * @xmlrpc.doc Deletes tag from system snapshot
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "serverId")
+ * @xmlrpc.param #param("string", "tagName")
+ * @xmlrpc.return int - #return_int_success()
+ */
+ public int deleteTagFromSnapshot(String sessionKey, Integer serverId, String tagName)
{
+ User loggedInUser = getLoggedInUser(sessionKey);
+ Server server = lookupServer(loggedInUser, serverId);
+ SnapshotTag tag = ServerFactory.lookupSnapshotTagbyName(tagName);
+ if (tag == null) {
+ throw new NoSuchSnapshotTagException(tagName);
+ }
+ ServerFactory.removeTagFromSnapshot(server.getId(), tag);
+ return 1;
+ }
}
commit 6d6f9c464a2b5bc60b5b9954d535440ca35f253c
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Sep 19 14:47:58 2011 +0200
680489 - intorduce system.provisioning.snapshot.addTagToSnapshot API call
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
index 0b7bf98..33bec6a 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml
@@ -1377,6 +1377,12 @@ SELECT S.id,
</query>
</callable-mode>
+<callable-mode name="add_tag_to_snapshot">
+ <query params="snapshot_id, org_id, tag_name">
+ { call rhn_server.tag_snapshot(:snapshot_id, :org_id, :tag_name) }
+ </query>
+</callable-mode>
+
<callable-mode name="can_entitle_server">
<query params="sid, entitlement">
{:retval = call rhn_entitlements.can_entitle_server(:sid, :entitlement)}
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
index ac301e3..d8aa095 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java
@@ -813,4 +813,19 @@ public class ServerFactory extends HibernateFactory {
new HashMap(), systemIds, "sids");
}
+ /**
+ * Adds tag to the snapshot
+ * @param snpId snapshot id
+ * @param orgId org id
+ * @param tagName name of the tag
+ */
+ public static void addTagToSnapshot(Long snpId, Long orgId, String tagName) {
+ CallableMode m = ModeFactory.getCallableMode("System_queries",
+ "add_tag_to_snapshot");
+ Map inParams = new HashMap();
+ inParams.put("snapshot_id", snpId);
+ inParams.put("org_id", orgId);
+ inParams.put("tag_name", tagName);
+ m.execute(inParams, new HashMap());
+ }
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerSnapshot.java
b/java/code/src/com/redhat/rhn/domain/server/ServerSnapshot.java
index 0573d39..a5f20e0 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerSnapshot.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerSnapshot.java
@@ -209,6 +209,21 @@ public class ServerSnapshot extends BaseDomainHelper {
}
/**
+ * adds tag to the snapshot
+ * @param tagName name of the tag
+ * @return true if tag was added to snapshot
+ */
+ public boolean addTag(String tagName) {
+ for (SnapshotTag tag : getTags()) {
+ if (tagName.equals(tag.getName().getName())) {
+ return false;
+ }
+ }
+ ServerFactory.addTagToSnapshot(getId(), getOrg().getId(), tagName);
+ return true;
+ }
+
+ /**
*
* {@inheritDoc}
*/
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 55ea6ec..0e35d01 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
@@ -8105,6 +8105,10 @@ Follow this url to see the full list of inactive systems:
<source>Kickstart label already exists: {0}</source>
</trans-unit>
+ <trans-unit id="api.provisioning.snapshot.tagalreadyinuse">
+ <source>Snapshot tag already exists: {0}</source>
+ </trans-unit>
+
<trans-unit id="api.package.provider.invalidKeyType">
<source>The package key type specified ({0}) is invalid.</source>
</trans-unit>
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/SnapshotTagAlreadyExistsException.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/SnapshotTagAlreadyExistsException.java
new file mode 100644
index 0000000..3e15f4c
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/SnapshotTagAlreadyExistsException.java
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 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;
+
+import com.redhat.rhn.FaultException;
+import com.redhat.rhn.common.localization.LocalizationService;
+
+
+/**
+ * SnapshotTagAlreadyExistsException
+ * @version $Rev$
+ */
+public class SnapshotTagAlreadyExistsException extends FaultException {
+ /**
+ * Comment for <code>serialVersionUID</code>
+ */
+ private static final long serialVersionUID = -4258121382559963776L;
+
+ /**
+ * Contructor
+ * @param tagName name of the snaphot tag
+ */
+ public SnapshotTagAlreadyExistsException(String tagName) {
+ super(1211, "SnapshotTagAlreadyExists",
LocalizationService.getInstance().
+ getMessage("api.provisioning.snapshot.tagalreadyinuse"),
+ new Object[] {tagName});
+ }
+}
diff --git
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
index ad0a8e8..d1052cb 100644
---
a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
+++
b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
@@ -20,6 +20,7 @@ import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.server.ServerSnapshot;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.frontend.xmlrpc.SnapshotTagAlreadyExistsException;
import com.redhat.rhn.frontend.xmlrpc.BaseHandler;
import com.redhat.rhn.frontend.xmlrpc.InvalidArgsException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchSnapshotException;
@@ -265,6 +266,27 @@ public class SnapshotHandler extends BaseHandler {
}
/**
+ * Adds tag to snapshot
+ * @param sessionKey session key
+ * @param snapId shapshot id
+ * @param tagName name iof the snapshot tag
+ * @return 1 on success
+
+ * @xmlrpc.param sessionKey #session_key()
+ * @xmlrpc.param snapId #param_desc("int", "snapshotId", "Id
of the snapshot")
+ * @xmlrpc.param tagName #param_desc("string", "tag", "Name
of the snapshot tag")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int addTagToSnapshot(String sessionKey, Integer snapId, String tagName) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ ServerSnapshot snap = lookupSnapshot(loggedInUser, snapId);
+ if (!snap.addTag(tagName)) {
+ throw new SnapshotTagAlreadyExistsException(tagName);
+ }
+ return 1;
+ }
+
+ /**
* Private helper method to lookup a server from an sid, and throws a FaultException
* if the server cannot be found.
* @param user The user looking up the server