/*
* 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.gridify;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import org.apache.ignite.compute.gridify.aop.spring.GridifySpringEnhancer;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.testframework.junits.common.GridCommonTest;
/**
* To run this test with JBoss AOP make sure of the following:
*
* 1. The JVM is started with following parameters to enable jboss online weaving
* (replace ${IGNITE_HOME} to you $IGNITE_HOME):
* -javaagent:${IGNITE_HOME}libs/jboss-aop-jdk50-4.0.4.jar
* -Djboss.aop.class.path=[path to grid compiled classes (Idea out folder) or path to ignite.jar]
* -Djboss.aop.exclude=org,com -Djboss.aop.include=org.apache.ignite
*
* 2. The following jars should be in a classpath:
* ${IGNITE_HOME}libs/javassist-3.x.x.jar
* ${IGNITE_HOME}libs/jboss-aop-jdk50-4.0.4.jar
* ${IGNITE_HOME}libs/jboss-aspect-library-jdk50-4.0.4.jar
* ${IGNITE_HOME}libs/jboss-common-4.2.2.jar
* ${IGNITE_HOME}libs/trove-1.0.2.jar
*
* To run this test with AspectJ APO make sure of the following:
*
* 1. The JVM is started with following parameters for enable AspectJ online weaving
* (replace ${IGNITE_HOME} to you $IGNITE_HOME):
* -javaagent:${IGNITE_HOME}/libs/aspectjweaver-1.7.2.jar
*
* 2. Classpath should contains the ${IGNITE_HOME}/modules/tests/config/aop/aspectj folder.
*/
@GridCommonTest(group="AOP")
public class GridifySetToXXXSpringAopSelfTest extends GridCommonAbstractTest {
/**
* @throws Exception If failed.
*/
public void testGridifySetToSet() throws Exception {
try {
startGrid("GridifySetToSetTarget");
startGrid("GridifySetToSetTarget2");
startGrid("GridifySetToSetTarget3");
GridifySetToSetTargetInterface target = GridifySpringEnhancer.enhance(new GridifySetToSetTarget());
Collection<Long> primesInSet = target.findPrimes(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Prime numbers in set '" + primesInSet + "'.");
primesInSet = target.findPrimesWithoutSplitSize(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Prime numbers w/o 'splitsize' in set '" + primesInSet + "'.");
primesInSet = target.findPrimesWithoutSplitSizeAndThreshold(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Prime numbers w/o 'splitsize' and 'threshold' in set '" + primesInSet + "'.");
primesInSet = target.findPrimesInListWithoutSplitSizeAndThreshold(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Prime numbers in list w/o 'splitsize' and 'threshold' in set '" + primesInSet + "'.");
primesInSet = target.findPrimesInArrayListWithoutSplitSizeAndThreshold(
new ArrayList<>(Arrays.asList(2L, 3L, 4L, 6L)));
info(">>> Prime numbers in 'arraylist' w/o 'splitsize' and threshold in set '" + primesInSet + "'.");
Long[] primesInArr = target.findPrimesInArray(new Long[]{2L, 3L, 4L, 6L});
info(">>> Prime numbers in array '" + Arrays.asList(primesInArr) + "'.");
long[] primesInPrimArr = target.findPrimesInPrimitiveArray(new long[]{2L, 3L, 4L, 6L});
info(">>> Prime numbers in primitive array '" + primesInPrimArr + "'.");
Iterator<Long> primesInIter = target.findPrimesWithIterator(Arrays.asList(2L, 3L, 4L, 6L).iterator());
info(">>> Prime numbers in iterator '" + convert(primesInIter) + "'.");
Enumeration<Long> primesInEnum = target.findPrimesWithEnumeration(
new MathEnumerationAdapter<>(Arrays.asList(2L, 3L, 4L, 6L)));
info(">>> Prime numbers in enumeration '" + convert(primesInEnum) + "'.");
}
finally {
stopGrid("GridifySetToSetTarget");
stopGrid("GridifySetToSetTarget2");
stopGrid("GridifySetToSetTarget3");
}
}
/**
* @throws Exception If failed.
*/
public void testGridifySetToValue() throws Exception {
try {
startGrid("GridifySetToValueTarget");
startGrid("GridifySetToValueTarget2");
startGrid("GridifySetToValueTarget3");
GridifySetToValueTargetInterface target = GridifySpringEnhancer.enhance(new GridifySetToValueTarget());
Long max = target.findMaximum(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Maximum in collection '" + max + "'.");
max = target.findMaximumInList(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Maximum in list '" + max + "'.");
max = target.findMaximumWithoutSplitSize(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Maximum w/o splitsize in collection '" + max + "'.");
max = target.findMaximumWithoutSplitSizeAndThreshold(Arrays.asList(2L, 3L, 4L, 6L));
info(">>> Maximum w/o splitsize and threshold in collection '" + max + "'.");
max = target.findMaximumInIterator(Arrays.asList(2L, 3L, 4L, 6L).iterator());
info(">>> Maximum in iterator '" + max + "'.");
max = target.findMaximumInEnumeration(new MathEnumerationAdapter<>(Arrays.asList(2L, 3L, 4L, 6L)));
info(">>> Maximum in enumeration '" + max + "'.");
}
finally {
stopGrid("GridifySetToValueTarget");
stopGrid("GridifySetToValueTarget2");
stopGrid("GridifySetToValueTarget3");
}
}
/**
* Convert data to collection.
*
* @param iter Iterator.
* @return Collection.
*/
private <T> Collection<T> convert(Iterator<T> iter) {
List<T> list = new ArrayList<>();
while (iter.hasNext())
list.add(iter.next());
return list;
}
/**
* Convert data to collection.
*
* @param iter Iterator.
* @return Collection.
*/
private <T> Collection<T> convert(Enumeration<T> iter) {
List<T> list = new ArrayList<>();
while (iter.hasMoreElements())
list.add(iter.nextElement());
return list;
}
/**
* Enumeration adapter.
*/
private static class MathEnumerationAdapter<T> implements Enumeration<T> {
/** */
private Iterator<T> iter;
/**
* Creates Enumeration.
*
* @param col Input collection.
*/
MathEnumerationAdapter(Collection<T> col) {
iter = col.iterator();
}
/** {@inheritDoc} */
@Override public boolean hasMoreElements() {
return iter.hasNext();
}
/** {@inheritDoc} */
@Override public T nextElement() {
return iter.next();
}
}
}