You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/04/13 15:56:37 UTC
[07/29] ignite git commit: ignite-3682: fixes of notes; refactoring
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAllPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAllPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAllPredicate.java
new file mode 100644
index 0000000..e829bef
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAllPredicate.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Predicate that evaluates to {@code true} if each of its component preds evaluates to {@code true}.
+ *
+ * @param <T> Type of the free variable, i.e. the element the predicate is called on.
+ */
+public class IsAllPredicate<T> implements IgnitePredicate<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final IgnitePredicate<? super T>[] preds;
+
+ /**
+ * @param preds Passed in predicate. If none provided - always-{@code false} predicate is returned.
+ */
+ public IsAllPredicate(IgnitePredicate<? super T>... preds) {
+ this.preds = preds;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(T t) {
+ return GridFunc.isAll(t, preds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsAllPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAssignableFromPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAssignableFromPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAssignableFromPredicate.java
new file mode 100644
index 0000000..51838e4
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsAssignableFromPredicate.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.typedef.P1;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ * Predicate that evaluates to {@code true} if its free variable is instance of the given class.
+ *
+ * @param <T> Type of the free variable, i.e. the element the predicate is called on.
+ */
+public class IsAssignableFromPredicate<T> implements P1<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Class<?> cls;
+
+ /**
+ * @param cls Class to compare to.
+ */
+ public IsAssignableFromPredicate(Class<?> cls) {
+ this.cls = cls;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(T t) {
+ return t != null && cls.isAssignableFrom(t.getClass());
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsAssignableFromPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotAllPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotAllPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotAllPredicate.java
new file mode 100644
index 0000000..ebcb8a9
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotAllPredicate.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Negated predicate.
+ *
+ * @param <T> Type of the free variable, i.e. the element the predicate is called on.
+ */
+public class IsNotAllPredicate<T> implements IgnitePredicate<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final IgnitePredicate<? super T>[] preds;
+
+ /**
+ * @param preds Predicate to negate.
+ */
+ public IsNotAllPredicate(IgnitePredicate<? super T>... preds) {
+ this.preds = preds;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(T t) {
+ return !GridFunc.isAll(t, preds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsNotAllPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotDonePredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotDonePredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotDonePredicate.java
new file mode 100644
index 0000000..4d9762d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotDonePredicate.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * IgniteInternalFuture is not done predicate.
+ */
+public class IsNotDonePredicate implements IgnitePredicate<IgniteInternalFuture<?>> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(IgniteInternalFuture<?> f) {
+ return !f.isDone();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsNotDonePredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotNullPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotNullPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotNullPredicate.java
new file mode 100644
index 0000000..c67a015
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNotNullPredicate.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Defines a predicate which checks a parameter on <code>null</code>.
+ *
+ * @param <E> Type of predicate parameter.
+ */
+public class IsNotNullPredicate<E> implements IgnitePredicate<E> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * @param e Parameter for check.
+ * @return 'true' if parameter NOT equals to <code>null</code>, otherwise 'false'.
+ */
+ @Override public boolean apply(E e) {
+ return e != null;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsNotNullPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNullPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNullPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNullPredicate.java
new file mode 100644
index 0000000..7972928
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/IsNullPredicate.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Defines a predicate which checks a parameter on <code>null</code>.
+ *
+ * @param <E> Type of predicate parameter.
+ */
+public class IsNullPredicate<E> implements IgnitePredicate<E> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * @param e Parameter for check.
+ * @return 'true' if parameter equals to <code>null</code>, otherwise 'false'.
+ */
+ @Override public boolean apply(E e) {
+ return e == null;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IsNullPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LinkedListFactoryCallable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LinkedListFactoryCallable.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LinkedListFactoryCallable.java
new file mode 100644
index 0000000..4bf9948
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LinkedListFactoryCallable.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.LinkedList;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteCallable;
+
+/**
+ * Linked list factory.
+ */
+public class LinkedListFactoryCallable implements IgniteCallable<LinkedList> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public LinkedList call() {
+ return new LinkedList();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(LinkedListFactoryCallable.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LongSumReducer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LongSumReducer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LongSumReducer.java
new file mode 100644
index 0000000..8b5d6dc
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/LongSumReducer.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteReducer;
+
+/**
+ * Reducer that calculates sum of long integer elements.
+ */
+public class LongSumReducer implements IgniteReducer<Long, Long> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private AtomicLong sum = new AtomicLong(0);
+
+ /** {@inheritDoc} */
+ @Override public boolean collect(Long e) {
+ if (e != null)
+ sum.addAndGet(e);
+
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Long reduce() {
+ return sum.get();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(LongSumReducer.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/MapFactoryCallable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/MapFactoryCallable.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/MapFactoryCallable.java
new file mode 100644
index 0000000..ff59817
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/MapFactoryCallable.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteCallable;
+
+/**
+ * Hash map factory.
+ */
+public class MapFactoryCallable implements IgniteCallable<Map> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public Map call() {
+ return new HashMap();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(MapFactoryCallable.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NoOpClosure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NoOpClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NoOpClosure.java
new file mode 100644
index 0000000..b687a4b
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NoOpClosure.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.lang.GridAbsClosure;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ * Absolute closure that does nothing.
+ */
+public class NoOpClosure extends GridAbsClosure {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public void apply() {
+ // No-op.
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(NoOpClosure.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotContainsPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotContainsPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotContainsPredicate.java
new file mode 100644
index 0000000..5f8ba9a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotContainsPredicate.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Collection;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Predicate that returns {@code true} if its free variable is not contained in given collection.
+ *
+ * @param <T> Type of the free variable for the predicate and type of the collection elements.
+ */
+public class NotContainsPredicate<T> implements IgnitePredicate<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Collection<? extends T> col;
+
+ /**
+ * @param col Collection to check for containment.
+ */
+ public NotContainsPredicate(Collection<? extends T> col) {
+ this.col = col;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(T t) {
+ assert col != null;
+
+ return !col.contains(t);
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return S.toString(NotContainsPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotEqualPredicate.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotEqualPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotEqualPredicate.java
new file mode 100644
index 0000000..c84e849
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/NotEqualPredicate.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+
+/**
+ * Predicate that evaluates to {@code true} if its free variable is equal to {@code target} or both are
+ * {@code null}.
+ *
+ * @param <T> Type of the free variable, i.e. the element the predicate is called on.
+ */
+public class NotEqualPredicate<T> implements IgnitePredicate<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final T target;
+
+ /**
+ * @param target Object to compare free variable to.
+ */
+ public NotEqualPredicate(T target) {
+ this.target = target;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean apply(T t) {
+ return !GridFunc.eq(t, target);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(NotEqualPredicate.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
new file mode 100644
index 0000000..b4785a7
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateCollectionView.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.ignite.internal.util.GridSerializableCollection;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Light-weight view on given col with provided predicate.
+ *
+ * @param <T> Type of the col.
+ */
+public class PredicateCollectionView<T> extends GridSerializableCollection<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Collection<T> col;
+
+ /** */
+ private final IgnitePredicate<? super T>[] preds;
+
+ /**
+ * @param col Input col that serves as a base for the view.
+ * @param preds Optional preds. If preds are not provided - all elements will be in the view.
+ */
+ public PredicateCollectionView(Collection<T> col, IgnitePredicate<? super T>... preds) {
+ this.col = col;
+ this.preds = preds;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean add(T e) {
+ // Pass through (will fail for readonly).
+ return GridFunc.isAll(e, preds) && col.add(e);
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Iterator<T> iterator() {
+ return F.iterator0(col, false, preds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ return F.size(col, preds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return F.isEmpty(preds) ? col.isEmpty() : !iterator().hasNext();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PredicateCollectionView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
new file mode 100644
index 0000000..d5b97a6
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.ignite.internal.util.GridSerializableMap;
+import org.apache.ignite.internal.util.GridSerializableSet;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Light-weight view on given map with provided predicate.
+ *
+ * @param <K> Type of the key.
+ * @param <V> Type of the value.
+ */
+public class PredicateMapView<K, V> extends GridSerializableMap<K, V> {
+ /** */
+ private static final long serialVersionUID = 5531745605372387948L;
+
+ /** */
+ private final Map<K, V> map;
+
+ /** */
+ private final IgnitePredicate<? super K>[] preds;
+
+ /** Entry predicate. */
+ private IgnitePredicate<Entry<K, V>> entryPred;
+
+ /**
+ * @param map Input map that serves as a base for the view.
+ * @param preds Optional predicates. If predicates are not provided - all will be in the view.
+ */
+ @SuppressWarnings({"unchecked"})
+ public PredicateMapView(Map<K, V> map, IgnitePredicate<? super K>... preds) {
+ this.map = map;
+ this.preds = preds;
+ this.entryPred = new EntryByKeyEvaluationPredicate(preds);
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Set<Entry<K, V>> entrySet() {
+ return new GridSerializableSet<Entry<K, V>>() {
+ @NotNull
+ @Override public Iterator<Entry<K, V>> iterator() {
+ return GridFunc.iterator0(map.entrySet(), false, entryPred);
+ }
+
+ @Override public int size() {
+ return F.size(map.keySet(), preds);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean remove(Object o) {
+ return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().remove(o);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean contains(Object o) {
+ return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
+ }
+
+ @Override public boolean isEmpty() {
+ return !iterator().hasNext();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Nullable @Override public V get(Object key) {
+ return GridFunc.isAll((K)key, preds) ? map.get(key) : null;
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V put(K key, V val) {
+ V oldVal = get(key);
+
+ if (GridFunc.isAll(key, preds))
+ map.put(key, val);
+
+ return oldVal;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean containsKey(Object key) {
+ return GridFunc.isAll((K)key, preds) && map.containsKey(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PredicateMapView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
new file mode 100644
index 0000000..99fc2fd
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateSetView.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Iterator;
+import java.util.Set;
+import org.apache.ignite.internal.util.GridSerializableMap;
+import org.apache.ignite.internal.util.GridSerializableSet;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteClosure;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Light-weight view on given map with provided preds and mapping.
+ *
+ * @param <K> Key type.
+ * @param <V> Value type.
+ */
+public class PredicateSetView<K, V> extends GridSerializableMap<K, V> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Set<K> set;
+
+ /** */
+ private final IgniteClosure<? super K, V> clo;
+
+ /** */
+ private final IgnitePredicate<? super K>[] preds;
+
+ /** Entry predicate. */
+ private IgnitePredicate<K> entryPred;
+
+ /**
+ * @param set Input collection.
+ * @param clo Mapping closure, that maps key to value.
+ * @param preds Optional predicates to filter input collection. If predicates are not provided - all elements
+ * will be in
+ */
+ @SuppressWarnings({"unchecked"})
+ public PredicateSetView(Set<K> set, IgniteClosure<? super K, V> clo,
+ IgnitePredicate<? super K>... preds) {
+ this.set = set;
+ this.clo = clo;
+ this.preds = preds;
+ this.entryPred = new IsAllPredicate(preds);
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Set<Entry<K, V>> entrySet() {
+ return new GridSerializableSet<Entry<K, V>>() {
+ @NotNull @Override public Iterator<Entry<K, V>> iterator() {
+ return new Iterator<Entry<K, V>>() {
+
+ private Iterator<K> it = GridFunc.iterator0(set, true, entryPred);
+
+ @Override public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ @Override public Entry<K, V> next() {
+ final K e = it.next();
+
+ return new Entry<K, V>() {
+ @Override public K getKey() {
+ return e;
+ }
+
+ @Override public V getValue() {
+ return clo.apply(e);
+ }
+
+ @Override public V setValue(V val) {
+ throw new UnsupportedOperationException(
+ "Put is not supported for readonly collection view.");
+ }
+ };
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException(
+ "Remove is not support for readonly collection view.");
+ }
+ };
+ }
+
+ @Override public int size() {
+ return F.size(set, preds);
+ }
+
+ @Override public boolean remove(Object o) {
+ throw new UnsupportedOperationException("Remove is not support for readonly collection view.");
+ }
+
+ @Override public boolean isEmpty() {
+ return !iterator().hasNext();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V get(Object key) {
+ if (containsKey(key))
+ return clo.apply((K)key);
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V put(K key, V val) {
+ throw new UnsupportedOperationException("Put is not supported for readonly collection view.");
+ }
+
+ /** {@inheritDoc} */
+ @Override public V remove(Object key) {
+ throw new UnsupportedOperationException("Remove is not supported for readonly collection view.");
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean containsKey(Object key) {
+ return GridFunc.isAll((K)key, preds) && set.contains(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PredicateSetView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
new file mode 100644
index 0000000..8186914
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.ignite.internal.util.GridSerializableCollection;
+import org.apache.ignite.internal.util.GridSerializableIterator;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Collection wrapper.
+ * A read-only view will be created over the element and given
+ * col and no copying will happen.
+ *
+ * @param <T> Element type.
+ */
+public class ReadOnlyCollectionView<T> extends GridSerializableCollection<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Collection. */
+ private final Collection<T> col;
+
+ /** First element in the col. */
+ private final T elem;
+
+ /**
+ * @param col Collection to wrap.
+ * @param elem First element.
+ */
+ public ReadOnlyCollectionView(@NotNull Collection<T> col, @NotNull T elem) {
+ this.col = col;
+ this.elem = elem;
+ }
+
+ /** {@inheritDoc} */
+ @NotNull
+ @Override public Iterator<T> iterator() {
+ return new GridSerializableIterator<T>() {
+ private Iterator<T> it;
+
+ @Override public boolean hasNext() {
+ return it == null || it.hasNext();
+ }
+
+ @Nullable @Override public T next() {
+ if (it == null) {
+ it = col.iterator();
+
+ return elem;
+ }
+
+ return it.next();
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ return col.size() + 1;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object obj) {
+ return obj instanceof Collection && GridFunc.eqNotOrdered(this, (Collection)obj);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(ReadOnlyCollectionView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
new file mode 100644
index 0000000..82ec651
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ReadOnlyCollectionView2X.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.ignite.internal.util.GridSerializableCollection;
+import org.apache.ignite.internal.util.GridSerializableIterator;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Collections wrapper.
+ * A read-only view will be created over the element and given
+ * collections and no copying will happen.
+ *
+ * @param <T> Element type.
+ */
+public class ReadOnlyCollectionView2X<T> extends GridSerializableCollection<T> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** First collection. */
+ private final Collection<T> c1;
+
+ /** SecondCollection. */
+ private final Collection<T> c2;
+
+ /**
+ * @param c1 First collection.
+ * @param c2 SecondCollection.
+ */
+ public ReadOnlyCollectionView2X(Collection<T> c1, Collection<T> c2) {
+ this.c1 = c1;
+ this.c2 = c2;
+ }
+
+ /** {@inheritDoc} */
+ @NotNull
+ @Override public Iterator<T> iterator() {
+ return new GridSerializableIterator<T>() {
+ private Iterator<T> it1 = c1.iterator();
+ private Iterator<T> it2 = c2.iterator();
+
+ @Override public boolean hasNext() {
+ if (it1 != null)
+ if (!it1.hasNext())
+ it1 = null;
+ else
+ return true;
+
+ return it2.hasNext();
+ }
+
+ @Override public T next() {
+ return it1 != null ? it1.next() : it2.next();
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean contains(Object o) {
+ return c1.contains(o) || c2.contains(o);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ return c1.size() + c2.size();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object obj) {
+ return obj instanceof Collection && GridFunc.eqNotOrdered(this, (Collection<?>)obj);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(ReadOnlyCollectionView2X.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/SetFactoryCallable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/SetFactoryCallable.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/SetFactoryCallable.java
new file mode 100644
index 0000000..17ac68c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/SetFactoryCallable.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteCallable;
+
+/**
+ * Hash set factory.
+ */
+public class SetFactoryCallable implements IgniteCallable<Set> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public Set call() {
+ return new HashSet();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(SetFactoryCallable.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/StringConcatReducer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/StringConcatReducer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/StringConcatReducer.java
new file mode 100644
index 0000000..4a2b2a3
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/StringConcatReducer.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.SB;
+import org.apache.ignite.lang.IgniteReducer;
+
+/**
+ * Reducer that concatenates strings using provided delimiter.
+ */
+public class StringConcatReducer implements IgniteReducer<String, String> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final String delim;
+
+ /** */
+ private SB sb;
+
+ /** */
+ private boolean first;
+
+ /** */
+ private final Object lock;
+
+ /**
+ * @param delim Delimiter (optional).
+ */
+ public StringConcatReducer(String delim) {
+ this.delim = delim;
+ sb = new SB();
+ first = true;
+ lock = new Object();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean collect(String s) {
+ synchronized (lock) {
+ if (!first && !GridFunc.isEmpty(delim))
+ sb.a(delim);
+
+ sb.a(s);
+
+ first = false;
+ }
+
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String reduce() {
+ synchronized (lock) {
+ return sb.toString();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(StringConcatReducer.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ToStringClosure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ToStringClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ToStringClosure.java
new file mode 100644
index 0000000..7cf47cb
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/ToStringClosure.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import org.apache.ignite.internal.util.typedef.C1;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Closure that return {@code toString()} value for its free variable.
+ *
+ * @param <T> Type of the free variable for the closure.
+ */
+public class ToStringClosure<T> implements C1<T, String> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public String apply(@Nullable T t) {
+ return String.valueOf(t); // This is null-safe.
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(ToStringClosure.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
new file mode 100644
index 0000000..2c317df
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformCollectionView.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.ignite.internal.util.GridSerializableCollection;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteClosure;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Light-weight view on given collection with provided predicate.
+ *
+ * @param <T1> Element type after transformation.
+ * @param <T2> Element type.
+ */
+public class TransformCollectionView<T1, T2> extends GridSerializableCollection<T1> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Collection<? extends T2> col;
+
+ /** */
+ private final IgniteClosure<? super T2, T1> clos;
+
+ /** */
+ private final IgnitePredicate<? super T2>[] preds;
+
+ /**
+ * @param col Input collection that serves as a base for the view.
+ * @param clos Transformation closure.
+ * @param preds Optional predicated. If predicates are not provided - all elements will be in the view.
+ */
+ public TransformCollectionView(Collection<? extends T2> col,
+ IgniteClosure<? super T2, T1> clos, IgnitePredicate<? super T2>... preds) {
+ this.col = col;
+ this.clos = clos;
+ this.preds = preds;
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Iterator<T1> iterator() {
+ return F.<T2, T1>iterator(col, clos, true, preds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ return F.isEmpty(preds) ? col.size() : F.size(iterator());
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return F.isEmpty(preds) ? col.isEmpty() : !iterator().hasNext();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TransformCollectionView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformFilteringIterator.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformFilteringIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformFilteringIterator.java
new file mode 100644
index 0000000..9ddd729
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformFilteringIterator.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.lang.GridIteratorAdapter;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteClosure;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Iterator from given iter and optional filtering predicate.
+ */
+public class TransformFilteringIterator<T2, T1> extends GridIteratorAdapter<T2> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final IgniteClosure<? super T1, T2> clos;
+
+ /** */
+ private final boolean readOnly;
+
+ /** */
+ private final IgnitePredicate<? super T1>[] preds;
+
+ /** */
+ private T1 elem;
+
+ /** */
+ private boolean more;
+
+ /** */
+ private boolean moved;
+
+ /** */
+ private Iterator<? extends T1> iter;
+
+ /**
+ * @param iter Input iter.
+ * @param clos Transforming closure to convert from T1 to T2.
+ * @param readOnly If {@code true}, then resulting iter will not allow modifications to the underlying
+ * collection.
+ * @param preds Optional filtering predicates.
+ */
+ public TransformFilteringIterator(Iterator<? extends T1> iter, IgniteClosure<? super T1, T2> clos,
+ boolean readOnly,
+ IgnitePredicate<? super T1>... preds) {
+ this.clos = clos;
+ this.readOnly = readOnly;
+ this.preds = preds;
+ this.iter = iter;
+ this.moved = true;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean hasNextX() {
+ if (GridFunc.isEmpty(preds))
+ return iter.hasNext();
+ else {
+ if (!moved)
+ return more;
+ else {
+ more = false;
+
+ while (iter.hasNext()) {
+ elem = iter.next();
+
+ boolean isAll = true;
+
+ for (IgnitePredicate<? super T1> r : preds)
+ if (r != null && !r.apply(elem)) {
+ isAll = false;
+
+ break;
+ }
+
+ if (isAll) {
+ more = true;
+ moved = false;
+
+ return true;
+ }
+ }
+
+ elem = null; // Give to GC.
+
+ return false;
+ }
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public T2 nextX() {
+ if (GridFunc.isEmpty(preds))
+ return clos.apply(iter.next());
+ else {
+ if (hasNext()) {
+ moved = true;
+
+ return clos.apply(elem);
+ }
+ else
+ throw new NoSuchElementException();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void removeX() {
+ if (readOnly)
+ throw new UnsupportedOperationException("Cannot modify read-only iter.");
+
+ iter.remove();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TransformFilteringIterator.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
new file mode 100644
index 0000000..91b8302
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.ignite.internal.util.GridSerializableMap;
+import org.apache.ignite.internal.util.GridSerializableSet;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteClosure;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Light-weight view on given map with provided predicate and clos.
+ *
+ * @param <K> Type of the key.
+ * @param <V> Type of the input map value.
+ * @param <V1> Type of the output map value.
+ */
+public class TransformMapView<K, V1, V> extends GridSerializableMap<K, V1> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Map<K, V> map;
+
+ /** */
+ private final IgniteClosure<V, V1> clos;
+
+ /** */
+ private final boolean hasPred;
+
+ /** */
+ private final IgnitePredicate<? super K>[] preds;
+
+ /** Entry predicate. */
+ private IgnitePredicate<Entry<K, V>> entryPred;
+
+ /**
+ * @param map Input map that serves as a base for the view.
+ * @param clos Transformer for map value transformation.
+ * @param preds Optional predicates. If predicates are not provided - all will be in the view.
+ */
+ @SuppressWarnings({"unchecked"})
+ public TransformMapView(Map<K, V> map, IgniteClosure<V, V1> clos,
+ IgnitePredicate<? super K>... preds) {
+ this.map = map;
+ this.clos = clos;
+ this.hasPred = (preds != null && preds.length > 0);
+ this.preds = preds;
+ this.entryPred = new EntryByKeyEvaluationPredicate(preds);
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Set<Entry<K, V1>> entrySet() {
+ return new GridSerializableSet<Entry<K, V1>>() {
+ @NotNull
+ @Override public Iterator<Entry<K, V1>> iterator() {
+ return new Iterator<Entry<K, V1>>() {
+ private Iterator<Entry<K, V>> iter = GridFunc.iterator0(map.entrySet(), true, entryPred);
+
+ @Override public boolean hasNext() {
+ return iter.hasNext();
+ }
+
+ @Override public Entry<K, V1> next() {
+ final Entry<K, V> e = iter.next();
+
+ return new Entry<K, V1>() {
+ @Override public K getKey() {
+ return e.getKey();
+ }
+
+ @Override public V1 getValue() {
+ return clos.apply(e.getValue());
+ }
+
+ @Override public V1 setValue(V1 val) {
+ throw new UnsupportedOperationException("Put is not supported for readonly map view.");
+ }
+ };
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException("Remove is not support for readonly map view.");
+ }
+ };
+ }
+
+ @Override public int size() {
+ return hasPred ? F.size(map.keySet(), preds) : map.size();
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean remove(Object o) {
+ throw new UnsupportedOperationException("Remove is not support for readonly map view.");
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean contains(Object o) {
+ return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
+ }
+
+ @Override public boolean isEmpty() {
+ return hasPred ? !iterator().hasNext() : map.isEmpty();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return hasPred ? entrySet().isEmpty() : map.isEmpty();
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Nullable @Override public V1 get(Object key) {
+ if (GridFunc.isAll((K)key, preds)) {
+ V v = map.get(key);
+
+ if (v != null)
+ return clos.apply(v);
+ }
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V1 put(K key, V1 val) {
+ throw new UnsupportedOperationException("Put is not supported for readonly map view.");
+ }
+
+ /** {@inheritDoc} */
+ @Override public V1 remove(Object key) {
+ throw new UnsupportedOperationException("Remove is not supported for readonly map view.");
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean containsKey(Object key) {
+ return GridFunc.isAll((K)key, preds) && map.containsKey(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TransformMapView.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
new file mode 100644
index 0000000..523d4cc
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.ignite.internal.util.GridSerializableMap;
+import org.apache.ignite.internal.util.GridSerializableSet;
+import org.apache.ignite.internal.util.lang.GridFunc;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.lang.IgniteBiClosure;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Light-weight view on given map with provided predicate and clos.
+ *
+ * @param <K> Type of the key.
+ * @param <V> Type of the input map value.
+ * @param <V1> Type of the output map value.
+ */
+public class TransformMapView2<K, V, V1> extends GridSerializableMap<K, V1> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private final Map<K, V> map;
+
+ /** */
+ private final IgniteBiClosure<K, V, V1> clos;
+
+ /** */
+ private final IgnitePredicate<? super K>[] preds;
+
+ /** Entry predicate. */
+ private IgnitePredicate<Entry<K, V>> entryPred;
+
+ /**
+ * @param map Input map that serves as a base for the view.
+ * @param clos Transformer for map value transformation.
+ * @param preds Optional predicates. If predicates are not provided - all will be in the view.
+ */
+ @SuppressWarnings({"unchecked"})
+ public TransformMapView2(Map<K, V> map, IgniteBiClosure<K, V, V1> clos,
+ IgnitePredicate<? super K>... preds) {
+ this.map = map;
+ this.clos = clos;
+ this.preds = preds;
+ entryPred = new EntryByKeyEvaluationPredicate(preds);
+ }
+
+ /** {@inheritDoc} */
+ @NotNull @Override public Set<Entry<K, V1>> entrySet() {
+ return new GridSerializableSet<Entry<K, V1>>() {
+ @NotNull
+ @Override public Iterator<Entry<K, V1>> iterator() {
+ return new Iterator<Entry<K, V1>>() {
+ private Iterator<Entry<K, V>> it = GridFunc.iterator0(map.entrySet(), true, entryPred);
+
+ @Override public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ @Override public Entry<K, V1> next() {
+ final Entry<K, V> e = it.next();
+
+ return new Entry<K, V1>() {
+ @Override public K getKey() {
+ return e.getKey();
+ }
+
+ @Override public V1 getValue() {
+ return clos.apply(e.getKey(), e.getValue());
+ }
+
+ @Override public V1 setValue(V1 val) {
+ throw new UnsupportedOperationException(
+ "Put is not supported for readonly map view.");
+ }
+ };
+ }
+
+ @Override public void remove() {
+ throw new UnsupportedOperationException("Remove is not support for readonly map view.");
+ }
+ };
+ }
+
+ @Override public int size() {
+ return F.size(map.keySet(), preds);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean remove(Object o) {
+ throw new UnsupportedOperationException("Remove is not support for readonly map view.");
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean contains(Object o) {
+ return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
+ }
+
+ @Override public boolean isEmpty() {
+ return !iterator().hasNext();
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isEmpty() {
+ return entrySet().isEmpty();
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Nullable @Override public V1 get(Object key) {
+ if (GridFunc.isAll((K)key, preds)) {
+ V v = map.get(key);
+
+ if (v != null)
+ return clos.apply((K)key, v);
+ }
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V1 put(K key, V1 val) {
+ throw new UnsupportedOperationException("Put is not supported for readonly map view.");
+ }
+
+ /** {@inheritDoc} */
+ @Override public V1 remove(Object key) {
+ throw new UnsupportedOperationException("Remove is not supported for readonly map view.");
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"unchecked"})
+ @Override public boolean containsKey(Object key) {
+ return GridFunc.isAll((K)key, preds) && map.containsKey(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TransformMapView2.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/UuidToId8Closure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/UuidToId8Closure.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/UuidToId8Closure.java
new file mode 100644
index 0000000..dcf165b
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/UuidToId8Closure.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.ignite.internal.util.lang.gridfunc;
+
+import java.util.UUID;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgniteClosure;
+
+/**
+ * UUID to ID8 transformer closure.
+ */
+public class UuidToId8Closure implements IgniteClosure<UUID, String> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** {@inheritDoc} */
+ @Override public String apply(UUID id) {
+ return U.id8(id);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(UuidToId8Closure.class, this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a3f845b0/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
index 6b745ab..68d6bf1 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java
@@ -454,8 +454,6 @@ public abstract class GridIndexingSpiAbstractSelfTest extends GridCommonAbstract
String res = log.toString();
- F.println(res);
-
assertTrue(res.contains("/* PUBLIC.RANGE_INDEX */"));
}
finally {