/******************************************************************************* * Copyright (c) 2005, 2006 committers of openArchitectureWare and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * committers of openArchitectureWare - initial API and implementation *******************************************************************************/ package org.eclipse.internal.xtend.util; import java.util.Collection; import java.util.Collections; import org.eclipse.xtend.expression.ExecutionContextImpl; import org.eclipse.xtend.expression.ExpressionFacade; import org.eclipse.xtend.type.impl.java.JavaMetaModel; import org.eclipse.xtend.type.impl.java.beans.JavaBeansStrategy; public class HigherOrder { @SuppressWarnings("unchecked") public static <T> Collection<T> select(Collection<T> col, String closure) { return (Collection<T>) facade().evaluate("x.select("+closure+")", Collections.singletonMap("x", col)); } public static <T> Collection<?> collect(Collection<T> col, String closure) { return (Collection<?>) facade().evaluate("x.collect("+closure+")", Collections.singletonMap("x", col)); } public static <T> boolean exists(Collection<T> col, String closure) { return (Boolean) facade().evaluate("x.select("+closure+")", Collections.singletonMap("x", col)); } public static <T> boolean forAll(Collection<T> col, String closure) { return (Boolean)facade().evaluate("x.select("+closure+")", Collections.singletonMap("x", col)); } @SuppressWarnings("unchecked") public static <T> T first(Collection<T> col, String closure) { Collection<T> re = (Collection<T>) facade().evaluate("x.select("+closure+")", Collections.singletonMap("x", col)); if (re!=null && re.size()>0) { return re.iterator().next(); } return null; } private static ExpressionFacade facade() { ExecutionContextImpl ctx = new ExecutionContextImpl(); ctx.registerMetaModel(new JavaMetaModel("java",new JavaBeansStrategy())); ExpressionFacade ef = new ExpressionFacade(ctx); return ef; } }