diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
index 42d95a4e7f..f398ea5709 100644
--- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
+++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.sql.Array;
import java.sql.Blob;
@@ -72,12 +73,10 @@ import org.alfresco.repo.domain.hibernate.dialect.AlfrescoSybaseAnywhereDialect;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.util.LogUtil;
import org.alfresco.util.TempFileProvider;
-import org.alfresco.util.schemacomp.Difference;
import org.alfresco.util.schemacomp.ExportDb;
import org.alfresco.util.schemacomp.Result;
import org.alfresco.util.schemacomp.Results;
import org.alfresco.util.schemacomp.SchemaComparator;
-import org.alfresco.util.schemacomp.ValidationResult;
import org.alfresco.util.schemacomp.XMLToSchema;
import org.alfresco.util.schemacomp.model.Schema;
import org.alfresco.util.schemadump.Main;
@@ -1676,17 +1675,22 @@ public class SchemaBootstrap extends AbstractLifecycleBean
PrintWriter pw = null;
try
{
- pw = new PrintWriter(outputFile);
+ pw = new PrintWriter(outputFile, SchemaComparator.CHAR_SET);
}
catch (FileNotFoundException error)
{
throw new RuntimeException("Unable to open file for writing: " + outputFile);
}
+ catch (UnsupportedEncodingException error)
+ {
+ throw new RuntimeException("Unsupported char set: " + SchemaComparator.CHAR_SET, error);
+ }
// Populate the file with details of the comparison's results.
for (Result result : results)
{
- pw.println(result.describe());
+ pw.print(result.describe());
+ pw.print(SchemaComparator.LINE_SEPARATOR);
}
pw.close();
diff --git a/source/java/org/alfresco/util/schemacomp/DbToXML.java b/source/java/org/alfresco/util/schemacomp/DbToXML.java
index f801cbcda0..ab6b76be9c 100644
--- a/source/java/org/alfresco/util/schemacomp/DbToXML.java
+++ b/source/java/org/alfresco/util/schemacomp/DbToXML.java
@@ -19,6 +19,11 @@
package org.alfresco.util.schemacomp;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.Properties;
import javax.xml.transform.stream.StreamResult;
@@ -77,12 +82,58 @@ public class DbToXML
if (exporter != null)
{
Schema schema = exporter.getSchema();
- SchemaToXML schemaToXML = new SchemaToXML(schema, new StreamResult(outputFile));
+ // Write to a string buffer and then write the results to a file
+ // since we need to write windows line endings - and even passing in a suitable
+ // PrintWriter to StreamResult does not seem to result in the correct line endings.
+ StringWriter stringWriter = new StringWriter();
+ SchemaToXML schemaToXML = new SchemaToXML(schema, new StreamResult(stringWriter));
schemaToXML.execute();
+ writeToFile(stringWriter.getBuffer().toString());
}
}
-
+ private void writeToFile(String content)
+ {
+ PrintWriter pw = printWriter(outputFile, SchemaComparator.CHAR_SET, SchemaComparator.LINE_SEPARATOR);
+
+ String[] lines = content.split(System.getProperty("line.separator"));
+ for (String line : lines)
+ {
+ pw.println(line);
+ }
+
+ pw.close();
+ }
+
+ private static PrintWriter printWriter(File file, String charSet, String lineSeparator)
+ {
+ Properties props = System.getProperties();
+ synchronized (props)
+ {
+ String oldLineSep = null;
+ try
+ {
+ oldLineSep = (String) props.setProperty("line.separator", lineSeparator);
+ return new PrintWriter(file, charSet);
+ }
+ catch (FileNotFoundException error)
+ {
+ throw new RuntimeException("Unable to write to file " + file, error);
+ }
+ catch (UnsupportedEncodingException error)
+ {
+ throw new RuntimeException("Unsupported encoding" + charSet, error);
+ }
+ finally
+ {
+ if (oldLineSep != null)
+ {
+ props.put("line.separator", oldLineSep);
+ }
+ }
+ }
+ }
+
public static void main(String[] args)
{
if (args.length != 2)
diff --git a/source/java/org/alfresco/util/schemacomp/SchemaComparator.java b/source/java/org/alfresco/util/schemacomp/SchemaComparator.java
index 137895d6ef..bb992eafa3 100644
--- a/source/java/org/alfresco/util/schemacomp/SchemaComparator.java
+++ b/source/java/org/alfresco/util/schemacomp/SchemaComparator.java
@@ -20,6 +20,7 @@ package org.alfresco.util.schemacomp;
import org.alfresco.util.schemacomp.Result.Strength;
import org.alfresco.util.schemacomp.model.Schema;
+import org.apache.xml.serialize.LineSeparator;
import org.hibernate.dialect.Dialect;
/**
@@ -30,6 +31,8 @@ import org.hibernate.dialect.Dialect;
*/
public class SchemaComparator
{
+ public static final String CHAR_SET = "UTF-8";
+ public static final String LINE_SEPARATOR = LineSeparator.Windows;
private final Schema referenceSchema;
private final Schema targetSchema;
private final DiffContext ctx;
diff --git a/source/java/org/alfresco/util/schemacomp/SchemaToXML.java b/source/java/org/alfresco/util/schemacomp/SchemaToXML.java
index 315c122c1e..f2ce0e0251 100644
--- a/source/java/org/alfresco/util/schemacomp/SchemaToXML.java
+++ b/source/java/org/alfresco/util/schemacomp/SchemaToXML.java
@@ -62,9 +62,9 @@ public class SchemaToXML
// It was worth a try
}
t.setOutputProperty(OutputKeys.INDENT, "yes");
+ t.setOutputProperty(OutputKeys.ENCODING, SchemaComparator.CHAR_SET);
xmlOut.setResult(streamResult);
-
this.schema = schema;
}
diff --git a/source/java/org/alfresco/util/schemacomp/xml_to_schema_test.xml b/source/java/org/alfresco/util/schemacomp/xml_to_schema_test.xml
index 88f113224f..1c044e9b7b 100644
--- a/source/java/org/alfresco/util/schemacomp/xml_to_schema_test.xml
+++ b/source/java/org/alfresco/util/schemacomp/xml_to_schema_test.xml
@@ -1,54 +1,54 @@
-
-
-
-
-
-
-
- NUMBER(10)
- false
-
-
- VARCHAR2(200)
- false
-
-
- VARCHAR2(150)
- true
-
-
-
-
- id
-
-
-
-
- nodeRef
- node
- nodeRef
-
-
-
-
-
- id
- nodeRef
-
-
-
-
- idx_.+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ NUMBER(10)
+ false
+
+
+ VARCHAR2(200)
+ false
+
+
+ VARCHAR2(150)
+ true
+
+
+
+
+ id
+
+
+
+
+ nodeRef
+ node
+ nodeRef
+
+
+
+
+
+ id
+ nodeRef
+
+
+
+
+ idx_.+
+
+
+
+
+
+
+
+
+
+
+