Ejemplo n.º 1
0
 private static string[] finishSplit(java.util.List <string> list, string input, int
                                     begin, int maxSize, int limit)
 {
     // Add trailing text.
     if (begin < input.Length)
     {
         list.add(Sharpen.StringHelper.Substring(input, begin));
     }
     else
     {
         if (limit != 0)
         {
             // No point adding the empty string if limit == 0, just to remove it below.
             list.add(string.Empty);
         }
     }
     // Remove all trailing empty matches in the limit == 0 case.
     if (limit == 0)
     {
         int i = list.size() - 1;
         while (i >= 0 && string.IsNullOrEmpty(list.get(i)))
         {
             list.remove(i);
             i--;
         }
     }
     // Convert to an array.
     return(list.toArray(new string[list.size()]));
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets all tasks from ProjectFile instance.
        /// </summary>
        /// <param name="projectFile">ProjectFile instance.</param>
        /// <returns>List of tasks.</returns>
        protected Task[] getAllProjectTasks(ProjectFile projectFile)
        {
            //get tasks
            java.util.List taskList = projectFile.AllTasks;

            //convert to array
            object[] allTaskObjs = taskList.toArray();

            //create alternate storage
            Task[] allTasks = new Task[allTaskObjs.Length];

            //then cast each object to a Task
            for (int o = 0; o < allTaskObjs.Length; o++)
            {
                //cast
                allTasks[o] = (Task)allTaskObjs[o];
                //then nullify the initial value, be nice to your memory and it WILL return the favor
                allTaskObjs[o] = null;
            }

            //nullify primary storage
            allTaskObjs = null;

            //then return the secondary list, otherwise permit a run-time exception
            //this is a wild bunch of magic anyways
            return(allTasks);
        }
 /**
  * Gets an array based on an iterator.
  * <p>
  * As the wrapped Iterator is traversed, an ArrayList of its values is
  * created. At the end, this is converted to an array.
  *
  * @param iterator  the iterator to use, not null
  * @return an array of the iterator contents
  * @throws NullPointerException if iterator parameter is null
  */
 public static Object[] toArray(java.util.Iterator <Object> iterator)
 {
     if (iterator == null)
     {
         throw new java.lang.NullPointerException("Iterator must not be null");
     }
     java.util.List <Object> list = toList(iterator, 100);
     return(list.toArray());
 }
Ejemplo n.º 4
0
        public static void sort(java.util.List <T> list)
        {
            Object[] a = list.toArray();
            Array.Sort <Object>(a);
            ListIterator <T> i = list.listIterator();

            for (int j = 0; j < a.Length; j++)
            {
                i.next();
                i.set((T)a[j]);
            }
        }
 /**
  * Gets an array based on an iterator.
  * <p>
  * As the wrapped Iterator is traversed, an ArrayList of its values is
  * created. At the end, this is converted to an array.
  *
  * @param iterator  the iterator to use, not null
  * @param arrayClass  the class of array to create
  * @return an array of the iterator contents
  * @throws NullPointerException if iterator parameter is null
  * @throws NullPointerException if arrayClass is null
  * @throws ClassCastException if the arrayClass is invalid
  */
 public static Object[] toArray(java.util.Iterator <Object> iterator, Type arrayClass)
 {
     if (iterator == null)
     {
         throw new java.lang.NullPointerException("Iterator must not be null");
     }
     if (arrayClass == null)
     {
         throw new java.lang.NullPointerException("Array class must not be null");
     }
     java.util.List <Object> list = toList(iterator, 100);
     return(list.toArray((Object[])java.lang.reflect.Array.newInstance(arrayClass, list.size())));
 }
        public static IList <String> getIList(this java.util.List list)
        {
            List <String> result = new List <string>();

            foreach (var obj in list.toArray())
            {
                if (obj.GetType().Equals(typeof(String)))
                {
                    result.Add(obj as String);
                }
                else
                {
                    result.Add(obj.ToString());
                }
            }

            return(result);
        }
        public void inform(ResourceLoader loader)
        {
            string commonWordFiles = (string)args.get("words");

            ignoreCase = getBoolean("ignoreCase", false);

            if (commonWordFiles != null)
            {
                try {
                    List /*<String>*/ files = StrUtils.splitFileNames(commonWordFiles);
                    if (commonWords == null && files.size() > 0)
                    {
                        // default stopwords list has 35 or so words, but maybe don't make it
                        // that big to start
                        commonWords = new CharArraySet(files.size() * 10, ignoreCase);
                    }
                    for (var iter = files.iterator(); iter.hasNext();)
                    {
                        string            file  = (string)iter.next();
                        List /*<String>*/ wlist = loader.getLines(file.Trim());
                        // TODO: once StopFilter.makeStopSet(List) method is available, switch
                        // to using that so we can avoid a toArray() call
                        commonWords.addAll(CommonGramsFilter.makeCommonSet((string[])wlist
                                                                           .toArray(new string[0]), ignoreCase));
                    }
                } catch (IOException e) {
                    throw new System.ApplicationException("Unexpected exception", e);
                }
            }
            else
            {
#pragma warning disable 612
                commonWords = CommonGramsFilter.makeCommonSet(
                    StopAnalyzer.ENGLISH_STOP_WORDS, ignoreCase);
#pragma warning restore 612
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Get a datatable with all tables indexes.
        /// </summary>
        /// <param name="p_table">Table name.</param>
        public override System.Data.DataTable QueryTablesIndexes(string p_table)
        {
            if (p_table == null)
            {
                System.Data.DataTable v_tables = this.QueryTables(false);

                System.Data.DataTable v_all_indexes = new System.Data.DataTable();
                v_all_indexes.Columns.Add("table_name");
                v_all_indexes.Columns.Add("index_name");
                v_all_indexes.Columns.Add("column_name");
                v_all_indexes.Columns.Add("uniqueness");

                foreach (System.Data.DataRow v_tabletemp in v_tables.Rows)
                {
                    System.Data.DataRow v_row;

                    System.Data.DataTable v_indexes = new System.Data.DataTable("TableIndexes");
                    v_indexes.Columns.Add("table_name");
                    v_indexes.Columns.Add("index_name");
                    v_indexes.Columns.Add("column_name");
                    v_indexes.Columns.Add("uniqueness");

                    com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                    com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(v_tabletemp["table_name"].ToString().Replace("[", "").Replace("]", ""));
                    java.util.List v_list = v_table.getIndexes();
                    object[]       v_obj  = v_list.toArray();
                    foreach (object o in v_obj)
                    {
                        com.healthmarketscience.jackcess.Index v_index = (com.healthmarketscience.jackcess.Index)o;
                        java.util.List v_list2 = v_index.getColumns();
                        object[]       v_obj2  = v_list2.toArray();
                        foreach (object o2 in v_obj2)
                        {
                            com.healthmarketscience.jackcess.Index.Column c = (com.healthmarketscience.jackcess.Index.Column)o2;

                            v_row = v_indexes.NewRow();
                            v_row["table_name"]  = v_tabletemp["table_name"].ToString();
                            v_row["index_name"]  = v_index.getName();
                            v_row["column_name"] = c.getName();
                            if (v_index.isUnique())
                            {
                                v_row["uniqueness"] = "Unique";
                            }
                            else
                            {
                                v_row["uniqueness"] = "Non Unique";
                            }
                            v_indexes.Rows.Add(v_row);
                        }
                    }

                    v_all_indexes.Merge(v_indexes);
                }

                return(v_all_indexes);
            }
            else
            {
                System.Data.DataRow v_row;

                System.Data.DataTable v_indexes = new System.Data.DataTable("TableIndexes");
                v_indexes.Columns.Add("table_name");
                v_indexes.Columns.Add("index_name");
                v_indexes.Columns.Add("column_name");
                v_indexes.Columns.Add("uniqueness");

                com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(p_table.Replace("[", "").Replace("]", ""));
                java.util.List v_list = v_table.getIndexes();
                object[]       v_obj  = v_list.toArray();
                foreach (object o in v_obj)
                {
                    com.healthmarketscience.jackcess.Index v_index = (com.healthmarketscience.jackcess.Index)o;
                    java.util.List v_list2 = v_index.getColumns();
                    object[]       v_obj2  = v_list2.toArray();
                    foreach (object o2 in v_obj2)
                    {
                        com.healthmarketscience.jackcess.Index.Column c = (com.healthmarketscience.jackcess.Index.Column)o2;

                        v_row = v_indexes.NewRow();
                        v_row["table_name"]  = p_table;
                        v_row["index_name"]  = v_index.getName();
                        v_row["column_name"] = c.getName();
                        if (v_index.isUnique())
                        {
                            v_row["uniqueness"] = "Unique";
                        }
                        else
                        {
                            v_row["uniqueness"] = "Non Unique";
                        }
                        v_indexes.Rows.Add(v_row);
                    }
                }

                return(v_indexes);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Get a datatable with all tables primary keys.
        /// </summary>
        /// <param name="p_schema">Schema name.</param>
        /// <param name="p_table">Table name.</param>
        public override System.Data.DataTable QueryTablesPrimaryKeys(string p_schema, string p_table)
        {
            if (p_table == null)
            {
                System.Data.DataTable v_tables = this.QueryTables(false);

                System.Data.DataTable v_pk_all = new System.Data.DataTable();
                v_pk_all.Columns.Add("constraint_name");
                v_pk_all.Columns.Add("column_name");
                v_pk_all.Columns.Add("table_name");

                foreach (System.Data.DataRow v_tabletemp in v_tables.Rows)
                {
                    System.Data.DataRow v_row;

                    System.Data.DataTable v_pk = new System.Data.DataTable("TablePrimaryKeys");
                    v_pk.Columns.Add("constraint_name");
                    v_pk.Columns.Add("column_name");
                    v_pk.Columns.Add("table_name");

                    com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                    com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(v_tabletemp["table_name"].ToString().Replace("[", "").Replace("]", ""));
                    com.healthmarketscience.jackcess.Index    v_index    = v_table.getPrimaryKeyIndex();

                    java.util.List v_list = v_index.getColumns();
                    object[]       v_obj  = v_list.toArray();
                    foreach (object o in v_obj)
                    {
                        com.healthmarketscience.jackcess.Index.Column c = (com.healthmarketscience.jackcess.Index.Column)o;

                        v_row = v_pk.NewRow();
                        v_row["constraint_name"] = v_index.getName();
                        v_row["column_name"]     = c.getName();
                        v_row["table_name"]      = v_tabletemp["table_name"].ToString();
                        v_pk.Rows.Add(v_row);
                    }

                    v_pk_all.Merge(v_pk);
                }

                return(v_pk_all);
            }
            else
            {
                System.Data.DataRow v_row;

                System.Data.DataTable v_pk = new System.Data.DataTable("TablePrimaryKeys");
                v_pk.Columns.Add("constraint_name");
                v_pk.Columns.Add("column_name");
                v_pk.Columns.Add("table_name");

                com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(p_table.Replace("[", "").Replace("]", ""));
                com.healthmarketscience.jackcess.Index    v_index    = v_table.getPrimaryKeyIndex();

                java.util.List v_list = v_index.getColumns();
                object[]       v_obj  = v_list.toArray();
                foreach (object o in v_obj)
                {
                    com.healthmarketscience.jackcess.Index.Column c = (com.healthmarketscience.jackcess.Index.Column)o;

                    v_row = v_pk.NewRow();
                    v_row["constraint_name"] = v_index.getName();
                    v_row["column_name"]     = c.getName();
                    v_row["table_name"]      = p_table;
                    v_pk.Rows.Add(v_row);
                }

                return(v_pk);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Get a datatable with all tables foreign keys.
        /// </summary>
        /// <param name="p_table">Table name.</param>
        public override System.Data.DataTable QueryTablesForeignKeys(string p_table)
        {
            if (p_table == null)
            {
                System.Data.DataTable v_tables = this.QueryTables(false);

                System.Data.DataTable v_all_fks = new System.Data.DataTable();
                v_all_fks.Columns.Add("table_name");
                v_all_fks.Columns.Add("constraint_name");
                v_all_fks.Columns.Add("r_table_name");
                v_all_fks.Columns.Add("column_name");
                v_all_fks.Columns.Add("r_column_name");
                v_all_fks.Columns.Add("update_rule");
                v_all_fks.Columns.Add("delete_rule");

                foreach (System.Data.DataRow v_tabletemp in v_tables.Rows)
                {
                    System.Data.DataRow v_row;

                    System.Data.DataTable v_fks = new System.Data.DataTable("TableForeignKeys");
                    v_fks.Columns.Add("table_name");
                    v_fks.Columns.Add("constraint_name");
                    v_fks.Columns.Add("r_table_name");
                    v_fks.Columns.Add("column_name");
                    v_fks.Columns.Add("r_column_name");
                    v_fks.Columns.Add("update_rule");
                    v_fks.Columns.Add("delete_rule");

                    com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));

                    com.healthmarketscience.jackcess.Table v_table = v_database.getTable(v_tabletemp["table_name"].ToString().Replace("[", "").Replace("]", ""));

                    java.util.Set v_set = v_database.getTableNames();
                    object[]      v_obj = v_set.toArray();
                    foreach (object v_tablename in v_obj)
                    {
                        com.healthmarketscience.jackcess.Table v_table2 = v_database.getTable((string)v_tablename);

                        try {
                            com.healthmarketscience.jackcess.Index v_index = v_table.getForeignKeyIndex(v_table2);

                            if (!v_index.getName().StartsWith("."))
                            {
                                com.healthmarketscience.jackcess.Index v_index2 = v_index.getReferencedIndex();

                                java.util.List v_list = v_index.getColumns();
                                object[]       v_obj2 = v_list.toArray();

                                java.util.List v_list2 = v_index2.getColumns();
                                object[]       v_obj3  = v_list2.toArray();

                                java.util.List v_list3    = v_database.getRelationships(v_table, v_table2);
                                object[]       v_obj4     = v_list3.toArray();
                                bool           v_dcascade = false;
                                bool           v_ucascade = false;
                                foreach (object o in v_obj4)
                                {
                                    com.healthmarketscience.jackcess.Relationship r = (com.healthmarketscience.jackcess.Relationship)o;

                                    if (r.getName() == v_index.getName())
                                    {
                                        v_dcascade = r.cascadeDeletes();
                                        v_ucascade = r.cascadeUpdates();
                                    }
                                }

                                int k = 0;
                                foreach (object o in v_obj2)
                                {
                                    com.healthmarketscience.jackcess.Index.Column c  = (com.healthmarketscience.jackcess.Index.Column)o;
                                    com.healthmarketscience.jackcess.Index.Column c2 = (com.healthmarketscience.jackcess.Index.Column)v_obj3[k];

                                    v_row = v_fks.NewRow();
                                    v_row["table_name"]      = v_tabletemp["table_name"].ToString();
                                    v_row["constraint_name"] = v_index.getName();
                                    v_row["r_table_name"]    = (string)v_tablename;
                                    v_row["column_name"]     = c.getName();
                                    v_row["r_column_name"]   = c2.getName();
                                    if (v_ucascade)
                                    {
                                        v_row["update_rule"] = "CASCADE";
                                    }
                                    else
                                    {
                                        v_row["update_rule"] = "SET NULL";
                                    }
                                    if (v_dcascade)
                                    {
                                        v_row["delete_rule"] = "CASCADE";
                                    }
                                    else
                                    {
                                        v_row["delete_rule"] = "SET NULL";
                                    }
                                    v_fks.Rows.Add(v_row);

                                    k++;
                                }
                            }
                        }
                        catch (java.lang.IllegalArgumentException) {
                        }
                    }

                    v_all_fks.Merge(v_fks);
                }

                return(v_all_fks);
            }
            else
            {
                System.Data.DataRow v_row;

                System.Data.DataTable v_fks = new System.Data.DataTable("TableForeignKeys");
                v_fks.Columns.Add("table_name");
                v_fks.Columns.Add("constraint_name");
                v_fks.Columns.Add("r_table_name");
                v_fks.Columns.Add("column_name");
                v_fks.Columns.Add("r_column_name");
                v_fks.Columns.Add("update_rule");
                v_fks.Columns.Add("delete_rule");

                com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));

                com.healthmarketscience.jackcess.Table v_table = v_database.getTable(p_table.Replace("[", "").Replace("]", ""));

                java.util.Set v_set = v_database.getTableNames();
                object[]      v_obj = v_set.toArray();
                foreach (object v_tablename in v_obj)
                {
                    com.healthmarketscience.jackcess.Table v_table2 = v_database.getTable((string)v_tablename);

                    try {
                        com.healthmarketscience.jackcess.Index v_index = v_table.getForeignKeyIndex(v_table2);

                        if (!v_index.getName().StartsWith("."))
                        {
                            com.healthmarketscience.jackcess.Index v_index2 = v_index.getReferencedIndex();

                            java.util.List v_list = v_index.getColumns();
                            object[]       v_obj2 = v_list.toArray();

                            java.util.List v_list2 = v_index2.getColumns();
                            object[]       v_obj3  = v_list2.toArray();

                            java.util.List v_list3    = v_database.getRelationships(v_table, v_table2);
                            object[]       v_obj4     = v_list3.toArray();
                            bool           v_dcascade = false;
                            bool           v_ucascade = false;
                            foreach (object o in v_obj4)
                            {
                                com.healthmarketscience.jackcess.Relationship r = (com.healthmarketscience.jackcess.Relationship)o;

                                if (r.getName() == v_index.getName())
                                {
                                    v_dcascade = r.cascadeDeletes();
                                    v_ucascade = r.cascadeUpdates();
                                }
                            }

                            int k = 0;
                            foreach (object o in v_obj2)
                            {
                                com.healthmarketscience.jackcess.Index.Column c  = (com.healthmarketscience.jackcess.Index.Column)o;
                                com.healthmarketscience.jackcess.Index.Column c2 = (com.healthmarketscience.jackcess.Index.Column)v_obj3[k];

                                v_row = v_fks.NewRow();
                                v_row["table_name"]      = p_table;
                                v_row["constraint_name"] = v_index.getName();
                                v_row["r_table_name"]    = (string)v_tablename;
                                v_row["column_name"]     = c.getName();
                                v_row["r_column_name"]   = c2.getName();
                                if (v_ucascade)
                                {
                                    v_row["update_rule"] = "CASCADE";
                                }
                                else
                                {
                                    v_row["update_rule"] = "SET NULL";
                                }
                                if (v_dcascade)
                                {
                                    v_row["delete_rule"] = "CASCADE";
                                }
                                else
                                {
                                    v_row["delete_rule"] = "SET NULL";
                                }
                                v_fks.Rows.Add(v_row);

                                k++;
                            }
                        }
                    }
                    catch (java.lang.IllegalArgumentException) {
                    }
                }

                return(v_fks);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Get a datatable with all tables fields.
        /// </summary>
        /// <param name="p_table">Table name.</param>
        public override System.Data.DataTable QueryTablesFields(string p_table)
        {
            if (p_table == null)
            {
                System.Data.DataTable v_tables = this.QueryTables(false);

                System.Data.DataTable v_table_columns_all = new System.Data.DataTable();

                v_table_columns_all.Columns.Add("column_name");
                v_table_columns_all.Columns.Add("data_type");
                v_table_columns_all.Columns.Add("nullable");
                v_table_columns_all.Columns.Add("data_length");
                v_table_columns_all.Columns.Add("data_precision");
                v_table_columns_all.Columns.Add("data_scale");
                v_table_columns_all.Columns.Add("table_name");

                foreach (System.Data.DataRow v_tabletemp in v_tables.Rows)
                {
                    System.Data.DataRow v_row;

                    System.Data.DataTable v_table_columns = new System.Data.DataTable("TableFields");
                    v_table_columns.Columns.Add("column_name");
                    v_table_columns.Columns.Add("data_type");
                    v_table_columns.Columns.Add("nullable");
                    v_table_columns.Columns.Add("data_length");
                    v_table_columns.Columns.Add("data_precision");
                    v_table_columns.Columns.Add("data_scale");
                    v_table_columns.Columns.Add("table_name");

                    com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                    com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(v_tabletemp["table_name"].ToString().Replace("[", "").Replace("]", ""));
                    java.util.List v_list = v_table.getColumns();
                    object[]       v_obj  = v_list.toArray();
                    foreach (object o in v_obj)
                    {
                        com.healthmarketscience.jackcess.Column c = (com.healthmarketscience.jackcess.Column)o;

                        v_row = v_table_columns.NewRow();
                        v_row["column_name"]    = c.getName();
                        v_row["data_type"]      = c.getType().ToString();
                        v_row["nullable"]       = "YES";
                        v_row["data_length"]    = c.getLength().ToString();
                        v_row["data_precision"] = c.getPrecision().ToString();
                        v_row["data_scale"]     = c.getScale().ToString();
                        v_row["table_name"]     = v_tabletemp["table_name"].ToString();
                        v_table_columns.Rows.Add(v_row);
                    }

                    v_table_columns_all.Merge(v_table_columns);
                }

                return(v_table_columns_all);
            }
            else
            {
                System.Data.DataRow v_row;

                System.Data.DataTable v_table_columns = new System.Data.DataTable("TableFields");
                v_table_columns.Columns.Add("column_name");
                v_table_columns.Columns.Add("data_type");
                v_table_columns.Columns.Add("nullable");
                v_table_columns.Columns.Add("data_length");
                v_table_columns.Columns.Add("data_precision");
                v_table_columns.Columns.Add("data_scale");

                com.healthmarketscience.jackcess.Database v_database = com.healthmarketscience.jackcess.DatabaseBuilder.open(new java.io.File(this.v_connection.v_service));
                com.healthmarketscience.jackcess.Table    v_table    = v_database.getTable(p_table.Replace("[", "").Replace("]", ""));
                java.util.List v_list = v_table.getColumns();
                object[]       v_obj  = v_list.toArray();
                foreach (object o in v_obj)
                {
                    com.healthmarketscience.jackcess.Column c = (com.healthmarketscience.jackcess.Column)o;

                    v_row = v_table_columns.NewRow();
                    v_row["column_name"]    = c.getName();
                    v_row["data_type"]      = c.getType().ToString();
                    v_row["nullable"]       = "YES";
                    v_row["data_length"]    = c.getLength().ToString();
                    v_row["data_precision"] = c.getPrecision().ToString();
                    v_row["data_scale"]     = c.getScale().ToString();
                    v_table_columns.Rows.Add(v_row);
                }

                return(v_table_columns);
            }
        }
Ejemplo n.º 12
0
 /**
  * Returns the array of providers which meet the user supplied set of
  * filters. The filter must be supplied in one of two formats:
  * <nl>
  * <li> CRYPTO_SERVICE_NAME.ALGORITHM_OR_TYPE</li>
  * <p/>
  * for example: "MessageDigest.SHA" The value associated with the key must
  * be an empty string. <li> CRYPTO_SERVICE_NAME.ALGORITHM_OR_TYPE</li>
  * ATTR_NAME:ATTR_VALUE
  * <p/>
  * for example: "Signature.MD2withRSA KeySize:512" where "KeySize:512" is
  * the value of the filter map entry.
  * </nl>
  *
  * @param filter
  *            case-insensitive filter.
  * @return the providers which meet the user supplied string filter {@code
  *         filter}. A {@code null} value signifies that none of the
  *         installed providers meets the filter specification.
  * @throws InvalidParameterException
  *             if an unusable filter is supplied.
  * @throws NullPointerException
  *             if {@code filter} is {@code null}.
  */
 public static Provider[] getProviders(java.util.Map <String, String> filter)
 {
     lock (lockJ)
     {
         if (filter == null)
         {
             throw new java.lang.NullPointerException("The filter is null"); //$NON-NLS-1$
         }
         if (filter.isEmpty())
         {
             return(null);
         }
         java.util.List <Provider> result = Services.getProvidersList();
         java.util.Set <java.util.MapNS.Entry <String, String> > keys = filter.entrySet();
         java.util.MapNS.Entry <String, String> entry;
         for (java.util.Iterator <java.util.MapNS.Entry <String, String> > it = keys.iterator(); it.hasNext();)
         {
             entry = it.next();
             String key       = entry.getKey();
             String val       = entry.getValue();
             String attribute = null;
             int    i         = key.indexOf(' ');
             int    j         = key.indexOf('.');
             if (j == -1)
             {
                 throw new InvalidParameterException("The filter is not in the required format"); //$NON-NLS-1$
             }
             if (i == -1)
             { // <crypto_service>.<algorithm_or_type>
                 if (val.length() != 0)
                 {
                     throw new InvalidParameterException("The filter is not in the required format"); //$NON-NLS-1$
                 }
             }
             else
             { // <crypto_service>.<algorithm_or_type> <attribute_name>
                 if (val.length() == 0)
                 {
                     throw new InvalidParameterException("The filter is not in the required format"); //$NON-NLS-1$
                 }
                 attribute = key.substring(i + 1);
                 if (attribute.trim().length() == 0)
                 {
                     throw new InvalidParameterException("The filter is not in the required format"); //$NON-NLS-1$
                 }
                 key = key.substring(0, i);
             }
             String serv = key.substring(0, j);
             String alg  = key.substring(j + 1);
             if (serv.length() == 0 || alg.length() == 0)
             {
                 throw new InvalidParameterException("The filter is not in the required format"); //$NON-NLS-1$
             }
             Provider p;
             for (int k = 0; k < result.size(); k++)
             {
                 try
                 {
                     p = result.get(k);
                 }
                 catch (java.lang.IndexOutOfBoundsException)
                 {
                     break;
                 }
                 if (!p.implementsAlg(serv, alg, attribute, val))
                 {
                     result.remove(p);
                     k--;
                 }
             }
         }
         if (result.size() > 0)
         {
             return(result.toArray(new Provider[result.size()]));
         }
         return(null);
     }
 }