You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by re...@apache.org on 2015/03/23 17:38:22 UTC
[38/51] [partial] incubator-taverna-engine git commit:
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateListDao.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateListDao.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateListDao.java
deleted file mode 100644
index 62ba83f..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateListDao.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import static net.sf.taverna.t2.reference.T2ReferenceType.IdentifiedList;
-
-import java.util.List;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.IdentifiedList;
-import net.sf.taverna.t2.reference.ListDao;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.annotations.DeleteIdentifiedOperation;
-import net.sf.taverna.t2.reference.annotations.GetIdentifiedOperation;
-import net.sf.taverna.t2.reference.annotations.PutIdentifiedOperation;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-
-/**
- * An implementation of ListDao based on Spring's HibernateDaoSupport. To use
- * this in spring inject a property 'sessionFactory' with either a
- * {@link org.springframework.orm.hibernate3.LocalSessionFactoryBean
- * LocalSessionFactoryBean} or the equivalent class from the T2Platform module
- * to add SPI based implementation discovery and mapping. To use outside of
- * Spring ensure you call the setSessionFactory(..) method before using this
- * (but really, use it from Spring, so much easier).
- *
- * @author Tom Oinn
- */
-public class HibernateListDao extends HibernateDaoSupport implements ListDao {
- private static final String GET_LISTS_FOR_RUN = "FROM T2ReferenceListImpl WHERE namespacePart = :workflow_run_id";
-
- /**
- * Fetch a t2reference list by id
- *
- * @param ref
- * the T2Reference to fetch
- * @return a retrieved identified list of T2 references
- * @throws DaoException
- * if the supplied reference is of the wrong type or if
- * something goes wrong fetching the data or connecting to the
- * database
- */
- @Override
- @GetIdentifiedOperation
- public IdentifiedList<T2Reference> get(T2Reference ref) throws DaoException {
- if (ref == null)
- throw new DaoException(
- "Supplied reference is null, can't retrieve.");
- if (!ref.getReferenceType().equals(IdentifiedList))
- throw new DaoException(
- "This dao can only retrieve reference of type T2Reference.IdentifiedList");
- if (!(ref instanceof T2ReferenceImpl))
- throw new DaoException(
- "Reference must be an instance of T2ReferenceImpl");
-
- try {
- return (T2ReferenceListImpl) getHibernateTemplate().get(
- T2ReferenceListImpl.class,
- ((T2ReferenceImpl) ref).getCompactForm());
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- @Override
- @PutIdentifiedOperation
- public void store(IdentifiedList<T2Reference> theList) throws DaoException {
- if (theList.getId() == null)
- throw new DaoException("Supplied list set has a null ID, allocate "
- + "an ID before calling the store method in the dao.");
- if (!theList.getId().getReferenceType().equals(IdentifiedList))
- throw new DaoException("Strangely the list ID doesn't have type "
- + "T2ReferenceType.IdentifiedList, something has probably "
- + "gone badly wrong somewhere earlier!");
- if (!(theList instanceof T2ReferenceListImpl))
- throw new DaoException(
- "Supplied identifier list not an instance of T2ReferenceList");
-
- try {
- getHibernateTemplate().save(theList);
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- @Override
- public boolean delete(IdentifiedList<T2Reference> theList)
- throws DaoException {
- if (theList.getId() == null)
- throw new DaoException("Supplied list set has a null ID, allocate "
- + "an ID before calling the store method in the dao.");
- if (!theList.getId().getReferenceType().equals(IdentifiedList))
- throw new DaoException("Strangely the list ID doesn't have type "
- + "T2ReferenceType.IdentifiedList, something has probably "
- + "gone badly wrong somewhere earlier!");
- if (!(theList instanceof T2ReferenceListImpl))
- throw new DaoException(
- "Supplied identifier list not an instance of T2ReferenceList");
-
- try {
- getHibernateTemplate().delete(theList);
- return true;
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- @DeleteIdentifiedOperation
- public synchronized void deleteIdentifiedListsForWFRun(String workflowRunId)
- throws DaoException {
- try {
- // Select all T2Reference lists for this wf run
- Session session = getSession();
- Query selectQuery = session.createQuery(GET_LISTS_FOR_RUN);
- selectQuery.setString("workflow_run_id", workflowRunId);
- List<IdentifiedList<T2Reference>> identifiedLists = selectQuery
- .list();
- session.close();
- /*
- * need to close before we do delete otherwise hibernate complains
- * that two sessions are accessing collection
- */
- getHibernateTemplate().deleteAll(identifiedLists);
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateReferenceSetDao.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateReferenceSetDao.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateReferenceSetDao.java
deleted file mode 100644
index 06791a6..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/HibernateReferenceSetDao.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import static net.sf.taverna.t2.reference.T2ReferenceType.ReferenceSet;
-
-import java.util.List;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.ReferenceSetDao;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.annotations.DeleteIdentifiedOperation;
-import net.sf.taverna.t2.reference.annotations.GetIdentifiedOperation;
-import net.sf.taverna.t2.reference.annotations.PutIdentifiedOperation;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
-
-/**
- * An implementation of ReferenceSetDao based on Spring's HibernateDaoSupport.
- * To use this in spring inject a property 'sessionFactory' with either a
- * {@link org.springframework.orm.hibernate3.LocalSessionFactoryBean
- * LocalSessionFactoryBean} or the equivalent class from the T2Platform module
- * to add SPI based implementation discovery and mapping. To use outside of
- * Spring ensure you call the setSessionFactory(..) method before using this
- * (but really, use it from Spring, so much easier).
- *
- * @author Tom Oinn
- */
-public class HibernateReferenceSetDao extends HibernateDaoSupport implements
- ReferenceSetDao {
- private static final String GET_REFSETS_FOR_RUN = "FROM ReferenceSetImpl WHERE namespacePart = :workflow_run_id";
-
- /**
- * Store the specified new reference set
- *
- * @param rs
- * a reference set, must not already exist in the database.
- * @throws DaoException
- * if the entry already exists in the database, if the supplied
- * reference set isn't an instance of ReferenceSetImpl or if
- * something else goes wrong connecting to the database
- */
- @Override
- @PutIdentifiedOperation
- public void store(ReferenceSet rs) throws DaoException {
- if (rs.getId() == null)
- throw new DaoException(
- "Supplied reference set has a null ID, allocate "
- + "an ID before calling the store method in the dao.");
- if (!rs.getId().getReferenceType().equals(ReferenceSet))
- throw new DaoException(
- "Strangely the reference set ID doesn't have type "
- + "T2ReferenceType.ReferenceSet, something has probably "
- + "gone badly wrong somewhere earlier!");
- if (!(rs instanceof ReferenceSetImpl))
- throw new DaoException(
- "Supplied reference set not an instance of ReferenceSetImpl");
-
- try {
- getHibernateTemplate().save(rs);
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- /**
- * Update a pre-existing entry in the database
- *
- * @param rs
- * the reference set to update. This must already exist in the
- * database
- * @throws DaoException
- */
- @Override
- @PutIdentifiedOperation
- public void update(ReferenceSet rs) throws DaoException {
- if (rs.getId() == null)
- throw new DaoException(
- "Supplied reference set has a null ID, allocate "
- + "an ID before calling the store method in the dao.");
- if (!rs.getId().getReferenceType().equals(ReferenceSet))
- throw new DaoException(
- "Strangely the reference set ID doesn't have type "
- + "T2ReferenceType.ReferenceSet, something has probably "
- + "gone badly wrong somewhere earlier!");
- if (!(rs instanceof ReferenceSetImpl))
- throw new DaoException(
- "Supplied reference set not an instance of ReferenceSetImpl");
-
- try {
- getHibernateTemplate().update(rs);
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- /**
- * Fetch a reference set by id
- *
- * @param ref
- * the ReferenceSetT2ReferenceImpl to fetch
- * @return a retrieved ReferenceSetImpl
- * @throws DaoException
- * if the supplied reference is of the wrong type or if
- * something goes wrong fetching the data or connecting to the
- * database
- */
- @Override
- @GetIdentifiedOperation
- public ReferenceSetImpl get(T2Reference ref) throws DaoException {
- if (ref == null)
- throw new DaoException(
- "Supplied reference is null, can't retrieve.");
- if (!ref.getReferenceType().equals(ReferenceSet))
- throw new DaoException(
- "This dao can only retrieve reference of type T2Reference.ReferenceSet");
- if (!(ref instanceof T2ReferenceImpl))
- throw new DaoException(
- "Reference must be an instance of T2ReferenceImpl");
-
- try {
- return (ReferenceSetImpl) getHibernateTemplate().get(
- ReferenceSetImpl.class,
- ((T2ReferenceImpl) ref).getCompactForm());
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- @Override
- @DeleteIdentifiedOperation
- public boolean delete(ReferenceSet rs) throws DaoException {
- if (rs.getId() == null)
- throw new DaoException(
- "Supplied reference set has a null ID, allocate "
- + "an ID before calling the store method in the dao.");
- if (!rs.getId().getReferenceType().equals(ReferenceSet))
- throw new DaoException(
- "Strangely the reference set ID doesn't have type "
- + "T2ReferenceType.ReferenceSet, something has probably "
- + "gone badly wrong somewhere earlier!");
- if (!(rs instanceof ReferenceSetImpl))
- throw new DaoException(
- "Supplied reference set not an instance of ReferenceSetImpl");
-
- try {
- getHibernateTemplate().delete(rs);
- return true;
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-
- @Override
- @SuppressWarnings("unchecked")
- @DeleteIdentifiedOperation
- public synchronized void deleteReferenceSetsForWFRun(String workflowRunId)
- throws DaoException {
- try {
- // Select all ReferenceSets for this wf run
- Session session = getSession();
- Query selectQuery = session
- .createQuery(GET_REFSETS_FOR_RUN);
- selectQuery.setString("workflow_run_id", workflowRunId);
- List<ReferenceSet> referenceSets = selectQuery.list();
- session.close();
- /*
- * need to close before we do delete otherwise hibernate complains
- * that two sessions are accessing collection
- */
- getHibernateTemplate().deleteAll(referenceSets);
- } catch (Exception ex) {
- throw new DaoException(ex);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/IdentifiedArrayList.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/IdentifiedArrayList.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/IdentifiedArrayList.java
deleted file mode 100644
index e1bbe5c..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/IdentifiedArrayList.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import net.sf.taverna.t2.reference.IdentifiedList;
-
-/**
- * Implementation of IdentifiedList which delegates to an ArrayList for its
- * storage functionality.
- *
- * @author Tom Oinn
- *
- * @param <T>
- */
-public class IdentifiedArrayList<T> extends AbstractEntityImpl implements
- IdentifiedList<T> {
- protected List<T> listDelegate = null;
-
- // Constructors copied from ArrayList for convenience
- public IdentifiedArrayList() {
- super();
- this.listDelegate = new ArrayList<>();
- }
-
- public IdentifiedArrayList(Collection<T> c) {
- super();
- this.listDelegate = new ArrayList<>(c);
- }
-
- public IdentifiedArrayList(int initialCapacity) {
- super();
- this.listDelegate = new ArrayList<>(initialCapacity);
- }
-
- private void checkUndefinedId() {
- if (this.getId() != null)
- throw new IllegalStateException(
- "Attempt made to modify a list which has already been named");
- }
-
- @Override
- public boolean add(T e) {
- checkUndefinedId();
- return listDelegate.add(e);
- }
-
- @Override
- public void add(int index, T element) {
- checkUndefinedId();
- listDelegate.add(index, element);
- }
-
- @Override
- public boolean addAll(Collection<? extends T> c) {
- checkUndefinedId();
- return listDelegate.addAll(c);
- }
-
- @Override
- public boolean addAll(int index, Collection<? extends T> c) {
- checkUndefinedId();
- return listDelegate.addAll(index, c);
- }
-
- @Override
- public void clear() {
- checkUndefinedId();
- listDelegate.clear();
- }
-
- @Override
- public boolean contains(Object o) {
- return listDelegate.contains(o);
- }
-
- @Override
- public boolean containsAll(Collection<?> c) {
- return listDelegate.containsAll(c);
- }
-
- @Override
- public T get(int index) {
- return listDelegate.get(index);
- }
-
- @Override
- public int indexOf(Object o) {
- return listDelegate.indexOf(o);
- }
-
- @Override
- public boolean isEmpty() {
- return listDelegate.isEmpty();
- }
-
- @Override
- public Iterator<T> iterator() {
- return listDelegate.iterator();
- }
-
- @Override
- public int lastIndexOf(Object o) {
- return listDelegate.lastIndexOf(o);
- }
-
- /**
- * The ListIterator can modify the list contents, so wrap the delegate's
- * list iterator and use as a delegate itself, checking for null ID on
- * operations which set list properties.
- *
- * @param iteratorDelegate
- * ListIterator to wrap.
- * @return wrapped ListIterator which throws IllegalStateException on calls
- * which modify the list if the ID has been set to a non-null value
- */
- private ListIterator<T> getCheckedListIterator(
- final ListIterator<T> iteratorDelegate) {
- return new ListIterator<T>() {
- @Override
- public void add(T e) {
- checkUndefinedId();
- iteratorDelegate.add(e);
- }
-
- @Override
- public boolean hasNext() {
- return iteratorDelegate.hasNext();
- }
-
- @Override
- public boolean hasPrevious() {
- return iteratorDelegate.hasPrevious();
- }
-
- @Override
- public T next() {
- return iteratorDelegate.next();
- }
-
- @Override
- public int nextIndex() {
- return iteratorDelegate.nextIndex();
- }
-
- @Override
- public T previous() {
- return iteratorDelegate.previous();
- }
-
- @Override
- public int previousIndex() {
- return iteratorDelegate.previousIndex();
- }
-
- @Override
- public void remove() {
- checkUndefinedId();
- iteratorDelegate.remove();
- }
-
- @Override
- public void set(T e) {
- checkUndefinedId();
- iteratorDelegate.set(e);
- }
- };
- }
-
- @Override
- public ListIterator<T> listIterator() {
- return getCheckedListIterator(listDelegate.listIterator());
- }
-
- @Override
- public ListIterator<T> listIterator(int index) {
- return getCheckedListIterator(listDelegate.listIterator(index));
- }
-
- @Override
- public boolean remove(Object o) {
- checkUndefinedId();
- return listDelegate.remove(o);
- }
-
- @Override
- public T remove(int index) {
- checkUndefinedId();
- return listDelegate.remove(index);
- }
-
- @Override
- public boolean removeAll(Collection<?> c) {
- checkUndefinedId();
- return listDelegate.removeAll(c);
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
- checkUndefinedId();
- return listDelegate.retainAll(c);
- }
-
- @Override
- public T set(int index, T element) {
- checkUndefinedId();
- return listDelegate.set(index, element);
- }
-
- @Override
- public int size() {
- return listDelegate.size();
- }
-
- @Override
- public List<T> subList(int fromIndex, int toIndex) {
- return listDelegate.subList(fromIndex, toIndex);
- }
-
- @Override
- public Object[] toArray() {
- return listDelegate.toArray();
- }
-
- @Override
- public <U> U[] toArray(U[] a) {
- return listDelegate.toArray(a);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryErrorDocumentDao.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryErrorDocumentDao.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryErrorDocumentDao.java
deleted file mode 100644
index cb431d6..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryErrorDocumentDao.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.ErrorDocument;
-import net.sf.taverna.t2.reference.ErrorDocumentDao;
-import net.sf.taverna.t2.reference.T2Reference;
-
-/**
- * A trivial in-memory implementation of ErrorDocumentDao for either testing or
- * very lightweight embedded systems. Uses a java Map as the backing store.
- *
- * @author Tom Oinn
- */
-public class InMemoryErrorDocumentDao implements ErrorDocumentDao {
- private Map<T2Reference, ErrorDocument> store;
-
- public InMemoryErrorDocumentDao() {
- this.store = new ConcurrentHashMap<>();
- }
-
- @Override
- public synchronized ErrorDocument get(T2Reference reference)
- throws DaoException {
- return store.get(reference);
- }
-
- @Override
- public synchronized void store(ErrorDocument theDoc) throws DaoException {
- store.put(theDoc.getId(), theDoc);
- }
-
- @Override
- public synchronized boolean delete(ErrorDocument theDoc)
- throws DaoException {
- return store.remove(theDoc.getId()) != null;
- }
-
- @Override
- public synchronized void deleteErrorDocumentsForWFRun(String workflowRunId)
- throws DaoException {
- for (T2Reference reference : store.keySet())
- if (reference.getNamespacePart().equals(workflowRunId))
- store.remove(reference);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryListDao.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryListDao.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryListDao.java
deleted file mode 100644
index 112bf80..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryListDao.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.IdentifiedList;
-import net.sf.taverna.t2.reference.ListDao;
-import net.sf.taverna.t2.reference.T2Reference;
-
-/**
- * A trivial in-memory implementation of ListDao for either testing or very
- * lightweight embedded systems. Uses a java Map as the backing store.
- *
- * @author Tom Oinn
- */
-public class InMemoryListDao implements ListDao {
- private Map<T2Reference, IdentifiedList<T2Reference>> store;
-
- public InMemoryListDao() {
- this.store = new ConcurrentHashMap<>();
- }
-
- @Override
- public synchronized IdentifiedList<T2Reference> get(T2Reference reference)
- throws DaoException {
- return store.get(reference);
- }
-
- @Override
- public synchronized void store(IdentifiedList<T2Reference> theList)
- throws DaoException {
- store.put(theList.getId(), theList);
- }
-
- @Override
- public boolean delete(IdentifiedList<T2Reference> theList)
- throws DaoException {
- return (store.remove(theList.getId()) != null);
- }
-
- @Override
- public synchronized void deleteIdentifiedListsForWFRun(String workflowRunId)
- throws DaoException {
- for (T2Reference reference : store.keySet())
- if (reference.getNamespacePart().equals(workflowRunId))
- store.remove(reference);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryReferenceSetDao.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryReferenceSetDao.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryReferenceSetDao.java
deleted file mode 100644
index 6d00337..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/InMemoryReferenceSetDao.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.ReferenceSetDao;
-import net.sf.taverna.t2.reference.T2Reference;
-
-/**
- * A trivial in-memory implementation of ReferenceSetDao for either testing or
- * very lightweight embedded systems. Uses a java Map as the backing store.
- *
- * @author Tom Oinn
- */
-public class InMemoryReferenceSetDao implements ReferenceSetDao {
- private Map<T2Reference, ReferenceSet> store;
-
- public InMemoryReferenceSetDao() {
- this.store = new ConcurrentHashMap<>();
- }
-
- @Override
- public synchronized ReferenceSet get(T2Reference reference)
- throws DaoException {
- return store.get(reference);
- }
-
- @Override
- public synchronized void store(ReferenceSet refSet) throws DaoException {
- store.put(refSet.getId(), refSet);
- }
-
- @Override
- public synchronized void update(ReferenceSet refSet) throws DaoException {
- store.put(refSet.getId(), refSet);
- }
-
- @Override
- public synchronized boolean delete(ReferenceSet refSet) throws DaoException {
- return store.remove(refSet.getId()) != null;
- }
-
- @Override
- public synchronized void deleteReferenceSetsForWFRun(String workflowRunId)
- throws DaoException {
- for (T2Reference reference : store.keySet())
- if (reference.getNamespacePart().equals(workflowRunId))
- store.remove(reference);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ListServiceImpl.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ListServiceImpl.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ListServiceImpl.java
deleted file mode 100644
index 76c219a..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ListServiceImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import static net.sf.taverna.t2.reference.impl.T2ReferenceImpl.getAsImpl;
-
-import java.util.List;
-
-import net.sf.taverna.t2.reference.DaoException;
-import net.sf.taverna.t2.reference.IdentifiedList;
-import net.sf.taverna.t2.reference.ListService;
-import net.sf.taverna.t2.reference.ListServiceException;
-import net.sf.taverna.t2.reference.ReferenceContext;
-import net.sf.taverna.t2.reference.ReferenceServiceException;
-import net.sf.taverna.t2.reference.T2Reference;
-
-/**
- * Implementation of ListService, inject with an appropriate ListDao and
- * T2ReferenceGenerator to enable.
- *
- * @author Tom Oinn
- */
-public class ListServiceImpl extends AbstractListServiceImpl implements
- ListService {
- @Override
- public IdentifiedList<T2Reference> getList(T2Reference id)
- throws ListServiceException {
- checkDao();
- try {
- return listDao.get(id);
- } catch (DaoException de) {
- throw new ListServiceException(de);
- }
- }
-
- @Override
- public IdentifiedList<T2Reference> registerEmptyList(int depth,
- ReferenceContext context) throws ListServiceException {
- if (depth < 1)
- throw new ListServiceException(
- "Can't register empty lists of depth " + depth);
- checkDao();
- checkGenerator();
- T2ReferenceImpl newReference = getAsImpl(t2ReferenceGenerator
- .nextListReference(false, depth, context));
- T2ReferenceListImpl newList = new T2ReferenceListImpl();
- newList.setTypedId(newReference);
- try {
- listDao.store(newList);
- return newList;
- } catch (DaoException de) {
- throw new ListServiceException(de);
- }
- }
-
- @Override
- public IdentifiedList<T2Reference> registerList(List<T2Reference> items,
- ReferenceContext context) throws ListServiceException {
- checkDao();
- checkGenerator();
- if (items.isEmpty())
- throw new ListServiceException(
- "Can't register an empty list with this method,"
- + " use the registerEmptyList instead");
- /*
- * Track whether there are any items in the collection which are or
- * contain error documents.
- */
- boolean containsErrors = false;
- // Track depth, ensure that all items have the same depth, fail if not.
- int depth = items.get(0).getDepth();
- if (depth < 0)
- throw new ListServiceException(
- "Can't register list of depth less than 1, but first item "
- + items.get(0) + " has depth " + depth);
- T2ReferenceListImpl newList = new T2ReferenceListImpl();
- int counter = 0;
- for (T2Reference ref : items) {
- if (ref.getDepth() != depth)
- throw new ListServiceException(
- "Mismatched depths in list registration; reference at index '"
- + counter + "' has depth " + ref.getDepth()
- + " but all preceeding items have depth "
- + depth);
- if (ref.containsErrors())
- // The collection's reference contains errors if any child does
- containsErrors = true;
- newList.add(ref);
- counter++;
- }
- try {
- T2ReferenceImpl newReference = getAsImpl(t2ReferenceGenerator
- .nextListReference(containsErrors, depth + 1, context));
- newList.setTypedId(newReference);
- listDao.store(newList);
- return newList;
- } catch (Throwable t) {
- throw new ListServiceException(t);
- }
- }
-
- @Override
- public boolean delete(T2Reference reference)
- throws ReferenceServiceException {
- checkDao();
- IdentifiedList<T2Reference> list = listDao.get(reference);
- if (list == null)
- return false;
- return listDao.delete(list);
- }
-
- @Override
- public void deleteIdentifiedListsForWorkflowRun(String workflowRunId)
- throws ReferenceServiceException {
- checkDao();
- listDao.deleteIdentifiedListsForWFRun(workflowRunId);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceServiceImpl.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceServiceImpl.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceServiceImpl.java
deleted file mode 100644
index 6dc3df4..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceServiceImpl.java
+++ /dev/null
@@ -1,731 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import static java.lang.Float.MAX_VALUE;
-import static net.sf.taverna.t2.reference.T2ReferenceType.ErrorDocument;
-import static net.sf.taverna.t2.reference.T2ReferenceType.IdentifiedList;
-import static net.sf.taverna.t2.reference.T2ReferenceType.ReferenceSet;
-import static net.sf.taverna.t2.reference.impl.T2ReferenceImpl.getAsImpl;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.taverna.t2.reference.ContextualizedT2Reference;
-import net.sf.taverna.t2.reference.ErrorDocument;
-import net.sf.taverna.t2.reference.ErrorDocumentServiceException;
-import net.sf.taverna.t2.reference.ExternalReferenceSPI;
-import net.sf.taverna.t2.reference.Identified;
-import net.sf.taverna.t2.reference.IdentifiedList;
-import net.sf.taverna.t2.reference.ListServiceException;
-import net.sf.taverna.t2.reference.ReferenceContext;
-import net.sf.taverna.t2.reference.ReferenceService;
-import net.sf.taverna.t2.reference.ReferenceServiceException;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.ReferenceSetServiceException;
-import net.sf.taverna.t2.reference.StreamToValueConverterSPI;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.ValueCarryingExternalReference;
-import net.sf.taverna.t2.reference.ValueToReferenceConversionException;
-import net.sf.taverna.t2.reference.ValueToReferenceConverterSPI;
-
-import org.apache.log4j.Logger;
-
-/**
- * Implementation of ReferenceService, inject with ReferenceSetService,
- * ErrorDocumentService and ListService to enable.
- *
- * @author Tom Oinn
- * @author Alan R Williams
- * @author Stuart Owen
- * @author Stian Soiland-Reyes
- */
-public class ReferenceServiceImpl extends AbstractReferenceServiceImpl
- implements ReferenceService {
- private final Logger log = Logger.getLogger(ReferenceServiceImpl.class);
-
- /**
- * The top level registration method is used to register either as yet
- * unregistered ErrorDocuments and ReferenceSets (if these are passed in and
- * already have an identifier this call does nothing) and arbitrarily nested
- * Lists of the same. In addition any ExternalReferenceSPI instances found
- * will be wrapped in a single item ReferenceSet and registered, and any
- * Throwables will be wrapped in an ErrorDocument and registered. Lists will
- * be converted to IdentifiedList<T2Reference> and registered if all
- * children can be (or were already) appropriately named.
- * <p>
- * This method is only valid on parameters of the following type :
- * <ol>
- * <li>{@link ReferenceSet} - registered if not already registered,
- * otherwise returns existing T2Reference</li>
- * <li>{@link ErrorDocument} - same behaviour as ReferenceSet</li>
- * <li>{@link ExternalReferenceSPI} - wrapped in ReferenceSet, registered
- * and ID returned</li>
- * <li>Throwable - wrapped in ErrorDocument with no message, registered and
- * ID returned</li>
- * <li>List - all children are first registered, if this succeeds the list
- * is itself registered as an IdentifiedList of T2Reference and its
- * reference returned.</li>
- * </ol>
- * The exception to this is if the useConvertorSPI parameter is set to true
- * - in this case any objects which do not match the above allowed list will
- * be run through any available ValueToReferenceConvertorSPI instances in
- * turn until one succeeds or all fail, which may result in the creation of
- * ExternalReferenceSPI instances. As these can be registered such objects
- * will not cause an exception to be thrown.
- *
- * @param o
- * the object to register with the reference system, must comply
- * with and will be interpreted as shown in the type list above.
- * @param targetDepth
- * the depth of the top level object supplied. This is needed
- * when registering empty collections and error documents,
- * whether as top level types or as members of a collection
- * within the top level type. If registering a collection this is
- * the collection depth, so a List of ReferenceSchemeSPI would be
- * depth 1. Failing to specify this correctly will result in
- * serious problems downstream so be careful! We can't catch all
- * potential problems in this method (although some errors will
- * be trapped).
- * @param useConverterSPI
- * whether to attempt to use the ValueToReferenceConvertorSPI
- * registry (if defined and available) to map arbitrary objects
- * to ExternalReferenceSPI instances on the fly. The registry of
- * converters is generally injected into the implementation of
- * this service.
- * @param context
- * ReferenceContext to use if required by component services,
- * this is most likely to be used by the object to reference
- * converters if engaged.
- * <p>
- * If the context is null a new empty reference context is
- * inserted.
- * @return a T2Reference to the registered object
- * @throws ReferenceServiceException
- * if the object type (or, for collections, the recursive type
- * of its contents) is not in the allowed list or if a problem
- * occurs during registration. Also thrown if attempting to use
- * the converter SPI without an attached registry.
- */
- @Override
- public T2Reference register(Object o, int targetDepth,
- boolean useConverterSPI, ReferenceContext context)
- throws ReferenceServiceException {
- checkServices();
- if (context == null)
- context = new EmptyReferenceContext();
- if (useConverterSPI)
- checkConverterRegistry();
- return getNameForObject(o, targetDepth, useConverterSPI, context);
- }
-
- @SuppressWarnings("unchecked")
- private T2Reference getNameForObject(Object o, int currentDepth,
- boolean useConverterSPI, ReferenceContext context)
- throws ReferenceServiceException {
- if (currentDepth < 0)
- throw new ReferenceServiceException("Cannot register at depth "
- + currentDepth + ": " + o);
- /*
- * First check whether this is an Identified, and if so whether it
- * already has an ID. If this is the case then return it, we assume that
- * anything which has an identifier already allocated must have been
- * registered (this is implicit in the contract for the various
- * sub-services
- */
- if (o instanceof Identified) {
- Identified i = (Identified) o;
- if (i.getId() != null)
- return i.getId();
- }
- /*
- * Then check whether the item *is* a T2Reference, in which case we can
- * just return it (useful for when registering lists of existing
- * references)
- */
- if (o instanceof T2Reference)
- return (T2Reference) o;
-
- if (o.getClass().isArray()) {
- Class<?> elementType = o.getClass().getComponentType();
- if (elementType.getCanonicalName().equals("char")) {
- char[] cArray = (char[]) o;
- List<Character> cList = new ArrayList<>();
- for (char c : cArray)
- cList.add(new Character(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("short")) {
- short[] cArray = (short[]) o;
- List<Short> cList = new ArrayList<>();
- for (short c : cArray)
- cList.add(new Short(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("int")) {
- int[] cArray = (int[]) o;
- List<Integer> cList = new ArrayList<>();
- for (int c : cArray)
- cList.add(new Integer(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("long")) {
- long[] cArray = (long[]) o;
- List<Long> cList = new ArrayList<>();
- for (long c : cArray)
- cList.add(new Long(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("float")) {
- float[] cArray = (float[]) o;
- List<Float> cList = new ArrayList<>();
- for (float c : cArray)
- cList.add(new Float(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("double")) {
- double[] cArray = (double[]) o;
- List<Double> cList = new ArrayList<>();
- for (double c : cArray)
- cList.add(new Double(c));
- o = cList;
- } else if (elementType.getCanonicalName().equals("boolean")) {
- boolean[] cArray = (boolean[]) o;
- List<Boolean> cList = new ArrayList<>();
- for (boolean c : cArray)
- cList.add(new Boolean(c));
- o = cList;
- } else if (!elementType.getCanonicalName().equals("byte")) {
- // Covert arrays of objects
- Object[] cArray = (Object[]) o;
- List<Object> cList = new ArrayList<>();
- for (Object c : cArray)
- cList.add(c);
- o = cList;
- }
- }
-
- // If a Collection but not a List
- if ((o instanceof Collection) && !(o instanceof List)) {
- List<Object> cList = new ArrayList<>();
- cList.addAll((Collection<Object>) o);
- o = cList;
- }
- // Next check lists.
- if (o instanceof List) {
- if (currentDepth < 1)
- throw new ReferenceServiceException(
- "Cannot register list at depth " + currentDepth);
- List<?> l = (List<?>) o;
- /*
- * If the list is empty then register a new empty list of the
- * appropriate depth and return it
- */
- if (l.isEmpty())
- try {
- return listService.registerEmptyList(currentDepth, context)
- .getId();
- } catch (ListServiceException lse) {
- throw new ReferenceServiceException(lse);
- }
- /*
- * Otherwise construct a new list of T2Reference and register it,
- * calling the getNameForObject method on all children of the list
- * to construct the list of references
- */
- else {
- List<T2Reference> references = new ArrayList<>();
- for (Object item : l)
- /*
- * Recursively call this method with a depth one lower than
- * the current depth
- */
- references.add(getNameForObject(item, currentDepth - 1,
- useConverterSPI, context));
- try {
- return listService.registerList(references, context)
- .getId();
- } catch (ListServiceException lse) {
- throw new ReferenceServiceException(lse);
- }
- }
- } else {
- /*
- * Neither a list nor an already identified object, first thing is
- * to engage the converters if enabled. Only engage if we don't
- * already have a Throwable or an ExternalReferenceSPI instance
- */
- if (useConverterSPI && (o instanceof Throwable == false)
- && (o instanceof ExternalReferenceSPI == false)) {
- if (currentDepth != 0)
- throw new ReferenceServiceException(
- "Cannot register object " + o + " at depth "
- + currentDepth);
-
- for (ValueToReferenceConverterSPI converter : converters)
- if (converter.canConvert(o, context))
- try {
- o = converter.convert(o, context);
- break;
- } catch (ValueToReferenceConversionException vtrce) {
- /*
- * Fail, but that doesn't matter at the moment as
- * there may be more converters to try.
- *
- * TODO - log this!
- */
- }
- }
- /*
- * If the object is neither a Throwable nor an ExternalReferenceSPI
- * instance at this point we should fail the registration process,
- * this means either that the conversion process wasn't enabled or
- * that it failed to map the object type correctly.
- */
- if (!(o instanceof Throwable)
- && !(o instanceof ExternalReferenceSPI))
- throw new ReferenceServiceException(
- "Failed to register object "
- + o
- + ", found a type '"
- + o.getClass().getCanonicalName()
- + "' which cannot currently be registered with the reference manager");
-
- // Have either a Throwable or an ExternalReferenceSPI
- if (o instanceof Throwable)
- // Wrap in an ErrorDocument and return the ID
- try {
- ErrorDocument doc = errorDocumentService.registerError(
- (Throwable) o, currentDepth, context);
- return doc.getId();
- } catch (ErrorDocumentServiceException edse) {
- throw new ReferenceServiceException(edse);
- }
- if (o instanceof ExternalReferenceSPI) {
- if (currentDepth != 0)
- throw new ReferenceServiceException(
- "Cannot register external references at depth "
- + currentDepth);
- try {
- Set<ExternalReferenceSPI> references = new HashSet<ExternalReferenceSPI>();
- references.add((ExternalReferenceSPI) o);
- ReferenceSet rs = referenceSetService.registerReferenceSet(
- references, context);
- return rs.getId();
- } catch (ReferenceSetServiceException rsse) {
- throw new ReferenceServiceException(rsse);
- }
- }
- }
- throw new ReferenceServiceException(
- "Should never see this, reference registration"
- + " logic has fallen off the end of the"
- + " world, check the code!");
- }
-
- /**
- * Perform recursive identifier resolution, building a collection structure
- * of Identified objects, any collection elements being IdentifiedLists of
- * Identified subclasses. If the id has depth 0 this will just return the
- * Identified to which that id refers.
- *
- * @param id
- * the T2Reference to resolve
- * @param ensureTypes
- * a set of ExternalReferenceSPI classes, this is used to augment
- * any resolved ReferenceSet instances to ensure that each one
- * has at least one of the specified types. If augmentation is
- * not required this can be set to null.
- * @param context
- * the ReferenceContext to use to resolve this and any
- * recursively resolved identifiers
- * <p>
- * If the context is null a new EmptyReferenceContext is inserted
- * in its place.
- * @return fully resolved Identified subclass - this is either a (recursive)
- * IdentifiedList of Identified, a ReferenceSet or an ErrorDocument
- * @throws ReferenceServiceException
- * if any problems occur during resolution
- */
- @Override
- public Identified resolveIdentifier(T2Reference id,
- Set<Class<ExternalReferenceSPI>> ensureTypes,
- ReferenceContext context) throws ReferenceServiceException {
- checkServices();
- if (context == null)
- context = new EmptyReferenceContext();
- switch (id.getReferenceType()) {
- case ReferenceSet:
- try {
- ReferenceSet rs;
- if (ensureTypes == null)
- rs = referenceSetService.getReferenceSet(id);
- else
- rs = referenceSetService.getReferenceSetWithAugmentation(
- id, ensureTypes, context);
- if (rs == null)
- throw new ReferenceServiceException(
- "Could not find ReferenceSet " + id);
- return rs;
- } catch (ReferenceSetServiceException rsse) {
- throw new ReferenceServiceException(rsse);
- }
-
- case ErrorDocument:
- try {
- ErrorDocument ed = errorDocumentService.getError(id);
- if (ed == null)
- throw new ReferenceServiceException(
- "Could not find ErrorDocument " + id);
- return ed;
- } catch (ErrorDocumentServiceException edse) {
- throw new ReferenceServiceException(edse);
- }
-
- case IdentifiedList:
- try {
- IdentifiedList<T2Reference> idList = listService.getList(id);
- if (idList == null)
- throw new ReferenceServiceException(
- "Could not find IdentifiedList " + id);
- /*
- * Construct a new list, and populate with the result of
- * resolving each ID in turn
- */
- IdentifiedArrayList<Identified> newList = new IdentifiedArrayList<>();
- for (T2Reference item : idList)
- newList.add(resolveIdentifier(item, ensureTypes, context));
- newList.setTypedId(getAsImpl(id));
- return newList;
- } catch (ListServiceException lse) {
- throw new ReferenceServiceException(lse);
- }
-
- default:
- throw new ReferenceServiceException("Unsupported ID type : "
- + id.getReferenceType());
- }
- }
-
- @Override
- public Object renderIdentifier(T2Reference id, Class<?> leafClass,
- ReferenceContext context) throws ReferenceServiceException {
- // Check we have the services installed
- checkServices();
-
- // Insert an empty context if context was null
- if (context == null)
- context = new EmptyReferenceContext();
- // Reject if the source reference contains errors
- if (id.containsErrors())
- throw new ReferenceServiceException(
- "Can't render an identifier which contains errors to a POJO");
-
- /*
- * Attempt to find an appropriate StreamToValueConverterSPI instance to
- * build the specified class
- */
- StreamToValueConverterSPI<?> converter = null;
- if (valueBuilders != null)
- for (StreamToValueConverterSPI<?> stvc : valueBuilders) {
- Class<?> builtClass = stvc.getPojoClass();
- if (leafClass.isAssignableFrom(builtClass)) {
- converter = stvc;
- break;
- }
- }
- if (converter == null)
- log.warn("No stream->value converters found for type '"
- + leafClass.getCanonicalName() + "'");
-
- // Render the identifier
- return renderIdentifierInner(id, leafClass, context, converter);
- }
-
- private Object renderIdentifierInner(T2Reference id, Class<?> leafClass,
- ReferenceContext context, StreamToValueConverterSPI<?> converter)
- throws ReferenceServiceException {
- checkServices();
-
- switch (id.getReferenceType()) {
- case IdentifiedList:
- try {
- IdentifiedList<T2Reference> idList = listService.getList(id);
- if (idList == null)
- throw new ReferenceServiceException(
- "Could not find IdentifiedList " + id);
- List<Object> result = new ArrayList<>();
- for (T2Reference child : idList)
- result.add(renderIdentifierInner(child, leafClass, context,
- converter));
- return result;
- } catch (ListServiceException lse) {
- throw new ReferenceServiceException(lse);
- }
-
- case ReferenceSet:
- try {
- ReferenceSet rs = referenceSetService.getReferenceSet(id);
- if (rs == null)
- throw new ReferenceServiceException(
- "Could not find ReferenceSet " + id);
- // Check that there are references in the set
- if (rs.getExternalReferences().isEmpty())
- throw new ReferenceServiceException(
- "Can't render an empty reference set to a POJO");
- /*
- * If we can't directly map to an appropriate value keep track
- * of the cheapest reference from which to try to build the pojo
- * from a stream
- */
- ExternalReferenceSPI cheapestReference = null;
- float cheapestReferenceCost = MAX_VALUE;
- for (ExternalReferenceSPI ers : rs.getExternalReferences()) {
- if (ers instanceof ValueCarryingExternalReference<?>) {
- ValueCarryingExternalReference<?> vcer = (ValueCarryingExternalReference<?>) ers;
- if (leafClass.isAssignableFrom(vcer.getValueType()))
- return vcer.getValue();
- }
- // Got here so this wasn't an appropriate value type
- if (cheapestReference == null
- || ers.getResolutionCost() < cheapestReferenceCost) {
- cheapestReference = ers;
- cheapestReferenceCost = ers.getResolutionCost();
- }
- }
- if (converter != null && cheapestReference != null)
- try (InputStream stream = cheapestReference
- .openStream(context)) {
- return converter.renderFrom(stream,
- cheapestReference.getDataNature(),
- cheapestReference.getCharset());
- }
- } catch (Exception e) {
- throw new ReferenceServiceException(e);
- }
- throw new ReferenceServiceException(
- "No converter found, and reference set didn't contain"
- + " an appropriate value carrying reference, cannot render to POJO");
-
- default:
- throw new ReferenceServiceException("Unsupported ID type : "
- + id.getReferenceType());
- }
- }
-
- /**
- * Initiates a traversal of the specified t2reference, traversing to
- * whatever level of depth is required such that all identifiers returned
- * within the iterator have the specified depth. The context (i.e. the index
- * path from the originally specified reference to each reference within the
- * iteration) is included through use of the ContextualizedT2Reference
- * wrapper class
- *
- * @param source
- * the T2Reference from which to traverse. In general this is the
- * root of a collection structure.
- * @param desiredDepth
- * the desired depth of all returned T2References, must be less
- * than or equal to that of the source reference.
- * @throws ReferenceServiceException
- * if unable to create the iterator for some reason. Note that
- * implementations are free to lazily perform the iteration so
- * this method may succeed but the iterator produced can fail
- * when used. If the iterator fails it will do so by throwing
- * one of the underlying sub-service exceptions.
- */
- @Override
- public Iterator<ContextualizedT2Reference> traverseFrom(T2Reference source,
- int desiredDepth) throws ReferenceServiceException {
- checkServices();
- if (desiredDepth < 0)
- throw new ReferenceServiceException(
- "Cannot traverse to a negative depth");
- List<ContextualizedT2Reference> workingSet = new ArrayList<>();
- workingSet.add(new ContextualizedT2ReferenceImpl(source, new int[0]));
- int currentDepth = source.getDepth();
- while (currentDepth > desiredDepth) {
- List<ContextualizedT2Reference> newSet = new ArrayList<>();
- for (ContextualizedT2Reference ci : workingSet) {
- T2ReferenceImpl ref = (T2ReferenceImpl) ci.getReference();
- switch (ref.getReferenceType()) {
- case IdentifiedList:
- try {
- int position = 0;
- for (T2Reference child : getListService().getList(ref))
- newSet.add(new ContextualizedT2ReferenceImpl(child,
- addIndex(ci.getIndex(), position++)));
- } catch (ListServiceException lse) {
- throw new ReferenceServiceException(lse);
- }
- break;
- case ReferenceSet:
- throw new ReferenceServiceException(
- "Should never be trying to drill inside a data document identifier");
- case ErrorDocument:
- newSet.add(new ContextualizedT2ReferenceImpl(ref
- .getDeeperErrorReference(), addIndex(ci.getIndex(),
- 0)));
- break;
- default:
- throw new ReferenceServiceException(
- "Fallen off end of case statement, unknown reference type!");
- }
- }
- currentDepth--;
- workingSet = newSet;
- }
- return workingSet.iterator();
- }
-
- /**
- * Append to an int[]
- *
- * @param current
- * current int[]
- * @param head
- * new int item to append to the current array
- * @return new array of int with the head added
- */
- private static int[] addIndex(int[] current, int head) {
- int[] result = new int[current.length + 1];
- System.arraycopy(current, 0, result, 0, current.length);
- result[current.length] = head;
- return result;
- }
-
- /**
- * Parse the reference contained in the string and return a
- * {@link T2Reference} with the correct properties
- */
- @Override
- public T2Reference referenceFromString(String reference) {
- T2ReferenceImpl newRef = new T2ReferenceImpl();
- Map<String, String> parseRef = parseRef(reference);
- newRef.setNamespacePart(parseRef.get("namespace"));
- newRef.setLocalPart(parseRef.get("localPart"));
- String type = parseRef.get("type");
- if (type.equals("ref")) {
- newRef.setReferenceType(ReferenceSet);
- } else if (type.equals("list")) {
- newRef.setReferenceType(IdentifiedList);
- newRef.setContainsErrors(Boolean.parseBoolean(parseRef.get("error")));
- newRef.setDepth(Integer.parseInt(parseRef.get("depth")));
- } else if (type.equals("error")) {
- newRef.setContainsErrors(true);
- newRef.setReferenceType(ErrorDocument);
- newRef.setDepth(Integer.parseInt(parseRef.get("depth")));
- } else {
- return null;
- // should throw an error
- }
-
- return newRef;
- }
-
- /**
- * Parse the reference and return a map with localPart, namespace, depth,
- * contains errors and the type
- *
- * @param ref
- * @return
- */
- private Map<String, String> parseRef(String ref) {
- String[] split = ref.split("\\?");
- /*
- * get the bit before and after the final '/' ie. the local part and the
- * depth, there might not be a split1[1] since it might not be a list
- */
- String[] split2 = split[1].split("/");
- // get the t2:abc:// and the namespace
- String[] split3 = split[0].split("//");
- // get the t2 bit and the reference type bit
- String[] split4 = split3[0].split(":");
-
- Map<String, String> refPartsMap = new HashMap<String, String>();
- refPartsMap.put("type", split4[1]);
- refPartsMap.put("namespace", split3[1]);
- refPartsMap.put("localPart", split2[0]);
-
- if (refPartsMap.get("type").equals("list")) {
- refPartsMap.put("error", split2[1]);
- refPartsMap.put("depth", split2[2]);
- }
- if (refPartsMap.get("type").equals("error"))
- refPartsMap.put("depth", split2[1]);
-
- return refPartsMap;
-
- }
-
- @Override
- public boolean delete(List<T2Reference> references)
- throws ReferenceServiceException {
- for (T2Reference reference : references)
- delete(reference);
- return true;
- }
-
- @Override
- public boolean delete(T2Reference reference)
- throws ReferenceServiceException {
- switch (reference.getReferenceType()) {
- case IdentifiedList:
- return listService.delete(reference);
- case ReferenceSet:
- return referenceSetService.delete(reference);
- case ErrorDocument:
- return errorDocumentService.delete(reference);
- default:
- throw new ReferenceServiceException("Unknown reference type!");
- }
- }
-
- @Override
- public void deleteReferencesForWorkflowRun(String workflowRunId)
- throws ReferenceServiceException {
- String errorString = "";
- try {
- listService.deleteIdentifiedListsForWorkflowRun(workflowRunId);
- } catch (ReferenceServiceException resex) {
- errorString += "Failed to delete lists for workflow run: "
- + workflowRunId + ".";
- }
- try {
- referenceSetService
- .deleteReferenceSetsForWorkflowRun(workflowRunId);
- } catch (ReferenceServiceException resex) {
- errorString += "Failed to delete reference sets for workflow run: "
- + workflowRunId + ".";
- }
- try {
- errorDocumentService
- .deleteErrorDocumentsForWorkflowRun(workflowRunId);
- } catch (ReferenceServiceException resex) {
- errorString += "Failed to delete error documents for workflow run: "
- + workflowRunId + ".";
- }
- if (!errorString.equals(""))
- throw new ReferenceServiceException(errorString);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetAugmentorImpl.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetAugmentorImpl.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetAugmentorImpl.java
deleted file mode 100644
index 33c586b..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetAugmentorImpl.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.PriorityQueue;
-import java.util.Set;
-
-import net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI;
-import net.sf.taverna.t2.reference.ExternalReferenceSPI;
-import net.sf.taverna.t2.reference.ExternalReferenceTranslatorSPI;
-import net.sf.taverna.t2.reference.ReferenceContext;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.ReferenceSetAugmentationException;
-import net.sf.taverna.t2.reference.ReferenceSetAugmentor;
-import net.sf.taverna.t2.reference.ReferenceSetAugmentorCallback;
-
-import org.apache.log4j.Logger;
-
-/**
- * Implementation of ReferenceSetAugmentor using Dijkstra's shortest path
- * algorithm over a type graph built from SPI instance registries of reference
- * builders and reference translators.
- *
- * @author Tom Oinn
- */
-public class ReferenceSetAugmentorImpl implements ReferenceSetAugmentor {
- private final Logger log = Logger
- .getLogger(ReferenceSetAugmentorImpl.class);
-
- /**
- * A list of ExternalReferenceBuilderSPI instances used to construct
- * ExternalReferenceSPI instances from byte streams
- */
- private List<ExternalReferenceBuilderSPI<?>> builders;
-
- /**
- * A list of ExternalReferenceTranslatorSPI instances used to construct
- * ExternalReferenceSPI instances from existing ExternalReferenceSPI
- * instances.
- */
- private List<ExternalReferenceTranslatorSPI<?, ?>> translators;
-
- private boolean cacheValid = false;
-
- private final Set<Class<ExternalReferenceSPI>> knownReferenceTypes = new HashSet<>();
- @SuppressWarnings("rawtypes")
- private final Map<Class<ExternalReferenceSPI>, Set<ExternalReferenceTranslatorSPI>> adjacencySets = new HashMap<>();
- private final Map<Class<ExternalReferenceSPI>, ShortestPathSolver> solvers = new HashMap<>();
-
- /**
- * Default constructor to make life easier when using Spring. To be
- * functional this implementation should be injected with InstanceRegistry
- * implementations containing lists of known implementations of the
- * ExternalReferenceBuilderSPI and ExternalReferenceTranslatorSPI
- * interfaces.
- */
- public ReferenceSetAugmentorImpl() {
- super();
- }
-
- public void buildersUpdated(Object service, Map<?, ?> properties) {
- cacheValid = false;
- }
-
- public void translatorsUpdated(Object service, Map<?, ?> properties) {
- cacheValid = false;
- }
-
- /**
- * Inject a list containing all known implementations of
- * ExternalReferenceBuilderSPI.
- *
- * @throws IllegalStateException
- * if this has already been set, the instance registries should
- * only be set on bean construction.
- */
- public synchronized void setBuilders(
- List<ExternalReferenceBuilderSPI<?>> builders) {
- if (this.builders != null) {
- log.error("Builder registry already injected, invalid operation");
- throw new IllegalStateException(
- "Can't inject the external reference builder registry "
- + "multiple times.");
- }
-
- this.builders = builders;
- if (log.isDebugEnabled()) {
- log.debug("* Builders injected :");
- int counter = 0;
- for (ExternalReferenceBuilderSPI<?> builder : builders)
- log.debug("* " + (++counter) + ") "
- + builder.getClass().getSimpleName() + ", builds "
- + builder.getReferenceType().getSimpleName());
- }
- cacheValid = false;
- }
-
- /**
- * Inject a list containing all known implementations of
- * ExternalReferenceTranslatorSPI.
- *
- * @throws IllegalStateException
- * if this has already been set, the instance registries should
- * only be set on bean construction.
- */
- public synchronized void setTranslators(
- List<ExternalReferenceTranslatorSPI<?, ?>> translators) {
- if (this.translators == null) {
- this.translators = translators;
- if (log.isDebugEnabled()) {
- log.debug("* Translators injected :");
- int counter = 0;
- for (ExternalReferenceTranslatorSPI<?, ?> translator : translators)
- log.debug("* "
- + (++counter)
- + ") "
- + translator.getClass().getSimpleName()
- + ", translates "
- + translator.getSourceReferenceType()
- .getSimpleName()
- + " to "
- + translator.getTargetReferenceType()
- .getSimpleName());
- }
- cacheValid = false;
- } else {
- log.error("Translator registry already injected, invalid operation");
- throw new IllegalStateException(
- "Can't inject the translator registry multiple times.");
- }
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected synchronized final void update() {
- if (builders == null || translators == null || cacheValid)
- return;
- log.debug("# Refreshing shortest path cache");
- knownReferenceTypes.clear();
- solvers.clear();
- adjacencySets.clear();
- for (ExternalReferenceBuilderSPI erb : builders)
- knownReferenceTypes.add(erb.getReferenceType());
- for (ExternalReferenceTranslatorSPI ert : translators) {
- knownReferenceTypes.add(ert.getSourceReferenceType());
- knownReferenceTypes.add(ert.getTargetReferenceType());
- getNeighbours(ert.getTargetReferenceType()).add(ert);
- }
- for (Class<ExternalReferenceSPI> type : knownReferenceTypes)
- try {
- solvers.put(type, new ShortestPathSolver(type));
- } catch (Throwable t) {
- log.error(t);
- if (t instanceof RuntimeException)
- throw (RuntimeException) t;
- }
- log.debug("# Path cache refresh done");
- cacheValid = true;
- }
-
- @SuppressWarnings("rawtypes")
- Set<ExternalReferenceTranslatorSPI> getNeighbours(
- Class<ExternalReferenceSPI> node) {
- Set<ExternalReferenceTranslatorSPI> adjacentTo = adjacencySets
- .get(node);
- if (adjacentTo != null)
- return adjacentTo;
-
- HashSet<ExternalReferenceTranslatorSPI> neighbours = new HashSet<>();
- adjacencySets.put(node, neighbours);
- return neighbours;
- }
-
- @Override
- public final Set<ExternalReferenceSPI> augmentReferenceSet(
- ReferenceSet references,
- Set<Class<ExternalReferenceSPI>> targetReferenceTypes,
- ReferenceContext context) throws ReferenceSetAugmentationException {
- synchronized (this) {
- if (!cacheValid)
- update();
- }
-
- // Synchronize on the reference set itself
- synchronized (references) {
- /*
- * First check whether we actually need to modify the reference set
- * at all - it's perfectly valid to call the augmentor when nothing
- * actually needs to be done (ideally you wouldn't do this, but it's
- * likely to happen)
- */
- for (ExternalReferenceSPI er : references.getExternalReferences())
- if (targetReferenceTypes.contains(er.getClass()))
- return new HashSet<>();
-
- // Need to perform augmentation if we reach this point
- List<TranslationPath> candidatePaths = new ArrayList<>();
- for (Class<ExternalReferenceSPI> target : targetReferenceTypes) {
- ShortestPathSolver solver = solvers.get(target);
- if (solver == null) {
- solver = new ShortestPathSolver(target);
- solvers.put(target, solver);
- }
- if (solver != null)
- for (TranslationPath path : solver.getTranslationPaths()) {
- for (ExternalReferenceSPI er : references
- .getExternalReferences())
- if (er.getClass().equals(path.getSourceType()))
- candidatePaths.add(path);
- for (TranslationPath dereferenceBasedPath : path
- .getDereferenceBasedPaths(references))
- candidatePaths.add(dereferenceBasedPath);
- }
- }
- /*
- * Now add candidate paths to represent a no-translator 'direct from
- * byte stream source' path for each target type compatible
- * reference builder
- */
- for (ExternalReferenceBuilderSPI<?> builder : builders)
- if (targetReferenceTypes.contains(builder.getReferenceType()))
- /*
- * The builder can construct one of the target types, add
- * paths for all possible pairs of 'de-reference existing
- * reference' and the builder
- */
- for (ExternalReferenceSPI er : references
- .getExternalReferences()) {
- TranslationPath newPath = new TranslationPath();
- newPath.setBuilders(builders);
- newPath.setInitialBuilder(builder);
- newPath.setSourceReference(er);
- candidatePaths.add(newPath);
- }
-
- /*
- * Got a list of candidate paths sorted by estimated overall path
- * cost
- */
- Collections.sort(candidatePaths);
- if (log.isDebugEnabled()) {
- log.debug("Found "
- + candidatePaths.size()
- + " contextual translation path(s) including builder based :");
- int counter = 0;
- for (TranslationPath path : candidatePaths)
- log.debug(" " + (++counter) + ") " + path.toString());
- }
-
- if (candidatePaths.isEmpty()) {
- log.warn("No candidate paths found for augmentation");
- throw new ReferenceSetAugmentationException(
- "No candidate translation paths were found");
- }
-
- log.debug("Performing augmentation :");
- int counter = 0;
- for (TranslationPath path : candidatePaths)
- try {
- counter++;
- Set<ExternalReferenceSPI> newReferences = path
- .doTranslation(references, context);
- if (log.isDebugEnabled())
- log.debug(" Success (" + counter + "), created "
- + printRefSet(newReferences));
- return newReferences;
- } catch (Exception ex) {
- log.debug(" Failed (" + counter + ")");
- log.trace(ex);
- // Use next path...
- }
- log.warn(" No paths succeeded, augmentation failed");
- throw new ReferenceSetAugmentationException(
- "All paths threw exceptions, can't perform augmentation");
- }
- }
-
- private String printRefSet(Set<ExternalReferenceSPI> set) {
- StringBuilder sb = new StringBuilder("[");
- String sep = "";
- for (ExternalReferenceSPI ref : set) {
- sb.append(sep).append(ref.toString());
- sep = ",";
- }
- return sb.append("]").toString();
- }
-
- @Override
- public final void augmentReferenceSetAsynch(final ReferenceSet references,
- final Set<Class<ExternalReferenceSPI>> targetReferenceTypes,
- final ReferenceContext context,
- final ReferenceSetAugmentorCallback callback)
- throws ReferenceSetAugmentationException {
- Runnable r = new Runnable() {
- @Override
- public void run() {
- try {
- callback.augmentationCompleted(augmentReferenceSet(
- references, targetReferenceTypes, context));
- } catch (ReferenceSetAugmentationException rsae) {
- callback.augmentationFailed(rsae);
- }
- }
- };
- executeRunnable(r);
- }
-
- /**
- * Schedule a runnable for execution - current naive implementation uses a
- * new thread and executes immediately, but this is where any thread pool
- * logic would go if we wanted to add that.
- *
- * @param r
- */
- private void executeRunnable(Runnable r) {
- new Thread(r).start();
- }
-
- class ShortestPathSolver {
- private Map<Class<ExternalReferenceSPI>, Class<ExternalReferenceSPI>> predecessors;
- private Map<Class<ExternalReferenceSPI>, ExternalReferenceTranslatorSPI<?, ?>> translators;
- private Map<Class<ExternalReferenceSPI>, Float> shortestDistances;
- private final Comparator<Class<ExternalReferenceSPI>> shortestDistanceComparator = new Comparator<Class<ExternalReferenceSPI>>() {
- @Override
- public int compare(Class<ExternalReferenceSPI> left,
- Class<ExternalReferenceSPI> right) {
- float shortestDistanceLeft = shortestDistances.get(left);
- float shortestDistanceRight = shortestDistances.get(right);
- if (shortestDistanceLeft > shortestDistanceRight)
- return +1;
- if (shortestDistanceLeft < shortestDistanceRight)
- return -1;
- return left.getCanonicalName().compareTo(
- right.getCanonicalName());
- }
- };
- private final PriorityQueue<Class<ExternalReferenceSPI>> unsettledNodes = new PriorityQueue<>(
- 10, shortestDistanceComparator);
- private final Set<Class<ExternalReferenceSPI>> settledNodes = new HashSet<>();
-
- private final List<TranslationPath> translationPaths = new ArrayList<>();
-
- public List<TranslationPath> getTranslationPaths() {
- return this.translationPaths;
- }
-
- public ShortestPathSolver(Class<ExternalReferenceSPI> targetType) {
- log.debug("# Constructing shortest paths to '"
- + targetType.getSimpleName() + "'");
- predecessors = new HashMap<>();
- translators = new HashMap<>();
- shortestDistances = new HashMap<>();
- setShortestDistance(targetType, 0.0f);
- unsettledNodes.add(targetType);
- while (!unsettledNodes.isEmpty()) {
- Class<ExternalReferenceSPI> u = extractMin();
- settledNodes.add(u);
- relaxNeighbours(u);
- }
- for (Class<ExternalReferenceSPI> c : settledNodes)
- if (!c.equals(targetType)) {
- // Don't calculate a path to itself!
- TranslationPath p = new TranslationPath();
- p.setBuilders(builders);
- Class<ExternalReferenceSPI> node = c;
- while (predecessors.get(node) != null) {
- p.pathSteps().add(translators.get(node));
- // Recurse, should terminate at the target type
- node = predecessors.get(node);
- }
- translationPaths.add(p);
- }
- Collections.sort(translationPaths);
- if (translationPaths.isEmpty())
- log.debug("# no paths discovered, type not reachable through translation");
- else if (log.isDebugEnabled()) {
- log.debug("# found " + translationPaths.size()
- + " distinct path(s) :");
- int counter = 0;
- for (TranslationPath path : translationPaths)
- log.debug("# " + (++counter) + ") " + path);
- }
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void relaxNeighbours(Class<ExternalReferenceSPI> u) {
- log.trace("# relaxing node " + u.getSimpleName());
- Set<Class<ExternalReferenceSPI>> alreadySeen = new HashSet<>();
- for (ExternalReferenceTranslatorSPI ert : getNeighbours(u)) {
- // all the translators that translate *to* u
- Class<ExternalReferenceSPI> v = ert.getSourceReferenceType();
- log.trace("# translator found from from '" + v + "' : "
- + ert.getClass().getSimpleName());
- if (!alreadySeen.contains(v) && !isSettled(v)) {
- /*
- * Avoid duplicate edges, always take the first one where
- * such duplicates exist
- */
- alreadySeen.add(v);
- if (getShortestDistance(v) > getShortestDistance(u)
- + ert.getTranslationCost()) {
- setShortestDistance(
- v,
- getShortestDistance(u)
- + ert.getTranslationCost());
- setPredecessor(v, u, ert);
- unsettledNodes.add(v);
- }
- }
- }
- }
-
- private boolean isSettled(Class<ExternalReferenceSPI> node) {
- return settledNodes.contains(node);
- }
-
- private void setShortestDistance(Class<ExternalReferenceSPI> node,
- float distance) {
- shortestDistances.put(node, distance);
- }
-
- private float getShortestDistance(Class<ExternalReferenceSPI> node) {
- Float d = shortestDistances.get(node);
- return (d == null) ? Float.MAX_VALUE : d;
- }
-
- private Class<ExternalReferenceSPI> extractMin() {
- return unsettledNodes.poll();
- }
-
- private void setPredecessor(Class<ExternalReferenceSPI> child,
- Class<ExternalReferenceSPI> parent,
- ExternalReferenceTranslatorSPI<?, ?> translator) {
- predecessors.put(child, parent);
- translators.put(child, translator);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/5f1ddb71/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetImpl.java
----------------------------------------------------------------------
diff --git a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetImpl.java b/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetImpl.java
deleted file mode 100644
index 437cd1d..0000000
--- a/taverna-reference-impl/src/main/java/net/sf/taverna/t2/reference/impl/ReferenceSetImpl.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- * Modifications to the initial code base are copyright of their
- * respective authors, or their employers as appropriate.
- *
- * This program 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without 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 program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.reference.impl;
-
-import java.util.Set;
-
-import net.sf.taverna.t2.reference.ExternalReferenceSPI;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.h3.HibernateMappedEntity;
-
-/**
- * An implementation of ReferenceSet with the additional methods and metadata
- * required by Hibernate3 to allow it to be persisted in a relational store. As
- * with everything else in this package you shouldn't be using this class
- * directly! Instead of this class you should use the registration methods on
- * {@link net.sf.taverna.t2.reference.ReferenceSetService}, implementations of
- * that interface will handle the construction of ReferenceSet implementations
- * (including this one).
- *
- * @author Tom Oinn
- */
-public class ReferenceSetImpl extends AbstractEntityImpl implements
- ReferenceSet, HibernateMappedEntity {
- private Set<ExternalReferenceSPI> externalReferences;
- private Long approximateSizeInBytes = new Long(-1);
-
- /**
- * Construct a new ReferenceSetImpl with the given set of external
- * references and identifier.
- *
- * @param references
- * the set of ExternalReferenceSPI which this reference set
- * should contain initially
- * @param id
- * the T2Reference to use, must be an instance of
- * ReferenceSetT2ReferenceImpl so hibernate can make use of it as
- * a compound primary key component
- */
- public ReferenceSetImpl(Set<ExternalReferenceSPI> references,
- T2ReferenceImpl id) {
- setTypedId(id);
- this.externalReferences = references;
-
- // Should be at least one - otherwise we cannot calculate the data size
- if (externalReferences != null && externalReferences.size() > 0) {
- // Just take the first ExternalReferenceSPI returned
- ExternalReferenceSPI externalReferenceSPI = externalReferences
- .toArray(new ExternalReferenceSPI[0])[0];
- approximateSizeInBytes = externalReferenceSPI
- .getApproximateSizeInBytes();
- }
- }
-
- /**
- * Default constructor, used by Hibernate when reconstructing this bean from
- * the database. If you call this directly from your code you must then call
- * both {@link #setExternalReferences(Set)} and
- * {@link #setId(T2ReferenceImpl)} before any use of the reference set. If
- * you're not writing the reference manager implementation you shouldn't be
- * using this class anyway.
- */
- public ReferenceSetImpl() {
- //
- }
-
- /**
- * For debugging purposes, prints a summary of the contents and identifier
- * of this reference set.
- *
- * @return human readable string representation of this object. This is not
- * regarded as 'stable' and should not be parsed for any reason!
- */
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(getId()).append(" [").append(externalReferences.size())
- .append("]\n");
- for (ExternalReferenceSPI ref : externalReferences)
- sb.append(" ").append(ref).append("\n");
- return sb.toString();
-
- }
-
- @Override
- public Set<ExternalReferenceSPI> getExternalReferences() {
- return externalReferences;
- }
-
- /**
- * This method is only ever called from within Hibernate, and is used to
- * initialize the set of external references.
- */
- public void setExternalReferences(Set<ExternalReferenceSPI> newReferences) {
- this.externalReferences = newReferences;
- }
-
- public void setApproximateSizeInBytes(Long sizeInBytes) {
- this.approximateSizeInBytes = sizeInBytes;
- }
-
- @Override
- public Long getApproximateSizeInBytes() {
- return approximateSizeInBytes;
- }
-}