Author: kwright
Date: Sun Jan 27 14:07:56 2013
New Revision: 1439087

URL: http://svn.apache.org/viewvc?rev=1439087&view=rev
Log:
Add forced parameters table for jobs

Added:
    
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
   (with props)
Modified:
    
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java

Added: 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java?rev=1439087&view=auto
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
 (added)
+++ 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
 Sun Jan 27 14:07:56 2013
@@ -0,0 +1,223 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.manifoldcf.crawler.jobs;
+
+import org.apache.manifoldcf.core.interfaces.*;
+import org.apache.manifoldcf.agents.interfaces.*;
+import org.apache.manifoldcf.crawler.interfaces.*;
+import java.util.*;
+
+/** This class manages the "jobforcedparams" table, which contains the forced 
parameters for each job.
+* 
+* <br><br>
+* <b>jobforcedparams</b>
+* <table border="1" cellpadding="3" cellspacing="0">
+* <tr class="TableHeadingColor">
+* 
<th>Field</th><th>Type</th><th>Description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
+* <tr><td>ownerid</td><td>BIGINT</td><td>Reference:jobs.id</td></tr>
+* <tr><td>paramname</td><td>VARCHAR(255)</td><td></td></tr>
+* <tr><td>paramvalue</td><td>VARCHAR(255)</td><td></td></tr>
+* </table>
+* <br><br>
+* 
+*/
+public class ForcedParamManager extends 
org.apache.manifoldcf.core.database.BaseTable
+{
+  public static final String _rcsid = "@(#)$Id$";
+
+  // Schema
+  public final static String ownerIDField = "ownerid";
+  public final static String paramNameField = "paramname";
+  public final static String paramValueField = "paramvalue";
+
+  /** Constructor.
+  *@param threadContext is the thread context.
+  *@param database is the database instance.
+  */
+  public ForcedParamManager(IThreadContext threadContext, IDBInterface 
database)
+    throws ManifoldCFException
+  {
+    super(database,"jobforcedparams");
+  }
+
+  /** Install or upgrade.
+  *@param ownerTable is the name of the table that owns this one.
+  *@param owningTablePrimaryKey is the primary key of the owning table.
+  */
+  public void install(String ownerTable, String owningTablePrimaryKey)
+    throws ManifoldCFException
+  {
+    // Standard practice: outer loop
+    while (true)
+    {
+      Map existing = getTableSchema(null,null);
+      if (existing == null)
+      {
+        HashMap map = new HashMap();
+        map.put(ownerIDField,new 
ColumnDescription("BIGINT",false,false,ownerTable,owningTablePrimaryKey,false));
+        map.put(paramNameField,new 
ColumnDescription("VARCHAR(255)",false,false,null,null,false));
+        map.put(paramValueField,new 
ColumnDescription("VARCHAR(255)",false,true,null,null,false));
+        performCreate(map,null);
+      }
+      else
+      {
+        // Upgrade code goes here, as needed
+      }
+
+      // Index management
+      IndexDescription ownerIndex = new IndexDescription(true,new 
String[]{ownerIDField,paramNameField});
+
+      // Get rid of indexes that shouldn't be there
+      Map indexes = getTableIndexes(null,null);
+      Iterator iter = indexes.keySet().iterator();
+      while (iter.hasNext())
+      {
+        String indexName = (String)iter.next();
+        IndexDescription id = (IndexDescription)indexes.get(indexName);
+
+        if (ownerIndex != null && id.equals(ownerIndex))
+          ownerIndex = null;
+        else if (indexName.indexOf("_pkey") == -1)
+          // This index shouldn't be here; drop it
+          performRemoveIndex(indexName);
+      }
+
+      // Add the ones we didn't find
+      if (ownerIndex != null)
+        performAddIndex(null,ownerIndex);
+
+      break;
+    }
+  }
+
+  /** Uninstall.
+  */
+  public void deinstall()
+    throws ManifoldCFException
+  {
+    performDrop(null);
+  }
+
+  /** Read rows for a given owner id.
+  *@param id is the owner id.
+  *@return a map of param name to param set.
+  */
+  public Map<String,Set<String>> readRows(Long id)
+    throws ManifoldCFException
+  {
+    ArrayList list = new ArrayList();
+    list.add(id);
+    IResultSet set = performQuery("SELECT 
"+paramNameField+","+paramValueField+" FROM "+getTableName()+" WHERE 
"+ownerIDField+"=?",list,
+      null,null);
+    Map<String,Set<String>> rval = new HashMap<String,Set<String>>();
+    if (set.getRowCount() == 0)
+      return rval;
+    for (int i = 0; i < set.getRowCount(); i++)
+    {
+      IResultRow row = set.getRow(i);
+      String paramName = (String)row.getValue(paramNameField);
+      String paramValue = (String)row.getValue(paramValueField);
+      if (paramValue == null)
+        paramValue = "";
+      Set<String> valueSet = rval.get(paramName);
+      if (valueSet == null)
+      {
+        valueSet = new HashSet<String>();
+        rval.put(paramName,valueSet);
+      }
+      valueSet.add(paramValue);
+    }
+    return rval;
+  }
+
+  /** Fill in a set of param maps corresponding to a set of owner id's.
+  *@param returnValues is a map keyed by ownerID, with value of JobDescription.
+  *@param ownerIDList is the list of owner id's.
+  *@param ownerIDParams is the corresponding set of owner id parameters.
+  */
+  public void getRows(Map<Long,JobDescription> returnValues, String 
ownerIDList, ArrayList ownerIDParams)
+    throws ManifoldCFException
+  {
+    IResultSet set = performQuery("SELECT * FROM "+getTableName()+" WHERE 
"+ownerIDField+" IN ("+ownerIDList+")",ownerIDParams,
+      null,null);
+    for (int i = 0; i < set.getRowCount(); i++)
+    {
+      IResultRow row = set.getRow(i);
+      Long ownerID = (Long)row.getValue(ownerIDField);
+      String paramName = (String)row.getValue(paramNameField);
+      String paramValue = (String)row.getValue(paramValueField);
+      if (paramValue == null)
+        paramValue = "";
+      returnValues.get(ownerID).addForcedMetadataValue(paramName,paramValue);
+    }
+  }
+
+  /** Write a filter list into the database.
+  *@param ownerID is the owning identifier.
+  *@param list is the job description to write hopcount filters for.
+  */
+  public void writeRows(Long ownerID, IJobDescription list)
+    throws ManifoldCFException
+  {
+    Map map = new HashMap();
+    beginTransaction();
+    try
+    {
+      Map<String,Set<String>> forcedMetadata = list.getForcedMetadata();
+      for (String paramName : forcedMetadata.keySet())
+      {
+        Set<String> forcedValue = forcedMetadata.get(paramName);
+        for (String paramValue : forcedValue)
+        {
+          map.clear();
+          map.put(paramNameField,paramName);
+          map.put(paramValueField,paramValue);
+          map.put(ownerIDField,ownerID);
+          performInsert(map,null);
+        }
+      }
+    }
+    catch (ManifoldCFException e)
+    {
+      signalRollback();
+      throw e;
+    }
+    catch (Error e)
+    {
+      signalRollback();
+      throw e;
+    }
+    finally
+    {
+      endTransaction();
+    }
+  }
+
+  /** Delete rows.
+  *@param ownerID is the owner whose rows to delete.
+  */
+  public void deleteRows(Long ownerID)
+    throws ManifoldCFException
+  {
+    ArrayList list = new ArrayList();
+    list.add(ownerID);
+    performDelete("WHERE "+ownerIDField+"=?",list,null);
+  }
+
+}

