You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2014/10/02 17:33:57 UTC

svn commit: r1628999 [1/2] - in /manifoldcf/branches/CONNECTORS-1037/connectors: ./ alfresco-webscript/ alfresco-webscript/connector/ alfresco-webscript/connector/src/ alfresco-webscript/connector/src/main/ alfresco-webscript/connector/src/main/java/ a...

Author: kwright
Date: Thu Oct  2 15:33:55 2014
New Revision: 1628999

URL: http://svn.apache.org/r1628999
Log:
Import contribution of alfresco-webscript connector

Added:
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/build.xml
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/AlfrescoAuthorityConnector.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/ConfigurationHandler.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/Messages.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/AlfrescoConnector.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/ConfigurationHandler.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/Messages.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en.properties
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en_US.properties
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en.properties
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en_US.properties
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration.js
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration_Server.html
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/viewConfiguration.html
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration.js
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration_Server.html
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/viewConfiguration.html
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/alfresco/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/tests/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/tests/AlfrescoAuthorityConnectorTest.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/tests/AlfrescoConnectorTest.java
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/resources/
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/resources/authorities.sample.json
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/resources/metadata.sample.json
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/test/resources/multi.authorities.sample.json
    manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/pom.xml
Modified:
    manifoldcf/branches/CONNECTORS-1037/connectors/pom.xml

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/build.xml
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/build.xml?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/build.xml (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/build.xml Thu Oct  2 15:33:55 2014
@@ -0,0 +1,90 @@
+<!--
+ 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.
+-->
+
+<project name="alfresco-webscript" default="all">
+
+    <import file="../connector-build.xml"/>
+
+    <target name="calculate-testcode-condition">
+        <available file="test-materials-proprietary/alfresco.war" property="alfrescoTestcodeStatus"/>
+        <condition property="tests-present">
+            <isset property="alfrescoTestcodeStatus"/>
+        </condition>
+    </target>
+
+    <target name="pretest-warn" depends="calculate-testcode-condition" unless="tests-present">
+        <echo message="Alfresco Connector integration tests cannot be be performed without alfresco.war"/>
+    </target>
+
+    <path id="connector-classpath">
+        <path refid="mcf-connector-build.connector-classpath"/>
+        <fileset dir="lib-proprietary" includes="*.jar"/>
+        <fileset dir="../../lib">
+            <include name="axis*.jar"/>	
+            <include name="saaj*.jar"/>	
+            <include name="commons-discovery*.jar"/>
+            <include name="jaxrpc*.jar"/>
+            <include name="mail*.jar"/>
+            <include name="opensaml*.jar"/>
+            <include name="wsdl4j*.jar"/>
+            <include name="wss4j*.jar"/>
+            <!--include name="xalan*.jar"/-->
+            <!--include name="xercesImpl*.jar"/-->
+            <include name="xmlsec*.jar"/>
+        </fileset>
+    </path>
+
+    <path id="connector-test-classpath">
+        <path refid="mcf-connector-build.connector-test-classpath"/>
+        <fileset file="../../lib/h2*.jar"/>
+    </path>
+    
+    <target name="lib" depends="mcf-connector-build.lib,precompile-check" if="canBuild">
+        <mkdir dir="dist/lib"/>
+        <copy todir="dist/lib">
+            <fileset dir="../../lib">
+                <include name="axis*.jar"/>	
+                <include name="saaj*.jar"/>	
+                <include name="commons-discovery*.jar"/>
+                <include name="jaxrpc*.jar"/>
+                <include name="mail*.jar"/>
+                <include name="opensaml*.jar"/>
+                <include name="wsdl4j*.jar"/>
+                <include name="wss4j*.jar"/>
+                <!--include name="xalan*.jar"/-->
+                <!--include name="xercesImpl*.jar"/-->
+                <include name="xmlsec*.jar"/>
+            </fileset>
+        </copy>
+    </target>
+
+    <target name="build-test-materials" depends="pretest-check" if="canTest">
+        <mkdir dir="build/alfresco-war"/>
+        <copy todir="build/alfresco-war">
+            <fileset dir="test-materials-proprietary">
+                <include name="alfresco*.war"/>
+            </fileset>
+        </copy>
+    </target>
+
+    <target name="download-cleanup">
+        <delete>
+            <fileset dir="lib-proprietary" excludes="README*.txt"/>
+        </delete>
+    </target>
+
+</project>

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/AlfrescoAuthorityConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/AlfrescoAuthorityConnector.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/AlfrescoAuthorityConnector.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/AlfrescoAuthorityConnector.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,162 @@
+/*
+ * 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.authorities.alfresco;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+
+import org.alfresco.consulting.indexer.client.AlfrescoClient;
+import org.alfresco.consulting.indexer.client.AlfrescoDownException;
+import org.alfresco.consulting.indexer.client.AlfrescoUser;
+import org.alfresco.consulting.indexer.client.WebScriptsAlfrescoClient;
+import org.apache.manifoldcf.authorities.authorities.BaseAuthorityConnector;
+import org.apache.manifoldcf.authorities.interfaces.AuthorizationResponse;
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class AlfrescoAuthorityConnector extends BaseAuthorityConnector {
+  private static final Logger logger = LoggerFactory.getLogger(AlfrescoAuthorityConnector.class);
+  
+  
+  private AlfrescoClient alfrescoClient;
+  
+  private static final AuthorizationResponse denied = new AuthorizationResponse(
+          new String[] { "DEAD_AUTHORITY" }, AuthorizationResponse.RESPONSE_UNREACHABLE);
+  
+  public void setClient(AlfrescoClient client) {
+    alfrescoClient = client;
+  }
+
+  @Override
+  public void connect(ConfigParams config) {
+    super.connect(config);
+
+    String protocol = getConfig(config, "protocol", "http");
+    String hostname = getConfig(config, "hostname", "localhost");
+    String endpoint = getConfig(config, "endpoint", "/alfresco/service");
+    String username = getConfig(config, "username", null);
+    String password = getConfig(config, "password", null);
+
+    alfrescoClient = new WebScriptsAlfrescoClient(protocol, hostname, endpoint,
+            null, null, username, password);
+  }
+
+  private static String getConfig(ConfigParams config,
+                                  String parameter,
+                                  String defaultValue) {
+    final String protocol = config.getParameter(parameter);
+    if (protocol == null) {
+      return defaultValue;
+    }
+    return protocol;
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.apache.manifoldcf.core.connector.BaseConnector#check()
+   */
+  @Override
+  public String check() throws ManifoldCFException {
+	  try{
+		  alfrescoClient.fetchUserAuthorities("admin");
+		  return "Connection Working!";
+	  }catch(AlfrescoDownException e){
+		  logger.error(e.getMessage());
+		  return "Connection not Working!. Check the configuration";
+	  }
+  }
+
+  /*
+   * (non-Javadoc)
+   * @see org.apache.manifoldcf.core.connector.BaseConnector#disconnect()
+   */
+  @Override
+  public void disconnect() throws ManifoldCFException {
+    super.disconnect();
+  }
+  
+  /*
+   * (non-Javadoc)
+   * @see org.apache.manifoldcf.authorities.authorities.BaseAuthorityConnector#getDefaultAuthorizationResponse(java.lang.String)
+   */
+  @Override
+  public AuthorizationResponse getDefaultAuthorizationResponse(String userName)
+  {
+      return denied;
+  }
+  
+  /*
+   * (non-Javadoc)
+   * @see org.apache.manifoldcf.authorities.authorities.BaseAuthorityConnector#getAuthorizationResponse(java.lang.String)
+   */
+  @Override
+  public AuthorizationResponse getAuthorizationResponse(String userName)
+    throws ManifoldCFException {
+	  try{
+		  AlfrescoUser permissions = alfrescoClient.fetchUserAuthorities(userName);
+		  if(permissions.getUsername() == null 
+				  || permissions.getUsername().isEmpty()
+				  || permissions.getAuthorities().isEmpty())
+			  return new AuthorizationResponse(null, AuthorizationResponse.RESPONSE_USERNOTFOUND);
+		  else
+			  return new AuthorizationResponse(
+					  permissions.getAuthorities().toArray(new String[permissions.getAuthorities().size()]), 
+					  AuthorizationResponse.RESPONSE_OK);
+	  }catch(AlfrescoDownException e){
+		  return new AuthorizationResponse(null, AuthorizationResponse.RESPONSE_UNREACHABLE);
+	  }
+  }
+
+  @Override
+  public void outputConfigurationHeader(IThreadContext threadContext,
+                                        IHTTPOutput out, Locale locale, ConfigParams parameters,
+                                        List<String> tabsArray) throws ManifoldCFException, IOException {
+    ConfigurationHandler.outputConfigurationHeader(threadContext, out, locale,
+            parameters, tabsArray);
+  }
+
+  @Override
+  public void outputConfigurationBody(IThreadContext threadContext,
+                                      IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
+          throws ManifoldCFException, IOException {
+    ConfigurationHandler.outputConfigurationBody(threadContext, out, locale,
+            parameters, tabName);
+  }
+
+  @Override
+  public String processConfigurationPost(IThreadContext threadContext,
+                                         IPostParameters variableContext, Locale locale, ConfigParams parameters)
+          throws ManifoldCFException {
+    return ConfigurationHandler.processConfigurationPost(threadContext,
+            variableContext, locale, parameters);
+  }
+
+  @Override
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out,
+                                Locale locale, ConfigParams parameters) throws ManifoldCFException,
+          IOException {
+    ConfigurationHandler.viewConfiguration(threadContext, out, locale,
+            parameters);
+  }  
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/ConfigurationHandler.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/ConfigurationHandler.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/ConfigurationHandler.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/ConfigurationHandler.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,126 @@
+/*
+ * 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.authorities.alfresco;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+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.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+
+public class ConfigurationHandler {
+  private static final String PARAM_PROTOCOL = "protocol";
+  private static final String PARAM_HOSTNAME = "hostname";
+  private static final String PARAM_ENDPOINT = "endpoint";
+  private static final String PARAM_USERNAME = "username";
+  private static final String PARAM_PASSWORD = "password";
+  
+  private static final String EDIT_CONFIG_HEADER = "editConfiguration.js";
+  private static final String EDIT_CONFIG_SERVER = "editConfiguration_Server.html";
+  private static final String VIEW_CONFIG = "viewConfiguration.html";
+
+  private static final Map<String, String> DEFAULT_CONFIGURATION_PARAMETERS = new HashMap<String, String>();
+  static {
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_PROTOCOL, "http");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_HOSTNAME, "localhost");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_ENDPOINT, "/alfresco/service");
+     DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_USERNAME, "");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_PASSWORD, "");
+  }
+
+  private ConfigurationHandler() {
+  }
+
+  public static void outputConfigurationHeader(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters,
+      List<String> tabsArray) throws ManifoldCFException, IOException {
+    tabsArray.add("Server");
+    InputStream inputStream = ConfigurationHandler.class.getResourceAsStream("/org/apache/manifoldcf/authorities/alfresco/" + EDIT_CONFIG_HEADER);
+    StringWriter writer = new StringWriter();
+    IOUtils.copy(inputStream, writer, "UTF-8");
+    inputStream.close();
+    out.print(writer.toString());
+  }
+
+  private static void fillInParameters(Map<String, String> paramMap,
+      ConfigParams parameters) {
+    for (Map.Entry<String, String> parameter : DEFAULT_CONFIGURATION_PARAMETERS
+        .entrySet()) {
+      String paramValue = parameters.getParameter(parameter.getKey());
+      if (paramValue == null) {
+        paramValue = parameter.getValue();
+      }
+      paramMap.put(parameter.getKey(), paramValue);
+    }
+  }
+
+  public static void outputConfigurationBody(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
+      throws ManifoldCFException, IOException {
+    Map<String, String> paramMap = new HashMap<String, String>();
+    paramMap.put("tabName", tabName);
+    fillInParameters(paramMap, parameters);
+    VelocityEngine velocityEngine = Messages.createVelocityEngine(ConfigurationHandler.class);
+    VelocityContext context = createVelocityContext(paramMap);
+    StringWriter w = new StringWriter();
+    velocityEngine.mergeTemplate(EDIT_CONFIG_SERVER, "UTF-8", context, w);
+    out.print(w.toString());
+  }
+
+  private static VelocityContext createVelocityContext(Map<String, String> paramMap) {
+    VelocityContext context = new VelocityContext();
+    for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+      context.put(entry.getKey(), entry.getValue());
+    }
+    return context;
+  }
+
+  public static String processConfigurationPost(IThreadContext threadContext,
+      IPostParameters variableContext, Locale locale, ConfigParams parameters)
+      throws ManifoldCFException {
+    for (String paramName : DEFAULT_CONFIGURATION_PARAMETERS.keySet()) {
+      String paramValue = variableContext.getParameter(paramName);
+      if (paramValue != null) {
+        parameters.setParameter(paramName, paramValue);
+      }
+    }
+    return null;
+  }
+
+  public static void viewConfiguration(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters)
+      throws ManifoldCFException, IOException {
+    Map<String, String> paramMap = new HashMap<String, String>();
+    fillInParameters(paramMap, parameters);
+    VelocityEngine velocityEngine = Messages.createVelocityEngine(ConfigurationHandler.class);
+    VelocityContext context = createVelocityContext(paramMap);
+    StringWriter w = new StringWriter();
+    velocityEngine.mergeTemplate(VIEW_CONFIG, "UTF-8", context, w);
+    out.print(w.toString());
+  }
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/Messages.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/Messages.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/Messages.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/authorities/alfresco/Messages.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,138 @@
+/**
+ * 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.authorities.alfresco;
+
+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.authorities.afresco.common";
+    public static final String DEFAULT_PATH_NAME="org.apache.manifoldcf.authorities.afresco";
+
+    /** 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);
+    }
+
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/AlfrescoConnector.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/AlfrescoConnector.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/AlfrescoConnector.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/AlfrescoConnector.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,305 @@
+/*
+ * 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.crawler.connectors.alfresco.webscript;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.alfresco.consulting.indexer.client.AlfrescoClient;
+import org.alfresco.consulting.indexer.client.AlfrescoDownException;
+import org.alfresco.consulting.indexer.client.AlfrescoResponse;
+import org.alfresco.consulting.indexer.client.WebScriptsAlfrescoClient;
+import org.apache.manifoldcf.agents.interfaces.RepositoryDocument;
+import org.apache.manifoldcf.agents.interfaces.ServiceInterruption;
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+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.Specification;
+import org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector;
+import org.apache.manifoldcf.crawler.interfaces.IExistingVersions;
+import org.apache.manifoldcf.crawler.interfaces.IProcessActivity;
+import org.apache.manifoldcf.crawler.interfaces.ISeedingActivity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class AlfrescoConnector extends BaseRepositoryConnector {
+  private static final Logger logger = LoggerFactory.getLogger(AlfrescoConnector.class);
+  private static final String ACTIVITY_FETCH = "fetch document";
+  private static final String[] activitiesList = new String[]{ACTIVITY_FETCH};
+  private AlfrescoClient alfrescoClient;
+  private Boolean enableDocumentProcessing = Boolean.TRUE;
+  
+  private static final String CONTENT_URL_PROPERTY = "contentUrlPath";
+  private static final String AUTHORITIES_PROPERTY = "readableAuthorities";
+  
+  // Static Fields
+  private static final String FIELD_UUID = "uuid";
+  private static final String FIELD_NODEREF = "nodeRef";
+  private static final String FIELD_TYPE = "type";
+  private static final String FIELD_NAME = "name";
+
+  @Override
+  public int getConnectorModel() {
+    return MODEL_ADD_CHANGE_DELETE; // We return only incremental documents.
+  }
+
+  public void setClient(AlfrescoClient client) {
+    alfrescoClient = client;
+  }
+
+  @Override
+  public void connect(ConfigParams config) {
+    super.connect(config);
+
+    String protocol = getConfig(config, "protocol", "http");
+    String hostname = getConfig(config, "hostname", "localhost");
+    String endpoint = getConfig(config, "endpoint", "/alfresco/service");
+    String storeProtocol = getConfig(config, "storeprotocol", "workspace");
+    String storeId = getConfig(config, "storeid", "SpacesStore");
+    String username = getConfig(config, "username", null);
+    String password = getConfig(config, "password", null);
+    this.enableDocumentProcessing = new Boolean(getConfig(config, "enabledocumentprocessing", "false"));
+
+    alfrescoClient = new WebScriptsAlfrescoClient(protocol, hostname, endpoint,
+            storeProtocol, storeId, username, password);
+  }
+
+  private static String getConfig(ConfigParams config,
+                                  String parameter,
+                                  String defaultValue) {
+    final String protocol = config.getParameter(parameter);
+    if (protocol == null) {
+      return defaultValue;
+    }
+    return protocol;
+  }
+
+  @Override
+  public String check() throws ManifoldCFException {
+    return super.check();
+  }
+
+  @Override
+  public void disconnect() throws ManifoldCFException {
+    super.disconnect();
+  }
+
+  @Override
+  public String[] getActivitiesList() {
+    return activitiesList;
+  }
+
+  @Override
+  public int getMaxDocumentRequest() {
+    return 20;
+  }
+
+  @Override
+  public String addSeedDocuments(ISeedingActivity activities, Specification spec,
+                                              String lastSeedVersion, long seedTime, int jobMode) throws ManifoldCFException, ServiceInterruption {
+    try {
+      long lastTransactionId = 0;
+      long lastAclChangesetId = 0;
+      
+      if(lastSeedVersion != null && !lastSeedVersion.isEmpty()){
+    	  StringTokenizer tokenizer = new StringTokenizer(lastSeedVersion,"|");
+
+    	  if (tokenizer.countTokens() == 2) {
+    		  lastTransactionId = new Long(tokenizer.nextToken());
+    		  lastAclChangesetId = new Long(tokenizer.nextToken());
+    	  }
+      }
+      
+      logger.info("Starting from transaction id: {} and acl changeset id: {}", lastTransactionId, lastAclChangesetId);
+      
+      long transactionIdsProcessed;
+      long aclChangesetsProcessed;
+      do {
+        final AlfrescoResponse response = alfrescoClient.
+        		fetchNodes(lastTransactionId, 
+        				lastAclChangesetId,
+        				ConfigurationHandler.getFilters(spec));
+        int count = 0;
+        for (Map<String, Object> doc : response.getDocuments()) {
+//          String json = gson.toJson(doc);
+//          activities.addSeedDocument(json);
+          String uuid = doc.get("uuid").toString();
+          activities.addSeedDocument(uuid);
+          count++;
+        }
+        logger.info("Fetched and added {} seed documents", count);
+
+        transactionIdsProcessed = response.getLastTransactionId() - lastTransactionId;
+        aclChangesetsProcessed = response.getLastAclChangesetId() - lastAclChangesetId;
+
+        lastTransactionId = response.getLastTransactionId();
+        lastAclChangesetId = response.getLastAclChangesetId();
+
+        logger.info("transaction_id={}, acl_changeset_id={}", lastTransactionId, lastAclChangesetId);
+      } while (transactionIdsProcessed > 0 || aclChangesetsProcessed > 0);
+
+      logger.info("Recording {} as last transaction id and {} as last changeset id", lastTransactionId, lastAclChangesetId);
+      return lastTransactionId + "|" + lastAclChangesetId;
+    } catch (AlfrescoDownException e) {
+      throw new ManifoldCFException(e);
+    }
+  }
+
+@Override
+public void processDocuments(String[] documentIdentifiers, IExistingVersions statuses, Specification spec,
+                             IProcessActivity activities, int jobMode, boolean usesDefaultAuthority)
+        throws ManifoldCFException, ServiceInterruption {
+
+    for (String doc : documentIdentifiers) {
+      String nextVersion = statuses.getIndexedVersionString(doc);	
+    	
+      // Calling again Alfresco API because Document's actions are lost from seeding method
+      AlfrescoResponse response = alfrescoClient.fetchNode(doc);
+      if(response.getDocumentList().isEmpty()){ // Not found seeded document. Could reflect an error in Alfresco
+    	  logger.error("Invalid Seeded Document from Alfresco with ID {}", doc);
+    	  activities.noDocument(doc, nextVersion);
+    	  continue;
+      }
+      Map<String, Object> map = response.getDocumentList().get(0); // Should be only one
+      RepositoryDocument rd = new RepositoryDocument();
+      String uuid = map.containsKey(FIELD_UUID) ? map.get(FIELD_UUID).toString() : doc;
+      String nodeRef = map.containsKey(FIELD_NODEREF) ? map.get(FIELD_NODEREF).toString() : "";
+      rd.addField(FIELD_NODEREF, nodeRef);
+      String type = map.containsKey(FIELD_TYPE) ? map.get(FIELD_TYPE).toString() : "";
+      rd.addField(FIELD_TYPE, type);
+      String name =  map.containsKey(FIELD_NAME) ? map.get(FIELD_NAME).toString() : "";
+      rd.setFileName(name);
+
+      if ((Boolean) map.get("deleted")) {
+        activities.deleteDocument(uuid);
+      } else {
+        if (this.enableDocumentProcessing) {
+          try{
+          	processMetaData(rd,uuid);
+          }catch(AlfrescoDownException e){
+        	  logger.error("Invalid Document from Alfresco with ID {}", uuid, e);
+        	  activities.noDocument(doc, nextVersion);
+        	  continue; // No Metadata, No Content....skip document
+          }
+        }
+        try {
+        	if(rd.getBinaryStream() == null){
+        		byte[] empty = new byte[0];
+        		rd.setBinary(new ByteArrayInputStream(empty), 0L);
+        	}
+        	logger.info("Ingesting with id: {}, URI {} and rd {}", uuid, nodeRef, rd.getFileName());
+			activities.ingestDocumentWithException(uuid, "", uuid, rd);
+		} catch (IOException e) {
+			throw new ManifoldCFException(
+					"Error Ingesting Document with ID " + String.valueOf(uuid), e);
+		}
+      }
+    }
+  }
+  
+  private void processMetaData(RepositoryDocument rd,
+		  String uuid) throws ManifoldCFException, AlfrescoDownException {
+    Map<String,Object> properties = alfrescoClient.fetchMetadata(uuid);
+    for(String property : properties.keySet()) {
+      Object propertyValue = properties.get(property);
+      rd.addField(property,propertyValue.toString());
+    }
+    
+    // Document Binary Content
+    String contentUrlPath = (String) properties.get(CONTENT_URL_PROPERTY);
+    if(contentUrlPath != null && !contentUrlPath.isEmpty()){
+    	InputStream binaryContent = alfrescoClient.fetchContent(contentUrlPath);
+    	if(binaryContent != null) // Content-based Alfresco Document
+    		rd.setBinary(binaryContent, 0L);
+    }
+    
+    // Indexing Permissions
+    @SuppressWarnings("unchecked")
+	List<String> permissions = (List<String>) properties.remove(AUTHORITIES_PROPERTY);
+    if(permissions != null){
+    	rd.setSecurityACL(RepositoryDocument.SECURITY_TYPE_DOCUMENT,
+    		permissions.toArray(new String[permissions.size()]));
+    }
+  }
+
+  @Override
+  public void outputConfigurationHeader(IThreadContext threadContext,
+                                        IHTTPOutput out, Locale locale, ConfigParams parameters,
+                                        List<String> tabsArray) throws ManifoldCFException, IOException {
+    ConfigurationHandler.outputConfigurationHeader(threadContext, out, locale,
+            parameters, tabsArray);
+  }
+
+  @Override
+  public void outputConfigurationBody(IThreadContext threadContext,
+                                      IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
+          throws ManifoldCFException, IOException {
+    ConfigurationHandler.outputConfigurationBody(threadContext, out, locale,
+            parameters, tabName);
+  }
+
+  @Override
+  public String processConfigurationPost(IThreadContext threadContext,
+                                         IPostParameters variableContext, Locale locale, ConfigParams parameters)
+          throws ManifoldCFException {
+    return ConfigurationHandler.processConfigurationPost(threadContext,
+            variableContext, locale, parameters);
+  }
+
+  @Override
+  public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out,
+                                Locale locale, ConfigParams parameters) throws ManifoldCFException,
+          IOException {
+    ConfigurationHandler.viewConfiguration(threadContext, out, locale,
+            parameters);
+  }
+  
+  
+   @Override
+   public void outputSpecificationHeader(IHTTPOutput out, Locale locale, Specification os,
+     int connectionSequenceNumber, List<String> tabsArray)
+     throws ManifoldCFException, IOException{
+	   ConfigurationHandler.outputSpecificationHeader(out, locale, os, connectionSequenceNumber, tabsArray);
+   }
+   
+   @Override
+   public void outputSpecificationBody(IHTTPOutput out, Locale locale, Specification os,
+		    int connectionSequenceNumber, int actualSequenceNumber, String tabName) throws ManifoldCFException, IOException{
+	   ConfigurationHandler.outputSpecificationBody(out, locale, os, connectionSequenceNumber, actualSequenceNumber, tabName);
+   }
+   
+   @Override
+   public String processSpecificationPost(IPostParameters variableContext, Locale locale, Specification os,
+			  int connectionSequenceNumber) throws ManifoldCFException{
+	   return ConfigurationHandler.processSpecificationPost(variableContext, locale, os, connectionSequenceNumber);
+   }
+   
+   @Override
+   public void viewSpecification(IHTTPOutput out, Locale locale, Specification os,
+			  int connectionSequenceNumber) throws ManifoldCFException, IOException{
+	   ConfigurationHandler.viewSpecification(out, locale, os, connectionSequenceNumber);
+   }
+  
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/ConfigurationHandler.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/ConfigurationHandler.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/ConfigurationHandler.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/ConfigurationHandler.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,486 @@
+/*
+ * 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.crawler.connectors.alfresco.webscript;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.alfresco.consulting.indexer.client.AlfrescoFilters;
+import org.apache.commons.io.IOUtils;
+import org.apache.manifoldcf.core.interfaces.ConfigParams;
+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.Specification;
+import org.apache.manifoldcf.core.interfaces.SpecificationNode;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+
+import com.google.common.collect.ImmutableMultimap;
+
+public class ConfigurationHandler {
+  private static final String PARAM_PROTOCOL = "protocol";
+  private static final String PARAM_HOSTNAME = "hostname";
+  private static final String PARAM_ENDPOINT = "endpoint";
+  private static final String PARAM_STORE_PROTOCOL = "storeprotocol";
+  private static final String PARAM_ENABLE_DOCUMENT_PROCESSING = "enabledocumentprocessing";
+  private static final String PARAM_STORE_ID = "storeid";
+  private static final String PARAM_USERNAME = "username";
+  private static final String PARAM_PASSWORD = "password";
+  
+  // Output Specification for Filtering
+  /** Node describing a Site */
+  public static final String NODE_SITE = "site";
+  /** Attribute describing a site name */
+  public static final String ATTRIBUTE_SITE = "site_name";
+  
+  /** Node describing a MimeType */
+  public static final String NODE_MIMETYPE = "mimetype";
+  /** Attribute describing a MimeType name */
+  public static final String ATTRIBUTE_MIMETYPE = "mimetype_name";
+  
+  /** Node describing an Aspect */
+  public static final String NODE_ASPECT = "aspect";
+  /** Attribute describing an aspect name */
+  public static final String ATTRIBUTE_ASPECT = "aspect_name";
+  
+  /** Node describing a Metadata */
+  public static final String NODE_METADATA = "metadata";
+  /** Attribute describing an aspect name */
+  public static final String ATTRIBUTE_METADATA_SOURCE = "metadata_source";
+  /** Attribute describing an aspect value */
+  public static final String ATTRIBUTE_METADATA_TARGET = "metadata_value";
+  
+  public static final ImmutableMultimap<String, String> SPECIFICATION_MAP =
+	        ImmutableMultimap.<String, String>builder().
+	        put(NODE_SITE, ATTRIBUTE_SITE).
+	        put(NODE_MIMETYPE, ATTRIBUTE_MIMETYPE).
+	        put(NODE_ASPECT, ATTRIBUTE_ASPECT).
+	        put(NODE_METADATA, ATTRIBUTE_METADATA_SOURCE).
+	        put(NODE_METADATA, ATTRIBUTE_METADATA_TARGET).build();
+
+  private static final String EDIT_CONFIG_HEADER = "editConfiguration.js";
+  private static final String EDIT_CONFIG_SERVER = "editConfiguration_Server.html";
+  private static final String VIEW_CONFIG = "viewConfiguration.html";
+
+  private static final Map<String, String> DEFAULT_CONFIGURATION_PARAMETERS = new HashMap<String, String>();
+  static {
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_PROTOCOL, "http");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_HOSTNAME, "localhost");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_ENDPOINT, "/alfresco/service");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_STORE_PROTOCOL, "workspace");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_ENABLE_DOCUMENT_PROCESSING,"true");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_STORE_ID, "SpacesStore");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_USERNAME, "");
+    DEFAULT_CONFIGURATION_PARAMETERS.put(PARAM_PASSWORD, "");
+  }
+
+  private ConfigurationHandler() {
+  }
+
+  public static void outputConfigurationHeader(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters,
+      List<String> tabsArray) throws ManifoldCFException, IOException {
+    tabsArray.add("Server");
+    InputStream inputStream = ConfigurationHandler.class.getResourceAsStream("/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/" + EDIT_CONFIG_HEADER);
+    StringWriter writer = new StringWriter();
+    IOUtils.copy(inputStream, writer, "UTF-8");
+    inputStream.close();
+    out.print(writer.toString());
+  }
+
+  private static void fillInParameters(Map<String, String> paramMap,
+      ConfigParams parameters) {
+    for (Map.Entry<String, String> parameter : DEFAULT_CONFIGURATION_PARAMETERS
+        .entrySet()) {
+      String paramValue = parameters.getParameter(parameter.getKey());
+      if (paramValue == null) {
+        paramValue = parameter.getValue();
+      }
+      paramMap.put(parameter.getKey(), paramValue);
+    }
+  }
+
+  public static void outputConfigurationBody(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters, String tabName)
+      throws ManifoldCFException, IOException {
+    Map<String, String> paramMap = new HashMap<String, String>();
+    paramMap.put("tabName", tabName);
+    fillInParameters(paramMap, parameters);
+    VelocityEngine velocityEngine = Messages.createVelocityEngine(ConfigurationHandler.class);
+    VelocityContext context = createVelocityContext(paramMap);
+    StringWriter w = new StringWriter();
+    velocityEngine.mergeTemplate(EDIT_CONFIG_SERVER, "UTF-8", context, w);
+    out.print(w.toString());
+  }
+
+  private static VelocityContext createVelocityContext(Map<String, String> paramMap) {
+    VelocityContext context = new VelocityContext();
+    for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+      context.put(entry.getKey(), entry.getValue());
+    }
+    return context;
+  }
+
+  public static String processConfigurationPost(IThreadContext threadContext,
+      IPostParameters variableContext, Locale locale, ConfigParams parameters)
+      throws ManifoldCFException {
+    for (String paramName : DEFAULT_CONFIGURATION_PARAMETERS.keySet()) {
+      String paramValue = variableContext.getParameter(paramName);
+      if (paramValue != null) {
+        parameters.setParameter(paramName, paramValue);
+      }
+    }
+    return null;
+  }
+
+  public static void viewConfiguration(IThreadContext threadContext,
+      IHTTPOutput out, Locale locale, ConfigParams parameters)
+      throws ManifoldCFException, IOException {
+    Map<String, String> paramMap = new HashMap<String, String>();
+    fillInParameters(paramMap, parameters);
+    VelocityEngine velocityEngine = Messages.createVelocityEngine(ConfigurationHandler.class);
+    VelocityContext context = createVelocityContext(paramMap);
+    StringWriter w = new StringWriter();
+    velocityEngine.mergeTemplate(VIEW_CONFIG, "UTF-8", context, w);
+    out.print(w.toString());
+  }
+  
+  public static void outputSpecificationHeader(IHTTPOutput out, Locale locale, Specification os,
+    int connectionSequenceNumber, List<String> tabsArray)
+    throws ManifoldCFException, IOException
+  {
+    String seqPrefix = "s"+connectionSequenceNumber+"_";
+    tabsArray.add(Messages.getString(locale, "Alfresco.FilteringConfiguration"));
+    out.print(
+    		"<script type=\"text/javascript\">\n"+
+    		"<!--\n"+
+    		"function "+seqPrefix+"checkSpecification()\n"+
+    		"{\n"+
+    		"  return true;\n"+
+    		"}\n"+
+    		"\n");
+    
+    for(String node:SPECIFICATION_MAP.keySet()){
+    	out.print(
+    			"function "+seqPrefix+"add"+node+"()\n"+
+    			"{\n");
+    	Collection<String> vars = SPECIFICATION_MAP.get(node);
+    	for(String var:vars){
+            Object[] args = new String[]{node,var};
+    		out.print(
+    				"if (editjob."+seqPrefix+var+".value == \"\")\n"+
+        			"  {\n"+
+//        			"    alert(\"Value of "+ node + "." + var + " can't be NULL" +"\");\n"+
+                    "    alert(\""+ Messages.getBodyJavascriptString(locale, "Alfresco.ParamNullError",args) + "\");\n"+
+        			"    editjob."+seqPrefix+var+".focus();\n"+
+        			"    return;\n"+
+        			"  }\n"
+    				);
+    	}
+    			
+    	out.print("editjob."+seqPrefix+node+"_op.value=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Add") + "\";\n"+
+    			"  postFormSetAnchor(\""+seqPrefix+"+"+node+"\");\n"+
+    			"}\n"+
+    			"\n"+
+    	"function "+seqPrefix+"delete"+node+"(i)\n"+
+    			"{\n"+
+    			"  // Set the operation\n"+
+    			"  eval(\"editjob."+seqPrefix+node+"_\"+i+\"_op.value=\\\"" + Messages.getBodyJavascriptString(locale, "Alfresco.Delete") + "\\\"\");\n"+
+    			"  // Submit\n"+
+    			"  if (editjob."+seqPrefix+node+"_count.value==i)\n"+
+    			"    postFormSetAnchor(\""+seqPrefix+node+"\");\n"+
+    			"  else\n"+
+    			"    postFormSetAnchor(\""+seqPrefix+node+"_\"+i)\n"+
+    			"  // Undo, so we won't get two deletes next time\n"+
+    			"  eval(\"editjob."+seqPrefix+node+"_\"+i+\"_op.value=\\\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Continue") + "\\\"\");\n"+
+    			"}\n"+
+    			"\n");
+    }
+    		
+    out.print("\n"+
+    		"\n"+
+    		"//-->\n"+
+    		"</script>\n");		
+  }
+
+  
+  public static void outputSpecificationBody(IHTTPOutput out, Locale locale, Specification os,
+		  int connectionSequenceNumber, int actualSequenceNumber, String tabName)
+				  throws ManifoldCFException, IOException
+  {
+	  String seqPrefix = "s"+connectionSequenceNumber+"_";
+	  int i;
+	  // Field Mapping tab
+	  if (tabName.equals(Messages.getString(locale, "Alfresco.FilteringConfiguration")) && connectionSequenceNumber == actualSequenceNumber)
+	  {
+		  for(String node:SPECIFICATION_MAP.keySet()){
+			  out.print(
+					  "<table class=\"displaytable\">\n"+
+							  "  <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+							  "  <tr>\n"+
+							  "    <td class=\"description\"><nobr>" + node + " filtering:</nobr></td>\n"+
+							  "    <td class=\"boxcell\">\n"+
+							  "      <table class=\"formtable\">\n"+
+							  "        <tr class=\"formheaderrow\">\n"+
+							  "          <td class=\"formcolumnheader\"></td>\n");
+			  Collection<String> vars = SPECIFICATION_MAP.get(node);
+			  for(String var:vars){
+				  out.print("<td class=\"formcolumnheader\"><nobr>" + var + "</nobr></td>\n");
+			  }
+			  out.print("</tr>\n");
+			  
+			  int fieldCounter = 0;
+			  i = 0;
+			  while (i < os.getChildCount()) {
+				  SpecificationNode sn = os.getChild(i++);
+				  if (sn.getType().equals(node)) {
+					  String prefix = seqPrefix+node+"_" + Integer.toString(fieldCounter);
+					  out.print(
+							  "        <tr class=\""+(((fieldCounter % 2)==0)?"evenformrow":"oddformrow")+"\">\n"+
+									  "          <td class=\"formcolumncell\">\n"+
+									  "            <a name=\""+prefix+"\">\n"+
+									  "              <input type=\"button\" value=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Delete") + "\" alt=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Delete") + ""+Integer.toString(fieldCounter+1)+"\" onclick='javascript:"+seqPrefix+"delete"+node+"("+Integer.toString(fieldCounter)+");'/>\n"+
+									  "              <input type=\"hidden\" name=\""+prefix+"_op\" value=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Continue") + "\"/>\n");
+					  for(String var:vars){
+						  out.print("<input type=\"hidden\" name=\""+prefix+"_"+var+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sn.getAttributeValue(var))+"\"/>\n");
+					  }
+
+					  out.print("            </a>\n"+
+							  "          </td>\n");
+					  for(String var:vars){
+						  out.print(
+								  "       <td class=\"formcolumncell\">\n"+
+										  "            <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(sn.getAttributeValue(var))+"</nobr>\n"+
+								  "          </td>\n");
+					  }
+					  fieldCounter++;
+
+				  }
+			  }
+			  if (fieldCounter == 0)
+		      {
+		        out.print(
+		        		"<tr class=\"formrow\"><td class=\"formmessage\" colspan=\"3\">"+ Messages.getBodyJavascriptString(locale, "Alfresco.NoFilteringConfiguration") + "</td></tr>\n");
+		      }
+			  
+			  out.print(
+						"        <tr class=\"formrow\"><td class=\"formseparator\" colspan=\"3\"><hr/></td></tr>\n"+
+						"        <tr class=\"formrow\">\n"+
+						"          <td class=\"formcolumncell\">\n"+
+						"            <a name=\""+seqPrefix+node+"\">\n"+
+						"              <input type=\"button\" value=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Add") + "\" alt=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Add") + " " + node + "\" onclick=\"javascript:"+seqPrefix+"add"+node+"();\"/>\n"+
+						"            </a>\n"+
+						"            <input type=\"hidden\" name=\""+seqPrefix+node+"_count\" value=\""+fieldCounter+"\"/>\n"+
+						"            <input type=\"hidden\" name=\""+seqPrefix+node+"_op\" value=\""+ Messages.getBodyJavascriptString(locale, "Alfresco.Continue") +"\"/>\n"+
+						"          </td>\n");
+			  for(String var:vars){
+				  out.print("          <td class=\"formcolumncell\">\n"+
+						"            <nobr><input type=\"text\" size=\"15\" name=\""+seqPrefix+var+"\" value=\"\"/></nobr>\n"+
+						"          </td>\n");
+			  }
+
+			 out.print("</tr>\n"+
+						"      </table>\n"+
+						"    </td>\n"+
+						"  </tr>\n");
+						
+
+		  }
+	  }
+	  else{
+	      for(String node:SPECIFICATION_MAP.keySet()){
+	    	  i = 0;
+		      int fieldCounter = 0;  
+		      while (i < os.getChildCount()) {
+		    	  SpecificationNode sn = os.getChild(i++);
+		    	  if(sn.getType().equals(node)){
+		    		String prefix = seqPrefix+node+"_" + Integer.toString(fieldCounter);  
+		    		for(String var:SPECIFICATION_MAP.get(node)){
+		    			out.print(
+		    					"<input type=\"hidden\" name=\""+prefix+"_"+var+"\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(sn.getAttributeValue(var))+"\"/>\n");
+		    		}
+		    		fieldCounter++;
+		    	  }
+		      }
+		      
+		      out.print("<input type=\"hidden\" name=\""+seqPrefix+node+"_count\" value=\""+Integer.toString(fieldCounter)+"\"/>\n");
+	      }
+	    }
+	  }
+		  
+  public static String processSpecificationPost(IPostParameters variableContext, Locale locale, Specification os,
+		  int connectionSequenceNumber) throws ManifoldCFException {
+	  // Remove old Nodes
+	  int i;
+
+	  String seqPrefix = "s"+connectionSequenceNumber+"_";
+	 	 	  
+	  for(String node:SPECIFICATION_MAP.keySet()){
+		  
+		  String x = variableContext.getParameter(seqPrefix+node+"_count");
+		  if (x != null && x.length() > 0){
+			  
+			  i = 0;
+			  while (i < os.getChildCount())
+			  {
+				  SpecificationNode specNode = os.getChild(i);
+				  if (specNode.getType().equals(node))
+					  os.removeChild(i);
+				  else
+					  i++;
+			  }
+
+			  Collection<String> vars = SPECIFICATION_MAP.get(node);
+
+			  int count = Integer.parseInt(x);
+			  i = 0;
+			  while (i < count)
+			  {
+				  String prefix = seqPrefix+node+"_"+Integer.toString(i);
+				  String op = variableContext.getParameter(prefix+"_op");
+				  if (op == null || !op.equals(Messages.getBodyJavascriptString(locale, "Alfresco.Delete")))
+				  {
+					  SpecificationNode specNode = new SpecificationNode(node);
+					  for(String var:vars){
+						  String value = variableContext.getParameter(prefix+"_"+var);
+						  if(value == null)
+							  value = "";
+						  specNode.setAttribute(var, value);
+					  }
+					  os.addChild(os.getChildCount(), specNode);
+				  }
+				  i++;
+			  }
+
+			  String addop = variableContext.getParameter(seqPrefix+node+"_op");
+			  if (addop != null && addop.equals(Messages.getBodyJavascriptString(locale, "Alfresco.Add")))
+			  {
+				  SpecificationNode specNode = new SpecificationNode(node);
+				  for(String var:vars){
+					  String value = variableContext.getParameter(seqPrefix+var);
+					  if(value == null)
+						  value = "";
+					  specNode.setAttribute(var, value);
+				  }
+				  os.addChild(os.getChildCount(), specNode);
+			  }
+		  }
+	  }
+
+	  return null;
+  }
+  
+  public static void viewSpecification(IHTTPOutput out, Locale locale, Specification os,
+		  int connectionSequenceNumber)
+				  throws ManifoldCFException, IOException
+  {
+	  int i = 0;
+
+
+
+
+	  for(String node:SPECIFICATION_MAP.keySet()){
+		  Collection<String> vars = SPECIFICATION_MAP.get(node);
+		  out.print(
+				  "\n"+
+						  "<table class=\"displaytable\">\n"+
+						  "  <tr>\n"+
+						  "    <td class=\"description\"><nobr>"+ Messages.getBodyJavascriptString(locale, "Alfresco.SpecificFilteringConfiguration",new String[]{node}) +"</nobr></td>\n"+
+						  "    <td class=\"boxcell\">\n"+
+						  "      <table class=\"formtable\">\n"+
+						  "        <tr class=\"formheaderrow\">\n");
+		  for(String var:vars)
+			  out.print(
+					  "          <td class=\"formcolumnheader\"><nobr>" + var + "</nobr></td>\n");
+						  
+		 out.print("        </tr>\n");
+		 
+		 int fieldCounter = 0;
+		  i = 0;
+		 
+		  while (i < os.getChildCount()) {
+			  SpecificationNode sn = os.getChild(i++);
+			  if (sn.getType().equals(node)) {
+				  out.print(
+						  "        <tr class=\""+(((fieldCounter % 2)==0)?"evenformrow":"oddformrow")+"\">\n");
+				  for(String var:vars)
+					  out.print(
+								  "          <td class=\"formcolumncell\">\n"+
+								  "            <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(sn.getAttributeValue(var))+"</nobr>\n"+
+								  "          </td>\n");
+				  out.print(
+								  "        </tr>\n");
+				  fieldCounter++;
+			  }
+		  }
+
+		  if (fieldCounter == 0)
+		  {
+			  out.print(
+					  "        <tr class=\"formrow\"><td class=\"formmessage\" colspan=\"3\">"+ Messages.getBodyJavascriptString(locale, "Alfresco.NoSpecificFilteringConfiguration",new String[]{node}) + "</td></tr>\n"
+					  );
+		  }
+		  out.print(
+				  "      </table>\n"+
+						  "    </td>\n"+
+						  "  </tr>\n"+
+						  "  </tr>\n"+
+						  "</table>\n");
+	  }
+  }
+  
+  public static String getSpecificationVersion(Specification os){
+	  StringBuilder builder = new StringBuilder();
+	  int i = 0;
+	  while(i < os.getChildCount()){
+		  SpecificationNode node = os.getChild(i);
+		  Collection<String> vars = SPECIFICATION_MAP.get(node.getType());
+		  for(String var:vars)
+			  builder.append(node.getAttributeValue(var)).append("+");
+		  i++;
+	  }
+	  return builder.toString();
+  }
+  
+  public static AlfrescoFilters getFilters(Specification spec) {
+		AlfrescoFilters filters = new AlfrescoFilters();
+		for(int i = 0; i < spec.getChildCount(); i++){
+			SpecificationNode node = spec.getChild(i);
+			if(node.getType().equals(NODE_SITE))
+				filters.addSiteFilter(node.getAttributeValue(ATTRIBUTE_SITE));
+			else if(node.getType().equals(NODE_MIMETYPE))
+				filters.addMimetypeFilter(node.getAttributeValue(ATTRIBUTE_MIMETYPE));
+			else if(node.getType().equals(NODE_ASPECT))
+				filters.addAspectFilter(
+						node.getAttributeValue(ATTRIBUTE_ASPECT));
+			else if(node.getType().equals(NODE_METADATA))
+				filters.addMetadataFilter(
+						node.getAttributeValue(ATTRIBUTE_METADATA_SOURCE),
+						node.getAttributeValue(ATTRIBUTE_METADATA_TARGET));
+		}
+		
+		return filters;
+	}
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/Messages.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/Messages.java?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/Messages.java (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/Messages.java Thu Oct  2 15:33:55 2014
@@ -0,0 +1,138 @@
+/**
+ * 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.crawler.connectors.alfresco.webscript;
+
+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.crawler.connectors.alfresco.webscript.common";
+    public static final String DEFAULT_PATH_NAME="org.apache.manifoldcf.crawler.connectors.alfresco.webscript";
+
+    /** 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);
+    }
+
+}

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en.properties?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en.properties (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en.properties Thu Oct  2 15:33:55 2014
@@ -0,0 +1,3 @@
+Alfresco.Continue=Continue
+Alfresco.Delete=Delete
+Alfresco.Add=Add
\ No newline at end of file

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en_US.properties?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en_US.properties (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/authorities/alfresco/common_en_US.properties Thu Oct  2 15:33:55 2014
@@ -0,0 +1,3 @@
+Alfresco.Continue=Continue
+Alfresco.Delete=Delete
+Alfresco.Add=Add
\ No newline at end of file

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en.properties?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en.properties (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en.properties Thu Oct  2 15:33:55 2014
@@ -0,0 +1,8 @@
+Alfresco.FilteringConfiguration=Alfresco Filtering Configuration
+Alfresco.SpecificFilteringConfiguration=Alfresco {0} Filtering Configuration
+Alfresco.NoSpecificFilteringConfiguration=No Filtering Configuration Specificied for {0}
+Alfresco.NoFilteringConfiguration=No Filtering Configuration Specified
+Alfresco.ParamNullError=Value of {0}.{1} can't be NULL
+Alfresco.Continue=Continue
+Alfresco.Delete=Delete
+Alfresco.Add=Add
\ No newline at end of file

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en_US.properties
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en_US.properties?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en_US.properties (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/common_en_US.properties Thu Oct  2 15:33:55 2014
@@ -0,0 +1,8 @@
+Alfresco.FilteringConfiguration=Alfresco Filtering Configuration
+Alfresco.SpecificFilteringConfiguration=Alfresco {0} Filtering Configuration
+Alfresco.NoSpecificFilteringConfiguration=No Filtering Configuration Specificied for {0}
+Alfresco.NoFilteringConfiguration=No Filtering Configuration Specified
+Alfresco.ParamNullError=Value of {0}.{1} can't be NULL
+Alfresco.Continue=Continue
+Alfresco.Delete=Delete
+Alfresco.Add=Add
\ No newline at end of file

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration.js
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration.js?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration.js (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration.js Thu Oct  2 15:33:55 2014
@@ -0,0 +1,29 @@
+<script type="text/javascript">
+<!--
+function checkConfig() {
+	return true;
+}
+
+function checkConfigForSave() {
+	if (editconnection.protocol.value == "") {
+		alert("Protocol must not be empty!");
+		SelectTab("Server");
+		editconnection.protocol.focus();
+		return false;
+	}
+	if (editconnection.hostname.value == "") {
+		alert("Hostname must not be empty!");
+		SelectTab("Server");
+		editconnection.hostname.focus();
+		return false;
+	}
+	if (editconnection.endpoint.value == "") {
+		alert("Endpoint must not be empty!");
+		SelectTab("Server");
+		editconnection.endpoint.focus();
+		return false;
+	}
+	return true;
+}
+// -->
+</script>

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration_Server.html
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration_Server.html?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration_Server.html (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/editConfiguration_Server.html Thu Oct  2 15:33:55 2014
@@ -0,0 +1,50 @@
+#if($tabName == "Server")
+<table class="displaytable">
+	<tr>
+		<td class="description">
+			<nobr>Protocol</nobr>
+		</td>
+		<td class="value">
+			<input name="protocol" type="text" size="32" value="$protocol" />
+		</td>
+	</tr>
+	<tr>
+		<td class="description">
+			<nobr>Hostname</nobr>
+		</td>
+		<td class="value">
+			<input name="hostname" type="text" size="32" value="$hostname"/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description">
+			<nobr>Endpoint</nobr>
+		</td>
+		<td class="value">
+			<input name="endpoint" type="text" size="32" value="$endpoint" />
+		</td>
+	</tr>
+	<tr>
+		<td class="description">
+			<nobr>Username</nobr>
+		</td>
+		<td class="value">
+			<input name="username" type="text" size="32" value="$username"/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description">
+			<nobr>Password</nobr>
+		</td>
+		<td class="value">
+			<input name="password" type="password" size="32" value="$password"/>
+		</td>
+	</tr>
+</table>
+#else
+<input type="hidden" name="protocol" value="$protocol" />
+<input type="hidden" name="hostname" value="$hostname" />
+<input type="hidden" name="endpoint" value="$endpoint" />
+<input type="hidden" name="username" value="$username" />
+<input type="hidden" name="password" value="$password" />
+#end

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/viewConfiguration.html
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/viewConfiguration.html?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/viewConfiguration.html (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/authorities/alfresco/viewConfiguration.html Thu Oct  2 15:33:55 2014
@@ -0,0 +1,42 @@
+<table class="displaytable">
+	<tr>
+		<td class="description" colspan="1">
+			<nobr>Protocol:</nobr>
+		</td>
+		<td class="value" colspan="3">
+			<nobr>$protocol</nobr><br/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description" colspan="1">
+			<nobr>Hostname:</nobr>
+		</td>
+		<td class="value" colspan="3">
+			<nobr>$hostname</nobr><br/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description" colspan="1">
+			<nobr>Endpoint:</nobr>
+		</td>
+		<td class="value" colspan="3">
+			<nobr>$endpoint</nobr><br/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description" colspan="1">
+			<nobr>Username:</nobr>
+		</td>
+		<td class="value" colspan="3">
+			<nobr>$username</nobr><br/>
+		</td>
+	</tr>
+	<tr>
+		<td class="description" colspan="1">
+			<nobr>Password:</nobr>
+		</td>
+		<td class="value" colspan="3">
+			<nobr>********</nobr><br/>
+		</td>
+	</tr>
+</table>

Added: manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration.js
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration.js?rev=1628999&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration.js (added)
+++ manifoldcf/branches/CONNECTORS-1037/connectors/alfresco-webscript/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/alfresco/webscript/editConfiguration.js Thu Oct  2 15:33:55 2014
@@ -0,0 +1,41 @@
+<script type="text/javascript">
+<!--
+function checkConfig() {
+	return true;
+}
+
+function checkConfigForSave() {
+	if (editconnection.protocol.value == "") {
+		alert("Protocol must not be empty!");
+		SelectTab("Server");
+		editconnection.protocol.focus();
+		return false;
+	}
+	if (editconnection.hostname.value == "") {
+		alert("Hostname must not be empty!");
+		SelectTab("Server");
+		editconnection.hostname.focus();
+		return false;
+	}
+	if (editconnection.endpoint.value == "") {
+		alert("Endpoint must not be empty!");
+		SelectTab("Server");
+		editconnection.endpoint.focus();
+		return false;
+	}
+	if (editconnection.storeprotocol.value == "") {
+		alert("Store protocol must no be empty!");
+		SelectTab("Server");
+		editconnection.storeprotocol.focus();
+		return false;
+	}
+	if (editconnection.storeid.value == "") {
+		alert("Store id must no be empty!");
+		SelectTab("Server");
+		editconnection.storeid.focus();
+		return false;
+	}
+	return true;
+}
+// -->
+</script>