ALF-7260: schema validation: ensure outputting UTF-8 and Windows line endings.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32183 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Matt Ward
2011-11-22 13:16:01 +00:00
parent 4b2695745e
commit d021543bce
5 changed files with 119 additions and 61 deletions

View File

@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.sql.Array; import java.sql.Array;
import java.sql.Blob; 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.service.cmr.repository.ContentWriter;
import org.alfresco.util.LogUtil; import org.alfresco.util.LogUtil;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.alfresco.util.schemacomp.Difference;
import org.alfresco.util.schemacomp.ExportDb; import org.alfresco.util.schemacomp.ExportDb;
import org.alfresco.util.schemacomp.Result; import org.alfresco.util.schemacomp.Result;
import org.alfresco.util.schemacomp.Results; import org.alfresco.util.schemacomp.Results;
import org.alfresco.util.schemacomp.SchemaComparator; import org.alfresco.util.schemacomp.SchemaComparator;
import org.alfresco.util.schemacomp.ValidationResult;
import org.alfresco.util.schemacomp.XMLToSchema; import org.alfresco.util.schemacomp.XMLToSchema;
import org.alfresco.util.schemacomp.model.Schema; import org.alfresco.util.schemacomp.model.Schema;
import org.alfresco.util.schemadump.Main; import org.alfresco.util.schemadump.Main;
@@ -1676,17 +1675,22 @@ public class SchemaBootstrap extends AbstractLifecycleBean
PrintWriter pw = null; PrintWriter pw = null;
try try
{ {
pw = new PrintWriter(outputFile); pw = new PrintWriter(outputFile, SchemaComparator.CHAR_SET);
} }
catch (FileNotFoundException error) catch (FileNotFoundException error)
{ {
throw new RuntimeException("Unable to open file for writing: " + outputFile); 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. // Populate the file with details of the comparison's results.
for (Result result : results) for (Result result : results)
{ {
pw.println(result.describe()); pw.print(result.describe());
pw.print(SchemaComparator.LINE_SEPARATOR);
} }
pw.close(); pw.close();

View File

@@ -19,6 +19,11 @@
package org.alfresco.util.schemacomp; package org.alfresco.util.schemacomp;
import java.io.File; 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; import javax.xml.transform.stream.StreamResult;
@@ -77,11 +82,57 @@ public class DbToXML
if (exporter != null) if (exporter != null)
{ {
Schema schema = exporter.getSchema(); 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(); 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) public static void main(String[] args)
{ {

View File

@@ -20,6 +20,7 @@ package org.alfresco.util.schemacomp;
import org.alfresco.util.schemacomp.Result.Strength; import org.alfresco.util.schemacomp.Result.Strength;
import org.alfresco.util.schemacomp.model.Schema; import org.alfresco.util.schemacomp.model.Schema;
import org.apache.xml.serialize.LineSeparator;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
/** /**
@@ -30,6 +31,8 @@ import org.hibernate.dialect.Dialect;
*/ */
public class SchemaComparator 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 referenceSchema;
private final Schema targetSchema; private final Schema targetSchema;
private final DiffContext ctx; private final DiffContext ctx;

View File

@@ -62,9 +62,9 @@ public class SchemaToXML
// It was worth a try // It was worth a try
} }
t.setOutputProperty(OutputKeys.INDENT, "yes"); t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.ENCODING, SchemaComparator.CHAR_SET);
xmlOut.setResult(streamResult); xmlOut.setResult(streamResult);
this.schema = schema; this.schema = schema;
} }