manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From min...@apache.org
Subject svn commit: r1488818 - in /manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents: ./ output/ output/filesystem/
Date Mon, 03 Jun 2013 00:48:32 GMT
Author: minoru
Date: Mon Jun  3 00:48:32 2013
New Revision: 1488818

URL: http://svn.apache.org/r1488818
Log: (empty)

Added:
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java
  (with props)
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
  (with props)
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java
  (with props)
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java
  (with props)
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java
  (with props)
    manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java
  (with props)

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,68 @@
+/* $Id: FileOutputConfig.java 1299512 2013-05-31 22:59:38Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+import org.apache.manifoldcf.core.interfaces.IPostParameters;
+
+
+public class FileOutputConfig extends FileOutputParam {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -2071290103498352538L;
+
+  /** Parameters used for the configuration */
+  final private static ParameterEnum[] CONFIGURATIONLIST = {};
+
+  /** Build a set of ElasticSearchParameters by reading ConfigParams. If the
+   * value returned by ConfigParams.getParameter is null, the default value is
+   * set.
+   * 
+   * @param paramList
+   * @param params
+   */
+  public FileOutputConfig(ConfigParams params)
+  {
+    super(CONFIGURATIONLIST);
+    for (ParameterEnum param : CONFIGURATIONLIST) {
+      String value = params.getParameter(param.name());
+      if (value == null) {
+        value = param.defaultValue;
+      }
+      put(param, value);
+    }
+  }
+
+  /**
+   * @param variableContext
+   * @param parameters
+   */
+  public final static void contextToConfig(IPostParameters variableContext, ConfigParams
parameters) {
+    for (ParameterEnum param : CONFIGURATIONLIST) {
+      String p = variableContext.getParameter(param.name().toLowerCase());
+      if (p != null) {
+        parameters.setParameter(param.name(), p);
+      }
+    }
+  }
+
+}

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConfig.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,535 @@
+/* $Id: FileOutputConnector.java 991374 2013-05-31 23:04:08Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.nio.channels.ClosedChannelException;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.manifoldcf.agents.interfaces.IOutputAddActivity;
+import org.apache.manifoldcf.agents.interfaces.IOutputRemoveActivity;
+import org.apache.manifoldcf.agents.interfaces.OutputSpecification;
+import org.apache.manifoldcf.agents.interfaces.RepositoryDocument;
+import org.apache.manifoldcf.agents.interfaces.ServiceInterruption;
+import org.apache.manifoldcf.agents.output.BaseOutputConnector;
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+import org.apache.manifoldcf.core.interfaces.ConfigurationNode;
+import org.apache.manifoldcf.core.interfaces.IHTTPOutput;
+import org.apache.manifoldcf.core.interfaces.IPostParameters;
+import org.apache.manifoldcf.core.interfaces.IThreadContext;
+import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
+import org.apache.manifoldcf.core.interfaces.SpecificationNode;
+import org.json.JSONException;
+
+public class FileOutputConnector extends BaseOutputConnector {
+
+  public static final String _rcsid = "@(#)$Id: FileOutputConnector.java 988245 2010-08-23
18:39:35Z minoru $";
+
+  // Activities we log
+
+  /** Ingestion activity */
+  public final static String INGEST_ACTIVITY = "document ingest";
+  /** Document removal activity */
+  public final static String REMOVE_ACTIVITY = "document deletion";
+
+  // Activities list
+  protected static final String[] activitiesList = new String[]{INGEST_ACTIVITY, REMOVE_ACTIVITY};
+
+  /** Forward to the javascript to check the configuration parameters */
+  private static final String EDIT_CONFIGURATION_JS = "editConfiguration.js";
+
+  /** Forward to the HTML template to edit the configuration parameters */
+  private static final String EDIT_CONFIGURATION_HTML = "editConfiguration.html";
+
+  /** Forward to the HTML template to view the configuration parameters */
+  private static final String VIEW_CONFIGURATION_HTML = "viewConfiguration.html";
+
+  /** Forward to the javascript to check the specification parameters for the job */
+  private static final String EDIT_SPECIFICATION_JS = "editSpecification.js";
+
+  /** Forward to the template to edit the configuration parameters for the job */
+  private static final String EDIT_SPECIFICATION_HTML = "editSpecification.html";
+
+  /** Forward to the template to view the specification parameters for the job */
+  private static final String VIEW_SPECIFICATION_HTML = "viewSpecification.html";
+
+  /** Constructor.
+   */
+  public FileOutputConnector() {
+  }
+
+  /** Return the list of activities that this connector supports (i.e. writes into the log).
+   *@return the list.
+   */
+  @Override
+  public String[] getActivitiesList() {
+    return activitiesList;
+  }
+
+  /** Connect.
+   *@param configParameters is the set of configuration parameters, which
+   * in this case describe the target appliance, basic auth configuration, etc.  (This formerly
came
+   * out of the ini file.)
+   */
+  @Override
+  public void connect(ConfigParams configParameters) {
+    super.connect(configParameters);
+  }
+
+  /** Close the connection.  Call this before discarding the connection.
+   */
+  @Override
+  public void disconnect() throws ManifoldCFException {
+    super.disconnect();
+  }
+
+  /** Set up a session */
+  protected void getSession() throws ManifoldCFException, ServiceInterruption {
+  }
+
+  /** Test the connection.  Returns a string describing the connection integrity.
+   *@return the connection's status as a displayable string.
+   */
+  @Override
+  public String check() throws ManifoldCFException {
+    try {
+      getSession();
+      return super.check();
+    } catch (ServiceInterruption e) {
+      return "Transient error: "+e.getMessage();
+    }
+  }
+
+  /** Get an output version string, given an output specification.  The output version string
is used to uniquely describe the pertinent details of
+   * the output specification and the configuration, to allow the Connector Framework to
determine whether a document will need to be output again.
+   * Note that the contents of the document cannot be considered by this method, and that
a different version string (defined in IRepositoryConnector)
+   * is used to describe the version of the actual document.
+   *
+   * 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.
+   *@param spec is the current output specification for the job that is doing the crawling.
+   *@return a string, of unlimited length, which uniquely describes output configuration
and specification in such a way that if two such strings are equal,
+   * the document will not need to be sent again to the output data store.
+   */
+  @Override
+  public String getOutputDescription(OutputSpecification spec) throws ManifoldCFException,
ServiceInterruption {
+    FileOutputSpecs specs = new FileOutputSpecs(getSpecNode(spec));
+    return specs.toJson().toString();
+  }
+
+  /** 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 an output connector
may use to perform operations, such as logging processing activity.
+   *@return the document status (accepted or permanently rejected).
+   */
+  @Override
+  public int addOrReplaceDocument(String documentURI, String outputDescription, RepositoryDocument
document, String authorityNameString, IOutputAddActivity activities) throws ManifoldCFException,
ServiceInterruption {
+    // Establish a session
+    getSession();
+
+    FileOutputConfig config = getConfigParameters(null);
+
+    FileOutputSpecs specs = null;
+    StringBuffer path = new StringBuffer();
+    InputStream input = null;
+    FileOutputStream output = null;
+    FileLock lock = null;
+    try {
+      specs = new FileOutputSpecs(outputDescription);
+
+      /*
+       * make file path
+       */
+      if (specs.getRootPath() != null) {
+        path.append(specs.getRootPath());
+      }
+      path.append(documentURItoFilePath(documentURI));
+
+      File file = new File(path.toString());
+
+      /*
+       * make directory
+       */
+      if (!file.getParentFile().exists()) {
+        file.getParentFile().mkdirs();
+      }
+
+      /*
+       * delete old file
+       */
+      if (file.exists()) {
+        file.delete();
+      }
+
+      input = document.getBinaryStream();
+      output = new FileOutputStream(file);
+
+      try {
+        /*
+         * lock file
+         */
+        boolean locked = false;
+        int retryCount = 0;
+        FileChannel channel = output.getChannel();
+        while(retryCount < 10) {
+          lock = channel.tryLock();
+          if (lock == null) {
+            retryCount++;
+            try {
+              Thread.sleep(1000L);
+            } catch(InterruptedException e) {
+            }
+          } else {
+            locked = true;
+            break;
+          }
+        }
+        if (!locked) {
+          throw new ManifoldCFException("Lock failed.");
+        }
+
+        /*
+         * write file
+         */
+        byte buf[] = new byte[1024];
+        int len;
+        while((len = input.read(buf)) != -1) {
+          output.write(buf, 0, len);
+        }
+        output.flush();
+      } finally {
+        /*
+         * release file
+         */
+        try {
+          if (lock != null) {
+            lock.release();
+          }
+        } catch (ClosedChannelException e) {
+        }
+      }
+    } catch (JSONException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } catch (URISyntaxException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } catch (SecurityException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } catch (FileNotFoundException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } catch (IOException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } catch (NullPointerException e) {
+      return DOCUMENTSTATUS_REJECTED;
+    } finally {
+      try {
+        input.close();
+      } catch (IOException e) {
+      }
+      try {
+        output.close();
+      } catch (IOException e) {
+      }
+    }
+
+    activities.recordActivity(null, INGEST_ACTIVITY, new Long(document.getBinaryLength()),
documentURI, "OK", null);
+    return DOCUMENTSTATUS_ACCEPTED;
+  }
+
+  /** Remove a document using the connector.
+   * Note that the last outputDescription is included, since it may be necessary for the
connector to use such information to know how to properly remove the document.
+   *@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 last description string that was constructed for this
document by the getOutputDescription() method above.
+   *@param activities is the handle to an object that the implementer of an output connector
may use to perform operations, such as logging processing activity.
+   */
+  @Override
+  public void removeDocument(String documentURI, String outputDescription, IOutputRemoveActivity
activities) throws ManifoldCFException, ServiceInterruption {
+    // Establish a session
+    getSession();
+
+    FileOutputConfig config = getConfigParameters(null);
+
+    FileOutputSpecs specs = null;
+    StringBuffer path = new StringBuffer();
+    try {
+      specs = new FileOutputSpecs(outputDescription);
+
+      /*
+       * make path
+       */
+      if (specs.getRootPath() != null) {
+        path.append(specs.getRootPath());
+      }
+      path.append(documentURItoFilePath(documentURI));
+
+      File file = new File(path.toString());
+
+      /*
+       * delete old file
+       */
+      if (file.exists()) {
+        file.delete();
+      }
+    } catch (JSONException e) {
+    } catch (URISyntaxException e) {
+    } catch (NullPointerException e) {
+    }
+
+    activities.recordActivity(null, REMOVE_ACTIVITY, null, documentURI, "OK", null);
+  }
+
+  /** Output the configuration header section.
+   * This method is called in the head section of the connector's configuration page.  Its
purpose is to add the required tabs to the list, and to output any
+   * javascript methods that might be needed by the configuration editing HTML.
+   *@param threadContext is the local thread context.
+   *@param out is the output to which any HTML should be sent.
+   *@param parameters are the configuration parameters, as they currently exist, for this
connection being configured.
+   *@param tabsArray is an array of tab names.  Add to this array any tab names that are
specific to the connector.
+   */
+  @Override
+  public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, Locale
locale, ConfigParams parameters, List<String> tabsArray) throws ManifoldCFException,
IOException {
+  }
+
+  /** Output the configuration body section.
+   * This method is called in the body section of the connector's configuration page.  Its
purpose is to present the required form elements for editing.
+   * The coder can presume that the HTML that is output from this configuration will be within
appropriate <html>, <body>, and <form> tags.  The name of the
+   * form is "editconnection".
+   *@param threadContext is the local thread context.
+   *@param out is the output to which any HTML should be sent.
+   *@param parameters are the configuration parameters, as they currently exist, for this
connection being configured.
+   *@param tabName is the current tab name.
+   */
+  @Override
+  public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, Locale
locale, ConfigParams parameters, String tabName) throws ManifoldCFException, IOException {
+  }
+
+  /** Process a configuration post.
+   * This method is called at the start of the connector's configuration page, whenever there
is a possibility that form data for a connection has been
+   * posted.  Its purpose is to gather form information and modify the configuration parameters
accordingly.
+   * The name of the posted form is "editconnection".
+   *@param threadContext is the local thread context.
+   *@param variableContext is the set of variables available from the post, including binary
file post information.
+   *@param parameters are the configuration parameters, as they currently exist, for this
connection being configured.
+   *@return null if all is well, or a string error message if there is an error that should
prevent saving of the connection (and cause a redirection to an error page).
+   */
+  @Override
+  public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext,
Locale locale, ConfigParams parameters) throws ManifoldCFException {
+    return null;
+  }
+
+  /** View configuration.
+   * This method is called in the body section of the connector's view configuration page.
 Its purpose is to present the connection information to the user.
+   * The coder can presume that the HTML that is output from this configuration will be within
appropriate <html> and <body> tags.
+   *@param threadContext is the local thread context.
+   *@param out is the output to which any HTML should be sent.
+   *@param parameters are the configuration parameters, as they currently exist, for this
connection being configured.
+   */
+  @Override
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, Locale locale,
ConfigParams parameters) throws ManifoldCFException, IOException {
+  }
+
+  /** Output the specification header section.
+   * This method is called in the head section of a job page which has selected an output
connection of the current type.  Its purpose is to add the required tabs
+   * to the list, and to output any javascript methods that might be needed by the job editing
HTML.
+   *@param out is the output to which any HTML should be sent.
+   *@param os is the current output specification for this job.
+   *@param tabsArray is an array of tab names.  Add to this array any tab names that are
specific to the connector.
+   */
+  @Override
+  public void outputSpecificationHeader(IHTTPOutput out, Locale locale, OutputSpecification
os, List<String> tabsArray) throws ManifoldCFException, IOException {
+    super.outputSpecificationHeader(out, locale, os, tabsArray);
+    tabsArray.add(Messages.getString(locale, "FileConnector.PathTabName"));
+    outputResource(EDIT_SPECIFICATION_JS, out, locale, null, null);
+  }
+
+  /** Output the specification body section.
+   * This method is called in the body section of a job page which has selected an output
connection of the current type.  Its purpose is to present the required form elements for
editing.
+   * The coder can presume that the HTML that is output from this configuration will be within
appropriate <html>, <body>, and <form> tags.  The name of the
+   * form is "editjob".
+   *@param out is the output to which any HTML should be sent.
+   *@param os is the current output specification for this job.
+   *@param tabName is the current tab name.
+   */
+  @Override
+  public void outputSpecificationBody(IHTTPOutput out, Locale locale, OutputSpecification
os, String tabName) throws ManifoldCFException, IOException {
+    super.outputSpecificationBody(out, locale, os, tabName);
+    FileOutputSpecs specs = getSpecParameters(os);
+    outputResource(EDIT_SPECIFICATION_HTML, out, locale, specs, tabName);
+  }
+
+  /** Process a specification post.
+   * This method is called at the start of job's edit or view page, whenever there is a possibility
that form data for a connection has been
+   * posted.  Its purpose is to gather form information and modify the output specification
accordingly.
+   * The name of the posted form is "editjob".
+   *@param variableContext contains the post data, including binary file-upload information.
+   *@param os is the current output specification for this job.
+   *@return null if all is well, or a string error message if there is an error that should
prevent saving of the job (and cause a redirection to an error page).
+   */
+  @Override
+  public String processSpecificationPost(IPostParameters variableContext, Locale locale,
OutputSpecification os) throws ManifoldCFException {
+    ConfigurationNode specNode = getSpecNode(os);
+    boolean bAdd = (specNode == null);
+    if (bAdd) {
+      specNode = new SpecificationNode(FileOutputConstant.PARAM_ROOTPATH);
+    }
+    FileOutputSpecs.contextToSpecNode(variableContext, specNode);
+    if (bAdd) {
+      os.addChild(os.getChildCount(), specNode);
+    }
+
+    return null;
+  }
+
+  /** View specification.
+   * This method is called in the body section of a job's view page.  Its purpose is to present
the output specification information to the user.
+   * The coder can presume that the HTML that is output from this configuration will be within
appropriate <html> and <body> tags.
+   *@param out is the output to which any HTML should be sent.
+   *@param os is the current output specification for this job.
+   */
+  @Override
+  public void viewSpecification(IHTTPOutput out, Locale locale, OutputSpecification os) throws
ManifoldCFException, IOException {
+    outputResource(VIEW_SPECIFICATION_HTML, out, locale, getSpecParameters(os), null);
+  }
+
+  /**
+   * @param os
+   * @return
+   */
+  final private SpecificationNode getSpecNode(OutputSpecification os)
+  {
+    int l = os.getChildCount();
+    for (int i = 0; i < l; i++) {
+      SpecificationNode node = os.getChild(i);
+      if (node.getType().equals(FileOutputConstant.PARAM_ROOTPATH)) {
+        return node;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * @param os
+   * @return
+   * @throws ManifoldCFException
+   */
+  final private FileOutputSpecs getSpecParameters(OutputSpecification os) throws ManifoldCFException
{
+    return new FileOutputSpecs(getSpecNode(os));
+  }
+
+  /**
+   * @param configParams
+   * @return
+   */
+  final private FileOutputConfig getConfigParameters(ConfigParams configParams) {
+    if (configParams == null)
+      configParams = getConfiguration();
+    return new FileOutputConfig(configParams);
+  }
+
+  /** Read the content of a resource, replace the variable ${PARAMNAME} with the
+   * value and copy it to the out.
+   * 
+   * @param resName
+   * @param out
+   * @throws ManifoldCFException */
+  private static void outputResource(String resName, IHTTPOutput out, Locale locale, FileOutputParam
params, String tabName) throws ManifoldCFException {
+    Map<String,String> paramMap = null;
+    if (params != null) {
+      paramMap = params.buildMap();
+      if (tabName != null) {
+        paramMap.put("TabName", tabName);
+      }
+    }
+    Messages.outputResourceWithVelocity(out, locale, resName, paramMap, true);
+  }
+
+  /**
+   * @param documentURI
+   * @return
+   * @throws URISyntaxException
+   * @throws NullPointerException
+   */
+  final private String documentURItoFilePath(String documentURI) throws URISyntaxException,
NullPointerException {
+    StringBuffer path = new StringBuffer();
+    URI uri = null;
+
+    uri = new URI(documentURI);
+
+    if (uri.getScheme() != null) {
+      if (!path.toString().endsWith("/")) {
+        path.append("/");
+      }
+      path.append(uri.getScheme());
+    }
+
+    if (uri.getUserInfo() != null) {
+      if (!path.toString().endsWith("/")) {
+        path.append("/");
+      }
+      path.append(uri.getUserInfo());
+    }
+
+    if (uri.getHost() != null) {
+      if (!path.toString().endsWith("/")) {
+        path.append("/");
+      }
+      path.append(uri.getHost());
+    }
+
+    if (uri.getPort() != -1) {
+      if (!path.toString().endsWith("/")) {
+        path.append("/");
+      }
+      path.append(uri.getPort());
+    }
+
+    if (uri.getPath() != null) {
+      if (!uri.getPath().startsWith("/")) {
+        path.append("/");
+      }
+      path.append(uri.getPath());
+    }
+
+    if (path.toString().endsWith("/")) {
+      path.append(".content");
+    }
+
+    return path.toString();
+  }
+}

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConnector.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,33 @@
+/* $Id: FileOutputConstant.java 991374 2013-05-31 23:01:08Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+
+/** Parameters and output data for File output connector.
+ */
+public class FileOutputConstant
+{
+  public static final String _rcsid = "@(#)$Id: SolrConfig.java 991374 2010-08-31 22:32:08Z
minoru $";
+
+  // Configuration parameters
+
+  /** Root path */
+  public static final String PARAM_ROOTPATH = "rootpath";
+
+}

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputConstant.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,58 @@
+/* $Id: FileOutputParam.java 1299512 2013-05-31 22:59:38Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.manifoldcf.agents.output.filesystem.FileOutputParam.ParameterEnum;
+
+/** 
+ * Parameters data for the elasticsearch output connector.
+ */
+public class FileOutputParam extends HashMap<ParameterEnum, String>
+{
+
+  /** Parameters constants */
+  public enum ParameterEnum {
+    ROOTPATH("/tmp");
+
+    final protected String defaultValue;
+
+    private ParameterEnum(String defaultValue) {
+      this.defaultValue = defaultValue;
+    }
+  }
+
+  private static final long serialVersionUID = -140994685772720029L;
+
+  protected FileOutputParam(ParameterEnum[] params) {
+    super(params.length);
+  }
+
+  final public Map<String, String> buildMap() {
+    Map<String, String> rval = new HashMap<String, String>();
+    for (Map.Entry<ParameterEnum, String> entry : this.entrySet()) {
+      rval.put(entry.getKey().name(), entry.getValue());
+    }
+    return rval;
+  }
+
+}

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputParam.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,153 @@
+/* $Id: FileOutputSpecs.java 1299512 2013-05-31 22:58:38Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.manifoldcf.core.interfaces.ConfigurationNode;
+import org.apache.manifoldcf.core.interfaces.IPostParameters;
+import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class FileOutputSpecs extends FileOutputParam {
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 1859652730572662025L;
+
+  final public static ParameterEnum[] SPECIFICATIONLIST = {
+    ParameterEnum.ROOTPATH
+  };
+
+  private String rootPath;
+
+  /** Build a set of ElasticSearch parameters by reading an JSON object
+   * 
+   * @param json
+   * @throws JSONException
+   * @throws ManifoldCFException
+   */
+  public FileOutputSpecs(String json) throws JSONException, ManifoldCFException {
+    this(new JSONObject(json));
+  }
+
+  /** Build a set of ElasticSearch parameters by reading an JSON object
+   * 
+   * @param json
+   * @throws JSONException
+   * @throws ManifoldCFException
+   */
+  public FileOutputSpecs(JSONObject json) throws JSONException, ManifoldCFException {
+    super(SPECIFICATIONLIST);
+    rootPath = null;
+    for (ParameterEnum param : SPECIFICATIONLIST) {
+      String value = null;
+      value = json.getString(param.name());
+      if (value == null) {
+        value = param.defaultValue;
+      }
+      put(param, value);
+    }
+    rootPath = getRootPath();
+  }
+
+  /** Build a set of ElasticSearch parameters by reading an instance of
+   * SpecificationNode.
+   * 
+   * @param node
+   * @throws ManifoldCFException
+   */
+  public FileOutputSpecs(ConfigurationNode node) throws ManifoldCFException {
+    super(SPECIFICATIONLIST);
+    rootPath = null;
+    for (ParameterEnum param : SPECIFICATIONLIST) {
+      String value = null;
+      if (node != null) {
+        value = node.getAttributeValue(param.name());
+      }
+      if (value == null) {
+        value = param.defaultValue;
+      }
+      put(param, value);
+    }
+    rootPath = getRootPath();
+  }
+
+  /**
+   * @param variableContext
+   * @param specNode
+   */
+  public static void contextToSpecNode(IPostParameters variableContext, ConfigurationNode
specNode) {
+    for (ParameterEnum param : SPECIFICATIONLIST) {
+      String p = variableContext.getParameter(param.name().toLowerCase());
+      if (p != null) {
+        specNode.setAttribute(param.name(), p);
+      }
+    }
+  }
+
+  /** @return a JSON representation of the parameter list */
+  public JSONObject toJson() {
+    return new JSONObject(this);
+  }
+
+  /**
+   * @return
+   */
+  public String getRootPath() {
+    return get(ParameterEnum.ROOTPATH);
+  }
+
+  /**
+   * @param content
+   * @return
+   * @throws ManifoldCFException
+   */
+  private final static TreeSet<String> createStringSet(String content) throws ManifoldCFException
{
+    TreeSet<String> set = new TreeSet<String>();
+    BufferedReader br = null;
+    StringReader sr = null;
+    try {
+      sr = new StringReader(content);
+      br = new BufferedReader(sr);
+      String line = null;
+      while ((line = br.readLine()) != null) {
+        line = line.trim();
+        if (line.length() > 0) {
+          set.add(line);
+        }
+      }
+      return set;
+    } catch (IOException e) {
+      throw new ManifoldCFException(e);
+    } finally {
+      if (br != null) {
+        IOUtils.closeQuietly(br);
+      }
+    }
+  }
+
+}

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/FileOutputSpecs.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java
URL: http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java?rev=1488818&view=auto
==============================================================================
--- manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java
(added)
+++ manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java
Mon Jun  3 00:48:32 2013
@@ -0,0 +1,141 @@
+/* $Id: Messages.java 1295926 2013-05-31 23:00:00Z minoru $ */
+
+/**
+ * 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.output.filesystem;
+
+import java.util.Locale;
+import java.util.Map;
+import org.apache.manifoldcf.core.interfaces.ManifoldCFException;
+import org.apache.manifoldcf.core.interfaces.IHTTPOutput;
+
+public class Messages extends org.apache.manifoldcf.ui.i18n.Messages
+{
+  public static final String DEFAULT_BUNDLE_NAME="org.apache.manifoldcf.agents.output.filesystem.common";
+  public static final String DEFAULT_PATH_NAME="org.apache.manifoldcf.agents.output.filesystem";
+
+  /** Constructor - do no instantiate
+   */
+  protected Messages()
+  {
+  }
+
+  public static String getString(Locale locale, String messageKey)
+  {
+    return getString(DEFAULT_BUNDLE_NAME, locale, messageKey, null);
+  }
+
+  public static String getAttributeString(Locale locale, String messageKey)
+  {
+    return getAttributeString(DEFAULT_BUNDLE_NAME, locale, messageKey, null);
+  }
+
+  public static String getBodyString(Locale locale, String messageKey)
+  {
+    return getBodyString(DEFAULT_BUNDLE_NAME, locale, messageKey, null);
+  }
+
+  public static String getAttributeJavascriptString(Locale locale, String messageKey)
+  {
+    return getAttributeJavascriptString(DEFAULT_BUNDLE_NAME, locale, messageKey, null);
+  }
+
+  public static String getBodyJavascriptString(Locale locale, String messageKey)
+  {
+    return getBodyJavascriptString(DEFAULT_BUNDLE_NAME, locale, messageKey, null);
+  }
+
+  public static String getString(Locale locale, String messageKey, Object[] args)
+  {
+    return getString(DEFAULT_BUNDLE_NAME, locale, messageKey, args);
+  }
+
+  public static String getAttributeString(Locale locale, String messageKey, Object[] args)
+  {
+    return getAttributeString(DEFAULT_BUNDLE_NAME, locale, messageKey, args);
+  }
+
+  public static String getBodyString(Locale locale, String messageKey, Object[] args)
+  {
+    return getBodyString(DEFAULT_BUNDLE_NAME, locale, messageKey, args);
+  }
+
+  public static String getAttributeJavascriptString(Locale locale, String messageKey, Object[]
args)
+  {
+    return getAttributeJavascriptString(DEFAULT_BUNDLE_NAME, locale, messageKey, args);
+  }
+
+  public static String getBodyJavascriptString(Locale locale, String messageKey, Object[]
args)
+  {
+    return getBodyJavascriptString(DEFAULT_BUNDLE_NAME, locale, messageKey, args);
+  }
+
+  // More general methods which allow bundlenames and class loaders to be specified.
+
+  public static String getString(String bundleName, Locale locale, String messageKey, Object[]
args)
+  {
+    return getString(Messages.class, bundleName, locale, messageKey, args);
+  }
+
+  public static String getAttributeString(String bundleName, Locale locale, String messageKey,
Object[] args)
+  {
+    return getAttributeString(Messages.class, bundleName, locale, messageKey, args);
+  }
+
+  public static String getBodyString(String bundleName, Locale locale, String messageKey,
Object[] args)
+  {
+    return getBodyString(Messages.class, bundleName, locale, messageKey, args);
+  }
+
+  public static String getAttributeJavascriptString(String bundleName, Locale locale, String
messageKey, Object[] args)
+  {
+    return getAttributeJavascriptString(Messages.class, bundleName, locale, messageKey, args);
+  }
+
+  public static String getBodyJavascriptString(String bundleName, Locale locale, String messageKey,
Object[] args)
+  {
+    return getBodyJavascriptString(Messages.class, bundleName, locale, messageKey, args);
+  }
+
+  // Resource output
+
+  public static void outputResource(IHTTPOutput output, Locale locale, String resourceKey,
+      Map<String,String> substitutionParameters, boolean mapToUpperCase)
+          throws ManifoldCFException
+          {
+    outputResource(output,Messages.class,DEFAULT_PATH_NAME,locale,resourceKey,
+        substitutionParameters,mapToUpperCase);
+          }
+
+  public static void outputResourceWithVelocity(IHTTPOutput output, Locale locale, String
resourceKey,
+      Map<String,String> substitutionParameters, boolean mapToUpperCase)
+          throws ManifoldCFException
+          {
+    outputResourceWithVelocity(output,Messages.class,DEFAULT_BUNDLE_NAME,DEFAULT_PATH_NAME,locale,resourceKey,
+        substitutionParameters,mapToUpperCase);
+          }
+
+  public static void outputResourceWithVelocity(IHTTPOutput output, Locale locale, String
resourceKey,
+      Map<String,Object> contextObjects)
+          throws ManifoldCFException
+          {
+    outputResourceWithVelocity(output,Messages.class,DEFAULT_BUNDLE_NAME,DEFAULT_PATH_NAME,locale,resourceKey,
+        contextObjects);
+          }
+
+}
+

Propchange: manifoldcf/trunk/connectors/filesystem/connector/src/main/java/org/apache/manifoldcf/agents/output/filesystem/Messages.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



Mime
View raw message