# HG changeset patch # User Andre Heinecke # Date 1368191796 -7200 # Node ID 95b9e40bbad0e5a6212b4db276d435b615e349c1 # Parent 95cb104a871bda0b2570a3e7a8c0e6793c493010 Add handling for OUT id's parameter to D4EArtifact Patch mostly provided by Sascha Teichmann diff -r 95cb104a871b -r 95b9e40bbad0 artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Fri May 10 11:31:51 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Fri May 10 15:16:36 2013 +0200 @@ -17,6 +17,8 @@ import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.xml.xpath.XPathConstants; @@ -84,6 +86,13 @@ public static final String XPATH_FILTER = "/art:action/art:filter/art:out"; + public static final Pattern CONTAINS_OUT = + Pattern.compile( "^(.*):OUT=(.+)$"); + + /** Path to 'ids' (data) in doc that comes from datacage. */ + public static final String XPATH_IDS = "/art:action/art:ids/@value"; + + /** The constant string that shows that an operation was successful. */ public static final String OPERATION_SUCCESSFUL = "SUCCESS"; @@ -111,6 +120,8 @@ */ protected Map> filterFacets; + protected String boundToOut; + /** * The default constructor that creates an empty D4EArtifact. @@ -225,8 +236,49 @@ } filterFacets = buildFilterFacets(data); + + extractOut(data); } + protected void extractOut(Document data) { + log.debug("extractOut"); + String ids = XMLUtils.xpathString(data, XPATH_IDS, + ArtifactNamespaceContext.INSTANCE); + + log.debug("ids: '" + ids + "'"); + if (ids != null) { + Matcher m = CONTAINS_OUT.matcher(ids); + if (m.matches()) { + boundToOut = m.group(2); + log.debug("Bound to out :'" + boundToOut + "'"); + } + else { + log.debug("does not match"); + } + } + } + + /** + * Return the value of id element in Datacage data document. + * @param data Document as passed by datacage. + * @return the id element value of data document. + */ + public static String getDatacageIDValue(Document data) { + + String ids = XMLUtils.xpathString(data, XPATH_IDS, + ArtifactNamespaceContext.INSTANCE); + + if (ids != null) { + Matcher m = CONTAINS_OUT.matcher(ids); + if (m.matches()) { + ids = m.group(1); + } + } + + return ids; + } + + /** Get copy of previous state ids as Strings in list. */ protected List clonePreviousStateIds() { @@ -1568,5 +1620,9 @@ protected List getFacets(String stateid) { return this.facets.get(stateid); } + + public String getBoundToOut() { + return boundToOut; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 95cb104a871b -r 95b9e40bbad0 artifacts/src/main/java/org/dive4elements/river/artifacts/StaticD4EArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/StaticD4EArtifact.java Fri May 10 11:31:51 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/StaticD4EArtifact.java Fri May 10 15:16:36 2013 +0200 @@ -37,9 +37,6 @@ private static final Logger logger = Logger.getLogger(StaticD4EArtifact.class); - /** Path to 'ids' (data) in doc that comes from datacage. */ - public static final String XPATH_IDS = "/art:action/art:ids/@value"; - /** * Create description document which includes outputmodes. * @param data ignored. @@ -94,17 +91,6 @@ } - /** - * Return the value of id element in Datacage data document. - * @param data Document as passed by datacage. - * @return the id element value of data document. - */ - public static String getDatacageIDValue(Document data) { - return XMLUtils.xpathString(data, XPATH_IDS, - ArtifactNamespaceContext.INSTANCE); - } - - protected Element createOutputModes( CallContext cc, Document doc,