01: /*
02: * (c) Copyright 2007 by Volker Bergmann. All rights reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without
05: * modification, is permitted under the terms of the
06: * GNU General Public License.
07: *
08: * For redistributing this software or a derivative work under a license other
09: * than the GPL-compatible Free Software License as defined by the Free
10: * Software Foundation or approved by OSI, you must first obtain a commercial
11: * license to this software product from Volker Bergmann.
12: *
13: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14: * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS,
15: * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
16: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
17: * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24: * POSSIBILITY OF SUCH DAMAGE.
25: */
26:
27: package org.databene.benerator.main;
28:
29: import java.util.Collection;
30: import java.util.List;
31: import java.util.concurrent.ExecutorService;
32:
33: import org.databene.benerator.Generator;
34: import org.databene.model.consumer.Consumer;
35: import org.databene.model.data.Entity;
36: import org.databene.task.PagedTask;
37: import org.databene.task.Task;
38:
39: /**
40: * Creates a number of entities in parallel execution and a given page size.<br/><br/>
41: * Created: 01.02.2008 14:43:15
42: * @author Volker Bergmann
43: */
44: public class PagedCreateEntityTask extends PagedTask {
45:
46: private Generator<Entity> generator;
47: private Collection<Consumer<Entity>> consumers;
48:
49: public PagedCreateEntityTask(String name, int count, int pageSize,
50: int threads, List<? extends Task> subTasks,
51: Generator<Entity> generator,
52: Collection<Consumer<Entity>> consumers,
53: ExecutorService executor, boolean isSubTask) {
54: super (new CreateEntityTask(name, generator, consumers,
55: subTasks, isSubTask), count, null, pageSize, threads,
56: executor);
57: this .generator = generator;
58: this .consumers = consumers;
59: }
60:
61: public void pageFinished(int currentPageNo, long totalPages) {
62: for (Consumer<Entity> consumer : consumers)
63: consumer.flush();
64: }
65:
66: @Override
67: public void destroy() {
68: super .destroy();
69: synchronized (generator) {
70: generator.close();
71: }
72: };
73:
74: @Override
75: protected boolean workPending(int currentPageNo) {
76: return generator.available();
77: }
78:
79: public void reset() {
80: generator.reset();
81: }
82:
83: @Override
84: public String toString() {
85: return getClass().getSimpleName() + '[' + realTask + ']';
86: }
87: }
|