X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.maintenance%2Fsrc%2Forg%2Fargeo%2Fmaintenance%2Fbackup%2FBackupContentHandler.java;h=745d39d1d36f9ad22fabf44bd5d2e8c41d6883bb;hb=3c7803ca05e2b0276d635e64046d924d3f1884c9;hp=099323833dfe6da23fdfc07a641428ccbf5d15d6;hpb=b97005030b1e0469fcc6dd6a35adb0c134131eaa;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.maintenance/src/org/argeo/maintenance/backup/BackupContentHandler.java b/org.argeo.maintenance/src/org/argeo/maintenance/backup/BackupContentHandler.java index 099323833..745d39d1d 100644 --- a/org.argeo.maintenance/src/org/argeo/maintenance/backup/BackupContentHandler.java +++ b/org.argeo.maintenance/src/org/argeo/maintenance/backup/BackupContentHandler.java @@ -12,13 +12,16 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.commons.io.IOUtils; +import org.argeo.jcr.JcrException; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +/** XML handler serialising a JCR system view. */ public class BackupContentHandler extends DefaultHandler { final static int MAX_DEPTH = 1024; final static String SV_NAMESPACE_URI = "http://www.jcp.org/jcr/sv/1.0"; + final static String SV_PREFIX = "sv"; // elements final static String NODE = "node"; final static String PROPERTY = "property"; @@ -36,6 +39,8 @@ public class BackupContentHandler extends DefaultHandler { private Session session; private Set contentPaths = new TreeSet<>(); + private boolean inSystem = false; + public BackupContentHandler(Writer out, Session session) { super(); this.out = out; @@ -73,12 +78,17 @@ public class BackupContentHandler extends DefaultHandler { if (currentDepth > 0) currentPath[currentDepth - 1] = nodeName; // System.out.println(getCurrentPath() + " , depth=" + currentDepth); + if ("jcr:system".equals(nodeName)) { + inSystem = true; + } } + if (inSystem) + return; if (SV_NAMESPACE_URI.equals(uri)) try { out.write("<"); - out.write(localName); + out.write(SV_PREFIX + ":" + localName); if (isProperty) currentPropertyIsMultiple = false; // always reset for (int i = 0; i < attributes.getLength(); i++) { @@ -87,7 +97,7 @@ public class BackupContentHandler extends DefaultHandler { String attrName = attributes.getLocalName(i); String attrValue = attributes.getValue(i); out.write(" "); - out.write(attrName); + out.write(SV_PREFIX + ":" + attrName); out.write("="); out.write("\""); out.write(attrValue); @@ -113,17 +123,19 @@ public class BackupContentHandler extends DefaultHandler { } } } - if (currentDepth == 0) { - out.write(" xmlns=\"" + SV_NAMESPACE_URI + "\""); + if (isNode && currentDepth == 0) { + // out.write(" xmlns=\"" + SV_NAMESPACE_URI + "\""); + out.write(" xmlns:" + SV_PREFIX + "=\"" + SV_NAMESPACE_URI + "\""); } out.write(">"); if (isNode) out.write("\n"); else if (isProperty && currentPropertyIsMultiple) out.write("\n"); - } catch (IOException | RepositoryException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (RepositoryException e) { + throw new JcrException(e); } } @@ -134,7 +146,17 @@ public class BackupContentHandler extends DefaultHandler { if (currentDepth > 0) currentPath[currentDepth - 1] = null; currentDepth = currentDepth - 1; + if (inSystem) { + // System.out.println("Skip " + getCurrentPath()+" , + // currentDepth="+currentDepth); + if (currentDepth == 0) { + inSystem = false; + return; + } + } } + if (inSystem) + return; boolean isValue = localName.equals(VALUE); if (SV_NAMESPACE_URI.equals(uri)) try { @@ -143,7 +165,7 @@ public class BackupContentHandler extends DefaultHandler { } currentEncoded = null; out.write(""); if (!isValue) out.write("\n"); @@ -152,18 +174,18 @@ public class BackupContentHandler extends DefaultHandler { out.write("\n"); } } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + throw new RuntimeException(e); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { + if (inSystem) + return; try { out.write(ch, start, length); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + throw new RuntimeException(e); } } @@ -190,6 +212,4 @@ public class BackupContentHandler extends DefaultHandler { return contentPaths; } - - }