diff options
Diffstat (limited to 'src/main/java/com/c2kernel/entity/ItemImplementation.java')
| -rw-r--r-- | src/main/java/com/c2kernel/entity/ItemImplementation.java | 331 |
1 files changed, 0 insertions, 331 deletions
diff --git a/src/main/java/com/c2kernel/entity/ItemImplementation.java b/src/main/java/com/c2kernel/entity/ItemImplementation.java deleted file mode 100644 index 9098e2a..0000000 --- a/src/main/java/com/c2kernel/entity/ItemImplementation.java +++ /dev/null @@ -1,331 +0,0 @@ -/**
- * 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.entity;
-
-import java.util.UUID;
-
-import com.c2kernel.collection.Collection;
-import com.c2kernel.collection.CollectionArrayList;
-import com.c2kernel.common.AccessRightsException;
-import com.c2kernel.common.InvalidCollectionModification;
-import com.c2kernel.common.InvalidDataException;
-import com.c2kernel.common.InvalidTransitionException;
-import com.c2kernel.common.ObjectAlreadyExistsException;
-import com.c2kernel.common.ObjectNotFoundException;
-import com.c2kernel.common.PersistencyException;
-import com.c2kernel.common.SystemKey;
-import com.c2kernel.entity.agent.JobArrayList;
-import com.c2kernel.events.Event;
-import com.c2kernel.events.History;
-import com.c2kernel.lifecycle.instance.CompositeActivity;
-import com.c2kernel.lifecycle.instance.Workflow;
-import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer;
-import com.c2kernel.lifecycle.instance.predefined.item.ItemPredefinedStepContainer;
-import com.c2kernel.lifecycle.instance.stateMachine.Transition;
-import com.c2kernel.lookup.AgentPath;
-import com.c2kernel.lookup.InvalidItemPathException;
-import com.c2kernel.lookup.ItemPath;
-import com.c2kernel.persistency.ClusterStorage;
-import com.c2kernel.persistency.TransactionManager;
-import com.c2kernel.persistency.outcome.Outcome;
-import com.c2kernel.persistency.outcome.Viewpoint;
-import com.c2kernel.process.Gateway;
-import com.c2kernel.property.Property;
-import com.c2kernel.property.PropertyArrayList;
-import com.c2kernel.utils.Logger;
-
-public class ItemImplementation implements ItemOperations {
-
- protected final TransactionManager mStorage;
- protected final ItemPath mItemPath;
-
- protected ItemImplementation(ItemPath key) {
- this.mStorage = Gateway.getStorage();
- this.mItemPath = key;
- }
-
- @Override
- public SystemKey getSystemKey() {
- return mItemPath.getSystemKey();
- }
-
- public UUID getUUID() {
- return mItemPath.getUUID();
- }
-
- @Override
- public void initialise(SystemKey agentId, String propString, String initWfString,
- String initCollsString) throws AccessRightsException,
- InvalidDataException, PersistencyException
- {
- Logger.msg(5, "Item::initialise("+mItemPath+") - agent:"+agentId);
- Object locker = new Object();
-
- AgentPath agentPath;
- try {
- agentPath = new AgentPath(agentId);
- } catch (InvalidItemPathException e) {
- throw new AccessRightsException("Invalid Agent Id:" + agentId);
- }
-
- // must supply properties
- if (propString == null || propString.length() == 0) {
- throw new InvalidDataException("No properties supplied");
- }
-
- // store properties
- try {
- PropertyArrayList props = (PropertyArrayList) Gateway
- .getMarshaller().unmarshall(propString);
- for (Property thisProp : props.list)
- mStorage.put(mItemPath, thisProp, locker);
- } catch (Throwable ex) {
- Logger.msg(8, "TraceableEntity::initialise(" + mItemPath
- + ") - Properties were invalid: " + propString);
- Logger.error(ex);
- mStorage.abort(locker);
- throw new InvalidDataException("Properties were invalid");
- }
-
- // Store an event and the initial properties
- try {
- Outcome initOutcome = new Outcome(0, propString, "ItemInitialization", 0);
- History hist = new History(mItemPath, locker);
- Transition predefDone = new Transition(0, "Done", 0, 0);
- Event newEvent = hist.addEvent(new AgentPath(agentId), "", "Initialize", "", "", initOutcome.getSchemaType(), 0, "PredefinedStep", 0, predefDone, "last");
- initOutcome.setID(newEvent.getID());
- Viewpoint newLastView = new Viewpoint(mItemPath, initOutcome.getSchemaType(), "last", 0, newEvent.getID());
- Gateway.getStorage().put(mItemPath, initOutcome, locker);
- Gateway.getStorage().put(mItemPath, newLastView, locker);
- } catch (Throwable ex) {
- Logger.msg(8, "TraceableEntity::initialise(" + mItemPath
- + ") - Could not store event and outcome.");
- Logger.error(ex);
- mStorage.abort(locker);
- throw new PersistencyException("Error storing event and outcome");
- }
-
- // create wf
- try {
- Workflow lc = null;
- if (initWfString == null || initWfString.length() == 0)
- lc = new Workflow(new CompositeActivity(), getNewPredefStepContainer());
- else
- lc = new Workflow((CompositeActivity) Gateway
- .getMarshaller().unmarshall(initWfString), getNewPredefStepContainer());
- lc.initialise(mItemPath, agentPath);
- mStorage.put(mItemPath, lc, locker);
- } catch (Throwable ex) {
- Logger.msg(8, "TraceableEntity::initialise(" + mItemPath
- + ") - Workflow was invalid: " + initWfString);
- Logger.error(ex);
- mStorage.abort(locker);
- throw new InvalidDataException("Workflow was invalid");
- }
-
- // init collections
- if (initCollsString != null && initCollsString.length() > 0) {
- try {
- CollectionArrayList colls = (CollectionArrayList) Gateway
- .getMarshaller().unmarshall(initCollsString);
- for (Collection<?> thisColl : colls.list) {
- mStorage.put(mItemPath, thisColl, locker);
- }
- } catch (Throwable ex) {
- Logger.msg(8, "TraceableEntity::initialise(" + mItemPath
- + ") - Collections were invalid: "
- + initCollsString);
- Logger.error(ex);
- mStorage.abort(locker);
- throw new InvalidDataException("Collections were invalid");
- }
- }
-
- mStorage.commit(locker);
- Logger.msg(3, "Initialisation of item " + mItemPath
- + " was successful");
- }
-
-
- protected PredefinedStepContainer getNewPredefStepContainer() {
-
- return new ItemPredefinedStepContainer();
- }
-
- @Override
- public String requestAction(SystemKey agentId, String stepPath, int transitionID,
- String requestData) throws AccessRightsException,
- InvalidTransitionException, ObjectNotFoundException,
- InvalidDataException, PersistencyException,
- ObjectAlreadyExistsException, InvalidCollectionModification {
-
- try {
-
- AgentPath agent = new AgentPath(agentId);
- Logger.msg(1, "TraceableEntity::request(" + mItemPath + ") - Transition "
- + transitionID + " on " + stepPath + " by " + agent);
-
-
- Workflow lifeCycle = (Workflow) mStorage.get(mItemPath,
- ClusterStorage.LIFECYCLE + "/workflow", null);
-
- String finalOutcome = lifeCycle.requestAction(agent, stepPath, mItemPath,
- transitionID, requestData);
-
- // store the workflow if we've changed the state of the domain
- // wf
- if (!(stepPath.startsWith("workflow/predefined")))
- mStorage.put(mItemPath, lifeCycle, null);
-
- return finalOutcome;
- // Normal operation exceptions
- } catch (AccessRightsException ex) {
- Logger.msg("Propagating AccessRightsException back to the calling agent");
- throw ex;
- } catch (InvalidTransitionException ex) {
- Logger.msg("Propagating InvalidTransitionException back to the calling agent");
- throw ex;
- } catch (ObjectNotFoundException ex) {
- Logger.msg("Propagating ObjectNotFoundException back to the calling agent");
- throw ex;
- // errors
- } catch (InvalidItemPathException ex) {
- Logger.error(ex);
- throw new AccessRightsException("Invalid Agent Id: " + agentId);
- } catch (InvalidDataException ex) {
- Logger.error(ex);
- Logger.msg("Propagating InvalidDataException back to the calling agent");
- throw ex;
- } catch (ObjectAlreadyExistsException ex) {
- Logger.error(ex);
- Logger.msg("Propagating ObjectAlreadyExistsException back to the calling agent");
- throw ex;
- } catch (InvalidCollectionModification ex) {
- Logger.error(ex);
- Logger.msg("Propagating InvalidCollectionModification back to the calling agent");
- throw ex;
- } catch (Throwable ex) { // non-CORBA exception hasn't been caught!
- Logger.error("Unknown Error: requestAction on " + mItemPath
- + " by " + agentId + " executing " + stepPath);
- Logger.error(ex);
- throw new InvalidDataException(
- "Extraordinary Exception during execution:"
- + ex.getClass().getName() + " - "
- + ex.getMessage());
- }
- }
-
- @Override
- public String queryLifeCycle(SystemKey agentId, boolean filter)
- throws AccessRightsException, ObjectNotFoundException,
- PersistencyException {
- Logger.msg(1, "TraceableEntity::queryLifeCycle(" + mItemPath
- + ") - agent: " + agentId);
- try {
- AgentPath agent;
- try {
- agent = new AgentPath(agentId);
- } catch (InvalidItemPathException e) {
- throw new AccessRightsException("Agent " + agentId
- + " doesn't exist");
- }
- Workflow wf;
- wf = (Workflow) mStorage.get(mItemPath,
- ClusterStorage.LIFECYCLE + "/workflow", null);
- JobArrayList jobBag = new JobArrayList();
- CompositeActivity domainWf = (CompositeActivity) wf
- .search("workflow/domain");
- jobBag.list = filter ?
- domainWf.calculateJobs(agent, mItemPath, true) :
- domainWf.calculateAllJobs(agent, mItemPath, true);
- Logger.msg(1, "TraceableEntity::queryLifeCycle(" + mItemPath
- + ") - Returning " + jobBag.list.size() + " jobs.");
- try {
- return Gateway.getMarshaller().marshall(jobBag);
- } catch (Exception e) {
- Logger.error(e);
- throw new PersistencyException("Error marshalling job bag");
- }
- } catch (Throwable ex) {
- Logger.error("TraceableEntity::queryLifeCycle(" + mItemPath
- + ") - Unknown error");
- Logger.error(ex);
- throw new PersistencyException(
- "Unknown error querying jobs. Please see server log.");
- }
- }
-
- @Override
- public String queryData(String path) throws AccessRightsException,
- ObjectNotFoundException, PersistencyException {
-
- String result = "";
-
- Logger.msg(1, "TraceableEntity::queryData(" + mItemPath + ") - "
- + path);
-
- try { // check for cluster contents query
-
- if (path.endsWith("/all")) {
- int allPos = path.lastIndexOf("all");
- String query = path.substring(0, allPos);
- String[] ids = mStorage.getClusterContents(mItemPath, query);
-
- for (int i = 0; i < ids.length; i++) {
- result += ids[i];
-
- if (i != ids.length - 1)
- result += ",";
- }
- }
- // ****************************************************************
- else { // retrieve the object instead
- C2KLocalObject obj = mStorage.get(mItemPath, path, null);
-
- // marshall it, or in the case of an outcome get the data.
- result = Gateway.getMarshaller().marshall(obj);
- }
- } catch (ObjectNotFoundException ex) {
- throw ex;
- } catch (Throwable ex) {
- Logger.warning("TraceableEntity::queryData(" + mItemPath
- + ") - " + path + " Failed: " + ex.getClass().getName());
- throw new PersistencyException("Server exception: "
- + ex.getClass().getName());
- }
-
- if (Logger.doLog(9))
- Logger.msg(9, "TraceableEntity::queryData(" + mItemPath
- + ") - result:" + result);
-
- return result;
- }
-
- /**
- *
- */
- @Override
- protected void finalize() throws Throwable {
- Logger.msg(7, "Item "+mItemPath+" reaped");
- Gateway.getStorage().clearCache(mItemPath, null);
- super.finalize();
- }
-}
|
