/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.support.view; import com.espertech.esper.client.EventType; import com.espertech.esper.epl.expression.ExprConstantNodeImpl; import com.espertech.esper.epl.expression.ExprNode; import com.espertech.esper.epl.spec.StreamSpecOptions; import com.espertech.esper.epl.spec.ViewSpec; import com.espertech.esper.support.epl.SupportExprNodeFactory; import com.espertech.esper.view.ViewFactory; import com.espertech.esper.view.ViewFactoryChain; import com.espertech.esper.view.ViewServiceImpl; import java.util.LinkedList; import java.util.List; /** * Convenience class for making view specifications from class and string arrays. */ public class SupportViewSpecFactory { public static List<ViewSpec> makeSpecListOne() throws Exception { List<ViewSpec> specifications = new LinkedList<ViewSpec>(); ViewSpec specOne = makeSpec("win", "length", new Class[] { Integer.class}, new String[] { "1000" } ); ViewSpec specTwo = makeSpec("stat", "uni", new Class[] { String.class}, new String[] { "intPrimitive" } ); ViewSpec specThree = makeSpec("std", "lastevent", null, null); specifications.add(specOne); specifications.add(specTwo); specifications.add(specThree); return specifications; } public static List<ViewFactory> makeFactoryListOne(EventType parentEventType) throws Exception { return makeFactories(parentEventType, makeSpecListOne()); } public static List<ViewSpec> makeSpecListTwo() throws Exception { List<ViewSpec> specifications = new LinkedList<ViewSpec>(); ViewSpec specOne = makeSpec("std", "groupwin", new Class[] { String.class }, new String[] { "theString" } ); ViewSpec specTwo = makeSpec("win", "length", new Class[] { int.class }, new String[] { "100" } ); specifications.add(specOne); specifications.add(specTwo); return specifications; } public static List<ViewFactory> makeFactoryListTwo(EventType parentEventType) throws Exception { return makeFactories(parentEventType, makeSpecListTwo()); } public static List<ViewSpec> makeSpecListThree() throws Exception { List<ViewSpec> specifications = new LinkedList<ViewSpec>(); ViewSpec specOne = SupportViewSpecFactory.makeSpec("win", "length", new Class[] { Integer.class}, new String[] { "1000" } ); ViewSpec specTwo = SupportViewSpecFactory.makeSpec("std", "unique", new Class[] { String.class}, new String[] { "theString" } ); specifications.add(specOne); specifications.add(specTwo); return specifications; } public static List<ViewFactory> makeFactoryListThree(EventType parentEventType) throws Exception { return makeFactories(parentEventType, makeSpecListThree()); } public static List<ViewSpec> makeSpecListFour() throws Exception { List<ViewSpec> specifications = new LinkedList<ViewSpec>(); ViewSpec specOne = SupportViewSpecFactory.makeSpec("win", "length", new Class[] { Integer.class}, new String[] { "1000" } ); ViewSpec specTwo = SupportViewSpecFactory.makeSpec("stat", "uni", new Class[] { String.class}, new String[] { "intPrimitive" } ); ViewSpec specThree = SupportViewSpecFactory.makeSpec("std", "size", null, null); specifications.add(specOne); specifications.add(specTwo); specifications.add(specThree); return specifications; } public static List<ViewFactory> makeFactoryListFour(EventType parentEventType) throws Exception { return makeFactories(parentEventType, makeSpecListFour()); } public static List<ViewSpec> makeSpecListFive() throws Exception { List<ViewSpec> specifications = new LinkedList<ViewSpec>(); ViewSpec specOne = makeSpec("win", "time", new Class[] { Integer.class}, new String[] { "10000" } ); specifications.add(specOne); return specifications; } public static List<ViewFactory> makeFactoryListFive(EventType parentEventType) throws Exception { return makeFactories(parentEventType, makeSpecListFive()); } public static ViewSpec makeSpec(String namespace, String viewName, Class[] paramTypes, String[] paramValues) throws Exception { return new ViewSpec(namespace, viewName, makeParams(paramTypes, paramValues)); } private static LinkedList<ExprNode> makeParams(Class clazz[], String[] values) throws Exception { LinkedList<ExprNode> parameters = new LinkedList<ExprNode>(); if (values == null) { return parameters; } for (int i = 0; i < values.length; i++) { ExprNode node; String value = values[i]; if (clazz[i] == String.class) { if (value.startsWith("\"")) { value = value.replace("\"", ""); node = new ExprConstantNodeImpl(value); } else { node = SupportExprNodeFactory.makeIdentNodeBean(value); } } else if (clazz[i] == Boolean.class) { node = new ExprConstantNodeImpl(Boolean.valueOf(value)); } else { node = new ExprConstantNodeImpl(Integer.valueOf(value)); } parameters.add(node); } return parameters; } private static List<ViewFactory> makeFactories(EventType parentEventType, List<ViewSpec> viewSpecs) throws Exception { ViewServiceImpl svc = new ViewServiceImpl(); ViewFactoryChain viewFactories = svc.createFactories(1, parentEventType, viewSpecs, new StreamSpecOptions(), SupportStatementContextFactory.makeContext()); return viewFactories.getViewFactoryChain(); } }