Propchange: 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ForcedParamManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java?rev=1439087&r1=1439086&r2=1439087&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
 (original)
+++ 
manifoldcf/branches/CONNECTORS-552-2/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
 Sun Jan 27 14:07:56 2013
@@ -246,6 +246,7 @@ public class Jobs extends org.apache.man
   protected ICacheManager cacheManager;
   protected ScheduleManager scheduleManager;
   protected HopFilterManager hopFilterManager;
+  protected ForcedParamManager forcedParamManager;
 
   protected IOutputConnectionManager outputMgr;
   protected IRepositoryConnectionManager connectionMgr;
@@ -262,6 +263,8 @@ public class Jobs extends org.apache.man
     this.threadContext = threadContext;
     scheduleManager = new ScheduleManager(threadContext,database);
     hopFilterManager = new HopFilterManager(threadContext,database);
+    forcedParamManager = new ForcedParamManager(threadContext,database);
+    
     cacheManager = CacheManagerFactory.make(threadContext);
 
     outputMgr = OutputConnectionManagerFactory.make(threadContext);
@@ -311,6 +314,7 @@ public class Jobs extends org.apache.man
       // Handle related tables
       scheduleManager.install(getTableName(),idField);
       hopFilterManager.install(getTableName(),idField);
+      forcedParamManager.install(getTableName(),idField);
 
       // Index management
       IndexDescription statusIndex = new IndexDescription(false,new 
String[]{statusField,idField,priorityField});
@@ -357,6 +361,7 @@ public class Jobs extends org.apache.man
     beginTransaction();
     try
     {
+      forcedParamManager.deinstall();
       hopFilterManager.deinstall();
       scheduleManager.deinstall();
       performDrop(null);
@@ -602,6 +607,7 @@ public class Jobs extends org.apache.man
     {
       scheduleManager.deleteRows(id);
       hopFilterManager.deleteRows(id);
+      forcedParamManager.deleteRows(id);
       ArrayList params = new ArrayList();
       String query = buildConjunctionClause(params,new ClauseDescription[]{
         new UnitaryClause(idField,id)});
@@ -743,6 +749,7 @@ public class Jobs extends org.apache.man
               performUpdate(values," WHERE "+query,params,null);
               scheduleManager.deleteRows(id);
               hopFilterManager.deleteRows(id);
+              forcedParamManager.deleteRows(id);
             }
             else
             {
@@ -760,7 +767,9 @@ public class Jobs extends org.apache.man
             scheduleManager.writeRows(id,jobDescription);
             // Write hop filter rows
             hopFilterManager.writeRows(id,jobDescription);
-
+            // Write forced params
+            forcedParamManager.writeRows(id,jobDescription);
+            
             cacheManager.invalidateKeys(ch);
             break;
           }
@@ -2639,6 +2648,7 @@ public class Jobs extends org.apache.man
       // Fill in schedules for jobs
       scheduleManager.getRows(returnValues,idList,params);
       hopFilterManager.getRows(returnValues,idList,params);
+      forcedParamManager.getRows(returnValues,idList,params);
     }
     catch (NumberFormatException e)
     {


Reply via email to