Skip to content
Snippets Groups Projects
Commit c220549d authored by felmer's avatar felmer
Browse files

DMV-13 Introducing IStoreItemFilter and StoreItemFilterBank....

DMV-13 Introducing IStoreItemFilter and StoreItemFilterBank. QuietPeriodFileFilter implements IStoreItemFilter.

SVN: 6068
parent 61f617d5
No related branches found
No related tags found
No related merge requests found
...@@ -22,7 +22,7 @@ import ch.systemsx.cisd.common.logging.ISimpleLogger; ...@@ -22,7 +22,7 @@ import ch.systemsx.cisd.common.logging.ISimpleLogger;
import ch.systemsx.cisd.common.utilities.StoreItem; import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.common.utilities.DirectoryScanningTimerTask.IScannedStore; import ch.systemsx.cisd.common.utilities.DirectoryScanningTimerTask.IScannedStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore; import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.utils.QuietPeriodFileFilter; import ch.systemsx.cisd.datamover.utils.IStoreItemFilter;
/** /**
* An <code>IScannedStore</code> implementation which is based on {@link IFileStore}. * An <code>IScannedStore</code> implementation which is based on {@link IFileStore}.
...@@ -33,12 +33,12 @@ final class FileScannedStore implements IScannedStore ...@@ -33,12 +33,12 @@ final class FileScannedStore implements IScannedStore
{ {
private final IFileStore fileStore; private final IFileStore fileStore;
private final QuietPeriodFileFilter quietPeriodFileFilter; private final IStoreItemFilter storeItemFilter;
FileScannedStore(final IFileStore fileStore, final QuietPeriodFileFilter quietPeriodFileFilter) FileScannedStore(final IFileStore fileStore, final IStoreItemFilter storeItemFilter)
{ {
this.fileStore = fileStore; this.fileStore = fileStore;
this.quietPeriodFileFilter = quietPeriodFileFilter; this.storeItemFilter = storeItemFilter;
} }
private final StoreItem[] filterReadyToProcess(final StoreItem[] items) private final StoreItem[] filterReadyToProcess(final StoreItem[] items)
...@@ -60,7 +60,7 @@ final class FileScannedStore implements IScannedStore ...@@ -60,7 +60,7 @@ final class FileScannedStore implements IScannedStore
{ {
return false; return false;
} }
return quietPeriodFileFilter.accept(item); return storeItemFilter.accept(item);
} }
// //
......
...@@ -41,6 +41,7 @@ import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore; ...@@ -41,6 +41,7 @@ import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory; import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
import ch.systemsx.cisd.datamover.filesystem.intf.IPathMover; import ch.systemsx.cisd.datamover.filesystem.intf.IPathMover;
import ch.systemsx.cisd.datamover.filesystem.intf.IRecoverableTimerTaskFactory; import ch.systemsx.cisd.datamover.filesystem.intf.IRecoverableTimerTaskFactory;
import ch.systemsx.cisd.datamover.utils.IStoreItemFilter;
import ch.systemsx.cisd.datamover.utils.LocalBufferDirs; import ch.systemsx.cisd.datamover.utils.LocalBufferDirs;
import ch.systemsx.cisd.datamover.utils.QuietPeriodFileFilter; import ch.systemsx.cisd.datamover.utils.QuietPeriodFileFilter;
...@@ -72,7 +73,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory ...@@ -72,7 +73,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
private final String prefixForIncoming; private final String prefixForIncoming;
private final QuietPeriodFileFilter quietPeriodFileFilter; private final IStoreItemFilter storeItemFilter;
public static final DataMoverProcess createMovingProcess(Parameters parameters, public static final DataMoverProcess createMovingProcess(Parameters parameters,
IFileSysOperationsFactory factory, LocalBufferDirs bufferDirs) IFileSysOperationsFactory factory, LocalBufferDirs bufferDirs)
...@@ -99,7 +100,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory ...@@ -99,7 +100,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
this.pathMover = factory.getMover(); this.pathMover = factory.getMover();
this.factory = factory; this.factory = factory;
this.bufferDirs = bufferDirs; this.bufferDirs = bufferDirs;
this.quietPeriodFileFilter = new QuietPeriodFileFilter(incomingStore, parameters, timeProvider); this.storeItemFilter = new QuietPeriodFileFilter(incomingStore, parameters, timeProvider);
} }
public TimerTask createRecoverableTimerTask() public TimerTask createRecoverableTimerTask()
...@@ -112,7 +113,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory ...@@ -112,7 +113,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
final IStoreHandler pathHandler = createIncomingMovingPathHandler(); final IStoreHandler pathHandler = createIncomingMovingPathHandler();
final DirectoryScanningTimerTask movingTask = final DirectoryScanningTimerTask movingTask =
new DirectoryScanningTimerTask(new FileScannedStore(incomingStore, new DirectoryScanningTimerTask(new FileScannedStore(incomingStore,
quietPeriodFileFilter), bufferDirs.getCopyInProgressDir(), pathHandler, storeItemFilter), bufferDirs.getCopyInProgressDir(), pathHandler,
NUMBER_OF_ERRORS_IN_LISTING_IGNORED); NUMBER_OF_ERRORS_IN_LISTING_IGNORED);
return new DataMoverProcess(movingTask, "Mover of Incoming Data", this); return new DataMoverProcess(movingTask, "Mover of Incoming Data", this);
} }
......
/*
* Copyright 2008 ETH Zuerich, CISD
*
* Licensed 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 ch.systemsx.cisd.datamover.utils;
import ch.systemsx.cisd.common.utilities.StoreItem;
/**
* Filter of {@link StoreItem} objects. Note, that a filter can be stateful. That is, invocations
* of {@link #accept(StoreItem)} with the same argument might return different values.
*
* @author Franz-Josef Elmer
*/
public interface IStoreItemFilter
{
/**
* Accepts the specified item or not.
*
* @return <code>true</code> if the item is accepted (i.e. passes the filter).
*/
public boolean accept(StoreItem item);
}
\ No newline at end of file
...@@ -45,7 +45,7 @@ import ch.systemsx.cisd.datamover.intf.ITimingParameters; ...@@ -45,7 +45,7 @@ import ch.systemsx.cisd.datamover.intf.ITimingParameters;
* *
* @author Bernd Rinn * @author Bernd Rinn
*/ */
public class QuietPeriodFileFilter public class QuietPeriodFileFilter implements IStoreItemFilter
{ {
// @Private // @Private
static final int CLEANUP_TO_QUIET_PERIOD_RATIO = 10; static final int CLEANUP_TO_QUIET_PERIOD_RATIO = 10;
......
/*
* Copyright 2008 ETH Zuerich, CISD
*
* Licensed 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 ch.systemsx.cisd.datamover.utils;
import java.util.ArrayList;
import java.util.List;
import ch.systemsx.cisd.common.utilities.StoreItem;
/**
* A filter bank of {@link IStoreItemFilter} instances. A {@link StoreItem} tries to passes the
* filters of the filter bank in the order the filters have been added (with
* {@link #add(IStoreItemFilter)}). If the item does not pass a filter (i.e.
* {@link IStoreItemFilter#accept(StoreItem)} return <code>false</code>) it does not pass the
* filter bank. Note, that in this case the other filter are not checked.
*
* @author Franz-Josef Elmer
*/
public class StoreItemFilterBank implements IStoreItemFilter
{
private final List<IStoreItemFilter> filters = new ArrayList<IStoreItemFilter>();
/**
* Adds the specified filter.
*/
public void add(IStoreItemFilter filter)
{
filters.add(filter);
}
/**
* Accepts the specified item if it accepted by all filters.
*/
public boolean accept(StoreItem item)
{
for (IStoreItemFilter filter : filters)
{
if (filter.accept(item) == false)
{
return false;
}
}
return true;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment