1 package org
.argeo
.app
.jcr
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
6 import java
.util
.ArrayList
;
9 import javax
.jcr
.ImportUUIDBehavior
;
10 import javax
.jcr
.ItemExistsException
;
11 import javax
.jcr
.Node
;
12 import javax
.jcr
.RepositoryException
;
14 import org
.argeo
.api
.cms
.CmsLog
;
15 import org
.argeo
.app
.api
.EntityType
;
16 import org
.argeo
.jcr
.JcrUtils
;
17 import org
.argeo
.maintenance
.AbstractMaintenanceService
;
19 /** Base for custom initialisations. */
20 public abstract class CustomMaintenanceService
extends AbstractMaintenanceService
{
21 private final static CmsLog log
= CmsLog
.getLog(AbstractMaintenanceService
.class);
23 protected List
<String
> getTypologies() {
24 return new ArrayList
<>();
27 protected String
getTypologiesLoadBase() {
31 protected void loadTypologies(Node customBaseNode
) throws RepositoryException
, IOException
{
32 List
<String
> typologies
= getTypologies();
33 if (!typologies
.isEmpty()) {
34 Node termsBase
= JcrUtils
.getOrAdd(customBaseNode
, EntityType
.terms
.name(), EntityType
.typologies
.get());
35 for (String terms
: typologies
) {
36 loadTerms(termsBase
, terms
);
38 // TODO do not save here, so that upper layers can decide when to save
39 termsBase
.getSession().save();
43 protected void loadTerms(Node termsBase
, String name
) throws IOException
, RepositoryException
{
45 // if (termsBase.hasNode(name))
47 String typologiesLoadBase
= getTypologiesLoadBase();
48 if (typologiesLoadBase
.contains("/") && !typologiesLoadBase
.endsWith("/"))
49 typologiesLoadBase
= typologiesLoadBase
+ "/";
50 String termsLoadPath
= typologiesLoadBase
+ name
+ ".xml";
51 URL termsUrl
= getClass().getResource(termsLoadPath
);
53 throw new IllegalArgumentException("Terms '" + name
+ "' not found.");
54 try (InputStream in
= termsUrl
.openStream()) {
55 termsBase
.getSession().importXML(termsBase
.getPath(), in
,
56 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REPLACE_EXISTING
);
57 } catch (ItemExistsException e
) {
58 log
.warn("Terms " + name
+ " exists with another UUID, removing it...");
59 if (termsBase
.hasNode(name
))
60 termsBase
.getNode(name
).remove();
61 try (InputStream in
= termsUrl
.openStream()) {
62 termsBase
.getSession().importXML(termsBase
.getPath(), in
,
63 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REPLACE_EXISTING
);
66 if (log
.isDebugEnabled())
67 log
.debug("Terms '" + name
+ "' loaded.");
68 // TODO do not save here, so that upper layers can decide when to save
69 termsBase
.getSession().save();
70 } catch (RepositoryException
| IOException e
) {
71 log
.error("Cannot load terms '" + name
+ "': " + e
.getMessage());