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 </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)
{