01: /*
02: * Copyright 2006-2007 Pentaho Corporation. All rights reserved.
03: * This software was developed by Pentaho Corporation and is provided under the terms
04: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
05: * this file except in compliance with the license. If you need a copy of the license,
06: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt.
07: *
08: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
09: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
10: * the license for the specific language governing your rights and limitations.
11: *
12: * Additional Contributor(s): Martin Schmid gridvision engineering GmbH
13: */
14: package org.pentaho.reportdesigner.crm.report.model;
15:
16: import org.jetbrains.annotations.NotNull;
17: import org.jetbrains.annotations.Nullable;
18:
19: import java.util.HashMap;
20: import java.util.TreeSet;
21:
22: /**
23: * User: Martin
24: * Date: 27.10.2005
25: * Time: 09:58:06
26: */
27: public class FieldNameFactory {
28: @NotNull
29: private static final FieldNameFactory instance = new FieldNameFactory();
30:
31: @NotNull
32: public static FieldNameFactory getInstance() {
33: return instance;
34: }
35:
36: @NotNull
37: private HashMap<String, TreeSet<Integer>> numberRegistry;
38:
39: private FieldNameFactory() {
40: numberRegistry = new HashMap<String, TreeSet<Integer>>();
41: }
42:
43: public int getNextFreeNumber(@NotNull
44: String prefix) {
45: @Nullable
46: TreeSet<Integer> integers = numberRegistry.get(prefix);
47: if (integers == null) {
48: integers = new TreeSet<Integer>();
49: numberRegistry.put(prefix, integers);
50: }
51:
52: for (int i = 1; i < Integer.MAX_VALUE; i++) {
53: if (!integers.contains(Integer.valueOf(i))) {
54: integers.add(Integer.valueOf(i));
55: return i;
56: }
57: }
58:
59: return -1;
60: }
61:
62: }
|