Moving to root below branch label

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2005 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2005-12-08 07:13:07 +00:00
commit e1e6508fec
1095 changed files with 230566 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* 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.alfresco.repo.version.common.counter;
import org.alfresco.service.cmr.repository.StoreRef;
/**
* Version counter DAO service interface.
*
* @author Roy Wetherall
*/
public interface VersionCounterDaoService
{
/**
* Get the next available version number for the specified store.
*
* @param storeRef the store reference
* @return the next version number
*/
public int nextVersionNumber(StoreRef storeRef);
/**
* Gets the current version number for the specified store.
*
* @param storeRef the store reference
* @return the current versio number
*/
public int currentVersionNumber(StoreRef storeRef);
/**
* Resets the version number for a the specified store.
*
* WARNING: calling this method will completely reset the current
* version count for the specified store and cannot be undone.
*
* @param storeRef the store reference
*/
public void resetVersionNumber(StoreRef storeRef);
}

View File

@@ -0,0 +1,90 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* 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.alfresco.repo.version.common.counter;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.util.BaseSpringTest;
/**
* @author Roy Wetherall
*/
public class VersionCounterDaoServiceTest extends BaseSpringTest
{
/*
* Test store id's
*/
private final static String STORE_ID_1 = "test1_" + System.currentTimeMillis();
private final static String STORE_ID_2 = "test2_" + System.currentTimeMillis();
private static final String STORE_NONE = "test3_" + System.currentTimeMillis();;
private NodeService nodeService;
private VersionCounterDaoService counter;
@Override
public void onSetUpInTransaction()
{
nodeService = (NodeService) applicationContext.getBean("dbNodeService");
counter = (VersionCounterDaoService) applicationContext.getBean("versionCounterDaoService");
}
public void testSetUp() throws Exception
{
assertNotNull(nodeService);
assertNotNull(counter);
}
/**
* Test nextVersionNumber
*/
public void testNextVersionNumber()
{
// Create the store references
StoreRef store1 = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_ID_1);
StoreRef store2 = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_ID_2);
StoreRef storeNone = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_NONE);
int store1Version0 = this.counter.nextVersionNumber(store1);
assertEquals(store1Version0, 1);
int store1Version1 = this.counter.nextVersionNumber(store1);
assertEquals(store1Version1, 2);
int store2Version0 = this.counter.nextVersionNumber(store2);
assertEquals(store2Version0, 1);
int store1Version2 = this.counter.nextVersionNumber(store1);
assertEquals(store1Version2, 3);
int store2Version1 = this.counter.nextVersionNumber(store2);
assertEquals(store2Version1, 2);
int store1Current = this.counter.currentVersionNumber(store1);
assertEquals(store1Current, 3);
int store2Current = this.counter.currentVersionNumber(store2);
assertEquals(store2Current, 2);
int storeNoneCurrent = this.counter.currentVersionNumber(storeNone);
assertEquals(storeNoneCurrent, 0);
// Need to clean-up since the version counter works in its own transaction
this.counter.resetVersionNumber(store1);
this.counter.resetVersionNumber(store2);
}
}

View File

@@ -0,0 +1,107 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* 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.alfresco.repo.version.common.counter.hibernate;
import java.util.concurrent.locks.Lock;
import org.alfresco.repo.domain.StoreKey;
import org.alfresco.repo.domain.VersionCount;
import org.alfresco.repo.domain.hibernate.VersionCountImpl;
import org.alfresco.repo.version.common.counter.VersionCounterDaoService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* Version counter DAO service implemtation using Hibernate.
* <p>
* The object should execute within its own transaction, and is limited to single-thread
* entry. If it becomes a bottleneck, the transaction synchronization should be moved
* over to reentrant locks and/or the hibernate mappings should be optimized for better
* read-write access.
*
* @author Derek Hulley
*/
public class HibernateVersionCounterDaoServiceImpl extends HibernateDaoSupport implements VersionCounterDaoService
{
private Lock countReadLock;
private Lock countWriteLock;
/**
* Retrieves or creates a version counter
*
* @param storeKey
* @return Returns a current or new version counter
*/
private VersionCount getVersionCounter(StoreRef storeRef)
{
StoreKey storeKey = new StoreKey(storeRef.getProtocol(), storeRef.getIdentifier());
// get the version counter
VersionCount versionCounter = (VersionCount) getHibernateTemplate().get(VersionCountImpl.class, storeKey);
// check if it exists
if (versionCounter == null)
{
// create a new one
versionCounter = new VersionCountImpl();
getHibernateTemplate().save(versionCounter, storeKey);
}
return versionCounter;
}
/**
* Get the next available version number for the specified store.
*
* @param storeRef the version store id
* @return the next version number
*/
public synchronized int nextVersionNumber(StoreRef storeRef)
{
// get the version counter
VersionCount versionCounter = getVersionCounter(storeRef);
// get an incremented count
return versionCounter.incrementVersionCount();
}
/**
* Gets the current version number for the specified store.
*
* @param storeRef the store reference
* @return the current version number, zero if no version yet allocated.
*/
public synchronized int currentVersionNumber(StoreRef storeRef)
{
// get the version counter
VersionCount versionCounter = getVersionCounter(storeRef);
// get an incremented count
return versionCounter.getVersionCount();
}
/**
* Resets the version number for a the specified store.
*
* WARNING: calling this method will completely reset the current
* version count for the specified store and cannot be undone.
*
* @param storeRef the store reference
*/
public synchronized void resetVersionNumber(StoreRef storeRef)
{
// get the version counter
VersionCount versionCounter = getVersionCounter(storeRef);
// get an incremented count
versionCounter.resetVersionCount();
}
}