Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editConfiguration_conf_server.html
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,83 @@
+
+#if($TABNAME == 
$ResourceBundle.getString('ConfluenceRepositoryConnector.Server'))
+
+<table class="displaytable">
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProtocolColon'))</nobr>
+    </td>
+    <td class="value">
+      <select size="2" name="confluence_protocol"/>
+#if($CONFLUENCE_PROTOCOL == 'http')
+        <option value="http" selected="true">http</option>
+#else
+        <option value="http">http</option>
+#end
+#if($CONFLUENCE_PROTOCOL == 'https')
+        <option value="https" selected="true">https</option>
+#else
+        <option value="https">https</option>
+#end
+      </select>
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.HostColon'))</nobr>
+    </td>
+    <td class="value">
+      <input size="32" type="text" id="confluence_host" name="confluence_host" 
value="$Encoder.attributeEscape($CONFLUENCE_HOST)" />
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PortColon'))</nobr>
+    </td>
+    <td class="value">
+      <input size="5" type="text" id="confluence_port" name="confluence_port" 
value="$Encoder.attributeEscape($CONFLUENCE_PORT)" />
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PathColon'))</nobr>
+    </td>
+    <td class="value">
+      <input size="32" type="text" id="confluence_path" name="confluence_path" 
value="$Encoder.attributeEscape($CONFLUENCE_PATH)" />
+    </td>
+  </tr>
+  
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+  
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.UsernameColon'))</nobr>
+    </td>
+    <td class="value">
+      <input size="16" type="text" id="confluence_username" 
name="confluence_username" 
value="$Encoder.attributeEscape($CONFLUENCE_USERNAME)" />
+    </td>
+  </tr>
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PasswordColon'))</nobr>
+    </td>
+    <td class="value">
+      <input size="16" type="password" id="confluence_password" 
name="confluence_password" 
value="$Encoder.attributeEscape($CONFLUENCE_PASSWORD)" />
+    </td>
+  </tr>
+</table>
+
+#else
+
+<input type="hidden" name="confluence_protocol" 
value="$Encoder.attributeEscape($CONFLUENCE_PROTOCOL)" />
+<input type="hidden" name="confluence_host" 
value="$Encoder.attributeEscape($CONFLUENCE_HOST)" />
+<input type="hidden" name="confluence_port" 
value="$Encoder.attributeEscape($CONFLUENCE_PORT)" />
+<input type="hidden" name="confluence_path" 
value="$Encoder.attributeEscape($CONFLUENCE_PATH)" />
+<input type="hidden" name="confluence_username" 
value="$Encoder.attributeEscape($CONFLUENCE_USERNAME)" />
+<input type="hidden" name="confluence_password" 
value="$Encoder.attributeEscape($CONFLUENCE_PASSWORD)" />
+
+#end

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_conf.js
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,32 @@
+<script type="text/javascript">
+<!--
+function checkSpecificationForSave()
+{
+  return true;
+}
+ 
+function s${SeqNum}_SpecOp(n, opValue, anchorvalue)
+{
+  eval("editjob."+n+".value = \""+opValue+"\"");
+  postFormSetAnchor(anchorvalue);
+}
+
+function s${SeqNum}_SpecDeleteSpace(i)
+{
+       s${SeqNum}_SpecOp("s${SeqNum}_spaceop_"+i,"Delete","space_"+i);
+}
+
+function s${SeqNum}_SpecAddSpace(i)
+{
+  var x = i-1;
+  if (editjob["s${SeqNum}_space"].value == "")
+  {
+    
alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.TypeInASpace'))");
+    editjob.s${SeqNum}_space.focus();
+    return;
+  }
+  s${SeqNum}_SpecOp("s${SeqNum}_spaceop","Add","space_"+i);
+}
+
+//-->
+</script>
\ No newline at end of file

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confPages.html
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,26 @@
+
+
+#if($TabName == 
$ResourceBundle.getString('ConfluenceRepositoryConnector.Pages') && ${SeqNum} 
== ${SelectedNum})
+
+<table class="displaytable">
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+  
+       <tr>
+               <td class="description" colspan="2">
+                       
$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProcessAttachments'))
+               </td>
+               
+    <td class="value">
+      <input type="checkbox" name="s${SeqNum}_process_attachments" value="true"
+      #if($PROCESS_ATTACHMENTS) checked 
+      #end 
+      />
+    </td>
+  </tr>
+</table>
+
+#else
+
+<input type="hidden" name="s${SeqNum}_process_attachments" 
value="$PROCESS_ATTACHMENTS"/>
+
+#end

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/editSpecification_confSpaces.html
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,61 @@
+
+
+#if($TabName == 
$ResourceBundle.getString('ConfluenceRepositoryConnector.Spaces') && ${SeqNum} 
== ${SelectedNum})
+
+<table class="displaytable">
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+  
+
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+
+  #set($spacecounter = 0)
+  #foreach($space in $SPACES)
+
+  <tr>
+    <td class="description">
+      <input type="hidden" name="s${SeqNum}_spaceop_$spacecounter" value=""/>
+      <input type="hidden" name="s${SeqNum}_space_$spacecounter" 
value="$Encoder.attributeEscape($space)"/>
+      <a name="s${SeqNum}_tokenspace_$spacecounter">
+        <input type="button" 
value="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Delete'))"
 onClick='Javascript:s${SeqNum}_SpecDeleteSpace($spacecounter)' 
