diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16-licence.txt b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16-licence.txt
deleted file mode 100644
index 1d32e8f74036682eaca4fb76c452c9476e9d53ef..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16-licence.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Copyright (c) 2006-2015, the HTMLCleaner project
-All rights reserved.
-
-Redistribution and use of this software in source and binary forms,
-with or without modification, are permitted provided that the following
-conditions are met:
-
-* Redistributions of source code must retain the above
-  copyright notice, this list of conditions and the
-  following disclaimer.
-
-* Redistributions in binary form must reproduce the above
-  copyright notice, this list of conditions and the
-  following disclaimer in the documentation and/or other
-  materials provided with the distribution.
-
-* The name of HtmlCleaner may not be used to endorse or promote
-  products derived from this software without specific prior
-  written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-You can contact Vladimir Nikic by sending e-mail to
-nikic_vladimir@yahoo.com. Please include the word "HtmlCleaner" in the
-subject line.
\ No newline at end of file
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16.jar b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16.jar
deleted file mode 100644
index 75dc35f17775a145698b459f692bab681817908d..0000000000000000000000000000000000000000
Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/htmlcleaner-2.16.jar and /dev/null differ
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/FRP1955.fasta b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/FRP1955.fasta
deleted file mode 100644
index 190e2431671ab6769c9d1564b5594ec25a1d5514..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/FRP1955.fasta
+++ /dev/null
@@ -1,72 +0,0 @@
->Act1_mkokappa  (5632 bp)
-GACGTCGAAAGAACGCGGCATTAGCAACATTTGCGAAGCGAACGATTTTGCGAACTGCTATTAATTAActctGGCGCGcc
-actactttttggaactcttgttgttctttggagttcaatgcgtccatctttacagtcctgtcttattgttcttgatttgt
-gccccgtaaaatactgttacttggttctggcgaggtattggatagttcctttttataaaggccatgaagGtttttctttc
-caattttttttttttcgtcattatagaaatcattacgaccgagattcccggCATATGGTAATAACTGATATAATTAAATT
-GAAGCTCTAATTTGTGAGTTTAGTATACATGCATTTACTTATAATACAGTTTTTTAGTTTTGCTGGCCGCATCTTCTCAA
-ATATGCTTCCCAGCCTGCTTTTCTGTAACGTTCACCCTCTACCTTAGCATCCCTTCCCTTTGCAAATAGTCCTCTTCCAA
-CAATAATAATGTCAGATCCTGTAGAGACCACATCATCCACGGTTCTATACTGTTGACCCAATGCGTCTCCCTTGTCATCT
-AAACCCACACCGGGTGTCATAATCAACCAATCGTAACCTTCATCTCTTCCACCCATGTCTCTTTGAGCAATAAAGCCGAT
-AACAAAATCTTTGTCGCTCTTCGCAATGTCAACAGTACCCTTAGTATATTCTCCAGTAGCTAGGGAGCCCTTGCATGACA
-ATTCTGCTAACATCAAAAGGCCTCTAGGTTCCTTTGTTACTTCTTCCGCCGCCTGCTTCAAACCGCTAACAATACCTGGG
-CCCACCACACCGTGTGCATTCGTAATGTCTGCCCATTCTGCTATTCTGTATACACACGCAGAGTACTGCAATTTGACTGT
-ATTACCAATGTCAGCAAATTTTCTGTCTTCGAAGAGTAAAAAATTGTACTTGGCGGATAATGCCTTTAGCGGCTTAACTG
-TGCCCTCCATGGAAAAATCAGTCAAGAGATCCACATGTGTTTTTAGTAAACAAATTTTGGGACCTAATGCTTCAACTAAC
-TCCAGTAATTCCTTGGTGGTACGAACATCCAATGAAGCACACAAGTTTGTTTGCTTTTCGTGCATGATATTAAATAGCTT
-GGCAGCAACAGGACTAGGATGAGTAGCAGCACGTTCCTTATATGTAGCTTTCGACATGATTTATCTTCGTTTCCTGCACG
-TTTTTGTTCTGTGCAGTTGGGTTAAGAATACTGGGCAATTTCATGTTTCTTCAACACCACCTATGCGTATATATACCAAT
-CTAAGTCTGTGCTCCTTCCTTCGTTCTTCCTTCTGCTCGGAGATTACCGAATCAAAAAAATTTCAAAGAAACCGGAATCA
-AAAAAAAGAACAAAAAAAAAAAAGATGAATGAAAAGCGATCGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGG
-TTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAATTGTAATACGACTCACTATAGGGCGAATTGGAGAAACAGAA
-TAATATATAAACCTGTATAATATAACCTTGAAGACTATATTTCTTTTCGCGGCCGCCTATAGGGCGAATTGGAGCTCCAC
-CGCGGTGGCGGCCGCTCTAGAGAAGCGGGTAAGCTGCCACAGCAATTAATGCACAACATTTAACCTACATTCTTCCTTAT
-CGGATCgTCAAAACCCTTAAAAAgATATGCCTCACCCTAACATATTTTCCAATTAACCCTCAATATTTCTCTGTCACCCG
-GCCTCTATTTTCCATTTTCTTCTTTACCCGCCACGCGTTTTTTTCTTTCAAATTTTTTTCTTCCTTCTTCTTTTTCTTCC
-ACGTCCTCTTGCATAAATAAATAAACCGTTTTGAAACCAAACTCGCCTCTCTCTCTCCTTTTTGAAATATTTTTGGGTTT
-GTTTGATCCTTTCCTTCCCAATCTCTCTTGTTTAATATATATTCATTTATATCACGCTCTCTTTTTATCTTCCTTTTTTT
-CCTCTCTCTTGTATTCTTCCTTCCCCTTTCTACTCAAACCAAGAAGAAAAAGAAAAGGTCAATCTTTGTTAAAGAATAGG
-ATCTTCTACTACATCAGCTTTTAGATTTTTCACGCTTACTGCTTTTTTCTTCCCAAGATCGAAAATTTACTGAATTAACA
-ACTAGTGGATCCCCCGGGCTGCAGGAATTCGATATCAagctTATGAGATCTGTTTCTGTTATTAAGCCAGAAATGAAGAT
-GAGATATTACATGGATGGTTCTGTTAATGGTCATGAATTTACTATTGAAGGTGAAGGTACTGGTAGACCATATGAAGGTC
-ATCAAGAAATGACTTTGAGAGTTACTATGGCTGAAGGTGGTCCAATGCCATTTGCTTTTGATTTGGTTTCTCATGTTTTT
-TGTTACGGTCATAGAGTTTTTACAAAGTACCCAGAAGAAATTCCAGATTACTTTAAGCAAGCATTTCCAGAAGGTTTGTC
-TTGGGAAAGATCATTGGAATTTGAAGATGGTGGTTCTGCTTCTGTTTCTGCTCATATTTCTTTGAGAGGTAACACTTTTT
-ACCATAAGTCTAAGTTTACTGGTGTTAATTTTCCAGCTGATGGTCCAATTATGCAAAATCAATCTGTTGATTGGGAACCA
-TCTACTGAAAAGATTACTGCTTCTGATGGTGTTTTGAAAGGTGATGTTACAATGTACTTGAAATTGGAAGGTGGTGGTAA
-TCATAAATGTCAATTCAAGACTACTTATAAAGCTGCTGAAAAGATTTTGGAAATGCCAGGTGATCATTATATTGGTCATA
-GATTGGTTAGAAAGACTGAAGGTAACATTACTGAACAAGTTGAAGATGCTGTTGCTCATTCTGGATCCTAGCtcgaGACA
-GGCCCCTTTTCCTTTGTCtATATCATGTAATTAGTTATGTCACGCTTACATTCACGCCCTCCTCCCACATCCGCTCTAAC
-CGAAAAGGAAGGAGTTAGACAACCTGAAGTCTAGGTCCCTATTTATTTTTTTTAATAGTTATGTTAGTATTAAGAACGTT
-ATTTATATTTCAAATTTTTCTTTTTTTTCTGTACAAACGCGTGTACGCATGTAACATTATACTGAAAACCTTGCTTGAGA
-AGGTTTTGGGACGCTCGAAGGCTTTAATTTGCAAGgTTCGCAGTTTACACTCTCATCGTCGCTCTCATCATCGCTTCCGT
-TGTTGTTTTCCTTAGTAGCGTCTGCTTGGTACCCAGCTTCGGCCGTATTTACAGATAACGATGTCGTTATTATATATATA
-TATATATATTGTCACTTGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTTCGAGCTTGGCGTAATCATGGTCATAG
-CTGTTTCCTGTGTGAAATTGTTATCCGCTCACAACAGCTGgatgaattgaaTagctttatggaccctgaaaccacagcca
-cattaaccttctttgatggtcaaaacttatccttcaccataaatatgcctcgcaaaaaaggtaattaacatatatagaat
-tacattatttatgaaatatcatcactatctcttagcatctttaatccttttctacatcagataacttcggtttgttatca
-tcgtctgtattgtcatcaattggCGCGCCtctcCCTGCAGGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTG
-CGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCA
-CTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGG
-CCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGC
-TCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCC
-TGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCT
-GTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGC
-GCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAG
-GATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAG
-TATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACC
-GCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTT
-TTGTTTAAACCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAG
-GATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACA
-GTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTGACTCCCCGTC
-GTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGC
-TCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCC
-AGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACA
-GGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC
-CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATGGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCAC
-TCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCA
-ACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACA
-TAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGAT
-CCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAA
-ACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATA
-TTATTGAAGCATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG
-TTCCGCGCACATTTCCCCGAAAAGTGCCACCT
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.java b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.java
deleted file mode 100644
index 48a414552f0b3909ec3761dadca53f8023534a79..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package ch.ethz.ssdm.eln;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.URL;
-
-import org.apache.commons.io.FileUtils;
-import org.eclipse.jetty.client.HttpClient;
-import org.eclipse.jetty.client.api.ContentProvider;
-import org.eclipse.jetty.client.api.ContentResponse;
-import org.eclipse.jetty.client.api.Request;
-import org.eclipse.jetty.client.util.StringContentProvider;
-import org.eclipse.jetty.http.HttpStatus;
-
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
-import ch.systemsx.cisd.common.http.JettyHttpClientFactory;
-
-public class PlasmapperConnector
-{
-    public static void main(String[] args) throws Exception {
-        //URL to the server without the dash '/'
-        String serverURL = "http://wishart.biology.ualberta.ca";
-        //Path to input fasta file
-        String fastaInputFilePath = "FRP1955.fasta";
-        //Path to output svg file
-        String svgOutputFilePath = "FRP1955.svg";
-        //Path to output html file
-        String htmlOutputFilePath = "FRP1955.html";
-        
-        downloadPlasmidMap(
-                serverURL,
-                fastaInputFilePath,
-                svgOutputFilePath,
-                htmlOutputFilePath);
-    }
-    
-    
-    private static final String VECTOR_MAP_URL = "/PlasMapper/servlet/DrawVectorMap";
-    
-    public static void downloadPlasmidMap(
-            final String serverURL,
-            final String fastaInputFilePath,
-            final String svgOutputFilePath,
-            final String htmlOutputFilePath) {
-        HttpClient client = JettyHttpClientFactory.getHttpClient();
-        Request requestEntity = client.newRequest(serverURL + VECTOR_MAP_URL).method("POST");
-        
-        try {
-            setPlasmidFormOptions(requestEntity, fastaInputFilePath);
-            ContentResponse contentResponse = requestEntity.send();
-            
-            int statusCode = contentResponse.getStatus();
-            
-            if (statusCode != HttpStatus.Code.OK.getCode())
-            {
-                throw new RuntimeException("Status Code was " + statusCode + " instead of " + HttpStatus.Code.OK.getCode());
-            }
-            
-            String svgFileURLPath = contentResponse.getContentAsString();
-            if (svgFileURLPath == null || !svgFileURLPath.contains("PlasMapper")) {
-                throw new RuntimeException("PlasMapper service failed returning incorrect path to file: " + svgFileURLPath);
-            } else if (svgFileURLPath.endsWith("\r\n"))
-            {
-                svgFileURLPath = svgFileURLPath.substring(0, svgFileURLPath.lastIndexOf("\r\n"));
-            } else if (svgFileURLPath.endsWith("\n"))
-            {
-                svgFileURLPath = svgFileURLPath.substring(0, svgFileURLPath.lastIndexOf("\n"));
-            }
-//            System.out.println("Downloading SVG file: " + serverURL + "/" + svgFileURLPath + " to " + svgOutputFile);
-            
-            if(svgFileURLPath.startsWith("/")) {
-                svgFileURLPath = svgFileURLPath.substring(1);
-            }
-            URL svgFileURL = new URL(serverURL + "/" + svgFileURLPath);
-            
-            File svgOutputFile = new File(svgOutputFilePath);
-            FileUtils.copyURLToFile(svgFileURL, svgOutputFile);
-//            System.out.println("Generating HTML file: " + htmlOutputFile);
-            String htmlFileContents = "<html>"
-                                    + "<head>"
-                                    + "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\">"
-                                    + "<title>PlasMapper - Graphic Map</title>"
-                                    + "</head>"
-                                    + "<body>"
-                                    + "<embed src=\"" + svgOutputFile.getName() + "\" type=\"image/svg+xml\" pluginspage=\"http://www.adobe.com/svg/viewer/install/\" id=\"Panel\" height=\"1010\" width=\"1010\">"
-                                    + "<br>"
-                                    + "<a href=\"" + svgOutputFile.getName() + "\" target=\"_blank\">Download Link</a>"
-                                    + "</body>"
-                                    + "</html>";
-            FileUtils.writeStringToFile(new File(htmlOutputFilePath), htmlFileContents, "UTF-8");
-        } catch(Exception ex) {
-            throw new RuntimeException(ex);
-        } finally {
-            
-        }
-    }
-    
-    
-    private static void setPlasmidFormOptions(final Request requestEntity, final String fastaInputFile) throws FileNotFoundException
-    {
-        requestEntity.param("vendor", "Amersham%20Pharmacia");
-        requestEntity.param("showOption", "1");
-        requestEntity.param("showOption", "2");
-        requestEntity.param("showOption", "3");
-        requestEntity.param("showOption", "4");
-        requestEntity.param("showOption", "5");
-        requestEntity.param("showOption", "6");
-        requestEntity.param("showOption", "7");
-        requestEntity.param("showOption", "8");
-        requestEntity.param("showOption", "9");
-        requestEntity.param("restriction", "1");
-        requestEntity.param("orfLen", "200");
-        requestEntity.param("strand", "1");
-        requestEntity.param("strand", "2");
-        requestEntity.param("dir1", "1");
-        requestEntity.param("dir2", "1");
-        requestEntity.param("dir3", "1");
-        requestEntity.param("dir4", "1");
-        requestEntity.param("dir5", "1");
-        requestEntity.param("dir6", "1");
-        requestEntity.param("category1", "origin_of_replication");
-        requestEntity.param("category2", "origin_of_replication");
-        requestEntity.param("category3", "origin_of_replication");
-        requestEntity.param("category4", "origin_of_replication");
-        requestEntity.param("category5", "origin_of_replication");
-        requestEntity.param("category6", "origin_of_replication");
-        requestEntity.param("scheme", "0");
-        requestEntity.param("shading", "0");
-        requestEntity.param("labColor", "0");
-        requestEntity.param("labelBox", "1");
-        requestEntity.param("labels", "0");
-        requestEntity.param("innerLabels", "0");
-        requestEntity.param("legend", "0");
-        requestEntity.param("arrow", "0");
-        requestEntity.param("tickMark", "0");
-        requestEntity.param("mapTitle", "");
-        requestEntity.param("comment", "Created using PlasMapper");
-        requestEntity.param("imageFormat", "SVG");
-        requestEntity.param("imageSize", "1000 x 1000");
-        requestEntity.param("backbone", "medium");
-        requestEntity.param("arc", "medium");
-        requestEntity.param("biomoby", "true");
-        
-        final String CRLF = "\r\n";
-        final String BOUNDARY = "MMMMM___MP_BOUNDARY___MMMMM";
-        final String FILE_PART_NAME = "fastaFile";
-        
-        File fastaFile = new File(fastaInputFile);
-        String fileContent = FileUtilities.loadToString(fastaFile);
-        ContentProvider content = new StringContentProvider("--" + BOUNDARY + CRLF
-                + "Content-Disposition: form-data; name=\"" + FILE_PART_NAME + "\"; filename=\"" 
-                + fastaFile.getName() + "\"" + CRLF
-                + "Content-Type: application/octet-stream" + CRLF + CRLF
-                + fileContent + CRLF + "--" + BOUNDARY + "--" + CRLF);
-        requestEntity.content(content, "multipart/form-data; boundary=" + BOUNDARY);
-    }
-}
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.sh b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.sh
deleted file mode 100644
index 205ac254ff1b7f4b8506300150b8cb34726fc8e4..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper-source/PlasmapperConnector.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-#URL to the server without the dash '/'
-serverURL=http://wishart.biology.ualberta.ca
-#Path to input fasta file
-fastaInputFile=FRP1955.fasta
-#Path to output svg file
-svgOutputFile=FRP1955.svg
-#Path to output html file
-htmlOutputFile=FRP1955.html
-
-echo Asking service $serverURL/PlasMapper/servlet/DrawVectorMap to generate the SVG file
-imageURL=$(curl -k -F "fastaFile=@$fastaInputFile;type=application/octet-stream" \
--F "vendor=Amersham%20Pharmacia" \
--F "Submit=Graphic Map" \
--F "showOption=1" \
--F "showOption=2" \
--F "showOption=3" \
--F "showOption=4" \
--F "showOption=5" \
--F "showOption=6" \
--F "showOption=7" \
--F "showOption=8" \
--F "showOption=9" \
--F "restriction=1" \
--F "orfLen=200" \
--F "strand=1" \
--F "strand=2" \
--F "dir1=1" \
--F "dir2=1" \
--F "dir3=1" \
--F "dir4=1" \
--F "dir5=1" \
--F "dir6=1" \
--F "category1=origin_of_replication" \
--F "category2=origin_of_replication" \
--F "category3=origin_of_replication" \
--F "category4=origin_of_replication" \
--F "category5=origin_of_replication" \
--F "category6=origin_of_replication" \
--F "scheme=0" \
--F "shading=0" \
--F "labColor=0" \
--F "labelBox=1" \
--F "labels=0" \
--F "innerLabels=0" \
--F "legend=0" \
--F "arrow=0" \
--F "tickMark=0" \
--F "comment=Created using PlasMapper" \
--F "imageFormat=SVG" \
--F "imageSize=1000 x 1000" \
--F "backbone=medium" \
--F "arc=medium" \
--F "biomoby=true" \
-$serverURL/PlasMapper/servlet/DrawVectorMap
-)
-echo Downloading SVG file: $serverURL/$imageURL
-curl -o $svgOutputFile $serverURL/$imageURL
-echo Generating HTML file: $htmlOutputFile
-echo "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\"><title>PlasMapper - Graphic Map</title></head><body><embed src=\"$svgOutputFile\" type=\"image/svg+xml\" pluginspage=\"http://www.adobe.com/svg/viewer/install/\" id=\"Panel\" height=\"1010\" width=\"1010\"><br><a href=\"$svgOutputFile\" target=\"_blank\">Download Link</a></body></html>" > $htmlOutputFile
\ No newline at end of file
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper.jar b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper.jar
deleted file mode 100644
index 3bad25f84b433c18e7c55f0be129ac4ed62feea8..0000000000000000000000000000000000000000
Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/plasmapper.jar and /dev/null differ
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/zip4j_1.3.2.jar b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/zip4j_1.3.2.jar
deleted file mode 100644
index 66a19e49a2a29b39b76ade1b619de9db0a8fdcaa..0000000000000000000000000000000000000000
Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/lib/zip4j_1.3.2.jar and /dev/null differ
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/plugin.properties b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/plugin.properties
deleted file mode 100644
index d6fb4fb3f27907bf877efc1699a0750f8c75122d..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/plugin.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-label = New Browser API
-class = ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.JythonIngestionService
-script-path = script.py
diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/script.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/script.py
deleted file mode 100644
index 85ae413c113471d54f8768434e53903b71b2c52e..0000000000000000000000000000000000000000
--- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/dss/reporting-plugins/newbrowserapi/script.py
+++ /dev/null
@@ -1,947 +0,0 @@
-#
-# Copyright 2014 ETH Zuerich, Scientific IT Services
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# IDataSetRegistrationTransactionV2 Class
-from ch.systemsx.cisd.openbis.dss.client.api.v1 import DssComponentFactory
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
-from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria import MatchClause, SearchOperator, MatchClauseAttribute
-from ch.systemsx.cisd.openbis.generic.shared.basic.dto import DataTypeCode;
- 
-from java.util import ArrayList
-from java.util import Date;
-from java.text import SimpleDateFormat;
-
-from ch.systemsx.cisd.common.spring import HttpInvokerUtils;
-from org.apache.commons.io import IOUtils
-from java.io import File
-from java.io import FileOutputStream
-from java.lang import System
-from net.lingala.zip4j.core import ZipFile
-from ch.systemsx.cisd.common.exceptions import UserFailureException
-
-from ch.ethz.ssdm.eln import PlasmapperConnector
-
-import time
-import subprocess
-import os.path
-import re
-
-from java.io import StringWriter
-from org.htmlcleaner import HtmlCleaner
-from org.htmlcleaner import SimpleHtmlSerializer
-from org.htmlcleaner import CleanerProperties
-
-#AS API
-from ch.systemsx.cisd.openbis.generic.shared.api.v1 import IGeneralInformationService;
-
-#For Screeening API
-from ch.systemsx.cisd.openbis.common.api.client import ServiceFinder;
-from java.util import Arrays;
-
-from ch.ethz.sis.openbis.generic.asapi.v3 import IApplicationServerApi
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions import SampleFetchOptions;
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search import SampleSearchCriteria;
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search import SearchResult;
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id import SampleIdentifier;
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id import SamplePermId
-from ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id import ExperimentIdentifier;
-from ch.ethz.sis.openbis.generic.server.sharedapi.v3.json import GenericObjectMapper;
-from ch.systemsx.cisd.openbis.dss.generic.server import DataStoreServer
-from ch.systemsx.cisd.common.shared.basic.string import StringUtils
-
-#from ch.systemsx.cisd.common.ssl import SslCertificateHelper;
-
-#Plasmapper server used
-PLASMAPPER_BASE_URL = "http://wishart.biology.ualberta.ca"
-OPENBISURL = DataStoreServer.getConfigParameters().getServerURL() + "/openbis/openbis"
-def getConfigParameterAsString(propertyKey):
-	properties = DataStoreServer.getConfigParameters().getProperties();
-	property = properties.getProperty(propertyKey);
-	if StringUtils.isBlank(property):
-		return None;
-	else:
-		return property;
-
-def getDirectLinkURL():
-	ftpServerEnable = getConfigParameterAsString("ftp.server.enable");
-	
-	ftpServerUseSsl = getConfigParameterAsString("ftp.server.use-ssl");
-	useSsl = getConfigParameterAsString("use-ssl");
-	
-	ftpPortLegacy = getConfigParameterAsString("ftp.server.port");
-	ftpPort = getConfigParameterAsString("ftp.server.ftp-port");
-	
-	sftpPort = getConfigParameterAsString("ftp.server.sftp-port");
-	
-	
-	protocol = None;
-	port = None;
-	if (ftpServerEnable == "true") and (sftpPort is not None):
-		protocol = "sftp";
-	elif (ftpServerEnable == "true") and ((ftpPort is not None) or (ftpPortLegacy is not None)) and (ftpServerUseSsl == "true" or useSsl == "true"):
-		protocol = "ftps";
-	
-	if protocol is not None:
-		if sftpPort is not None:
-			port = sftpPort;
-		elif ftpPort is not None:
-			port = ftpPort;
-		elif ftpPortLegacy is not None:
-			port = ftpPortLegacy;
-		
-	directLinkURL = None;
-	if protocol is not None:
-		directLinkURL = protocol + "://$URL:" + str(port) + "/";
-	
-	return getJsonForData(directLinkURL);
-
-def getProperties(tr, parameters):
-	sessionToken = parameters.get("sessionToken");
-	servFinder = ServiceFinder("openbis", IGeneralInformationService.SERVICE_URL);
-	infService = servFinder.createService(IGeneralInformationService, OPENBISURL);
-	properties = infService.listPropertyTypes(sessionToken, False);
-	return properties
-
-def isPropertyRichText(properties, propertyCode):
-	for property in properties:
-		if property.getCode() == propertyCode and property.getCode() != "FREEFORM_TABLE_STATE":
-			return property.getDataType() == DataTypeCode.MULTILINE_VARCHAR;
-	return None;
-
-def updateIfIsPropertyRichText(properties, propertyCode, propertyValue):
-	if isPropertyRichText(properties, propertyCode):
-		if propertyValue is not None:
-			cleanerProperties = CleanerProperties();
-			cleanerProperties.setPruneTags("meta, link, script");
-			cleaner = HtmlCleaner(cleanerProperties);
-			htmlSerializer = SimpleHtmlSerializer(cleanerProperties);
-			propertytagNode = cleaner.clean(propertyValue);
-			return htmlSerializer.getAsString(propertytagNode);
-	return propertyValue;
-
-def getSampleByIdentifierForUpdate(tr, identifier):
-	space = identifier.split("/")[1];
-	code = identifier.split("/")[2];
-	
-	criteria = SearchCriteria();
-	criteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.SPACE, space));
-	criteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, code));
-	criteria.setOperator(SearchOperator.MATCH_ALL_CLAUSES);
-	
-   	searchService = tr.getSearchService();
-   	found = list(searchService.searchForSamples(criteria));
-   	if len(found) == 1:
-   		return tr.makeSampleMutable(found[0]);
-   	else:
-   		raise UserFailureException(identifier + " Not found by search service.");
-   	
-def username(sessiontoken):
-    m = re.compile('(.*)-[^-]*').match(sessiontoken)
-    if m:
-        return m.group(1)
-
-def process(tr, parameters, tableBuilder):
-	method = parameters.get("method");
-	
-	isOk = False;
-	result = None;
-	# Obtain the user using the dropbox
-	sessionToken = parameters.get("sessionToken"); #String
-	sessionId = username(sessionToken); #String
-	if sessionId == userId:
-		tr.setUserId(userId);
-	else:
-		print "[SECURITY] User " + userId + " tried to execute the eln-lims dropbox using " + sessionId + " account.";
-		raise UserFailureException("[SECURITY] User " + userId + " tried to use " + sessionId + " account, this will be communicated to the admin.");
-	
-	if method == "init":
-		isOk = init(tr, parameters, tableBuilder);
-	if method == "searchSamples":
-		result = searchSamples(tr, parameters, tableBuilder, sessionId);
-		isOk = True;
-	if method == "registerUserPassword":
-		isOk = registerUserPassword(tr, parameters, tableBuilder);
-	if method == "getDirectLinkURL":
-		result = getDirectLinkURL();
-		isOk = True;
-	
-	if method == "copyAndLinkAsParent":
-		isOk = copyAndLinkAsParent(tr, parameters, tableBuilder);
-	
-	if method == "batchOperation":
-		isOk = batchOperation(tr, parameters, tableBuilder);
-		
-	if method == "insertProject":
-		isOk = insertUpdateProject(tr, parameters, tableBuilder);
-	if method == "updateProject":
-		isOk = insertUpdateProject(tr, parameters, tableBuilder);
-	
-	if method == "insertExperiment":
-		isOk = insertUpdateExperiment(tr, parameters, tableBuilder);
-	if method == "updateExperiment":
-		isOk = insertUpdateExperiment(tr, parameters, tableBuilder);
-	
-	if method == "copySample":
-		isOk = copySample(tr, parameters, tableBuilder);
-	if method == "insertSample":
-		isOk = insertUpdateSample(tr, parameters, tableBuilder);
-	if method == "updateSample":
-		isOk = insertUpdateSample(tr, parameters, tableBuilder);
-	if method == "moveSample":
-		isOk = moveSample(tr, parameters, tableBuilder);
-	if method == "insertDataSet":
-		isOk = insertDataSet(tr, parameters, tableBuilder);
-	if method == "updateDataSet":
-		isOk = updateDataSet(tr, parameters, tableBuilder);
-	
-	if method == "listFeatureVectorDatasetsPermIds":
-		result = listFeatureVectorDatasetsPermIds(tr, parameters, tableBuilder);
-		isOk = True;
-	if method == "listAvailableFeatures":
-		result = listAvailableFeatures(tr, parameters, tableBuilder);
-		isOk = True;
-	if method == "getFeaturesFromFeatureVector":
-		result = getFeaturesFromFeatureVector(tr, parameters, tableBuilder);
-		isOk = True;
-
-	if isOk:
-		tableBuilder.addHeader("STATUS");
-		tableBuilder.addHeader("MESSAGE");
-		tableBuilder.addHeader("RESULT");
-		row = tableBuilder.addRow();
-		row.setCell("STATUS","OK");
-		row.setCell("MESSAGE", "Operation Successful");
-		row.setCell("RESULT", result);
-	else :
-		tableBuilder.addHeader("STATUS");
-		tableBuilder.addHeader("MESSAGE");
-		row = tableBuilder.addRow();
-		row.setCell("STATUS","FAIL");
-		row.setCell("MESSAGE", "Operation Failed");
-
-def listFeatureVectorDatasets(sessionToken, samplePlatePermId):
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1 import IScreeningApiServer;
-	from ch.systemsx.cisd.openbis.dss.screening.shared.api.v1 import IDssServiceRpcScreening;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import PlateIdentifier;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import FeatureVectorDatasetReference;
-	
-	screeningFinder = ServiceFinder("openbis", IScreeningApiServer.SERVICE_URL);
-	screeningServiceAS = screeningFinder.createService(IScreeningApiServer, OPENBISURL);
-	
-	plateIdentifier = PlateIdentifier.createFromPermId(samplePlatePermId);
-	featureVectorDatasets = screeningServiceAS.listFeatureVectorDatasets(sessionToken, Arrays.asList(plateIdentifier));
-	return featureVectorDatasets;
-
-def getJsonForData(data):
-	objectMapper = GenericObjectMapper();
-	jsonValue = objectMapper.writeValueAsString(data);
-	return jsonValue;
-
-def listFeatureVectorDatasetsPermIds(tr, parameters, tableBuilder):
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1 import IScreeningApiServer;
-	from ch.systemsx.cisd.openbis.dss.screening.shared.api.v1 import IDssServiceRpcScreening;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import PlateIdentifier;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import FeatureVectorDatasetReference;
-	
-	sessionToken = parameters.get("sessionToken");
-	samplePlatePermId = parameters.get("samplePlatePermId");
-
-	featureVectorDatasets = listFeatureVectorDatasets(sessionToken, samplePlatePermId);
-	featureVectorDatasetCodes = [];
-	for featureVectorDataset in featureVectorDatasets:
-		featureVectorDatasetCodes.append(featureVectorDataset.getDatasetCode());
-	
-	return getJsonForData(featureVectorDatasetCodes);
-
-def listAvailableFeatures(tr, parameters, tableBuilder):
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1 import IScreeningApiServer;
-	from ch.systemsx.cisd.openbis.dss.screening.shared.api.v1 import IDssServiceRpcScreening;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import PlateIdentifier;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import FeatureVectorDatasetReference;
-		
-	sessionToken = parameters.get("sessionToken");
-	samplePlatePermId = parameters.get("samplePlatePermId");
-	featureVectorDatasetPermId = parameters.get("featureVectorDatasetPermId");
-	
-	featureVectorDataset = None;
-	featureVectorDatasets = listFeatureVectorDatasets(sessionToken, samplePlatePermId);
-	for featureVectorDataset in featureVectorDatasets:
-		if featureVectorDataset.getDatasetCode() == featureVectorDatasetPermId:
-			featureVectorDataset = featureVectorDataset;
-	
-	from ch.systemsx.cisd.openbis.dss.generic.server import DssScreeningApplicationContext
-	screeningServiceDSS = DssScreeningApplicationContext.getInstance().getBean("data-store-rpc-service-screening-logic-target")
-
-	featureInformationList = screeningServiceDSS.listAvailableFeatures(sessionToken, [featureVectorDataset]);
-	features = {};
-	for featureInformation in featureInformationList:
-		features[featureInformation.getCode()] = featureInformation.getLabel();
-	
-	return getJsonForData(features);
-
-def getFeaturesFromFeatureVector(tr, parameters, tableBuilder):
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1 import IScreeningApiServer;
-	from ch.systemsx.cisd.openbis.dss.screening.shared.api.v1 import IDssServiceRpcScreening;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import PlateIdentifier;
-	from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import FeatureVectorDatasetReference;
-	
-	sessionToken = parameters.get("sessionToken");
-	samplePlatePermId = parameters.get("samplePlatePermId");
-	featureVectorDatasetPermId = parameters.get("featureVectorDatasetPermId");
-	featuresCodesFromFeatureVector = parameters.get("featuresCodesFromFeatureVector");
-	
-	featureVectorDataset = None;
-	featureVectorDatasets = listFeatureVectorDatasets(sessionToken, samplePlatePermId);
-	for featureVectorDatasetAux in featureVectorDatasets:
-		if featureVectorDatasetAux.getDatasetCode() == featureVectorDatasetPermId:
-			featureVectorDataset = featureVectorDatasetAux;
-	
-	from ch.systemsx.cisd.openbis.dss.generic.server import DssScreeningApplicationContext
-	screeningServiceDSS = DssScreeningApplicationContext.getInstance().getBean("data-store-rpc-service-screening-logic-target")
-	
-	featuresFromFeatureVector = screeningServiceDSS.loadFeatures(sessionToken, [featureVectorDataset], featuresCodesFromFeatureVector);
-	return getJsonForData(featuresFromFeatureVector);
-
-def init(tr, parameters, tableBuilder):
-	inventorySpace = tr.getSpace("DEFAULT_LAB_NOTEBOOK");
-	if inventorySpace == None:
-		elnTypes = tr.getVocabularyForUpdate("ELN_TYPES_METADATA");
-		if elnTypes is not None: # We can only create the data if the ELN metadata is present, this is not true on highly customized systems.
-			tr.createNewSpace("MATERIALS", None);
-			
-			tr.createNewProject("/MATERIALS/REAGENTS");
-			tr.createNewExperiment("/MATERIALS/REAGENTS/ANTIBODY_COLLECTION", 		"MATERIALS");
-			tr.createNewExperiment("/MATERIALS/REAGENTS/CHEMICAL_COLLECTION", 		"MATERIALS");
-			tr.createNewExperiment("/MATERIALS/REAGENTS/ENZYME_COLLECTION", 			"MATERIALS");
-			tr.createNewExperiment("/MATERIALS/REAGENTS/MEDIA_COLLECTION", 			"MATERIALS");
-			tr.createNewExperiment("/MATERIALS/REAGENTS/SOLUTION_BUFFER_COLLECTION",	"MATERIALS");
-			
-			tr.createNewProject("/MATERIALS/BACTERIA");
-			tr.createNewExperiment("/MATERIALS/BACTERIA/BACTERIA_COLLECTION_1",		"MATERIALS");
-			tr.createNewProject("/MATERIALS/CELL_LINES");
-			tr.createNewExperiment("/MATERIALS/CELL_LINES/CELL_LINE_COLLECTION_1",	"MATERIALS");
-			tr.createNewProject("/MATERIALS/FLIES");
-			tr.createNewExperiment("/MATERIALS/FLIES/FLY_COLLECTION_1",				"MATERIALS");
-			tr.createNewProject("/MATERIALS/YEASTS");
-			tr.createNewExperiment("/MATERIALS/YEASTS/YEAST_COLLECTION_1",			"MATERIALS");
-			tr.createNewProject("/MATERIALS/PLASMIDS");
-			tr.createNewExperiment("/MATERIALS/PLASMIDS/PLASMID_COLLECTION_1",		"MATERIALS");
-			tr.createNewProject("/MATERIALS/POLYNUCLEOTIDES");
-			tr.createNewExperiment("/MATERIALS/POLYNUCLEOTIDES/OLIGO_COLLECTION_1",	"MATERIALS");
-			tr.createNewExperiment("/MATERIALS/POLYNUCLEOTIDES/RNA_COLLECTION_1",	"MATERIALS");
-			
-			tr.createNewSpace("METHODS", None);
-			
-			tr.createNewProject("/METHODS/PROTOCOLS");
-			tr.createNewExperiment("/METHODS/PROTOCOLS/GENERAL_PROTOCOLS", 			"METHODS");
-			tr.createNewExperiment("/METHODS/PROTOCOLS/PCR_PROTOCOLS", 				"METHODS");
-			tr.createNewExperiment("/METHODS/PROTOCOLS/WESTERN_BLOTTING_PROTOCOLS", 	"METHODS");
-			
-			tr.createNewSpace("DEFAULT_LAB_NOTEBOOK", None);
-			
-			tr.createNewProject("/DEFAULT_LAB_NOTEBOOK/DEFAULT_PROJECT");
-			tr.createNewExperiment("/DEFAULT_LAB_NOTEBOOK/DEFAULT_PROJECT/DEFAULT_EXPERIMENT", 	"DEFAULT_EXPERIMENT");
-	
-	return True;
-
-def registerUserPassword(tr, parameters, tableBuilder):
-	userId = parameters.get("userId"); #String
-	password = parameters.get("password"); #String
-	path = '../openBIS-server/jetty/bin/passwd.sh';
-	if os.path.isfile(path):
-		subprocess.call([path, 'add', userId, '-p', password]) #Adds the user, if the user exists, will fail
-		subprocess.call([path, 'change', userId, '-p', password]) #Changes the user pass, works always
-		return True;
-	else:
-		return False;
-	
-def getThreadProperties(transaction):
-  threadPropertyDict = {}
-  threadProperties = transaction.getGlobalState().getThreadParameters().getThreadProperties()
-  for key in threadProperties:
-    try:
-      threadPropertyDict[key] = threadProperties.getProperty(key)
-    except:
-      pass
-  return threadPropertyDict
-  
-def insertUpdateProject(tr, parameters, tableBuilder):
-	method = parameters.get("method"); #String
-	projectIdentifier = parameters.get("projectIdentifier"); #String
-	projectDescription = parameters.get("projectDescription"); #String
-	
-	project = None;
-	if method == "insertProject":
-		project = tr.createNewProject(projectIdentifier);
-	if method == "updateProject":
-		project = tr.getProjectForUpdate(projectIdentifier);
-	
-	project.setDescription(projectDescription);
-	
-	#Return from the call
-	return True;
-	
-def updateDataSet(tr, parameters, tableBuilder):
-	dataSetCode = parameters.get("dataSetCode"); #String
-	metadata = parameters.get("metadata"); #java.util.LinkedHashMap<String, String> where the key is the name
-	dataSet = tr.getDataSetForUpdate(dataSetCode);
-	properties = getProperties(tr, parameters);
-	#Hack - Fix Sample Lost bug from openBIS, remove when SSDM-1979 is fix
-	#Found in S211: In new openBIS versions if you set the already existing sample when doing a dataset update is deleted
-	#sampleIdentifier = parameters.get("sampleIdentifier"); #String
-	#dataSetSample = getSampleByIdentifierForUpdate(tr, sampleIdentifier);
-	#dataSet.setSample(dataSetSample);
-	#Assign Data Set properties
-	for key in metadata.keySet():
-		propertyValue = unicode(metadata[key]);
-		if propertyValue == "":
-			propertyValue = None;
-		else:
-			propertyValue = updateIfIsPropertyRichText(properties, key, propertyValue);
-		dataSet.setPropertyValue(key,propertyValue);
-	
-	#Return from the call
-	return True;
-
-def insertDataSet(tr, parameters, tableBuilder):
-	#Mandatory parameters
-	sampleIdentifier = parameters.get("sampleIdentifier"); #String
-	dataSetType = parameters.get("dataSetType"); #String
-	folderName = parameters.get("folderName"); #String
-	fileNames = parameters.get("filenames"); #List<String>
-	isZipDirectoryUpload = parameters.get("isZipDirectoryUpload"); #String
-	metadata = parameters.get("metadata"); #java.util.LinkedHashMap<String, String> where the key is the name
-	properties = getProperties(tr, parameters);
-	
-	#Create Dataset
-	dataSetSample = getSampleByIdentifierForUpdate(tr, sampleIdentifier);
-	dataSet = tr.createNewDataSet(dataSetType);
-	dataSet.setSample(dataSetSample);
-	
-	#Assign Data Set properties
-	for key in metadata.keySet():
-		propertyValue = unicode(metadata[key]);
-		if propertyValue == "":
-			propertyValue = None;
-		else:
-			propertyValue = updateIfIsPropertyRichText(properties, key, propertyValue);
-		dataSet.setPropertyValue(key,propertyValue);
-	
-	#Move All Files using a tmp directory close to the datastore
-	threadProperties = getThreadProperties(tr);
-	tempDir =  threadProperties[u'incoming-dir'] + "/tmp_eln/" + str(time.time());
-	tempDirFile = File(tempDir);
-	tempDirFile.mkdirs();
-	
-	#tempDir = System.getProperty("java.io.tmpdir");
-	dss_component = DssComponentFactory.tryCreate(parameters.get("sessionID"), OPENBISURL);
-	
-	for fileName in fileNames:
-		folderFile = File(tempDir + "/" + folderName);
-		folderFile.mkdir();
-		temFile = File(tempDir + "/" + folderName + "/" + fileName);
-		inputStream = dss_component.getFileFromSessionWorkspace(fileName);
-		outputStream = FileOutputStream(temFile);
-		IOUtils.copyLarge(inputStream, outputStream);
-		IOUtils.closeQuietly(inputStream);
-		IOUtils.closeQuietly(outputStream);
-		
-	#CASE - 1: Only one file as zip, uncompressed on the folder
-	if fileNames.size() == 1 and isZipDirectoryUpload:
-		temFile = File(tempDir + "/" + folderName + "/" + fileNames.get(0));
-		tempFolder = tempDir + "/" +  folderName;
-		zipFile = ZipFile(temFile.getAbsolutePath());
-		zipFile.extractAll(tempFolder);
-		temFile.delete();
-		tr.moveFile(tempFolder, dataSet);
-	elif fileNames.size() > 1: #CASE - 2: Multiple files on the folder
-		temFile = File(tempDir + "/"+ folderName);
-		tr.moveFile(temFile.getAbsolutePath(), dataSet);
-	else: #CASE - 3: One file only
-		temFile = File(tempDir + "/" + folderName + "/" + fileNames.get(0));
-		if 	temFile.getName().endswith(".fasta") and dataSetType == "SEQ_FILE" and PLASMAPPER_BASE_URL != None:
-			futureSVG = File(tempDir + "/" + folderName + "/generated/" + temFile.getName().replace(".fasta", ".svg"));
-			futureHTML = File(tempDir + "/" + folderName + "/generated/" + temFile.getName().replace(".fasta", ".html"));
-			try:
-				PlasmapperConnector.downloadPlasmidMap(
-					PLASMAPPER_BASE_URL,
-					tempDir + "/" + folderName + "/" + temFile.getName(),
-					tempDir + "/" + folderName + "/generated/" + temFile.getName().replace(".fasta", ".svg"),
-					tempDir + "/" + folderName + "/generated/" + temFile.getName().replace(".fasta", ".html")
-				);
-			except:
-				raise UserFailureException("Plasmapper service unavailable, try to upload your dataset later."); 
-			tr.moveFile(temFile.getParentFile().getAbsolutePath(), dataSet);
-		else:
-			tr.moveFile(temFile.getAbsolutePath(), dataSet);
-	#Clean Files from workspace
-	for fileName in fileNames:
-		dss_component.deleteSessionWorkspaceFile(fileName);
-	
-	#Return from the call
-	return True;
-
-def copyAndLinkAsParent(tr, parameters, tableBuilder):
-	newSampleIdentifier = parameters.get("newSampleIdentifier"); #String
-	sampleIdentifierToCopyAndLinkAsParent = parameters.get("sampleIdentifierToCopyAndLinkAsParent"); #String
-	experimentIdentifierToAssignToCopy = parameters.get("experimentIdentifierToAssignToCopy"); #String
-	
-	#Create new Sample
-	sampleToCopyAndLinkAsParent = getSampleByIdentifierForUpdate(tr, sampleIdentifierToCopyAndLinkAsParent); #Retrieve Sample
-	newSample = tr.createNewSample(newSampleIdentifier, sampleToCopyAndLinkAsParent.getSampleType()); #Create Sample given his id
-	
-	#Assign Parent
-	newSample.setParentSampleIdentifiers([sampleIdentifierToCopyAndLinkAsParent]);
-	
-	#Assign properties
-	propertiesDefinitions = searchService.listPropertiesDefinitionsForSampleType(sampleToCopyAndLinkAsParent.getSampleType());
-	for propertyDefinition in propertiesDefinitions:
-		propCode = propertyDefinition.getPropertyTypeCode();
-		propValue = sampleToCopyAndLinkAsParent.getPropertyValue(propCode);
-		if propValue is not None:
-			newSample.setPropertyValue(propCode, propValue);
-	
-	#Assign Experiment
-	experimentToAssignToCopy = tr.getExperiment(experimentIdentifierToAssignToCopy);
-	newSample.setExperiment(experimentToAssignToCopy);
-	
-	return True;
-	
-def copySample(tr, parameters, tableBuilder):
-	#Store Children to copy later
-	sampleSpace = parameters.get("sampleSpace"); #String
-	sampleCode = parameters.get("sampleCode"); #String
-	sampleIdentifier = '/' + sampleSpace + '/' + sampleCode;
-	
-	sampleChildren = parameters.get("sampleChildren"); #List<String> Identifiers are in SPACE/CODE format
-	parameters.put("sampleChildren", []); #List<String> Identifiers are in SPACE/CODE format
-	
-	#Create new Sample
-	parameters.put("method", "insertSample"); #List<String> Identifiers are in SPACE/CODE format
-	insertUpdateSample(tr, parameters, tableBuilder);
-	
-	#Copy children and attach to Sample
-	if sampleChildren != None:
-		for sampleChildIdentifier in sampleChildren:
-			child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample child to copy
-			
-			copyChildCode = None
-			try: #For autogenerated children that have the code as sufix
-				indexFromCopiedChildrenParentCode = child.getCode().index('_')
-				copyChildCode = parameters.get("sampleCode") + child.getCode()[indexFromCopiedChildrenParentCode:];
-			except: #For all other children
-				copyChildCode = parameters.get("sampleCode") + "_" + child.getCode();
-
-			copyChildIdentifier = "/" + parameters.get("sampleSpace") + "/" + copyChildCode;
-			
-			# Create new sample children
-			childCopy = tr.createNewSample(copyChildIdentifier, child.getSampleType()); #Create Sample given his id
-			childParents = childCopy.getParentSampleIdentifiers();
-			childParents.add(sampleIdentifier);
-			childCopy.setParentSampleIdentifiers(childParents);
-			if(child.getExperiment() is not None):
-				childCopy.setExperiment(child.getExperiment());
-			searchService = tr.getSearchService();
-			propertiesDefinitions = searchService.listPropertiesDefinitionsForSampleType(child.getSampleType());
-			for propertyDefinition in propertiesDefinitions:
-				propCode = propertyDefinition.getPropertyTypeCode();
-				propValue = getCopySampleChildrenPropertyValue(
-					propCode,
-					child.getPropertyValue(propCode),
-					parameters.get("notCopyProperties"),
-					parameters.get("defaultBenchPropertyList"),
-					parameters.get("defaultBenchProperties")
-				);
-				if propValue != None:
-					childCopy.setPropertyValue(propCode, propValue);
-			
-	return True;
-
-#This method is used to return the properties, deleting the storage ones and setting the default storage
-def getCopySampleChildrenPropertyValue(propCode, propValue, notCopyProperties, defaultBenchPropertyList, defaultBenchProperties):
-	isPropertyToSkip = any(propCode == s for s in notCopyProperties);
-	isDefaultBenchProperty = any(propCode == s for s in defaultBenchPropertyList);
-	if isPropertyToSkip:
-		return None;
-	elif isDefaultBenchProperty:
-		return str(defaultBenchProperties[propCode]);
-	else:
-		return propValue;
-
-def batchOperation(tr, parameters, tableBuilder):
-	for operationParameters in parameters.get("operations"):
-		if operationParameters.get("method") == "updateSample":
-			operationParameters["sessionToken"] = parameters.get("sessionToken");
-			insertUpdateSample(tr, operationParameters, tableBuilder);
-	return True;
-	
-def insertUpdateSample(tr, parameters, tableBuilder):
-	
-	#Mandatory parameters
-	sampleSpace = parameters.get("sampleSpace"); #String
-	sampleProject = parameters.get("sampleProject"); #String
-	sampleExperiment = parameters.get("sampleExperiment"); #String
-	sampleCode = parameters.get("sampleCode"); #String
-	sampleType = parameters.get("sampleType"); #String
-	sampleProperties = parameters.get("sampleProperties"); #java.util.LinkedHashMap<String, String> where the key is the name
-	changesToDo = parameters.get("changesToDo");
-	
-	#Optional parameters
-	sampleParents = parameters.get("sampleParents"); #List<String> Identifiers are in SPACE/CODE format
-	sampleChildrenNew = parameters.get("sampleChildrenNew"); #List<java.util.LinkedHashMap<String, String>>
-	sampleChildren = parameters.get("sampleChildren"); #List<String> Identifiers are in SPACE/CODE format
-	sampleChildrenRemoved = parameters.get("sampleChildrenRemoved"); #List<String> Identifiers are in SPACE/CODE format
-	
-	#Create/Get for update sample	
-	sampleIdentifier = '/' + sampleSpace + '/' + sampleCode;
-	
-	method = parameters.get("method");
-	if method == "insertSample":
-		sample = tr.createNewSample(sampleIdentifier, sampleType); #Create Sample given his id
-		
-	if method == "updateSample":
-		sample = getSampleByIdentifierForUpdate(tr, sampleIdentifier); #Retrieve Sample
-	
-	#Obtain space
-	space = None;
-	if sampleSpace != None:
-		space = tr.getSpace(sampleSpace);
-		if space == None:
-			space = tr.createNewSpace(sampleSpace, None);
-	
-	#Obtain experiment
-	experiment = None;
-	if sampleSpace != None and sampleProject != None and sampleExperiment != None:
-		experimentIdentifier = "/" + sampleSpace + "/" + sampleProject + "/" + sampleExperiment;
-		experiment = tr.getExperiment(experimentIdentifier);
-	
-	#Assign experiment
-	if experiment != None:
-		sample.setExperiment(experiment);
-	#Assign sample properties
-	if sampleProperties != None:
-		properties = getProperties(tr, parameters);
-		for key in sampleProperties.keySet():
-			propertyValue = sampleProperties[key];
-			if propertyValue == "":
-				propertyValue = None;
-			else:
-				propertyValue = updateIfIsPropertyRichText(properties, key, propertyValue);
-			sample.setPropertyValue(key, unicode(propertyValue));
-	#Add sample parents
-	if sampleParents != None:
-		sample.setParentSampleIdentifiers(sampleParents);
-	
-	#Create new sample children
-	sampleChildrenNewIdentifiers = [];
-	if sampleChildrenNew != None:
-		for newSampleChild in sampleChildrenNew:
-			child = tr.createNewSample(newSampleChild["identifier"], newSampleChild["sampleTypeCode"]); #Create Sample given his id
-			sampleChildrenNewIdentifiers.append(newSampleChild["identifier"]);
-			child.setParentSampleIdentifiers([sampleIdentifier]);
-			if experiment != None:
-				child.setExperiment(experiment);
-			for key in newSampleChild["properties"].keySet():
-				propertyValue = unicode(newSampleChild["properties"][key]);
-				if propertyValue == "":
-					propertyValue = None;
-				
-				child.setPropertyValue(key,propertyValue);
-		
-	#Add sample children that are not newly created
-	if sampleChildren != None:
-		for sampleChildIdentifier in sampleChildren:
-			if sampleChildIdentifier not in sampleChildrenNewIdentifiers:
-				child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample
-				childParents = child.getParentSampleIdentifiers();
-				childParents.add(sampleIdentifier);
-				child.setParentSampleIdentifiers(childParents);
-
-	#Remove sample children
-	if sampleChildrenRemoved != None:
-		for sampleChildIdentifier in sampleChildrenRemoved:
-			child = getSampleByIdentifierForUpdate(tr, sampleChildIdentifier); #Retrieve Sample
-			if child != None: #The new created ones will not be found
-				childParents = child.getParentSampleIdentifiers();
-				childParents.remove(sampleIdentifier);
-				child.setParentSampleIdentifiers(childParents);
-	
-	#Changes to do
-	if changesToDo is not None:
-		for change in changesToDo:
-			sampleWithChanges = getSampleByIdentifierForUpdate(tr, change["identifier"]); #Retrieve Sample
-			for key in change["properties"].keySet():
-					propertyValue = unicode(change["properties"][key]);
-					if propertyValue == "":
-						propertyValue = None;
-					sampleWithChanges.setPropertyValue(key,propertyValue);
-		
-	#Return from the call
-	return True;
-	
-def moveSample(tr, parameters, tableBuilder):
-	sampleIdentifier = parameters.get("sampleIdentifier"); #String
-	experimentIdentifier = parameters.get("experimentIdentifier"); #String
-	experimentType = parameters.get("experimentType"); #String
-	
-	sample = getSampleByIdentifierForUpdate(tr, sampleIdentifier); #Retrieve Sample
-	experiment = tr.getExperiment(experimentIdentifier); #Retrieve Experiment
-	
-	if experiment is None:
-		experiment = tr.createNewExperiment(experimentIdentifier, experimentType);
-	
-	sample.setExperiment(experiment);
-	return True
-
-def insertUpdateExperiment(tr, parameters, tableBuilder):
-	
-	#Mandatory parameters
-	experimentType = parameters.get("experimentType"); #String
-	experimentIdentifier = parameters.get("experimentIdentifier"); #String
-	experimentProperties = parameters.get("experimentProperties"); #java.util.LinkedHashMap<String, String> where the key is the name
-	properties = getProperties(tr, parameters);
-	
-	experiment = None;
-	method = parameters.get("method");
-	if method == "insertExperiment":
-		experiment = tr.createNewExperiment(experimentIdentifier, experimentType); #Create Experiment given his id
-	if method == "updateExperiment":
-		experiment = tr.getExperimentForUpdate(experimentIdentifier); #Retrieve Experiment
-	
-	for key in experimentProperties.keySet():
-		propertyValue = unicode(experimentProperties[key]);
-		if propertyValue == "":
-			propertyValue = None;
-		else:
-			propertyValue = updateIfIsPropertyRichText(properties, key, propertyValue);
-		experiment.setPropertyValue(key,propertyValue);
-	
-	return True;
-
-def searchSamples(tr, parameters, tableBuilder, sessionId):
-	v3 = HttpInvokerUtils.createServiceStub(IApplicationServerApi, OPENBISURL + IApplicationServerApi.SERVICE_URL, 30 * 1000);
-	
-	###############
-	############### V3 Search
-	###############
-	fechOptions = parameters;
-	
-	# FreeText
-	anyFieldContains = fechOptions.get("anyFieldContains");
-	
-	# Attributes
-	samplePermId = fechOptions.get("samplePermId");
-	withExperimentWithProjectPermId = fechOptions.get("withExperimentWithProjectPermId");
-	sampleIdentifier = fechOptions.get("sampleIdentifier");
-	sampleCode = fechOptions.get("sampleCode");
-	sampleTypeCode = fechOptions.get("sampleTypeCode");
-	registrationDate = fechOptions.get("registrationDate");
-	modificationDate = fechOptions.get("modificationDate");
-		
-	# Properties
-	properyKeyValueList = fechOptions.get("properyKeyValueList");
-	
-	# Sub Queries
-	sampleExperimentIdentifier = fechOptions.get("sampleExperimentIdentifier");
-	sampleContainerPermId = fechOptions.get("sampleContainerPermId");
-	
-	# Hierarchy Options
-	withProperties = fechOptions.get("withProperties");
-	withParents = fechOptions.get("withParents");
-	withChildren = fechOptions.get("withChildren");
-	withAncestors = fechOptions.get("withAncestors");
-	withDescendants = fechOptions.get("withDescendants");
-
-	#Search Setup
-	criterion = SampleSearchCriteria();
-	criterion.withAndOperator();
-	fetchOptions = SampleFetchOptions();
-	
-	#Free Text
-	if anyFieldContains is not None:
-		words = anyFieldContains.split();
-		for word in words:
-			if (word != None) and (word != ""):
-				criterion.withAnyField().thatContains(word);
-	
-	#Attributes
-	if samplePermId is not None:
-		criterion.withPermId().thatEquals(samplePermId);
-	if withExperimentWithProjectPermId is not None:
-		criterion.withExperiment().withProject().withPermId().thatEquals(withExperimentWithProjectPermId);
-	if sampleIdentifier is not None:
-		criterion.withId().thatEquals(SampleIdentifier(sampleIdentifier));
-	if sampleCode is not None:
-		criterion.withCode().thatEquals(sampleCode);
-	if sampleTypeCode is not None:
-		criterion.withType().withCode().thatEquals(sampleTypeCode);
-	if registrationDate is not None:
-		formatter = SimpleDateFormat("yyyy-MM-dd");
-		registrationDateObject = formatter.parse(registrationDate);
-		criterion.withRegistrationDate().thatEquals(registrationDateObject);
-	if modificationDate is not None:
-		formatter = SimpleDateFormat("yyyy-MM-dd");
-		modificationDateObject = formatter.parse(modificationDate);
-		criterion.withModificationDate().thatEquals(modificationDateObject);
-	
-	#Properties
-	if properyKeyValueList is not None:
-		for keyValuePair in properyKeyValueList:
-			for propertyTypeCode in keyValuePair.keySet():
-				propertyValue = keyValuePair.get(propertyTypeCode);
-				criterion.withProperty(propertyTypeCode).thatEquals(propertyValue);
-	
-	#Sub queries
-	if sampleExperimentIdentifier is not None:
-		criterion.withExperiment().withId().thatEquals(ExperimentIdentifier(sampleExperimentIdentifier));
-	if sampleContainerPermId is not None:
-		criterion.withContainer().withPermId().thatEquals(sampleContainerPermId);
-
-	#Hierarchy Fetch Options
-	if withProperties:
-		fetchOptions.withProperties();
-	if withParents:	
-		fetchOptionsParents = SampleFetchOptions();
-		fetchOptionsParents.withProperties();
-		fetchOptionsParents.withType();
-		fetchOptionsParents.withSpace();
-		fetchOptionsParents.withExperiment();
-		fetchOptionsParents.withRegistrator();
-		fetchOptionsParents.withModifier();
-		fetchOptions.withParentsUsing(fetchOptionsParents);
-	if withChildren:
-		fetchOptionsChildren = SampleFetchOptions();
-		fetchOptionsChildren.withProperties();
-		fetchOptionsChildren.withType();
-		fetchOptionsChildren.withSpace();
-		fetchOptionsChildren.withExperiment();
-		fetchOptionsChildren.withRegistrator();
-		fetchOptionsChildren.withModifier();
-		fetchOptions.withChildrenUsing(fetchOptionsChildren);
-	if withAncestors:
-		fetchOptionsAncestors = SampleFetchOptions();
-		fetchOptionsAncestors.withProperties();
-		fetchOptionsAncestors.withType();
-		fetchOptionsAncestors.withSpace();
-		fetchOptionsAncestors.withExperiment();
-		fetchOptionsAncestors.withRegistrator();
-		fetchOptionsAncestors.withModifier();
-		fetchOptionsAncestors.withParentsUsing(fetchOptionsAncestors);
-		fetchOptions.withParentsUsing(fetchOptionsAncestors);
-	if withDescendants:
-		fetchOptionsDescendants = SampleFetchOptions();
-		fetchOptionsDescendants.withProperties();
-		fetchOptionsDescendants.withType();
-		fetchOptionsDescendants.withSpace();
-		fetchOptionsDescendants.withExperiment();
-		fetchOptionsDescendants.withRegistrator();
-		fetchOptionsDescendants.withModifier();
-		fetchOptionsDescendants.withChildrenUsing(fetchOptionsDescendants);
-		fetchOptions.withChildrenUsing(fetchOptionsDescendants);
-	
-	#Standard Fetch Options, always use
-	fetchOptions.withType();
-	fetchOptions.withSpace();
-	fetchOptions.withExperiment();
-	fetchOptions.withRegistrator();
-	fetchOptions.withModifier();
-	
-	###############
-	###############
-	###############
-	
-	
-	##
-	## Custom (Interceptor to modify standard results)
-	##
-	result = None;
-	
-	isCustom = parameters.get("custom"); #Boolean
-	if isCustom:
-		result = searchSamplesCustom(tr, parameters, tableBuilder, v3, criterion, fetchOptions);
-	else:
-		result = v3.searchSamples(parameters.get("sessionToken"), criterion, fetchOptions);
-	
-	##
-	##
-	##
-	
-	###
-	### Json Conversion
-	###
-	objectMapper = GenericObjectMapper();
-	resultAsString = objectMapper.writeValueAsString(result);
-	return resultAsString;
-
-def searchSamplesCustom(tr, parameters, tableBuilder, v3, criterion, fetchOptions):
-	# SEARCH CUSTOM PLACEHOLDER START
-	return [];
-	# SEARCH CUSTOM PLACEHOLDER END
-	
-def searchSamplesNexus(tr, parameters, tableBuilder, v3, criterion, fetchOptions):
-	
-	toReturnPermIds = []; #
-	#Right Givers: The sample with all his descendants
-	#1. Request user search with all right givers
-	descendantsFetchOptions = SampleFetchOptions();
-	descendantsFetchOptions.withChildrenUsing(descendantsFetchOptions);
-	requestedResults = v3.searchSamples(tr.getOpenBisServiceSessionToken(), criterion, descendantsFetchOptions);
- 	
-	if requestedResults.getTotalCount() > 0:
-		#Prepare data structures for the rights givers to accelerate the process
-		requestedToRigthsGivers = {};
-		allRightsGivers = set();
-		for requestedResult in requestedResults.getObjects():
-			rigthsGivers = getDescendantsTreePermIdsStringSet([requestedResult]);
-			allRightsGivers = allRightsGivers | rigthsGivers;
-			requestedToRigthsGivers[requestedResult.getPermId().getPermId()] = rigthsGivers;
- 		
-		#2. Search for the visible right givers
- 		
-		visibleRightGivers = v3.getSamples(parameters.get("sessionToken"), getSamplePermIdsObjFromPermIdStrings(allRightsGivers), SampleFetchOptions());
-		visibleRightGiversPermIds = getDescendantsTreePermIdsStringSet(visibleRightGivers.values());
-		#3. Intersect what the user wants and is available to see and keep matches
-		for requestedResultPermIdString in requestedToRigthsGivers:
-			rigthsGiversPermIds = requestedToRigthsGivers[requestedResultPermIdString];
-			intersection = rigthsGiversPermIds & visibleRightGiversPermIds;
-			if len(intersection) > 0:
-				toReturnPermIds.append(SamplePermId(requestedResultPermIdString));
- 	
-	#Now we complete those permIds with all information available for them using a search by the ETL server
-	systemResultAsMap = v3.getSamples(tr.getOpenBisServiceSessionToken(), toReturnPermIds, fetchOptions);
-	systemResult = ArrayList(systemResultAsMap.values());
-	systemSearchResult = SearchResult(systemResult, systemResult.size());
- 	
-	return systemSearchResult
- 
-def getSamplePermIdsObjFromPermIdStrings(samplePermIds):
-	values = [];
-	for samplePermId in samplePermIds:
-		values.append(SamplePermId(samplePermId));
-	return values;
- 	
-def getDescendantsTreePermIdsStringSet(samples):
-	descendantsPermIds = set();
-	for sample in samples:
-		descendantsQueue = [sample];
-		while len(descendantsQueue) > 0:
-			queueSample = descendantsQueue.pop();
-			if queueSample.getPermId().getPermId() not in descendantsPermIds:
-				descendantsPermIds.add(queueSample.getPermId().getPermId());
-				if queueSample.getFetchOptions().hasChildren():
-					for child in queueSample.getChildren():
-						descendantsQueue.append(child);
-	return descendantsPermIds;
\ No newline at end of file