You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2007/04/22 22:17:55 UTC
svn commit: r531264 - in
/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core:
jobs/ExportCsvJob.java jobs/ExportXlsJob.java utils/LdifUtils.java
Author: seelmann
Date: Sun Apr 22 13:17:54 2007
New Revision: 531264
URL: http://svn.apache.org/viewvc?view=rev&rev=531264
Log:
Fix for DIRSTUDIO-82. Improved test if a value could be encoded to the requested encoding.
Modified:
directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportCsvJob.java
directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportXlsJob.java
directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/utils/LdifUtils.java
Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportCsvJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportCsvJob.java?view=diff&rev=531264&r1=531263&r2=531264
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportCsvJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportCsvJob.java Sun Apr 22 13:17:54 2007
@@ -25,6 +25,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -34,6 +35,7 @@
import org.apache.directory.ldapstudio.browser.core.BrowserCoreConstants;
import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.internal.model.AttributeDescription;
import org.apache.directory.ldapstudio.browser.core.internal.model.ConnectionException;
import org.apache.directory.ldapstudio.browser.core.internal.model.ReferralException;
import org.apache.directory.ldapstudio.browser.core.model.IConnection;
@@ -124,11 +126,11 @@
bufferedWriter.write( attributeDelimiter );
}
bufferedWriter.write( BrowserCoreConstants.LINE_SEPARATOR );
-
+
// export
int count = 0;
export( connection, searchParameter, bufferedWriter, count, monitor, exportAttributes, attributeDelimiter,
- valueDelimiter, quoteCharacter, lineSeparator, binaryEncoding, exportDn );
+ valueDelimiter, quoteCharacter, lineSeparator, encoding, binaryEncoding, exportDn );
// close file
bufferedWriter.close();
@@ -145,7 +147,7 @@
private static void export( IConnection connection, SearchParameter searchParameter, BufferedWriter bufferedWriter,
int count, ExtendedProgressMonitor monitor, String[] attributes, String attributeDelimiter,
- String valueDelimiter, String quoteCharacter, String lineSeparator, int binaryEncoding, boolean exportDn )
+ String valueDelimiter, String quoteCharacter, String lineSeparator, String encoding, int binaryEncoding, boolean exportDn )
throws IOException, ConnectionException
{
try
@@ -160,8 +162,8 @@
{
LdifContentRecord record = ( LdifContentRecord ) container;
- bufferedWriter.write( recordToCsv( record, attributes, attributeDelimiter, valueDelimiter,
- quoteCharacter, lineSeparator, binaryEncoding, exportDn ) );
+ bufferedWriter.write( recordToCsv( connection, record, attributes, attributeDelimiter, valueDelimiter,
+ quoteCharacter, lineSeparator, encoding, binaryEncoding, exportDn ) );
count++;
monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__export_progress,
@@ -198,7 +200,7 @@
// export recursive
export( referralSearch.getConnection(), referralSearch.getSearchParameter(), bufferedWriter,
count, monitor, attributes, attributeDelimiter, valueDelimiter, quoteCharacter,
- lineSeparator, binaryEncoding, exportDn );
+ lineSeparator, encoding, binaryEncoding, exportDn );
}
}
}
@@ -211,12 +213,12 @@
}
- private static String recordToCsv( LdifContentRecord record, String[] attributes, String attributeDelimiter,
- String valueDelimiter, String quoteCharacter, String lineSeparator, int binaryEncoding, boolean exportDn )
+ private static String recordToCsv( IConnection connection, LdifContentRecord record, String[] attributes, String attributeDelimiter,
+ String valueDelimiter, String quoteCharacter, String lineSeparator, String encoding, int binaryEncoding, boolean exportDn )
{
// group multi-valued attributes
- Map attributeMap = getAttributeMap( record, valueDelimiter, binaryEncoding );
+ Map attributeMap = getAttributeMap( connection, record, valueDelimiter, encoding, binaryEncoding );
// print attributes
StringBuffer sb = new StringBuffer();
@@ -233,9 +235,11 @@
{
String attributeName = attributes[i];
- if ( attributeMap.containsKey( attributeName ) )
+ AttributeDescription ad = new AttributeDescription( attributeName );
+ String oidString = ad.toOidString( connection.getSchema() );
+ if ( attributeMap.containsKey( oidString ) )
{
- String value = ( String ) attributeMap.get( attributeName );
+ String value = ( String ) attributeMap.get( oidString );
// escape
value = value.replaceAll( quoteCharacter, quoteCharacter + quoteCharacter );
@@ -259,18 +263,22 @@
}
- static Map getAttributeMap( LdifContentRecord record, String valueDelimiter, int binaryEncoding )
+ static Map getAttributeMap( IConnection connection, LdifContentRecord record, String valueDelimiter, String encoding, int binaryEncoding )
{
Map attributeMap = new HashMap();
LdifAttrValLine[] lines = record.getAttrVals();
for ( int i = 0; i < lines.length; i++ )
{
String attributeName = lines[i].getUnfoldedAttributeDescription();
-
- if ( LdifUtils.mustEncode( lines[i].getValueAsBinary() ) )
+ if ( connection != null )
+ {
+ // convert attributeName to oid
+ AttributeDescription ad = new AttributeDescription( attributeName );
+ attributeName = ad.toOidString( connection.getSchema() );
+ }
+ String value = lines[i].getValueAsString();
+ if ( ! Charset.forName( encoding ).newEncoder().canEncode( value ) )
{
-
- String value = BrowserCoreConstants.BINARY;
if ( binaryEncoding == BrowserCoreConstants.BINARYENCODING_BASE64 )
{
value = LdifUtils.base64encode( lines[i].getValueAsBinary() );
@@ -279,6 +287,10 @@
{
value = LdifUtils.hexEncode( lines[i].getValueAsBinary() );
}
+ else
+ {
+ value = BrowserCoreConstants.BINARY;
+ }
if ( attributeMap.containsKey( attributeName ) )
{
@@ -292,7 +304,6 @@
}
else
{
- String value = lines[i].getValueAsString();
if ( attributeMap.containsKey( attributeName ) )
{
String oldValue = ( String ) attributeMap.get( attributeName );
Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportXlsJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportXlsJob.java?view=diff&rev=531264&r1=531263&r2=531264
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportXlsJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/ExportXlsJob.java Sun Apr 22 13:17:54 2007
@@ -33,6 +33,7 @@
import org.apache.directory.ldapstudio.browser.core.BrowserCoreConstants;
import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.internal.model.AttributeDescription;
import org.apache.directory.ldapstudio.browser.core.internal.model.ConnectionException;
import org.apache.directory.ldapstudio.browser.core.internal.model.ReferralException;
import org.apache.directory.ldapstudio.browser.core.model.IConnection;
@@ -189,7 +190,7 @@
if ( container instanceof LdifContentRecord )
{
LdifContentRecord record = ( LdifContentRecord ) container;
- recordToHSSFRow( record, sheet, headerRow, attributeNameMap, valueDelimiter, binaryEncoding,
+ recordToHSSFRow( connection, record, sheet, headerRow, attributeNameMap, valueDelimiter, binaryEncoding,
exportDn );
count++;
@@ -240,12 +241,12 @@
}
- private static void recordToHSSFRow( LdifContentRecord record, HSSFSheet sheet, HSSFRow headerRow,
+ private static void recordToHSSFRow( IConnection connection, LdifContentRecord record, HSSFSheet sheet, HSSFRow headerRow,
Map headerRowAttributeNameMap, String valueDelimiter, int binaryEncoding, boolean exportDn )
{
// group multi-valued attributes
- Map attributeMap = ExportCsvJob.getAttributeMap( record, valueDelimiter, binaryEncoding );
+ Map attributeMap = ExportCsvJob.getAttributeMap( null, record, valueDelimiter, "UTF-16", binaryEncoding );
// output attributes
HSSFRow row = sheet.createRow( sheet.getLastRowNum() + 1 );
Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/utils/LdifUtils.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/utils/LdifUtils.java?view=diff&rev=531264&r1=531263&r2=531264
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/utils/LdifUtils.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/utils/LdifUtils.java Sun Apr 22 13:17:54 2007
@@ -171,42 +171,6 @@
/**
- * Checks if the given byte array must be encoded to be
- * used in an LDIF.
- *
- * @param b the b the byte array to check
- *
- * @return true, if must encode
- */
- public static boolean mustEncode( byte[] b )
- {
- if ( b == null || b.length < 1 )
- {
- return false;
- }
-
- if ( b[0] == ' ' || b[0] == ':' || b[0] == '<' )
- {
- return true;
- }
- if ( b[b.length - 1] == ' ' )
- {
- return true;
- }
-
- for ( int i = 0; i < b.length; i++ )
- {
- if ( b[i] == '\n' || b[i] == '\r' || b[i] == '\u0000' || ( ( b[i] & 0x7F ) != 0x7F ) )
- {
- return true;
- }
- }
-
- return false;
- }
-
-
- /**
* Checks if the given string must be encoded to be
* used in an LDIF.
*
@@ -255,10 +219,10 @@
*/
public static String getStringValue( IValue value, int binaryEncoding )
{
- String s;
- byte[] binary = value.getBinaryValue();
- if ( value.isBinary() && LdifUtils.mustEncode( binary ) )
+ String s = value.getStringValue();
+ if ( value.isBinary() && LdifUtils.mustEncode( s ) )
{
+ byte[] binary = value.getBinaryValue();
if ( binaryEncoding == BrowserCoreConstants.BINARYENCODING_BASE64 )
{
s = LdifUtils.base64encode( binary );
@@ -271,11 +235,6 @@
{
s = BrowserCoreConstants.BINARY;
}
- }
- else
- {
- s = value.getStringValue();
-
}
return s;
}