You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/04/15 12:33:51 UTC
svn commit: r934361 [1/9] - in /incubator/chemistry/opencmis/trunk:
chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/
chemistry-opencmis-client/chemistry-opencmis-client-bindings/s...
Author: fguillaume
Date: Thu Apr 15 10:33:49 2010
New Revision: 934361
URL: http://svn.apache.org/viewvc?rev=934361&view=rev
Log:
Missing files
Added:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/SessionImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TransientWrapper.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/TypeDefinitionCache.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/AbstractAuthenticationProvider.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/CmisSpi.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/CmisSpiFactory.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/Session.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/StandardAuthenticationProvider.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AbstractAtomPubService.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AclServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomEntryWriter.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/HttpUtils.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/LinkCache.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/NavigationServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/ObjectServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/PolicyServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RelationshipServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/RepositoryServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/SpiSessionParameter.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/VersioningServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/Acl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AllowableActions.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomBase.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomElement.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomEntry.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomFeed.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/AtomLink.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/RepositoryWorkspace.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/objects/ServiceDoc.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AbstractWebServicesService.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/AclServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/CmisWebServicesSpi.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/DiscoveryServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/MultiFilingServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/NavigationServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/ObjectServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/PolicyServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/PortProvider.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RelationshipServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/RepositoryServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/SpiSessionParameter.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/webservices/VersioningServiceImpl.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AclMergeTest.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomParserTest.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/AtomPubTestBindingFactory.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadOnlyTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/atompub/SimpleReadWriteTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/cache/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheTest.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadOnlyTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractSimpleReadWriteTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/Tools.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/ConverterTest.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/misc/MiscTest.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadOnlyTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/SimpleReadWriteTests.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/webservices/WebServicesTestBindingFactory.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/bindings/
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/bindings/AbstractBindingIT.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/bindings/AbstractSimpleBindingIT.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/bindings/AtomPubSimpleBindingIT.java (with props)
incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/bindings/WebServicesSimpleBindingIT.java (with props)
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,98 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache;
+
+import java.io.Serializable;
+
+/**
+ * An interface for an hierarchical cache.
+ *
+ * <p>
+ * Each level of the hierarchy could use a different caching strategy. The cache is initialize by
+ * defining the classes that handle the caching for one level. These classes must implement the
+ * {@link CacheLevel} interface.<br/>
+ * <br/>
+ * Level configuration string format: "
+ * <code><class name> [param1=value1,param2=value2,...]</code>".<br/>
+ * For example:
+ * <code>org.apache.opencmis.client.bindings.cache.impl.MapCacheLevelImpl capacity=10</code><br/>
+ * </p>
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ * @see CacheLevel
+ */
+public interface Cache extends Serializable {
+
+ /**
+ * Initializes the cache.
+ *
+ * @param cacheLevelConfig
+ * the level configuration strings from the root to the leafs
+ */
+ void initialize(String[] cacheLevelConfig);
+
+ /**
+ * Adds an object to the cache.
+ *
+ * @param value
+ * the object
+ * @param keys
+ * the keys for this object
+ */
+ void put(Object value, String... keys);
+
+ /**
+ * Retrieves an object from the cache.
+ *
+ * @param keys
+ * the keys
+ * @return the object or <code>null<code> if the branch or leaf doesn't exist
+ */
+ Object get(String... keys);
+
+ /**
+ * Removes a branch or leaf from the cache.
+ *
+ * @param keys
+ * the keys of the branch or leaf
+ */
+ void remove(String... keys);
+
+ /**
+ * Checks if a given key is in the cache.
+ *
+ * @param keys
+ * the keys of the branch or leaf
+ *
+ * @return the index of the first key part that is not in the cache or <code>keys.length</code> if
+ * the object is in the cache
+ */
+ int check(String... keys);
+
+ /**
+ * Applies a write lock.
+ */
+ void writeLock();
+
+ /**
+ * Releases a write lock.
+ */
+ void writeUnlock();
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/Cache.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,67 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * Interface for a level of an hierarchical cache.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ * @see Cache
+ */
+public interface CacheLevel extends Serializable {
+
+ /**
+ * Initialize the cache level.
+ *
+ * @param parameters
+ * level parameters
+ */
+ void initialize(Map<String, String> parameters);
+
+ /**
+ * Adds an object to the cache level.
+ *
+ * @param value
+ * the object
+ * @param key
+ * the key at this level
+ */
+ void put(Object value, String key);
+
+ /**
+ * Retrieves an object from the cache level.
+ *
+ * @param key
+ * the key at this cache level
+ * @return the object or <code>null</code> if the object doesn't exist
+ */
+ Object get(String key);
+
+ /**
+ * Removes an object from this cache level.
+ *
+ * @param key
+ * the key at this cache level
+ */
+ void remove(String key);
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/CacheLevel.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,198 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache.impl;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.bindings.cache.CacheLevel;
+
+/**
+ * Abstract Map cache.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public abstract class AbstractMapCacheLevel implements CacheLevel {
+
+ private static final long serialVersionUID = 1L;
+
+ private Map<String, Object> fMap;
+ private boolean fFallbackEnabled = false;
+ private String fFallbackKey = null;
+ private boolean fSingleValueEnabled = false;
+
+ public abstract void initialize(Map<String, String> parameters);
+
+ public Object get(String key) {
+ Object value = fMap.get(key);
+
+ if ((value == null) && fFallbackEnabled) {
+ value = fMap.get(fFallbackKey);
+ }
+
+ if ((value == null) && fSingleValueEnabled) {
+ if (fMap.size() == 1) {
+ value = fMap.values().iterator().next();
+ }
+ }
+
+ return value;
+ }
+
+ public void put(Object value, String key) {
+ fMap.put(key, value);
+ }
+
+ public void remove(String key) {
+ fMap.remove(key);
+ }
+
+ /**
+ * Returns the internal map.
+ */
+ protected Map<String, Object> getMap() {
+ return fMap;
+ }
+
+ /**
+ * Sets the internal map.
+ */
+ protected void setMap(Map<String, Object> map) {
+ fMap = map;
+ }
+
+ /**
+ * Enables a fallback key if no value was found for a requested key.
+ */
+ protected void enableKeyFallback(String key) {
+ fFallbackKey = key;
+ fFallbackEnabled = true;
+ }
+
+ /**
+ * Disables the fallback key.
+ */
+ protected void disableKeyFallback() {
+ fFallbackEnabled = false;
+ }
+
+ /**
+ * Enables the single value fallback.
+ */
+ protected void enableSingeValueFallback() {
+ fSingleValueEnabled = true;
+ }
+
+ /**
+ * Disables the single value fallback.
+ */
+ protected void disableSingeValueFallback() {
+ fSingleValueEnabled = false;
+ }
+
+ /**
+ * Extracts an integer parameter from the parameters.
+ *
+ * @param parameters
+ * the parameter map
+ * @param name
+ * the parameter name
+ * @param defValue
+ * the default value if the parameter can't be found
+ */
+ protected int getIntParameter(Map<String, String> parameters, String name, int defValue) {
+ if (parameters == null) {
+ return defValue;
+ }
+
+ String value = parameters.get(name);
+ if ((value == null) || (value.trim().length() == 0)) {
+ return defValue;
+ }
+
+ try {
+ return Integer.valueOf(value);
+ }
+ catch (NumberFormatException e) {
+ return defValue;
+ }
+ }
+
+ /**
+ * Extracts a float parameter from the parameters.
+ *
+ * @param parameters
+ * the parameter map
+ * @param name
+ * the parameter name
+ * @param defValue
+ * the default value if the parameter can't be found
+ */
+ protected float getFloatParameter(Map<String, String> parameters, String name, float defValue) {
+ if (parameters == null) {
+ return defValue;
+ }
+
+ String value = parameters.get(name);
+ if ((value == null) || (value.trim().length() == 0)) {
+ return defValue;
+ }
+
+ try {
+ return Float.valueOf(value);
+ }
+ catch (NumberFormatException e) {
+ return defValue;
+ }
+ }
+
+ /**
+ * Extracts a boolean parameter from the parameters.
+ *
+ * @param parameters
+ * the parameter map
+ * @param name
+ * the parameter name
+ * @param defValue
+ * the default value if the parameter can't be found
+ */
+ protected boolean getBooleanParameter(Map<String, String> parameters, String name,
+ boolean defValue) {
+ if (parameters == null) {
+ return defValue;
+ }
+
+ String value = parameters.get(name);
+ if ((value == null) || (value.trim().length() == 0)) {
+ return defValue;
+ }
+
+ return Boolean.parseBoolean(value);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return (fMap == null ? "[no map]" : fMap.toString());
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/AbstractMapCacheLevel.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,332 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
+import org.apache.chemistry.opencmis.client.bindings.cache.CacheLevel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Default cache implementation.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class CacheImpl implements Cache {
+
+ private static Log log = LogFactory.getLog(CacheImpl.class);
+
+ private static final long serialVersionUID = 1L;
+
+ private List<Class<?>> fLevels;
+ private List<Map<String, String>> fLevelParameters;
+
+ private String fName;
+
+ private CacheLevel fRoot;
+
+ private final ReentrantReadWriteLock fLock = new ReentrantReadWriteLock();
+
+ /**
+ * Constructor.
+ */
+ public CacheImpl() {
+ fName = "Cache";
+ }
+
+ /**
+ * Constructor.
+ */
+ public CacheImpl(String name) {
+ fName = name;
+ }
+
+ public void initialize(String[] cacheLevelConfig) {
+ if (fLevels != null) {
+ throw new IllegalStateException("Cache already initialize!");
+ }
+
+ if ((cacheLevelConfig == null) || (cacheLevelConfig.length == 0)) {
+ throw new IllegalArgumentException("Cache config must not be empty!");
+ }
+
+ fLock.writeLock().lock();
+ try {
+ fLevels = new ArrayList<Class<?>>();
+ fLevelParameters = new ArrayList<Map<String, String>>();
+
+ // build level lists
+ for (String config : cacheLevelConfig) {
+ int x = config.indexOf(' ');
+ if (x == -1) {
+ addLevel(config, null);
+ }
+ else {
+ addLevel(config.substring(0, x), config.substring(x + 1));
+ }
+ }
+
+ // create root
+ fRoot = createCacheLevel(0);
+ }
+ finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ private void addLevel(String className, String parameters) {
+ // get the class
+ Class<?> clazz;
+ try {
+ clazz = Class.forName(className);
+ }
+ catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("Class '" + className + "' not found!", e);
+ }
+
+ // check the class
+ if (!CacheLevel.class.isAssignableFrom(clazz)) {
+ throw new IllegalArgumentException("Class '" + className
+ + "' does not implement the CacheLevel interface!");
+ }
+
+ fLevels.add(clazz);
+
+ // process parameters
+ if (parameters == null) {
+ fLevelParameters.add(null);
+ }
+ else {
+ Map<String, String> parameterMap = new HashMap<String, String>();
+ fLevelParameters.add(parameterMap);
+
+ for (String pair : parameters.split(",")) {
+ String[] keyValue = pair.split("=");
+ if (keyValue.length == 1) {
+ parameterMap.put(keyValue[0], "");
+ }
+ else {
+ parameterMap.put(keyValue[0], keyValue[1]);
+ }
+ }
+ }
+ }
+
+ public Object get(String... keys) {
+ // check keys
+ if (keys == null) {
+ return null;
+ }
+
+ // check level depth
+ if (fLevels.size() != keys.length) {
+ throw new IllegalArgumentException("Wrong number of keys!");
+ }
+
+ Object result = null;
+
+ fLock.readLock().lock();
+ try {
+ CacheLevel cacheLevel = fRoot;
+
+ // follow the branch
+ for (int i = 0; i < keys.length - 1; i++) {
+ Object level = cacheLevel.get(keys[i]);
+
+ // does the branch exist?
+ if (level == null) {
+ return null;
+ }
+
+ // next level
+ cacheLevel = (CacheLevel) level;
+ }
+
+ // get the value
+ result = cacheLevel.get(keys[keys.length - 1]);
+ }
+ finally {
+ fLock.readLock().unlock();
+ }
+
+ return result;
+ }
+
+ public void put(Object value, String... keys) {
+ // check keys
+ if (keys == null) {
+ return;
+ }
+
+ // check level depth
+ if (fLevels.size() != keys.length) {
+ throw new IllegalArgumentException("Wrong number of keys!");
+ }
+
+ fLock.writeLock().lock();
+ try {
+ CacheLevel cacheLevel = fRoot;
+
+ // follow the branch
+ for (int i = 0; i < keys.length - 1; i++) {
+ Object level = cacheLevel.get(keys[i]);
+
+ // does the branch exist?
+ if (level == null) {
+ level = createCacheLevel(i + 1);
+ cacheLevel.put(level, keys[i]);
+ }
+
+ // next level
+ cacheLevel = (CacheLevel) level;
+ }
+
+ cacheLevel.put(value, keys[keys.length - 1]);
+
+ if (log.isDebugEnabled()) {
+ log.debug(fName + ": put [" + getFormattedKeys(keys) + "] = " + value);
+ }
+ }
+ finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ public void remove(String... keys) {
+ if (keys == null) {
+ return;
+ }
+
+ fLock.writeLock().lock();
+ try {
+ CacheLevel cacheLevel = fRoot;
+
+ // follow the branch
+ for (int i = 0; i < keys.length - 1; i++) {
+ Object level = cacheLevel.get(keys[i]);
+
+ // does the branch exist?
+ if (level == null) {
+ return;
+ }
+
+ // next level
+ cacheLevel = (CacheLevel) level;
+ }
+
+ cacheLevel.remove(keys[keys.length - 1]);
+
+ if (log.isDebugEnabled()) {
+ log.debug(fName + ": removed [" + getFormattedKeys(keys) + "]");
+ }
+ }
+ finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ public int check(String... keys) {
+ if (keys == null) {
+ return -1;
+ }
+
+ fLock.readLock().lock();
+ try {
+ CacheLevel cacheLevel = fRoot;
+
+ // follow the branch
+ for (int i = 0; i < keys.length - 1; i++) {
+ Object level = cacheLevel.get(keys[i]);
+
+ // does the branch exist?
+ if (level == null) {
+ return i;
+ }
+
+ // next level
+ cacheLevel = (CacheLevel) level;
+ }
+ }
+ finally {
+ fLock.readLock().unlock();
+ }
+
+ return keys.length;
+ }
+
+ public void writeLock() {
+ fLock.writeLock().lock();
+ }
+
+ public void writeUnlock() {
+ fLock.writeLock().unlock();
+ }
+
+ // ---- internal ----
+
+ /**
+ * Creates a cache level object.
+ */
+ private CacheLevel createCacheLevel(int level) {
+ if ((level < 0) || (level >= fLevels.size())) {
+ throw new IllegalArgumentException("Cache level doesn't fit the configuration!");
+ }
+
+ // get the class and create an instance
+ Class<?> clazz = fLevels.get(level);
+ CacheLevel cacheLevel = null;
+ try {
+ cacheLevel = (CacheLevel) clazz.newInstance();
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException("Cache level problem?!", e);
+ }
+
+ // initialize it
+ cacheLevel.initialize(fLevelParameters.get(level));
+
+ return cacheLevel;
+ }
+
+ @Override
+ public String toString() {
+ return (fRoot == null ? "(no cache root)" : fRoot.toString());
+ }
+
+ // ---- internal ----
+
+ private String getFormattedKeys(String[] keys) {
+ StringBuilder sb = new StringBuilder();
+ for (String k : keys) {
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(k);
+ }
+
+ return sb.toString();
+ }
+}
\ No newline at end of file
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/CacheImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,143 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache.impl;
+
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Content type cache.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class ContentTypeCacheLevelImpl extends MapCacheLevelImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ */
+ public ContentTypeCacheLevelImpl() {
+ enableKeyFallback(null);
+ }
+
+ @Override
+ public Object get(String key) {
+ return super.get(normalize(key));
+ }
+
+ @Override
+ public void put(Object value, String key) {
+ super.put(value, normalize(key));
+ }
+
+ @Override
+ public void remove(String key) {
+ super.remove(normalize(key));
+ }
+
+ /**
+ * Normalizes the key which should be a content type. It's quite simple at the moment but should
+ * cover most cases.
+ */
+ private String normalize(String key) {
+ if (key == null) {
+ return null;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ int parameterStart = 0;
+
+ // first, get the MIME type
+ for (int i = 0; i < key.length(); i++) {
+ char c = key.charAt(i);
+
+ if (Character.isWhitespace(c)) {
+ continue;
+ }
+ else if (c == ';') {
+ parameterStart = i;
+ break;
+ }
+
+ sb.append(Character.toLowerCase(c));
+ }
+
+ // if parameters have been found, gather them
+ if (parameterStart > 0) {
+ SortedMap<String, String> parameter = new TreeMap<String, String>();
+ StringBuilder ksb = new StringBuilder();
+ StringBuilder vsb = new StringBuilder();
+ boolean isKey = true;
+
+ for (int i = parameterStart + 1; i < key.length(); i++) {
+ char c = key.charAt(i);
+ if (Character.isWhitespace(c)) {
+ continue;
+ }
+
+ if (isKey) {
+ if (c == '=') {
+ // value start
+ isKey = false;
+ continue;
+ }
+
+ ksb.append(Character.toLowerCase(c));
+ }
+ else {
+ if (c == ';') {
+ // next key
+ isKey = true;
+
+ parameter.put(ksb.toString(), vsb.toString());
+
+ ksb = new StringBuilder();
+ vsb = new StringBuilder();
+
+ continue;
+ }
+ else if (c == '"') {
+ // filter quotes
+ continue;
+ }
+
+ vsb.append(Character.toLowerCase(c));
+ }
+ }
+
+ // add last parameter
+ if (ksb.length() > 0) {
+ parameter.put(ksb.toString(), vsb.toString());
+ }
+
+ // write parameters sorted by key
+ for (Map.Entry<String, String> entry : parameter.entrySet()) {
+ sb.append(";");
+ sb.append(entry.getKey());
+ sb.append("=");
+ sb.append(entry.getValue());
+ }
+ }
+
+ return sb.toString();
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/ContentTypeCacheLevelImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,48 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache.impl;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * LRU cache.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class LruCacheLevelImpl extends AbstractMapCacheLevel {
+
+ private static final long serialVersionUID = 1L;
+
+ public final static String MAX_ENTRIES = "maxEntries";
+
+ public void initialize(Map<String, String> parameters) {
+ final int maxEntries = getIntParameter(parameters, MAX_ENTRIES, 100);
+
+ setMap(new LinkedHashMap<String, Object>(maxEntries + 1, 0.70f, true) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean removeEldestEntry(Map.Entry<String, Object> eldest) {
+ return size() > maxEntries;
+ }
+ });
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/LruCacheLevelImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,55 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.cache.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Map cache.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class MapCacheLevelImpl extends AbstractMapCacheLevel {
+
+ private static final long serialVersionUID = 1L;
+
+ public final static String CAPACITY = "capacity";
+ public final static String LOAD_FACTOR = "loadFactor";
+ public final static String SINGLE_VALUE = "singleValue";
+
+ /**
+ * Constructor.
+ */
+ public MapCacheLevelImpl() {
+ }
+
+ public void initialize(Map<String, String> parameters) {
+ int initialCapacity = getIntParameter(parameters, CAPACITY, 32);
+ float loadFactor = getFloatParameter(parameters, LOAD_FACTOR, 0.75f);
+ boolean singleValue = getBooleanParameter(parameters, SINGLE_VALUE, false);
+
+ setMap(new HashMap<String, Object>(initialCapacity, loadFactor));
+ disableKeyFallback();
+ if (singleValue) {
+ enableSingeValueFallback();
+ }
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/cache/impl/MapCacheLevelImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,194 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.factory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingImpl;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.provider.CmisBinding;
+
+/**
+ * Default factory for a CMIS binding instance.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public final class CmisBindingFactory {
+
+ /** Default CMIS AtomPub binding SPI implementation */
+ public static final String BINDING_SPI_ATOMPUB = "org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubSpi";
+ /** Default CMIS Web Services binding SPI implementation */
+ public static final String BINDING_SPI_WEBSERVICES = "org.apache.chemistry.opencmis.client.bindings.spi.webservices.CmisWebServicesSpi";
+ /** CMIS In Memory binding SPI implementation (for testing only!) */
+ public static final String BINDING_SPI_INMEMORY = "org.apache.chemistry.opencmis.inmemory.clientprovider.CmisInMemorySpiFactory";
+
+ /** Standard authentication provider class */
+ public static final String STANDARD_AUTHENTICATION_PROVIDER = "org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider";
+
+ private Map<String, String> fDefaults;
+
+ /**
+ * Private constructor -- it's a factory.
+ */
+ private CmisBindingFactory() {
+ fDefaults = createNewDefaultParameters();
+ }
+
+ /**
+ * Creates a new factory instance.
+ */
+ public static CmisBindingFactory newInstance() {
+ return new CmisBindingFactory();
+ }
+
+ /**
+ * Returns the default session parameters.
+ */
+ public Map<String, String> getDefaultSessionParameters() {
+ return fDefaults;
+ }
+
+ /**
+ * Sets the default session parameters.
+ */
+ public void setDefaultSessionParameters(Map<String, String> sessionParameters) {
+ if (sessionParameters == null) {
+ fDefaults = createNewDefaultParameters();
+ }
+ else {
+ fDefaults = sessionParameters;
+ }
+ }
+
+ /**
+ * Creates a CMIS binding instance. A binding class has to be provided in the session parameters.
+ */
+ public CmisBinding createCmisBinding(Map<String, String> sessionParameters) {
+ checkSessionParameters(sessionParameters, true);
+
+ addDefaultParameters(sessionParameters);
+
+ return new CmisBindingImpl(sessionParameters);
+ }
+
+ /**
+ * Creates a default CMIS AtomPub binding instance.
+ */
+ public CmisBinding createCmisAtomPubBinding(Map<String, String> sessionParameters) {
+ checkSessionParameters(sessionParameters, false);
+
+ sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_ATOMPUB);
+ if (!sessionParameters.containsKey(SessionParameter.AUTHENTICATION_PROVIDER_CLASS)) {
+ sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
+ STANDARD_AUTHENTICATION_PROVIDER);
+ }
+ sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
+ sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "false");
+ addDefaultParameters(sessionParameters);
+
+ check(sessionParameters, SessionParameter.ATOMPUB_URL);
+
+ return new CmisBindingImpl(sessionParameters);
+ }
+
+ /**
+ * Creates a default CMIS Web Services binding instance.
+ */
+ public CmisBinding createCmisWebServicesBinding(Map<String, String> sessionParameters) {
+ checkSessionParameters(sessionParameters, false);
+
+ sessionParameters.put(SessionParameter.BINDING_SPI_CLASS, BINDING_SPI_WEBSERVICES);
+ if (!sessionParameters.containsKey(SessionParameter.AUTHENTICATION_PROVIDER_CLASS)) {
+ sessionParameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
+ STANDARD_AUTHENTICATION_PROVIDER);
+ }
+ sessionParameters.put(SessionParameter.AUTH_HTTP_BASIC, "true");
+ sessionParameters.put(SessionParameter.AUTH_SOAP_USERNAMETOKEN, "true");
+ addDefaultParameters(sessionParameters);
+
+ check(sessionParameters, SessionParameter.WEBSERVICES_ACL_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_DISCOVERY_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_MULTIFILING_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_NAVIGATION_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_OBJECT_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_POLICY_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_REPOSITORY_SERVICE);
+ check(sessionParameters, SessionParameter.WEBSERVICES_VERSIONING_SERVICE);
+
+ return new CmisBindingImpl(sessionParameters);
+ }
+
+ // ---- internal ----
+
+ /**
+ * Checks the passed session parameters.
+ */
+ private void checkSessionParameters(Map<String, String> sessionParameters, boolean mustContainSPI) {
+ // don't accept null
+ if (sessionParameters == null) {
+ throw new IllegalArgumentException("Session parameter map not set!");
+ }
+
+ // check binding entry
+ String SPIClass = sessionParameters.get(SessionParameter.BINDING_SPI_CLASS);
+ if (mustContainSPI) {
+ if ((SPIClass == null) || (SPIClass.trim().length() == 0)) {
+ throw new IllegalArgumentException("SPI class entry (" + SessionParameter.BINDING_SPI_CLASS
+ + ") is missing!");
+ }
+ }
+ }
+
+ /**
+ * Checks if the given parameter is present. If not, throw an
+ * <code>IllegalArgumentException</code>.
+ */
+ private void check(Map<String, String> sessionParameters, String parameter) {
+ if (!sessionParameters.containsKey(parameter)) {
+ throw new IllegalArgumentException("Parameter '" + parameter + "' is missing!");
+ }
+ }
+
+ /**
+ * Add the default session parameters to the given map without override existing entries.
+ */
+ private void addDefaultParameters(Map<String, String> sessionParameters) {
+ for (String key : fDefaults.keySet()) {
+ if (!sessionParameters.containsKey(key)) {
+ sessionParameters.put(key, fDefaults.get(key));
+ }
+ }
+ }
+
+ /**
+ * Creates a default session parameters map with some reasonable defaults.
+ */
+ private Map<String, String> createNewDefaultParameters() {
+ Map<String, String> result = new HashMap<String, String>();
+
+ result.put(SessionParameter.CACHE_SIZE_REPOSITORIES, "10");
+ result.put(SessionParameter.CACHE_SIZE_TYPES, "100");
+ result.put(SessionParameter.CACHE_SIZE_OBJECTS, "400");
+
+ return result;
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/factory/CmisBindingFactory.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,194 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.impl;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
+import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
+import org.apache.chemistry.opencmis.client.bindings.spi.Session;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
+import org.apache.chemistry.opencmis.commons.provider.AclService;
+import org.apache.chemistry.opencmis.commons.provider.BindingsObjectFactory;
+import org.apache.chemistry.opencmis.commons.provider.CmisBinding;
+import org.apache.chemistry.opencmis.commons.provider.DiscoveryService;
+import org.apache.chemistry.opencmis.commons.provider.MultiFilingService;
+import org.apache.chemistry.opencmis.commons.provider.NavigationService;
+import org.apache.chemistry.opencmis.commons.provider.ObjectService;
+import org.apache.chemistry.opencmis.commons.provider.PolicyService;
+import org.apache.chemistry.opencmis.commons.provider.RelationshipService;
+import org.apache.chemistry.opencmis.commons.provider.RepositoryService;
+import org.apache.chemistry.opencmis.commons.provider.VersioningService;
+
+/**
+ * CMIS binding implementation.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class CmisBindingImpl implements CmisBinding {
+
+ private static final long serialVersionUID = 1L;
+
+ private Session fSession;
+ private BindingsObjectFactory fObjectFactory;
+ private RepositoryService fRepositoryService;
+
+ /**
+ * Constructor.
+ *
+ * @param sessionParameters
+ * the session parameters
+ */
+ public CmisBindingImpl(Map<String, String> sessionParameters) {
+ // some checks first
+ if (sessionParameters == null) {
+ throw new IllegalArgumentException("Session parameters must be set!");
+ }
+ if (!sessionParameters.containsKey(SessionParameter.BINDING_SPI_CLASS)) {
+ throw new IllegalArgumentException("Session parameters do not contain a SPI class name!");
+ }
+
+ // initialize session
+ fSession = new SessionImpl();
+ for (Map.Entry<String, String> entry : sessionParameters.entrySet()) {
+ fSession.put(entry.getKey(), entry.getValue());
+ }
+
+ // create authentication provider and add it session
+ String authProvider = sessionParameters.get(SessionParameter.AUTHENTICATION_PROVIDER_CLASS);
+ if (authProvider != null) {
+ Object authProviderObj = null;
+
+ try {
+ authProviderObj = Class.forName(authProvider).newInstance();
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException("Could not load authentication provider: " + e, e);
+ }
+
+ if (!(authProviderObj instanceof AbstractAuthenticationProvider)) {
+ throw new IllegalArgumentException(
+ "Authentication provider does not extend AbstractAuthenticationProvider!");
+ }
+
+ fSession.put(CmisBindingsHelper.AUTHENTICATION_PROVIDER_OBJECT,
+ (AbstractAuthenticationProvider) authProviderObj);
+ ((AbstractAuthenticationProvider) authProviderObj).setSession(fSession);
+ }
+
+ // set up caches
+ clearAllCaches();
+
+ // initialize the SPI
+ CmisBindingsHelper.getSPI(fSession);
+
+ // set up object factory
+ fObjectFactory = new BindingsObjectFactoryImpl();
+
+ // set up repository service
+ fRepositoryService = new RepositoryServiceImpl(fSession);
+ }
+
+ public RepositoryService getRepositoryService() {
+ return fRepositoryService;
+ }
+
+ public NavigationService getNavigationService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getNavigationService();
+ }
+
+ public ObjectService getObjectService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getObjectService();
+ }
+
+ public DiscoveryService getDiscoveryService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getDiscoveryService();
+ }
+
+ public RelationshipService getRelationshipService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getRelationshipService();
+ }
+
+ public VersioningService getVersioningService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getVersioningService();
+ }
+
+ public AclService getAclService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getAclService();
+ }
+
+ public MultiFilingService getMultiFilingService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getMultiFilingService();
+ }
+
+ public PolicyService getPolicyService() {
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ return spi.getPolicyService();
+ }
+
+ public BindingsObjectFactory getObjectFactory() {
+ return fObjectFactory;
+ }
+
+ public void clearAllCaches() {
+ fSession.writeLock();
+ try {
+ fSession.put(CmisBindingsHelper.REPOSITORY_INFO_CACHE, new RepositoryInfoCache(fSession));
+ fSession.put(CmisBindingsHelper.TYPE_DEFINTION_CACHE, new TypeDefinitionCache(fSession));
+
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ spi.clearAllCaches();
+ }
+ finally {
+ fSession.writeUnlock();
+ }
+ }
+
+ public void clearRepositoryCache(String repositoryId) {
+ if (repositoryId == null) {
+ return;
+ }
+
+ fSession.writeLock();
+ try {
+ RepositoryInfoCache repInfoCache = (RepositoryInfoCache) fSession
+ .get(CmisBindingsHelper.REPOSITORY_INFO_CACHE);
+ repInfoCache.remove(repositoryId);
+
+ TypeDefinitionCache typeDefCache = (TypeDefinitionCache) fSession
+ .get(CmisBindingsHelper.TYPE_DEFINTION_CACHE);
+ typeDefCache.remove(repositoryId);
+
+ CmisSpi spi = CmisBindingsHelper.getSPI(fSession);
+ spi.clearRepositoryCache(repositoryId);
+ }
+ finally {
+ fSession.writeUnlock();
+ }
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java Thu Apr 15 10:33:49 2010
@@ -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.chemistry.opencmis.client.bindings.impl;
+
+import org.apache.chemistry.opencmis.client.bindings.spi.AbstractAuthenticationProvider;
+import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpi;
+import org.apache.chemistry.opencmis.client.bindings.spi.CmisSpiFactory;
+import org.apache.chemistry.opencmis.client.bindings.spi.Session;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+
+/**
+ * A collection of static methods that are used in multiple places within the bindings
+ * implementation.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public final class CmisBindingsHelper {
+
+ public static final String REPOSITORY_INFO_CACHE = "org.apache.chemistry.opencmis.bindings.repositoryInfoCache";
+ public static final String TYPE_DEFINTION_CACHE = "org.apache.chemistry.opencmis.bindings.typeDefintionCache";
+ public static final String SPI_OBJECT = "org.apache.chemistry.opencmis.bindings.spi.object";
+ public static final String AUTHENTICATION_PROVIDER_OBJECT = "org.apache.chemistry.opencmis.bindings.auth.object";
+
+ /**
+ * Private constructor.
+ */
+ private CmisBindingsHelper() {
+ }
+
+ /**
+ * Gets the SPI object for the given session. If there is already a SPI object in the session it
+ * will be returned. If there is no SPI object it will be created and put into the session.
+ *
+ * @param session
+ * the session object
+ *
+ * @return the SPI object
+ */
+ public static CmisSpi getSPI(Session session) {
+ // fetch from session
+ CmisSpi spi = (CmisSpi) session.get(SPI_OBJECT);
+ if (spi != null) {
+ return spi;
+ }
+
+ session.writeLock();
+ try {
+ // try again
+ spi = (CmisSpi) session.get(SPI_OBJECT);
+ if (spi != null) {
+ return spi;
+ }
+
+ // ok, we have to create it...
+ try {
+ String spiFactoryName = (String) session.get(SessionParameter.BINDING_SPI_CLASS);
+ Class<?> spiFactoryClass = Class.forName(spiFactoryName);
+ Object spiFactory = spiFactoryClass.newInstance();
+
+ if (!(spiFactory instanceof CmisSpiFactory)) {
+ throw new CmisRuntimeException("Not a CMISSPIFactory class!");
+ }
+
+ spi = ((CmisSpiFactory) spiFactory).getSpiInstance(session);
+ if (spi == null) {
+ throw new CmisRuntimeException("SPI factory returned null!");
+ }
+ }
+ catch (CmisBaseException e) {
+ throw e;
+ }
+ catch (Exception e) {
+ throw new CmisRuntimeException("SPI cannot be initialized: " + e.getMessage(), e);
+ }
+
+ // we have a SPI object -> put it into the session
+ session.put(SPI_OBJECT, spi, true);
+ }
+ finally {
+ session.writeUnlock();
+ }
+
+ return spi;
+ }
+
+ /**
+ * Returns the authentication provider from the session or <code>null</code> if no authentication
+ * provider is set.
+ */
+ public static AbstractAuthenticationProvider getAuthenticationProvider(Session session) {
+ return (AbstractAuthenticationProvider) session.get(AUTHENTICATION_PROVIDER_OBJECT);
+ }
+
+ /**
+ * Returns the repository info cache from the session.
+ */
+ public static RepositoryInfoCache getRepositoryInfoCache(Session session) {
+ return (RepositoryInfoCache) session.get(REPOSITORY_INFO_CACHE);
+ }
+
+ /**
+ * Returns the type definition cache from the session.
+ */
+ public static TypeDefinitionCache getTypeDefinitionCache(Session session) {
+ return (TypeDefinitionCache) session.get(TYPE_DEFINTION_CACHE);
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/CmisBindingsHelper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java?rev=934361&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java Thu Apr 15 10:33:49 2010
@@ -0,0 +1,101 @@
+/*
+ * 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.chemistry.opencmis.client.bindings.impl;
+
+import java.io.Serializable;
+
+import org.apache.chemistry.opencmis.client.bindings.cache.Cache;
+import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
+import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
+import org.apache.chemistry.opencmis.client.bindings.spi.Session;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.provider.RepositoryInfoData;
+
+/**
+ * A cache for repository info objects.
+ *
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ *
+ */
+public class RepositoryInfoCache implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final int CACHE_SIZE_REPOSITORIES = 10;
+
+ private Cache fCache;
+
+ /**
+ * Constructor.
+ *
+ * @param session
+ * the session object
+ */
+ public RepositoryInfoCache(Session session) {
+ int repCount = session.get(SessionParameter.CACHE_SIZE_REPOSITORIES, CACHE_SIZE_REPOSITORIES);
+ if (repCount < 1) {
+ repCount = CACHE_SIZE_REPOSITORIES;
+ }
+
+ fCache = new CacheImpl("Repository Info Cache");
+ fCache.initialize(new String[] { MapCacheLevelImpl.class.getName() + " "
+ + MapCacheLevelImpl.CAPACITY + "=" + repCount });
+ }
+
+ /**
+ * Adds a repository info object to the cache.
+ *
+ * @param repositoryInfo
+ * the repository info object
+ */
+ public void put(RepositoryInfoData repositoryInfo) {
+ if ((repositoryInfo == null) || (repositoryInfo.getRepositoryId() == null)) {
+ return;
+ }
+
+ fCache.put(repositoryInfo, repositoryInfo.getRepositoryId());
+ }
+
+ /**
+ * Retrieves a repository info object from the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ * @return the repository info object or <code>null</code> if the object is not in the cache
+ */
+ public RepositoryInfoData get(String repositoryId) {
+ return (RepositoryInfoData) fCache.get(repositoryId);
+ }
+
+ /**
+ * Removes a repository info object from the cache.
+ *
+ * @param repositoryId
+ * the repository id
+ */
+ public void remove(String repositoryId) {
+ fCache.remove(repositoryId);
+ }
+
+ @Override
+ public String toString() {
+ return fCache.toString();
+ }
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/RepositoryInfoCache.java
------------------------------------------------------------------------------
svn:keywords = Id