Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 70270 invoked from network); 5 Nov 2007 17:22:00 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Nov 2007 17:22:00 -0000 Received: (qmail 60401 invoked by uid 500); 5 Nov 2007 17:16:40 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 60370 invoked by uid 500); 5 Nov 2007 17:16:40 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 60358 invoked by uid 99); 5 Nov 2007 17:16:40 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Nov 2007 09:16:40 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Nov 2007 17:16:49 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 607311A9851; Mon, 5 Nov 2007 09:16:06 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r592094 [7/35] - in /directory/sandbox/felixk/studio-schemaeditor: ./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/directory/studio/ src/ma... Date: Mon, 05 Nov 2007 17:15:02 -0000 To: commits@directory.apache.org From: felixk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071105171606.607311A9851@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/AttributeTypeImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/AttributeTypeImpl.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/AttributeTypeImpl.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/AttributeTypeImpl.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,533 @@ +/* + * 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.model; + + +import javax.naming.NamingException; + +import org.apache.directory.shared.ldap.schema.AbstractAttributeType; +import org.apache.directory.shared.ldap.schema.AttributeType; +import org.apache.directory.shared.ldap.schema.MatchingRule; +import org.apache.directory.shared.ldap.schema.MutableSchemaObject; +import org.apache.directory.shared.ldap.schema.Syntax; +import org.apache.directory.shared.ldap.schema.UsageEnum; + + +/** + * This class represents an attribute type. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class AttributeTypeImpl extends AbstractAttributeType implements MutableSchemaObject +{ + private static final long serialVersionUID = 1L; + + /** The object OID */ + private String objectOid; + + /** The name of the superior */ + private String superiorName; + + /** The OID of the syntax */ + private String syntaxOid; + + /** The name of the equality matching rule */ + private String equalityName; + + /** The name of the ordering matching rule */ + private String orderingName; + + /** The name of the substr matching rule */ + private String substrName; + + + /** + * Creates a new instance of AttributeTypeImpl. + * + * @param oid + * the OID of the attribute type + */ + public AttributeTypeImpl( String oid ) + { + super( oid ); + objectOid = oid; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setNames(java.lang.String[]) + */ + public void setNames( String[] names ) + { + super.setNames( names ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#getOid() + */ + public String getOid() + { + return objectOid; + } + + + /** + * Set the OID. + * + * @param oid + * the OID value + */ + public void setOid( String oid ) + { + objectOid = oid; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setDescription(java.lang.String) + */ + public void setDescription( String description ) + { + super.setDescription( description ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setObsolete(boolean) + */ + public void setObsolete( boolean obsolete ) + { + super.setObsolete( obsolete ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractAttributeType#setCanUserModify(boolean) + */ + public void setCanUserModify( boolean canUserModify ) + { + super.setCanUserModify( canUserModify ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractAttributeType#setCollective(boolean) + */ + public void setCollective( boolean collective ) + { + super.setCollective( collective ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractAttributeType#setSingleValue(boolean) + */ + public void setSingleValue( boolean singleValue ) + { + super.setSingleValue( singleValue ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractAttributeType#setUsage(org.apache.directory.shared.ldap.schema.UsageEnum) + */ + public void setUsage( UsageEnum usage ) + { + super.setUsage( usage ); + } + + + /** + * Gets the superior name. + * + * @return + * the superior name + */ + public String getSuperiorName() + { + return superiorName; + } + + + /** + * Sets the superior name. + * + * @param superiorName + * the superior name + */ + public void setSuperiorName( String superiorName ) + { + this.superiorName = superiorName; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AttributeType#getSuperior() + */ + public AttributeType getSuperior() throws NamingException + { + return null; + } + + + /** + * Gets the OID of the syntax. + * + * @return + * the OID of the syntax + */ + public String getSyntaxOid() + { + return syntaxOid; + } + + + /** + * Sets the OID of the syntax. + * + * @param syntaxOid + * the OID of the syntax + */ + public void setSyntaxOid( String syntaxOid ) + { + this.syntaxOid = syntaxOid; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AttributeType#getSyntax() + */ + public Syntax getSyntax() throws NamingException + { + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractAttributeType#setLength(int) + */ + public void setLength( int length ) + { + super.setLength( length ); + } + + + /** + * Gets the equality matching rule name. + * + * @return + * the equality matching rule name + */ + public String getEqualityName() + { + return equalityName; + } + + + /** + * Sets the equality matching rule name. + * + * @param equalityName + * the equality matching rule name + */ + public void setEqualityName( String equalityName ) + { + this.equalityName = equalityName; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AttributeType#getEquality() + */ + public MatchingRule getEquality() throws NamingException + { + return null; + } + + + /** + * Gets the ordering matching rule name. + * + * @return + * the ordering matching rule name + */ + public String getOrderingName() + { + return orderingName; + } + + + /** + * Sets the ordering matching rule name. + * + * @param orderingName + * the ordering matching rule name + */ + public void setOrderingName( String orderingName ) + { + this.orderingName = orderingName; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AttributeType#getOrdering() + */ + public MatchingRule getOrdering() throws NamingException + { + return null; + } + + + /** + * Gets the substring matching rule name. + * + * @return + * the substring matching rule name + */ + public String getSubstrName() + { + return substrName; + } + + + /** + * Sets the substring matching rule name. + * + * @param substrName + * the substring matching rule name + */ + public void setSubstrName( String substrName ) + { + this.substrName = substrName; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AttributeType#getSubstr() + */ + public MatchingRule getSubstr() throws NamingException + { + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#equals(java.lang.Object) + */ + public boolean equals( Object obj ) + { + if ( obj instanceof AttributeTypeImpl ) + { + AttributeTypeImpl at = ( AttributeTypeImpl ) obj; + + // OID + if ( ( getOid() == null ) && ( at.getOid() != null ) ) + { + return false; + } + else if ( ( getOid() != null ) && ( at.getOid() == null ) ) + { + return false; + } + else if ( ( getOid() != null ) && ( at.getOid() != null ) ) + { + if ( !getOid().equals( at.getOid() ) ) + { + return false; + } + } + + // Aliases + if ( ( getNames() == null ) && ( at.getNames() != null ) ) + { + return false; + } + else if ( ( getNames() != null ) && ( at.getNames() == null ) ) + { + return false; + } + else if ( ( getNames() != null ) && ( at.getNames() != null ) ) + { + if ( !getNames().equals( at.getNames() ) ) + { + return false; + } + } + + // Description + if ( ( getDescription() == null ) && ( at.getDescription() != null ) ) + { + return false; + } + else if ( ( getDescription() != null ) && ( at.getDescription() == null ) ) + { + return false; + } + else if ( ( getDescription() != null ) && ( at.getDescription() != null ) ) + { + if ( !getDescription().equals( at.getDescription() ) ) + { + return false; + } + } + + // Superior + if ( ( getSuperiorName() == null ) && ( at.getSuperiorName() != null ) ) + { + return false; + } + else if ( ( getSuperiorName() != null ) && ( at.getSuperiorName() == null ) ) + { + return false; + } + else if ( ( getSuperiorName() != null ) && ( at.getSuperiorName() != null ) ) + { + if ( !getSuperiorName().equals( at.getSuperiorName() ) ) + { + return false; + } + } + + // Usage + if ( ( getUsage() == null ) && ( at.getUsage() != null ) ) + { + return false; + } + else if ( ( getUsage() != null ) && ( at.getUsage() == null ) ) + { + return false; + } + else if ( ( getUsage() != null ) && ( at.getUsage() != null ) ) + { + if ( !getUsage().equals( at.getUsage() ) ) + { + return false; + } + } + + // Syntax + if ( ( getSyntaxOid() == null ) && ( at.getSyntaxOid() != null ) ) + { + return false; + } + else if ( ( getSyntaxOid() != null ) && ( at.getSyntaxOid() == null ) ) + { + return false; + } + else if ( ( getSyntaxOid() != null ) && ( at.getSyntaxOid() != null ) ) + { + if ( !getSyntaxOid().equals( at.getSyntaxOid() ) ) + { + return false; + } + } + + // Syntax length + if ( getLength() != at.getLength() ) + { + return false; + } + + // Obsolete + if ( isObsolete() != at.isObsolete() ) + { + return false; + } + + // Single value + if ( isSingleValue() != at.isSingleValue() ) + { + return false; + } + + // Collective + if ( isCollective() != at.isCollective() ) + { + return false; + } + + // No User Modification + if ( isCanUserModify() != at.isCanUserModify() ) + { + return false; + } + + // Equality matching rule + if ( ( getEqualityName() == null ) && ( at.getEqualityName() != null ) ) + { + return false; + } + else if ( ( getEqualityName() != null ) && ( at.getEqualityName() == null ) ) + { + return false; + } + else if ( ( getEqualityName() != null ) && ( at.getEqualityName() != null ) ) + { + if ( !getEqualityName().equals( at.getEqualityName() ) ) + { + return false; + } + } + + // Ordering matching rule + if ( ( getOrderingName() == null ) && ( at.getOrderingName() != null ) ) + { + return false; + } + else if ( ( getOrderingName() != null ) && ( at.getOrderingName() == null ) ) + { + return false; + } + else if ( ( getOrderingName() != null ) && ( at.getOrderingName() != null ) ) + { + if ( !getOrderingName().equals( at.getOrderingName() ) ) + { + return false; + } + } + + // Substring matching rule + if ( ( getSubstrName() == null ) && ( at.getSubstrName() != null ) ) + { + return false; + } + else if ( ( getSubstrName() != null ) && ( at.getSubstrName() == null ) ) + { + return false; + } + else if ( ( getSubstrName() != null ) && ( at.getSubstrName() != null ) ) + { + if ( !getSubstrName().equals( at.getSubstrName() ) ) + { + return false; + } + } + + // If we've reached here, the two objects are equal. + return true; + } + else + { + return false; + } + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/AttributeTypeImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/DependenciesComputer.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/DependenciesComputer.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/DependenciesComputer.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/DependenciesComputer.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,473 @@ +/* + * 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.model; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import org.apache.commons.collections.MultiMap; +import org.apache.commons.collections.map.MultiValueMap; +import org.apache.directory.shared.ldap.schema.SchemaObject; +import org.apache.directory.studio.schemaeditor.controller.SchemaHandler; + + +/** + * This class represents the DependenciesComputer. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class DependenciesComputer +{ + /** The schemas List */ + private List schemasList; + + /** The dependency ordered schemas List */ + private List dependencyOrderedSchemasList; + + /** The SchemaHandler */ + private SchemaHandler schemaHandler; + + // The dependencies MultiMaps + private MultiMap schemasDependencies; + private MultiMap attributeTypesDependencies; + private MultiMap objectClassesDependencies; + + + /** + * Creates a new instance of DependenciesComputer. + * + * @param schemasList + * the schemasList + * @throws DependencyComputerException + */ + public DependenciesComputer( List schemas ) throws DependencyComputerException + { + this.schemasList = schemas; + + // Creating the SchemaHandler + schemaHandler = new SchemaHandler(); + + // Creating the dependencies MultiMaps + schemasDependencies = new MultiValueMap(); + attributeTypesDependencies = new MultiValueMap(); + objectClassesDependencies = new MultiValueMap(); + + if ( schemas != null ) + { + // Adding the schemasList in the SchemaHandler + for ( Schema schema : this.schemasList ) + { + schemaHandler.addSchema( schema ); + } + + // Computing dependencies + for ( Schema schema : this.schemasList ) + { + List attributeTypes = schema.getAttributeTypes(); + if ( attributeTypes != null ) + { + for ( AttributeTypeImpl attributeType : attributeTypes ) + { + computeDependencies( schema, attributeType ); + } + } + + List objectClasses = schema.getObjectClasses(); + if ( objectClasses != null ) + { + for ( ObjectClassImpl objectClass : objectClasses ) + { + computeDependencies( schema, objectClass ); + } + } + } + + // Ordering the schemas + orderSchemasBasedOnDependencies(); + } + } + + + /** + * Computes the dependencies for the given attribute type. + * + * @param schema + * the schema + * @param attributeType + * the attribute type + * @throws DependencyComputerException + */ + private void computeDependencies( Schema schema, AttributeTypeImpl attributeType ) + throws DependencyComputerException + { + // Superior + String superior = attributeType.getSuperiorName(); + if ( superior != null ) + { + AttributeTypeImpl superiorAT = schemaHandler.getAttributeType( superior ); + if ( superiorAT == null ) + { + throw new DependencyComputerException( "The superior attribute type '" + superior + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the superior attribute type + attributeTypesDependencies.put( attributeType, superiorAT ); + + // Computing the schema dependency + computeSchemaDependency( schema, superiorAT ); + } + } + + // Syntax OID + String syntaxOID = attributeType.getSyntaxOid(); + if ( syntaxOID != null ) + { + SyntaxImpl syntax = schemaHandler.getSyntax( syntaxOID ); + if ( syntax == null ) + { + throw new DependencyComputerException( "The syntax with OID '" + syntaxOID + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + attributeTypesDependencies.put( attributeType, syntax ); + + // Computing the schema dependency + computeSchemaDependency( schema, syntax ); + } + } + + // Equality Matching Rule + String equalityName = attributeType.getEqualityName(); + if ( equalityName != null ) + { + MatchingRuleImpl equalityMatchingRule = schemaHandler.getMatchingRule( equalityName ); + if ( equalityMatchingRule == null ) + { + throw new DependencyComputerException( "The equality matching rule '" + equalityName + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + attributeTypesDependencies.put( attributeType, equalityMatchingRule ); + + // Computing the schema dependency + computeSchemaDependency( schema, equalityMatchingRule ); + } + } + + // Ordering Matching Rule + String orderingName = attributeType.getEqualityName(); + if ( orderingName != null ) + { + MatchingRuleImpl orderingMatchingRule = schemaHandler.getMatchingRule( orderingName ); + if ( orderingMatchingRule == null ) + { + throw new DependencyComputerException( "The ordering matching rule '" + orderingName + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + attributeTypesDependencies.put( attributeType, orderingMatchingRule ); + + // Computing the schema dependency + computeSchemaDependency( schema, orderingMatchingRule ); + } + } + + // Substring Matching Rule + String substringName = attributeType.getEqualityName(); + if ( substringName != null ) + { + MatchingRuleImpl substringMatchingRule = schemaHandler.getMatchingRule( substringName ); + if ( substringMatchingRule == null ) + { + throw new DependencyComputerException( "The substring matching rule '" + substringName + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + attributeTypesDependencies.put( attributeType, substringMatchingRule ); + + // Computing the schema dependency + computeSchemaDependency( schema, substringMatchingRule ); + } + } + } + + + /** + * Computes the dependencies for the given object Class. + * + * @param schema + * the schema + * @param objectClass + * the object class + * @throws DependencyComputerException + */ + private void computeDependencies( Schema schema, ObjectClassImpl objectClass ) throws DependencyComputerException + { + // Super Classes + String[] superClassesNames = objectClass.getSuperClassesNames(); + if ( superClassesNames != null ) + { + for ( String superClassName : superClassesNames ) + { + ObjectClassImpl superObjectClass = schemaHandler.getObjectClass( superClassName ); + if ( superObjectClass == null ) + { + throw new DependencyComputerException( "The superior object class '" + superClassName + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + objectClassesDependencies.put( objectClass, superObjectClass ); + + // Computing the schema dependency + computeSchemaDependency( schema, superObjectClass ); + } + } + } + + // Optional attribute types + String[] optionalAttributeTypes = objectClass.getMayNamesList(); + if ( optionalAttributeTypes != null ) + { + for ( String optionalAttributeTypeName : optionalAttributeTypes ) + { + AttributeTypeImpl optionalAttributeType = schemaHandler.getAttributeType( optionalAttributeTypeName ); + if ( optionalAttributeType == null ) + { + throw new DependencyComputerException( "The optional attribute type '" + optionalAttributeType + + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + objectClassesDependencies.put( objectClass, optionalAttributeType ); + + // Computing the schema dependency + computeSchemaDependency( schema, optionalAttributeType ); + } + } + } + + // Mandatory attribute types + String[] mandatoryAttributeTypes = objectClass.getMustNamesList(); + if ( mandatoryAttributeTypes != null ) + { + for ( String mandatoryAttributeTypeName : mandatoryAttributeTypes ) + { + AttributeTypeImpl mandatoryAttributeType = schemaHandler.getAttributeType( mandatoryAttributeTypeName ); + if ( mandatoryAttributeType == null ) + { + throw new DependencyComputerException( "The mandatory attribute type '" + + mandatoryAttributeTypeName + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the syntax + objectClassesDependencies.put( objectClass, mandatoryAttributeType ); + + // Computing the schema dependency + computeSchemaDependency( schema, mandatoryAttributeType ); + } + } + } + } + + + /** + * Computes the Schema Dependency. + * + * @param schema + * the schema + * @param object + * the SchemaObject + * @throws DependencyComputerException + */ + private void computeSchemaDependency( Schema schema, SchemaObject object ) throws DependencyComputerException + { + String schemaName = object.getSchema(); + if ( !schemaName.equalsIgnoreCase( schema.getName() ) ) + { + Schema schemaFromSuperiorAT = schemaHandler.getSchema( schemaName ); + if ( schemaFromSuperiorAT == null ) + { + throw new DependencyComputerException( "The schema '" + schemaName + "' does not exists in the Schema." ); + } + else + { + // Adding a dependency on the schema of schema object + schemasDependencies.put( schema, schemaFromSuperiorAT ); + } + } + } + + + /** + * Orders the schemas based on their dependencies. + */ + private void orderSchemasBasedOnDependencies() + { + dependencyOrderedSchemasList = new ArrayList(); + + int counter = 0; + schemasLoop: while ( dependencyOrderedSchemasList.size() != schemasList.size() ) + { + Schema schema = schemasList.get( counter ); + + if ( !dependencyOrderedSchemasList.contains( schema ) ) + { + + List dependencies = getDependencies( schema ); + if ( dependencies == null ) + { + dependencyOrderedSchemasList.add( schema ); + } + else + { + for ( Schema dependency : dependencies ) + { + if ( !dependencyOrderedSchemasList.contains( dependency ) ) + { + counter = ++counter % schemasList.size(); + + continue schemasLoop; + } + } + + dependencyOrderedSchemasList.add( schema ); + } + } + + counter = ++counter % schemasList.size(); + } + + } + + + /** + * Gets the dependencies of the given schema. + * + * @param schema + * the schema + * @return + * the dependencies of the schema + */ + @SuppressWarnings("unchecked") + public List getDependencies( Schema schema ) + { + List dependencies = ( List ) schemasDependencies.get( schema ); + + HashSet set = new HashSet(); + + if ( dependencies != null ) + { + set.addAll( dependencies ); + } + + return Arrays.asList( set.toArray( new Schema[0] ) ); + } + + + /** + * Gets the List of the schemas ordered according to their + * dependencies. + * + * @return + * the List of the schemas ordered according to their + * dependencies + */ + public List getDependencyOrderedSchemasList() + { + return dependencyOrderedSchemasList; + } + + + /** + * Gets the schemasList dependencies MultiMap. + * + * @return + * the schemasList dependencies MultiMap + */ + public MultiMap getSchemasDependencies() + { + return schemasDependencies; + } + + + /** + * Get the attribute types dependencies MultiMap. + * + * @return + * the attribute types dependencies MultiMap + */ + public MultiMap getAttributeTypesDependencies() + { + return attributeTypesDependencies; + } + + + /** + * Gets the object classes dependencies MultiMap. + * + * @return + * the object classes dependencies MultiMap + */ + public MultiMap getObjectClassesDependencies() + { + return objectClassesDependencies; + } + + /** + * This class represents the DependencyComputerException. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ + public class DependencyComputerException extends Exception + { + private static final long serialVersionUID = 1L; + + + /** + * Creates a new instance of DependencyComputerException. + * + * @param message + * the message + */ + public DependencyComputerException( String message ) + { + super( message ); + } + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/DependenciesComputer.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/MatchingRuleImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/MatchingRuleImpl.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/MatchingRuleImpl.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/MatchingRuleImpl.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,135 @@ +/* + * 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.model; + + +import java.util.Comparator; + +import javax.naming.NamingException; + +import org.apache.directory.shared.ldap.schema.AbstractMatchingRule; +import org.apache.directory.shared.ldap.schema.MutableSchemaObject; +import org.apache.directory.shared.ldap.schema.Normalizer; +import org.apache.directory.shared.ldap.schema.Syntax; + + +/** + * This class represents a matching rule. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class MatchingRuleImpl extends AbstractMatchingRule implements MutableSchemaObject +{ + private static final long serialVersionUID = 1L; + + /** The OID of the syntax */ + private String syntaxOid; + + + /** + * Gets the OID of the syntax. + * + * @return + * the OID of the syntax + */ + public String getSyntaxOid() + { + return syntaxOid; + } + + + /** + * Sets the OID of the syntax. + * + * @param syntaxOid + * the OID of the syntax + */ + public void setSyntaxOid( String syntaxOid ) + { + this.syntaxOid = syntaxOid; + } + + + /** + * Creates a new instance of MatchingRuleImpl. + * + * @param oid + * the OID + */ + public MatchingRuleImpl( String oid ) + { + super( oid ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.MatchingRule#getComparator() + */ + public Comparator getComparator() throws NamingException + { + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.MatchingRule#getNormalizer() + */ + public Normalizer getNormalizer() throws NamingException + { + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.MatchingRule#getSyntax() + */ + public Syntax getSyntax() throws NamingException + { + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setDescription(java.lang.String) + */ + public void setDescription( String description ) + { + super.setDescription( description ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setNames(java.lang.String[]) + */ + public void setNames( String[] names ) + { + super.setNames( names ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setObsolete(boolean) + */ + public void setObsolete( boolean obsolete ) + { + super.setObsolete( obsolete ); + } +} \ No newline at end of file Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/MatchingRuleImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ObjectClassImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ObjectClassImpl.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ObjectClassImpl.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ObjectClassImpl.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,414 @@ +/* + * 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.model; + + +import javax.naming.NamingException; + +import org.apache.directory.shared.ldap.schema.AbstractSchemaObject; +import org.apache.directory.shared.ldap.schema.AttributeType; +import org.apache.directory.shared.ldap.schema.MutableSchemaObject; +import org.apache.directory.shared.ldap.schema.ObjectClass; +import org.apache.directory.shared.ldap.schema.ObjectClassTypeEnum; + + +/** + * This class implements an object class. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class ObjectClassImpl extends AbstractSchemaObject implements MutableSchemaObject, ObjectClass +{ + private static final long serialVersionUID = 1L; + + /** The object OID */ + private String objectOid; + + /** The object class type */ + private ObjectClassTypeEnum type; + + /** The optional attribute type names list */ + private String[] mayNamesList = new String[0]; + + /** The mandatory attribute type names list */ + private String[] mustNamesList = new String[0]; + + /** The super class names list */ + private String[] superClassesNames = new String[0]; + + + /** + * Creates a new instance of ObjectClassImpl. + * + * @param oid + * the OID of the object class + */ + public ObjectClassImpl( String oid ) + { + super( oid ); + objectOid = oid; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setNames(java.lang.String[]) + */ + public void setNames( String[] names ) + { + super.setNames( names ); + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#getOid() + */ + public String getOid() + { + return objectOid; + } + + + /** + * Set the OID. + * + * @param oid + * the OID value + */ + public void setOid( String oid ) + { + objectOid = oid; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setDescription(java.lang.String) + */ + public void setDescription( String description ) + { + super.setDescription( description ); + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setObsolete(boolean) + */ + public void setObsolete( boolean obsolete ) + { + super.setObsolete( obsolete ); + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.ObjectClass#getType() + */ + public ObjectClassTypeEnum getType() + { + return type; + } + + + /** + * Sets the type of the object class. + * + * @param objectClassTypeEnum + * the type of the object class + */ + public void setType( ObjectClassTypeEnum objectClassTypeEnum ) + { + this.type = objectClassTypeEnum; + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.ObjectClass#isAbstract() + */ + public boolean isAbstract() + { + return ObjectClassTypeEnum.ABSTRACT.equals( getType() ); + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.ObjectClass#isAuxiliary() + */ + public boolean isAuxiliary() + { + return ObjectClassTypeEnum.AUXILIARY.equals( getType() ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.ObjectClass#isStructural() + */ + public boolean isStructural() + { + return ObjectClassTypeEnum.STRUCTURAL.equals( getType() ); + } + + + /** + * gets the names of the super classes. + * + * @return the names of the super classes + */ + public String[] getSuperClassesNames() + { + return superClassesNames; + } + + + /** + * Sets the names of the super classes. + * + * @param superClassesNames + * the names of the super classes + */ + public void setSuperClassesNames( String[] superClassesNames ) + { + this.superClassesNames = superClassesNames; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.ObjectClass#getSuperClasses() + */ + public ObjectClass[] getSuperClasses() throws NamingException + { + return null; + } + + + /** + * Gets the names of the mandatory attribute types. + * + * @return the names of the mandatory attribute types + */ + public String[] getMustNamesList() + { + return mustNamesList; + } + + + /** + * Set the names of the mandatory attribute types. + * + * @param mustNamesList + * the names of the mandatory attribute types + */ + public void setMustNamesList( String[] mustNamesList ) + { + this.mustNamesList = mustNamesList; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.ObjectClass#getMustList() + */ + public AttributeType[] getMustList() throws NamingException + { + return null; + } + + + /** + * Gets the names of the optional attribute types. + * + * @return the names of the optional attribute types + */ + public String[] getMayNamesList() + { + return mayNamesList; + } + + + /** + * Sets the names of the optional attribute types. + * + * @param mayNamesList + * the names of the optional attribute types + */ + public void setMayNamesList( String[] mayNamesList ) + { + this.mayNamesList = mayNamesList; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.ObjectClass#getMayList() + */ + public AttributeType[] getMayList() throws NamingException + { + return null; + } + + + /* + * (non-Javadoc) + * + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#equals(java.lang.Object) + */ + public boolean equals( Object obj ) + { + if ( obj instanceof ObjectClassImpl ) + { + ObjectClassImpl oc = ( ObjectClassImpl ) obj; + + // OID + if ( ( getOid() == null ) && ( oc.getOid() != null ) ) + { + return false; + } + else if ( ( getOid() != null ) && ( oc.getOid() == null ) ) + { + return false; + } + else if ( ( getOid() != null ) && ( oc.getOid() != null ) ) + { + if ( !getOid().equals( oc.getOid() ) ) + { + return false; + } + } + + // Aliases + if ( ( getNames() == null ) && ( oc.getNames() != null ) ) + { + return false; + } + else if ( ( getNames() != null ) && ( oc.getNames() == null ) ) + { + return false; + } + else if ( ( getNames() != null ) && ( oc.getNames() != null ) ) + { + if ( !getNames().equals( oc.getNames() ) ) + { + return false; + } + } + + // Description + if ( ( getDescription() == null ) && ( oc.getDescription() != null ) ) + { + return false; + } + else if ( ( getDescription() != null ) && ( oc.getDescription() == null ) ) + { + return false; + } + else if ( ( getDescription() != null ) && ( oc.getDescription() != null ) ) + { + if ( !getDescription().equals( oc.getDescription() ) ) + { + return false; + } + } + + // Superiors + if ( ( getSuperClassesNames() == null ) && ( oc.getSuperClassesNames() != null ) ) + { + return false; + } + else if ( ( getSuperClassesNames() != null ) && ( oc.getSuperClassesNames() == null ) ) + { + return false; + } + else if ( ( getSuperClassesNames() != null ) && ( oc.getSuperClassesNames() != null ) ) + { + if ( !getSuperClassesNames().equals( oc.getSuperClassesNames() ) ) + { + return false; + } + } + + // Type + if ( getType() != oc.getType() ) + { + return false; + } + + // Obsolete + if ( isObsolete() != oc.isObsolete() ) + { + return false; + } + + // Mandatory attributes + if ( ( getMustNamesList() == null ) && ( oc.getMustNamesList() != null ) ) + { + return false; + } + else if ( ( getMustNamesList() != null ) && ( oc.getMustNamesList() == null ) ) + { + return false; + } + else if ( ( getMustNamesList() != null ) && ( oc.getMustNamesList() != null ) ) + { + if ( !getMustNamesList().equals( oc.getMustNamesList() ) ) + { + return false; + } + } + + // Optional attributes + if ( ( getMayNamesList() == null ) && ( oc.getMayNamesList() != null ) ) + { + return false; + } + else if ( ( getMayNamesList() != null ) && ( oc.getMayNamesList() == null ) ) + { + return false; + } + else if ( ( getMayNamesList() != null ) && ( oc.getMayNamesList() != null ) ) + { + if ( !getMayNamesList().equals( oc.getMayNamesList() ) ) + { + return false; + } + } + + // If we've reached here, the two objects are equal. + return true; + } + else + { + return false; + } + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ObjectClassImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Project.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Project.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Project.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Project.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,363 @@ +/* + * 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.model; + + +import java.util.List; + +import org.apache.directory.studio.connection.core.Connection; +import org.apache.directory.studio.connection.core.StudioProgressMonitor; +import org.apache.directory.studio.schemaeditor.controller.SchemaHandler; +import org.apache.directory.studio.schemaeditor.model.io.SchemaConnector; +import org.apache.directory.studio.schemaeditor.model.schemachecker.SchemaChecker; + + +/** + * This class implements a Project. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class Project +{ + /** + * This enum represents the different states of Project. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ + public enum ProjectState + { + /** An Open project*/ + OPEN, + /** A Closed project*/ + CLOSED + } + + /** The type of the project */ + private ProjectType type; + + /** The name of the project */ + private String name; + + /** The connection of the project */ + private Connection connection; + + /** The state of the project */ + private ProjectState state; + + /** The SchemaConnector of the project */ + private SchemaConnector schemaConnector; + + /** The SchemaHandler */ + private SchemaHandler schemaHandler; + + /** The SchemaCheker */ + private SchemaChecker schemaChecker; + + /** The backup of the Online Schema */ + private List schemaBackup; + + /** The flag for Online Schema Fetch */ + private boolean hasOnlineSchemaBeenFetched = false; + + + /** + * Creates a new instance of Project. + * + * @param type + * the type of project + * @param name + * the name of project + */ + public Project( ProjectType type, String name ) + { + this.type = type; + this.name = name; + this.state = ProjectState.CLOSED; + schemaHandler = new SchemaHandler(); + schemaChecker = new SchemaChecker(); + } + + + /** + * Creates a new instance of Project. + * The default type is used : OFFLINE. + */ + public Project() + { + type = ProjectType.OFFLINE; + this.state = ProjectState.CLOSED; + schemaHandler = new SchemaHandler(); + schemaChecker = new SchemaChecker(); + } + + + /** + * Creates a new instance of Project. + * + * @param type + * the type of project + */ + public Project( ProjectType type ) + { + this.type = type; + this.state = ProjectState.CLOSED; + schemaHandler = new SchemaHandler(); + schemaChecker = new SchemaChecker(); + } + + + /** + * Gets the type of the project. + * + * @return + * the type of the project + */ + public ProjectType getType() + { + return type; + } + + + /** + * Sets the type of the project. + * + * @param type + * the type of the project + */ + public void setType( ProjectType type ) + { + this.type = type; + } + + + /** + * Gets the name of the project. + * + * @return + * the name of the project + */ + public String getName() + { + return name; + } + + + /** + * Sets the name of the project + * + * @param name + * the name + */ + public void setName( String name ) + { + this.name = name; + } + + + /** + * Gets the state of the project. + * + * @return + * the state of the project + */ + public ProjectState getState() + { + return state; + } + + + /** + * Sets the state of the project + * + * @param state + * the state + */ + public void setState( ProjectState state ) + { + this.state = state; + } + + + /** + * Gets the SchemaHandler + * + * @return + * the SchemaHandler + */ + public SchemaHandler getSchemaHandler() + { + return schemaHandler; + } + + + /** + * Gets the SchemaChecker + * + * @return + * the SchemaChecker + */ + public SchemaChecker getSchemaChecker() + { + return schemaChecker; + } + + + /** + * Gets the Connection. + * + * @return + * the connection + */ + public Connection getConnection() + { + return connection; + } + + + /** + * Sets the Connection. + * + * @param connection + * the connection + */ + public void setConnection( Connection connection ) + { + this.connection = connection; + } + + + /** + * Fetches the Online Schema. + * + * @param monitor + * a StudioProgressMonitor + */ + public void fetchOnlineSchema( StudioProgressMonitor monitor ) + { + if ( ( !hasOnlineSchemaBeenFetched ) && ( connection != null ) && ( schemaConnector != null ) ) + { + schemaBackup = schemaConnector.importSchema( connection, monitor ); + + if ( schemaBackup != null ) + { + monitor.beginTask( "Adding Schema to project", schemaBackup.size() ); + for ( Schema schema : schemaBackup ) + { + getSchemaHandler().addSchema( schema ); + } + } + + // TODO Add error Handling + monitor.done(); + hasOnlineSchemaBeenFetched = true; + } + } + + + /** + * Returns whether the online schema has been fetched. + * + * @return + * true if the online schema has bee fetched + */ + public boolean hasOnlineSchemaBeenFetched() + { + return hasOnlineSchemaBeenFetched; + } + + + /** + * Gets the Schema Backup. + * + * @return + * the Schema Backup + */ + public List getSchemaBackup() + { + return schemaBackup; + } + + + /** + * Sets the Schema Backup + * + * @param schemaBackup + * the Schema Backup + */ + public void setSchemaBackup( List schemaBackup ) + { + this.schemaBackup = schemaBackup; + } + + + /** + * Gets the SchemaConnector. + * + * @return + * the SchemaConnector + */ + public SchemaConnector getSchemaConnector() + { + return schemaConnector; + } + + + /** + * Sets the SchemaConnector. + * + * @param schemaConnector + * the SchemaConnector + */ + public void setSchemaConnector( SchemaConnector schemaConnector ) + { + this.schemaConnector = schemaConnector; + } + + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) + { + if ( obj instanceof Project ) + { + Project project = ( Project ) obj; + if ( !getName().equals( project.getName() ) ) + { + return false; + } + else if ( !getType().equals( project.getType() ) ) + { + return false; + } + else if ( !getState().equals( project.getState() ) ) + { + return false; + } + + return true; + } + + // Default + return super.equals( obj ); + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Project.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ProjectType.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ProjectType.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ProjectType.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ProjectType.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,35 @@ +/* + * 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.model; + + +/** + * This enum represents the different types of Project. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public enum ProjectType +{ + /** A schema project not linked to any LDAP Server */ + OFFLINE, + /** A schema project linked to a Directory Server */ + ONLINE +} \ No newline at end of file Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/ProjectType.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Schema.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Schema.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Schema.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Schema.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,206 @@ +/* + * 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.model; + + +import java.util.List; + + +/** + * This interface represents a Schema. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public interface Schema +{ + /** + * Gets the name of the Schema. + * + * @return + * the name of the Schema + */ + public String getName(); + + + /** + * Sets the name of the Schema. + * + * @param name + * the name of the schema + */ + public void setName( String name ); + + + /** + * Gets all the ObjectClassImpl objects contained in the Schema. + * + * @return + * all the ObjectClassImpl objects contained in the Schema + */ + public List getObjectClasses(); + + + /** + * Gets all the AttributeTypeImpl objects contained in the Schema. + * + * @return + * all the AttributeTypeImpl objects contained in the Schema + */ + public List getAttributeTypes(); + + + /** + * Gets all the MatchingRuleImpl objects contained in the Schema. + * + * @return + * all the MatchingRuleImpl objects contained in the Schema + */ + public List getMatchingRules(); + + + /** + * Gets all the SyntaxImpl objects contained in the Schema. + * + * @return + * all the SyntaxImpl objects contained in the Schema + */ + public List getSyntaxes(); + + + /** + * Gets the ObjectClassImpl identified by the given id. + * + * @param id + * the name or the oid of the ObjectClassImpl + * @return + * the ObjectClassImpl identified by the given id, or null if the + * ObjectClassImpl has not been found + */ + public ObjectClassImpl getObjectClass( String id ); + + + /** + * Gets the AttributeTypeImpl identified by the given id. + * + * @param id + * the name or the oid of the AttributeTypeImpl + * @return + * the AttributeTypeImpl identified by the given id, or null if the + * AttributeTypeImpl has not been found + */ + public AttributeTypeImpl getAttributeType( String id ); + + + /** + * Gets the MatchingRuleImpl identified by the given id. + * + * @param id + * the name or the oid of the MatchingRuleImpl + * @return + * the MatchingRuleImpl identified by the given id, or null if the + * MatchingRuleImpl has not been found + */ + public MatchingRuleImpl getMatchingRule( String id ); + + + /** + * Gets the SyntaxImpl identified by the given id. + * + * @param id + * the name or the oid of the SyntaxImpl + * @return + * the SyntaxImpl identified by the given id, or null if the + * SyntaxImpl has not been found + */ + public SyntaxImpl getSyntax( String id ); + + + /** + * Adds an ObjectClassImpl to the Schema. + * + * @param oc + * the ObjectClassImpl + */ + public boolean addObjectClass( ObjectClassImpl oc ); + + + /** + * Adds an AttributeTypeImpl to the Schema. + * + * @param at + * the AttributeTypeImpl + */ + public boolean addAttributeType( AttributeTypeImpl at ); + + + /** + * Adds a MatchingRuleImpl from the Schema. + * + * @param mr + * the MatchingRuleImpl + */ + public boolean addMatchingRule( MatchingRuleImpl mr ); + + + /** + * Adds a SyntaxImpl from the Schema. + * + * @param syntax + * the SyntaxImpl + */ + public boolean addSyntax( SyntaxImpl syntax ); + + + /** + * Removes an ObjectClassImpl from the Schema. + * + * @param oc + * the ObjectClassImpl + */ + public boolean removeObjectClass( ObjectClassImpl oc ); + + + /** + * Removes an AttributeTypeImpl from the Schema. + * + * @param at + * the AttributeTypeImpl + */ + public boolean removeAttributeType( AttributeTypeImpl at ); + + + /** + * Removes a MatchingRuleImpl from the Schema. + * + * @param mr + * the MatchingRuleImpl + */ + public boolean removeMatchingRule( MatchingRuleImpl mr ); + + + /** + * Removes a SyntaxImpl from the Schema. + * + * @param syntax + * the SyntaxImpl + */ + public boolean removeSyntax( SyntaxImpl syntax ); +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/Schema.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SchemaImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SchemaImpl.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SchemaImpl.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SchemaImpl.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,308 @@ +/* + * 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.model; + + +import java.util.ArrayList; +import java.util.List; + + +/** + * This class represents a schema. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class SchemaImpl implements Schema +{ + /** The name */ + private String name; + + /** The AttributeType List */ + private List attributeTypes = new ArrayList(); + + /** The ObjectClass List */ + private List objectClasses = new ArrayList(); + + /** The MatchingRule List */ + private List matchingRules = new ArrayList(); + + /** The Syntax List */ + private List syntaxes = new ArrayList(); + + + /** + * Creates a new instance of SchemaImpl. + * + * @param name + * the name of the schema + */ + public SchemaImpl( String name ) + { + this.name = name; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#addAttributeType(org.apache.directory.shared.ldap.schema.AttributeType) + */ + public boolean addAttributeType( AttributeTypeImpl at ) + { + return attributeTypes.add( at ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#addMatchingRule(org.apache.directory.shared.ldap.schema.MatchingRule) + */ + public boolean addMatchingRule( MatchingRuleImpl mr ) + { + return matchingRules.add( mr ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#addObjectClass(org.apache.directory.shared.ldap.schema.ObjectClass) + */ + public boolean addObjectClass( ObjectClassImpl oc ) + { + return objectClasses.add( oc ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#addSyntax(org.apache.directory.shared.ldap.schema.Syntax) + */ + public boolean addSyntax( SyntaxImpl syntax ) + { + return syntaxes.add( syntax ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getAttributeType(java.lang.String) + */ + public AttributeTypeImpl getAttributeType( String id ) + { + for ( AttributeTypeImpl at : attributeTypes ) + { + String[] aliases = at.getNames(); + if ( aliases != null ) + { + for ( String alias : aliases ) + { + if ( alias.equalsIgnoreCase( id ) ) + { + return at; + } + } + } + if ( at.getOid().equalsIgnoreCase( id ) ) + { + return at; + } + } + + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getAttributeTypes() + */ + public List getAttributeTypes() + { + return attributeTypes; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getMatchingRule(java.lang.String) + */ + public MatchingRuleImpl getMatchingRule( String id ) + { + for ( MatchingRuleImpl mr : matchingRules ) + { + String[] aliases = mr.getNames(); + if ( aliases != null ) + { + for ( String alias : aliases ) + { + if ( alias.equalsIgnoreCase( id ) ) + { + return mr; + } + } + } + if ( mr.getOid().equalsIgnoreCase( id ) ) + { + return mr; + } + } + + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getMatchingRules() + */ + public List getMatchingRules() + { + return matchingRules; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getName() + */ + public String getName() + { + return name; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getObjectClass(java.lang.String) + */ + public ObjectClassImpl getObjectClass( String id ) + { + for ( ObjectClassImpl oc : objectClasses ) + { + String[] aliases = oc.getNames(); + if ( aliases != null ) + { + for ( String alias : aliases ) + { + if ( alias.equalsIgnoreCase( id ) ) + { + return oc; + } + } + } + if ( oc.getOid().equalsIgnoreCase( id ) ) + { + return oc; + } + } + + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getObjectClasses() + */ + public List getObjectClasses() + { + return objectClasses; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getSyntax(java.lang.String) + */ + public SyntaxImpl getSyntax( String id ) + { + for ( SyntaxImpl syntax : syntaxes ) + { + String[] aliases = syntax.getNames(); + if ( aliases != null ) + { + for ( String alias : aliases ) + { + if ( alias.equalsIgnoreCase( id ) ) + { + return syntax; + } + } + } + if ( syntax.getOid().equalsIgnoreCase( id ) ) + { + return syntax; + } + } + + return null; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#getSyntaxes() + */ + public List getSyntaxes() + { + return syntaxes; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#removeAttributeType(org.apache.directory.shared.ldap.schema.AttributeType) + */ + public boolean removeAttributeType( AttributeTypeImpl at ) + { + return attributeTypes.remove( at ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#removeMatchingRule(org.apache.directory.shared.ldap.schema.MatchingRule) + */ + public boolean removeMatchingRule( MatchingRuleImpl mr ) + { + return matchingRules.remove( mr ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#removeObjectClass(org.apache.directory.shared.ldap.schema.ObjectClass) + */ + public boolean removeObjectClass( ObjectClassImpl oc ) + { + return objectClasses.remove( oc ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#removeSyntax(org.apache.directory.shared.ldap.schema.Syntax) + */ + public boolean removeSyntax( SyntaxImpl syntax ) + { + return syntaxes.remove( syntax ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.Schema#setName(java.lang.String) + */ + public void setName( String name ) + { + this.name = name; + } + + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() + { + return getName(); + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SchemaImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SyntaxImpl.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SyntaxImpl.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SyntaxImpl.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SyntaxImpl.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,95 @@ +/* + * 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.model; + + +import javax.naming.NamingException; + +import org.apache.directory.shared.ldap.schema.AbstractSyntax; +import org.apache.directory.shared.ldap.schema.syntax.SyntaxChecker; + + +/** + * This class represents a syntax. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class SyntaxImpl extends AbstractSyntax +{ + private static final long serialVersionUID = 1L; + + + /** + * Creates a new instance of SyntaxImpl. + * + * @param oid + * the OID + */ + public SyntaxImpl( String oid ) + { + super( oid ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSyntax#setHumanReadable(boolean) + */ + public void setHumanReadable( boolean isHumanReadable ) + { + super.setHumanReadable( isHumanReadable ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setDescription(java.lang.String) + */ + public void setDescription( String description ) + { + super.setDescription( description ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setNames(java.lang.String[]) + */ + public void setNames( String[] names ) + { + super.setNames( names ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.AbstractSchemaObject#setObsolete(boolean) + */ + public void setObsolete( boolean obsolete ) + { + super.setObsolete( obsolete ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.shared.ldap.schema.Syntax#getSyntaxChecker() + */ + public SyntaxChecker getSyntaxChecker() throws NamingException + { + return null; + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/SyntaxImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractDifference.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractDifference.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractDifference.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractDifference.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,126 @@ +/* + * 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.model.difference; + + +/** + * This class represents the AbstractDifference. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class AbstractDifference implements Difference +{ + /** The source Object */ + private Object source; + + /** The destination Object */ + private Object destination; + + /** The type of difference */ + private DifferenceType type; + + + /** + * Creates a new instance of AbstractDifference. + * + * @param source + * the source Object + * @param destination + * the destination Object + */ + public AbstractDifference( Object source, Object destination ) + { + this.source = source; + this.destination = destination; + } + + + /** + * Creates a new instance of AbstractDifference. + * + * @param source + * the source Object + * @param destination + * the destination Object + * @param type + * the type + */ + public AbstractDifference( Object source, Object destination, DifferenceType type ) + { + this.source = source; + this.destination = destination; + this.type = type; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#getDestination() + */ + public Object getDestination() + { + return destination; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#setDestination(java.lang.Object) + */ + public void setDestination( Object destination ) + { + this.destination = destination; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#getSource() + */ + public Object getSource() + { + return source; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#setSource(java.lang.Object) + */ + public void setSource( Object source ) + { + this.source = source; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#getType() + */ + public DifferenceType getType() + { + return type; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.Difference#setType(org.apache.directory.studio.schemaeditor.model.difference.DifferenceType) + */ + public void setType( DifferenceType type ) + { + this.type = type; + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractDifference.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractPropertyDifference.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractPropertyDifference.java?rev=592094&view=auto ============================================================================== --- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractPropertyDifference.java (added) +++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractPropertyDifference.java Mon Nov 5 09:14:24 2007 @@ -0,0 +1,102 @@ +/* + * 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.model.difference; + + +/** + * This abstract class represents an Abstract Property Difference. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public abstract class AbstractPropertyDifference extends AbstractDifference implements PropertyDifference +{ + /** The old value*/ + private Object oldValue; + + /** The new value */ + private Object newValue; + + + /** + * Creates a new instance of AbstractPropertyDifference. + * + * @param source + * the source Object + * @param destination + * the destination Object + * @param type + * the type + */ + public AbstractPropertyDifference( Object source, Object destination, DifferenceType type ) + { + super( source, destination, type ); + } + + + /** + * Creates a new instance of AbstractPropertyDifference. + * + * @param source + * the source Object + * @param destination + * the destination Object + */ + public AbstractPropertyDifference( Object source, Object destination ) + { + super( source, destination ); + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.PropertyDifference#getNewValue() + */ + public Object getNewValue() + { + return newValue; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.PropertyDifference#setNewValue(java.lang.Object) + */ + public void setNewValue( Object newValue ) + { + this.newValue = newValue; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.PropertyDifference#getOldValue() + */ + public Object getOldValue() + { + return oldValue; + } + + + /* (non-Javadoc) + * @see org.apache.directory.studio.schemaeditor.model.difference.PropertyDifference#setOldValue(java.lang.Object) + */ + public void setOldValue( Object oldValue ) + { + this.oldValue = oldValue; + } +} Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/model/difference/AbstractPropertyDifference.java ------------------------------------------------------------------------------ svn:eol-style = native