summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2014-10-06 12:10:48 +0200
committerAndrew Branson <andrew.branson@cern.ch>2014-10-06 12:10:48 +0200
commitb787eb68f0dd8b23fe13c83a7ffd7d422b2ed9c3 (patch)
tree596f03ab464457e164057637267e25d929981db6
parent79e78766566c363d9450cc6d348bf1de66e73e66 (diff)
Last Collection predef step - to create a numbered snapshot of the
current state of the collection. Any further modification should be done by Admin using AddC2KObject
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateNewCollectionVersion.java102
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java1
2 files changed, 103 insertions, 0 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateNewCollectionVersion.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateNewCollectionVersion.java
new file mode 100644
index 0000000..8e68ae3
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateNewCollectionVersion.java
@@ -0,0 +1,102 @@
+/**
+ * This file is part of the CRISTAL-iSE kernel.
+ * Copyright (c) 2001-2014 The CRISTAL Consortium. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * http://www.fsf.org/licensing/licenses/lgpl.html
+ */
+package com.c2kernel.lifecycle.instance.predefined;
+
+
+import java.util.Arrays;
+
+import com.c2kernel.collection.Collection;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.common.PersistencyException;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.ItemPath;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+/**************************************************************************
+ *
+ * @author $Author: abranson $ $Date: 2004/10/21 08:02:19 $
+ * @version $Revision: 1.8 $
+ **************************************************************************/
+public class CreateNewCollectionVersion extends PredefinedStep
+{
+ /**************************************************************************
+ * Constructor for Castor
+ **************************************************************************/
+ public CreateNewCollectionVersion()
+ {
+ super();
+ }
+
+
+ /**
+ * Generates a new snapshot of a collection from its current state. The
+ * new version is given the next available number, starting at 0.
+ *
+ * Params:
+ * 0 - Collection name
+ * @throws InvalidDataException
+ * @throws PersistencyException
+ *
+ * @throws ObjectNotFoundException when there is no collection present with
+ * that name
+ */
+ @Override
+ protected String runActivityLogic(AgentPath agent, ItemPath item,
+ int transitionID, String requestData) throws InvalidDataException, PersistencyException, ObjectNotFoundException
+ {
+ String collName;
+
+ // extract parameters
+ String[] params = getDataList(requestData);
+ if (Logger.doLog(3)) Logger.msg(3, "CreateNewCollectionVersion: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params));
+ if (params.length != 1)
+ throw new InvalidDataException("CreateNewCollectionVersion: Invalid parameters "+Arrays.toString(params));
+
+ collName = params[0];
+ Collection<?> coll = (Collection<?>)Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName+"/last", null);
+
+ // find last numbered version
+ int lastVer = -1;
+ String[] versions = Gateway.getStorage().getClusterContents(item, ClusterStorage.COLLECTION+"/"+collName);
+ for (String thisVerStr : versions) {
+ try {
+ int thisVer = Integer.parseInt(thisVerStr);
+ if (thisVer > lastVer) lastVer = thisVer;
+ } catch (NumberFormatException ex) { } // ignore non-integer versions
+ }
+
+ // Remove it from the cache before we change it
+ Gateway.getStorage().clearCache(item, ClusterStorage.COLLECTION+"/"+collName+"/last");
+ // Set the version
+ coll.setVersion(lastVer+1);
+
+ // store it
+ try {
+ Gateway.getStorage().put(item, coll, null);
+ } catch (PersistencyException e) {
+ throw new PersistencyException("CreateNewCollectionVersion: Error saving new collection '"+collName+"': "+e.getMessage());
+ }
+ return requestData;
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
index abf625c..e1f9ffc 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
@@ -42,6 +42,7 @@ public abstract class PredefinedStepContainer extends CompositeActivity
predInit("WriteProperty", "Writes a property to the Item", new WriteProperty());
predInit("WriteViewpoint", "Writes a viewpoint to the Item", new WriteViewpoint());
predInit("AddNewCollectionDescription", "Creates a new collection description in this Item", new AddNewCollectionDescription());
+ predInit("CreateNewCollectionVersion", "Creates a new numbered collection version in this Item from the current one.", new CreateNewCollectionVersion());
predInit("AddNewSlot", "Creates a new slot in the given aggregation, that holds instances of the item description of the given key", new AddNewSlot());
predInit("AssignItemToSlot", "Assigns the referenced entity to a pre-existing slot in an aggregation", new AssignItemToSlot());
predInit("ClearSlot", "Clears an aggregation member slot, given a slot no or entity key", new ClearSlot());