alt="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.DeleteSpace'))$spacecounter"/>
+      </a>
+    </td>
+    <td class="value">$Encoder.bodyEscape($space)</td>
+  </tr>
+
+    #set($spacecounter = $spacecounter + 1)
+  #end
+
+  #set($nextspace = $spacecounter + 1)
+
+  #if($spacecounter == 0)
+  <tr>
+    <td class="message" 
colspan="2">$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.NoSpacesConfigured'))</td>
+  </tr>
+  #end
+
+  <tr><td class="lightseparator" colspan="2"><hr/></td></tr>
+  
+  <tr>
+    <td class="description">
+      <input type="hidden" name="s${SeqNum}_spacescount" 
value="$spacecounter"/>
+      <input type="hidden" name="s${SeqNum}_spaceop" value=""/>
+      <a name="space_$spacecounter">
+        <input type="button" 
value="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Add'))"
 onClick='Javascript:s${SeqNum}_SpecAddSpace($nextspace)' 
alt="$Encoder.attributeEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.AddSpace'))"/>
+      </a>
+    </td>
+    <td class="value">
+      <input type="text" size="30" name="s${SeqNum}_space" value=""/>
+    </td>
+  </tr>
+</table>
+
+#else
+
+  #set($spacecounter = 0)
+  #foreach($space in $SPACES)
+<input type="hidden" name="s${SeqNum}_space_$spacecounter" 
value="$Encoder.attributeEscape($space)"/>
+    #set($space = $space + 1)
+  #end
+<input type="hidden" name="s${SeqNum}_spacescount" value="$spacecounter"/>
+
+#end

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewConfiguration_conf.html
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,62 @@
+
+
+<table class="displaytable">
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProtocolColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($CONFLUENCE_PROTOCOL)</nobr>
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.HostColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($CONFLUENCE_HOST)</nobr>
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PortColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($CONFLUENCE_PORT)</nobr>
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PathColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($CONFLUENCE_PATH)</nobr>
+    </td>
+  </tr>
+
+  <tr><td class="separator" colspan="2"><hr/></td></tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.UsernameColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>$Encoder.bodyEscape($CONFLUENCE_USERNAME)</nobr>
+    </td>
+  </tr>
+
+  <tr>
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.PasswordColon'))</nobr>
+    </td>
+    <td class="value">
+      <nobr>********</nobr>
+    </td>
+  </tr>
+
+</table>
+

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/confluence/viewSpecification_conf.html
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,29 @@
+<table class="displaytable">
+  <tr>
+#if($SPACES.size() == 0)
+    <td class="message" colspan="2">
+      
$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.NoSpacesConfigured'))
+    </td>
+#else
+    <td class="description">
+      
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.Spaces'))</nobr>
+    </td>
+    <td class="value">
+  #set($spacecounter = 0)
+  #foreach($space in $SPACES)
+    <nobr>$Encoder.bodyEscape($space)</nobr><br/>
+    #set($spacecounter = $spacecounter + 1)
+  #end
+    </td>
+#end
+  </tr>
+
+  <tr>
+       <td class="message" colspan="2">
+               
$Encoder.bodyEscape($ResourceBundle.getString('ConfluenceRepositoryConnector.ProcessAttachments'))
+       </td>
+       <td class="description">
+               <nobr>$PROCESS_ATTACHMENTS</nobr>
+       </td>
+  </tr>
+</table>
\ No newline at end of file

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/authorities/confluence/tests/ConfluenceAuthorityTest.java
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,70 @@
+package org.apache.manifoldcf.authorities.confluence.tests;
+
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import 
org.apache.manifoldcf.authorities.authorities.confluence.ConfluenceAuthorityConnector;
+import org.apache.manifoldcf.authorities.interfaces.AuthorizationResponse;
+import org.apache.manifoldcf.authorities.interfaces.IAuthorityConnector;
+import 
org.apache.manifoldcf.crawler.connectors.confluence.client.ConfluenceClient;
+import 
org.apache.manifoldcf.crawler.connectors.confluence.model.ConfluenceUser;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfluenceAuthorityTest {
+
+       @Mock
+       private ConfluenceClient client;
+       
+       private ConfluenceAuthorityConnector connector;
+       
+       @Before
+       public void setup() throws Exception{
+               connector = new ConfluenceAuthorityConnector();
+               connector.setConfluenceClient(client);
+       }
+       
+       @Test
+       public void checkMockInjection() throws Exception{
+               when(client.checkAuth()).thenReturn(true);
+               Assert.assertEquals(connector.check(), "Connection working");
+       }
+       
+       @Test
+       public void checkUserNotFound() throws Exception{
+               ConfluenceUser user = mock(ConfluenceUser.class);
+               when(user.getUsername()).thenReturn(null);
+               when(client.getUserAuthorities(anyString())).thenReturn(user);
+               AuthorizationResponse response = 
connector.getAuthorizationResponse(anyString());
+               String[] tokens = response.getAccessTokens();
+               Assert.assertEquals(tokens.length, 1);
+               Assert.assertEquals(tokens[0], 
IAuthorityConnector.GLOBAL_DENY_TOKEN);
+               Assert.assertEquals(response.getResponseStatus(), 
AuthorizationResponse.RESPONSE_USERNOTFOUND);
+       }
+       
+       @Test
+       public void checkUserFound() throws Exception{
+               ConfluenceUser user = mock(ConfluenceUser.class);
+               when(user.getUsername()).thenReturn("A");
+               List<String> tokens = new ArrayList<String>();
+               tokens.add("B");
+               when(user.getAuthorities()).thenReturn(tokens);
+               when(client.getUserAuthorities(anyString())).thenReturn(user);
+               AuthorizationResponse response = 
connector.getAuthorizationResponse(anyString());
+               String[] tokens_aux = response.getAccessTokens();
+               Assert.assertEquals(tokens_aux.length, 1);
+               Assert.assertEquals(tokens_aux[0], tokens.get(0));
+               Assert.assertEquals(response.getResponseStatus(), 
AuthorizationResponse.RESPONSE_OK);
+       }
+       
+}

