Browse code

FEATBL-742 Feat: expose uids

Thomas Fricker authored on 06/05/2019 15:02:23
Showing 155 changed files
... ...
@@ -66,7 +66,7 @@ import net.bluemind.lib.vertx.VertxPlatform;
66 66
 import net.bluemind.server.api.Server;
67 67
 import net.bluemind.tag.api.Tag;
68 68
 import net.bluemind.tag.api.TagRef;
69
-import net.bluemind.tag.api.TagsContainerType;
69
+import net.bluemind.tag.api.ITagUids;
70 70
 import net.bluemind.tag.persistance.ItemTagRef;
71 71
 import net.bluemind.tag.persistance.TagRefStore;
72 72
 import net.bluemind.tag.persistance.TagStore;
... ...
@@ -167,7 +167,7 @@ public abstract class AbstractServiceTests {
167 167
 		String containerId = "tags_" + domainUid;
168 168
 		domainTagContainer = containerHome.get(containerId);
169 169
 		if (domainTagContainer == null) {
170
-			domainTagContainer = Container.create(containerId, TagsContainerType.TYPE, "domain tags", domainUid,
170
+			domainTagContainer = Container.create(containerId, ITagUids.TYPE, "domain tags", domainUid,
171 171
 					domainUid, true);
172 172
 			domainTagContainer = containerHome.create(domainTagContainer);
173 173
 		}
... ...
@@ -178,7 +178,7 @@ public abstract class AbstractServiceTests {
178 178
 		containerId = "tags_" + userUid;
179 179
 		tagContainer = containerHome.get(containerId);
180 180
 		if (tagContainer == null) {
181
-			tagContainer = Container.create(containerId, TagsContainerType.TYPE, "test", userUid, domainUid, true);
181
+			tagContainer = Container.create(containerId, ITagUids.TYPE, "test", userUid, domainUid, true);
182 182
 			tagContainer = containerHome.create(tagContainer);
183 183
 		}
184 184
 
... ...
@@ -191,7 +191,7 @@ public abstract class AbstractServiceTests {
191 191
 
192 192
 		// create some tags
193 193
 		ContainerStoreService<Tag> storeService = new ContainerStoreService<>(dataDataSource, defaultSecurityContext,
194
-				tagContainer, TagsContainerType.TYPE, new TagStore(dataDataSource, container));
194
+				tagContainer, ITagUids.TYPE, new TagStore(dataDataSource, container));
195 195
 
196 196
 		tag1 = new Tag();
197 197
 		tag1.label = "tag1";
198 198
deleted file mode 100644
... ...
@@ -1,29 +0,0 @@
1
-/* BEGIN LICENSE
2
- * Copyright © Blue Mind SAS, 2012-2016
3
- *
4
- * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
- * solution.
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of either the GNU Affero General Public License as
9
- * published by the Free Software Foundation (version 3 of the License).
10
- *
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
- *
16
- * See LICENSE.txt
17
- * END LICENSE
18
- */
19
-package net.bluemind.calendar.api;
20
-
21
-public class CalendarViewContainerType {
22
-
23
-	public static final String TYPE = "calendarview";
24
-
25
-	public static String userCalendarView(String uid) {
26
-		return TYPE + ":" + uid;
27
-	}
28
-
29
-}
30 0
deleted file mode 100644
... ...
@@ -1,35 +0,0 @@
1
-/* BEGIN LICENSE
2
-  * Copyright © Blue Mind SAS, 2012-2016
3
-  *
4
-  * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
-  * solution.
6
-  *
7
-  * This program is free software; you can redistribute it and/or modify
8
-  * it under the terms of either the GNU Affero General Public License as
9
-  * published by the Free Software Foundation (version 3 of the License).
10
-  *
11
-  *
12
-  * This program is distributed in the hope that it will be useful,
13
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
-  *
16
-  * See LICENSE.txt
17
-  * END LICENSE
18
-  */
19
-package net.bluemind.calendar.api;
20
-
21
-public class FreebusyContainerType {
22
-
23
-	public static final String TYPE = "freebusy";
24
-
25
-	public static final int SIZE_OF_PREFFIX = (TYPE + ':').length();
26
-
27
-	public static String getFreebusyContainerUid(String uid) {
28
-		return TYPE + ":" + uid;
29
-	}
30
-
31
-	public static String extractUserUid(final String freebusyContainerUid) {
32
-		return freebusyContainerUid.substring(SIZE_OF_PREFFIX);
33
-	}
34
-
35
-}
36 0
new file mode 100644
... ...
@@ -0,0 +1,97 @@
1
+/* BEGIN LICENSE
2
+ * Copyright © Blue Mind SAS, 2012-2016
3
+ *
4
+ * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
+ * solution.
6
+ *
7
+ * This program is free software; you can redistribute it and/or modify
8
+ * it under the terms of either the GNU Affero General Public License as
9
+ * published by the Free Software Foundation (version 3 of the License).
10
+ *
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ *
16
+ * See LICENSE.txt
17
+ * END LICENSE
18
+ */
19
+package net.bluemind.calendar.api;
20
+
21
+import javax.ws.rs.GET;
22
+import javax.ws.rs.Path;
23
+import javax.ws.rs.PathParam;
24
+
25
+import net.bluemind.core.api.BMApi;
26
+
27
+/**
28
+ * To unify the management of changelogs, ACLs, client synchronization,
29
+ * permissions and sharing, Bluemind stores all elements in a generic structure
30
+ * called a container. All containers are identified by a unique ID. Some
31
+ * containers are named (UID) in a specific manner to express a certain meaning.
32
+ * 
33
+ * 
34
+ * Returns specific calendar container UIDs.
35
+ */
36
+@BMApi(version = "3")
37
+@Path("/calendar/uids")
38
+public interface ICalendarUids {
39
+
40
+	public static final String TYPE = "calendar";
41
+
42
+	public enum UserCalendarType {
43
+		Default, UserCreated
44
+	}
45
+
46
+	/**
47
+	 * Returns the UID of user-created calendars
48
+	 * 
49
+	 * @param uniqueUid
50
+	 *                      unique calendar UID
51
+	 * @return calendar UID
52
+	 */
53
+	@GET
54
+	@Path("{uid}/_other_calendar")
55
+	public default String getUserCreatedCalendar(@PathParam("uid") String uniqueUid) {
56
+		return ICalendarUids.userCreatedCalendar(uniqueUid);
57
+	}
58
+
59
+	/**
60
+	 * Returns the default user calendar UID
61
+	 * 
62
+	 * @param uid
63
+	 *                the {@link net.bluemind.user.api.User} UID
64
+	 * @return default user calendar UID
65
+	 */
66
+	@GET
67
+	@Path("{uid}/_default_calendar")
68
+	public static String getDefaultUserCalendar(@PathParam("uid") String userUid) {
69
+		return ICalendarUids.defaultUserCalendar(userUid);
70
+	}
71
+
72
+	/**
73
+	 * Returns the ressource calendar UIDs
74
+	 * 
75
+	 * @param uid
76
+	 *                unique calendar UID
77
+	 * @return ressource calendar UID
78
+	 */
79
+	@GET
80
+	@Path("{uid}/_resource_calendar")
81
+	public static String getResourceCalendar(@PathParam("uid") String uid) {
82
+		return ICalendarUids.resourceCalendar(uid);
83
+	}
84
+
85
+	public static String userCreatedCalendar(String randomSeed) {
86
+		return TYPE + ":" + UserCalendarType.UserCreated + ":" + randomSeed;
87
+	}
88
+
89
+	public static String defaultUserCalendar(String uid) {
90
+		return TYPE + ":" + UserCalendarType.Default + ":" + uid;
91
+	}
92
+
93
+	public static String resourceCalendar(String uid) {
94
+		return TYPE + ":" + uid;
95
+	}
96
+
97
+}
... ...
@@ -36,7 +36,7 @@ import net.bluemind.core.container.model.ItemValue;
36 36
 
37 37
 /**
38 38
  * @deprecated use {@link IUserCalendarViews} containerUid can be constructed
39
- *             with ({@link CalendarViewContainerType#userCalendarView}
39
+ *             with ({@link ICalendarViewUids#userCalendarView}
40 40
  *
41 41
  */
42 42
 @BMApi(version = "3")
43 43
new file mode 100644
... ...
@@ -0,0 +1,59 @@
1
+/* BEGIN LICENSE
2
+ * Copyright © Blue Mind SAS, 2012-2016
3
+ *
4
+ * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
+ * solution.
6
+ *
7
+ * This program is free software; you can redistribute it and/or modify
8
+ * it under the terms of either the GNU Affero General Public License as
9
+ * published by the Free Software Foundation (version 3 of the License).
10
+ *
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ *
16
+ * See LICENSE.txt
17
+ * END LICENSE
18
+ */
19
+package net.bluemind.calendar.api;
20
+
21
+import javax.ws.rs.GET;
22
+import javax.ws.rs.Path;
23
+import javax.ws.rs.PathParam;
24
+
25
+import net.bluemind.core.api.BMApi;
26
+
27
+/**
28
+ * To unify the management of changelogs, ACLs, client synchronization,
29
+ * permissions and sharing, Bluemind stores all elements in a generic structure
30
+ * called a container. All containers are identified by a unique ID. Some
31
+ * containers are named (UID) in a specific manner to express a certain meaning.
32
+ * 
33
+ * 
34
+ * Returns specific calendarview container UIDs.
35
+ */
36
+@BMApi(version = "3")
37
+@Path("/calendarview/uids")
38
+public interface ICalendarViewUids {
39
+
40
+	public static final String TYPE = "calendarview";
41
+
42
+	/**
43
+	 * Returns the default user calendarview UID
44
+	 * 
45
+	 * @param uid
46
+	 *                the {@link net.bluemind.user.api.User} UID
47
+	 * @return default user calendarview UID
48
+	 */
49
+	@GET
50
+	@Path("{uid}/_default_calendarview")
51
+	public default String getUserCalendarView(@PathParam("uid") String userUid) {
52
+		return ICalendarViewUids.userCalendarView(userUid);
53
+	}
54
+
55
+	public static String userCalendarView(String uid) {
56
+		return TYPE + ":" + uid;
57
+	}
58
+
59
+}
0 60
new file mode 100644
... ...
@@ -0,0 +1,65 @@
1
+/* BEGIN LICENSE
2
+  * Copyright © Blue Mind SAS, 2012-2016
3
+  *
4
+  * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
+  * solution.
6
+  *
7
+  * This program is free software; you can redistribute it and/or modify
8
+  * it under the terms of either the GNU Affero General Public License as
9
+  * published by the Free Software Foundation (version 3 of the License).
10
+  *
11
+  *
12
+  * This program is distributed in the hope that it will be useful,
13
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+  *
16
+  * See LICENSE.txt
17
+  * END LICENSE
18
+  */
19
+package net.bluemind.calendar.api;
20
+
21
+import javax.ws.rs.GET;
22
+import javax.ws.rs.Path;
23
+import javax.ws.rs.PathParam;
24
+
25
+import net.bluemind.core.api.BMApi;
26
+
27
+/**
28
+ * To unify the management of changelogs, ACLs, client synchronization,
29
+ * permissions and sharing, Bluemind stores all elements in a generic structure
30
+ * called a container. All containers are identified by a unique ID. Some
31
+ * containers are named (UID) in a specific manner to express a certain meaning.
32
+ * 
33
+ * 
34
+ * Returns specific freebusy container UIDs.
35
+ */
36
+@BMApi(version = "3")
37
+@Path("/freebusy/uids")
38
+public interface IFreebusyUids {
39
+
40
+	public static final String TYPE = "freebusy";
41
+
42
+	public static final int SIZE_OF_PREFFIX = (TYPE + ':').length();
43
+
44
+	/**
45
+	 * Returns the default user freebusy UID
46
+	 * 
47
+	 * @param userUid
48
+	 *                    the {@link net.bluemind.user.api.User} UID
49
+	 * @return default user freebusy UID
50
+	 */
51
+	@GET
52
+	@Path("{uid}/_default_freebusy")
53
+	public static String freebusyContainerUid(@PathParam("uid") String userUid) {
54
+		return getFreebusyContainerUid(userUid);
55
+	}
56
+
57
+	public static String getFreebusyContainerUid(String userUid) {
58
+		return TYPE + ":" + userUid;
59
+	}
60
+
61
+	public static String extractUserUid(final String freebusyContainerUid) {
62
+		return freebusyContainerUid.substring(SIZE_OF_PREFFIX);
63
+	}
64
+
65
+}
... ...
@@ -49,8 +49,8 @@ import net.bluemind.addressbook.domainbook.DomainAddressBook;
49 49
 import net.bluemind.addressbook.persistance.VCardIndexStore;
50 50
 import net.bluemind.addressbook.persistance.VCardStore;
51 51
 import net.bluemind.calendar.api.CalendarContainerType;
52
-import net.bluemind.calendar.api.FreebusyContainerType;
53 52
 import net.bluemind.calendar.api.ICalendar;
53
+import net.bluemind.calendar.api.IFreebusyUids;
54 54
 import net.bluemind.calendar.api.VEvent;
55 55
 import net.bluemind.calendar.api.VEventOccurrence;
56 56
 import net.bluemind.calendar.api.VEventSeries;
... ...
@@ -91,9 +91,9 @@ import net.bluemind.mailbox.api.Mailbox.Routing;
91 91
 import net.bluemind.mailbox.api.Mailbox.Type;
92 92
 import net.bluemind.mailbox.service.internal.MailboxStoreService;
93 93
 import net.bluemind.server.api.Server;
94
+import net.bluemind.tag.api.ITagUids;
94 95
 import net.bluemind.tag.api.Tag;
95 96
 import net.bluemind.tag.api.TagRef;
96
-import net.bluemind.tag.api.TagsContainerType;
97 97
 import net.bluemind.tag.persistance.TagStore;
98 98
 import net.bluemind.tests.defaultdata.PopulateHelper;
99 99
 import net.bluemind.user.api.IUserSubscription;
... ...
@@ -211,8 +211,8 @@ public abstract class AbstractCalendarTests {
211 211
 				SecurityContext.SYSTEM);
212 212
 
213 213
 		ContainerStoreService<VCard> vcardStore = new ContainerStoreService<VCard>(
214
-				JdbcTestHelper.getInstance().getDataSource(), SecurityContext.SYSTEM, usersBook,
215
-				IAddressBookUids.TYPE, new VCardStore(JdbcTestHelper.getInstance().getDataSource(), usersBook));
214
+				JdbcTestHelper.getInstance().getDataSource(), SecurityContext.SYSTEM, usersBook, IAddressBookUids.TYPE,
215
+				new VCardStore(JdbcTestHelper.getInstance().getDataSource(), usersBook));
216 216
 
217 217
 		// test user
218 218
 		testUser = defaultUser("testUser" + System.nanoTime(), "Doe", "John");
... ...
@@ -234,14 +234,14 @@ public abstract class AbstractCalendarTests {
234 234
 		userCalendarViewContainer = createTestContainer(userSecurityContext, "calendarview", "views",
235 235
 				"calendarview:" + testUser.uid, testUser.uid);
236 236
 
237
-		userFreebusyContainer = createTestContainer(userSecurityContext, FreebusyContainerType.TYPE, "John Doe",
238
-				FreebusyContainerType.getFreebusyContainerUid(testUser.uid), testUser.uid);
237
+		userFreebusyContainer = createTestContainer(userSecurityContext, IFreebusyUids.TYPE, "John Doe",
238
+				IFreebusyUids.getFreebusyContainerUid(testUser.uid), testUser.uid);
239 239
 
240
-		userTagContainer = createTestContainer(userSecurityContext, TagsContainerType.TYPE, "tags",
241
-				TagsContainerType.TYPE + "_" + testUser.uid, testUser.uid);
240
+		userTagContainer = createTestContainer(userSecurityContext, ITagUids.TYPE, "tags",
241
+				ITagUids.TYPE + "_" + testUser.uid, testUser.uid);
242 242
 
243
-		Container contactsContainer = createTestContainer(userSecurityContext, IAddressBookUids.TYPE,
244
-				"My Contacts", "book:Contacts_" + testUser.uid, testUser.uid);
243
+		Container contactsContainer = createTestContainer(userSecurityContext, IAddressBookUids.TYPE, "My Contacts",
244
+				"book:Contacts_" + testUser.uid, testUser.uid);
245 245
 
246 246
 		Container collectedContactsContainer = createTestContainer(userSecurityContext, IAddressBookUids.TYPE,
247 247
 				"Collected contacts yay", "book:CollectedContacts_" + testUser.uid, testUser.uid);
... ...
@@ -255,8 +255,8 @@ public abstract class AbstractCalendarTests {
255 255
 		Sessions.get().put(attendee1SecurityContext.getSessionId(), attendee1SecurityContext);
256 256
 		attendee1CalendarContainer = createTestContainer(attendee1SecurityContext, CalendarContainerType.TYPE, "test",
257 257
 				CalendarContainerType.TYPE + ":Default:" + attendee1.uid, attendee1.uid);
258
-		attendee1TagContainer = createTestContainer(attendee1SecurityContext, TagsContainerType.TYPE, "tags",
259
-				TagsContainerType.TYPE + "_" + attendee1.uid, attendee1.uid);
258
+		attendee1TagContainer = createTestContainer(attendee1SecurityContext, ITagUids.TYPE, "tags",
259
+				ITagUids.TYPE + "_" + attendee1.uid, attendee1.uid);
260 260
 
261 261
 		// attendee 2
262 262
 		attendee2 = defaultUser("test" + UUID.randomUUID().toString(), "attendee2", "attendee2");
... ...
@@ -267,8 +267,8 @@ public abstract class AbstractCalendarTests {
267 267
 		Sessions.get().put(attendee2SecurityContext.getSessionId(), attendee2SecurityContext);
268 268
 		attendee2CalendarContainer = createTestContainer(attendee2SecurityContext, CalendarContainerType.TYPE, "test",
269 269
 				CalendarContainerType.TYPE + ":Default:" + attendee2.uid, attendee2.uid);
270
-		attendee2TagContainer = createTestContainer(attendee2SecurityContext, TagsContainerType.TYPE, "tags",
271
-				TagsContainerType.TYPE + "_" + attendee2.uid, attendee2.uid);
270
+		attendee2TagContainer = createTestContainer(attendee2SecurityContext, ITagUids.TYPE, "tags",
271
+				ITagUids.TYPE + "_" + attendee2.uid, attendee2.uid);
272 272
 
273 273
 		// forbidden attendee
274 274
 		forbidden = defaultUser("test" + UUID.randomUUID().toString(), "forbidden", "forbidden");
... ...
@@ -367,7 +367,7 @@ public abstract class AbstractCalendarTests {
367 367
 
368 368
 		// Tags
369 369
 		ContainerStoreService<Tag> storeService = new ContainerStoreService<>(dataDataSource, userSecurityContext,
370
-				userTagContainer, TagsContainerType.TYPE, new TagStore(dataDataSource, userTagContainer));
370
+				userTagContainer, ITagUids.TYPE, new TagStore(dataDataSource, userTagContainer));
371 371
 
372 372
 		tag1 = new Tag();
373 373
 		tag1.label = "tag1";
... ...
@@ -35,7 +35,7 @@ import org.vertx.java.core.Handler;
35 35
 
36 36
 import com.google.common.util.concurrent.SettableFuture;
37 37
 
38
-import net.bluemind.calendar.api.FreebusyContainerType;
38
+import net.bluemind.calendar.api.IFreebusyUids;
39 39
 import net.bluemind.calendar.api.IFreebusyMgmt;
40 40
 import net.bluemind.core.api.fault.ServerFault;
41 41
 import net.bluemind.core.container.model.Container;
... ...
@@ -86,7 +86,7 @@ public class FreebusyMgmtTests {
86 86
 
87 87
 		AclStore aclStore = new AclStore(JdbcTestHelper.getInstance().getDataSource());
88 88
 
89
-		container = Container.create(UUID.randomUUID().toString(), FreebusyContainerType.TYPE, "fb container",
89
+		container = Container.create(UUID.randomUUID().toString(), IFreebusyUids.TYPE, "fb container",
90 90
 				defaultSecurityContext.getSubject(), "bm.lan", true);
91 91
 		container = containerStore.create(container);
92 92
 		assertNotNull(container);
... ...
@@ -28,7 +28,7 @@ import org.junit.After;
28 28
 import org.junit.Before;
29 29
 import org.junit.Test;
30 30
 
31
-import net.bluemind.calendar.api.FreebusyContainerType;
31
+import net.bluemind.calendar.api.IFreebusyUids;
32 32
 import net.bluemind.calendar.persistance.FreebusyStore;
33 33
 import net.bluemind.calendar.service.internal.repair.FreebusyRepairSupport;
34 34
 import net.bluemind.core.api.report.DiagnosticReport;
... ...
@@ -57,7 +57,7 @@ public class FreebusyRepairTests {
57 57
 
58 58
 		cs = new ContainerStore(null, JdbcTestHelper.getInstance().getDataSource(), securityContext);
59 59
 
60
-		container = Container.create(UUID.randomUUID().toString(), FreebusyContainerType.TYPE, "fb container",
60
+		container = Container.create(UUID.randomUUID().toString(), IFreebusyUids.TYPE, "fb container",
61 61
 				securityContext.getSubject(), "bm.lan", true);
62 62
 		container = cs.create(container);
63 63
 
... ...
@@ -35,7 +35,7 @@ import org.junit.Test;
35 35
 import net.bluemind.calendar.api.CalendarDescriptor;
36 36
 import net.bluemind.calendar.api.CalendarSettingsData;
37 37
 import net.bluemind.calendar.api.CalendarSettingsData.Day;
38
-import net.bluemind.calendar.api.FreebusyContainerType;
38
+import net.bluemind.calendar.api.IFreebusyUids;
39 39
 import net.bluemind.calendar.api.ICalendarSettings;
40 40
 import net.bluemind.calendar.api.ICalendarsMgmt;
41 41
 import net.bluemind.calendar.api.IFreebusyMgmt;
... ...
@@ -263,7 +263,7 @@ public class VFreebusyServiceTests extends AbstractCalendarTests {
263 263
 		assertTrue(vfreebusy.contains("FBTYPE=BUSY-UNAVAILABLE:"));
264 264
 
265 265
 		IFreebusyMgmt fbmgmt = ServerSideServiceProvider.getProvider(SecurityContext.SYSTEM)
266
-				.instance(IFreebusyMgmt.class, FreebusyContainerType.getFreebusyContainerUid(testUser.uid));
266
+				.instance(IFreebusyMgmt.class, IFreebusyUids.getFreebusyContainerUid(testUser.uid));
267 267
 		fbmgmt.add(calUid);
268 268
 
269 269
 		// unknown calendar
... ...
@@ -318,8 +318,8 @@ public class VFreebusyServiceTests extends AbstractCalendarTests {
318 318
 
319 319
 	@Test
320 320
 	public void testDeclinedEvent() throws Exception {
321
-		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, FreebusyContainerType.TYPE,
322
-				"Attendee 1", FreebusyContainerType.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
321
+		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, IFreebusyUids.TYPE,
322
+				"Attendee 1", IFreebusyUids.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
323 323
 
324 324
 		VEventSeries vevent = defaultVEvent();
325 325
 		vevent.main.categories.clear();
... ...
@@ -357,8 +357,8 @@ public class VFreebusyServiceTests extends AbstractCalendarTests {
357 357
 
358 358
 	@Test
359 359
 	public void testTentativeEvent() throws Exception {
360
-		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, FreebusyContainerType.TYPE,
361
-				"Attendee 1", FreebusyContainerType.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
360
+		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, IFreebusyUids.TYPE,
361
+				"Attendee 1", IFreebusyUids.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
362 362
 
363 363
 		VEventSeries vevent = defaultVEvent();
364 364
 		vevent.main.categories.clear();
... ...
@@ -397,8 +397,8 @@ public class VFreebusyServiceTests extends AbstractCalendarTests {
397 397
 
398 398
 	@Test
399 399
 	public void testNeedsActionEvent() throws Exception {
400
-		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, FreebusyContainerType.TYPE,
401
-				"Attendee 1", FreebusyContainerType.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
400
+		Container attendee1FreebusyContainer = createTestContainer(attendee1SecurityContext, IFreebusyUids.TYPE,
401
+				"Attendee 1", IFreebusyUids.getFreebusyContainerUid(attendee1.uid), attendee1.uid);
402 402
 
403 403
 		VEventSeries vevent = defaultVEvent();
404 404
 		vevent.main.categories.clear();
... ...
@@ -7,6 +7,18 @@
7 7
             api="net.bluemind.calendar.api.ICalendar">
8 8
       </endpoint>
9 9
       <endpoint
10
+            api="net.bluemind.calendar.api.ICalendarUids" 
11
+            inline="true">
12
+      </endpoint>
13
+      <endpoint
14
+            api="net.bluemind.calendar.api.ICalendarViewUids" 
15
+            inline="true">
16
+      </endpoint>
17
+      <endpoint
18
+            api="net.bluemind.calendar.api.IFreebusyUids" 
19
+            inline="true">
20
+      </endpoint>
21
+      <endpoint
10 22
             api="net.bluemind.calendar.api.IVFreebusy">
11 23
       </endpoint>
12 24
       <endpoint
... ...
@@ -20,7 +20,7 @@ package net.bluemind.calendar.service;
20 20
 
21 21
 import java.sql.SQLException;
22 22
 
23
-import net.bluemind.calendar.api.FreebusyContainerType;
23
+import net.bluemind.calendar.api.IFreebusyUids;
24 24
 import net.bluemind.calendar.api.IFreebusyMgmt;
25 25
 import net.bluemind.calendar.service.internal.FreebusyMgmtService;
26 26
 import net.bluemind.core.api.fault.ServerFault;
... ...
@@ -56,7 +56,7 @@ public class FreebusyMgmtFactory implements ServerSideServiceProvider.IServerSid
56 56
 			throw new ServerFault("container " + containerId + " not found");
57 57
 		}
58 58
 
59
-		if (!FreebusyContainerType.TYPE.equals(container.type)) {
59
+		if (!IFreebusyUids.TYPE.equals(container.type)) {
60 60
 			throw new ServerFault("container " + containerId + " is not a freebusy container");
61 61
 		}
62 62
 
... ...
@@ -22,7 +22,7 @@ import java.sql.SQLException;
22 22
 
23 23
 import javax.sql.DataSource;
24 24
 
25
-import net.bluemind.calendar.api.CalendarViewContainerType;
25
+import net.bluemind.calendar.api.ICalendarViewUids;
26 26
 import net.bluemind.calendar.api.IUserCalendarViews;
27 27
 import net.bluemind.calendar.service.internal.CalendarViewService;
28 28
 import net.bluemind.core.api.fault.ErrorCode;
... ...
@@ -48,7 +48,7 @@ public class UserCalendarViewsServiceFactory
48 48
 		}
49 49
 		// String domainUid = params[0];
50 50
 		String userUid = params[1];
51
-		return getService(context, CalendarViewContainerType.userCalendarView(userUid));
51
+		return getService(context, ICalendarViewUids.userCalendarView(userUid));
52 52
 	}
53 53
 
54 54
 	private IUserCalendarViews getService(BmContext context, String containerId) {
... ...
@@ -20,7 +20,7 @@ package net.bluemind.calendar.service;
20 20
 
21 21
 import java.sql.SQLException;
22 22
 
23
-import net.bluemind.calendar.api.FreebusyContainerType;
23
+import net.bluemind.calendar.api.IFreebusyUids;
24 24
 import net.bluemind.calendar.api.IVFreebusy;
25 25
 import net.bluemind.calendar.service.internal.VFreebusyService;
26 26
 import net.bluemind.core.api.fault.ServerFault;
... ...
@@ -56,7 +56,7 @@ public class VFreebusyServiceFactory implements ServerSideServiceProvider.IServe
56 56
 			throw new ServerFault("container " + containerId + " not found");
57 57
 		}
58 58
 
59
-		if (!FreebusyContainerType.TYPE.equals(container.type)) {
59
+		if (!IFreebusyUids.TYPE.equals(container.type)) {
60 60
 			throw new ServerFault("container " + containerId + " is not a freebusy container");
61 61
 		}
62 62
 
... ...
@@ -20,7 +20,7 @@ package net.bluemind.calendar.service.internal;
20 20
 
21 21
 import org.joda.time.DateTime;
22 22
 
23
-import net.bluemind.calendar.api.FreebusyContainerType;
23
+import net.bluemind.calendar.api.IFreebusyUids;
24 24
 import net.bluemind.calendar.api.IPublicFreebusy;
25 25
 import net.bluemind.calendar.api.IVFreebusy;
26 26
 import net.bluemind.calendar.api.VFreebusy;
... ...
@@ -92,7 +92,7 @@ public class PublicFreebusyService implements IPublicFreebusy {
92 92
 		}
93 93
 
94 94
 		IVFreebusy freebusy = callerContext.provider().instance(IVFreebusy.class,
95
-				FreebusyContainerType.getFreebusyContainerUid(dirEntry.uid));
95
+				IFreebusyUids.getFreebusyContainerUid(dirEntry.uid));
96 96
 
97 97
 		return freebusy.get(query);
98 98
 	}
... ...
@@ -112,7 +112,7 @@ public class PublicFreebusyService implements IPublicFreebusy {
112 112
 		}
113 113
 
114 114
 		IVFreebusy freebusy = callerContext.provider().instance(IVFreebusy.class,
115
-				FreebusyContainerType.getFreebusyContainerUid(dirEntry.uid));
115
+				IFreebusyUids.getFreebusyContainerUid(dirEntry.uid));
116 116
 
117 117
 		return freebusy.getAsString(query);
118 118
 	}
... ...
@@ -28,8 +28,8 @@ import org.slf4j.LoggerFactory;
28 28
 
29 29
 import net.bluemind.calendar.api.CalendarContainerType;
30 30
 import net.bluemind.calendar.api.CalendarContainerType.UserCalendarType;
31
-import net.bluemind.calendar.api.CalendarViewContainerType;
32 31
 import net.bluemind.calendar.api.ICalendar;
32
+import net.bluemind.calendar.api.ICalendarViewUids;
33 33
 import net.bluemind.core.api.fault.ServerFault;
34 34
 import net.bluemind.core.container.api.ContainerQuery;
35 35
 import net.bluemind.core.container.api.ContainerSubscription;
... ...
@@ -227,7 +227,7 @@ public class UserCalendarService {
227 227
 	}
228 228
 
229 229
 	public static String getDefaultCalendarViewContainerUid(String uid) {
230
-		return CalendarViewContainerType.userCalendarView(uid);
230
+		return ICalendarViewUids.userCalendarView(uid);
231 231
 	}
232 232
 
233 233
 	private String getUserDisplayName(ItemValue<User> userItem) {
... ...
@@ -37,8 +37,8 @@ import org.slf4j.Logger;
37 37
 import org.slf4j.LoggerFactory;
38 38
 
39 39
 import net.bluemind.calendar.api.CalendarContainerType;
40
-import net.bluemind.calendar.api.FreebusyContainerType;
41 40
 import net.bluemind.calendar.api.ICalendar;
41
+import net.bluemind.calendar.api.IFreebusyUids;
42 42
 import net.bluemind.calendar.api.IVFreebusy;
43 43
 import net.bluemind.calendar.api.VEvent;
44 44
 import net.bluemind.calendar.api.VEvent.Transparency;
... ...
@@ -83,7 +83,7 @@ public class VFreebusyService implements IVFreebusy {
83 83
 		this.container = container;
84 84
 		rbacManager = RBACManager.forContext(context).forContainer(container);
85 85
 		final String defaultCalendarContainerUid = CalendarContainerType
86
-				.defaultUserCalendar(FreebusyContainerType.extractUserUid(container.uid));
86
+				.defaultUserCalendar(IFreebusyUids.extractUserUid(container.uid));
87 87
 		try {
88 88
 			defaultCalendarRbacManager = RBACManager.forContext(context).forContainer(defaultCalendarContainerUid);
89 89
 		} catch (ServerFault e) {
... ...
@@ -26,8 +26,8 @@ import org.slf4j.LoggerFactory;
26 26
 import net.bluemind.calendar.api.CalendarContainerType;
27 27
 import net.bluemind.calendar.api.CalendarView;
28 28
 import net.bluemind.calendar.api.CalendarView.CalendarViewType;
29
-import net.bluemind.calendar.api.CalendarViewContainerType;
30
-import net.bluemind.calendar.api.FreebusyContainerType;
29
+import net.bluemind.calendar.api.ICalendarViewUids;
30
+import net.bluemind.calendar.api.IFreebusyUids;
31 31
 import net.bluemind.calendar.api.ICalendarView;
32 32
 import net.bluemind.calendar.api.IFreebusyMgmt;
33 33
 import net.bluemind.calendar.api.internal.IInCoreCalendarView;
... ...
@@ -166,14 +166,14 @@ public class UserCalendarHook extends DefaultUserHook {
166 166
 	 * @return
167 167
 	 */
168 168
 	private static String getViewContainerUid(String uid) {
169
-		return CalendarViewContainerType.userCalendarView(uid);
169
+		return ICalendarViewUids.userCalendarView(uid);
170 170
 	}
171 171
 
172 172
 	private void createFreebusyContainer(String domainUid, ItemValue<User> user) {
173 173
 		ServerSideServiceProvider serviceProvider = ServerSideServiceProvider.getProvider(SecurityContext.SYSTEM);
174
-		String containerUid = FreebusyContainerType.getFreebusyContainerUid(user.uid);
174
+		String containerUid = IFreebusyUids.getFreebusyContainerUid(user.uid);
175 175
 		ContainerDescriptor containerDescriptor = ContainerDescriptor.create(containerUid, "freebusy container",
176
-				user.uid, FreebusyContainerType.TYPE, domainUid, true);
176
+				user.uid, IFreebusyUids.TYPE, domainUid, true);
177 177
 		try {
178 178
 			serviceProvider.instance(IContainers.class).create(containerUid, containerDescriptor);
179 179
 			serviceProvider.instance(IContainerManagement.class, containerUid).setAccessControlList(Arrays.asList(
... ...
@@ -189,9 +189,9 @@ public class UserCalendarHook extends DefaultUserHook {
189 189
 
190 190
 		try {
191 191
 			IFreebusyMgmt fb = serviceProvider.instance(IFreebusyMgmt.class,
192
-					FreebusyContainerType.getFreebusyContainerUid(user.uid));
192
+					IFreebusyUids.getFreebusyContainerUid(user.uid));
193 193
 			fb.get().forEach(f -> fb.remove(f));
194
-			serviceProvider.instance(IContainers.class).delete(FreebusyContainerType.getFreebusyContainerUid(user.uid));
194
+			serviceProvider.instance(IContainers.class).delete(IFreebusyUids.getFreebusyContainerUid(user.uid));
195 195
 		} catch (ServerFault e) {
196 196
 			logger.error(e.getMessage(), e);
197 197
 		}
... ...
@@ -24,8 +24,8 @@ import org.slf4j.Logger;
24 24
 import org.slf4j.LoggerFactory;
25 25
 
26 26
 import net.bluemind.calendar.api.CalendarContainerType;
27
-import net.bluemind.calendar.api.CalendarViewContainerType;
28
-import net.bluemind.calendar.api.FreebusyContainerType;
27
+import net.bluemind.calendar.api.ICalendarViewUids;
28
+import net.bluemind.calendar.api.IFreebusyUids;
29 29
 import net.bluemind.calendar.service.UserCalendarServiceFactory;
30 30
 import net.bluemind.core.api.report.DiagnosticReport;
31 31
 import net.bluemind.core.container.api.IContainerManagement;
... ...
@@ -103,9 +103,9 @@ public class UserCalendarRepair implements ContainerRepairOp {
103 103
 			logger.info("Repairing freebusy container of user {}", user.uid);
104 104
 			IContainers service = ServerSideServiceProvider.getProvider(SecurityContext.SYSTEM)
105 105
 					.instance(IContainers.class);
106
-			String containerUid = FreebusyContainerType.getFreebusyContainerUid(user.uid);
106
+			String containerUid = IFreebusyUids.getFreebusyContainerUid(user.uid);
107 107
 			ContainerDescriptor containerDescriptor = ContainerDescriptor.create(containerUid, "freebusy container",
108
-					user.uid, FreebusyContainerType.TYPE, domainUid, true);
108
+					user.uid, IFreebusyUids.TYPE, domainUid, true);
109 109
 
110 110
 			service.create(containerUid, containerDescriptor);
111 111
 			ServerSideServiceProvider.getProvider(SecurityContext.SYSTEM)
... ...
@@ -134,12 +134,12 @@ public class UserCalendarRepair implements ContainerRepairOp {
134 134
 	private void verifyFreebusyViewContainer(String domainUid, ItemValue<User> user, DiagnosticReport report,
135 135
 			IServerTaskMonitor monitor, Runnable maintenance) {
136 136
 
137
-		String containerUid = FreebusyContainerType.getFreebusyContainerUid(user.uid);
137
+		String containerUid = IFreebusyUids.getFreebusyContainerUid(user.uid);
138 138
 		verifyContainer(domainUid, report, monitor, maintenance, containerUid);
139 139
 	}
140 140
 
141 141
 	private String getViewContainerUid(String uid) {
142
-		return CalendarViewContainerType.userCalendarView(uid);
142
+		return ICalendarViewUids.userCalendarView(uid);
143 143
 	}
144 144
 
145 145
 	@Override
... ...
@@ -27,7 +27,7 @@ import net.bluemind.cli.cmd.api.ICmdLetRegistration;
27 27
 import net.bluemind.cli.directory.common.ExportCommand;
28 28
 import net.bluemind.core.rest.base.GenericStream;
29 29
 import net.bluemind.todolist.api.IVTodo;
30
-import net.bluemind.todolist.api.TodoListContainerType;
30
+import net.bluemind.todolist.api.ITodoUids;
31 31
 
32 32
 @Command(name = "export", description = "Export a todolist to an ICS file")
33 33
 public class ExportTodolistCommand extends ExportCommand {
... ...
@@ -55,7 +55,7 @@ public class ExportTodolistCommand extends ExportCommand {
55 55
 
56 56
 	@Override
57 57
 	public String getcontainerType() {
58
-		return TodoListContainerType.TYPE;
58
+		return ITodoUids.TYPE;
59 59
 	}
60 60
 
61 61
 	@Override
... ...
@@ -34,7 +34,7 @@ import net.bluemind.cli.cmd.api.ICmdLetRegistration;
34 34
 import net.bluemind.cli.utils.CliUtils;
35 35
 import net.bluemind.core.api.Regex;
36 36
 import net.bluemind.todolist.api.IVTodo;
37
-import net.bluemind.todolist.api.TodoListContainerType;
37
+import net.bluemind.todolist.api.ITodoUids;
38 38
 
39 39
 @Command(name = "import", description = "import an ICS File")
40 40
 public class ImportTodolistCommand implements ICmdLet, Runnable {
... ...
@@ -89,7 +89,7 @@ public class ImportTodolistCommand implements ICmdLet, Runnable {
89 89
 		}
90 90
 
91 91
 		if(todolistUid == null) {
92
-			todolistUid = TodoListContainerType.defaultUserTodoList(userUid); 
92
+			todolistUid = ITodoUids.defaultUserTodoList(userUid); 
93 93
 		}
94 94
 		
95 95
 		try{
... ...
@@ -28,7 +28,7 @@ import io.airlift.airline.Command;
28 28
 import net.bluemind.cli.cmd.api.ICmdLet;
29 29
 import net.bluemind.cli.cmd.api.ICmdLetRegistration;
30 30
 import net.bluemind.cli.directory.common.ListCommand;
31
-import net.bluemind.todolist.api.TodoListContainerType;
31
+import net.bluemind.todolist.api.ITodoUids;
32 32
 
33 33
 @Command(name = "list", description = "List user or whole domain todolists")
34 34
 public class ListTodolistCommand extends ListCommand {	
... ...
@@ -48,6 +48,6 @@ public class ListTodolistCommand extends ListCommand {
48 48
 
49 49
 	@Override
50 50
 	public String getContainerType() {
51
-		return TodoListContainerType.TYPE;
51
+		return ITodoUids.TYPE;
52 52
 	}
53 53
 }
... ...
@@ -30,7 +30,7 @@ import net.bluemind.cli.utils.CliUtils;
30 30
 import net.bluemind.core.api.Regex;
31 31
 import net.bluemind.core.api.fault.ServerFault;
32 32
 import net.bluemind.todolist.api.ITodoList;
33
-import net.bluemind.todolist.api.TodoListContainerType;
33
+import net.bluemind.todolist.api.ITodoUids;
34 34
 
35 35
 /**
36 36
  * This command is here to ensure our that the default maintenance op does
... ...
@@ -82,7 +82,7 @@ public class ResetTodolistCommand implements ICmdLet, Runnable {
82 82
 		String userUid = cliUtils.getUserUidFromEmail(email);
83 83
 			
84 84
 		if(todolistUid == null) {
85
-			todolistUid = TodoListContainerType.defaultUserTodoList(userUid); 
85
+			todolistUid = ITodoUids.defaultUserTodoList(userUid); 
86 86
 		}
87 87
 			
88 88
 		try {
... ...
@@ -19,11 +19,11 @@ package net.bluemind.core.container.api;
19 19
 
20 20
 public class ContainersFlatHierarchyBusAddresses {
21 21
 
22
-	private static final String BASE_ADDRESS = "bm." + ContainersFlatHierarchyContainer.TYPE + ".hook";
22
+	private static final String BASE_ADDRESS = "bm." + IFlatHierarchyUids.TYPE + ".hook";
23 23
 
24 24
 	public static final String ALL_HIERARCHY_CHANGES = BASE_ADDRESS + ".changed";
25 25
 
26 26
 	public static final String containersHierarchyChanges(String ownerUid, String domainUid) {
27
-		return BASE_ADDRESS + "." + ContainersFlatHierarchyContainer.getIdentifier(ownerUid, domainUid) + ".changed";
27
+		return BASE_ADDRESS + "." + IFlatHierarchyUids.getIdentifier(ownerUid, domainUid) + ".changed";
28 28
 	}
29 29
 }
30 30
deleted file mode 100644
... ...
@@ -1,31 +0,0 @@
1
-/* BEGIN LICENSE
2
- * Copyright © Blue Mind SAS, 2012-2016
3
- *
4
- * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
- * solution.
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of either the GNU Affero General Public License as
9
- * published by the Free Software Foundation (version 3 of the License).
10
- *
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
- *
16
- * See LICENSE.txt
17
- * END LICENSE
18
- */
19
-package net.bluemind.core.container.api;
20
-
21
-public class ContainersFlatHierarchyContainer {
22
-
23
-	public static final String TYPE = "container_flat_hierarchy";
24
-	public static final String REPAIR_OP_ID = "flat.hierarchy";
25
-	public static final String REPAIR_PF_OP_ID = "flat.hierarchy.pf";
26
-
27
-	public static String getIdentifier(String ownerUid, String domainUid) {
28
-		return "container_flat_hierarchy_" + ownerUid + "_at_" + domainUid;
29
-	}
30
-
31
-}
32 0
new file mode 100644
... ...
@@ -0,0 +1,63 @@
1
+/* BEGIN LICENSE
2
+ * Copyright © Blue Mind SAS, 2012-2016
3
+ *
4
+ * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
+ * solution.
6
+ *
7
+ * This program is free software; you can redistribute it and/or modify
8
+ * it under the terms of either the GNU Affero General Public License as
9
+ * published by the Free Software Foundation (version 3 of the License).
10
+ *
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ *
16
+ * See LICENSE.txt
17
+ * END LICENSE
18
+ */
19
+package net.bluemind.core.container.api;
20
+
21
+import javax.ws.rs.GET;
22
+import javax.ws.rs.Path;
23
+import javax.ws.rs.PathParam;
24
+
25
+import net.bluemind.core.api.BMApi;
26
+
27
+/**
28
+ * To unify the management of changelogs, ACLs, client synchronization,
29
+ * permissions and sharing, Bluemind stores all elements in a generic structure
30
+ * called a container. All containers are identified by a unique ID. Some
31
+ * containers are named (UID) in a specific manner to express a certain meaning.
32
+ * 
33
+ * 
34
+ * Returns the flat container hierarchy container UID.
35
+ */
36
+@BMApi(version = "3")
37
+@Path("/flat_hierarchy/uids")
38
+public interface IFlatHierarchyUids {
39
+
40
+	public static final String TYPE = "container_flat_hierarchy";
41
+	public static final String REPAIR_OP_ID = "flat.hierarchy";
42
+	public static final String REPAIR_PF_OP_ID = "flat.hierarchy.pf";
43
+
44
+	/**
45
+	 * Returns the flat container hierarchy container UID
46
+	 * 
47
+	 * @param ownerUid
48
+	 *                      the owner UID
49
+	 * @param domainUid
50
+	 *                      the domain
51
+	 * @return flat container hierarchy container UID
52
+	 */
53
+	@GET
54
+	@Path("{uid}/{domain}/_entry_hierarchy")
55
+	public default String identifier(@PathParam("uid") String ownerUid, @PathParam("domain") String domainUid) {
56
+		return getIdentifier(ownerUid, domainUid);
57
+	}
58
+
59
+	public static String getIdentifier(String ownerUid, String domainUid) {
60
+		return "container_flat_hierarchy_" + ownerUid + "_at_" + domainUid;
61
+	}
62
+
63
+}
0 64
new file mode 100644
... ...
@@ -0,0 +1,67 @@
1
+/* BEGIN LICENSE
2
+ * Copyright © Blue Mind SAS, 2012-2016
3
+ *
4
+ * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
+ * solution.
6
+ *
7
+ * This program is free software; you can redistribute it and/or modify
8
+ * it under the terms of either the GNU Affero General Public License as
9
+ * published by the Free Software Foundation (version 3 of the License).
10
+ *
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
+ *
16
+ * See LICENSE.txt
17
+ * END LICENSE
18
+ */
19
+package net.bluemind.core.container.api;
20
+
21
+import javax.ws.rs.GET;
22
+import javax.ws.rs.Path;
23
+import javax.ws.rs.PathParam;
24
+
25
+import net.bluemind.core.api.BMApi;
26
+import net.bluemind.core.container.model.BaseContainerDescriptor;
27
+
28
+/**
29
+ * To unify the management of changelogs, ACLs, client synchronization,
30
+ * permissions and sharing, Bluemind stores all elements in a generic structure
31
+ * called a container. All containers are identified by a unique ID. Some
32
+ * containers are named (UID) in a specific manner to express a certain meaning.
33
+ * 
34
+ * 
35
+ * Returns specific owner subscription container UIDs.
36
+ */
37
+@BMApi(version = "3")
38
+@Path("/owner_subscriptions/uids")
39
+public interface IOwnerSubscriptionUids {
40
+
41
+	public static final String TYPE = "owner_subscriptions";
42
+	public static final String REPAIR_OP_ID = "owner.subscriptions";
43
+
44
+	/**
45
+	 * Returns the owner subscription container UID
46
+	 * 
47
+	 * @param ownerUid
48
+	 *                      owner
49
+	 * @param domainUid
50
+	 *                      domain
51
+	 * @return owner subscription container uid
52
+	 */
53
+	@GET
54
+	@Path("{uid}/{domain}/_subscription")
55
+	public default String identifier(@PathParam("uid") String ownerUid, @PathParam("domain") String domainUid) {
56
+		return getIdentifier(ownerUid, domainUid);
57
+	}
58
+
59
+	public static String getIdentifier(String ownerUid, String domainUid) {
60
+		return "owner_subscriptions_" + ownerUid + "_at_" + domainUid;
61
+	}
62
+
63
+	public static String subscriptionUid(BaseContainerDescriptor cd, String ownerUid) {
64
+		return "sub-of-" + ownerUid + "-to-" + cd.uid;
65
+	}
66
+
67
+}
... ...
@@ -19,7 +19,7 @@ package net.bluemind.core.container.api;
19 19
 
20 20
 public class OwnerSubscriptionsBusAddresses {
21 21
 
22
-	public static final String BASE_ADDRESS = "bm." + OwnerSubscriptionsContainer.TYPE + ".hook";
22
+	public static final String BASE_ADDRESS = "bm." + IOwnerSubscriptionUids.TYPE + ".hook";
23 23
 
24 24
 	/**
25 25
 	 * Messages with domain, owner & version (long) are dispatched on this topic
... ...
@@ -27,6 +27,6 @@ public class OwnerSubscriptionsBusAddresses {
27 27
 	public static final String ALL_SUBSCRIPTION_CHANGES = BASE_ADDRESS + ".changed";
28 28
 
29 29
 	public static final String ownerSubscriptionChanges(String ownerUid, String domainUid) {
30
-		return BASE_ADDRESS + "." + OwnerSubscriptionsContainer.getIdentifier(ownerUid, domainUid) + ".changed";
30
+		return BASE_ADDRESS + "." + IOwnerSubscriptionUids.getIdentifier(ownerUid, domainUid) + ".changed";
31 31
 	}
32 32
 }
33 33
deleted file mode 100644
... ...
@@ -1,36 +0,0 @@
1
-/* BEGIN LICENSE
2
- * Copyright © Blue Mind SAS, 2012-2016
3
- *
4
- * This file is part of BlueMind. BlueMind is a messaging and collaborative
5
- * solution.
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of either the GNU Affero General Public License as
9
- * published by the Free Software Foundation (version 3 of the License).
10
- *
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
- *
16
- * See LICENSE.txt
17
- * END LICENSE
18
- */
19
-package net.bluemind.core.container.api;
20
-
21
-import net.bluemind.core.container.model.BaseContainerDescriptor;
22
-
23
-public class OwnerSubscriptionsContainer {
24
-
25
-	public static final String TYPE = "owner_subscriptions";
26
-	public static final String REPAIR_OP_ID = "owner.subscriptions";
27
-
28
-	public static String getIdentifier(String ownerUid, String domainUid) {
29
-		return "owner_subscriptions_" + ownerUid + "_at_" + domainUid;
30
-	}
31
-
32
-	public static String subscriptionUid(BaseContainerDescriptor cd, String ownerUid) {
33
-		return "sub-of-" + ownerUid + "-to-" + cd.uid;
34
-	}
35
-
36
-}
... ...
@@ -19,13 +19,13 @@ package net.bluemind.core.container.api.internal;
19 19
 
20 20
 import javax.ws.rs.Path;
21 21
 
22
-import net.bluemind.core.container.api.OwnerSubscriptionsContainer;
22
+import net.bluemind.core.container.api.IOwnerSubscriptionUids;
23 23
 
24 24
 @Path("{domainUid}/{ownerUid}")
25 25
 public interface IInternalOwnerSubscriptionsMgmt {
26 26
 
27 27
 	/**
28
-	 * will create a subscriptions container {@link OwnerSubscriptionsContainer} on
28
+	 * will create a subscriptions container {@link IOwnerSubscriptionUids} on
29 29
 	 * the owner's mailbox database. This method will check if the container exists.
30 30
 	 */
31 31
 	void init();
... ...
@@ -35,7 +35,7 @@ import com.google.common.collect.ImmutableSet;
35 35
 import net.bluemind.core.api.report.DiagnosticReport;
36 36
 import net.bluemind.core.container.api.ContainerHierarchyNode;
37 37
 import net.bluemind.core.container.api.ContainerQuery;
38
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
38
+import net.bluemind.core.container.api.IFlatHierarchyUids;
39 39
 import net.bluemind.core.container.api.IContainers;
40 40
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchy;
41 41
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchyMgmt;
... ...
@@ -63,7 +63,7 @@ public class FlatHierarchyRepair implements IDirEntryRepairSupport {
63 63
 
64 64
 	private static final Logger logger = LoggerFactory.getLogger(FlatHierarchyRepair.class);
65 65
 	public static final MaintenanceOperation flatHierOp = MaintenanceOperation
66
-			.create(ContainersFlatHierarchyContainer.REPAIR_OP_ID, "Flat Hierarchy");
66
+			.create(IFlatHierarchyUids.REPAIR_OP_ID, "Flat Hierarchy");
67 67
 
68 68
 	private static class FlagHierMaintenance extends InternalMaintenanceOperation {
69 69
 		private final BmContext context;
... ...
@@ -120,7 +120,7 @@ public class FlatHierarchyRepair implements IDirEntryRepairSupport {
120 120
 			Set<String> toRemoveNodes = new HashSet<>(nodeContUids);
121 121
 			for (BaseContainerDescriptor c : ownedContainers) {
122 122
 				String op = "skip";
123
-				if (ContainersFlatHierarchyContainer.TYPE.equals(c.type)) {
123
+				if (IFlatHierarchyUids.TYPE.equals(c.type)) {
124 124
 					// skip
125 125
 				} else if (nodeContUids.contains(c.uid)) {
126 126
 					ContainerHierarchyNode value = ContainerHierarchyNode.of(c);
... ...
@@ -31,9 +31,9 @@ import org.junit.After;
31 31
 import org.junit.Before;
32 32
 import org.junit.Test;
33 33
 
34
-import net.bluemind.backend.mail.replica.api.MailReplicaContainerTypes;
34
+import net.bluemind.backend.mail.replica.api.IMailReplicaUids;
35 35
 import net.bluemind.core.container.api.ContainerHierarchyNode;
36
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
36
+import net.bluemind.core.container.api.IFlatHierarchyUids;
37 37
 import net.bluemind.core.container.model.Container;
38 38
 import net.bluemind.core.container.model.Item;
39 39
 import net.bluemind.core.container.model.ItemFlag;
... ...
@@ -55,8 +55,8 @@ public class ContainerHierarchyStoreTests {
55 55
 
56 56
 		ContainerStore containerStore = new ContainerStore(JdbcTestHelper.getInstance().getDataSource(),
57 57
 				securityContext);
58
-		faiContainerId = ContainersFlatHierarchyContainer.getIdentifier("fake_owner", "fake_domain");
59
-		Container fais = Container.create(faiContainerId, ContainersFlatHierarchyContainer.TYPE, faiContainerId, "me",
58
+		faiContainerId = IFlatHierarchyUids.getIdentifier("fake_owner", "fake_domain");
59
+		Container fais = Container.create(faiContainerId, IFlatHierarchyUids.TYPE, faiContainerId, "me",
60 60
 				true);
61 61
 		fais = containerStore.create(fais);
62 62
 
... ...
@@ -125,7 +125,7 @@ public class ContainerHierarchyStoreTests {
125 125
 		String uid1 = "" + System.currentTimeMillis();
126 126
 		Item item = nodeItemStore.create(Item.create(uid1, null));
127 127
 		ContainerHierarchyNode node = new ContainerHierarchyNode();
128
-		node.containerType = MailReplicaContainerTypes.MAILBOX_RECORDS;
128
+		node.containerType = IMailReplicaUids.MAILBOX_RECORDS;
129 129
 		node.containerUid = "cont_uid1";
130 130
 		node.name = "Name1";
131 131
 		hierStore.create(item, node);
... ...
@@ -137,7 +137,7 @@ public class ContainerHierarchyStoreTests {
137 137
 		item2 = nodeItemStore.create(item2);
138 138
 		setLastUpdated(item2.uid, 1000);
139 139
 		ContainerHierarchyNode node2 = new ContainerHierarchyNode();
140
-		node2.containerType = MailReplicaContainerTypes.MAILBOX_RECORDS;
140
+		node2.containerType = IMailReplicaUids.MAILBOX_RECORDS;
141 141
 		node2.containerUid = "cont_uid2";
142 142
 		node2.name = "Name2";
143 143
 		hierStore.create(item2, node2);
... ...
@@ -27,7 +27,7 @@ import org.junit.Before;
27 27
 import org.junit.Test;
28 28
 
29 29
 import net.bluemind.core.container.api.ContainerSubscriptionModel;
30
-import net.bluemind.core.container.api.OwnerSubscriptionsContainer;
30
+import net.bluemind.core.container.api.IOwnerSubscriptionUids;
31 31
 import net.bluemind.core.container.model.Container;
32 32
 import net.bluemind.core.container.model.Item;
33 33
 import net.bluemind.core.context.SecurityContext;
... ...
@@ -50,8 +50,8 @@ public class OwnerSubscriptionStoreTests {
50 50
 
51 51
 		ContainerStore containerStore = new ContainerStore(ctx, JdbcTestHelper.getInstance().getDataSource(),
52 52
 				securityContext);
53
-		fakeContainer = OwnerSubscriptionsContainer.getIdentifier("me", "fake_domain");
54
-		Container fais = Container.create(fakeContainer, OwnerSubscriptionsContainer.TYPE, fakeContainer, "me", true);
53
+		fakeContainer = IOwnerSubscriptionUids.getIdentifier("me", "fake_domain");
54
+		Container fais = Container.create(fakeContainer, IOwnerSubscriptionUids.TYPE, fakeContainer, "me", true);
55 55
 		fais = containerStore.create(fais);
56 56
 
57 57
 		hierStore = new OwnerSubscriptionStore(JdbcTestHelper.getInstance().getDataSource(), fais);
... ...
@@ -26,7 +26,7 @@ import javax.sql.DataSource;
26 26
 import org.slf4j.Logger;
27 27
 import org.slf4j.LoggerFactory;
28 28
 
29
-import net.bluemind.backend.mail.replica.api.MailReplicaContainerTypes;
29
+import net.bluemind.backend.mail.replica.api.IMailReplicaUids;
30 30
 import net.bluemind.core.container.api.ContainerHierarchyNode;
31 31
 import net.bluemind.core.container.model.Container;
32 32
 import net.bluemind.core.container.model.Item;
... ...
@@ -80,7 +80,7 @@ public class ContainersHierarchyNodeStore extends AbstractItemValueStore<Contain
80 80
 
81 81
 	public void removeDeletedRecords(int days) throws SQLException {
82 82
 		String select = "select ci.id from t_container_hierarchy h join t_container_item ci on h.item_id = ci.id "
83
-				+ "where container_type = '" + MailReplicaContainerTypes.MAILBOX_RECORDS + "' and ci.flags::bit(32) & ("
83
+				+ "where container_type = '" + IMailReplicaUids.MAILBOX_RECORDS + "' and ci.flags::bit(32) & ("
84 84
 				+ ItemFlag.Deleted.value + ")::bit(32)= (" + ItemFlag.Deleted.value + ")::bit(32) " + //
85 85
 				"AND ci.updated < (now() - interval '" + days + " days')";
86 86
 		List<Long> selected = select(select, rs -> rs.getLong(1), (rs, index, val) -> index);
... ...
@@ -35,7 +35,7 @@ import com.google.common.util.concurrent.SettableFuture;
35 35
 import net.bluemind.config.Token;
36 36
 import net.bluemind.core.api.fault.ServerFault;
37 37
 import net.bluemind.core.container.api.ContainerHierarchyNode;
38
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
38
+import net.bluemind.core.container.api.IFlatHierarchyUids;
39 39
 import net.bluemind.core.container.api.IContainersFlatHierarchy;
40 40
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchyMgmt;
41 41
 import net.bluemind.core.container.model.Container;
... ...
@@ -85,7 +85,7 @@ public class ContainersHierarchyServiceTests {
85 85
 				new BmTestContext(admin0SecurityContext), user.getSubject(), user.getContainerUid());
86 86
 		internalHierarchy.init();
87 87
 		userHierContainer = containerStore
88
-				.get(ContainersFlatHierarchyContainer.getIdentifier(user.getSubject(), user.getContainerUid()));
88
+				.get(IFlatHierarchyUids.getIdentifier(user.getSubject(), user.getContainerUid()));
89 89
 
90 90
 		final SettableFuture<Void> future = SettableFuture.<Void>create();
91 91
 		Handler<AsyncResult<Void>> done = new Handler<AsyncResult<Void>>() {
... ...
@@ -33,7 +33,7 @@ import org.junit.Test;
33 33
 
34 34
 import net.bluemind.config.Token;
35 35
 import net.bluemind.core.container.api.ContainerHierarchyNode;
36
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
36
+import net.bluemind.core.container.api.IFlatHierarchyUids;
37 37
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchy;
38 38
 import net.bluemind.core.container.model.Container;
39 39
 import net.bluemind.core.container.model.ItemFlag;
... ...
@@ -89,7 +89,7 @@ public class InternalContainersHierarchyServiceTests {
89 89
 		InternalContainersHierarchyMgmtService internalHierarchy = mgmtService();
90 90
 		internalHierarchy.init();
91 91
 		Container userHierContainer = containerStore
92
-				.get(ContainersFlatHierarchyContainer.getIdentifier(user.getSubject(), user.getContainerUid()));
92
+				.get(IFlatHierarchyUids.getIdentifier(user.getSubject(), user.getContainerUid()));
93 93
 		assertNotNull(userHierContainer);
94 94
 	}
95 95
 
... ...
@@ -114,7 +114,7 @@ public class InternalContainersHierarchyServiceTests {
114 114
 	public void tesCreate() throws SQLException {
115 115
 		mgmtService().init();
116 116
 		Container userHierContainer = containerStore
117
-				.get(ContainersFlatHierarchyContainer.getIdentifier(user.getSubject(), user.getContainerUid()));
117
+				.get(IFlatHierarchyUids.getIdentifier(user.getSubject(), user.getContainerUid()));
118 118
 		ContainerHierarchyNode chn = new ContainerHierarchyNode();
119 119
 		chn.containerUid = "daenerys";
120 120
 		chn.containerType = "targaryen";
... ...
@@ -139,7 +139,7 @@ public class InternalContainersHierarchyServiceTests {
139 139
 	public void testItemFlagDeleted() throws SQLException {
140 140
 		mgmtService().init();
141 141
 		Container userHierContainer = containerStore
142
-				.get(ContainersFlatHierarchyContainer.getIdentifier(user.getSubject(), user.getContainerUid()));
142
+				.get(IFlatHierarchyUids.getIdentifier(user.getSubject(), user.getContainerUid()));
143 143
 		ContainerHierarchyNode chn = new ContainerHierarchyNode();
144 144
 		chn.containerUid = "daenerys";
145 145
 		chn.containerType = "targaryen";
... ...
@@ -7,6 +7,14 @@
7 7
             api="net.bluemind.core.container.api.IContainers">
8 8
       </endpoint>
9 9
       <endpoint
10
+            api="net.bluemind.core.container.api.IFlatHierarchyUids" 
11
+            inline="true">
12
+      </endpoint>
13
+      <endpoint
14
+            api="net.bluemind.core.container.api.IOwnerSubscriptionUids" 
15
+            inline="true">
16
+      </endpoint>
17
+      <endpoint
10 18
             api="net.bluemind.core.container.api.IContainerManagement">
11 19
       </endpoint>
12 20
       <endpoint
... ...
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
27 27
 
28 28
 import net.bluemind.core.api.fault.ServerFault;
29 29
 import net.bluemind.core.container.api.ContainerHierarchyNode;
30
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
30
+import net.bluemind.core.container.api.IFlatHierarchyUids;
31 31
 import net.bluemind.core.container.model.Container;
32 32
 import net.bluemind.core.container.persistance.ContainerStore;
33 33
 import net.bluemind.core.container.persistance.ContainersHierarchyNodeStore;
... ...
@@ -57,7 +57,7 @@ public abstract class CommonContainersHierarchyServiceFactory<T> {
57 57
 
58 58
 		String domainUid = params[0];
59 59
 		String ownerUid = params[1];
60
-		String containerUid = ContainersFlatHierarchyContainer.getIdentifier(ownerUid, domainUid);
60
+		String containerUid = IFlatHierarchyUids.getIdentifier(ownerUid, domainUid);
61 61
 
62 62
 		DataSource ds = DataSourceRouter.get(context, containerUid);
63 63
 		if (ds == context.getDataSource()) {
... ...
@@ -26,7 +26,7 @@ import org.slf4j.Logger;
26 26
 import org.slf4j.LoggerFactory;
27 27
 
28 28
 import net.bluemind.core.api.fault.ServerFault;
29
-import net.bluemind.core.container.api.OwnerSubscriptionsContainer;
29
+import net.bluemind.core.container.api.IOwnerSubscriptionUids;
30 30
 import net.bluemind.core.container.model.Container;
31 31
 import net.bluemind.core.container.persistance.ContainerStore;
32 32
 import net.bluemind.core.container.persistance.DataSourceRouter;
... ...
@@ -48,7 +48,7 @@ public abstract class CommonOwnerSubscriptionsServiceFactory<T> {
48 48
 
49 49
 		String domainUid = params[0];
50 50
 		String ownerUid = params[1];
51
-		String containerUid = OwnerSubscriptionsContainer.getIdentifier(ownerUid, domainUid);
51
+		String containerUid = IOwnerSubscriptionUids.getIdentifier(ownerUid, domainUid);
52 52
 
53 53
 		DataSource ds = DataSourceRouter.get(context, containerUid);
54 54
 		if (ds == context.getDataSource()) {
... ...
@@ -25,7 +25,7 @@ import javax.sql.DataSource;
25 25
 import org.slf4j.Logger;
26 26
 import org.slf4j.LoggerFactory;
27 27
 
28
-import net.bluemind.core.container.api.ContainersFlatHierarchyContainer;
28
+import net.bluemind.core.container.api.IFlatHierarchyUids;
29 29
 import net.bluemind.core.container.api.IContainers;
30 30
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchy;
31 31
 import net.bluemind.core.container.api.internal.IInternalContainersFlatHierarchyMgmt;
... ...
@@ -53,7 +53,7 @@ public class InternalContainersHierarchyMgmtService implements IInternalContaine
53 53
 	@Override
54 54
 	public void init() {
55 55
 		logger.info("***** Containers hierarchy init for owner: {} domainUid: {}", ownerUid, domainUid);
56
-		String hierUid = ContainersFlatHierarchyContainer.getIdentifier(ownerUid, domainUid);
56
+		String hierUid = IFlatHierarchyUids.getIdentifier(ownerUid, domainUid);
57 57
 		DataSource ds = context.getDataSource();
58 58
 		IDirectory dirApi = context.provider().instance(IDirectory.class, domainUid);
59 59
 		DirEntry entry = dirApi.findByEntryUid(ownerUid);
... ...
@@ -63,7 +63,7 @@ public class InternalContainersHierarchyMgmtService implements IInternalContaine
63 63
 		}
64 64
 		ContainerStore store = new ContainerStore(context, ds, context.getSecurityContext());
65 65
 		ContainerStore dirStore = new ContainerStore(context, context.getDataSource(), context.getSecurityContext());
66
-		Container hierCont = Container.create(hierUid, ContainersFlatHierarchyContainer.TYPE,
66
+		Container hierCont = Container.create(hierUid, IFlatHierarchyUids.TYPE,
67 67
 				ownerUid + "@" + domainUid + " container hierarchy", ownerUid);
68 68
 		hierCont.domainUid = domainUid;
69 69
 		hierCont.defaultContainer = true;
... ...
@@ -85,7 +85,7 @@ public class InternalContainersHierarchyMgmtService implements IInternalContaine
85 85
 	@Override
86 86
 	public void delete() {
87 87
 		logger.info("***** Containers hierarchy delete for owner: {} domainUid: {}", ownerUid, domainUid);
88
-		String hierUid = ContainersFlatHierarchyContainer.getIdentifier(ownerUid, domainUid);
88
+		String hierUid = IFlatHierarchyUids.getIdentifier(ownerUid, domainUid);
89 89
 		IContainers contApi = context.provider().instance(IContainers.class);
90 90
 		ContainerDescriptor cd = contApi.get(hierUid);
91 91
 		IInternalContainersFlatHierarchy hierApi = context.provider().instance(IInternalContainersFlatHierarchy.class,
... ...
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
29 29
 import net.bluemind.core.api.fault.ErrorCode;
30 30
 import net.bluemind.core.api.fault.ServerFault;
31 31
 import net.bluemind.core.container.api.IContainers;
32
-import net.bluemind.core.container.api.OwnerSubscriptionsContainer;
32
+import net.bluemind.core.container.api.IOwnerSubscriptionUids;
33 33
 import net.bluemind.core.container.api.internal.IInternalOwnerSubscriptions;
34 34
 import net.bluemind.core.container.api.internal.IInternalOwnerSubscriptionsMgmt;
35 35
 import net.bluemind.core.container.model.Container;
... ...
@@ -74,11 +74,11 @@ public class InternalOwnerSubscriptionsMgmtService implements IInternalOwnerSubs
74 74
 		}
75 75
 
76 76
 		Objects.requireNonNull(ds, "Missing datasource for " + entry.dataLocation);
77
-		String subsUid = OwnerSubscriptionsContainer.getIdentifier(ownerUid, domainUid);
77
+		String subsUid = IOwnerSubscriptionUids.getIdentifier(ownerUid, domainUid);
78 78
 
79 79
 		ContainerStore shardContStore = new ContainerStore(context, ds, context.getSecurityContext());
80 80
 		ContainerStore dirStore = new ContainerStore(context, context.getDataSource(), context.getSecurityContext());
81
-		Container subsCont = Container.create(subsUid, OwnerSubscriptionsContainer.TYPE,
81
+		Container subsCont = Container.create(subsUid, IOwnerSubscriptionUids.TYPE,
82 82
 				ownerUid + "@" + domainUid + " subscriptions", ownerUid);
83 83
 		subsCont.domainUid = domainUid;
84 84
 		subsCont.defaultContainer = true;
... ...
@@ -98,7 +98,7 @@ public class InternalOwnerSubscriptionsMgmtService implements IInternalOwnerSubs
98 98
 
99 99
 	@Override
100 100
 	public void delete() {
101
-		String subsUid = OwnerSubscriptionsContainer.getIdentifier(ownerUid, domainUid);
101
+		String subsUid = IOwnerSubscriptionUids.getIdentifier(ownerUid, domainUid);
102 102
 		IContainers contApi = context.provider().instance(IContainers.class);
103 103
 		try {
104 104
 			ContainerDescriptor cd = contApi.get(subsUid);
... ...
@@ -42,7 +42,7 @@ import com.google.common.collect.Sets;
42 42
 import net.bluemind.core.api.report.DiagnosticReport;
43 43
 import net.bluemind.core.container.api.ContainerSubscriptionModel;
44 44
 import net.bluemind.core.container.api.IOwnerSubscriptions;
45
-import net.bluemind.core.container.api.OwnerSubscriptionsContainer;
45