/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.directory.studio.ldapbrowser.ui.dialogs; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.ldifparser.LdifUtils; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class EncoderDecoderDialog extends Dialog { private Text iso88591Text; private Text iso88591HexText; private Text utf8Text; private Text utf8HexText; private Text base64Text; private Text errorText; private boolean inModify = false; public EncoderDecoderDialog( Shell parentShell ) { super( parentShell ); super.setShellStyle( super.getShellStyle() | SWT.RESIZE ); } protected void configureShell( Shell shell ) { super.configureShell( shell ); shell.setText( Messages.getString( "EncoderDecoderDialog.LDAPEncodeDecoder" ) ); //$NON-NLS-1$ //shell.setImage( BrowserUIPlugin.getDefault().getImage( BrowserUIConstants.IMG_IMAGEEDITOR ) ); } protected Control createDialogArea( Composite parent ) { Composite composite2 = ( Composite ) super.createDialogArea( parent ); GridData gd1 = new GridData( GridData.FILL_BOTH ); gd1.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ); gd1.heightHint = convertVerticalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH ); composite2.setLayoutData( gd1 ); Composite composite = BaseWidgetUtils.createColumnContainer( composite2, 2, 1 ); composite.setLayoutData( new GridData( GridData.FILL_BOTH ) ); Label iso8859Label = new Label( composite, SWT.NONE ); iso8859Label.setText( Messages.getString( "EncoderDecoderDialog.ISOColon" ) ); //$NON-NLS-1$ iso88591Text = new Text( composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL ); GridData gd = new GridData( GridData.FILL_BOTH ); iso88591Text.setLayoutData( gd ); Label iso8859HexLabel = new Label( composite, SWT.NONE ); iso8859HexLabel.setText( Messages.getString( "EncoderDecoderDialog.ISOHex" ) ); //$NON-NLS-1$ iso88591HexText = new Text( composite, SWT.BORDER | SWT.READ_ONLY ); iso88591HexText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); Label utf8Label = new Label( composite, SWT.NONE ); utf8Label.setText( Messages.getString( "EncoderDecoderDialog.UTF" ) ); //$NON-NLS-1$ utf8Text = new Text( composite, SWT.BORDER ); utf8Text.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); Label utf8HexLabel = new Label( composite, SWT.NONE ); utf8HexLabel.setText( Messages.getString( "EncoderDecoderDialog.UTFHex" ) ); //$NON-NLS-1$ utf8HexText = new Text( composite, SWT.BORDER | SWT.READ_ONLY ); utf8HexText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); Label base64Label = new Label( composite, SWT.NONE ); base64Label.setText( Messages.getString( "EncoderDecoderDialog.BASE" ) ); //$NON-NLS-1$ base64Text = new Text( composite, SWT.BORDER ); base64Text.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); errorText = new Text( composite, SWT.BORDER | SWT.READ_ONLY ); gd = new GridData( GridData.FILL_HORIZONTAL ); gd.horizontalSpan = 2; errorText.setLayoutData( gd ); iso88591Text.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { if ( !inModify ) { inModify = true; try { String isoString = iso88591Text.getText(); byte[] isoBytes = isoString.getBytes( "ISO-8859-1" ); //$NON-NLS-1$ String utf8String = new String( isoBytes, "UTF-8" ); //$NON-NLS-1$ iso88591HexText.setText( LdifUtils.hexEncode( isoBytes ) ); utf8Text.setText( utf8String ); utf8HexText.setText( LdifUtils.hexEncode( utf8String.getBytes( "UTF-8" ) ) ); //$NON-NLS-1$ base64Text.setText( LdifUtils.base64encode( isoBytes ) ); errorText.setText( "" ); //$NON-NLS-1$ } catch ( Exception ex ) { errorText.setText( ex.getMessage() ); ex.printStackTrace(); } finally { inModify = false; } } } } ); utf8Text.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { if ( !inModify ) { inModify = true; try { String utf8String = utf8Text.getText(); byte[] utf8Bytes = utf8String.getBytes( "UTF-8" ); //$NON-NLS-1$ String isoString = new String( utf8Bytes, "ISO-8859-1" ); //$NON-NLS-1$ iso88591Text.setText( isoString ); iso88591HexText.setText( LdifUtils.hexEncode( isoString.getBytes( "ISO-8859-1" ) ) ); //$NON-NLS-1$ utf8HexText.setText( LdifUtils.hexEncode( utf8Bytes ) ); base64Text.setText( LdifUtils.base64encode( utf8Bytes ) ); errorText.setText( "" ); //$NON-NLS-1$ } catch ( Exception ex ) { errorText.setText( ex.getMessage() ); ex.printStackTrace(); } finally { inModify = false; } } } } ); base64Text.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { if ( !inModify ) { inModify = true; try { byte[] base64Bytes = LdifUtils.base64decodeToByteArray( base64Text.getText() ); String isoString = new String( base64Bytes, "ISO-8859-1" ); //$NON-NLS-1$ String utf8String = LdifUtils.utf8decode( base64Bytes ); iso88591Text.setText( isoString ); iso88591HexText.setText( LdifUtils.hexEncode( isoString.getBytes( "ISO-8859-1" ) ) ); //$NON-NLS-1$ utf8Text.setText( utf8String ); utf8HexText.setText( LdifUtils.hexEncode( utf8String.getBytes( "UTF-8" ) ) ); //$NON-NLS-1$ errorText.setText( "" ); //$NON-NLS-1$ } catch ( Exception ex ) { errorText.setText( ex.getMessage() ); ex.printStackTrace(); } finally { inModify = false; } } } } ); return composite; } }