Added: 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java?rev=1695542&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java
 (added)
+++ 
manifoldcf/branches/CONNECTORS-1161/connectors/confluence/connector/src/test/java/org/apache/manifoldcf/crawler/connectors/confluence/tests/ConfluenceConnectorTest.java
 Wed Aug 12 14:45:43 2015
@@ -0,0 +1,195 @@
+package org.apache.manifoldcf.crawler.connectors.confluence.tests;
+
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.nio.charset.StandardCharsets;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.manifoldcf.agents.interfaces.RepositoryDocument;
+import org.apache.manifoldcf.core.interfaces.Specification;
+import org.apache.manifoldcf.crawler.connectors.BaseRepositoryConnector;
+import 
org.apache.manifoldcf.crawler.connectors.confluence.ConfluenceRepositoryConnector;
+import 
org.apache.manifoldcf.crawler.connectors.confluence.client.ConfluenceClient;
+import 
org.apache.manifoldcf.crawler.connectors.confluence.model.ConfluenceResponse;
+import org.apache.manifoldcf.crawler.connectors.confluence.model.Page;
+import org.apache.manifoldcf.crawler.interfaces.IExistingVersions;
+import org.apache.manifoldcf.crawler.interfaces.IProcessActivity;
+import org.apache.manifoldcf.crawler.system.SeedingActivity;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.google.common.base.Optional;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfluenceConnectorTest {
+
+       @Mock
+       private ConfluenceClient client;
+       
+       private ConfluenceRepositoryConnector connector;
+       
+       @SuppressWarnings("unchecked")
+       @Before
+       public void setup() throws Exception{
+               connector = new ConfluenceRepositoryConnector();
+               connector.setConfluenceClient(client);
+               when(client.getPages(anyInt(), anyInt(), 
Mockito.any(Optional.class))).
+                       thenReturn(new 
ConfluenceResponse<Page>(Collections.<Page>emptyList(), 0, 0, true));
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Test
+       public void mockEmptySeeding() throws Exception {
+               
+               SeedingActivity activities = mock(SeedingActivity.class);
+               Specification spec = new Specification();
+               long seedTime = 0;
+
+               connector.addSeedDocuments(activities, spec, "", seedTime, 
BaseRepositoryConnector.JOBMODE_ONCEONLY);
+               // Verify it starts always at 0. Pagination configurable so 
anyInt(). Only one call because isLast must be false
+               verify(client, times(1)).getPages(eq(0), anyInt(), 
Mockito.any(Optional.class));
+       }
+       
+       @SuppressWarnings("unchecked")
+       @Test
+       public void mockSeeding() throws Exception {
+               
+               SeedingActivity activities = mock(SeedingActivity.class);
+               Specification spec = new Specification();
+               long seedTime = 0;
+       
+               List<Page> pages = new ArrayList<Page>();
+               Page page = mock(Page.class);
+               pages.add(page);
+               when(client.getPages(anyInt(), anyInt(), 
Mockito.any(Optional.class))).
+                       thenReturn(new ConfluenceResponse<Page>(pages, 0, 0, 
false)).
+                       thenReturn(new 
ConfluenceResponse<Page>(Collections.<Page>emptyList(), 0, 0, true));
+               connector.addSeedDocuments(activities, spec, "", seedTime, 
BaseRepositoryConnector.JOBMODE_ONCEONLY);
+               verify(activities, 
times(1)).addSeedDocument(Mockito.anyString());
+               verify(client, times(1)).getPages(eq(0), anyInt(), 
Mockito.any(Optional.class));
+               verify(client, times(1)).getPages(eq(1), anyInt(), 
Mockito.any(Optional.class));
+       }
+       
+       @Test
+       public void mockSimpleIngestion() throws Exception{
+               
+               Page fakePage = mock(Page.class);
+               
+               Date date = new Date();
+               DateFormat df = DateFormat.getDateTimeInstance();
+               String content = "A";
+               String uri = "http://test";;
+               byte[] documentBytes = content
+                               .getBytes(StandardCharsets.UTF_8);
+               long size = (long) documentBytes.length;
+               
+               when(fakePage.hasContent()).thenReturn(true);
+               when(fakePage.getContent()).thenReturn(content);
+               when(fakePage.getLength()).thenReturn(size);
+               when(fakePage.getLastModifiedDate()).thenReturn(date);
+               when(fakePage.getMediaType()).thenReturn("text/plain");
+               when(fakePage.getCreatedDate()).thenReturn(date);
+               when(fakePage.getWebUrl()).thenReturn(uri);
+               Map<String, Object> metadata = new HashMap<String, Object>();
+               metadata.put("x", "y"); 
+               when(fakePage.getMetadataAsMap()).thenReturn(metadata);
+                                               
+               IProcessActivity activities = mock(IProcessActivity.class);
+           when(activities.checkLengthIndexable(anyLong()))
+             .thenReturn(true);
+           when(activities.checkMimeTypeIndexable(anyString()))
+             .thenReturn(true);
+           when(activities.checkDateIndexable((Date)anyObject()))
+             .thenReturn(true);
+           when(activities.checkURLIndexable(anyString()))
+             .thenReturn(true);
+           when(activities.checkDocumentNeedsReindexing(anyString(), 
anyString()))
+             .thenReturn(true);
+           IExistingVersions statuses = mock(IExistingVersions.class);
+           
+           String ID = df.format(date);
+           when(statuses.getIndexedVersionString(ID)).
+               thenReturn(null);
+           
+           when(client.getPage(Mockito.anyString())).
+               thenReturn(fakePage);
+           
+           connector.processDocuments(new String[]{ID}, statuses, new 
Specification(), activities, 0, true);
+           ArgumentCaptor<RepositoryDocument> rd = 
ArgumentCaptor.forClass(RepositoryDocument.class);
+           
+           verify(client, times(1)).getPage(ID);
+           verify(activities, times(1)).ingestDocumentWithException(eq(ID),
+                               eq(df.format(date)), eq(uri), rd.capture());
+           verify(activities, times(1)).recordActivity(anyLong(),
+                       eq("read document"), eq(size), eq(ID), eq("OK"),
+                               anyString(), Mockito.isNull(String[].class));
+           
+           RepositoryDocument doc = rd.getValue();
+           Assert.assertEquals(size, doc.getBinaryLength());
+           String[] values = doc.getFieldAsStrings("x");
+           Assert.assertEquals(values.length, 1);
+           Assert.assertEquals(values[0], "y");
+           
+       }
+       
+       @Test
+       public void mockNeedsReindexing() throws Exception{
+               Page fakePage = mock(Page.class);
+               when(fakePage.hasContent()).thenReturn(true);
+               Date date = new Date();
+               DateFormat df = DateFormat.getDateTimeInstance();
+               String version = df.format(date);
+               
when(fakePage.getLastModifiedDate()).thenReturn(df.parse(version));
+               
+               String id = "1";
+               IProcessActivity activities = mock(IProcessActivity.class);
+               IExistingVersions statuses = mock(IExistingVersions.class);
+               when(statuses.getIndexedVersionString(id)).
+                       thenReturn(version);
+               
+               when(client.getPage(Mockito.anyString())).
+               thenReturn(fakePage);
+               
+               connector.processDocuments(new String[]{id}, statuses, new 
Specification(), activities, 0, true);
+               verify(client, times(1)).getPage(id);
+               verify(activities, times(1)).checkDocumentNeedsReindexing(id, 
version);
+       }
+       
+       @Test
+       public void mockDeleteDocument() throws Exception{
+               Page fakePage = mock(Page.class);
+               when(fakePage.hasContent()).thenReturn(false);
+               String id = "A";
+               when(fakePage.hasContent()).thenReturn(false);
+               when(client.getPage(Mockito.anyString())).
+       thenReturn(fakePage);
+               
+               IExistingVersions statuses = mock(IExistingVersions.class);
+               IProcessActivity activities = mock(IProcessActivity.class);
+               connector.processDocuments(new String[]{id}, statuses, new 
Specification(), activities, 0, true);
+               verify(client, times(1)).getPage(id);
+               verify(activities, times(1)).deleteDocument(id);
+                               
+       }
+               
+}

Added: manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml?rev=1695542&view=auto
==============================================================================
--- manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml (added)
+++ manifoldcf/branches/CONNECTORS-1161/connectors/confluence/pom.xml Wed Aug 
12 14:45:43 2015
@@ -0,0 +1,352 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       <parent>
+               <groupId>org.apache.manifoldcf</groupId>
+               <artifactId>mcf-connectors</artifactId>
+               <version>2.2-SNAPSHOT</version>
+       </parent>
+
+       <name>ManifoldCF - Connectors - Confluence Connector</name>
+       <modelVersion>4.0.0</modelVersion>
+       <artifactId>mcf-confluence-connector</artifactId>
+       <packaging>jar</packaging>
+       
+       <url>http://maven.apache.org</url>
+
+       <developers>
+               <developer>
+                       <name>Antonio David Perez Morales</name>
+                       <email>[email protected]</email>
+               </developer>
+       </developers>
+
+       <properties>
+               
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+       </properties>
+
+       <build>
+               <defaultGoal>integration-test</defaultGoal>
+               
<sourceDirectory>${basedir}/connector/src/main/java</sourceDirectory>
+               
<testSourceDirectory>${basedir}/connector/src/test/java</testSourceDirectory>
+               <resources>
+                       <resource>
+                               
<directory>${basedir}/connector/src/main/native2ascii</directory>
+                               <includes>
+                                       <include>**/*.properties</include>
+                               </includes>
+                       </resource>
+                       <resource>
+                               
<directory>${basedir}/connector/src/main/resources</directory>
+                               <includes>
+                                       <include>**/*.html</include>
+                                       <include>**/*.js</include>
+                               </includes>
+                       </resource>
+               </resources>
+               <testResources>
+                       <testResource>
+                               
<directory>${basedir}/connector/src/test/resources</directory>
+                       </testResource>
+               </testResources>
+
+
+               <plugins>
+                       <plugin>
+                               <groupId>org.codehaus.mojo</groupId>
+                               
<artifactId>native2ascii-maven-plugin</artifactId>
+                               <version>1.0-beta-1</version>
+                               <configuration>
+                                       <workDir>target/classes</workDir>
+                               </configuration>
+                               <executions>
+                                       <execution>
+                                               <id>native2ascii-utf8</id>
+                                               <goals>
+                                                       
<goal>native2ascii</goal>
+                                               </goals>
+                                               <configuration>
+                                                       
<encoding>UTF8</encoding>
+                                                       <includes>
+                                                               
<include>**/*.properties</include>
+                                                       </includes>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
+                       <!-- Test plugin configuration -->
+                       <plugin>
+                               <artifactId>maven-dependency-plugin</artifactId>
+                               <executions>
+                                       <execution>
+                                               <id>copy-war</id>
+                                               
<phase>generate-resources</phase>
+                                               <goals>
+                                                       <goal>copy</goal>
+                                               </goals>
+                                               <configuration>
+                                                       
<outputDirectory>target/dependency</outputDirectory>
+                                                       <artifactItems>
+                                                               <artifactItem>
+                                                                       
<groupId>${project.groupId}</groupId>
+                                                                       
<artifactId>mcf-api-service</artifactId>
+                                                                       
<version>${project.version}</version>
+                                                                       
<type>war</type>
+                                                                       
<overWrite>false</overWrite>
+                                                                       
<destFileName>mcf-api-service.war</destFileName>
+                                                               </artifactItem>
+                                                               <artifactItem>
+                                                                       
<groupId>${project.groupId}</groupId>
+                                                                       
<artifactId>mcf-authority-service</artifactId>
+                                                                       
<version>${project.version}</version>
+                                                                       
<type>war</type>
+                                                                       
<overWrite>false</overWrite>
+                                                                       
<destFileName>mcf-authority-service.war</destFileName>
+                                                               </artifactItem>
+                                                               <artifactItem>
+                                                                       
<groupId>${project.groupId}</groupId>
+                                                                       
<artifactId>mcf-crawler-ui</artifactId>
+                                                                       
<version>${project.version}</version>
+                                                                       
<type>war</type>
+                                                                       
<overWrite>false</overWrite>
+                                                                       
<destFileName>mcf-crawler-ui.war</destFileName>
+                                                               </artifactItem>
+                                                       </artifactItems>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
+
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                               <configuration>
+                                       <excludes>
+                                               
<exclude>**/*Postgresql*.java</exclude>
+                                               
<exclude>**/*MySQL*.java</exclude>
+                                       </excludes>
+                                       <forkMode>always</forkMode>
+                                       
<workingDirectory>target/test-output</workingDirectory>
+                               </configuration>
+                       </plugin>
+
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-failsafe-plugin</artifactId>
+                               <version>2.12.3</version>
+                               <configuration>
+                                       <skipTests>${skipITs}</skipTests>
+                                       <systemPropertyVariables>
+                                               
<crawlerWarPath>../dependency/mcf-crawler-ui.war</crawlerWarPath>
+                                               
<authorityserviceWarPath>../dependency/mcf-authority-service.war</authorityserviceWarPath>
+                                               
<apiWarPath>../dependency/mcf-api-service.war</apiWarPath>
+                                       </systemPropertyVariables>
+                                       <excludes>
+                                               
<exclude>**/*Postgresql*.java</exclude>
+                                               
<exclude>**/*MySQL*.java</exclude>
+                                       </excludes>
+                                       <forkMode>always</forkMode>
+                                       
<workingDirectory>target/test-output</workingDirectory>
+                               </configuration>
+                               <executions>
+                                       <execution>
+                                               <id>integration-test</id>
+                                               <goals>
+                                                       
<goal>integration-test</goal>
+                                               </goals>
+                                       </execution>
+                                       <execution>
+                                               <id>verify</id>
+                                               <goals>
+                                                       <goal>verify</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
+               </plugins>
+               <pluginManagement>
+                       <plugins>
+                               <!--This plugin's configuration is used to 
store Eclipse m2e settings only. It has no influence on the Maven build 
itself.-->
+                               <plugin>
+                                       <groupId>org.eclipse.m2e</groupId>
+                                       
<artifactId>lifecycle-mapping</artifactId>
+                                       <version>1.0.0</version>
+                                       <configuration>
+                                               <lifecycleMappingMetadata>
+                                                       <pluginExecutions>
+                                                               
<pluginExecution>
+                                                                       
<pluginExecutionFilter>
+                                                                               
<groupId>
+                                                                               
        org.apache.maven.plugins
+                                                                               
</groupId>
+                                                                               
<artifactId>
+                                                                               
        maven-dependency-plugin
+                                                                               
</artifactId>
+                                                                               
<versionRange>
+                                                                               
        [2.8,)
+                                                                               
</versionRange>
+                                                                               
<goals>
+                                                                               
        <goal>copy</goal>
+                                                                               
</goals>
+                                                                       
</pluginExecutionFilter>
+                                                                       <action>
+                                                                               
<ignore></ignore>
+                                                                       
</action>
+                                                               
</pluginExecution>
+                                                               
<pluginExecution>
+                                                                       
<pluginExecutionFilter>
+                                                                               
<groupId>
+                                                                               
        org.codehaus.mojo
+                                                                               
</groupId>
+                                                                               
<artifactId>
+                                                                               
        native2ascii-maven-plugin
+                                                                               
</artifactId>
+                                                                               
<versionRange>
+                                                                               
        [1.0-beta-1,)
+                                                                               
</versionRange>
+                                                                               
<goals>
+                                                                               
        <goal>native2ascii</goal>
+                                                                               
</goals>
+                                                                       
</pluginExecutionFilter>
+                                                                       <action>
+                                                                               
<ignore></ignore>
+                                                                       
</action>
+                                                               
</pluginExecution>
+                                                               
<pluginExecution>
+                                                                       
<pluginExecutionFilter>
+                                                                               
<groupId>
+                                                                               
        org.apache.maven.plugins
+                                                                               
</groupId>
+                                                                               
<artifactId>
+                                                                               
        maven-remote-resources-plugin
+                                                                               
</artifactId>
+                                                                               
<versionRange>
+                                                                               
        [1.5,)
+                                                                               
</versionRange>
+                                                                               
<goals>
+                                                                               
        <goal>process</goal>
+                                                                               
</goals>
+                                                                       
</pluginExecutionFilter>
+                                                                       <action>
+                                                                               
<ignore></ignore>
+                                                                       
</action>
+                                                               
</pluginExecution>
+                                                       </pluginExecutions>
+                                               </lifecycleMappingMetadata>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+
+
+
+       <dependencies>
+               <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>mcf-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+          <groupId>${project.groupId}</groupId>
+          <artifactId>mcf-connector-common</artifactId>
+          <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>mcf-pull-agent</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>mcf-agents</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>mcf-ui-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>${commons-lang.version}</version>
+            <type>jar</type>
+        </dependency>
+        
+        <dependency>
+                       <groupId>com.google.guava</groupId>
+                       <artifactId>guava</artifactId>
+                       <version>15.0</version>
+               </dependency>
+
+               <!-- Testing dependencies -->
+        
+        <dependency>
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
+          <version>${junit.version}</version>
+          <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.tomakehurst</groupId>
+            <artifactId>wiremock</artifactId>
+            <version>${wiremock.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+          <groupId>${project.groupId}</groupId>
+          <artifactId>mcf-core</artifactId>
+          <version>${project.version}</version>
+          <type>test-jar</type>
+          <scope>test</scope>
+        </dependency>
+                
+        <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+          <version>${slf4j.version}</version>
+        </dependency>
+        <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-simple</artifactId>
+          <version>${slf4j.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.1.1</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.16</version>
+            <scope>provided</scope>
+            <type>jar</type>
+        </dependency>
+        <dependency>
+            <groupId>com.googlecode.json-simple</groupId>
+            <artifactId>json-simple</artifactId>
+            <version>1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.8</version>
+        </dependency>
+       </dependencies>
+
+</project>

Modified: manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml?rev=1695542&r1=1695541&r2=1695542&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml (original)
+++ manifoldcf/branches/CONNECTORS-1161/connectors/pom.xml Wed Aug 12 14:45:43 
2015
@@ -65,6 +65,7 @@
     <module>tika</module>
     <module>documentfilter</module>
     <module>searchblox</module>
+    <module>confluence</module>
   </modules>
 
 </project>

Modified: 
manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml?rev=1695542&r1=1695541&r2=1695542&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml 
(original)
+++ 
manifoldcf/branches/CONNECTORS-1161/framework/buildfiles/connector-build.xml 
Wed Aug 12 14:45:43 2015
@@ -194,6 +194,9 @@
             <include name="castor*.jar"/>
             <include name="geronimo-javamail_1.4_spec*.jar"/>
         </fileset>
+       <fileset dir="${mcf-dist}/connector-lib">
+           <include name="guava*.jar"/>
+       </fileset>
         <pathelement location="build/stubclasses"/>
         <pathelement location="build/wsdlclasses"/>
         <pathelement location="build/xsdclasses"/>


Reply via email to