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 2009/07/25 19:04:53 UTC
svn commit: r797798 -
/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java
Author: seelmann
Date: Sat Jul 25 17:04:53 2009
New Revision: 797798
URL: http://svn.apache.org/viewvc?rev=797798&view=rev
Log:
Fix for DIRSTUDIO-506 (Export Schemas for ApacheDS: object classes must be sorted by hierarchy)
Modified:
directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java?rev=797798&r1=797797&r2=797798&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ExportSchemasForADSWizard.java Sat Jul 25 17:04:53 2009
@@ -28,6 +28,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -349,7 +350,8 @@
sb.append( "\n" ); //$NON-NLS-1$
// Generating LDIF for Object Classes
- for ( ObjectClassImpl oc : schema.getObjectClasses() )
+ List<ObjectClassImpl> sortedObjectClasses = getSortedObjectClasses( schema.getObjectClasses() );
+ for ( ObjectClassImpl oc : sortedObjectClasses )
{
ObjectClassHolder holder = new ObjectClassHolder( oc.getOid() );
holder.setClassType( oc.getType() );
@@ -400,6 +402,66 @@
/**
+ * Sorts the object classes by hierarchy.
+ *
+ * @param objectClasses the unsorted object classes
+ * @return the sorted object classes
+ */
+ private List<ObjectClassImpl> getSortedObjectClasses( List<ObjectClassImpl> objectClasses )
+ {
+ // clone the unsorted list
+ List<ObjectClassImpl> unsortedObjectClasses = new ArrayList<ObjectClassImpl>( objectClasses );
+
+ // list of all existing names
+ Set<String> objectClassNames = new HashSet<String>();
+ for ( ObjectClassImpl oc : unsortedObjectClasses )
+ {
+ for ( String name : oc.getNamesRef() )
+ {
+ objectClassNames.add( name.toLowerCase() );
+ }
+ }
+
+ // sort object classes
+ List<ObjectClassImpl> sortedObjectClasses = new ArrayList<ObjectClassImpl>();
+ Set<String> movedObjectClasses = new HashSet<String>();
+ boolean moved = true;
+ while ( !unsortedObjectClasses.isEmpty() && moved )
+ {
+ moved = false;
+ Iterator<ObjectClassImpl> unsortedIterator = unsortedObjectClasses.iterator();
+ while ( unsortedIterator.hasNext() )
+ {
+ ObjectClassImpl oc = unsortedIterator.next();
+ for ( String superName : oc.getSuperClassesNames() )
+ {
+ if ( !objectClassNames.contains( superName.toLowerCase() )
+ || movedObjectClasses.contains( superName.toLowerCase() ) )
+ {
+ unsortedIterator.remove();
+ sortedObjectClasses.add( oc );
+ for ( String name : oc.getNamesRef() )
+ {
+ movedObjectClasses.add( name.toLowerCase() );
+ }
+ moved = true;
+ break;
+ }
+ }
+ }
+ }
+
+ // add the rest
+ for ( ObjectClassImpl oc : unsortedObjectClasses )
+ {
+ sortedObjectClasses.add( oc );
+ }
+
+ return sortedObjectClasses;
+ }
+
+
+ /**
* Gets the schema dependencies.
*
* @param schema