Skip to content
Snippets Groups Projects
OpenBISScreeningML.java 93 KiB
Newer Older
  • Learn to ignore specific revisions
  •      *         plate space code, plate code, row, column }</code>
         */
        public static Object[][][] getGeneMappingForPlates(String[] platesCodes)
        {
            checkLoggedIn();
            final List<PlateWellMaterialMapping> mappingList =
    
                    openbis.listPlateMaterialMapping(toPlates(platesCodes), MaterialTypeIdentifier.GENE);
    
            int size = 0;
            for (PlateWellMaterialMapping mapping : mappingList)
            {
                size +=
                        mapping.getPlateGeometry().getNumberOfRows()
                                * mapping.getPlateGeometry().getNumberOfColumns();
            }
            final Object[][][] result = new Object[2][size][];
            int resultIdx = 0;
            for (PlateWellMaterialMapping mapping : mappingList)
            {
                for (int row = 1; row <= mapping.getPlateGeometry().getNumberOfRows(); ++row)
                {
                    for (int col = 1; col <= mapping.getPlateGeometry().getNumberOfColumns(); ++col)
                    {
                        final List<MaterialIdentifier> genes = mapping.getMaterialsForWell(row, col);
                        result[0][resultIdx] = new Object[genes.size()];
                        for (int i = 0; i < genes.size(); ++i)
                        {
                            result[0][resultIdx][i] = genes.get(i).getMaterialCode();
                        }
                        final PlateIdentifier plate = mapping.getPlateIdentifier();
                        result[1][resultIdx] =
                                new Object[]
                                    { createPlateWellDescription(plate, row, col),
                                            plate.getAugmentedCode(), plate.getPermId(),
                                            plate.tryGetSpaceCode(), plate.getPlateCode(), row, col, };
                        ++resultIdx;
                    }
                }
            }
            return result;
        }
    
    
        private static List<PlateIdentifier> toPlates(String[] augmentedPlateCodes)
        {
            final List<PlateIdentifier> result =
                    new ArrayList<PlateIdentifier>(augmentedPlateCodes.length);
            for (String plateCode : augmentedPlateCodes)
            {
                result.add(PlateIdentifier.createFromAugmentedCode(plateCode));
            }
            return result;
        }
    
    
        private static Object[][] listProperties(Map<String, String> properties)
        {
            if (properties == null || properties.isEmpty())
            {
                return new Object[0][];
            }
    
            List<Map.Entry<String, String>> list =
                    new ArrayList<Map.Entry<String, String>>(properties.entrySet());
            Object[][] result = new Object[list.size()][2];
            for (int i = 0; i < list.size(); i++)
            {
                result[i] = new Object[]
                    { list.get(i).getKey(), list.get(i).getValue() };
            }
            return result;
        }
    
    
        private static Plate getPlate(String augmentedPlateCode)
        {
            Plate plateIdentifier = plateCodeToPlateMap.get(augmentedPlateCode);
            if (plateIdentifier == null)
            {
    
                throw new RuntimeException("No plate with that code '" + augmentedPlateCode
                        + "' found.");
    
        private static ExperimentIdentifier getExperimentIdentifierOrFail(String experiment)
        {
            ExperimentIdentifier experimentIdentifier = experimentCodeToExperimentMap.get(experiment);
            if (experimentIdentifier == null)
            {
                String errorMessage = String.format("No experiment with code '%s' found.", experiment);
                throw new RuntimeException(errorMessage);
            }
            return experimentIdentifier;
        }
    
    
        private static String createPlateWellDescription(PlateIdentifier p, FeatureVector f)
        {
            return createPlateWellDescription(p, f.getWellPosition().getWellRow(), f.getWellPosition()
                    .getWellColumn());
        }
    
    
        private static String createPlateWellDescription(PlateIdentifier p, int row, int col)
        {
            return p.getPlateCode() + ":" + translateRowNumberIntoLetterCode(row) + col;
        }
    
        /**
         * Translates a row number into letter code. Thus, 1 -> A, 2 -> B, 26 -> Z, 27 -> AA, 28 -> AB,
         * etc.
         */
        private static String translateRowNumberIntoLetterCode(int rowNumber)
        {
            int rowIndex = rowNumber - 1;
            String code = "";
            while (rowIndex >= 0)
            {
                code = (char) (rowIndex % 26 + 'A') + code;
                rowIndex = rowIndex / 26 - 1;
            }
            return code;
        }
    
        private static void checkLoggedIn()
        {
            if (openbis == null)
            {
    
                if (Login.OPENBIS_TOKEN_FILE.exists())
                {
                    BufferedReader br = null;
                    try
                    {
                        br = new BufferedReader(new FileReader(Login.OPENBIS_TOKEN_FILE));
                        final String token = br.readLine();
                        br.close();
                        br = new BufferedReader(new FileReader(Login.OPENBIS_SERVER_URL_FILE));
                        final String serverUrl = br.readLine();
                        br.close();
                        br = null;
    
                        IScreeningOpenbisServiceFacade facade =
                                facadeFactory.tryToCreate(token, serverUrl);
    
                        {
                            throw new RuntimeException("Login failed.");
                        }
    
                    } catch (IOException ex)
                    {
                        if (openbis == null)
                        {
                            throw new RuntimeException("Login failed.", ex);
                        }
                    } finally
                    {
                        if (br != null)
                        {
                            try
                            {
                                br.close();
                            } catch (IOException ex)
                            {
                                // Silence this.
                            }
                        }
                    }
                }
                if (openbis == null)
                {
                    throw new RuntimeException("Not logged in.");
                }