/*
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.xcmis.search.content.interceptors;
import org.xcmis.search.content.command.InvocationContext;
import org.xcmis.search.content.command.VisitableCommand;
import org.xcmis.search.content.command.index.ModifyIndexCommand;
import org.xcmis.search.content.command.query.ExecuteSelectorCommand;
import org.xcmis.search.content.command.query.ProcessQueryCommand;
import org.xcmis.search.content.command.read.GetChildEntriesCommand;
import org.xcmis.search.content.command.read.GetContentEntryCommand;
import org.xcmis.search.content.command.read.GetUnfiledEntriesCommand;
/**
* This interface is the core of search service, where each
* {@link VisitableCommand} can be visited by a Visitor implementation. Visitors
* which are accepted by the {@link VisitableCommand} are able to modify the
* command based on any logic encapsulated by the visitor.
*
*/
public interface Visitor
{
/**
* @param ctx
* @param putDocumentsToTheIndexCommand
* @return
* @throws Throwable
*/
Object visitModifyIndexCommand(InvocationContext ctx, ModifyIndexCommand command) throws Throwable;
/**
* @param ctx
* @param executeQueryCommand
* @return
* @throws Throwable
*/
Object visitExecuteSelectorCommand(InvocationContext ctx, ExecuteSelectorCommand command) throws Throwable;
/**
* @param ctx
* @param getChildNodesCommand
* @return
* @throws Throwable
*/
Object visitChildEntriesCommand(InvocationContext ctx, GetChildEntriesCommand command) throws Throwable;
/**
* @param ctx
* @param getNodeCommand
* @return
* @throws Throwable
*/
Object visitGetContentEntryCommand(InvocationContext ctx, GetContentEntryCommand command) throws Throwable;
/**
* @param ctx
* @param processQueryCommand
* @return
* @throws Throwable
*/
Object visitProcessQueryCommand(InvocationContext ctx, ProcessQueryCommand command) throws Throwable;
/**
* @param ctx
* @param getUnfilledEntriesCommand
* @return
* @throws Throwable
*/
Object visitGetUnfiledEntriesCommand(InvocationContext ctx, GetUnfiledEntriesCommand command) throws Throwable;
}