1 /*
2 * (c) Copyright 2006-2020 by rapiddweller GmbH & Volker Bergmann. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, is permitted under the terms of the
6 * GNU General Public License.
7 *
8 * For redistributing this software or a derivative work under a license other
9 * 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 rapiddweller GmbH & 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 com.rapiddweller.benerator.engine;
28
29 import com.rapiddweller.common.IOUtil;
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
32
33 import java.io.Closeable;
34 import java.util.ArrayList;
35 import java.util.Collection;
36 import java.util.List;
37
38 /**
39 * Provides a standard implementation of the {@link ResourceManager} interface.<br/>
40 * <br/>
41 * Created at 25.09.2009 09:19:41
42 *
43 * @author Volker Bergmann
44 * @since 0.6.0
45 */
46 public class ResourceManagerSupport implements ResourceManager {
47
48 private static final Logger LOGGER = LogManager.getLogger(ResourceManagerSupport.class);
49
50 private final List<Closeable> resources = new ArrayList<>();
51
52 @Override
53 public boolean addResource(Closeable resource) {
54 if (resources.contains(resource)) {
55 return false;
56 }
57 return resources.add(resource);
58 }
59
60 /**
61 * Gets resources.
62 *
63 * @return the resources
64 */
65 public Collection<? extends Closeable> getResources() {
66 return resources;
67 }
68
69 @Override
70 public void close() {
71 LOGGER.debug("Closing resources: {}", this);
72 for (int i = resources.size() - 1; i >= 0; i--) {
73 IOUtil.close(resources.get(i));
74 }
75 resources.clear();
76 }
77
78 @Override
79 public String toString() {
80 return getClass().getSimpleName() + resources;
81 }
82
83 }