You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/11/16 17:05:29 UTC
svn commit: r475786 [8/13] - in
/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin: ./
META-INF/ icons/ ressources/ ressources/help/ ressources/help/html/
ressources/help/html/concepts/ ressources/help/html/concepts/images/
ressources/h...
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Schema.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Schema.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Schema.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Schema.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,725 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.apache.directory.ldapstudio.schemas.controller.Application;
+import org.apache.directory.ldapstudio.schemas.io.SchemaParser;
+import org.apache.directory.ldapstudio.schemas.io.SchemaWriter;
+import org.apache.directory.ldapstudio.schemas.view.preferences.SchemaPreferencePage;
+import org.apache.directory.server.core.tools.schema.AttributeTypeLiteral;
+import org.apache.directory.server.core.tools.schema.ObjectClassLiteral;
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+
+
+public class Schema implements SchemaElementListener
+{
+ private static Logger logger = Logger.getLogger( Schema.class );
+
+ private String name;
+ private URL url;
+ //the schema elements stored in highly optimised and strongly typed
+ //hash tables (stored by name).
+ private Hashtable<String, ObjectClass> objectClassTable;
+ private Hashtable<String, AttributeType> attributeTypeTable;
+ private ArrayList<SchemaListener> listeners;
+ //we change this to true if the schema has been modified since last save
+ private boolean hasBeenModified = false;
+
+ /**
+ * coreSchema = a schema that can't be deleted, it's a core schema of the ApacheDS server
+ * userSchema = any other schema
+ */
+ public enum SchemaType
+ {
+ userSchema, coreSchema
+ };
+
+ /**
+ * The type of this schema
+ */
+ public SchemaType type;
+
+
+ /******************************************
+ * Utility *
+ ******************************************/
+
+ /**
+ * Gets the filename WITHOUT EXTENSION of the schema designated by this url
+ * @param url url pointing to a .schema file
+ * @return the filename or null if bad url
+ */
+ public static String URLtoFileName( URL url )
+ {
+ try
+ {
+ //It's time for sun to provide a standard method to access a file's name !
+ String separator = "/"; //$NON-NLS-1$
+ //if it's a ressource located in a bundle, we use slashes
+ if ( url.getProtocol().equals( "bundleresource" ) ) //$NON-NLS-1$
+ separator = "/"; //$NON-NLS-1$
+ else
+ {
+ //if not, let's find this platform specific separator !
+ separator = File.separator;
+
+ //no wait ! If it's a backslash, the regex motor will explode. We
+ //have to put not 2, not 3 but 4 backslashes !! That's right !
+ if ( separator.equals( "\\" ) ) { //$NON-NLS-1$
+ separator = "\\\\"; //$NON-NLS-1$
+ }
+ }
+
+ String path = url.getPath();
+ String[] splFileName = path.split( separator );
+ String fileNoPath = splFileName[splFileName.length - 1];
+
+ if ( fileNoPath.endsWith( ".schema" ) ) //$NON-NLS-1$
+ {
+ String[] fileName = fileNoPath.split( "\\." ); //$NON-NLS-1$
+ return fileName[0];
+ }
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "error when converting " + url + " to filename" ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return null;
+ }
+
+
+ /**
+ * Converts a local path in a URL object
+ * @param path the local path
+ * @return the url corresponding to the path
+ * @throws SchemaCreationException if error with the given path
+ */
+ public static URL localPathToURL( String path ) throws SchemaCreationException
+ {
+ URL tempURL = null;
+ try
+ {
+ tempURL = new URL( "file", "localhost", -1, path ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new SchemaCreationException( "malformed path:" + path, e ); //$NON-NLS-1$
+ }
+ return tempURL;
+
+ }
+
+
+ /**
+ * Tests if a given file is a schema file, it does not read the content of the schema
+ * but rather tries to determine the extension of the file
+ * @param url the input file
+ * @return returns true if its a .schema file, if not it returns false
+ */
+ private static boolean isASchemaFile( URL url )
+ {
+ return URLtoFileName( url ) != null;
+ }
+
+
+ /******************************************
+ * Constructors *
+ ******************************************/
+
+ /**
+ * Creates a new user schema of the specified name
+ * @param name the name of the schema
+ */
+ public Schema( String name )
+ {
+ this( name, null, SchemaType.userSchema );
+ }
+
+
+ /**
+ * Creates a new schema of the specified name and type
+ * @param type the type of the schema
+ * @param name the name of the schema
+ */
+ public Schema( SchemaType type, String name )
+ {
+ this( name, null, type );
+ }
+
+
+ /**
+ * Creates a new schema object loaded from a .schema file
+ * @param path the path to the .schema file
+ * @param type the type of the schema
+ * @throws SchemaCreationException if error during parsing of the .schema file
+ */
+ public Schema( String path, SchemaType type ) throws SchemaCreationException
+ {
+ this( localPathToURL( path ), type );
+ }
+
+
+ /**
+ * Creates a new schema object loaded from a .schema file
+ * @param url the URL to the .schema file
+ * @param type the type of the schema
+ * @throws SchemaCreationException if error during parsing of the .schema file
+ */
+ public Schema( URL url, SchemaType type ) throws SchemaCreationException
+ {
+ this( URLtoFileName( url ), url, type );
+
+ //we only load .schema files
+ if ( !isASchemaFile( url ) )
+ throw new SchemaCreationException( "not a .schema file: " + url, null ); //$NON-NLS-1$
+
+ //launch parsing of the .schema file right now
+ try
+ {
+ read();
+ }
+ catch ( IOException e )
+ {
+ throw new SchemaCreationException( "error opening " + url.toString(), e ); //$NON-NLS-1$
+ }
+ catch ( ParseException e )
+ {
+ throw new SchemaCreationException( "error during parsing of " + url.toString(), e ); //$NON-NLS-1$
+ }
+ }
+
+
+ /**
+ * General constructor (called by all the other constructors, ensure correct
+ * initialization of all the instance variables)
+ * @param name the name of the schema
+ * @param url the url of the schema
+ * @param type the type of the schema
+ */
+ private Schema( String name, URL url, SchemaType type )
+ {
+ this.name = name;
+ this.url = url;
+ this.type = type;
+
+ objectClassTable = new Hashtable<String, ObjectClass>();
+ attributeTypeTable = new Hashtable<String, AttributeType>();
+ listeners = new ArrayList<SchemaListener>();
+
+ //we created a new schema, so it has to be saved later on
+ this.modified();
+ }
+
+
+ /******************************************
+ * Accessors *
+ ******************************************/
+
+ /**
+ * @return the name of the schema
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+
+ /**
+ * @return the url of the schema if it has been specified
+ */
+ public URL getURL()
+ {
+ return url;
+ }
+
+
+ /**
+ * Accessor to the objectClasses defined by this schema
+ * @return as an (name, objectClass) hashtable
+ */
+ public Hashtable<String, ObjectClass> getObjectClassesAsHashTable()
+ {
+ return objectClassTable;
+ }
+
+
+ /**
+ * Accessor to the attributeTypes defined by this schema
+ * @return as an (name, attributeType) hashtable
+ */
+ public Hashtable<String, AttributeType> getAttributeTypesAsHashTable()
+ {
+ return attributeTypeTable;
+ }
+
+
+ /**
+ * Accessor to the objectClasses defined by this schema
+ * @return as an array
+ */
+ public ObjectClass[] getObjectClassesAsArray()
+ {
+ return objectClassTable.values().toArray( new ObjectClass[]
+ {} );
+ }
+
+
+ /**
+ * Accessor to the attributeTypes defined by this schema
+ * @return as an array
+ */
+ public AttributeType[] getAttributeTypesAsArray()
+ {
+ return attributeTypeTable.values().toArray( new AttributeType[]
+ {} );
+ }
+
+
+ /******************************************
+ * Logic *
+ ******************************************/
+
+ /**
+ * Checks if the schema has been modified since last save
+ * @return true if modified
+ */
+ public boolean hasBeenModified()
+ {
+ return hasBeenModified;
+ }
+
+
+ /**
+ * Checks if the schema has pending modifications in editors that have not
+ * been already applied
+ * @return true if the schema has pending modifications
+ */
+ public boolean hasPendingModification()
+ {
+ ObjectClass[] OCs = getObjectClassesAsArray();
+ for ( ObjectClass objectClass : OCs )
+ {
+ if ( objectClass.hasPendingModifications() )
+ {
+ return true;
+ }
+ }
+
+ AttributeType[] ATs = getAttributeTypesAsArray();
+ for ( AttributeType attributeType : ATs )
+ {
+ if ( attributeType.hasPendingModifications() )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /**
+ * Apply the pending modifications to the model (this instance)
+ */
+ public void applyPendingModifications()
+ {
+ ObjectClass[] OCs = getObjectClassesAsArray();
+ for ( ObjectClass objectClass : OCs )
+ {
+ if ( objectClass.hasPendingModifications() )
+ {
+ objectClass.applyPendingModifications();
+ }
+ }
+
+ AttributeType[] ATs = getAttributeTypesAsArray();
+ for ( AttributeType attributeType : ATs )
+ {
+ if ( attributeType.hasPendingModifications() )
+ {
+ attributeType.applyPendingModifications();
+ }
+ }
+ }
+
+
+ /**
+ * Close the editors associated to this schema WITHOUT applying the
+ * modifications
+ */
+ public void closeAssociatedEditors()
+ {
+ ObjectClass[] OCs = getObjectClassesAsArray();
+ for ( ObjectClass objectClass : OCs )
+ {
+ objectClass.closeAssociatedEditor();
+ }
+
+ AttributeType[] ATs = getAttributeTypesAsArray();
+ for ( AttributeType attributeType : ATs )
+ {
+ attributeType.closeAssociatedEditor();
+ }
+ }
+
+
+ /**
+ * Use this method to indicate that the schema has been modified.
+ * Surgeons warning: internal use only
+ */
+ private void modified()
+ {
+ this.hasBeenModified = true;
+ }
+
+
+ /**
+ * Use this method to indicate that the schema has been saved.
+ * Surgeons warning: internal use only
+ */
+ private void saved()
+ {
+ this.hasBeenModified = false;
+ }
+
+
+ /**
+ * Adds the specified objectClass to the schema (overwriting the previous associations)
+ * @param oc the objectClass
+ */
+ public void addObjectClass( ObjectClass oc )
+ {
+ for ( String alias : oc.getNames() )
+ objectClassTable.put( alias, oc );
+ oc.addListener( this );
+ this.modified();
+ notifyChanged( LDAPModelEvent.Reason.OCAdded, oc );
+ }
+
+
+ /**
+ * Adds the specified attributeType to the schema (overwriting the previous associations)
+ * @param at the attributeType
+ */
+ public void addAttributeType( AttributeType at )
+ {
+ for ( String alias : at.getNames() )
+ attributeTypeTable.put( alias, at );
+ at.addListener( this );
+ this.modified();
+ notifyChanged( LDAPModelEvent.Reason.ATAdded, at );
+ }
+
+
+ /**
+ * Removes the specified objectClass from the schema
+ * @param oc the objectClass
+ */
+ public void removeObjectClass( ObjectClass oc )
+ {
+ for ( String alias : oc.getNames() )
+ objectClassTable.remove( alias );
+ oc.removeListener( this );
+ this.modified();
+ notifyChanged( LDAPModelEvent.Reason.OCRemoved, oc );
+ }
+
+
+ /**
+ * Removes the specified attributeType from the schema
+ * @param at the attributeType
+ */
+ public void removeAttributeType( AttributeType at )
+ {
+ for ( String alias : at.getNames() )
+ attributeTypeTable.remove( alias );
+ at.removeListener( this );
+ this.modified();
+ notifyChanged( LDAPModelEvent.Reason.ATRemoved, at );
+ }
+
+
+ /******************************************
+ * I/O *
+ ******************************************/
+
+ /**
+ * Read the schema from the already specified .schema file
+ * @throws ParseException if error during parsing of the .schema file
+ * @throws IOException if error opening the .schema file
+ *
+ */
+ public void read() throws IOException, ParseException
+ {
+ SchemaParser parser = null;
+ parser = SchemaParser.parserFromURL( url );
+
+ if ( parser == null )
+ throw new FileNotFoundException( "Schema model object: no path or url specified !" ); //$NON-NLS-1$
+
+ parser.parse();
+
+ ObjectClassLiteral[] objectClasses = parser.getObjectClasses();
+ AttributeTypeLiteral[] attributeTypes = parser.getAttributeTypes();
+
+ for ( AttributeTypeLiteral literal : attributeTypes )
+ {
+ AttributeType AT = new AttributeType( literal, this );
+ AT.addListener( this );
+ for ( String alias : literal.getNames() )
+ attributeTypeTable.put( alias, AT );
+ }
+
+ for ( ObjectClassLiteral literal : objectClasses )
+ {
+ ObjectClass OC = new ObjectClass( literal, this );
+ OC.addListener( this );
+ for ( String alias : literal.getNames() )
+ objectClassTable.put( alias, OC );
+ }
+
+ //this schema has been loaded from a file, so we can consider we are
+ //synchronised with the filesystem
+ this.saved();
+ }
+
+
+ /**
+ * Save the schema on disk, do not ask for confirmation
+ * @throws Exception if error during writting of the file
+ */
+ public void save() throws Exception
+ {
+ save( false );
+ }
+
+
+ /**
+ * Save the schema on disk
+ * @param askForConfirmation if true, will ask form confirmation before saving
+ * @throws Exception if error during writting of the file
+ */
+ public void save( boolean askForConfirmation ) throws Exception
+ {
+ if ( this.type == SchemaType.coreSchema )
+ return;
+
+ if ( this.hasPendingModification() )
+ {
+ MessageBox messageBox = new MessageBox( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ SWT.YES | SWT.NO | SWT.ICON_QUESTION );
+ messageBox
+ .setMessage( Messages.getString( "Schema.The_schema" ) + this.getName() + Messages.getString( "Schema.Has_pending_modifications_in_editors_Do_you_want_to_apply_them" ) ); //$NON-NLS-1$ //$NON-NLS-2$
+ if ( messageBox.open() == SWT.YES )
+ {
+ this.applyPendingModifications();
+ }
+ else
+ {
+ this.closeAssociatedEditors();
+ }
+ }
+
+ if ( !this.hasBeenModified() )
+ return;
+
+ if ( askForConfirmation )
+ {
+ MessageBox messageBox = new MessageBox( new Shell(), SWT.YES | SWT.NO | SWT.ICON_QUESTION );
+ messageBox
+ .setMessage( Messages.getString( "Schema.The_schema" ) + this.getName() + Messages.getString( "Schema.Has_been_modified_Do_you_want_to_save_it" ) ); //$NON-NLS-1$ //$NON-NLS-2$
+ if ( messageBox.open() != SWT.YES )
+ {
+ return;
+ }
+ }
+
+ String savePath = null;
+
+ if ( this.url == null )
+ {
+ FileDialog fd = new FileDialog( new Shell(), SWT.SAVE );
+ fd.setText( Messages.getString( "Schema.Save_this_schema" ) + this.getName() ); //$NON-NLS-1$
+ IEclipsePreferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+ String defaultPath = prefs.get( SchemaPreferencePage.DEFAULT_DIRECTORY, System.getProperty( "user.home" ) ); //$NON-NLS-1$
+ fd.setFilterPath( defaultPath );
+ fd.setFileName( this.name + ".schema" ); //$NON-NLS-1$
+ fd.setFilterExtensions( new String[]
+ { "*.schema", "*.*" } ); //$NON-NLS-1$ //$NON-NLS-2$
+ fd.setFilterNames( new String[]
+ { Messages.getString( "Schema.Schema_files" ), Messages.getString( "Schema.All_files" ) } ); //$NON-NLS-1$ //$NON-NLS-2$
+ savePath = fd.open();
+ //we now have a specific location to save this schema in the future
+ if ( savePath != null )
+ this.url = localPathToURL( savePath );
+ }
+ else
+ savePath = url.getPath();
+
+ if ( savePath != null )
+ {
+ write( savePath );
+ //when we have been written, we are synchronised with the filesystem
+ this.saved();
+ notifyChanged( LDAPModelEvent.Reason.SchemaSaved, null );
+ }
+ }
+
+
+ /**
+ * Save the schema on disk to a specific file
+ * @throws Exception if error during writting of the file
+ */
+ public void saveas() throws Exception
+ {
+ if ( this.hasPendingModification() )
+ {
+ MessageBox messageBox = new MessageBox( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ SWT.YES | SWT.NO | SWT.ICON_QUESTION );
+ messageBox
+ .setMessage( Messages.getString( "Schema.The_schema" ) + this.getName() + Messages.getString( "Schema.Has_pending_modifications_in_editors_Do_you_want_to_apply_them" ) ); //$NON-NLS-1$ //$NON-NLS-2$
+ if ( messageBox.open() == SWT.YES )
+ {
+ this.applyPendingModifications();
+ }
+ }
+
+ FileDialog fd = new FileDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.SAVE );
+ fd.setText( Messages.getString( "Schema.Save_this_schema" ) + this.getName() ); //$NON-NLS-1$
+ IEclipsePreferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+ String defaultPath = prefs.get( SchemaPreferencePage.DEFAULT_DIRECTORY, System.getProperty( "user.home" ) ); //$NON-NLS-1$
+ fd.setFilterPath( defaultPath );
+ fd.setFileName( this.name + ".schema" ); //$NON-NLS-1$
+ fd.setFilterExtensions( new String[]
+ { "*.schema", "*.*" } ); //$NON-NLS-1$ //$NON-NLS-2$
+ fd.setFilterNames( new String[]
+ { Messages.getString( "Schema.Schema_files" ), Messages.getString( "Schema.All_files" ) } ); //$NON-NLS-1$ //$NON-NLS-2$
+ String savePath = fd.open();
+ //check if cancel has been pressed
+ if ( savePath != null )
+ {
+ URL newURL = localPathToURL( savePath );
+ String newName = URLtoFileName( newURL );
+ //if it's a bad url (no .schema, bad path) newName will be null
+ if ( newName != null )
+ {
+
+ if ( SchemaPool.getInstance().getSchema( newName ) != null )
+ {
+ MessageBox messageBox = new MessageBox( PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getShell(), SWT.OK | SWT.ICON_ERROR );
+ messageBox.setMessage( Messages
+ .getString( "Schema.A_schema_of_the_same_name_is_already_loaded_in_the_pool" ) ); //$NON-NLS-1$
+ messageBox.open();
+ return;
+ }
+ //if everything is ok, we update the current instance
+ this.name = newName;
+ this.url = newURL;
+
+ write( savePath );
+ //when we have been written, we are synchronised with the filesystem
+ this.saved();
+ notifyChanged( LDAPModelEvent.Reason.SchemaSaved, null );
+ }
+ }
+ }
+
+
+ private void write( String path ) throws Exception
+ {
+ if ( path != null && path != "" ) { //$NON-NLS-1$
+ SchemaWriter writer = new SchemaWriter();
+ writer.write( this, path );
+ }
+ }
+
+
+ /******************************************
+ * Events emmiting *
+ ******************************************/
+
+ public void addListener( SchemaListener listener )
+ {
+ if ( !listeners.contains( listener ) )
+ listeners.add( listener );
+ }
+
+
+ public void removeListener( SchemaListener listener )
+ {
+ listeners.remove( listener );
+ }
+
+
+ private void notifyChanged( LDAPModelEvent.Reason reason, Object o )
+ {
+ for ( SchemaListener listener : listeners )
+ {
+ try
+ {
+ if ( o instanceof ObjectClass )
+ listener.schemaChanged( this, new LDAPModelEvent( reason, ( ObjectClass ) o ) );
+ else if ( o instanceof AttributeType )
+ listener.schemaChanged( this, new LDAPModelEvent( reason, ( AttributeType ) o ) );
+ else
+ listener.schemaChanged( this, new LDAPModelEvent( reason ) );
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "error when notifying listener: " + listener ); //$NON-NLS-1$
+ }
+ }
+ }
+
+
+ /******************************************
+ * Schema Element Listener Impl *
+ ******************************************/
+
+ public void schemaElementChanged( SchemaElement originatingSchemaElement, LDAPModelEvent e )
+ {
+ //if a binded element has been modified we consider that we have been modified
+ this.modified();
+
+ //then we notify our listeners that we have been modified
+ for ( SchemaListener listener : listeners )
+ {
+ listener.schemaChanged( this, e );
+ }
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaCreationException.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaCreationException.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaCreationException.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaCreationException.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,54 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+/**
+ * Umbrella for all the schema i/o related exceptions
+ *
+ */
+public class SchemaCreationException extends Exception
+{
+ private static final long serialVersionUID = 1L;
+ private Exception originatingException;
+
+
+ /**
+ * Creates a new schema i/o related exception
+ * @param message the exception's message
+ * @param originatingException the originating exception
+ */
+ public SchemaCreationException( String message, Exception originatingException )
+ {
+ super( message );
+ this.originatingException = originatingException;
+ }
+
+
+ /**
+ * @return the originating exception
+ */
+ public Exception getOriginatingException()
+ {
+ return originatingException;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElement.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElement.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElement.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElement.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,53 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+/**
+ * This class is the model for all LDAP schema elements
+ *
+ */
+public interface SchemaElement
+{
+
+ /**
+ * @return the various aliases of the element
+ */
+ public String[] getNames();
+
+
+ /**
+ * @return the oid of the element
+ */
+ public String getOid();
+
+
+ /**
+ * @return the schema model instance defining this element
+ */
+ public Schema getOriginatingSchema();
+
+
+ /**
+ * @return the description of the element
+ */
+ public String getDescription();
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElementListener.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElementListener.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElementListener.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaElementListener.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,36 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+/**
+ * Listener to SchemaElement instances must implement this interface
+ */
+public interface SchemaElementListener
+{
+ /**
+ * Called if a property of the schema element was modified
+ *
+ * @param originatingSchema the schema that has been modified
+ * @param e the type of event that has been fired
+ */
+ public void schemaElementChanged( SchemaElement originatingSchemaElement, LDAPModelEvent e );
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaListener.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaListener.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaListener.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaListener.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,36 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+/**
+ * Listener to schema instances must implement this interface
+ */
+public interface SchemaListener
+{
+ /**
+ * Called if the schema was changed (if an element has been added or removed from a schema)
+ *
+ * @param originatingSchema the schema that has been modified
+ * @param e the type of event that has been fired
+ */
+ public void schemaChanged( Schema originatingSchema, LDAPModelEvent e );
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaPool.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaPool.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaPool.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/SchemaPool.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,791 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import org.apache.directory.ldapstudio.schemas.controller.Application;
+import org.apache.directory.ldapstudio.schemas.view.preferences.SchemaPreferencePage;
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+
+/**
+ * A pool of schema is a common repository for all the currently loaded
+ * schemas in LDAP Studio.
+ * -> You can add or remove schema from the pool.
+ * -> You can obtain a complete list of all the objectClasses and attribute
+ * Type currently loaded (even if they are squattered in various schema files).
+ * -> the pool of schema can be seen as ONE big schema containing all the
+ * definitions of the currently loaded schemas.
+ *
+ * NOW USING A SINGLETON DESIGN PATTERN
+ * -> use the getPool() static method to get the schema pool
+ *
+ */
+public class SchemaPool implements SchemaListener
+{
+ private static Logger logger = Logger.getLogger( SchemaPool.class );
+ private static final String SCHEMA_URL = "schema_url"; //$NON-NLS-1$
+ private static final String SAVED_WORKSPACE = "prefs_saved_workspace"; //$NON-NLS-1$
+
+ private static SchemaPool instance_;
+ private static Object syncObject_ = new Object();
+
+ private ArrayList<Schema> schemaList;
+ private ArrayList<PoolListener> listeners;
+
+
+ /**
+ * Write the pool configuration to the LDAPStudio preferences backing store.
+ * It consists of all the non-core schemas that have been added by the user.
+ */
+ public void savePool()
+ {
+ try
+ {
+ Preferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+ Preferences saved_workspace = prefs.node( SAVED_WORKSPACE );
+
+ //we only store the references to schemas that have ALREADY
+ //been saved. -> url != null
+ for ( Schema schema : schemaList )
+ {
+ if ( ( schema.type == Schema.SchemaType.userSchema ) && ( schema.getURL() != null ) )
+ {
+ Preferences schemaPref = saved_workspace.node( schema.getName() );
+ String url = schema.getURL().getPath();
+ schemaPref.put( SCHEMA_URL, url );
+ }
+ }
+
+ saved_workspace.flush();
+ }
+ catch ( BackingStoreException e )
+ {
+ logger.debug( "error when accessing the preferences backing store" ); //$NON-NLS-1$
+ }
+ }
+
+
+ /**
+ * Read the pool configuration from the LDAPStudio preferences backing store.
+ * It consists of all the non-core schemas that have been added by the user.
+ */
+ public void loadPool()
+ {
+ try
+ {
+ Preferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+ Preferences saved_workspace = prefs.node( SAVED_WORKSPACE );
+ String[] schemaNames = saved_workspace.childrenNames();
+ for ( String name : schemaNames )
+ {
+ Preferences node = saved_workspace.node( name );
+ try
+ {
+ addAlreadyExistingSchema( Schema.localPathToURL( node.get( SCHEMA_URL, "" ) ), //$NON-NLS-1$
+ Schema.SchemaType.userSchema );
+ }
+ catch ( SchemaCreationException e )
+ {
+ logger.debug( "error loading schema " + node.get( SCHEMA_URL, "" ) + " in the pool" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ finally
+ {
+ node.removeNode();
+ }
+ }
+ saved_workspace.flush();
+ }
+ catch ( BackingStoreException e )
+ {
+ logger.debug( "error when accessing the preferences backing store" ); //$NON-NLS-1$
+ }
+
+ }
+
+
+ private static void initializeWithBundled( SchemaPool pool )
+ {
+ URL urlcore = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/core.schema" ); //$NON-NLS-1$
+ URL urljava = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/java.schema" ); //$NON-NLS-1$
+ URL urlnis = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/nis.schema" ); //$NON-NLS-1$
+ URL urlsystem = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/system.schema" ); //$NON-NLS-1$
+ URL urlautofs = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/autofs.schema" ); //$NON-NLS-1$
+ URL urlcorba = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/corba.schema" ); //$NON-NLS-1$
+ URL urlcosine = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/schemas/cosine.schema" ); //$NON-NLS-1$
+ URL urlinetorgperson = Platform.getBundle( Application.PLUGIN_ID ).getResource(
+ "ressources/schemas/inetorgperson.schema" ); //$NON-NLS-1$
+
+ try
+ {
+ pool.addAlreadyExistingSchema( urlcore, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urljava, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlnis, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlsystem, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlautofs, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlcorba, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlcosine, Schema.SchemaType.coreSchema );
+ pool.addAlreadyExistingSchema( urlinetorgperson, Schema.SchemaType.coreSchema );
+ }
+ catch ( SchemaCreationException e )
+ {
+ logger
+ .debug( "error when inializing the schema pool with bundled schemas. One of the core schemas is not accessible:" + e ); //$NON-NLS-1$
+ }
+ }
+
+
+ private static void initializeWithSpecified( SchemaPool pool )
+ {
+ IEclipsePreferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+ String specificPath = prefs
+ .get( SchemaPreferencePage.SPECIFIC_CORE_DIRECTORY, System.getProperty( "user.home" ) ); //$NON-NLS-1$
+
+ File dir = new File( specificPath );
+ String sCurPath = dir.getAbsolutePath() + File.separator;
+ // Get the directorie entries
+ String[] safiles = dir.list();
+ if ( safiles != null )
+ {
+ for ( int i = 0; i < safiles.length; i++ )
+ {
+ File curFile = new File( sCurPath + safiles[i] );
+ if ( !curFile.isDirectory() )
+ {
+ try
+ {
+ URL fileURL = curFile.toURL();
+ if ( Schema.URLtoFileName( fileURL ) != null )
+ {
+ pool.addAlreadyExistingSchema( fileURL, Schema.SchemaType.coreSchema );
+ }
+ }
+ catch ( MalformedURLException e )
+ {
+ logger.debug( "error whith the content of the specified core schema directory" ); //$NON-NLS-1$
+ }
+ catch ( SchemaCreationException e )
+ {
+ logger
+ .debug( "error when inializing the schema pool with specified schemas. One of the core schemas is not accessible:" //$NON-NLS-1$
+ + e );
+ }
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Returns the unique initialized pool with all the core schemas pre-loaded
+ * @return the pool
+ */
+ public static SchemaPool getInstance()
+ {
+ //thread-safe version but not as good as with the static bloc method. Here it would have
+ //made a too big static block.
+ if ( instance_ == null )
+ {
+ synchronized ( syncObject_ )
+ {
+ if ( instance_ == null )
+ {
+ //1) create the pool instance
+ SchemaPool pool = new SchemaPool();
+
+ IEclipsePreferences prefs = new ConfigurationScope().getNode( Application.PLUGIN_ID );
+
+ //2) initialize the pool
+ boolean initialize_with_specified = prefs.getBoolean( SchemaPreferencePage.SPECIFIC_CORE, false );
+ if ( initialize_with_specified )
+ {
+ //2a) with user-specified core schemas
+ initializeWithSpecified( pool );
+ }
+ else
+ {
+ //2b) or with bundled core schemas
+ initializeWithBundled( pool );
+ }
+
+ //3) the unique instance is this initialized pool
+ instance_ = pool;
+
+ //4) load the pool with all the schemas that the user did select the last time
+ //LDAPStudio was launched
+ boolean save_workspace = prefs.getBoolean( SchemaPreferencePage.SAVE_WORKSPACE, true );
+ if ( save_workspace )
+ instance_.loadPool();
+ }
+ }
+ }
+
+ //1) or 5) returns the unique pool instance
+ return instance_;
+ }
+
+
+ /**
+ * Default constructor, no pre-loaded schemas. Despite the fact that we are using a
+ * singleton design pattern, it's a public constructor. It allows you to create
+ * temporary unitialized pools (for testing purposes for example).
+ */
+ public SchemaPool()
+ {
+ schemaList = new ArrayList<Schema>();
+ listeners = new ArrayList<PoolListener>();
+ }
+
+
+ /**
+ * @return the number of schemas in the pool
+ */
+ public int count()
+ {
+ return schemaList.size();
+ }
+
+
+ /**
+ * Returns all the schemas contained in the pool
+ * @return the schemas stored in a Schema array
+ */
+ public Schema[] getSchemas()
+ {
+ return schemaList.toArray( new Schema[]
+ {} );
+ }
+
+
+ /**
+ * Returns the schema specified by the following name.
+ * @param name the name of the schema to find
+ * @return
+ */
+ public Schema getSchema( String name )
+ {
+ for ( Schema schema : schemaList )
+ {
+ if ( schema.getName().equals( name ) )
+ return schema;
+ }
+ return null;
+ }
+
+
+ /**
+ * Tests if a schema OF THE FOLLOWING NAME is inside the pool, it does NOT test
+ * against the schema instances.
+ * @param name the name of the schema
+ * @return true if inside
+ * @see containsSchema(Schema schema) if you want to test instances
+ */
+ public boolean containsSchema( String name )
+ {
+ return ( getSchema( name ) != null );
+ }
+
+
+ /**
+ * Tests if the following schema is inside the pool
+ * @param schema the name of the schema to test
+ * @return true if inside, false if not
+ */
+ public boolean containsSchema( Schema schema )
+ {
+ return schemaList.contains( schema );
+ }
+
+
+ /**
+ * Tests if the following objectClass is inside the pool
+ * @param name the name of the object class to test
+ * @return true if inside, false if not
+ */
+ public boolean containsObjectClass( String name )
+ {
+ return getObjectClass( name ) != null;
+ }
+
+
+ /**
+ * Tests if the following attribute type is inside the pool
+ * @param name the name of the attribute type to test
+ * @return true if inside, false if not
+ */
+ public boolean containsAttributeType( String name )
+ {
+ return getAttributeType( name ) != null;
+ }
+
+
+ /**
+ * Tests if an objectClass of the following name(s) exists inside the pool
+ * -> test each alias of the following objectClass against the content of the pool
+ * @param objectClass the objectClass to test
+ * @return if inside the pool, false if not
+ */
+ public boolean containsObjectClass( ObjectClass objectClass )
+ {
+ String[] names = objectClass.getNames();
+ for ( String name : names )
+ {
+ if ( getObjectClass( name ) != null )
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
+ * Tests if an attributeType of the following name(s) exists inside the pool
+ * -> test each alias of the following attributeType against the content of the pool
+ * @param attributeType the attributeType to test
+ * @return if inside the pool, false if not
+ */
+ public boolean containsAttributeType( AttributeType attributeType )
+ {
+ String[] names = attributeType.getNames();
+ for ( String name : names )
+ {
+ if ( getAttributeType( name ) != null )
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
+ * Returns a specific object class
+ * @param name the name of the object class to return
+ * @return null if the name is not mapped
+ */
+ public ObjectClass getObjectClass( String name )
+ {
+ Hashtable<String, ObjectClass> objectClassTable = getObjectClassesAsHashTableByName();
+
+ return objectClassTable.get( name );
+ }
+
+
+ /**
+ * Returns a specific attribute type
+ * @param name the name of the attriute type to return
+ * @return null if the name is not mapped
+ */
+ public AttributeType getAttributeType( String name )
+ {
+ Hashtable<String, AttributeType> attributeTypeTable = getAttributeTypesAsHashTableByName();
+
+ return attributeTypeTable.get( name );
+ }
+
+
+ /**
+ * Accessor to all the objectClasses defined by the schemas stored in the pool
+ * @return as an (name, objectClass) hashtable
+ */
+ public Hashtable<String, ObjectClass> getObjectClassesAsHashTableByName()
+ {
+ Hashtable<String, ObjectClass> objectClassTable = new Hashtable<String, ObjectClass>();
+
+ for ( Schema schema : schemaList )
+ {
+ Hashtable<String, ObjectClass> temp = schema.getObjectClassesAsHashTable();
+ if ( temp != null )
+ objectClassTable.putAll( temp );
+ }
+ return objectClassTable;
+ }
+
+
+ /**
+ * Accessor to all the objectClasses defined by the schemas stored in the pool
+ * @return as an (oid, ObjectClass) hashtable
+ */
+ public Hashtable<String, ObjectClass> getObjectClassesAsHashTableByOID()
+ {
+ Hashtable<String, ObjectClass> classesTable = new Hashtable<String, ObjectClass>();
+
+ ObjectClass[] ObjectClasses = getObjectClassesAsArray();
+ for ( ObjectClass class1 : ObjectClasses )
+ {
+ classesTable.put( class1.getOid(), class1 );
+ }
+
+ return classesTable;
+ }
+
+
+ /**
+ * Accessor to all the attributeType defined by the schemas stored in the pool
+ * @return as an (name, attributeType) hashtable
+ */
+ public Hashtable<String, AttributeType> getAttributeTypesAsHashTableByName()
+ {
+ Hashtable<String, AttributeType> attributeTypeTable = new Hashtable<String, AttributeType>();
+
+ for ( Schema schema : schemaList )
+ {
+ Hashtable<String, AttributeType> temp = schema.getAttributeTypesAsHashTable();
+ if ( temp != null )
+ attributeTypeTable.putAll( temp );
+ }
+ return attributeTypeTable;
+ }
+
+
+ /**
+ * Accessor to all the attributeType defined by the schemas stored in the pool
+ * @return as an (oid, attributeType) hashtable
+ */
+ public Hashtable<String, AttributeType> getAttributeTypesAsHashTableByOID()
+ {
+ Hashtable<String, AttributeType> attributeTypeTable = new Hashtable<String, AttributeType>();
+
+ AttributeType[] attributeTypes = getAttributeTypesAsArray();
+ for ( AttributeType type : attributeTypes )
+ {
+ attributeTypeTable.put( type.getOid(), type );
+ }
+
+ return attributeTypeTable;
+ }
+
+
+ /**
+ * Accessor to all the schema elements (attribute types and object classes) defined by
+ * the schemas stored in the pool
+ * @return as an (oid, SchemaElement) hashtable
+ */
+ public Hashtable<String, SchemaElement> getSchemaElementsAsHashTableByOID()
+ {
+ Hashtable<String, SchemaElement> elementsTable = new Hashtable<String, SchemaElement>();
+
+ AttributeType[] attributeTypes = getAttributeTypesAsArray();
+ ObjectClass[] objectClasses = getObjectClassesAsArray();
+
+ for ( ObjectClass class1 : objectClasses )
+ {
+ elementsTable.put( class1.getOid(), class1 );
+ }
+
+ for ( AttributeType type : attributeTypes )
+ {
+ elementsTable.put( type.getOid(), type );
+ }
+
+ return elementsTable;
+ }
+
+
+ /**
+ * Accessor to all the objectClasses defined by the schemas stored in the pool
+ * @return as an array
+ */
+ public ObjectClass[] getObjectClassesAsArray()
+ {
+ return getObjectClassesAsHashTableByName().values().toArray( new ObjectClass[]
+ {} );
+ }
+
+
+ /**
+ * Accessor to all the attributeType defined by the schemas stored in the pool
+ * @return as an array
+ */
+ public AttributeType[] getAttributeTypesAsArray()
+ {
+ return getAttributeTypesAsHashTableByName().values().toArray( new AttributeType[]
+ {} );
+ }
+
+
+ /**
+ * Adds a bunch of already initialized schemas into the pool
+ * @param schemaArray the schema array
+ */
+ public void addSchemas( Schema[] schemaArray )
+ {
+ for ( int i = 0; i < schemaArray.length; i++ )
+ addSchema( schemaArray[i] );
+
+ //notify of the changement
+ //notifyChanged(LDAPModelEvent.Reason.multipleSchemaAdded,null);
+ }
+
+
+ /**
+ * Adds an already initialized schema into the pool
+ * @param s the schema to be added
+ * @return true if the schema has been added
+ */
+ public boolean addSchema( Schema s )
+ {
+ if ( s != null )
+ {
+ if ( !containsSchema( s.getName() ) )
+ {
+ schemaList.add( s );
+ //we register as a listener of the schema
+ s.addListener( this );
+ //we notify our listeners that a schema has been added
+ notifyChanged( LDAPModelEvent.Reason.SchemaAdded, s );
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /**
+ * Adds a new schema into the pool (not loaded from file)
+ * @param name the name of the new schema
+ * @param type the schema type
+ * @return the schema that has been added to the pool, null if not added or already in the pool
+ */
+ public Schema addSchema( String name, Schema.SchemaType type )
+ {
+ Schema temp = new Schema( type, name );
+
+ if ( addSchema( temp ) )
+ return temp;
+
+ return null;
+ }
+
+
+ /**
+ * Adds an already existing schema into the pool (load the schema from a file)
+ * @param path the path to the .schema file
+ * @param type the schema type
+ * @return the schema that has been added to the pool, null if not added or already in the pool
+ * @throws SchemaCreationException if no schema was found at the specified
+ * path or if any error occurs during its initialization.
+ */
+ public Schema addAlreadyExistingSchema( String path, Schema.SchemaType type ) throws SchemaCreationException
+ {
+ try
+ {
+ return addAlreadyExistingSchema( new URL( "file", "localhost", -1, path ), type ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new SchemaCreationException( "error opening " + path, e ); //$NON-NLS-1$
+ }
+ }
+
+
+ /**
+ * Adds an already existing schema into the pool (load the schema from a file)
+ * @param url the URL to the .schema file
+ * @param type the schema type
+ * @return the schema that has been added to the pool, null if not added or already in the pool
+ * @throws SchemaCreationException if no schema was found at the specified
+ * URL or if any error occurs during its initialization.
+ */
+ public Schema addAlreadyExistingSchema( URL url, Schema.SchemaType type ) throws SchemaCreationException
+ {
+ Schema temp;
+ temp = new Schema( url, type );
+
+ if ( addSchema( temp ) )
+ return temp;
+
+ return null;
+ }
+
+
+ /**
+ * Removes a bunch of schemas from the pool
+ * @param schemaArray the schemas to remove
+ */
+ public void removeSchemas( Schema[] schemaArray )
+ {
+ for ( int i = 0; i < schemaArray.length; i++ )
+ {
+ removeSchema( schemaArray[i] );
+ schemaArray[i].removeListener( this );
+ }
+
+ if ( schemaArray.length > 0 )
+ {
+ //notify of the changement
+ notifyChanged( LDAPModelEvent.Reason.multipleSchemaRemoved, null );
+ }
+ }
+
+
+ /**
+ * Removes a schema from the pool
+ * @param s the schema to be removed
+ */
+ public void removeSchema( Schema s )
+ {
+ if ( s != null )
+ {
+ schemaList.remove( s );
+ s.removeListener( this );
+ s.closeAssociatedEditors();
+ //notify of the changement
+ notifyChanged( LDAPModelEvent.Reason.SchemaRemoved, s );
+ }
+ }
+
+
+ /**
+ * Removes a schema from the pool
+ * @param name the name of the schema to be removed
+ */
+ public void removeSchema( String name )
+ {
+ for ( Schema schema : schemaList )
+ {
+ if ( schema.getName().equals( name ) )
+ {
+ removeSchema( schema );
+ return;
+ }
+ }
+ }
+
+
+ /**
+ * Saves all the schemas contained in the pool
+ * @throws Exception if error during the writting process
+ */
+ public void saveAll() throws Exception
+ {
+ saveAll( false );
+ }
+
+
+ /**
+ * Saves all the schemas contained in the pool
+ * @param askForConfirmation if true, will ask form confirmation before saving
+ * @throws Exception if error during the writting process
+ */
+ public void saveAll( boolean askForConfirmation ) throws Exception
+ {
+ for ( Schema schema : schemaList )
+ {
+ schema.save( askForConfirmation );
+ }
+ }
+
+
+ /**
+ * Clears the pool from all the stored schemas
+ * @param saveBefore if true, all the schemas are saved before the pool
+ * is cleared
+ */
+ public void clearPool( boolean saveBefore )
+ {
+ //save the pool
+ if ( saveBefore )
+ {
+ try
+ {
+ saveAll();
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "error when clearing the pool" ); //$NON-NLS-1$
+ }
+ }
+
+ //remove all the associations (listeners,...)
+ for ( Schema schema : schemaList )
+ {
+ removeSchema( schema );
+ }
+
+ //make sure we have an empty list
+ schemaList = new ArrayList<Schema>();
+
+ //notify of the changement
+ notifyChanged( LDAPModelEvent.Reason.poolCleared, null );
+ }
+
+
+ /******************************************
+ * Events emmiting *
+ ******************************************/
+
+ public void addListener( PoolListener listener )
+ {
+ if ( !listeners.contains( listener ) )
+ listeners.add( listener );
+ }
+
+
+ public void removeListener( PoolListener listener )
+ {
+ listeners.remove( listener );
+ }
+
+
+ private void notifyChanged( LDAPModelEvent.Reason reason, Schema sc )
+ {
+ for ( PoolListener listener : listeners )
+ {
+ try
+ {
+ listener.poolChanged( this, new LDAPModelEvent( reason, sc ) );
+ }
+ catch ( Exception e )
+ {
+ logger.debug( "error when notifying " + listener + " of pool modification" ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ }
+
+
+ /******************************************
+ * Schema Listener Impl *
+ ******************************************/
+
+ public void schemaChanged( Schema originatingSchema, LDAPModelEvent e )
+ {
+ for ( PoolListener listener : listeners )
+ {
+ try
+ {
+ listener.poolChanged( this, e );
+ }
+ catch ( Exception e1 )
+ {
+ logger.debug( "error when notifying " + listener + " of pool modification" ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntax.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntax.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntax.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntax.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,84 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+/**
+ * This class is the model for 'Syntax' LDAP schema
+ * elements. It is modeled after the RFC 2252 recommandation.
+ *
+ */
+public class Syntax
+{
+ private String name;
+ private String oid;
+ private boolean humanReadable;
+
+
+ /**
+ * Default constructor
+ * @param name the name of the syntax
+ * @param oid the oid of the syntax
+ * @param humanReadable a boolean specifying if the syntax is human readabe
+ */
+ public Syntax( String name, String oid, boolean humanReadable )
+ {
+ this.name = name;
+ this.oid = oid;
+ this.humanReadable = humanReadable;
+ }
+
+
+ public boolean isHumanReadable()
+ {
+ return humanReadable;
+ }
+
+
+ public void setHumanReadable( boolean humanReadable )
+ {
+ this.humanReadable = humanReadable;
+ }
+
+
+ public String getName()
+ {
+ return name;
+ }
+
+
+ public void setName( String name )
+ {
+ this.name = name;
+ }
+
+
+ public String getOid()
+ {
+ return oid;
+ }
+
+
+ public void setOid( String oid )
+ {
+ this.oid = oid;
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntaxes.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntaxes.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntaxes.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/model/Syntaxes.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,112 @@
+/*
+ * 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.ldapstudio.schemas.model;
+
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.directory.ldapstudio.schemas.controller.Application;
+import org.eclipse.core.runtime.Platform;
+
+
+/**
+ * This class allows to get the list of all syntaxes
+ * (which is initialized once parsing a XML file)
+ *
+ */
+public class Syntaxes
+{
+ private static final ArrayList<Syntax> syntaxes;
+
+ static
+ {
+ try
+ {
+ syntaxes = new ArrayList<Syntax>();
+ URL url = Platform.getBundle( Application.PLUGIN_ID ).getResource( "ressources/utils/syntaxes.xml" ); //$NON-NLS-1$
+ XMLConfiguration config = new XMLConfiguration( url );
+
+ // We get the number of syntaxes to parse
+ Object syntaxesList = config.getProperty( "syntax.name" ); //$NON-NLS-1$
+ if ( syntaxesList instanceof Collection )
+ {
+ for ( int i = 0; i < ( ( Collection ) syntaxesList ).size(); i++ )
+ {
+ // We parse each syntax and get its properties
+ String name = config.getString( "syntax(" + i + ").name" ); //$NON-NLS-1$ //$NON-NLS-2$
+ String oid = config.getString( "syntax(" + i + ").oid" ); //$NON-NLS-1$ //$NON-NLS-2$
+ String hr = config.getString( "syntax(" + i + ").hr" ); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // We create the corresponding syntax object
+ Syntax syntax = null;
+ if ( hr.equals( "Y" ) ) { //$NON-NLS-1$
+ syntax = new Syntax( name, oid, true );
+ }
+ else if ( hr.equals( "N" ) ) { //$NON-NLS-1$
+ syntax = new Syntax( name, oid, true );
+ }
+
+ if ( syntax != null )
+ syntaxes.add( syntax );
+ }
+ }
+
+ }
+ catch ( Throwable e )
+ {
+ throw new RuntimeException( e.getMessage() );
+ }
+ }
+
+
+ /**
+ * Return the unique initialized ArrayList containing all syntaxes
+ * @return the syntaxes ArrayList
+ */
+ public static ArrayList<Syntax> getSyntaxes()
+ {
+ return syntaxes;
+ }
+
+
+ /**
+ * Return the syntax object corresponding to the name given in parameter
+ * If no syntax is corresponding, it returns null
+ * @param name the name of the syntax
+ * @return the coreesponding Syntax object
+ */
+ public static Syntax getSyntax( String name )
+ {
+ for ( Iterator iter = syntaxes.iterator(); iter.hasNext(); )
+ {
+ Syntax syntax = ( Syntax ) iter.next();
+ if ( syntax.getName().equals( name ) )
+ {
+ return syntax;
+ }
+ }
+ return null;
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/IImageKeys.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/IImageKeys.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/IImageKeys.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/IImageKeys.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,51 @@
+/*
+ * 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.ldapstudio.schemas.view;
+
+
+/**
+ * This class is used to define path for images
+ */
+public interface IImageKeys
+{
+ // Images for Actions
+ public static final String ABOUT = "ressources/icons/flag_blue.png"; //$NON-NLS-1$
+ public static final String CREATE_A_NEW_SCHEMA = "ressources/icons/schema_new.png"; //$NON-NLS-1$
+ public static final String REMOVE_SCHEMA = "ressources/icons/schema_remove.png"; //$NON-NLS-1$
+ public static final String CREATE_A_NEW_OBJECTCLASS = "ressources/icons/object_class_new.gif"; //$NON-NLS-1$
+ public static final String CREATE_A_NEW_ATTRIBUTETYPE = "ressources/icons/attribute_type_new.gif"; //$NON-NLS-1$
+ public static final String DELETE = "ressources/icons/delete.gif"; //$NON-NLS-1$
+ public static final String EXIT = "ressources/icons/stop.png"; //$NON-NLS-1$
+ public static final String OPEN_LOCAL = "ressources/icons/open.png"; //$NON-NLS-1$
+ public static final String SAVE = "ressources/icons/save.gif"; //$NON-NLS-1$
+ public static final String SAVE_AS = "ressources/icons/save_as.png"; //$NON-NLS-1$
+ public static final String SAVE_ALL = "ressources/icons/save_all.png"; //$NON-NLS-1$
+ public static final String SORT_ALPHABETICAL = "ressources/icons/sort_alphabetical.gif"; //$NON-NLS-1$
+ public static final String SORT_UNALPHABETICAL = "ressources/icons/sort_unalphabetical.gif"; //$NON-NLS-1$
+ public static final String SHOW_PREFERENCES = "ressources/icons/preferences.png"; //$NON-NLS-1$
+
+ // Images for Views
+ public static final String ATTRIBUTE_TYPE = "ressources/icons/attribute_type.gif"; //$NON-NLS-1$
+ public static final String OBJECT_CLASS = "ressources/icons/object_class.gif"; //$NON-NLS-1$
+ public static final String OBJECT_CLASS_WARNING = "ressources/icons/object_class_warning.gif"; //$NON-NLS-1$
+ public static final String SCHEMA = "ressources/icons/schema.gif"; //$NON-NLS-1$
+ public static final String SCHEMA_CORE = "ressources/icons/schema_core.gif"; //$NON-NLS-1$
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditor.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditor.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditor.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditor.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,178 @@
+/*
+ * 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.ldapstudio.schemas.view.editors;
+
+
+import org.apache.directory.ldapstudio.schemas.controller.Application;
+import org.apache.directory.ldapstudio.schemas.model.AttributeType;
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.editor.FormEditor;
+
+
+/**
+ * This class is the Attribute Type Editor main class
+ */
+public class AttributeTypeFormEditor extends FormEditor
+{
+ private static Logger logger = Logger.getLogger( AttributeTypeFormEditor.class );
+
+ public static final String ID = Application.PLUGIN_ID + ".view.attributetypeformeditor"; //$NON-NLS-1$
+
+ private AttributeTypeFormEditorOverviewPage overview;
+
+ private AttributeTypeFormEditorSourceCodePage sourceCode;
+
+ private boolean dirty = false;
+
+ private AttributeType attributeType;
+
+
+ /**
+ * Default constructor
+ */
+ public AttributeTypeFormEditor()
+ {
+ super();
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite,
+ * org.eclipse.ui.IEditorInput)
+ */
+ @Override
+ public void init( IEditorSite site, IEditorInput input ) throws PartInitException
+ {
+ setSite( site );
+ setInput( input );
+ setPartName( input.getName() );
+
+ attributeType = ( ( AttributeTypeFormEditorInput ) getEditorInput() ).getAttributeType();
+ attributeType.setEditor( this );
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
+ */
+ @Override
+ public void dispose()
+ {
+ attributeType.removeEditor( this );
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
+ */
+ @Override
+ protected void addPages()
+ {
+ try
+ {
+ overview = new AttributeTypeFormEditorOverviewPage( this,
+ "overview", Messages.getString( "AttributeTypeFormEditor.Overview" ) ); //$NON-NLS-1$ //$NON-NLS-2$
+ addPage( overview );
+ sourceCode = new AttributeTypeFormEditorSourceCodePage( this,
+ "sourceCode", Messages.getString( "AttributeTypeFormEditor.Source_Code" ) ); //$NON-NLS-1$ //$NON-NLS-2$
+ addPage( sourceCode );
+ }
+ catch ( PartInitException e )
+ {
+ logger.debug( "error when adding pages" ); //$NON-NLS-1$
+ }
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void doSave( IProgressMonitor monitor )
+ {
+ // Save is delegate to the page (that holds the object class itself)
+ overview.doSave( monitor );
+ // We reload the name in case of it has changed
+ setPartName( getEditorInput().getName() );
+ sourceCode.refresh();
+ setDirty( false );
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+ */
+ @Override
+ public void doSaveAs()
+ {
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+ */
+ @Override
+ public boolean isSaveAsAllowed()
+ {
+ return false;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
+ */
+ @Override
+ public boolean isDirty()
+ {
+ return this.dirty;
+ }
+
+
+ /**
+ * Sets the dirty state of the editor
+ *
+ * @param dirty
+ * the dirty state
+ */
+ public void setDirty( boolean dirty )
+ {
+ this.dirty = dirty;
+ editorDirtyStateChanged();
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditorInput.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditorInput.java?view=auto&rev=475786
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditorInput.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/AttributeTypeFormEditorInput.java Thu Nov 16 08:05:20 2006
@@ -0,0 +1,147 @@
+/*
+ * 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.ldapstudio.schemas.view.editors;
+
+
+import org.apache.directory.ldapstudio.schemas.model.AttributeType;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+
+/**
+ * This class is the Input class for the Attribute Type Editor
+ */
+public class AttributeTypeFormEditorInput implements IEditorInput
+{
+ private AttributeType attributeType = null;
+
+
+ /**
+ * Default constructor
+ *
+ * @param at
+ * the input attribute type
+ */
+ public AttributeTypeFormEditorInput( AttributeType at )
+ {
+ super();
+ this.attributeType = at;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ public boolean exists()
+ {
+ return ( this.attributeType == null );
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ public ImageDescriptor getImageDescriptor()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getName()
+ */
+ public String getName()
+ {
+ return this.attributeType.getNames()[0];
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ public IPersistableElement getPersistable()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ public String getToolTipText()
+ {
+ return this.attributeType.getNames()[0]
+ + Messages.getString( "AttributeTypeFormEditorInput.In_the" ) //$NON-NLS-1$
+ + this.attributeType.getOriginatingSchema().getName()
+ + Messages.getString( "AttributeTypeFormEditorInput.Schema" ); //$NON-NLS-1$
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ public Object getAdapter( Class adapter )
+ {
+ return null;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ return true;
+ if ( !( obj instanceof AttributeTypeFormEditorInput ) )
+ return false;
+ AttributeTypeFormEditorInput other = ( AttributeTypeFormEditorInput ) obj;
+ return other.getAttributeType().getOid().equals( this.attributeType.getOid() );
+ }
+
+
+ /**
+ * Returns the input Attribute Type
+ *
+ * @return the input Attribute Type
+ */
+ public AttributeType getAttributeType()
+ {
+ return this.attributeType;
+ }
+}