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/12/18 18:15:08 UTC
svn commit: r488345 [7/12] - in /directory/sandbox/pamarcelot/ldapstudio:
ldapstudio-browser-core/ ldapstudio-browser-core/META-INF/
ldapstudio-browser-core/about_files/ ldapstudio-browser-core/lib/
ldapstudio-browser-core/src/ ldapstudio-browser-core/...
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/ReferralException.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/ReferralException.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/ReferralException.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/ReferralException.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,114 @@
+/*
+ * 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.browser.core.internal.model;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IReferralHandler;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.SearchParameter;
+import org.apache.directory.ldapstudio.browser.core.model.URL;
+
+
+public class ReferralException extends ConnectionException
+{
+
+ private static final long serialVersionUID = 1L;
+
+ private SearchParameter originalSearchParameter;
+
+ private String[] referrals;
+
+
+ public ReferralException( SearchParameter originalSearchParameter, String[] referrals, int ldapStatusCode,
+ String message, Throwable originalThrowable )
+ {
+ super( ldapStatusCode, message, originalThrowable );
+ this.originalSearchParameter = originalSearchParameter;
+ this.referrals = referrals;
+ }
+
+
+ public String[] getReferrals()
+ {
+ return referrals;
+ }
+
+
+ public ISearch[] getReferralSearches() throws ConnectionException
+ {
+
+ // get referral handler
+ IReferralHandler referralHandler = BrowserCorePlugin.getDefault().getReferralHandler();
+ if ( referralHandler == null )
+ {
+ throw new ConnectionException( BrowserCoreMessages.model__no_referral_handler );
+ }
+
+ List referralSearchList = new ArrayList( getReferrals().length );
+
+ for ( int i = 0; i < getReferrals().length; i++ )
+ {
+
+ // parse referral URL
+ String referral = getReferrals()[i];
+ URL referralUrl = new URL( referral );
+
+ // get referral connection
+ IConnection referralConnection = referralHandler.getReferralConnection( referralUrl );
+ if ( referralConnection == null )
+ {
+ // throw new
+ // ConnectionException(BrowserCoreMessages.model__no_referral_connection);
+ continue;
+ }
+
+ // create search
+ try
+ {
+ ISearch referralSearch = new Search(
+ null, //
+ referralConnection, //
+ referralUrl.hasDn() ? referralUrl.getDn() : originalSearchParameter.getSearchBase(), referralUrl
+ .hasFilter() ? referralUrl.getFilter() : originalSearchParameter.getFilter(),
+ originalSearchParameter.getReturningAttributes(), referralUrl.hasScope() ? referralUrl.getScope()
+ : originalSearchParameter.getScope(), originalSearchParameter.getCountLimit(),
+ originalSearchParameter.getTimeLimit(), originalSearchParameter.getAliasesDereferencingMethod(),
+ originalSearchParameter.getReferralsHandlingMethod(), originalSearchParameter.isInitChildrenFlag(),
+ originalSearchParameter.isInitAliasAndReferralFlag(), originalSearchParameter.getControls() );
+ referralSearchList.add( referralSearch );
+ }
+ catch ( NoSuchFieldException nsfe )
+ {
+ }
+
+ }
+
+ ISearch[] referralSearches = ( ISearch[] ) referralSearchList.toArray( new ISearch[referralSearchList.size()] );
+ return referralSearches;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/RootDSE.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,140 @@
+/*
+ * 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.browser.core.internal.model;
+
+
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Properties;
+
+import org.apache.directory.ldapstudio.browser.core.events.ModelModifier;
+import org.apache.directory.ldapstudio.browser.core.model.DN;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IRootDSE;
+import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
+
+
+public final class RootDSE extends BaseDNEntry implements IRootDSE
+{
+
+ private static final long serialVersionUID = -8445018787232919754L;
+
+ public static Properties oidMap = new Properties();
+ static
+ {
+
+ try
+ {
+ URL url = RootDSE.class.getClassLoader().getResource(
+ "org/apache/directory/ldapstudio/browser/core/model/ldap_oids.txt" ); //$NON-NLS-1$
+ oidMap.load( url.openStream() );
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+ protected RootDSE()
+ {
+ }
+
+
+ public RootDSE( IConnection connection, ModelModifier source ) throws ModelModificationException
+ {
+ super();
+ this.setDirectoryEntry( true );
+ // this.connectionName = connection.getName();
+ this.connection = connection;
+ this.baseDn = new DN();
+ }
+
+
+ public boolean hasChildren()
+ {
+ return false;
+ }
+
+
+ public boolean isAttributesInitialized()
+ {
+ return true;
+ }
+
+
+ public String[] getSupportedExtensions()
+ {
+ if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ) != null )
+ {
+ return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDEXTENSION ).getStringValues() );
+ }
+ else
+ {
+ return new String[0];
+ }
+ }
+
+
+ public String[] getSupportedControls()
+ {
+ if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ) != null )
+ {
+ return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDCONTROL ).getStringValues() );
+ }
+ else
+ {
+ return new String[0];
+ }
+ }
+
+
+ public String[] getSupportedFeatures()
+ {
+ if ( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ) != null )
+ {
+ return get( getAttribute( ROOTDSE_ATTRIBUTE_SUPPORTEDFEATURES ).getStringValues() );
+ }
+ else
+ {
+ return new String[0];
+ }
+ }
+
+
+ private String[] get( String[] a )
+ {
+ for ( int i = 0; i < a.length; i++ )
+ {
+ if ( oidMap.containsKey( a[i] ) )
+ {
+ String s = ( String ) oidMap.get( a[i] );
+ a[i] = s;
+ if ( s.matches( "^\".*\"" ) ) { //$NON-NLS-1$
+ a[i] = s.substring( 1, s.indexOf( "\"", 1 ) ); //$NON-NLS-1$
+ }
+ }
+ }
+ Arrays.sort( a );
+ return a;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Search.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Search.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Search.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Search.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,397 @@
+/*
+ * 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.browser.core.internal.model;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.events.SearchUpdateEvent;
+import org.apache.directory.ldapstudio.browser.core.internal.search.LdapSearchPageScoreComputer;
+import org.apache.directory.ldapstudio.browser.core.model.Control;
+import org.apache.directory.ldapstudio.browser.core.model.DN;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
+import org.apache.directory.ldapstudio.browser.core.model.SearchParameter;
+import org.apache.directory.ldapstudio.browser.core.model.URL;
+import org.eclipse.search.ui.ISearchPageScoreComputer;
+
+
+public class Search implements ISearch
+{
+
+ private static final long serialVersionUID = -3482673086666351174L;
+
+ private IConnection connection;
+
+ private ISearchResult[] searchResults;
+
+ private SearchParameter searchParameter;
+
+ private boolean countLimitExceeded;
+
+
+ /**
+ * Creates a new search with the following parameters:
+ *
+ * <li>searchName: current date
+ * <li>connection: null
+ * <li>searchBase: empty
+ * <li>filter: empty (objectClass=*)
+ * <li>returningAttributea: none
+ * <li>scope: one level
+ * <li>countLimit: preference value
+ * <li>timeLimit: preference value
+ */
+ public Search()
+ {
+ this(
+ new SimpleDateFormat( "yyyy-MM-dd HH-mm-ss" ).format( new Date() ), //$NON-NLS-1$
+ null, new DN(), FILTER_TRUE, NO_ATTRIBUTES, ISearch.SCOPE_ONELEVEL, 0, 0,
+ IConnection.DEREFERENCE_ALIASES_NEVER, IConnection.HANDLE_REFERRALS_IGNORE, false, false, null );
+ }
+
+
+ public Search( IConnection conn, SearchParameter searchParameter )
+ {
+ this.connection = conn;
+ this.searchResults = null;
+ this.searchParameter = searchParameter;
+ this.countLimitExceeded = false;
+ }
+
+
+ /**
+ * Creates a new search with the given search parameters
+ *
+ * @param searchName
+ * The name of the search
+ * @param conn
+ * The connection of the search
+ * @param searchBase
+ * The base DN of the search
+ * @param filter
+ * The filter to use, null or empty filters will be
+ * transformed to (objectClass=*)
+ * @param returningAttributes
+ * The attributes to return, empty array indicates none,
+ * null indicates all
+ * @param scope
+ * the search scope, one of SCOPE_OBJECT, SCOPE_ONELEVEL,
+ * SCOPE_SUBTREE
+ * @param countLimit
+ * The count limit, 0 indicates no limit
+ * @param timeLimit
+ * The time limit in ms, 0 indicats no limit
+ * @param aliasesDereferencingMethod
+ * @param referralsHandlingMethod
+ * @param initChildrenFlag
+ * @param initAliasFlag
+ * @param initObjectClasses
+ */
+ public Search( String searchName, IConnection conn, DN searchBase, String filter, String[] returningAttributes,
+ int scope, int countLimit, int timeLimit, int aliasesDereferencingMethod, int referralsHandlingMethod,
+ boolean initChildrenFlag, boolean initAliasAndReferralsFlag, Control[] controls )
+ {
+ this.connection = conn;
+ this.searchResults = null;
+
+ this.searchParameter = new SearchParameter();
+ this.searchParameter.setName( searchName );
+ this.searchParameter.setSearchBase( searchBase );
+ if ( filter == null || "".equals( filter ) ) { //$NON-NLS-1$
+ this.searchParameter.setFilter( FILTER_TRUE );
+ }
+ else
+ {
+ this.searchParameter.setFilter( filter );
+ }
+ if ( returningAttributes == null )
+ {
+ this.searchParameter.setReturningAttributes( new String[]
+ { ALL_USER_ATTRIBUTES } );
+ }
+ else
+ {
+ this.searchParameter.setReturningAttributes( returningAttributes );
+ }
+ this.searchParameter.setScope( scope );
+ this.searchParameter.setTimeLimit( timeLimit );
+ this.searchParameter.setCountLimit( countLimit );
+ this.searchParameter.setAliasesDereferencingMethod( aliasesDereferencingMethod );
+ this.searchParameter.setReferralsHandlingMethod( referralsHandlingMethod );
+ this.searchParameter.setInitChildrenFlag( initChildrenFlag );
+ this.searchParameter.setInitAliasAndReferralFlag( initAliasAndReferralsFlag );
+ this.searchParameter.setControls( controls );
+ this.countLimitExceeded = false;
+ }
+
+
+ public URL getUrl()
+ {
+ return new URL( this );
+ }
+
+
+ private void fireSearchUpdated( int detail )
+ {
+ if ( this.getName() != null && !"".equals( this.getName() ) ) { //$NON-NLS-1$
+ EventRegistry.fireSearchUpdated( new SearchUpdateEvent( this, detail ), this );
+ }
+ }
+
+
+ public boolean isInitChildrenFlag()
+ {
+ return this.searchParameter.isInitChildrenFlag();
+ }
+
+
+ public boolean isInitAliasAndReferralFlag()
+ {
+ return this.searchParameter.isInitAliasAndReferralFlag();
+ }
+
+
+ public Control[] getControls()
+ {
+ return this.searchParameter.getControls();
+ }
+
+
+ public int getCountLimit()
+ {
+ return this.searchParameter.getCountLimit();
+ }
+
+
+ public void setCountLimit( int countLimit )
+ {
+ this.searchParameter.setCountLimit( countLimit );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public String getFilter()
+ {
+ return this.searchParameter.getFilter();
+ }
+
+
+ public void setFilter( String filter )
+ {
+ if ( filter == null || "".equals( filter ) ) { //$NON-NLS-1$
+ this.searchParameter.setFilter( FILTER_TRUE );
+ }
+ else
+ {
+ this.searchParameter.setFilter( filter );
+ }
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public String[] getReturningAttributes()
+ {
+ return this.searchParameter.getReturningAttributes();
+ }
+
+
+ public void setReturningAttributes( String[] returningAttributes )
+ {
+ this.searchParameter.setReturningAttributes( returningAttributes );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public int getScope()
+ {
+ return this.searchParameter.getScope();
+ }
+
+
+ public void setScope( int scope )
+ {
+ this.searchParameter.setScope( scope );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public int getAliasesDereferencingMethod()
+ {
+ return this.searchParameter.getAliasesDereferencingMethod();
+ }
+
+
+ public void setAliasesDereferencingMethod( int aliasesDereferencingMethod )
+ {
+ this.searchParameter.setAliasesDereferencingMethod( aliasesDereferencingMethod );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public int getReferralsHandlingMethod()
+ {
+ return this.searchParameter.getReferralsHandlingMethod();
+ }
+
+
+ public void setReferralsHandlingMethod( int referralsHandlingMethod )
+ {
+ this.searchParameter.setReferralsHandlingMethod( referralsHandlingMethod );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public DN getSearchBase()
+ {
+ return this.searchParameter.getSearchBase();
+ }
+
+
+ public void setSearchBase( DN searchBase )
+ {
+ this.searchParameter.setSearchBase( searchBase );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public int getTimeLimit()
+ {
+ return this.searchParameter.getTimeLimit();
+ }
+
+
+ public void setTimeLimit( int timeLimit )
+ {
+ this.searchParameter.setTimeLimit( timeLimit );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public String getName()
+ {
+ return this.searchParameter.getName();
+ }
+
+
+ public void setName( String searchName )
+ {
+ this.searchParameter.setName( searchName );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_RENAMED );
+ }
+
+
+ public ISearchResult[] getSearchResults()
+ {
+ return searchResults;
+ }
+
+
+ public void setSearchResults( ISearchResult[] searchResults )
+ {
+ this.searchResults = searchResults;
+ if ( searchResults != null )
+ {
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PERFORMED );
+ }
+ }
+
+
+ public boolean isCountLimitExceeded()
+ {
+ return this.countLimitExceeded;
+ }
+
+
+ public void setCountLimitExceeded( boolean countLimitExceeded )
+ {
+ this.countLimitExceeded = countLimitExceeded;
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PERFORMED );
+ }
+
+
+ public IConnection getConnection()
+ {
+ return connection;
+ }
+
+
+ public void setConnection( IConnection connection )
+ {
+ this.connection = connection;
+ this.searchParameter.setCountLimit( connection.getCountLimit() );
+ this.searchParameter.setTimeLimit( connection.getTimeLimit() );
+ this.searchParameter.setAliasesDereferencingMethod( connection.getAliasesDereferencingMethod() );
+ this.searchParameter.setReferralsHandlingMethod( connection.getReferralsHandlingMethod() );
+ this.fireSearchUpdated( SearchUpdateEvent.SEARCH_PARAMETER_UPDATED );
+ }
+
+
+ public String toString()
+ {
+ // return this.searchParameter.getFilter() +
+ // Integer.toString(this.searchResults!=null?this.searchResults.length:0);
+ return this.getName() + " (" + this.connection + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+
+ public Object clone()
+ {
+ return new Search( this.getName(), this.getConnection(), this.getSearchBase(), this.getFilter(), this
+ .getReturningAttributes(), this.getScope(), this.getCountLimit(), this.getTimeLimit(), this
+ .getAliasesDereferencingMethod(), this.getReferralsHandlingMethod(), this.isInitChildrenFlag(), this
+ .isInitAliasAndReferralFlag(), this.getControls() );
+ }
+
+
+ public SearchParameter getSearchParameter()
+ {
+ return searchParameter;
+ }
+
+
+ public void setSearchParameter( SearchParameter searchParameter )
+ {
+ this.searchParameter = searchParameter;
+ }
+
+
+ public Object getAdapter( Class adapter )
+ {
+ if ( adapter.isAssignableFrom( ISearchPageScoreComputer.class ) )
+ {
+ return new LdapSearchPageScoreComputer();
+ }
+ if ( adapter == IConnection.class )
+ {
+ return this.connection;
+ }
+ if ( adapter == ISearch.class )
+ {
+ return this;
+ }
+ return null;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/SearchResult.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/SearchResult.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/SearchResult.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/SearchResult.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,132 @@
+/*
+ * 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.browser.core.internal.model;
+
+
+import java.util.ArrayList;
+
+import org.apache.directory.ldapstudio.browser.core.internal.search.LdapSearchPageScoreComputer;
+import org.apache.directory.ldapstudio.browser.core.model.AttributeHierachie;
+import org.apache.directory.ldapstudio.browser.core.model.DN;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
+import org.eclipse.search.ui.ISearchPageScoreComputer;
+
+
+public class SearchResult implements ISearchResult
+{
+
+ private static final long serialVersionUID = -5658803569872619432L;
+
+ private ISearch search;
+
+ private IEntry entry;
+
+
+ protected SearchResult()
+ {
+ }
+
+
+ public SearchResult( IEntry entry, ISearch search )
+ {
+ this.entry = entry;
+ this.search = search;
+ }
+
+
+ public DN getDn()
+ {
+ return this.entry.getDn();
+ }
+
+
+ public IAttribute[] getAttributes()
+ {
+ ArrayList attributeList = new ArrayList();
+ for ( int i = 0; i < this.search.getReturningAttributes().length; i++ )
+ {
+ if ( this.entry.getAttribute( this.search.getReturningAttributes()[i] ) != null )
+ {
+ attributeList.add( this.entry.getAttribute( this.search.getReturningAttributes()[i] ) );
+ }
+ }
+ return ( IAttribute[] ) attributeList.toArray( new IAttribute[attributeList.size()] );
+ }
+
+
+ public IAttribute getAttribute( String attributeDescription )
+ {
+ return this.entry.getAttribute( attributeDescription );
+ }
+
+
+ public AttributeHierachie getAttributeWithSubtypes( String attributeDescription )
+ {
+ return this.entry.getAttributeWithSubtypes( attributeDescription );
+ }
+
+
+ public IEntry getEntry()
+ {
+ return this.entry;
+ }
+
+
+ public Object getAdapter( Class adapter )
+ {
+ if ( adapter.isAssignableFrom( ISearchPageScoreComputer.class ) )
+ {
+ return new LdapSearchPageScoreComputer();
+ }
+ if ( adapter == IConnection.class )
+ {
+ return this.getConnection();
+ }
+ if ( adapter == IEntry.class )
+ {
+ return this.getEntry();
+ }
+ return null;
+ }
+
+
+ public IConnection getConnection()
+ {
+ return this.search.getConnection();
+ }
+
+
+ public ISearch getSearch()
+ {
+ return this.search;
+ }
+
+
+ public void setSearch( ISearch search )
+ {
+ this.search = search;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Value.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Value.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Value.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/model/Value.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,285 @@
+/*
+ * 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.browser.core.internal.model;
+
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.internal.search.LdapSearchPageScoreComputer;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
+import org.apache.directory.ldapstudio.browser.core.model.RDNPart;
+import org.apache.directory.ldapstudio.browser.core.utils.LdifUtils;
+import org.apache.directory.ldapstudio.browser.core.utils.Utils;
+import org.eclipse.search.ui.ISearchPageScoreComputer;
+
+
+/**
+ * Default implementation of IValue.
+ */
+public class Value implements IValue
+{
+
+ private static final long serialVersionUID = -9039209604742682740L;
+
+ private IAttribute attribute;
+
+ private Object rawValue;
+
+
+ protected Value()
+ {
+ }
+
+
+ public Value( IAttribute attribute, Object rawValue ) throws ModelModificationException
+ {
+ this.init( attribute, rawValue );
+
+ if ( rawValue == null )
+ {
+ throw new ModelModificationException( BrowserCoreMessages.model__empty_value );
+ }
+ }
+
+
+ public Value( IAttribute attribute ) throws ModelModificationException
+ {
+ this.init( attribute, null );
+ }
+
+
+ private void init( IAttribute attribute, Object rawValue ) throws ModelModificationException
+ {
+ if ( attribute == null )
+ {
+ throw new ModelModificationException( BrowserCoreMessages.model__empty_attribute );
+ }
+
+ this.attribute = attribute;
+
+ if ( rawValue == null )
+ {
+ if ( attribute.isString() )
+ {
+ this.rawValue = IValue.EMPTY_STRING_VALUE;
+ }
+ else
+ {
+ this.rawValue = IValue.EMPTY_BINARY_VALUE;
+ }
+ }
+ else
+ {
+ this.rawValue = rawValue;
+ }
+ }
+
+
+ public IAttribute getAttribute()
+ {
+ return this.attribute;
+ }
+
+
+ public Object getRawValue()
+ {
+ return this.rawValue;
+ }
+
+
+ public String getStringValue()
+ {
+
+ if ( this.rawValue == EMPTY_STRING_VALUE )
+ {
+ return EMPTY_STRING_VALUE.getStringValue();
+ }
+ else if ( this.rawValue == EMPTY_BINARY_VALUE )
+ {
+ return EMPTY_BINARY_VALUE.getStringValue();
+ }
+ else if ( this.rawValue instanceof String )
+ {
+ return ( String ) this.rawValue;
+ }
+ else if ( this.rawValue instanceof byte[] )
+ {
+ return LdifUtils.utf8decode( ( byte[] ) this.rawValue );
+ }
+ else
+ {
+ return "UNKNOWN";
+ }
+ }
+
+
+ public byte[] getBinaryValue()
+ {
+
+ if ( this.rawValue == EMPTY_STRING_VALUE )
+ {
+ return EMPTY_STRING_VALUE.getBinaryValue();
+ }
+ else if ( this.rawValue == EMPTY_BINARY_VALUE )
+ {
+ return EMPTY_BINARY_VALUE.getBinaryValue();
+ }
+ else if ( this.rawValue instanceof byte[] )
+ {
+ return ( byte[] ) this.rawValue;
+ }
+ else if ( this.rawValue instanceof String )
+ {
+ return LdifUtils.utf8encode( ( String ) this.rawValue );
+ }
+ else
+ {
+ return LdifUtils.utf8encode( "UNKNOWN" );
+ }
+ }
+
+
+ public boolean isString()
+ {
+ return this.rawValue == EMPTY_STRING_VALUE || this.attribute.isString();
+ }
+
+
+ public boolean isBinary()
+ {
+ return this.rawValue == EMPTY_BINARY_VALUE || this.attribute.isBinary();
+ }
+
+
+ public boolean isEmpty()
+ {
+ return this.rawValue == EMPTY_STRING_VALUE || this.rawValue == EMPTY_BINARY_VALUE;
+ }
+
+
+ public boolean equals( Object o )
+ {
+ // check argument
+ if ( o == null || !( o instanceof IValue ) )
+ {
+ return false;
+ }
+ IValue vc = ( IValue ) o;
+
+ // compare attributes
+ if ( !vc.getAttribute().equals( this.getAttribute() ) )
+ {
+ return false;
+ }
+
+ // compare values
+ if ( this.isEmpty() && vc.isEmpty() )
+ {
+ return true;
+ }
+ else if ( this.isBinary() && vc.isBinary() )
+ {
+ return Utils.equals( this.getBinaryValue(), vc.getBinaryValue() );
+ }
+ else if ( this.isString() && vc.isString() )
+ {
+ return ( this.getStringValue().equals( vc.getStringValue() ) );
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+
+ public int hashCode()
+ {
+ return rawValue.hashCode();
+ }
+
+
+ public String toString()
+ {
+ return attribute + ":" + ( this.isString() ? this.getStringValue() : "BINARY" ); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+
+ public Object getAdapter( Class adapter )
+ {
+ if ( adapter.isAssignableFrom( ISearchPageScoreComputer.class ) )
+ {
+ return new LdapSearchPageScoreComputer();
+ }
+ if ( adapter == IConnection.class )
+ {
+ return this.getConnection();
+ }
+ if ( adapter == IEntry.class )
+ {
+ return this.getEntry();
+ }
+ if ( adapter == IAttribute.class )
+ {
+ return this.getAttribute();
+ }
+ if ( adapter == IValue.class )
+ {
+ return this;
+ }
+ return null;
+ }
+
+
+ public IConnection getConnection()
+ {
+ return this.attribute.getEntry().getConnection();
+ }
+
+
+ public IEntry getEntry()
+ {
+ return this.attribute.getEntry();
+ }
+
+
+ public IValue getValue()
+ {
+ return this;
+ }
+
+
+ public boolean isRdnPart()
+ {
+ RDNPart[] parts = getAttribute().getEntry().getRdn().getParts();
+ for ( int p = 0; p < parts.length; p++ )
+ {
+ if ( getAttribute().getDescription().equals( parts[p].getName() )
+ && getStringValue().equals( parts[p].getValue() ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/search/LdapSearchPageScoreComputer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/search/LdapSearchPageScoreComputer.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/search/LdapSearchPageScoreComputer.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/internal/search/LdapSearchPageScoreComputer.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,42 @@
+/*
+ * 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.browser.core.internal.search;
+
+
+import org.eclipse.search.ui.ISearchPageScoreComputer;
+
+
+public class LdapSearchPageScoreComputer implements ISearchPageScoreComputer
+{
+
+ public static final String LDAP_SEARCH_PAGE_ID = "org.apache.directory.ldapstudio.browser.ui.search.SearchPage"; //$NON-NLS-1$
+
+
+ public int computeScore( String pageId, Object input )
+ {
+ if ( pageId.equals( LDAP_SEARCH_PAGE_ID ) )
+ {
+ return 90;
+ }
+ return 0;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractAsyncBulkJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractAsyncBulkJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractAsyncBulkJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractAsyncBulkJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,56 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.events.ModelModifier;
+import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
+
+
+public abstract class AbstractAsyncBulkJob extends AbstractEclipseJob implements ModelModifier
+{
+
+ protected final void executeAsyncJob( ExtendedProgressMonitor pm ) throws ModelModificationException
+ {
+
+ EventRegistry.suspendEventFireingInCurrentThread();
+
+ try
+ {
+ executeBulkJob( pm );
+ }
+ finally
+ {
+ EventRegistry.resumeEventFireingInCurrentThread();
+ }
+
+ this.runNotification();
+
+ }
+
+
+ protected abstract void executeBulkJob( ExtendedProgressMonitor pm ) throws ModelModificationException;
+
+
+ protected abstract void runNotification();
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractEclipseJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractEclipseJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractEclipseJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractEclipseJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,296 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+
+public abstract class AbstractEclipseJob extends Job
+{
+
+ private IProgressMonitor externalProgressMonitor;
+
+ private IStatus externalResult;
+
+
+ protected AbstractEclipseJob()
+ {
+ super( "" ); //$NON-NLS-1$
+ }
+
+
+ protected abstract IConnection[] getConnections();
+
+
+ protected abstract void executeAsyncJob( ExtendedProgressMonitor monitor ) throws Exception;
+
+
+ protected String getErrorMessage()
+ {
+ return BrowserCoreMessages.jobs__error_occurred;
+ }
+
+
+ protected final IStatus run( IProgressMonitor ipm )
+ {
+
+ ExtendedProgressMonitor monitor = new ExtendedProgressMonitor( externalProgressMonitor == null ? ipm
+ : externalProgressMonitor );
+
+ // check if connection is opened
+ IConnection[] connections = getConnections();
+ for ( int i = 0; i < connections.length; i++ )
+ {
+ IConnection connection = connections[i];
+ if ( !connection.isOpened() )
+ {
+ // monitor.reportError("Connection is closed");
+
+ EventRegistry.suspendEventFireingInCurrentThread();
+ try
+ {
+ connection.open( monitor );
+ }
+ finally
+ {
+ EventRegistry.resumeEventFireingInCurrentThread();
+ }
+ }
+ }
+
+ // execute job
+ if ( !monitor.errorsReported() )
+ {
+ try
+ {
+ executeAsyncJob( monitor );
+ }
+ catch ( Exception e )
+ {
+ monitor.reportError( e );
+ }
+ finally
+ {
+ monitor.done();
+ ipm.done();
+ }
+ }
+
+ // error handling
+ if ( monitor.isCanceled() )
+ {
+ // System.out.println("Job: CANCEL+CANCEL");
+ externalResult = Status.CANCEL_STATUS;
+ return Status.CANCEL_STATUS;
+ }
+ else if ( monitor.errorsReported() )
+ {
+ externalResult = monitor.getErrorStatus( getErrorMessage() );
+ if ( externalProgressMonitor == null )
+ {
+ // System.out.println("Job: ERROR+ERROR");
+ return externalResult;
+ }
+ else
+ {
+ // System.out.println("Job: ERROR+OK");
+ return Status.OK_STATUS;
+ }
+ }
+ else
+ {
+ // System.out.println("Job: OK+OK");
+ externalResult = Status.OK_STATUS;
+ return Status.OK_STATUS;
+ }
+ }
+
+
+ public void setExternalProgressMonitor( IProgressMonitor externalProgressMonitor )
+ {
+ this.externalProgressMonitor = externalProgressMonitor;
+ }
+
+
+ public IStatus getExternalResult()
+ {
+ return this.externalResult;
+ }
+
+
+ public final void execute()
+ {
+ setUser( true );
+ schedule();
+ }
+
+
+ protected abstract Object[] getLockedObjects();
+
+
+ public boolean shouldSchedule()
+ {
+
+ Object[] myLockedObjects = getLockedObjects();
+ String[] myLockedObjectsIdentifiers = getLockIdentifiers( myLockedObjects );
+
+ // TODO: read, write
+
+ Job[] jobs = Platform.getJobManager().find( null );
+ for ( int i = 0; i < jobs.length; i++ )
+ {
+ Job job = jobs[i];
+
+ // if(job instanceof AbstractEclipseJob) {
+ if ( job.getClass() == this.getClass() && job != this )
+ {
+
+ AbstractEclipseJob otherJob = ( AbstractEclipseJob ) job;
+ Object[] otherLockedObjects = otherJob.getLockedObjects();
+ String[] otherLockedObjectIdentifiers = getLockIdentifiers( otherLockedObjects );
+
+ for ( int j = 0; j < otherLockedObjectIdentifiers.length; j++ )
+ {
+ String other = otherLockedObjectIdentifiers[j];
+ for ( int k = 0; k < myLockedObjectsIdentifiers.length; k++ )
+ {
+ String my = myLockedObjectsIdentifiers[k];
+
+ System.out.print( "other:" + other + ", my: " + my );
+
+ if ( other.startsWith( my ) || my.startsWith( other ) )
+ {
+ System.out.println( ", shouldSchedule() = " + false );
+ return false;
+ }
+ else
+ {
+ System.out.println();
+ }
+
+ }
+ }
+
+ }
+ }
+ return super.shouldSchedule();
+
+ // // Doesn't work
+ // Job[] jobs = getJobManager().find(null);
+ // for (int i = 0; i < jobs.length; i++) {
+ // Job job = jobs[i];
+ // if(job instanceof AbstractEclipseJob) {
+ // System.out.println("shouldSchedule() = " + false);
+ // return false;
+ // }
+ // }
+ // System.out.println("shouldSchedule() = " + true);
+ // return true;
+
+ // return super.shouldSchedule();
+ }
+
+
+ protected static String[] getLockIdentifiers( Object[] objects )
+ {
+ String[] identifiers = new String[objects.length];
+ for ( int i = 0; i < identifiers.length; i++ )
+ {
+ Object o = objects[i];
+ if ( o instanceof IConnection )
+ {
+ identifiers[i] = getLockIdentifier( ( IConnection ) o );
+ }
+ else if ( o instanceof IEntry )
+ {
+ identifiers[i] = getLockIdentifier( ( IEntry ) o );
+ }
+ else if ( o instanceof IAttribute )
+ {
+ identifiers[i] = getLockIdentifier( ( IAttribute ) o );
+ }
+ else if ( o instanceof IValue )
+ {
+ identifiers[i] = getLockIdentifier( ( IValue ) o );
+ }
+ else if ( o instanceof ISearch )
+ {
+ identifiers[i] = getLockIdentifier( ( ISearch ) o );
+ }
+ else
+ {
+ identifiers[i] = getLockIdentifier( objects[i] );
+ }
+ }
+ return identifiers;
+ }
+
+
+ protected static String getLockIdentifier( IConnection connection )
+ {
+ return connection.getHost() + ":" + connection.getPort();
+ }
+
+
+ protected static String getLockIdentifier( IEntry entry )
+ {
+ return getLockIdentifier( entry.getConnection() ) + "_"
+ + new StringBuffer( entry.getDn().toString() ).reverse().toString();
+ }
+
+
+ protected static String getLockIdentifier( IAttribute attribute )
+ {
+ return getLockIdentifier( attribute.getEntry() ) + "_" + attribute.getDescription();
+ }
+
+
+ protected static String getLockIdentifier( IValue value )
+ {
+ return getLockIdentifier( value.getAttribute() ) + "_" + value.getStringValue();
+ }
+
+
+ protected static String getLockIdentifier( ISearch search )
+ {
+ return getLockIdentifier( search.getConnection() ) + "_"
+ + new StringBuffer( search.getSearchBase().toString() ).reverse().toString();
+ }
+
+
+ protected static String getLockIdentifier( Object object )
+ {
+ return object.toString();
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractModificationJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractModificationJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractModificationJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/AbstractModificationJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,74 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import org.apache.directory.ldapstudio.browser.core.events.ModelModifier;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
+
+
+public abstract class AbstractModificationJob extends AbstractAsyncBulkJob implements ModelModifier
+{
+
+ protected void executeBulkJob( ExtendedProgressMonitor pm ) throws ModelModificationException
+ {
+
+ try
+ {
+ this.executeAsyncModificationJob( pm );
+ }
+ finally
+ {
+ // reload affected attributes
+ if ( !getModifiedEntry().getConnection().isSuspended() )
+ {
+ String[] affectedAttributeNames = getAffectedAttributeNames();
+ InitializeAttributesJob.initializeAttributes( getModifiedEntry(), affectedAttributeNames, pm );
+ }
+ }
+ }
+
+
+ protected IConnection[] getConnections()
+ {
+ return new IConnection[]
+ { getModifiedEntry().getConnection() };
+ }
+
+
+ protected Object[] getLockedObjects()
+ {
+ return new Object[]
+ { getModifiedEntry() };
+ }
+
+
+ protected abstract void executeAsyncModificationJob( ExtendedProgressMonitor pm ) throws ModelModificationException;
+
+
+ protected abstract IEntry getModifiedEntry();
+
+
+ protected abstract String[] getAffectedAttributeNames();
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckBindJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckBindJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckBindJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckBindJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,82 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+
+
+public class CheckBindJob extends AbstractAsyncBulkJob
+{
+
+ private IConnection connection;
+
+
+ public CheckBindJob( IConnection connection )
+ {
+ this.connection = connection;
+ setName( BrowserCoreMessages.jobs__check_bind_name );
+ }
+
+
+ protected IConnection[] getConnections()
+ {
+ return new IConnection[0];
+ }
+
+
+ protected Object[] getLockedObjects()
+ {
+ List l = new ArrayList();
+ l.add( connection );
+ return l.toArray();
+ }
+
+
+ protected void executeBulkJob( ExtendedProgressMonitor monitor )
+ {
+
+ monitor.beginTask( BrowserCoreMessages.jobs__check_bind_task, 4 );
+ monitor.reportProgress( " " ); //$NON-NLS-1$
+ monitor.worked( 1 );
+
+ connection.bind( monitor );
+
+ connection.close();
+ }
+
+
+ protected String getErrorMessage()
+ {
+ return BrowserCoreMessages.jobs__check_bind_error;
+ }
+
+
+ protected void runNotification()
+ {
+
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckNetworkParameterJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckNetworkParameterJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckNetworkParameterJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CheckNetworkParameterJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,76 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+
+
+public class CheckNetworkParameterJob extends AbstractEclipseJob
+{
+
+ private IConnection connection;
+
+
+ public CheckNetworkParameterJob( IConnection connection )
+ {
+ this.connection = connection;
+ setName( BrowserCoreMessages.jobs__check_network_name );
+ }
+
+
+ protected IConnection[] getConnections()
+ {
+ return new IConnection[0];
+ }
+
+
+ protected Object[] getLockedObjects()
+ {
+ List l = new ArrayList();
+ l.add( connection );
+ return l.toArray();
+ }
+
+
+ protected void executeAsyncJob( ExtendedProgressMonitor monitor )
+ {
+
+ monitor.beginTask( BrowserCoreMessages.jobs__check_network_task, 3 );
+ monitor.reportProgress( " " ); //$NON-NLS-1$
+ monitor.worked( 1 );
+
+ connection.connect( monitor );
+
+ connection.close();
+ }
+
+
+ protected String getErrorMessage()
+ {
+ return BrowserCoreMessages.jobs__check_network_error;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CopyEntriesJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CopyEntriesJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CopyEntriesJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CopyEntriesJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,313 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.events.ChildrenInitializedEvent;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Attribute;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Entry;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Search;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Value;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.core.model.NameException;
+import org.apache.directory.ldapstudio.browser.core.model.RDN;
+import org.apache.directory.ldapstudio.browser.core.model.RDNPart;
+import org.apache.directory.ldapstudio.browser.core.model.SearchParameter;
+import org.apache.directory.ldapstudio.browser.core.model.schema.SchemaUtils;
+
+
+public class CopyEntriesJob extends AbstractAsyncBulkJob
+{
+
+ private IEntry parent;
+
+ private IEntry[] entriesToCopy;
+
+ private int scope;
+
+
+ public CopyEntriesJob( final IEntry parent, final IEntry[] entriesToCopy, int scope )
+ {
+ this.parent = parent;
+ this.entriesToCopy = entriesToCopy;
+ this.scope = scope;
+ setName( entriesToCopy.length == 1 ? BrowserCoreMessages.jobs__copy_entries_name_1
+ : BrowserCoreMessages.jobs__copy_entries_name_n );
+ }
+
+
+ protected IConnection[] getConnections()
+ {
+ return new IConnection[]
+ { parent.getConnection() };
+ }
+
+
+ protected Object[] getLockedObjects()
+ {
+ List l = new ArrayList();
+ l.add( parent );
+ l.addAll( Arrays.asList( entriesToCopy ) );
+ return l.toArray();
+ }
+
+
+ protected void executeBulkJob( ExtendedProgressMonitor monitor )
+ {
+
+ monitor.beginTask( entriesToCopy.length == 1 ? BrowserCoreMessages.bind(
+ BrowserCoreMessages.jobs__copy_entries_task_1, new String[]
+ { entriesToCopy[0].getDn().toString(), parent.getDn().toString() } ) : BrowserCoreMessages.bind(
+ BrowserCoreMessages.jobs__copy_entries_task_n, new String[]
+ { Integer.toString( entriesToCopy.length ), parent.getDn().toString() } ), 2 + entriesToCopy.length );
+
+ monitor.reportProgress( " " ); //$NON-NLS-1$
+ monitor.worked( 1 );
+
+ if ( scope == ISearch.SCOPE_OBJECT || scope == ISearch.SCOPE_ONELEVEL || scope == ISearch.SCOPE_SUBTREE )
+ {
+ int num = 0;
+ for ( int i = 0; !monitor.isCanceled() && i < entriesToCopy.length; i++ )
+ {
+ IEntry entryToCopy = entriesToCopy[i];
+
+ if ( scope == ISearch.SCOPE_OBJECT
+ || !parent.getDn().toString().endsWith( entryToCopy.getDn().toString() ) )
+ {
+ num = this.copyEntryRecursive( entryToCopy, parent, scope, num, monitor );
+ }
+ else
+ {
+ monitor.reportError( BrowserCoreMessages.jobs__copy_entries_source_and_target_are_equal );
+ }
+ }
+ }
+ }
+
+
+ protected void runNotification()
+ {
+ EventRegistry.fireEntryUpdated( new ChildrenInitializedEvent( parent, parent.getConnection() ), this );
+ }
+
+
+ protected String getErrorMessage()
+ {
+ return entriesToCopy.length == 1 ? BrowserCoreMessages.jobs__copy_entries_error_1
+ : BrowserCoreMessages.jobs__copy_entries_error_n;
+ }
+
+
+ private int copyEntryRecursive( IEntry entryToCopy, IEntry parent, int scope, int num,
+ ExtendedProgressMonitor monitor )
+ {
+ try
+ {
+ SearchParameter param = new SearchParameter();
+ param.setSearchBase( entryToCopy.getDn() );
+ param.setFilter( ISearch.FILTER_TRUE );
+ param.setScope( ISearch.SCOPE_OBJECT );
+ param.setAliasesDereferencingMethod( IConnection.DEREFERENCE_ALIASES_NEVER );
+ param.setReferralsHandlingMethod( IConnection.HANDLE_REFERRALS_IGNORE );
+ param.setReturningAttributes( new String[]
+ { ISearch.ALL_USER_ATTRIBUTES, IAttribute.REFERRAL_ATTRIBUTE } );
+ ISearch search = new Search( entryToCopy.getConnection(), param );
+ entryToCopy.getConnection().search( search, monitor );
+
+ ISearchResult[] srs = search.getSearchResults();
+ if ( !monitor.isCanceled() && srs != null && srs.length == 1 )
+ {
+ entryToCopy = srs[0].getEntry();
+ IAttribute[] attributesToCopy = entryToCopy.getAttributes();
+
+ // create new entry
+ RDN rdn = entryToCopy.getRdn();
+ IEntry newEntry = new Entry( parent, rdn, parent.getConnection() );
+
+ // change RDN if entry already exists
+ ExtendedProgressMonitor testMonitor = new ExtendedProgressMonitor( monitor );
+ IEntry testEntry = parent.getConnection().getEntry( newEntry.getDn(), testMonitor );
+ if ( testEntry != null )
+ {
+ String rdnValue = rdn.getValue();
+ String newRdnValue = BrowserCoreMessages.bind( BrowserCoreMessages.copy_n_of_s, "", rdnValue ); //$NON-NLS-1$
+ RDN newRdn = getNewRdn( rdn, newRdnValue );
+ newEntry = new Entry( parent, newRdn, parent.getConnection() );
+ testEntry = parent.getConnection().getEntry( newEntry.getDn(), testMonitor );
+ for ( int i = 2; testEntry != null; i++ )
+ {
+ newRdnValue = BrowserCoreMessages.bind( BrowserCoreMessages.copy_n_of_s, i + " ", rdnValue ); //$NON-NLS-1$
+ newRdn = getNewRdn( rdn, newRdnValue );
+ newEntry = new Entry( parent, newRdn, parent.getConnection() );
+ testEntry = parent.getConnection().getEntry( newEntry.getDn(), testMonitor );
+ }
+ }
+
+ // copy attributes
+ for ( int i = 0; i < attributesToCopy.length; i++ )
+ {
+ IAttribute attributeToCopy = attributesToCopy[i];
+
+ if ( SchemaUtils.isModifyable( attributeToCopy.getAttributeTypeDescription() )
+ || IAttribute.REFERRAL_ATTRIBUTE.equalsIgnoreCase( attributeToCopy.getDescription() ) )
+ {
+ IAttribute newAttribute = new Attribute( newEntry, attributeToCopy.getDescription() );
+ newEntry.addAttribute( newAttribute, newEntry.getConnection() );
+ IValue[] valuesToCopy = attributeToCopy.getValues();
+ for ( int j = 0; j < valuesToCopy.length; j++ )
+ {
+ IValue valueToCopy = valuesToCopy[j];
+ IValue newValue = new Value( newAttribute, valueToCopy.getRawValue() );
+ newAttribute.addValue( newValue, newEntry.getConnection() );
+ }
+ }
+ }
+
+ // check if RDN attributes ar present
+ RDN newRdn = newEntry.getRdn();
+ RDNPart[] oldRdnParts = rdn.getParts();
+ for ( int i = 0; i < oldRdnParts.length; i++ )
+ {
+ RDNPart part = oldRdnParts[i];
+ IAttribute rdnAttribute = newEntry.getAttribute( part.getName() );
+ if ( rdnAttribute != null )
+ {
+ IValue[] values = rdnAttribute.getValues();
+ for ( int ii = 0; ii < values.length; ii++ )
+ {
+ if ( part.getUnencodedValue().equals( values[ii].getRawValue() ) )
+ {
+ rdnAttribute.deleteValue( values[ii], newEntry.getConnection() );
+ }
+ if ( rdnAttribute.getValueSize() == 0 )
+ {
+ newEntry.deleteAttribute( rdnAttribute, newEntry.getConnection() );
+ }
+ }
+ }
+ }
+ RDNPart[] newRdnParts = newRdn.getParts();
+ for ( int i = 0; i < newRdnParts.length; i++ )
+ {
+ RDNPart part = newRdnParts[i];
+ IAttribute rdnAttribute = newEntry.getAttribute( part.getName() );
+ if ( rdnAttribute == null )
+ {
+ rdnAttribute = new Attribute( newEntry, part.getName() );
+ newEntry.addAttribute( rdnAttribute, newEntry.getConnection() );
+ rdnAttribute.addValue( new Value( rdnAttribute, part.getUnencodedValue() ), newEntry
+ .getConnection() );
+ }
+ else
+ {
+ boolean mustAdd = true;
+ IValue[] values = rdnAttribute.getValues();
+ for ( int ii = 0; ii < values.length; ii++ )
+ {
+ if ( part.getUnencodedValue().equals( values[ii].getStringValue() ) )
+ {
+ mustAdd = false;
+ break;
+ }
+ }
+ if ( mustAdd )
+ {
+ rdnAttribute.addValue( new Value( rdnAttribute, part.getUnencodedValue() ), newEntry
+ .getConnection() );
+ }
+ }
+ }
+
+ newEntry.getConnection().create( newEntry, monitor );
+ newEntry.getParententry().addChild( newEntry, newEntry.getConnection() );
+ newEntry.setHasChildrenHint( false, newEntry.getConnection() );
+
+ num++;
+ monitor.reportProgress( BrowserCoreMessages.bind( BrowserCoreMessages.model__copied_n_entries,
+ new String[]
+ { Integer.toString( num ) } ) );
+
+ // check for children
+ if ( !monitor.isCanceled() && ( scope == ISearch.SCOPE_ONELEVEL || scope == ISearch.SCOPE_SUBTREE ) )
+ {
+
+ SearchParameter subParam = new SearchParameter();
+ subParam.setSearchBase( entryToCopy.getDn() );
+ subParam.setFilter( ISearch.FILTER_TRUE );
+ subParam.setScope( ISearch.SCOPE_ONELEVEL );
+ subParam.setReturningAttributes( ISearch.NO_ATTRIBUTES );
+ ISearch subSearch = new Search( entryToCopy.getConnection(), subParam );
+ entryToCopy.getConnection().search( subSearch, monitor );
+
+ ISearchResult[] subSrs = subSearch.getSearchResults();
+ if ( !monitor.isCanceled() && subSrs != null && subSrs.length > 0 )
+ {
+
+ for ( int i = 0; i < subSrs.length; i++ )
+ {
+ ISearchResult subSearchResult = subSrs[i];
+ IEntry childEntry = subSearchResult.getEntry();
+
+ if ( scope == ISearch.SCOPE_ONELEVEL )
+ {
+ num = this
+ .copyEntryRecursive( childEntry, newEntry, ISearch.SCOPE_OBJECT, num, monitor );
+ }
+ else if ( scope == ISearch.SCOPE_SUBTREE )
+ {
+ num = this.copyEntryRecursive( childEntry, newEntry, ISearch.SCOPE_SUBTREE, num,
+ monitor );
+ }
+ }
+
+ }
+ }
+ }
+ }
+ catch ( Exception e )
+ {
+ monitor.reportError( e );
+ }
+ return num;
+ }
+
+
+ private RDN getNewRdn( RDN rdn, String newRdnValue ) throws NameException
+ {
+ String[] names = rdn.getNames();
+ String[] values = rdn.getValues();
+ values[0] = newRdnValue;
+ RDN newRdn = new RDN( names, values, true );
+ return newRdn;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateEntryJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateEntryJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateEntryJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateEntryJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,119 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.events.EntryAddedEvent;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+
+
+public class CreateEntryJob extends AbstractAsyncBulkJob
+{
+
+ private IEntry[] entriesToCreate;
+
+ private IEntry[] createdEntries;
+
+
+ public CreateEntryJob( IEntry[] entriesToCreate )
+ {
+ this.entriesToCreate = entriesToCreate;
+ createdEntries = new IEntry[entriesToCreate.length];
+ setName( entriesToCreate.length == 1 ? BrowserCoreMessages.jobs__create_entry_name_1
+ : BrowserCoreMessages.jobs__create_entry_name_n );
+ }
+
+
+ protected IConnection[] getConnections()
+ {
+ IConnection[] connections = new IConnection[entriesToCreate.length];
+ for ( int i = 0; i < connections.length; i++ )
+ {
+ connections[i] = entriesToCreate[i].getConnection();
+ }
+ return connections;
+ }
+
+
+ protected Object[] getLockedObjects()
+ {
+ List l = new ArrayList();
+ l.addAll( Arrays.asList( entriesToCreate ) );
+ return l.toArray();
+ }
+
+
+ protected void executeBulkJob( ExtendedProgressMonitor monitor )
+ {
+
+ monitor.beginTask( entriesToCreate.length == 1 ? BrowserCoreMessages.bind(
+ BrowserCoreMessages.jobs__create_entry_task_1, new String[]
+ { entriesToCreate[0].getDn().toString() } ) : BrowserCoreMessages.bind(
+ BrowserCoreMessages.jobs__create_entry_task_n, new String[]
+ { Integer.toString( entriesToCreate.length ) } ), 2 + entriesToCreate.length );
+ monitor.reportProgress( " " ); //$NON-NLS-1$
+ monitor.worked( 1 );
+
+ for ( int i = 0; !monitor.isCanceled() && i < entriesToCreate.length; i++ )
+ {
+ IEntry entryToCreate = entriesToCreate[i];
+
+ entryToCreate.getConnection().create( entryToCreate, monitor );
+
+ if ( !monitor.errorsReported() )
+ {
+ createdEntries[i] = entryToCreate.getConnection().getEntry( entryToCreate.getDn(), monitor );
+ // createdEntries[i].getParententry().addChild(entry, this);
+ createdEntries[i].setHasChildrenHint( false, this );
+ }
+
+ monitor.worked( 1 );
+ }
+ }
+
+
+ protected void runNotification()
+ {
+ for ( int i = 0; i < createdEntries.length; i++ )
+ {
+ if ( createdEntries[i] != null )
+ {
+ EventRegistry.fireEntryUpdated( new EntryAddedEvent( createdEntries[i].getConnection(),
+ createdEntries[i], this ), this );
+ }
+ }
+ }
+
+
+ protected String getErrorMessage()
+ {
+ return entriesToCreate.length == 1 ? BrowserCoreMessages.jobs__create_entry_error_1
+ : BrowserCoreMessages.jobs__create_entry_error_n;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateValuesJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateValuesJob.java?view=auto&rev=488345
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateValuesJob.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-core/src/org/apache/directory/ldapstudio/browser/core/jobs/CreateValuesJob.java Mon Dec 18 09:15:00 2006
@@ -0,0 +1,139 @@
+/*
+ * 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.browser.core.jobs;
+
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.events.ValueAddedEvent;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Attribute;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Value;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.core.model.ModelModificationException;
+
+
+public class CreateValuesJob extends AbstractModificationJob
+{
+
+ private IEntry entry;
+
+ private String[] attributeDescriptions;
+
+ private Object[] rawValues;
+
+ private ValueAddedEvent event;
+
+
+ public CreateValuesJob( IEntry entry, String[] attributeDescriptions, Object[] rawValues )
+ {
+ this.entry = entry;
+ this.attributeDescriptions = attributeDescriptions;
+ this.rawValues = rawValues;
+
+ setName( rawValues.length == 1 ? BrowserCoreMessages.jobs__create_values_name_1
+ : BrowserCoreMessages.jobs__create_values_name_n );
+ }
+
+
+ public CreateValuesJob( IAttribute attribute, Object newValue )
+ {
+ this( attribute.getEntry(), new String[]
+ { attribute.getDescription() }, new Object[]
+ { newValue } );
+ }
+
+
+ protected void executeAsyncModificationJob( ExtendedProgressMonitor monitor ) throws ModelModificationException
+ {
+
+ monitor.beginTask( rawValues.length == 1 ? BrowserCoreMessages.jobs__create_values_task_1
+ : BrowserCoreMessages.jobs__create_values_task_n, 2 );
+ monitor.reportProgress( " " ); //$NON-NLS-1$
+ monitor.worked( 1 );
+
+ IValue[] newValues = new IValue[rawValues.length];
+ for ( int i = 0; i < newValues.length; i++ )
+ {
+ IAttribute attribute = entry.getAttribute( attributeDescriptions[i] );
+ if ( attribute == null )
+ {
+ // String[] possibleAttributeNames =
+ // entry.getSubschema().getAllAttributeNames();
+ // if(!Arrays.asList(possibleAttributeNames).contains(attributeNames[i]))
+ // {
+ // throw new ModelModificationException("Attribute
+ // "+attributeNames[i]+" is not in subschema");
+ // }
+ attribute = new Attribute( entry, attributeDescriptions[i] );
+ entry.addAttribute( attribute, this );
+ }
+
+ newValues[i] = new Value( attribute, rawValues[i] );
+ attribute.addValue( newValues[i], this );
+
+ if ( this.event == null )
+ {
+ event = new ValueAddedEvent( entry.getConnection(), entry, attribute, newValues[i], this );
+ }
+ }
+
+ entry.getConnection().create( newValues, monitor );
+ }
+
+
+ protected IEntry getModifiedEntry()
+ {
+ return entry;
+ }
+
+
+ protected String[] getAffectedAttributeNames()
+ {
+ Set affectedAttributeNameSet = new HashSet();
+ for ( int i = 0; i < attributeDescriptions.length; i++ )
+ {
+ affectedAttributeNameSet.add( attributeDescriptions[i] );
+ }
+ return ( String[] ) affectedAttributeNameSet.toArray( new String[affectedAttributeNameSet.size()] );
+ }
+
+
+ protected void runNotification()
+ {
+ if ( this.event != null )
+ {
+ EventRegistry.fireEntryUpdated( this.event, this );
+ }
+ }
+
+
+ protected String getErrorMessage()
+ {
+ return attributeDescriptions.length == 1 ? BrowserCoreMessages.jobs__create_values_error_1
+ : BrowserCoreMessages.jobs__create_values_error_n;
+ }
+
+}