OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 17 | Rev 132 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 17 Rev 83
Line 14... Line 14...
14
 /*
14
 /*
15
 * SQLFieldsSet created on 12 mai 2004
15
 * SQLFieldsSet created on 12 mai 2004
16
 */
16
 */
17
package org.openconcerto.sql.model;
17
package org.openconcerto.sql.model;
18
 
18
 
-
 
19
import org.openconcerto.utils.CollectionMap2Itf.SetMapItf;
19
import org.openconcerto.utils.CollectionMap;
20
import org.openconcerto.utils.SetMap;
20
 
21
 
21
import java.util.Collection;
22
import java.util.Collection;
22
import java.util.Collections;
-
 
23
import java.util.HashSet;
23
import java.util.HashSet;
24
import java.util.LinkedHashSet;
24
import java.util.LinkedHashSet;
-
 
25
import java.util.Map;
25
import java.util.Set;
26
import java.util.Set;
26
 
27
 
-
 
28
import net.jcip.annotations.Immutable;
-
 
29
 
27
/**
30
/**
28
 * Un ensemble de champs SQL. Les champs sont indexés par table, et on peut donc connaître
31
 * Un ensemble de champs SQL. Les champs sont indexés par table, et on peut donc connaître
29
 * l'ensemble des tables des champs ou encore avoir tous les champs pour une table.
32
 * l'ensemble des tables des champs ou encore avoir tous les champs pour une table.
30
 * 
33
 * 
31
 * @see #getTables()
34
 * @see #getTables()
32
 * @see #getFields(SQLTable)
35
 * @see #getFields(SQLTable)
33
 * @author ILM Informatique 12 mai 2004
36
 * @author ILM Informatique 12 mai 2004
34
 */
37
 */
-
 
