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/28 19:46:13 UTC
svn commit: r798617 [2/2] - in
/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor:
./ controller/ controller/actions/ model/ model/io/ view/dialogs/
view/wizards/
Added: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/MergeSchemasWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/MergeSchemasWizard.java?rev=798617&view=auto
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/MergeSchemasWizard.java (added)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/MergeSchemasWizard.java Tue Jul 28 17:46:12 2009
@@ -0,0 +1,570 @@
+/*
+ * 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.schemaeditor.view.wizards;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.directory.shared.ldap.schema.AbstractSchemaObject;
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.model.AttributeTypeImpl;
+import org.apache.directory.studio.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.schemaeditor.model.Project;
+import org.apache.directory.studio.schemaeditor.model.Schema;
+import org.apache.directory.studio.schemaeditor.model.SchemaImpl;
+import org.apache.directory.studio.schemaeditor.view.dialogs.MessageDialogWithTextarea;
+import org.apache.directory.studio.schemaeditor.view.wizards.MergeSchemasSelectionWizardPage.AttributeTypeFolder;
+import org.apache.directory.studio.schemaeditor.view.wizards.MergeSchemasSelectionWizardPage.ObjectClassFolder;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+
+/**
+ * This class represents the wizard to merge schema projects.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class MergeSchemasWizard extends Wizard implements IImportWizard
+{
+ // The pages of the wizard
+ private MergeSchemasSelectionWizardPage selectionPage;
+ private MergeSchemasOptionsWizardPage optionsPage;
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#addPages()
+ */
+ public void addPages()
+ {
+ // Creating pages
+ selectionPage = new MergeSchemasSelectionWizardPage();
+ optionsPage = new MergeSchemasOptionsWizardPage();
+
+ // Adding pages
+ addPage( selectionPage );
+ addPage( optionsPage );
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ public boolean performFinish()
+ {
+ Object[] sourceObjects = selectionPage.getSelectedObjects();
+
+ boolean replaceUnknownSyntax = optionsPage.isReplaceUnknownSyntax();
+ boolean mergeDependencies = optionsPage.isMergeDependencies();
+ boolean pullUpAttributes = optionsPage.isPullUpAttributes();
+
+ List<String> errorMessages = new ArrayList<String>();
+ mergeObjects( sourceObjects, errorMessages, replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ if ( !errorMessages.isEmpty() )
+ {
+ StringBuilder sb = new StringBuilder();
+ for ( String errorMessage : errorMessages )
+ {
+ sb.append( errorMessage );
+ sb.append( '\n' );
+ }
+ new MessageDialogWithTextarea( getShell(), Messages.getString( "MergeSchemasWizard.MergeResultTitle" ),
+ Messages.getString( "MergeSchemasWizard.MergeResultMessage" ), sb.toString() ).open();
+ }
+
+ return true;
+ }
+
+
+ private void mergeObjects( Object[] sourceObjects, List<String> errorMessages, boolean replaceUnknownSyntax,
+ boolean mergeDependencies, boolean pullUpAttributes )
+ {
+ /*
+ * List of already processed schema objects. Used to avoid that schema objects are process multiple time.
+ */
+ Set<Object> processedObjects = new HashSet<Object>();
+
+ /*
+ * List of created target schemas.
+ */
+ Map<String, Schema> targetSchemas = new HashMap<String, Schema>();
+
+ Project targetProject = Activator.getDefault().getProjectsHandler().getOpenProject();
+
+ // merge all source objects to the target project
+ for ( Object sourceObject : sourceObjects )
+ {
+ if ( sourceObject instanceof Project )
+ {
+ Project sourceProject = ( Project ) sourceObject;
+ for ( Schema sourceSchema : sourceProject.getSchemaHandler().getSchemas() )
+ {
+ Schema targetSchema = getTargetSchema( sourceSchema.getProject(), targetProject, targetSchemas );
+ mergeSchema( sourceSchema, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+ if ( sourceObject instanceof Schema )
+ {
+ Schema sourceSchema = ( Schema ) sourceObject;
+ Schema targetSchema = getTargetSchema( sourceSchema.getProject(), targetProject, targetSchemas );
+ mergeSchema( sourceSchema, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ if ( sourceObject instanceof AttributeTypeFolder )
+ {
+ AttributeTypeFolder atf = ( AttributeTypeFolder ) sourceObject;
+ Schema targetSchema = getTargetSchema( atf.schema.getProject(), targetProject, targetSchemas );
+ List<AttributeTypeImpl> sourceAttributeTypes = atf.schema.getAttributeTypes();
+ for ( AttributeTypeImpl sourceAttributeType : sourceAttributeTypes )
+ {
+ mergeAttributeType( sourceAttributeType, targetProject, targetSchema, processedObjects,
+ errorMessages, replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+ if ( sourceObject instanceof ObjectClassFolder )
+ {
+ ObjectClassFolder ocf = ( ObjectClassFolder ) sourceObject;
+ Schema targetSchema = getTargetSchema( ocf.schema.getProject(), targetProject, targetSchemas );
+ List<ObjectClassImpl> sourceObjectClasses = ocf.schema.getObjectClasses();
+ for ( ObjectClassImpl sourceObjectClass : sourceObjectClasses )
+ {
+ mergeObjectClass( sourceObjectClass, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+ if ( sourceObject instanceof AttributeTypeImpl )
+ {
+ AttributeTypeImpl at = ( AttributeTypeImpl ) sourceObject;
+ Schema targetSchema = getTargetSchema( at.getSchemaObject().getProject(), targetProject, targetSchemas );
+ mergeAttributeType( at, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ if ( sourceObject instanceof ObjectClassImpl )
+ {
+ ObjectClassImpl oc = ( ObjectClassImpl ) sourceObject;
+ Schema targetSchema = getTargetSchema( oc.getSchemaObject().getProject(), targetProject, targetSchemas );
+ mergeObjectClass( oc, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+
+ //add created target schemas to project
+ for ( Schema targetSchema : targetSchemas.values() )
+ {
+ if ( !targetProject.getSchemaHandler().getSchemas().contains( targetSchema ) )
+ {
+ targetProject.getSchemaHandler().addSchema( targetSchema );
+ }
+ }
+ }
+
+
+ private Schema getTargetSchema( Project sourceProject, Project targetProject, Map<String, Schema> targetSchemas )
+ {
+ String targetSchemaName = "merge-from-" + sourceProject.getName();
+ Schema targetSchema = targetProject.getSchemaHandler().getSchema( targetSchemaName );
+ if ( targetSchema != null )
+ {
+ targetProject.getSchemaHandler().removeSchema( targetSchema );
+ }
+ else if ( targetSchemas.containsKey( targetSchemaName ) )
+ {
+ targetSchema = targetSchemas.get( targetSchemaName );
+ }
+ else
+ {
+ targetSchema = new SchemaImpl( targetSchemaName );
+ targetSchema.setProject( targetProject );
+ }
+ targetSchemas.put( targetSchemaName, targetSchema );
+ return targetSchema;
+ }
+
+
+ /**
+ * Merges all attribute types and object classes and form the given sourceSchema to the targetSchema.
+ */
+ private void mergeSchema( Schema sourceSchema, Project targetProject, Schema targetSchema,
+ Set<Object> processedObjects, List<String> errorMessages, boolean replaceUnknownSyntax,
+ boolean mergeDependencies, boolean pullUpAttributes )
+ {
+ List<AttributeTypeImpl> sourceAttributeTypes = sourceSchema.getAttributeTypes();
+ for ( AttributeTypeImpl sourceAttributeType : sourceAttributeTypes )
+ {
+ mergeAttributeType( sourceAttributeType, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+
+ List<ObjectClassImpl> sourceObjectClasses = sourceSchema.getObjectClasses();
+ for ( ObjectClassImpl sourceObjectClass : sourceObjectClasses )
+ {
+ mergeObjectClass( sourceObjectClass, targetProject, targetSchema, processedObjects, errorMessages,
+ replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+
+
+ /**
+ * Merges the given attribute type to the targetSchema.
+ */
+ private void mergeAttributeType( AttributeTypeImpl sourceAttributeType, Project targetProject, Schema targetSchema,
+ Set<Object> processedObjects, List<String> errorMessages, boolean replaceUnknownSyntax,
+ boolean mergeDependencies, boolean pullUpAttributes )
+ {
+ if ( processedObjects.contains( sourceAttributeType ) )
+ {
+ return;
+ }
+ processedObjects.add( sourceAttributeType );
+
+ // check if attribute (identified by OID or name) already exists in the project
+ AttributeTypeImpl targetAttributeType = targetProject.getSchemaHandler().getAttributeType(
+ sourceAttributeType.getOid() );
+ if ( targetAttributeType == null )
+ {
+ for ( String name : sourceAttributeType.getNamesRef() )
+ {
+ targetAttributeType = targetProject.getSchemaHandler().getAttributeType( name );
+ if ( targetAttributeType != null )
+ {
+ break;
+ }
+ }
+ }
+
+ // check if OID or alias name already exist in target project
+ boolean oidOrAliasAlreadyTaken = targetProject.getSchemaHandler().isAliasOrOidAlreadyTaken(
+ sourceAttributeType.getOid() );
+ if ( !oidOrAliasAlreadyTaken )
+ {
+ for ( String name : sourceAttributeType.getNamesRef() )
+ {
+ oidOrAliasAlreadyTaken = targetProject.getSchemaHandler().isAliasOrOidAlreadyTaken( name );
+ if ( oidOrAliasAlreadyTaken )
+ {
+ break;
+ }
+ }
+ }
+
+ if ( targetAttributeType != null )
+ {
+ errorMessages.add( NLS.bind( Messages.getString( "MergeSchemasWizard.AttributeTypeExistsInTargetProject" ),
+ getIdString( sourceAttributeType ) ) );
+ }
+ else
+ {
+ if ( oidOrAliasAlreadyTaken )
+ {
+ errorMessages.add( NLS.bind( Messages.getString( "MergeSchemasWizard.OidOrAliasAlreadyTaken" ),
+ getIdString( sourceAttributeType ) ) );
+ }
+ else
+ {
+ // remove attribute type if already there from previous merge
+ AttributeTypeImpl at = targetSchema.getAttributeType( sourceAttributeType.getOid() );
+ if ( at != null )
+ {
+ targetSchema.removeAttributeType( at );
+ }
+
+ // clone attribute type
+ AttributeTypeImpl clonedAttributeType = new AttributeTypeImpl( sourceAttributeType.getOid() );
+ clonedAttributeType.setOid( sourceAttributeType.getOid() );
+ clonedAttributeType.setNames( sourceAttributeType.getNamesRef() );
+ clonedAttributeType.setDescription( sourceAttributeType.getDescription() );
+ clonedAttributeType.setSuperiorName( sourceAttributeType.getSuperiorName() );
+ clonedAttributeType.setUsage( sourceAttributeType.getUsage() );
+ clonedAttributeType.setSyntaxOid( sourceAttributeType.getSyntaxOid() );
+ clonedAttributeType.setLength( sourceAttributeType.getLength() );
+ clonedAttributeType.setObsolete( sourceAttributeType.isObsolete() );
+ clonedAttributeType.setCollective( sourceAttributeType.isCollective() );
+ clonedAttributeType.setSingleValue( sourceAttributeType.isSingleValue() );
+ clonedAttributeType.setCanUserModify( sourceAttributeType.isCanUserModify() );
+ clonedAttributeType.setEqualityName( sourceAttributeType.getEqualityName() );
+ clonedAttributeType.setOrderingName( sourceAttributeType.getOrderingName() );
+ clonedAttributeType.setSubstrName( sourceAttributeType.getSubstrName() );
+ clonedAttributeType.setSchema( targetSchema.getName() );
+ clonedAttributeType.setSchemaObject( targetSchema );
+
+ // if no/unknown syntax: set "Directory String" syntax and appropriate matching rules
+ if ( replaceUnknownSyntax )
+ {
+ if ( clonedAttributeType.getSyntaxOid() == null
+ || targetProject.getSchemaHandler().getSyntax( clonedAttributeType.getSyntaxOid() ) == null )
+ {
+ errorMessages.add( NLS.bind( Messages.getString( "MergeSchemasWizard.ReplacedSyntax" ),
+ new String[]
+ { getIdString( sourceAttributeType ), clonedAttributeType.getSyntaxOid(),
+ "1.3.6.1.4.1.1466.115.121.1.15 (Directory String)" } ) );
+ clonedAttributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.15" );
+ clonedAttributeType.setEqualityName( "caseIgnoreMatch" );
+ clonedAttributeType.setOrderingName( null );
+ clonedAttributeType.setSubstrName( "caseIgnoreSubstringsMatch" );
+ }
+ }
+ // TODO: if unknown (single) matching rule: set appropriate matching rule according to syntax
+ // TODO: if no (all) matching rules: set appropriate matching rules according to syntax
+
+ // merge dependencies: super attribute type
+ if ( mergeDependencies )
+ {
+ String superiorName = clonedAttributeType.getSuperiorName();
+ if ( superiorName != null )
+ {
+ AttributeTypeImpl superiorAttributeType = sourceAttributeType.getSchemaObject().getProject()
+ .getSchemaHandler().getAttributeType( superiorName );
+ if ( superiorAttributeType != null )
+ {
+ mergeAttributeType( superiorAttributeType, targetProject, targetSchema, processedObjects,
+ errorMessages, replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+ }
+
+ targetSchema.addAttributeType( clonedAttributeType );
+ }
+ }
+ }
+
+
+ /**
+ * Merges the given object class to the targetSchema.
+ */
+ private void mergeObjectClass( ObjectClassImpl sourceObjectClass, Project targetProject, Schema targetSchema,
+ Set<Object> processedObjects, List<String> errorMessages, boolean replaceUnknownSyntax,
+ boolean mergeDependencies, boolean pullUpAttributes )
+ {
+ if ( processedObjects.contains( sourceObjectClass ) )
+ {
+ return;
+ }
+ processedObjects.add( sourceObjectClass );
+
+ // check if object class (identified by OID or alias name) already exists in the target project
+ ObjectClassImpl targetObjectClass = targetProject.getSchemaHandler()
+ .getObjectClass( sourceObjectClass.getOid() );
+ if ( targetObjectClass == null )
+ {
+ for ( String name : sourceObjectClass.getNamesRef() )
+ {
+ targetObjectClass = targetProject.getSchemaHandler().getObjectClass( name );
+ if ( targetObjectClass != null )
+ {
+ break;
+ }
+ }
+ }
+
+ // check if OID or alias name already exist in target project
+ boolean oidOrAliasAlreadyTaken = targetProject.getSchemaHandler().isAliasOrOidAlreadyTaken(
+ sourceObjectClass.getOid() );
+ if ( !oidOrAliasAlreadyTaken )
+ {
+ for ( String name : sourceObjectClass.getNamesRef() )
+ {
+ oidOrAliasAlreadyTaken = targetProject.getSchemaHandler().isAliasOrOidAlreadyTaken( name );
+ if ( oidOrAliasAlreadyTaken )
+ {
+ break;
+ }
+ }
+ }
+
+ if ( targetObjectClass != null )
+ {
+ errorMessages.add( NLS.bind( Messages.getString( "MergeSchemasWizard.ObjectClassExistsInTargetProject" ),
+ getIdString( sourceObjectClass ) ) );
+ }
+ else
+ {
+ if ( oidOrAliasAlreadyTaken )
+ {
+ errorMessages.add( NLS.bind( Messages.getString( "MergeSchemasWizard.OidOrAliasAlreadyTaken" ),
+ getIdString( sourceObjectClass ) ) );
+ }
+ else
+ {
+ // remove object class if already there from previous merge
+ ObjectClassImpl oc = targetSchema.getObjectClass( sourceObjectClass.getOid() );
+ if ( oc != null )
+ {
+ targetSchema.removeObjectClass( oc );
+ }
+
+ // create object class
+ ObjectClassImpl clonedObjectClass = new ObjectClassImpl( sourceObjectClass.getOid() );
+ clonedObjectClass.setOid( sourceObjectClass.getOid() );
+ clonedObjectClass.setNames( sourceObjectClass.getNamesRef() );
+ clonedObjectClass.setDescription( sourceObjectClass.getDescription() );
+ clonedObjectClass.setSuperClassesNames( sourceObjectClass.getSuperClassesNames() );
+ clonedObjectClass.setType( sourceObjectClass.getType() );
+ clonedObjectClass.setObsolete( sourceObjectClass.isObsolete() );
+ clonedObjectClass.setMustNamesList( sourceObjectClass.getMustNamesList() );
+ clonedObjectClass.setMayNamesList( sourceObjectClass.getMayNamesList() );
+ clonedObjectClass.setSchema( targetSchema.getName() );
+ clonedObjectClass.setSchemaObject( targetSchema );
+
+ // merge dependencies: super object classes and must/may attributes
+ if ( mergeDependencies )
+ {
+ String[] superClassesNames = clonedObjectClass.getSuperClassesNames();
+ if ( superClassesNames != null )
+ {
+ for ( String superClassName : superClassesNames )
+ {
+ if ( superClassName != null )
+ {
+ ObjectClassImpl superSourceObjectClass = sourceObjectClass.getSchemaObject()
+ .getProject().getSchemaHandler().getObjectClass( superClassName );
+ ObjectClassImpl superTargetObjectClass = targetProject.getSchemaHandler()
+ .getObjectClass( superClassName );
+ if ( superSourceObjectClass != null )
+ {
+ if ( superTargetObjectClass == null )
+ {
+ mergeObjectClass( superSourceObjectClass, targetProject, targetSchema,
+ processedObjects, errorMessages, replaceUnknownSyntax, mergeDependencies,
+ pullUpAttributes );
+ }
+ else
+ {
+ // pull-up may and must attributes to this OC if super already exists in target
+ if ( pullUpAttributes )
+ {
+ pullUpAttributes( clonedObjectClass, superSourceObjectClass,
+ superTargetObjectClass );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ String[] mustNamesList = clonedObjectClass.getMustNamesList();
+ String[] mayNamesList = clonedObjectClass.getMayNamesList();
+ List<String> attributeNames = new ArrayList<String>();
+ if ( mustNamesList != null )
+ {
+ attributeNames.addAll( Arrays.asList( mustNamesList ) );
+ }
+ if ( mayNamesList != null )
+ {
+ attributeNames.addAll( Arrays.asList( mayNamesList ) );
+ }
+ for ( String attributeName : attributeNames )
+ {
+ if ( attributeName != null )
+ {
+ AttributeTypeImpl attributeType = sourceObjectClass.getSchemaObject().getProject()
+ .getSchemaHandler().getAttributeType( attributeName );
+ if ( attributeType != null )
+ {
+ mergeAttributeType( attributeType, targetProject, targetSchema, processedObjects,
+ errorMessages, replaceUnknownSyntax, mergeDependencies, pullUpAttributes );
+ }
+ }
+ }
+ }
+
+ targetSchema.addObjectClass( clonedObjectClass );
+ }
+ }
+ }
+
+
+ private void pullUpAttributes( ObjectClassImpl targetObjectClass, ObjectClassImpl sourceSuperObjectClass,
+ ObjectClassImpl targetSuperObjectClass )
+ {
+ // must
+ Set<String> sourceMustAttributeNames = new HashSet<String>();
+ fetchAttributes( sourceMustAttributeNames, sourceSuperObjectClass, true );
+ Set<String> targetMustAttributeNames = new HashSet<String>();
+ fetchAttributes( targetMustAttributeNames, targetSuperObjectClass, true );
+ sourceMustAttributeNames.removeAll( targetMustAttributeNames );
+ if ( !sourceMustAttributeNames.isEmpty() )
+ {
+ sourceMustAttributeNames.addAll( Arrays.asList( targetObjectClass.getMustNamesList() ) );
+ targetObjectClass.setMustNamesList( sourceMustAttributeNames.toArray( new String[0] ) );
+ }
+
+ // may
+ Set<String> sourceMayAttributeNames = new HashSet<String>();
+ fetchAttributes( sourceMayAttributeNames, sourceSuperObjectClass, false );
+ Set<String> targetMayAttributeNames = new HashSet<String>();
+ fetchAttributes( targetMayAttributeNames, targetSuperObjectClass, false );
+ sourceMayAttributeNames.removeAll( targetMayAttributeNames );
+ if ( !sourceMayAttributeNames.isEmpty() )
+ {
+ sourceMayAttributeNames.addAll( Arrays.asList( targetObjectClass.getMayNamesList() ) );
+ targetObjectClass.setMayNamesList( sourceMayAttributeNames.toArray( new String[0] ) );
+ }
+ }
+
+
+ private void fetchAttributes( Set<String> attributeNameList, ObjectClassImpl oc, boolean must )
+ {
+ String[] attributeNames = must ? oc.getMustNamesList() : oc.getMayNamesList();
+ attributeNameList.addAll( Arrays.asList( attributeNames ) );
+
+ for ( String superClassName : oc.getSuperClassesNames() )
+ {
+ ObjectClassImpl superObjectClass = oc.getSchemaObject().getProject().getSchemaHandler().getObjectClass(
+ superClassName );
+ fetchAttributes( attributeNameList, superObjectClass, must );
+ }
+ }
+
+
+ private String getIdString( AbstractSchemaObject schemaObject )
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append( '[' );
+ if ( schemaObject.getNamesRef() != null )
+ {
+ for ( String name : schemaObject.getNamesRef() )
+ {
+ sb.append( name );
+ sb.append( ',' );
+ }
+ }
+ sb.append( schemaObject.getOid() );
+ sb.append( ']' );
+ return sb.toString();
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init( IWorkbench workbench, IStructuredSelection selection )
+ {
+ }
+}
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeWizard.java?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeWizard.java (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeWizard.java Tue Jul 28 17:46:12 2009
@@ -76,6 +76,7 @@
// Creating the new attribute type
AttributeTypeImpl newAT = new AttributeTypeImpl( generalPage.getOidValue() );
newAT.setSchema( generalPage.getSchemaValue() );
+ newAT.setSchemaObject( Activator.getDefault().getSchemaHandler().getSchema( generalPage.getSchemaValue() ) );
newAT.setNames( generalPage.getAliasesValue() );
newAT.setDescription( generalPage.getDescriptionValue() );
newAT.setSuperiorName( contentPage.getSuperiorValue() );
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewObjectClassWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewObjectClassWizard.java?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewObjectClassWizard.java (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewObjectClassWizard.java Tue Jul 28 17:46:12 2009
@@ -79,6 +79,7 @@
// Creating the new object class
ObjectClassImpl newOC = new ObjectClassImpl( generalPage.getOidValue() );
newOC.setSchema( generalPage.getSchemaValue() );
+ newOC.setSchemaObject( Activator.getDefault().getSchemaHandler().getSchema( generalPage.getSchemaValue() ) );
newOC.setNames( generalPage.getAliasesValue() );
newOC.setDescription( generalPage.getDescriptionValue() );
newOC.setSuperClassesNames( contentPage.getSuperiorsNameValue() );
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewProjectWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewProjectWizard.java?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewProjectWizard.java (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewProjectWizard.java Tue Jul 28 17:46:12 2009
@@ -20,12 +20,13 @@
package org.apache.directory.studio.schemaeditor.view.wizards;
-import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.jobs.StudioProgressMonitor;
+import org.apache.directory.studio.connection.core.jobs.StudioRunnableWithProgress;
+import org.apache.directory.studio.connection.ui.RunnableContextRunner;
import org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.PluginUtils;
@@ -36,10 +37,7 @@
import org.apache.directory.studio.schemaeditor.model.Schema;
import org.apache.directory.studio.schemaeditor.model.io.GenericSchemaConnector;
import org.apache.directory.studio.schemaeditor.model.io.SchemaConnector;
-import org.apache.directory.studio.schemaeditor.view.ViewUtils;
import org.apache.directory.studio.schemaeditor.view.widget.CoreSchemasSelectionWidget.ServerTypeEnum;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
@@ -63,8 +61,6 @@
private NewProjectWizardSchemasSelectionPage schemasSelectionPage;
- private Throwable exceptionThrown = null;
-
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#addPages()
*/
@@ -94,103 +90,87 @@
final Project project = new Project( projectType, projectName );
if ( projectType.equals( ProjectType.ONLINE ) )
- // Project is an "Online Project"
+ // Project is an "Online Project"
{
// Setting the connection to use
project.setConnection( connectionSelectionPage.getSelectedConnection() );
- // Reseting the Exception Thrown
- exceptionThrown = null;
-
- try
+ RunnableContextRunner.execute( new StudioRunnableWithProgress()
{
- getContainer().run( false, false, new IRunnableWithProgress()
+
+ public void run( StudioProgressMonitor monitor )
{
- public void run( IProgressMonitor monitor )
+ // Getting the correct SchemaConnector for this connection
+ List<SchemaConnector> correctSchemaConnectors = getCorrectSchemaConnectors(
+ project.getConnection(), monitor );
+
+ // If no suitable SchemaConnector has been found, we display an
+ // error message and return false;
+ if ( correctSchemaConnectors.size() == 0 )
{
- StudioProgressMonitor studioProgressMonitor = new StudioProgressMonitor( monitor );
-
- // Getting the correct SchemaConnector for this connection
- List<SchemaConnector> correctSchemaConnectors = getCorrectSchemaConnectors( project
- .getConnection(), studioProgressMonitor );
-
- // If no suitable SchemaConnector has been found, we display an
- // error message and return false;
- if ( correctSchemaConnectors.size() == 0 )
- {
- studioProgressMonitor.reportError(
- "No suitable SchemaConnector has been found for the choosen Directory Server.",
- new NoSuitableSchemaConnectorException() );
- }
+ monitor.reportError(
+ "No suitable SchemaConnector has been found for the choosen Directory Server.",
+ new NoSuitableSchemaConnectorException() );
+ }
- // Check if generic schema connector is included, then remove it to use a specific one
- if ( correctSchemaConnectors.size() > 1 )
+ // Check if generic schema connector is included, then remove it to use a specific one
+ if ( correctSchemaConnectors.size() > 1 )
+ {
+ for ( SchemaConnector schemaConnector : correctSchemaConnectors )
{
- for ( SchemaConnector schemaConnector : correctSchemaConnectors )
+ if ( schemaConnector instanceof GenericSchemaConnector )
{
- if ( schemaConnector instanceof GenericSchemaConnector )
- {
- correctSchemaConnectors.remove( schemaConnector );
- break;
- }
+ correctSchemaConnectors.remove( schemaConnector );
+ break;
}
}
+ }
- // Getting the correct SchemaConnector
- SchemaConnector correctSchemaConnector = null;
- if ( correctSchemaConnectors.size() == 1 )
- {
- correctSchemaConnector = correctSchemaConnectors.get( 0 );
- }
- else
- {
- // TODO display a dialog in which the user can select the correct schema connector
- }
+ // Getting the correct SchemaConnector
+ SchemaConnector correctSchemaConnector = null;
+ if ( correctSchemaConnectors.size() == 1 )
+ {
+ correctSchemaConnector = correctSchemaConnectors.get( 0 );
+ }
+ else
+ {
+ // TODO display a dialog in which the user can select the correct schema connector
+ }
- project.setSchemaConnector( correctSchemaConnector );
+ project.setSchemaConnector( correctSchemaConnector );
- // Fetching the Online Schema
- project.fetchOnlineSchema( new StudioProgressMonitor( monitor ) );
+ // Fetching the Online Schema
+ project.fetchOnlineSchema( monitor );
+ }
- // Checking if an error has occured
- if ( studioProgressMonitor.errorsReported() )
- {
- exceptionThrown = studioProgressMonitor.getException();
- return;
- }
- }
- } );
- }
- catch ( InvocationTargetException e )
- {
- // Nothing to do (it will never occur)
- }
- catch ( InterruptedException e )
- {
- // Nothing to do.
- }
- if ( exceptionThrown != null )
- {
- if ( exceptionThrown instanceof NoSuitableSchemaConnectorException )
- // Special case for the 'NoSuitableSchemaConnectorException'
+ public String getName()
{
- PluginUtils.logError( "No suitable SchemaConnector has been found for the selected connection.",
- exceptionThrown );
- ViewUtils.displayErrorMessageBox( "Error", "An error occured when creating the project.\n"
- + "No suitable SchemaConnector has been found for the selected connection." );
+ return null;
}
- else
- // Standard case
+
+
+ public Object[] getLockedObjects()
{
- PluginUtils.logError( "An error occured when creating the project.", exceptionThrown );
- ViewUtils.displayErrorMessageBox( "Error", "An error occured when creating the project." );
+ return null;
}
- return false;
- }
+
+
+ public String getErrorMessage()
+ {
+ return null;
+ }
+
+
+ public Connection[] getConnections()
+ {
+ return null;
+ }
+
+ }, getContainer(), true );
}
else if ( projectType.equals( ProjectType.OFFLINE ) )
- // Project is an "Offline Project"
+ // Project is an "Offline Project"
{
// Getting the selected 'core' schemas
String[] selectedSchemas = schemasSelectionPage.getSelectedSchemas();
@@ -203,6 +183,7 @@
Schema schema = PluginUtils.loadCoreSchema( serverType, selectedSchema );
if ( schema != null )
{
+ schema.setProject( project );
schemaHandler.addSchema( schema );
}
}
@@ -243,6 +224,7 @@
return suitableSchemaConnectors;
}
+
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#getNextPage(org.eclipse.jface.wizard.IWizardPage)
*/
@@ -264,6 +246,7 @@
return null;
}
+
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#getPreviousPage(org.eclipse.jface.wizard.IWizardPage)
*/
@@ -278,6 +261,7 @@
return null;
}
+
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#canFinish()
*/
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewSchemaWizard.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewSchemaWizard.java?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewSchemaWizard.java (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewSchemaWizard.java Tue Jul 28 17:46:12 2009
@@ -62,6 +62,7 @@
public boolean performFinish()
{
SchemaImpl schema = new SchemaImpl( page.getSchemaName() );
+ schema.setProject( Activator.getDefault().getProjectsHandler().getOpenProject() );
Activator.getDefault().getSchemaHandler().addSchema( schema );
return true;
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages.properties?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages.properties (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages.properties Tue Jul 28 17:46:12 2009
@@ -287,3 +287,24 @@
NewSchemaWizardPage.ErrorSchemaNameExists=A schema with this name already exists.
NewSchemaWizardPage.PleaseSpecifiyName=Please specify a name to create a new schema.
NewSchemaWizardPage.SchemaName=Schema name:
+
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=Merge Schemas from other Projects
+MergeSchemasSelectionWizardPage.PleaseSelectElements=Please select schema elements to merge.
+MergeSchemasSelectionWizardPage.SelectElements=Select the schema elements to merge:
+MergeSchemasSelectionWizardPage.ErrorNoElementsSelected=No schema elements selected
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=Merge Schemas from other Projects
+MergeSchemasSelectionWizardPage.SelectOptions=Please select merge options
+MergeSchemasSelectionWizardPage.AttributeTypes=Attribute Types
+MergeSchemasSelectionWizardPage.ObjectClasses=Object Classes
+MergeSchemasOptionsWizardPage.MergeDependencies=Merge dependencies
+MergeSchemasOptionsWizardPage.MergeDependenciesTooltip=If enabled, dependent schema elements (super classes, super attribute types, may and must attriutes) are also merged.
+MergeSchemasOptionsWizardPage.PullUpAttributes=Pull up attributes
+MergeSchemasOptionsWizardPage.PullUpAttributesTooltip=If enabled, must and may attributes that are not defined in the class hierarchy in the target schema are added to the merged object class.
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntax=Replace unknown syntax
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntaxTooltip=If enabled, unknown syntaxes are replaced by Directory String syntax, and appropriate matching rules (caseIgnoreMatch, caseIgnoreSubstringsMatch) are set.
+MergeSchemasWizard.AttributeTypeExistsInTargetProject=Attribute type {0} already exists in target project.
+MergeSchemasWizard.ObjectClassExistsInTargetProject=Object class {0} already exists in target project.
+MergeSchemasWizard.OidOrAliasAlreadyTaken=OID or alias {0} already exists in target project.
+MergeSchemasWizard.ReplacedSyntax=Replaced unknown syntax of {0}: {1} -> {2}
+MergeSchemasWizard.MergeResultTitle=Merge Result
+MergeSchemasWizard.MergeResultMessage=Merge finished successful, please note the following warnings:
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_de.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_de.properties?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_de.properties (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_de.properties Tue Jul 28 17:46:12 2009
@@ -296,3 +296,24 @@
NewSchemaWizardPage.ErrorSchemaNameExists=Ein Schema mit diesem Namen existiert bereits
NewSchemaWizardPage.PleaseSpecifiyName=Bitte einen Namen f\u00FCr das neue Schema eingeben.
NewSchemaWizardPage.SchemaName=Schemaname:
+
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=Schemas von anderen Projekten kopieren
+MergeSchemasSelectionWizardPage.PleaseSelectElements=Bitte Schemaelemente ausw\u00E4hlen, die kopiert werden sollen.
+MergeSchemasSelectionWizardPage.SelectElements=Schemaelemente ausw\u00E4hlen, die kopiert werden sollen:
+MergeSchemasSelectionWizardPage.ErrorNoElementsSelected=Keine Schemaelemente ausgew\u00E4hlt
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=Schemas von anderen Projekten kopieren
+MergeSchemasSelectionWizardPage.SelectOptions=Bitte Kopieroptionen ausw\u00E4hlen
+MergeSchemasSelectionWizardPage.AttributeTypes=Attribut-Typen
+MergeSchemasSelectionWizardPage.ObjectClasses=Objektklassen
+MergeSchemasOptionsWizardPage.MergeDependencies=Abh\u00E4nigkeiten kopieren
+MergeSchemasOptionsWizardPage.MergeDependenciesTooltip=Wenn aktiviert, werden abh\u00E4ngige Schemaelemente (\u00FCbergeordnete Klassen und Attribute) ebenfalls kopiert.
+MergeSchemasOptionsWizardPage.PullUpAttributes=Attribute hochziehen
+MergeSchemasOptionsWizardPage.PullUpAttributesTooltip=Wenn aktiviert, werden Attribute, die nicht in \u00FCbergeordneten Klassen im Zielprojekt vorhanden sind, zur kopierten Objektklasse hinzugef\u00FCgt.
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntax=Unbekannte Syntax ersetzen
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntaxTooltip=Wenn aktiviert, werden unbekannte Syntax durch Directory String ersetzt und passende Vergleichsregeln (caseIgnoreMatch, caseIgnoreSubstringsMatch) gesetzt.
+MergeSchemasWizard.AttributeTypeExistsInTargetProject=Attribut-Typ {0} existiert bereits im Zielprojekt.
+MergeSchemasWizard.ObjectClassExistsInTargetProject=Objektklasse {0} existiert bereits im Zielprojekt.
+MergeSchemasWizard.OidOrAliasAlreadyTaken=OID oder Alias {0} existiert bereits im Zielprojekt.
+MergeSchemasWizard.ReplacedSyntax=Unbekannte Syntax in {0} wurde ersetzt: {1} -> {2}
+MergeSchemasWizard.MergeResultTitle=Ergebnis
+MergeSchemasWizard.MergeResultMessage=Schema wurde erfolgreich kopiert, bitte die folgenden Warnungen beachten:
Modified: directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_fr.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_fr.properties?rev=798617&r1=798616&r2=798617&view=diff
==============================================================================
--- directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_fr.properties (original)
+++ directory/studio/trunk/schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/messages_fr.properties Tue Jul 28 17:46:12 2009
@@ -305,3 +305,24 @@
NewSchemaWizardPage.ErrorSchemaNameExists=Un sch\u00E9ma avec ce nom existe d\u00E9j\u00E0.
NewSchemaWizardPage.PleaseSpecifiyName=Veuillez sp\u00E9cifier un nom pour cr\u00E9er un nouveau sch\u00E9ma.
NewSchemaWizardPage.SchemaName=Nom du sch\u00E9ma:
+
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=TODO:Merge Schemas from other Projects
+MergeSchemasSelectionWizardPage.PleaseSelectElements=TODO:Please select schema elements to merge.
+MergeSchemasSelectionWizardPage.SelectElements=TODO:Select the schema elements to merge:
+MergeSchemasSelectionWizardPage.ErrorNoElementsSelected=TODO:No schema elements selected
+MergeSchemasSelectionWizardPage.ImportSchemasFromProjects=TODO:Merge Schemas from other Projects
+MergeSchemasSelectionWizardPage.SelectOptions=TODO:Please select merge options
+MergeSchemasSelectionWizardPage.AttributeTypes=TODO:Attribute Types
+MergeSchemasSelectionWizardPage.ObjectClasses=TODO:Object Classes
+MergeSchemasOptionsWizardPage.MergeDependencies=TODO:Merge dependencies
+MergeSchemasOptionsWizardPage.MergeDependenciesTooltip=TODO:If enabled, dependent schema elements (super classes, super attribute types, may and must attriutes) are also merged.
+MergeSchemasOptionsWizardPage.PullUpAttributes=TODO:Pull up attributes
+MergeSchemasOptionsWizardPage.PullUpAttributesTooltip=TODO:If enabled, must and may attributes that are not defined in the class hierarchy in the target schema are added to the merged object class.
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntax=TODO:Replace unknown syntax
+MergeSchemasOptionsWizardPage.ReplaceUnknownSyntaxTooltip=TODO:If enabled, unknown syntaxes are replaced by Directory String syntax, and appropriate matching rules (caseIgnoreMatch, caseIgnoreSubstringsMatch) are set.
+MergeSchemasWizard.AttributeTypeExistsInTargetProject=TODO:Attribute type {0} already exists in target project.
+MergeSchemasWizard.ObjectClassExistsInTargetProject=TODO:Object class {0} already exists in target project.
+MergeSchemasWizard.OidOrAliasAlreadyTaken=TODO:OID or alias {0} already exists in target project.
+MergeSchemasWizard.ReplacedSyntax=TODO:Replaced unknown syntax of {0}: {1} -> {2}
+MergeSchemasWizard.MergeResultTitle=TODO:Merge Result
+MergeSchemasWizard.MergeResultMessage=TODO:Merge finished successful, please note the following warnings: