/* $Id$ */ /** * 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.manifoldcf.agents.transformation.nullconnector; import org.apache.manifoldcf.core.interfaces.*; import org.apache.manifoldcf.agents.interfaces.*; import java.io.*; import java.util.*; /** This connector works as a transformation connector, but does nothing other than logging. * */ public class NullConnector extends org.apache.manifoldcf.agents.transformation.BaseTransformationConnector { public static final String _rcsid = "@(#)$Id$"; protected static final String ACTIVITY_PROCESS = "process"; protected static final String[] activitiesList = new String[]{ACTIVITY_PROCESS}; /** Return a list of activities that this connector generates. * The connector does NOT need to be connected before this method is called. *@return the set of activities. */ @Override public String[] getActivitiesList() { return activitiesList; } /** Add (or replace) a document in the output data store using the connector. * This method presumes that the connector object has been configured, and it is thus able to communicate with the output data store should that be * necessary. * The OutputSpecification is *not* provided to this method, because the goal is consistency, and if output is done it must be consistent with the * output description, since that was what was partly used to determine if output should be taking place. So it may be necessary for this method to decode * an output description string in order to determine what should be done. *@param documentURI is the URI of the document. The URI is presumed to be the unique identifier which the output data store will use to process * and serve the document. This URI is constructed by the repository connector which fetches the document, and is thus universal across all output connectors. *@param outputDescription is the description string that was constructed for this document by the getOutputDescription() method. *@param document is the document data to be processed (handed to the output data store). *@param authorityNameString is the name of the authority responsible for authorizing any access tokens passed in with the repository document. May be null. *@param activities is the handle to an object that the implementer of a pipeline connector may use to perform operations, such as logging processing activity, * or sending a modified document to the next stage in the pipeline. *@return the document status (accepted or permanently rejected). *@throws IOException only if there's a stream error reading the document data. */ @Override public int addOrReplaceDocumentWithException(String documentURI, VersionContext pipelineDescription, RepositoryDocument document, String authorityNameString, IOutputAddActivity activities) throws ManifoldCFException, ServiceInterruption, IOException { long startTime = System.currentTimeMillis(); String resultCode = "OK"; String description = null; Long length = null; try { long binaryLength = document.getBinaryLength(); int rval = activities.sendDocument(documentURI,document); length = new Long(binaryLength); resultCode = (rval == DOCUMENTSTATUS_ACCEPTED)?"ACCEPTED":"REJECTED"; return rval; } catch (ServiceInterruption e) { resultCode = "SERVICEINTERRUPTION"; description = e.getMessage(); throw e; } catch (ManifoldCFException e) { resultCode = "EXCEPTION"; description = e.getMessage(); throw e; } catch (IOException e) { resultCode = "IOEXCEPTION"; description = e.getMessage(); throw e; } finally { activities.recordActivity(new Long(startTime), ACTIVITY_PROCESS, length, documentURI, resultCode, description); } } }