annotate artifact-database/src/main/java/de/intevation/artifactdatabase/Backend.java @ 179:644fd11ddd9f

Added code to set attribute of a collection item. artifacts/trunk@1405 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 06 Mar 2011 10:55:37 +0000
parents 535e4ea2ef9b
children 38fbbeffe8fe
rev   line source
100
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
1 /*
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
2 * Copyright (c) 2010 by Intevation GmbH
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
3 *
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
4 * This program is free software under the LGPL (>=v2.1)
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
5 * Read the file LGPL.txt coming with the software for details
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
6 * or visit http://www.gnu.org/licenses/ if it does not exist.
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
7 */
933bbc9fc11f Added license file and license headers.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 93
diff changeset
8
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 package de.intevation.artifactdatabase;
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
158
d718a4d55662 Implemented the createCollection() method in the artifact database.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 157
diff changeset
11 import de.intevation.artifacts.Artifact;
157
6e6965873a48 Simplified creation of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 156
diff changeset
12 import de.intevation.artifacts.ArtifactCollection;
158
d718a4d55662 Implemented the createCollection() method in the artifact database.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 157
diff changeset
13 import de.intevation.artifacts.ArtifactCollectionFactory;
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
14 import de.intevation.artifacts.ArtifactFactory;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
15 import de.intevation.artifacts.ArtifactSerializer;
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
16 import de.intevation.artifacts.User;
157
6e6965873a48 Simplified creation of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 156
diff changeset
17 import de.intevation.artifacts.UserFactory;
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
19 import de.intevation.artifacts.common.utils.XMLUtils;
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
20
93
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 90
diff changeset
21 import java.sql.SQLException;
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
22 import java.sql.Timestamp;
93
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 90
diff changeset
23 import java.sql.Types;
e27cf9c84eb8 Unified imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 90
diff changeset
24
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
25 import java.util.ArrayList;
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
26 import java.util.Date;
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
27
17
5a6b6a3debc7 Integrated logging into artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 15
diff changeset
28 import org.apache.log4j.Logger;
5a6b6a3debc7 Integrated logging into artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 15
diff changeset
29
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
30 import org.w3c.dom.Document;
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
31
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 /**
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
33 * The backend implements the low level layer used to store artifacts
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
34 * in a SQL database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
35 *
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
36 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 */
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 public class Backend
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
39 implements DatabaseCleaner.ArtifactReviver
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 {
17
5a6b6a3debc7 Integrated logging into artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 15
diff changeset
41 private static Logger logger = Logger.getLogger(Backend.class);
5a6b6a3debc7 Integrated logging into artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 15
diff changeset
42
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
43 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
44 * The SQL statement to create new artifact id inside the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
45 */
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
46 public static final String SQL_NEXT_ID =
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
47 SQL.get("artifacts.id.nextval");
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
48
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
49 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
50 * The SQL statement to insert an artifact into the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
51 */
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
52 public static final String SQL_INSERT =
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
53 SQL.get("artifacts.insert");
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
54
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
55 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
56 * The SQL statement to update some columns of an existing
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
57 * artifact in the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
58 */
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
59 public static final String SQL_UPDATE =
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
60 SQL.get("artifacts.update");
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
61
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
62 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
63 * The SQL statement to touch the access time of an
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
64 * artifact inside the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
65 */
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
66 public static final String SQL_TOUCH =
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
67 SQL.get("artifacts.touch");
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
68
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
69 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
70 * The SQL statement to load an artifact by a given
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
71 * identifier from the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
72 */
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
73 public static final String SQL_LOAD_BY_GID =
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
74 SQL.get("artifacts.select.gid");
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
75
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
76 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
77 * The SQL statement to get the database id of an artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
78 * identified by the identifier.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
79 */
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
80 public static final String SQL_GET_ID =
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
81 SQL.get("artifacts.get.id");
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
82
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
83 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
84 * The SQL statement to replace the content of an
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
85 * existing artifact inside the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
86 */
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
87 public static final String SQL_REPLACE =
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
88 SQL.get("artifacts.replace");
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
89
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
90 // USER SQL
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
91
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
92 public static final String SQL_USERS_NEXT_ID =
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
93 SQL.get("users.id.nextval");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
94
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
95 public static final String SQL_USERS_INSERT =
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
96 SQL.get("users.insert");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
97
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
98 public static final String SQL_USERS_SELECT_ID_BY_GID =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
99 SQL.get("users.select.id.by.gid");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
100
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
101 public static final String SQL_USERS_SELECT_GID =
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
102 SQL.get("users.select.gid");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
103
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
104 public static final String SQL_USERS_DELETE_ID =
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
105 SQL.get("users.delete.id");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
106
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
107 public static final String SQL_USERS_DELETE_COLLECTIONS =
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
108 SQL.get("users.delete.collections");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
109
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
110 public static final String SQL_USERS_SELECT_ALL =
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
111 SQL.get("users.select.all");
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
112
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
113 public static final String SQL_USERS_COLLECTIONS =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
114 SQL.get("users.collections");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
115
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
116 public static final String SQL_USERS_COLLECTION_IDS =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
117 SQL.get("users.collection.ids");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
118
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
119 public static final String SQL_USERS_DELETE_ALL_COLLECTIONS =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
120 SQL.get("users.delete.all.collections");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
121
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
122 public static final String SQL_ARTIFACTS_IN_ONLY_COLLECTION_ONLY =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
123 SQL.get("artifacts.in.one.collection.only");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
124
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
125 public static final String SQL_OUTDATE_ARTIFACTS_COLLECTION =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
126 SQL.get("outdate.artifacts.collection");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
127
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
128 public static final String SQL_OUTDATE_ARTIFACTS_USER =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
129 SQL.get("outdate.artifacts.user");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
130
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
131 public static final String SQL_DELETE_USER_COLLECTION_ITEMS =
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
132 SQL.get("delete.user.collection.items");
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
133
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
134 public static final String SQL_COLLECTIONS_NEXT_ID =
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
135 SQL.get("collections.id.nextval");
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
136
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
137 public static final String SQL_COLLECTIONS_INSERT =
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
138 SQL.get("collections.insert");
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
139
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
140 public static final String SQL_COLLECTIONS_SELECT_USER =
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
141 SQL.get("collections.select.user");
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
142
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
143 public static final String SQL_COLLECTIONS_SELECT_ALL =
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
144 SQL.get("collections.select.all");
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
145
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
146 public static final String SQL_COLLECTIONS_CREATION_TIME =
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
147 SQL.get("collection.creation.time");
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
148
175
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
149 public static final String SQL_COLLECTIONS_ID_BY_GID =
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
150 SQL.get("collection.creation.time");
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
151
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
152 public static final String SQL_DELETE_COLLECTION_ITEMS =
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
153 SQL.get("delete.collection.items");
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
154
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
155 public static final String SQL_DELETE_COLLECTION =
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
156 SQL.get("delete.collection");
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
157
176
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
158 public static final String SQL_COLLECTION_CHECK_ARTIFACT =
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
159 SQL.get("collection.check.artifact");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
160
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
161 public static final String SQL_COLLECTION_ITEMS_ID_NEXTVAL =
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
162 SQL.get("collection.check.artifact");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
163
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
164 public static final String SQL_COLLECTION_ITEMS_INSERT =
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
165 SQL.get("collection.items.insert");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
166
178
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
167 public static final String SQL_COLLECTION_ITEM_GET_ATTRIBUTE =
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
168 SQL.get("collection.item.get.attribute");
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
169
179
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
170 public static final String SQL_COLLECTION_ITEM_SET_ATTRIBUTE =
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
171 SQL.get("collection.item.set.attribute");
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
172
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
173 public static final String SQL_COLLECTIONS_TOUCH_BY_GID =
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
174 SQL.get("collections.touch.by,gid");
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
175
128
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
176 /** The singleton.*/
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
177 protected static Backend instance;
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
178
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
179 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
180 * The database cleaner. Reference is stored here because
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
181 * the cleaner is woken up if the backend finds an outdated
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
182 * artifact. This artifact should be removed as soon as
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
183 * possible.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
184 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
185 protected DatabaseCleaner cleaner;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
186
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
187 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
188 * To revive an artifact from the bytes coming from the database
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
189 * we need the artifact factory which references the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
190 * serializer which is able to do the reviving job.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
191 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
192 protected FactoryLookup factoryLookup;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
193
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
194 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
195 * Little helper interface to decouple the ArtifactDatabase
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
196 * from the Backend. A ArtifactDatabase should depend on a
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
197 * Backend but a Backend not from an ArtifactDatabase.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
198 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
199 public interface FactoryLookup {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
200
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
201 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
202 * Returns an ArtifactFactory which is bound to a given name.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
203 * @param factoryName The name of the artifact factory.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
204 * @return The ArtifactFactory bound to the factory name or
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
205 * null if not matching factory is found.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
206 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
207 ArtifactFactory getArtifactFactory(String factoryName);
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
208
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
209 } // interface FactoryLookup
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
210
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
211 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
212 * Inner class that brigdes between the persisten form of the
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
213 * artifact and the living one inside the artifact database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
214 * After the describe(), feed(), advance() and out() operations
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
215 * of the artifact it must be possible to write to modified artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
216 * back into the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
217 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
218 public final class PersistentArtifact
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
219 extends Id
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
220 {
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
221 private Artifact artifact;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
222 private ArtifactSerializer serializer;
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
223 private Long ttl;
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
224
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
225 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
226 * Cronstructor to create a persistent artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
227 * @param artifact The living artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
228 * @param serializer The serializer to store the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
229 * after the operations.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
230 * @param ttl The time to life of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
231 * @param id The database id of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
232 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
233 public PersistentArtifact(
47
4ae4dc99127d Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 46
diff changeset
234 Artifact artifact,
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
235 ArtifactSerializer serializer,
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
236 Long ttl,
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
237 int id
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
238 ) {
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
239 super(id);
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
240 this.artifact = artifact;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
241 this.serializer = serializer;
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
242 this.ttl = ttl;
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
243 }
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
244
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
245 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
246 * Returns the wrapped living artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
247 * @return the living artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
248 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
249 public Artifact getArtifact() {
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
250 return artifact;
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
251 }
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
252
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
253 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
254 * Returns the serialized which is able to write a
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
255 * modified artifact back into the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
256 * @return The serializer.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
257 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
258 public ArtifactSerializer getSerializer() {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
259 return serializer;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
260 }
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
261
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
262 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
263 * The time to life of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
264 * @return The time to live.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
265 */
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
266 public Long getTTL() {
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
267 return ttl;
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
268 }
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
269
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
270 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
271 * Stores the living artifact back into the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
272 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
273 public void store() {
38
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
274 if (logger.isDebugEnabled()) {
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
275 logger.debug("storing artifact id = " + getId());
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
276 }
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
277 Backend.this.store(this);
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
278 }
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
279
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
280 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
281 * Only touches the access time of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
282 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
283 public void touch() {
38
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
284 if (logger.isDebugEnabled()) {
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
285 logger.debug("touching artifact id = " + getId());
93edc04f3a10 Added postgresql support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 34
diff changeset
286 }
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
287 Backend.this.touch(this);
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
288 }
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
289 } // class ArtifactWithId
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
290
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
291 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
292 * Default constructor
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
293 */
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 public Backend() {
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295 }
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
297 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
298 * Constructor to create a backend with a link to the database cleaner.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
299 * @param cleaner The clean which periodically removes outdated
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
300 * artifacts from the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
301 */
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
302 public Backend(DatabaseCleaner cleaner) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
303 this.cleaner = cleaner;
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
304 }
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
305
128
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
306
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
307 /**
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
308 * Returns the singleton of this Backend.
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
309 *
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
310 * @return the backend.
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
311 */
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
312 public static synchronized Backend getInstance() {
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
313 if (instance == null) {
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
314 instance = new Backend();
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
315 }
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
316
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
317 return instance;
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
318 }
bfa65a812c7a Made the backend singleton.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 100
diff changeset
319
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
320 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
321 * Sets the factory lookup mechanism to decouple ArtifactDatabase
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
322 * and Backend.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
323 * @param factoryLookup
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
324 */
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
325 public void setFactoryLookup(FactoryLookup factoryLookup) {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
326 this.factoryLookup = factoryLookup;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
327 }
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
328
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
329 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
330 * Sets the database cleaner explicitly.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
331 * @param cleaner The database cleaner
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
332 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
333 public void setCleaner(DatabaseCleaner cleaner) {
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
334 this.cleaner = cleaner;
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
335 }
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
336
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
337 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
338 * Returns a new unique identifier to external identify
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
339 * the artifact across the system. This implementation
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
340 * uses random UUIDs v4 to achieve this target.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
341 * @return the new identifier
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
342 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
343 public String newIdentifier() {
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
344 // TODO: check database for collisions.
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
345 return StringUtils.newUUID();
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
346 }
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
347
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
348 public boolean isValidIdentifier(String identifier) {
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
349 return StringUtils.checkUUID(identifier);
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
350 }
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
351
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
352 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
353 * Stores a new artifact into the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
354 * @param artifact The artifact to be stored
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
355 * @param factory The factory which build the artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
356 * @param ttl The initial time to life of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
357 * @return A persistent wrapper around the living
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
358 * artifact to be able to write modification later.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
359 * @throws Exception Thrown if something went wrong with the
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
360 * storage process.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
361 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
362 public PersistentArtifact storeInitially(
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
363 Artifact artifact,
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
364 ArtifactFactory factory,
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
365 Long ttl
47
4ae4dc99127d Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 46
diff changeset
366 )
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
367 throws Exception
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
368 {
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
369 return new PersistentArtifact(
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
370 artifact,
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
371 factory.getSerializer(),
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
372 ttl,
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
373 insertDatabase(artifact, factory, ttl));
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
374 }
47
4ae4dc99127d Removed trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 46
diff changeset
375
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
376 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
377 * Stores an artifact into database if it does not exist there.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
378 * If it exists there it is only updated.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
379 * @param artifact The artifact to store/update.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
380 * @param factory The factory which created the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
381 * @param ttl The initial time to live of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
382 * @return A persistent version of the artifact to be able
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
383 * to store a modification later.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
384 * @throws Exception Thrown if something went wrong during
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
385 * storing/updating.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
386 */
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
387 public PersistentArtifact storeOrReplace(
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
388 Artifact artifact,
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
389 ArtifactFactory factory,
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
390 Long ttl
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
391 )
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
392 throws Exception
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
393 {
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
394 return new PersistentArtifact(
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
395 artifact,
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
396 factory.getSerializer(),
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
397 ttl,
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
398 storeOrReplaceDatabase(artifact, factory, ttl));
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
399 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
400
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
401 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
402 * Implementors of this interface are able to process the raw
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
403 * artifact data from the database for loading.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
404 */
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
405 public interface ArtifactLoader {
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
406
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
407 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
408 * Creates a custom object from the raw artifact database data.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
409 * @param factory The factory that created this artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
410 * @param ttl The current time to life of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
411 * @param bytes The raw artifact bytes from the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
412 * @param id The database id of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
413 * @return The custom object created by the implementation.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
414 */
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
415 Object load(ArtifactFactory factory, Long ttl, byte [] bytes, int id);
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
416
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
417 } // interface ArtifactLoader
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
418
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
419 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
420 * Fetches an artifact from the database identified by the
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
421 * given identifier.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
422 * @param identifer The identifier of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
423 * @return A persistent wrapper around the found artifact
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
424 * to be able to write back a modifaction later or null
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
425 * if no artifact is found for this identifier.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
426 */
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
427 public PersistentArtifact getArtifact(String identifer) {
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
428
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
429 return (PersistentArtifact)loadArtifact(
86
b2e0cb83631c Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 84
diff changeset
430 identifer,
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
431 new ArtifactLoader() {
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
432
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
433 public Object load(
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
434 ArtifactFactory factory,
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
435 Long ttl,
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
436 byte [] bytes,
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
437 int id
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
438 ) {
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
439 ArtifactSerializer serializer = factory.getSerializer();
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
440
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
441 Artifact artifact = serializer.fromBytes(bytes);
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
442
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
443 return artifact == null
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
444 ? null
84
72e2dd4feb31 Added the time to live of an artifact to the CallContext.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 80
diff changeset
445 : new PersistentArtifact(artifact, serializer, ttl, id);
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
446 }
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
447 });
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
448 }
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
449
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
450 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
451 * More general loading mechanism for artifacts. The concrete
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
452 * load processing is delegated to the given loader.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
453 * @param identifer The identifier of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
454 * @param loader The loader which processes the raw database data.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
455 * @return The object created by the loader.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
456 */
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
457 public Object loadArtifact(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
458 final String identifer,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
459 final ArtifactLoader loader
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
460 ) {
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
461 if (!isValidIdentifier(identifer)) {
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
462 return null;
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
463 }
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
464
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
465 final Object [] loaded = new Object[1];
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
466
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
467 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
468 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
469 prepareStatement(SQL_LOAD_BY_GID);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
470 stmnt.setString(1, identifer);
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
471
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
472 result = stmnt.executeQuery();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
473
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
474 if (!result.next()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
475 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
476 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
477
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
478 int id = result.getInt(1);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
479 long ttlX = result.getLong(3);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
480
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
481 Long ttl = result.wasNull() ? null : Long.valueOf(ttlX);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
482
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
483 if (ttl != null) { // real time to life
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
484 long last_access = result.getTimestamp(2).getTime();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
485 if (last_access + ttlX < System.currentTimeMillis()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
486 artifactOutdated(id);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
487 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
488 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
489 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
490
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
491 String factoryName = result.getString(4);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
492
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
493 if (factoryLookup == null) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
494 logger.error("factory lookup == null");
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
495 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
496 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
497
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
498 ArtifactFactory factory = factoryLookup
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
499 .getArtifactFactory(factoryName);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
500
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
501 if (factory == null) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
502 logger.error("factory '" + factoryName + "' not found");
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
503 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
504 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
505
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
506 byte [] bytes = result.getBytes(5);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
507
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
508 loaded[0] = loader.load(factory, ttl, bytes, id);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
509 return true;
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
510 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
511 };
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
512
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
513 return exec.runRead() ? loaded[0] : null;
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
514 }
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
515
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
516 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
517 * Called if the load mechanism found an outdated artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
518 * It wakes up the database cleaner.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
519 * @param id The id of the outdated artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
520 */
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
521 protected void artifactOutdated(int id) {
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
522 if (logger.isDebugEnabled()) {
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
523 logger.info("artifactOutdated: id = " + id);
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
524 }
30
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
525 if (cleaner != null) {
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
526 cleaner.wakeup();
88972c6daa4f Added a cleanup thread which periodically removes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 27
diff changeset
527 }
15
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
528 }
9ad6ec2d09c3 Implemented restoring artifacts from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 14
diff changeset
529
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
530 public Artifact reviveArtifact(String factoryName, byte [] bytes) {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
531 if (factoryLookup == null) {
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
532 logger.error("reviveArtifact: factory lookup == null");
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
533 return null;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
534 }
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
535 ArtifactFactory factory = factoryLookup
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
536 .getArtifactFactory(factoryName);
32
c2d53bd30ab8 Re-factored artifact API for better integration of background processing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 31
diff changeset
537
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
538 if (factory == null) {
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
539 logger.error(
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
540 "reviveArtifact: no factory '" + factoryName + "' found");
41
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
541 return null;
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
542 }
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
543
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
544 ArtifactSerializer serializer = factory.getSerializer();
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
545
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
546 return serializer.fromBytes(bytes);
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
547 }
5e4bc24ea438 Made serilization more flexible. DB update required!!!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 38
diff changeset
548
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
549 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
550 * Internal method to store/replace an artifact inside the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
551 * If an artifact with the given identifier does not exists it is
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
552 * created else only the content data is updated.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
553 * @param artifact The artifact to be store/update inside the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
554 * @param factory The factory that created the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
555 * @param ttl The initial time to life of the artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
556 * @return The database id of the stored/updated artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
557 */
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
558 protected int storeOrReplaceDatabase(
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
559 final Artifact artifact,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
560 final ArtifactFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
561 final Long ttl
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
562 ) {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
563 final String uuid = artifact.identifier();
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
564
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
565 if (!isValidIdentifier(uuid)) {
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
566 throw new RuntimeException("No valid UUID");
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
567 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
568
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
569 final int [] id = new int[1];
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
570
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
571 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
572 public boolean doIt() throws SQLException {
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
573
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
574 prepareStatement(SQL_GET_ID);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
575 stmnt.setString(1, uuid);
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
576 result = stmnt.executeQuery();
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
577
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
578 Integer ID = result.next()
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
579 ? Integer.valueOf(result.getInt(1))
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
580 : null;
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
581
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
582 reset();
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
583
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
584 if (ID != null) { // already in database
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
585 prepareStatement(SQL_REPLACE);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
586
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
587 if (ttl == null) {
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
588 stmnt.setNull(1, Types.BIGINT);
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
589 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
590 else {
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
591 stmnt.setLong(1, ttl.longValue());
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
592 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
593
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
594 stmnt.setString(2, factory.getName());
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
595 stmnt.setBytes(
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
596 3,
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
597 factory.getSerializer().toBytes(artifact));
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
598 id[0] = ID.intValue();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
599 stmnt.setInt(4, id[0]);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
600 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
601 else { // new artifact
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
602 prepareStatement(SQL_NEXT_ID);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
603 result = stmnt.executeQuery();
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
604
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
605 if (!result.next()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
606 logger.error("No id generated");
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
607 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
608 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
609
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
610 reset();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
611
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
612 prepareStatement(SQL_INSERT);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
613
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
614 id[0] = result.getInt(1);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
615 stmnt.setInt(1, id[0]);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
616 stmnt.setString(2, uuid);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
617 if (ttl == null) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
618 stmnt.setNull(3, Types.BIGINT);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
619 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
620 else {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
621 stmnt.setLong(3, ttl.longValue());
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
622 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
623
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
624 stmnt.setString(4, factory.getName());
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
625
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
626 stmnt.setBytes(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
627 5,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
628 factory.getSerializer().toBytes(artifact));
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
629 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
630 stmnt.execute();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
631 conn.commit();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
632 return true;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
633 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
634 };
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
635
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
636 if (!exec.runWrite()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
637 throw new RuntimeException("failed insert artifact into database");
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
638 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
639
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
640 return id[0];
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
641 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
642
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
643 /**
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
644 * Internal method to store an artifact inside the database.
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
645 * @param artifact The artifact to be stored.
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
646 * @param factory The factory which created the artifact.
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
647 * @param ttl The initial time to live of the artifact.
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
648 * @return The database id of the stored artifact.
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
649 */
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
650 protected int insertDatabase(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
651 final Artifact artifact,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
652 final ArtifactFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
653 final Long ttl
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
654 ) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
655 final int [] id = new int[1];
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
656
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
657 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
658 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
659 prepareStatement(SQL_NEXT_ID);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
660 result = stmnt.executeQuery();
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
661
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
662 if (!result.next()) {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
663 logger.error("No id generated");
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
664 return false;
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
665 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
666
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
667 id[0] = result.getInt(1);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
668
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
669 reset();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
670 prepareStatement(SQL_INSERT);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
671
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
672 String uuid = artifact.identifier();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
673 stmnt.setInt(1, id[0]);
80
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
674 stmnt.setString(2, uuid);
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
675 if (ttl == null) {
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
676 stmnt.setNull(3, Types.BIGINT);
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
677 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
678 else {
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
679 stmnt.setLong(3, ttl.longValue());
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
680 }
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
681
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
682 stmnt.setString(4, factory.getName());
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
683
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
684 stmnt.setBytes(
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
685 5,
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
686 factory.getSerializer().toBytes(artifact));
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
687
8447467cef86 Implementation to import artifacts from incoming xml documents (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 79
diff changeset
688 stmnt.execute();
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
689
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
690 conn.commit();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
691 return true;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
692 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
693 };
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
694
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
695 if (!exec.runWrite()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
696 throw new RuntimeException("failed insert artifact into database");
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
697 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
698
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
699 return id[0];
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
700 }
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
701
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
702 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
703 * Touches the access timestamp of a given artifact to prevent
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
704 * that it will be removed from the database by the database cleaner.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
705 * @param artifact The persistent wrapper around the living artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
706 */
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
707 public void touch(final PersistentArtifact artifact) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
708 new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
709 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
710 prepareStatement(SQL_TOUCH);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
711 stmnt.setInt(1, artifact.getId());
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
712 stmnt.execute();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
713 conn.commit();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
714 return true;
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
715 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
716 }.runWrite();
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
717 }
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
718
90
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
719 /**
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
720 * Writes modification of an artifact back to the database.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
721 * @param artifact The persistent wrapper around a living
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
722 * artifact.
68285f7bc476 More javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 86
diff changeset
723 */
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
724 public void store(final PersistentArtifact artifact) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
725 new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
726 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
727 prepareStatement(SQL_UPDATE);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
728 stmnt.setInt(2, artifact.getId());
26
83a059c204f8 Connected /create with artifact db.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 24
diff changeset
729
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
730 byte [] bytes = artifact
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
731 .getSerializer()
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
732 .toBytes(artifact.getArtifact());
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
733
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
734 stmnt.setBytes(1, bytes);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
735 stmnt.execute();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
736 conn.commit();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
737 return true;
26
83a059c204f8 Connected /create with artifact db.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 24
diff changeset
738 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
739 }.runWrite();
14
0d16d1bb2df0 Initial checkin of artigact persistents back by database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 13
diff changeset
740 }
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
741
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
742 public User createUser(
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
743 final String name,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
744 final Document role,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
745 final UserFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
746 final Object context
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
747 ) {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
748 final User [] user = new User[1];
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
749
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
750 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
751 public boolean doIt() throws SQLException {
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
752
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
753 prepareStatement(SQL_USERS_NEXT_ID);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
754 result = stmnt.executeQuery();
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
755
146
967dc552455d Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 145
diff changeset
756 if (!result.next()) {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
757 return false;
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
758 }
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
759
145
c0d025df722d Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 144
diff changeset
760 int id = result.getInt(1);
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
761
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
762 reset();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
763
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
764 String identifier = newIdentifier();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
765
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
766 prepareStatement(SQL_USERS_INSERT);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
767
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
768 stmnt.setInt(1, id);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
769 stmnt.setString(2, identifier);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
770 stmnt.setString(3, name);
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
771
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
772 byte [] roleData = role == null
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
773 ? null
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
774 : XMLUtils.toByteArray(role);
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
775
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
776 if (roleData == null) {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
777 stmnt.setNull(4, Types.BIGINT);
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
778 }
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
779 else {
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
780 stmnt.setBytes(4, roleData);
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
781 }
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
782
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
783 stmnt.execute();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
784 conn.commit();
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
785
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
786 user[0] = factory.createUser(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
787 identifier, name, role, context);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
788 return true;
138
b90e831d3dfe Call database to create a new user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 133
diff changeset
789 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
790 };
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
791
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
792 return exec.runWrite() ? user[0] : null;
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
793 }
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
794
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
795 public boolean deleteUser(final String identifier) {
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
796
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
797 if (!isValidIdentifier(identifier)) {
154
1a72f08ce8d7 Propagate delete user errors correctly.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 153
diff changeset
798 return false;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
799 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
800
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
801 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
802 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
803 prepareStatement(SQL_USERS_SELECT_ID_BY_GID);
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
804
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
805 stmnt.setString(1, identifier);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
806 result = stmnt.executeQuery();
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
807
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
808 if (!result.next()) { // No such user
154
1a72f08ce8d7 Propagate delete user errors correctly.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 153
diff changeset
809 return false;
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
810 }
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
811
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
812 int id = result.getInt(1);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
813
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
814 reset();
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
815
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
816 // outdate the artifacts exclusively used by the user
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
817
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
818 prepareStatement(SQL_OUTDATE_ARTIFACTS_USER);
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
819 stmnt.setInt(1, id);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
820 stmnt.setInt(2, id);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
821 stmnt.execute();
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
822
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
823 reset();
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
824
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
825 // delete the collection items of the user
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
826
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
827 prepareStatement(SQL_DELETE_USER_COLLECTION_ITEMS);
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
828 stmnt.setInt(1, id);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
829 stmnt.execute();
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
830
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
831 reset();
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
832
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
833 // delete the collections of the user
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
834
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
835 prepareStatement(SQL_USERS_DELETE_COLLECTIONS);
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
836 stmnt.setInt(1, id);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
837 stmnt.execute();
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
838
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
839 reset();
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
840
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
841 // delete the user
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
842
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
843 prepareStatement(SQL_USERS_DELETE_ID);
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
844 stmnt.setInt(1, id);
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
845 stmnt.execute();
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
846
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
847 conn.commit();
154
1a72f08ce8d7 Propagate delete user errors correctly.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 153
diff changeset
848 return true;
144
5369582d4fbf Enable backend to delete users
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 138
diff changeset
849 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
850 };
154
1a72f08ce8d7 Propagate delete user errors correctly.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 153
diff changeset
851
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
852 return exec.runWrite();
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
853 }
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
854
157
6e6965873a48 Simplified creation of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 156
diff changeset
855 public User getUser(
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
856 final String identifier,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
857 final UserFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
858 final Object context
157
6e6965873a48 Simplified creation of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 156
diff changeset
859 ) {
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
860 if (!isValidIdentifier(identifier)) {
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
861 logger.debug("Invalid UUID: '" + identifier + "'");
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
862 return null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
863 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
864
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
865 final User [] user = new User[1];
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
866
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
867 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
868 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
869 prepareStatement(SQL_USERS_SELECT_GID);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
870 stmnt.setString(1, identifier);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
871 result = stmnt.executeQuery();
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
872 if (!result.next()) { // no such user
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
873 return false;
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
874 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
875 // omit id
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
876 String name = result.getString(2);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
877 byte [] roleData = result.getBytes(3);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
878
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
879 Document role = XMLUtils.fromByteArray(roleData);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
880
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
881 user[0] = factory.createUser(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
882 identifier, name, role, context);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
883 return true;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
884 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
885 };
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 146
diff changeset
886
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
887 return exec.runRead() ? user[0] : null;
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
888 }
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
889
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
890 public User [] getUsers(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
891 final UserFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
892 final Object context
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
893 ) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
894 final ArrayList<User> users = new ArrayList<User>();
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
895
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
896 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
897 public boolean doIt() throws SQLException {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
898 prepareStatement(SQL_USERS_SELECT_ALL);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
899 result = stmnt.executeQuery();
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
900
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
901 while (result.next()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
902 // omit id
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
903 String identifier = result.getString(2);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
904 String name = result.getString(3);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
905 byte [] roleData = result.getBytes(4);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
906
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
907 Document role = XMLUtils.fromByteArray(roleData);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
908 User user = factory.createUser(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
909 identifier, name, role, context);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
910 users.add(user);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
911 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
912 return true;
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
913 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
914 };
148
101a52d3ad08 Added code to load all users from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 147
diff changeset
915
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
916 return exec.runRead()
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
917 ? users.toArray(new User[users.size()])
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
918 : null;
133
2950c6011afa Fixed typo in keys.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
919 }
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
920
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
921 public ArtifactCollection createCollection(
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
922 final String ownerIdentifier,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
923 final String name,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
924 final ArtifactCollectionFactory factory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
925 final Document data,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
926 final Object context
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
927 ) {
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
928 if (name == null) {
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
929 logger.debug("Name is null");
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
930 return null;
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
931 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
932
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
933 if (!isValidIdentifier(ownerIdentifier)) {
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
934 logger.debug("Invalid owner id: '" + ownerIdentifier + "'");
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
935 return null;
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
936 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
937
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
938 final ArtifactCollection [] collection =
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
939 new ArtifactCollection[1];
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
940
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
941 SQLExecutor exec = new SQLExecutor() {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
942 public boolean doIt() throws SQLException {
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
943 // fetch owner id
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
944 prepareStatement(SQL_USERS_SELECT_ID_BY_GID);
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
945 stmnt.setString(1, ownerIdentifier);
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
946 result = stmnt.executeQuery();
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
947
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
948 if (!result.next()) { // no such user
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
949 return false;
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
950 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
951
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
952 int ownerId = result.getInt(1);
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
953 reset();
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
954
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
955 // fetch new collection seq number.
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
956 prepareStatement(SQL_COLLECTIONS_NEXT_ID);
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
957 result = stmnt.executeQuery();
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
958
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
959 if (!result.next()) { // no identifier generated
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
960 return false;
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
961 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
962
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
963 int id = result.getInt(1);
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
964 reset();
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
965
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
966 String identifier = newIdentifier();
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
967
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
968 prepareStatement(SQL_COLLECTIONS_INSERT);
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
969
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
970 stmnt.setInt(1, id);
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
971 stmnt.setString(2, identifier);
161
e4a1562dfc21 Bugfixed the collection creation in the Backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 159
diff changeset
972 stmnt.setString(3, name);
e4a1562dfc21 Bugfixed the collection creation in the Backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 159
diff changeset
973 stmnt.setInt(4, ownerId);
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
974
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
975 // XXX: A bit odd: we don't have a collection, yet.
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
976 Long ttl = factory.timeToLiveUntouched(null, context);
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
977
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
978 if (ttl == null) {
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
979 stmnt.setNull(5, Types.BIGINT);
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
980 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
981 else {
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
982 stmnt.setLong(5, ttl);
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
983 }
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
984
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
985 stmnt.execute();
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
986 conn.commit();
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
987
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
988 reset();
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
989
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
990 // fetch creation time from database
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
991 // done this way to use the time system
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
992 // of the database.
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
993
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
994 prepareStatement(SQL_COLLECTIONS_CREATION_TIME);
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
995 stmnt.setInt(1, id);
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
996
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
997 result = stmnt.executeQuery();
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
998
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
999 Date creationTime = null;
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1000
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1001 if (result.next()) {
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1002 Timestamp timestamp = result.getTimestamp(1);
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1003 creationTime = new Date(timestamp.getTime());
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1004 }
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1005
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1006 collection[0] = factory.createCollection(
170
ac0f8bd97277 Fix parameter propagation of creation time ond collection names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 167
diff changeset
1007 identifier, name, creationTime, data, context);
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1008
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1009 return true;
159
db0d20440b92 Added code to create collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 158
diff changeset
1010 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1011 };
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1012
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1013 return exec.runWrite() ? collection[0]: null;
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1014 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1015
164
268c2972d4a7 Implemented the interface method listCollections() in the artifact database.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 161
diff changeset
1016 public ArtifactCollection [] listCollections(
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1017 final String ownerIdentifier,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1018 final Document data,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1019 final ArtifactCollectionFactory collectionFactory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1020 final UserFactory userFactory,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1021 final Object context
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1022 ) {
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1023 if (ownerIdentifier != null
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
1024 && !isValidIdentifier(ownerIdentifier)) {
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1025 logger.debug("Invalid owner id: '" + ownerIdentifier + "'");
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1026 return null;
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1027 }
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1028
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1029 final ArrayList<ArtifactCollection> collections =
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1030 new ArrayList<ArtifactCollection>();
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1031
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1032 SQLExecutor exec = new SQLExecutor() {
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1033
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1034 public boolean doIt() throws SQLException {
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1035
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1036 if (ownerIdentifier != null) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1037 prepareStatement(SQL_COLLECTIONS_SELECT_USER);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1038 stmnt.setString(1, ownerIdentifier);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1039 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1040 else {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1041 prepareStatement(SQL_COLLECTIONS_SELECT_ALL);
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1042 }
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1043
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1044 result = stmnt.executeQuery();
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1045
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1046 while (result.next()) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1047 String collectionIdentifier = result.getString(1);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1048 String collectionName = result.getString(2);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1049 Date creationTime =
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1050 new Date(result.getTimestamp(3).getTime());
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1051 String userIdentifier = result.getString(4);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1052
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1053 ArtifactCollection collection =
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1054 collectionFactory.createCollection(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1055 collectionIdentifier,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1056 collectionName,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1057 creationTime,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1058 data,
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1059 context);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1060
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1061 if (userIdentifier != null) {
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1062 collection.setUser(new LazyBackendUser(
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1063 userIdentifier, userFactory, Backend.this, context));
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1064 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1065
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1066 collections.add(collection);
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1067 }
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1068 return true;
167
c9c27aca2f70 Added code to list collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 164
diff changeset
1069 }
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1070 };
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1071
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1072 return exec.runRead()
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1073 ? collections.toArray(new ArtifactCollection[collections.size()])
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1074 : null;
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1075 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1076
174
25d472a67a9f Reduce the code repetition and the complexity of the backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 170
diff changeset
1077
175
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1078 public boolean deleteCollection(final String collectionId) {
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
1079 if (!isValidIdentifier(collectionId)) {
175
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1080 logger.debug("Invalid collection id: '" + collectionId + "'");
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1081 return false;
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1082 }
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1083 SQLExecutor exec = new SQLExecutor() {
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1084 public boolean doIt() throws SQLException {
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1085 // fetch collection id
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1086 prepareStatement(SQL_COLLECTIONS_ID_BY_GID);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1087 stmnt.setString(1, collectionId);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1088 result = stmnt.executeQuery();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1089 if (!result.next()) {
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1090 logger.debug("No such collection: " + collectionId);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1091 return false;
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1092 }
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1093 int id = result.getInt(1);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1094 reset();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1095
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1096 // outdate artifacts that are only in this collection
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1097 prepareStatement(SQL_OUTDATE_ARTIFACTS_COLLECTION);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1098 stmnt.setInt(1, id);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1099 stmnt.setInt(2, id);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1100 stmnt.execute();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1101 reset();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1102
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1103 // delete the collection items
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1104 prepareStatement(SQL_DELETE_COLLECTION_ITEMS);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1105 stmnt.setInt(1, id);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1106 stmnt.execute();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1107 reset();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1108
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1109 // delete the collection
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1110 prepareStatement(SQL_DELETE_COLLECTION);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1111 stmnt.setInt(1, id);
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1112 stmnt.execute();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1113 conn.commit();
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1114 return true;
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1115 }
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1116 };
16e6e661e6bf Added code to delete collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 174
diff changeset
1117 return exec.runWrite();
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1118 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1119
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1120 public Document getCollectionAttribute(
178
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1121 final String collectionId,
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1122 final String artifactId
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1123 ) {
178
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1124 if (!isValidIdentifier(collectionId)) {
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1125 logger.debug("collection id is not valid: " + collectionId);
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1126 return null;
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1127 }
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1128 if (!isValidIdentifier(artifactId)) {
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1129 logger.debug("artifact id is not valid: " + artifactId);
179
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1130 return null;
178
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1131 }
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1132
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1133 final Document [] document = new Document[1];
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1134
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1135 SQLExecutor exec = new SQLExecutor() {
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1136 public boolean doIt() throws SQLException {
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1137 prepareStatement(SQL_COLLECTION_ITEM_GET_ATTRIBUTE);
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1138 stmnt.setString(1, collectionId);
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1139 stmnt.setString(2, artifactId);
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1140 result = stmnt.executeQuery();
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1141 if (!result.next()) {
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1142 logger.debug("No such collection item");
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1143 return false;
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1144 }
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1145 document[0] = XMLUtils.fromByteArray(result.getBytes(1));
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1146 return true;
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1147 }
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1148 };
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1149
535e4ea2ef9b Added code to get the attribute of a collection item
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 177
diff changeset
1150 return exec.runRead() ? document[0] : null;
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1151 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1152
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1153 public boolean setCollectionAttribute(
179
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1154 final String collectionId,
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1155 final String artifactId,
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1156 Document attribute
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1157 ) {
179
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1158 if (!isValidIdentifier(collectionId)) {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1159 logger.debug("collection id is not valid: " + collectionId);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1160 return false;
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1161 }
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1162 if (!isValidIdentifier(artifactId)) {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1163 logger.debug("artifact id is not valid: " + artifactId);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1164 return false;
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1165 }
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1166
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1167 final byte [] data = XMLUtils.toByteArray(attribute);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1168
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1169 return new SQLExecutor() {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1170 public boolean doIt() throws SQLException {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1171
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1172 // set the column in collection items
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1173 prepareStatement(SQL_COLLECTION_ITEM_SET_ATTRIBUTE);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1174 if (data == null) {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1175 stmnt.setNull(1, Types.BINARY);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1176 }
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1177 else {
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1178 stmnt.setBytes(1, data);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1179 }
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1180 stmnt.setString(2, collectionId);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1181 stmnt.setString(3, artifactId);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1182 stmnt.execute();
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1183 reset();
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1184
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1185 // touch the collection
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1186 prepareStatement(SQL_COLLECTIONS_TOUCH_BY_GID);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1187 stmnt.setString(1, collectionId);
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1188 stmnt.execute();
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1189
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1190 conn.commit();
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1191 return true;
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1192 }
644fd11ddd9f Added code to set attribute of a collection item.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 178
diff changeset
1193 }.runWrite();
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1194 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1195
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1196 public boolean addCollectionArtifact(
176
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1197 final String collectionId,
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1198 final String artifactId,
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1199 final Document attribute
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1200 ) {
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
1201 if (!isValidIdentifier(collectionId)) {
176
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1202 logger.debug("Invalid collection id: '" + collectionId + "'");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1203 return false;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1204 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1205
177
77cd37a93fca Backend: isIdentifierValid more symmetric to new newIndentifier
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 176
diff changeset
1206 if (!isValidIdentifier(artifactId)) {
176
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1207 logger.debug("Invalid artifact id: '" + artifactId + "'");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1208 return false;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1209 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1210
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1211 SQLExecutor exec = new SQLExecutor() {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1212 public boolean doIt() throws SQLException {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1213 // fetch artifact id
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1214 prepareStatement(SQL_GET_ID);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1215 stmnt.setString(1, artifactId);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1216 result = stmnt.executeQuery();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1217 if (!result.next()) {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1218 logger.debug("No such artifact: " + artifactId);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1219 return false;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1220 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1221 int aid = result.getInt(1);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1222 reset();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1223
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1224 // fetch collection id
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1225 prepareStatement(SQL_COLLECTIONS_ID_BY_GID);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1226 stmnt.setString(1, collectionId);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1227 result = stmnt.executeQuery();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1228 if (!result.next()) {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1229 logger.debug("No such collection: " + collectionId);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1230 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1231 int cid = result.getInt(1);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1232 reset();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1233
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1234 // check if artifact is already in collection
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1235 prepareStatement(SQL_COLLECTION_CHECK_ARTIFACT);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1236 stmnt.setInt(1, aid);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1237 stmnt.setInt(2, cid);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1238 result = stmnt.executeQuery();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1239 if (result.next()) {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1240 logger.debug("artifact already in collection");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1241 return false;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1242 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1243 reset();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1244
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1245 // fetch fresh id for new collection item
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1246 prepareStatement(SQL_COLLECTION_ITEMS_ID_NEXTVAL);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1247 result = stmnt.executeQuery();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1248 if (!result.next()) {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1249 logger.debug("no collection item id generated");
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1250 return false;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1251 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1252 int ci_id = result.getInt(1);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1253 reset();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1254
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1255 // insert new collection item
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1256 prepareStatement(SQL_COLLECTION_ITEMS_INSERT);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1257 stmnt.setInt(1, ci_id);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1258 stmnt.setInt(2, cid);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1259 stmnt.setInt(3, aid);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1260
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1261 byte [] data = attribute != null
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1262 ? XMLUtils.toByteArray(attribute)
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1263 : null;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1264
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1265 if (data == null) {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1266 stmnt.setNull(4, Types.BINARY);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1267 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1268 else {
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1269 stmnt.setBytes(4, data);
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1270 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1271 stmnt.execute();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1272 conn.commit();
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1273
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1274 return true;
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1275 }
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1276 };
a0eff2227588 Added code to add artifacts to collections.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 175
diff changeset
1277 return exec.runWrite();
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1278 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1279
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1280 public boolean removeCollectionArtifact(
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1281 String collectionId,
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1282 String artifactId
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1283 ) {
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1284 // TODO: Implement me!
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1285 return false;
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1286 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1287
157
6e6965873a48 Simplified creation of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 156
diff changeset
1288 public ArtifactCollection [] listCollectionArtifacts(String collectionId) {
156
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1289 // TODO: Implement me!
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1290 return null;
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1291 }
a76de72ad6d1 Added stubs for the collection handling in db backend.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 154
diff changeset
1292
13
0d6badf6af42 Added not yet working backend to artifact database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1293 }
79
f69e5b87f05f Implementation to export artifacts as xml (applied patch from issue208 by SLT).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 47
diff changeset
1294 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org