/* * Copyright (c) 2011-2015 EPFL DATA Laboratory * Copyright (c) 2014-2015 The Squall Collaboration (see NOTICE) * * All rights reserved. * * Licensed 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 ch.epfl.data.squall.operators; import java.io.Serializable; import java.util.List; import ch.epfl.data.squall.visitors.OperatorVisitor; public interface Operator extends Serializable { public void accept(OperatorVisitor ov); /* * Used mainly for Preaggregations */ public List<String> getContent(); /* * This is now decoupled from printContent */ public int getNumTuplesProcessed(); /* return true if an operator is blocking (can revoke previously sent tuple) */ public boolean isBlocking(); /* * if hasPerstistentStorage returns true, printContent can be invoked For * nonPersistantStorages, printing is pefromed as soon as tuple arrives. It * is done outside Operator class, since there are situations when operators * are not called at all, and still printing has to be performed - * StormDataSrouce class. It is responsability of Storm component to * perfrorm desired printing in that case. This method is invoked when we * are sure that no more tuples will arive at the component (i.e when * topology is to be killed). Used for UI */ public String printContent(); public List<List<String>> process(List<String> tuple, long lineageTimestamp); }