All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.manifoldcf.crawler.jobs.PrereqEventManager Maven / Gradle / Ivy

/* $Id: PrereqEventManager.java 988245 2010-08-23 18:39:35Z kwright $ */

/**
* 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.crawler.interfaces.*;
import org.apache.manifoldcf.crawler.interfaces.CacheKeyFactory;
import java.util.*;

/** This class manages the prerequisite event table.
* This table lists the prerequisite event rows that must NOT exist in order for a jobqueue entry to be queued for processing.  If a prerequisite event row does, in fact,
* exist, then queuing and processing do not take place until that row is cleared.
* 
* 

* prereqevents * * * * * *
FieldTypeDescription        
ownerBIGINTReference:jobqueue.id
eventnameVARCHAR(255)
*

* */ public class PrereqEventManager extends org.apache.manifoldcf.core.database.BaseTable { public static final String _rcsid = "@(#)$Id: PrereqEventManager.java 988245 2010-08-23 18:39:35Z kwright $"; // Field names public final static String ownerField = "owner"; public final static String eventNameField = "eventname"; /** Constructor. *@param database is the database handle. */ public PrereqEventManager(IDBInterface database) throws ManifoldCFException { super(database,"prereqevents"); } /** Install or upgrade this table. */ public void install(String ownerTableName, String ownerColumn) throws ManifoldCFException { // Standard practice: Outer loop for upgrade support. while (true) { Map existing = getTableSchema(null,null); if (existing == null) { HashMap map = new HashMap(); map.put(ownerField,new ColumnDescription("BIGINT",false,false,ownerTableName,ownerColumn,false)); map.put(eventNameField,new ColumnDescription("VARCHAR(255)",false,false,null,null,false)); performCreate(map,null); } else { // Schema upgrade goes here, when needed. } // Index management IndexDescription ownerIndex = new IndexDescription(false,new String[]{ownerField}); // eventNameIndex was proposed by postgresql team, but it did not help, so I am removing it. //IndexDescription eventNameIndex = new IndexDescription(false,new String[]{eventNameField}); // 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 (eventNameIndex != null && id.equals(eventNameIndex)) // eventNameIndex = 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); //if (eventNameIndex != null) // performAddIndex(null,eventNameIndex); break; } } /** Uninstall. */ public void deinstall() throws ManifoldCFException { beginTransaction(); try { performDrop(null); } catch (ManifoldCFException e) { signalRollback(); throw e; } catch (Error e) { signalRollback(); throw e; } finally { endTransaction(); } } /** Delete specified rows, based on jobqueue criteria. */ public void deleteRows(String parentTableName, String joinField, String parentCriteria, ArrayList list) throws ManifoldCFException { StringBuilder sb = new StringBuilder(); ArrayList newList = new ArrayList(); sb.append("WHERE EXISTS(SELECT 'x' FROM ").append(parentTableName).append(" WHERE ") .append(buildConjunctionClause(newList,new ClauseDescription[]{ new JoinClause(joinField,getTableName() + "." + ownerField)})); if (parentCriteria != null) { sb.append(" AND ").append(parentCriteria); if (list != null) newList.addAll(list); } sb.append(")"); performDelete(sb.toString(),newList,null); noteModifications(0,0,1); } /** Delete specified rows, as directly specified without a join. */ public void deleteRows(ArrayList list) throws ManifoldCFException { ArrayList newList = new ArrayList(); String query = buildConjunctionClause(newList,new ClauseDescription[]{ new MultiClause(ownerField,list)}); performDelete("WHERE "+query,newList,null); noteModifications(0,0,1); } /** Delete rows pertaining to a single entry */ public void deleteRows(Long recordID) throws ManifoldCFException { ArrayList list = new ArrayList(); String query = buildConjunctionClause(list,new ClauseDescription[]{ new UnitaryClause(ownerField,recordID)}); performDelete(" WHERE "+query,list,null); noteModifications(0,0,1); } /** Add rows pertaining to a single entry */ public void addRows(Long recordID, String[] eventNames) throws ManifoldCFException { if (eventNames != null) { int i = 0; while (i < eventNames.length) { HashMap map = new HashMap(); map.put(ownerField,recordID); map.put(eventNameField,eventNames[i++]); performInsert(map,null); } noteModifications(i,0,0); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy