mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-30 18:15:39 +00:00
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:
parent
4b2695745e
commit
d021543bce
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -1,54 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Test data used by the XMLToSchemaTest junit test class.
|
||||
-->
|
||||
<schema name="alfresco">
|
||||
<objects>
|
||||
<table name="node">
|
||||
<columns>
|
||||
<column name="id">
|
||||
<type>NUMBER(10)</type>
|
||||
<nullable>false</nullable>
|
||||
</column>
|
||||
<column name="nodeRef">
|
||||
<type>VARCHAR2(200)</type>
|
||||
<nullable>false</nullable>
|
||||
</column>
|
||||
<column name="name">
|
||||
<type>VARCHAR2(150)</type>
|
||||
<nullable>true</nullable>
|
||||
</column>
|
||||
</columns>
|
||||
<primarykey name="pk_node">
|
||||
<columnnames>
|
||||
<columnname>id</columnname>
|
||||
</columnnames>
|
||||
</primarykey>
|
||||
<foreignkeys>
|
||||
<foreignkey name="fk_node_noderef">
|
||||
<localcolumn>nodeRef</localcolumn>
|
||||
<targettable>node</targettable>
|
||||
<targetcolumn>nodeRef</targetcolumn>
|
||||
</foreignkey>
|
||||
</foreignkeys>
|
||||
<indexes>
|
||||
<index name="idx_node_by_id" unique="true">
|
||||
<columnnames>
|
||||
<columnname>id</columnname>
|
||||
<columnname>nodeRef</columnname>
|
||||
</columnnames>
|
||||
<validators>
|
||||
<validator class="org.alfresco.util.schemacomp.validator.NameValidator">
|
||||
<properties>
|
||||
<property name="pattern">idx_.+</property>
|
||||
</properties>
|
||||
</validator>
|
||||
</validators>
|
||||
</index>
|
||||
</indexes>
|
||||
</table>
|
||||
<sequence name="node_seq"/>
|
||||
<sequence name="person_seq"/>
|
||||
<sequence name="content_seq"/>
|
||||
</objects>
|
||||
</schema>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Test data used by the XMLToSchemaTest junit test class.
|
||||
-->
|
||||
<schema name="alfresco">
|
||||
<objects>
|
||||
<table name="node">
|
||||
<columns>
|
||||
<column name="id">
|
||||
<type>NUMBER(10)</type>
|
||||
<nullable>false</nullable>
|
||||
</column>
|
||||
<column name="nodeRef">
|
||||
<type>VARCHAR2(200)</type>
|
||||
<nullable>false</nullable>
|
||||
</column>
|
||||
<column name="name">
|
||||
<type>VARCHAR2(150)</type>
|
||||
<nullable>true</nullable>
|
||||
</column>
|
||||
</columns>
|
||||
<primarykey name="pk_node">
|
||||
<columnnames>
|
||||
<columnname>id</columnname>
|
||||
</columnnames>
|
||||
</primarykey>
|
||||
<foreignkeys>
|
||||
<foreignkey name="fk_node_noderef">
|
||||
<localcolumn>nodeRef</localcolumn>
|
||||
<targettable>node</targettable>
|
||||
<targetcolumn>nodeRef</targetcolumn>
|
||||
</foreignkey>
|
||||
</foreignkeys>
|
||||
<indexes>
|
||||
<index name="idx_node_by_id" unique="true">
|
||||
<columnnames>
|
||||
<columnname>id</columnname>
|
||||
<columnname>nodeRef</columnname>
|
||||
</columnnames>
|
||||
<validators>
|
||||
<validator class="org.alfresco.util.schemacomp.validator.NameValidator">
|
||||
<properties>
|
||||
<property name="pattern">idx_.+</property>
|
||||
</properties>
|
||||
</validator>
|
||||
</validators>
|
||||
</index>
|
||||
</indexes>
|
||||
</table>
|
||||
<sequence name="node_seq"/>
|
||||
<sequence name="person_seq"/>
|
||||
<sequence name="content_seq"/>
|
||||
</objects>
|
||||
</schema>
|
||||
|
Loading…
x
Reference in New Issue
Block a user