1 package org
.argeo
.app
.core
;
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))
48 String termsLoadPath
= getTypologiesLoadBase() + '/' + name
+ ".xml";
49 URL termsUrl
= getClass().getClassLoader().getResource(termsLoadPath
);
51 throw new IllegalArgumentException("Terms '" + name
+ "' not found.");
52 try (InputStream in
= termsUrl
.openStream()) {
53 termsBase
.getSession().importXML(termsBase
.getPath(), in
,
54 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REPLACE_EXISTING
);
55 } catch (ItemExistsException e
) {
56 log
.warn("Terms " + name
+ " exists with another UUID, removing it...");
57 termsBase
.getNode(name
).remove();
58 try (InputStream in
= termsUrl
.openStream()) {
59 termsBase
.getSession().importXML(termsBase
.getPath(), in
,
60 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REPLACE_EXISTING
);
63 if (log
.isDebugEnabled())
64 log
.debug("Terms '" + name
+ "' loaded.");
65 // TODO do not save here, so that upper layers can decide when to save
66 termsBase
.getSession().save();
67 } catch (RepositoryException
| IOException e
) {
68 log
.error("Cannot load terms '" + name
+ "': " + e
.getMessage());