38
@Immutable
35
public class SQLFieldsSet {
39
public class SQLFieldsSet {
-
 
40
    static private final SQLFieldsSet EMPTY = new SQLFieldsSet(SetMap.<SQLTable, SQLField> empty(), true);
36
 
41
 
37
    // SQLTable => {SQLField}
42
    static public SQLFieldsSet empty() {
38
    private final CollectionMap<SQLTable, SQLField> tables;
-
 
39
    private String name;
43
        return EMPTY;
-
 
44
    }
40
 
45
 
-
 
46
    static public SQLFieldsSet create(final SQLTable t, final String... names) {
-
 
47
        final SetMapItf<SQLTable, SQLField> res = createMap();
41
    /**
48
        for (final String name : names) {
42
     * Crée un ensemble vide.
49
            res.add(t, t.getField(name));
43
     */
50
        }
44
    public SQLFieldsSet() {
-
 
45
        this(new HashSet<SQLField>());
51
        return new SQLFieldsSet(res, false);
46
    }
52
    }
47
 
53
 
48
    /**
-
 
49
     * Crée un ensemble composé des champs passés.
-
 
50
     * 
-
 
51
     * @param fields un ensemble de SQLField, l'ensemble n'est pas modifié.
-
 
52
     */
-
 
53
    public SQLFieldsSet(final Collection<SQLField> fields) {
54
    static public SQLFieldsSet create(final Map<SQLTable, ? extends Collection<SQLField>> fields) {
54
        this.tables = new CollectionMap<SQLTable, SQLField>(LinkedHashSet.class);
55
        final SetMapItf<SQLTable, SQLField> res = createMap();
55
        this.setFields(fields);
56
        res.merge(fields);
-
 
57
        return new SQLFieldsSet(res, false);
56
    }
58
    }
57
 
59
 
58
    private void setFields(final Collection<SQLField> fields) {
60
    static private final SetMapItf<SQLTable, SQLField> toSetMap(final Collection<SQLField> fields) {
59
        this.tables.clear();
61
        final SetMapItf<SQLTable, SQLField> res = createMap();
60
        for (final SQLField field : fields) {
62
        for (final SQLField f : fields)
61
            this.add(field);
63
            res.add(f.getTable(), f);
-
 
64
        return res;
62
        }
65
    }
-
 
66
 
-
 
67
    static private SetMapItf<SQLTable, SQLField> createMap() {
-
 
68
        return new SetMap<SQLTable, SQLField>() {
-
 
69
            @Override
-
 
70
            public Set<SQLField> createCollection(Collection<? extends SQLField> v) {
-
 
71
                final LinkedHashSet<SQLField> res = new LinkedHashSet<SQLField>(8);
-
 
72
                res.addAll(v);
-
 
73
                return res;
-
 
74
            }
-
 
75
        };
63
    }
76
    }
64
 
77
 
-
 
78
    static public final Set<String> getNames(final Collection<SQLField> fields) {
-
 
79
        final Set<String> res = new HashSet<String>(fields.size());
-
 
80
        for (final SQLField f : fields)
-
 
81
            res.add(f.getName());
-
 
82
        return res;
-
 
83
    }
-
 
84
 
-
 
85
    private final SetMapItf<SQLTable, SQLField> tables;
-
 
86
 
65
    /**
87
    /**
66
     * Ajoute un champ.
88
     * Crée un ensemble composé des champs passés.
67
     * 
89
     * 
68
     * @param field le champ a ajouté.
90
     * @param fields un ensemble de SQLField, l'ensemble n'est pas modifié.
69
     */
91
     */
70
    public final void add(final SQLField field) {
92
    public SQLFieldsSet(final Collection<SQLField> fields) {
71
        this.tables.put(field.getTable(), field);
93
        this(toSetMap(fields), false);
-
 
94
    }
-
 
95
 
-
 
96
    private SQLFieldsSet(final SetMapItf<SQLTable, SQLField> fields, final boolean unmodif) {
-
 
97
        this.tables = unmodif ? fields : SetMap.unmodifiableMap(fields);
72
    }
98
    }
73
 
99
 
74
    public final void retain(final SQLTable t) {
100
    public final SetMapItf<SQLTable, SQLField> getFields() {
75
        this.tables.keySet().retainAll(Collections.singleton(t));
101
        return this.tables;
76
    }
102
    }
77
 
103
 
78
    /**
104
    /**
79
     * Retourne tous les champs de cet ensemble appartenant à la table passée.
105
     * Retourne tous les champs de cet ensemble appartenant à la table passée.
80
     * 
106
     * 
81
     * @param table la table dont on veut les champs.
107
     * @param table la table dont on veut les champs.
82
     * @return l'ensemble des champs appartenant à la table.
108
     * @return l'ensemble des champs appartenant à la table.
83
     */
109
     */
84
    public final Set<SQLField> getFields(final SQLTable table) {
110
    public final Set<SQLField> getFields(final SQLTable table) {
85
        return (Set<SQLField>) this.tables.getNonNull(table);
111
        return this.tables.getNonNull(table);
86
    }
112
    }
87
 
113
 
88
    public final Set<SQLField> getFields(final String table) {
114
    public final Set<SQLField> getFields(final String table) {
89
        final Set<SQLField> res = new HashSet<SQLField>();
115
        final Set<SQLField> res = new HashSet<SQLField>();
90
        for (final SQLTable t : getTables())
116
        for (final SQLTable t : getTables())
Line 92... Line 118...
92
                res.addAll(this.getFields(t));
118
                res.addAll(this.getFields(t));
93
        return res;
119
        return res;
94
    }
120
    }
95
 
121
 
96
    public final Set<String> getFieldsNames(final SQLTable table) {
122
    public final Set<String> getFieldsNames(final SQLTable table) {
97
        final Set<String> res = new HashSet<String>();
-
 
98
        for (final SQLField f : this.getFields(table))
123
        return getNames(this.getFields(table));
99
            res.add(f.getName());
-
 
100
        return res;
-
 
101
    }
124
    }
102
 
125
 
103
    /**
126
    /**
104
     * Retourne toutes les tables des champs.
127
     * Retourne toutes les tables des champs.
105
     * 
128
     * 
106
     * @return l'ensemble des SQLTable.
129
     * @return l'ensemble des SQLTable.
107
     */
130
     */
108
    public final Set<SQLTable> getTables() {
131
    public final Set<SQLTable> getTables() {
109
        return Collections.unmodifiableSet(this.tables.keySet());
132
        return this.tables.keySet();
110
    }
-
 
111
 
-
 
112
    /**
-
 
113
     * Retourne toutes les champs.
-
 
114
     * 
-
 
115
     * @return l'ensemble des SQLField.
-
 
116
     */
-
 
117
    public final Set<SQLField> asSet() {
-
 
118
        return new HashSet<SQLField>(this.tables.values());
-
 
119
    }
-
 
120
 
-
 
121
    public final void setName(final String string) {
-
 
122
        this.name = string;
-
 
123
    }
133
    }
124
 
134
 
125
    @Override
135
    @Override
126
    public String toString() {
136
    public String toString() {
127
        return super.toString() + " " + this.name;
137
        return this.getClass().getSimpleName() + " " + this.tables;
128
    }
138
    }
129
 
139
 
130
}
140
}