MOB-629 - remove AVM issuer id

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13676 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2009-03-18 17:38:14 +00:00
parent a4e4ee8ef3
commit ef51318dbe
25 changed files with 4356 additions and 4869 deletions

View File

@@ -1,6 +1,26 @@
/**
*
*/
/*
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing" */
package org.alfresco.repo.avm;
import org.alfresco.repo.attributes.AttributeDAO;
@@ -34,11 +54,6 @@ public class AVMDAOs
return fgInstance;
}
/**
* The IssuerDAO.
*/
public IssuerDAO fIssuerDAO;
/**
* The AVMNodeDAO.
*/
@@ -141,14 +156,6 @@ public class AVMDAOs
{
fVersionRootDAO = versionRootDAO;
}
/**
* @param issuerDAO the fIssuerDAO to set
*/
public void setIssuerDAO(IssuerDAO issuerDAO)
{
fIssuerDAO = issuerDAO;
}
public void setAvmStorePropertyDAO(AVMStorePropertyDAO avmStorePropertyDAO)
{

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -429,7 +429,9 @@ public class AVMStoreImpl implements AVMStore, Serializable
else
{
// Otherwise we issue a brand new layer id.
newDir.setLayerID(fAVMRepository.issueLayerID());
// note: re-use generated node id as a layer id
newDir.setLayerID(newDir.getId());
}
if (child != null)
{

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2008 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,7 +24,6 @@
*/
package org.alfresco.repo.avm;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.service.cmr.security.PermissionService;
@@ -43,8 +42,6 @@ import org.springframework.context.ApplicationEvent;
*/
public class AvmBootstrap extends AbstractLifecycleBean
{
private List<Issuer> issuers;
private AVMLockingAwareService avmLockingAwareService;
private AVMRepository avmRepository;
@@ -56,7 +53,6 @@ public class AvmBootstrap extends AbstractLifecycleBean
public AvmBootstrap()
{
issuers = new ArrayList<Issuer>(0);
}
public void setAvmLockingAwareService(AVMLockingAwareService service)
@@ -79,26 +75,12 @@ public class AvmBootstrap extends AbstractLifecycleBean
avmSyncService = service;
}
/**
* Provide a list of {@link Issuer issuers} to bootstrap on context initialization.
*
* @see #onBootstrap(ApplicationEvent)
*/
public void setIssuers(List<Issuer> issuers)
{
this.issuers = issuers;
}
/**
* Initialize the issuers.
*/
@Override
protected void onBootstrap(ApplicationEvent event)
{
for (Issuer issuer : issuers)
{
issuer.init();
}
avmLockingAwareService.init();
avmRepository.setPermissionService(permissionService);
avmSyncService.setPermissionService(permissionService);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -49,20 +49,18 @@ public class DeletedNodeImpl extends AVMNodeImpl implements DeletedNode
/**
* Create a new one from scratch.
* @param id The node id.
* @param store The store it's being created in.
*/
public DeletedNodeImpl(long id,
AVMStore store, DbAccessControlList acl)
public DeletedNodeImpl(AVMStore store, DbAccessControlList acl)
{
super(id, store);
super(store);
this.setAcl(acl);
}
public DeletedNodeImpl(DeletedNode other,
AVMStore store, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush();
copyProperties(other);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -44,12 +44,11 @@ abstract class DirectoryNodeImpl extends AVMNodeImpl implements DirectoryNode
/**
* A pass through constructor. Called when a new concrete subclass
* instance is created.
* @param id
* @param repo
*/
protected DirectoryNodeImpl(long id, AVMStore repo)
protected DirectoryNodeImpl(AVMStore repo)
{
super(id, repo);
super(repo);
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -23,7 +23,6 @@
package org.alfresco.repo.avm;
import org.alfresco.repo.domain.DbAccessControlList;
/**
* Base class for file objects.
@@ -40,11 +39,10 @@ abstract class FileNodeImpl extends AVMNodeImpl implements FileNode
/**
* Pass through constructor.
* @param id The newly assigned object id.
* @param store The AVMStore we belong to.
*/
public FileNodeImpl(long id, AVMStore store)
public FileNodeImpl(AVMStore store)
{
super(id, store);
super(store);
}
}

View File

@@ -1,182 +0,0 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing" */
package org.alfresco.repo.avm;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.transaction.TransactionService;
/**
* This is a helper class that knows how to issue identifiers.
*
* @author britt
*/
public class Issuer
{
/**
* How large a block of ids to grab at a time.
*/
private static final int BLOCK_SIZE = 100;
/**
* The next number to issue.
*/
private long fNext;
private long fLast;
/**
* The name of this issuer.
*/
private String fName;
private IssuerIDDAO fIDDAO;
private IssuerDAO fIssuerDAO;
private TransactionService fTxnService;
/**
* Default constructor.
*/
public Issuer()
{
fNext = 0;
fLast = 0;
}
public void setIssuerIDDAO(IssuerIDDAO dao)
{
fIDDAO = dao;
}
public void setIssuerDAO(IssuerDAO dao)
{
fIssuerDAO = dao;
}
public void setTransactionService(TransactionService service)
{
fTxnService = service;
}
public void init()
{
if (!fTxnService.isReadOnly())
{
fTxnService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Object>()
{
public Object execute()
{
IssuerID issuerID = fIDDAO.get(fName);
Long id = fIssuerDAO.getIssuerValue(fName);
if (issuerID == null || id == null || id >= issuerID.getNext())
{
if (id == null)
{
id = 0L;
}
else
{
id = id + 1L;
}
if (issuerID == null)
{
issuerID = new IssuerIDImpl(fName, id);
fIDDAO.save(issuerID);
}
else
{
issuerID.setNext(id);
}
}
return null;
}
});
}
}
/**
* Set the name of this issuer. For Spring.
*
* @param name
* The name to set.
*/
public void setName(String name)
{
fName = name;
}
/**
* Issue the next number.
*
* @return A serial number.
*/
public synchronized long issue()
{
if (fNext >= fLast)
{
BlockGetter getter = new BlockGetter();
Thread thread = new Thread(getter);
thread.start();
try
{
thread.join();
}
catch (InterruptedException e)
{
// Do nothing.
}
fNext = getter.fNext;
fLast = getter.fLast;
}
return fNext++;
}
private class BlockGetter implements Runnable
{
public long fNext;
public long fLast;
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
public void run()
{
fTxnService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Object>()
{
public Object execute()
{
IssuerID isID = fIDDAO.get(fName);
fNext = isID.getNext();
fLast = fNext + BLOCK_SIZE;
isID.setNext(fLast);
return null;
}
});
}
}
}

View File

@@ -1,38 +0,0 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing" */
package org.alfresco.repo.avm;
/**
* DAO for Issuers.
* @author britt
*/
public interface IssuerDAO
{
/**
* Get the Issuer value.
* @param The name of the issuer.
* @return The largest id issued by the named issuer.
*/
public Long getIssuerValue(String name);
}

View File

@@ -1,29 +0,0 @@
/**
*
*/
package org.alfresco.repo.avm;
/**
* Trivial interface for accessing issuer ids.
* @author britt
*/
public interface IssuerID
{
/**
* Get the name of the issuer.
* @return
*/
public String getIssuer();
/**
* Get the highest id.
* @return
*/
public long getNext();
/**
* Set the next id to be issued.
* @param next The next id to be issued.
*/
public void setNext(long next);
}

View File

@@ -1,24 +0,0 @@
/**
*
*/
package org.alfresco.repo.avm;
/**
* DAO interface for IssuerIDs.
* @author britt
*/
public interface IssuerIDDAO
{
/**
* Get one by name (primary key).
* @param name
* @return
*/
public IssuerID get(String name);
/**
* Save one.
* @param issuerID
*/
public void save(IssuerID issuerID);
}

View File

@@ -1,66 +0,0 @@
/**
*
*/
package org.alfresco.repo.avm;
/**
* Bean for issuer id tracking.
* @author britt
*/
public class IssuerIDImpl implements IssuerID
{
private String fIssuer;
private long fNext;
private long fVersion;
public IssuerIDImpl()
{
}
public IssuerIDImpl(String issuer, long next)
{
fIssuer = issuer;
fNext = next;
}
public void setVersion(long version)
{
fVersion = version;
}
public long getVersion()
{
return fVersion;
}
/* (non-Javadoc)
* @see org.alfresco.repo.avm.IssuerID#getIssuer()
*/
public String getIssuer()
{
return fIssuer;
}
public void setIssuer(String issuer)
{
fIssuer = issuer;
}
/* (non-Javadoc)
* @see org.alfresco.repo.avm.IssuerID#getNext()
*/
public long getNext()
{
return fNext;
}
/* (non-Javadoc)
* @see org.alfresco.repo.avm.IssuerID#setNext(long)
*/
public void setNext(long next)
{
fNext = next;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -95,7 +95,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
*/
public LayeredDirectoryNodeImpl(String indirection, AVMStore store, AVMNode toCopy, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
fLayerID = -1;
fIndirection = indirection;
fIndirectionVersion = -1;
@@ -159,7 +159,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
*/
public LayeredDirectoryNodeImpl(LayeredDirectoryNode other, AVMStore repos, Lookup lookup, boolean copyAll, Long parentAcl, ACLCopyMode mode)
{
super(repos.getAVMRepository().issueID(), repos);
super(repos);
fIndirection = other.getIndirection();
fPrimaryIndirection = other.getPrimaryIndirection();
fIndirectionVersion = -1;
@@ -201,7 +201,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
*/
public LayeredDirectoryNodeImpl(PlainDirectoryNode other, AVMStore store, Lookup lPath, boolean copyContents, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
fIndirection = null;
fPrimaryIndirection = false;
fIndirectionVersion = -1;
@@ -240,7 +240,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
*/
public LayeredDirectoryNodeImpl(DirectoryNode dir, AVMStore store, Lookup srcLookup, String name, Long inheritedAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
fIndirection = srcLookup.getIndirectionPath() + "/" + name;
fPrimaryIndirection = true;
fIndirectionVersion = -1;
@@ -793,7 +793,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
}
if (child != null && (indirect || child.getStoreNew() == null || child.getAncestor() != null))
{
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore().getAVMRepository().issueID(), lPath.getAVMStore(), child.getAcl());
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore(), child.getAcl());
AVMDAOs.Instance().fAVMNodeDAO.save(ghost);
AVMDAOs.Instance().fAVMNodeDAO.flush();
ghost.setAncestor(child);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -66,7 +66,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
*/
public LayeredFileNodeImpl(LayeredFileNode other, AVMStore store, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
fIndirection = other.getIndirection();
fIndirectionVersion = -1;
setVersionID(other.getVersionID() + 1);
@@ -88,7 +88,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
*/
public LayeredFileNodeImpl(String indirection, AVMStore store, DbAccessControlList acl)
{
super(store.getAVMRepository().issueID(), store);
super(store);
fIndirection = indirection;
fIndirectionVersion = -1;
setVersionID(1);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -52,7 +52,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
*/
public PlainDirectoryNodeImpl(AVMStore store)
{
super(store.getAVMRepository().issueID(), store);
super(store);
setVersionID(1);
AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush();
@@ -74,7 +74,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
public PlainDirectoryNodeImpl(PlainDirectoryNode other,
AVMStore store, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
AVMDAOs.Instance().fAVMNodeDAO.save(this);
for (ChildEntry child : AVMDAOs.Instance().fChildEntryDAO.getByParent(other, null))
{
@@ -295,8 +295,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
AVMDAOs.Instance().fChildEntryDAO.delete(entry);
if (child.getStoreNew() == null || child.getAncestor() != null)
{
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore().getAVMRepository().issueID(),
lPath.getAVMStore(), child.getAcl());
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore(), child.getAcl());
AVMDAOs.Instance().fAVMNodeDAO.save(ghost);
AVMDAOs.Instance().fAVMNodeDAO.flush();
ghost.setAncestor(child);

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -79,7 +79,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
*/
public PlainFileNodeImpl(AVMStore store)
{
super(store.getAVMRepository().issueID(), store);
super(store);
setVersionID(1);
AVMDAOs.Instance().fAVMNodeDAO.save(this);
AVMDAOs.Instance().fAVMNodeDAO.flush();
@@ -93,7 +93,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
public PlainFileNodeImpl(PlainFileNode other,
AVMStore store, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
// The null is OK because the Lookup argument is only use by
// layered files.
setContentData(other.getContentData(null));
@@ -123,7 +123,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
DbAccessControlList acl,
int versionID, Long parentAcl, ACLCopyMode mode)
{
super(store.getAVMRepository().issueID(), store);
super(store);
setContentData(content);
setBasicAttributes(attrs);
setVersionID(versionID + 1);

View File

@@ -1,380 +1,376 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.alfresco.repo.avm">
<typedef class="org.alfresco.repo.domain.hibernate.QNameUserType" name="QName" />
<!-- AVMNodeBean is the abstract base for filesystem like objects.
We're using the one table per class hierarchy strategy to implement
polymorphism. -->
<class table="avm_nodes" abstract="true"
name="AVMNodeImpl"
proxy="AVMNode"
optimistic-lock="version"
lazy="false">
<cache usage="read-write"/>
<!-- The id is set programmatically using an Issuer. See below. -->
<id name="id"
column="id"
type="long"/>
<!-- I suppose this would be more efficient to encode type by an int.
We'll see if using a string makes a difference. -->
<discriminator column="class_type"
type="string"
length="20"/>
<!-- We're using hibernate's own versioning scheme for concurrency control.
I don't know how well that will play with a full Spring-JTA stack. -->
<version column="vers"
name="vers"
type="long"/>
<!-- This should really be not null, but I haven't figured out
the right way to build the relation so that nullability constraints
won't cause violations in the db during saves. -->
<property name="versionID" type="int" column="version_id"
not-null="true"/>
<property name="guid" type="string" length="36" column="guid"/>
<component name="basicAttributes" class="BasicAttributesImpl">
<property name="creator" type="string" not-null="true"/>
<property name="owner" type="string" not-null="true"/>
<property name="lastModifier" type="string" not-null="true"/>
<property name="createDate" type="long" not-null="true"/>
<property name="modDate" type="long" not-null="true"/>
<property name="accessDate" type="long" not-null="true"/>
</component>
<property name="isRoot" column="is_root" type="boolean"/>
<many-to-one name="storeNew" class="AVMStoreImpl" column="store_new_id" foreign-key="fk_avm_n_store"/>
<!-- ACL -->
<many-to-one name="acl" column="acl_id" foreign-key="fk_avm_n_acl" cascade="none"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
<set name="aspects" fetch="join" lazy="false" table="avm_aspects" cascade="all" optimistic-lock="true">
<cache usage="read-write"/>
<key column="node_id" not-null="true" foreign-key="fk_avm_nasp_n"/>
<element column="qname_id" type="long" not-null="true"/> <!-- fk_avm_nasp_qn -->
</set>
<map name="properties" fetch="join" lazy="false" table="avm_node_properties" cascade="all" optimistic-lock="true">
<cache usage="read-write"/>
<key column="node_id" not-null="true" foreign-key="fk_avm_nprop_n"/>
<map-key column="qname_id" type="long" /> <!-- fk_avm_nprop_qn -->
<composite-element class="org.alfresco.repo.domain.PropertyValue">
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
<property name="booleanValue" column="boolean_value" type="boolean" />
<property name="longValue" column="long_value" type="long" />
<property name="floatValue" column="float_value" type="float" />
<property name="doubleValue" column="double_value" type="double" />
<property name="stringValue" column="string_value" type="string" length="1024"/>
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
</composite-element>
</map>
<!-- Deleted nodes -->
<subclass name="DeletedNodeImpl"
proxy="DeletedNode"
lazy="false"
discriminator-value="deletednode">
<property name="deletedType" type="int"/>
</subclass>
<!-- Directories, two flavors. -->
<subclass name="DirectoryNodeImpl"
proxy="DirectoryNode"
abstract="true"
lazy="false">
<!-- A Layered Directory is our smart symlink thingy. -->
<subclass name="LayeredDirectoryNodeImpl"
proxy="LayeredDirectoryNode"
discriminator-value="layereddirectory" lazy="false">
<!-- The layer id is an implementation trick to disambiguate
exactly what layer is being refered to in various circumstances. -->
<property name="layerID" column="layer_id" type="long"/>
<!-- The is the moral equivalent of the value of a symlink. -->
<property name="indirection" column="indirection"
type="string" length="511" />
<property name="indirectionVersion" type="int" column="indirection_version"/>
<!-- This marks a layered directory as either knowing itself what
it points at (true) or inheriting what it points at from its
container (false).
Ideally we would have the column 'indirection' in the index but it is too long.
-->
<property name="primaryIndirection"
column="primary_indirection" type="boolean" index="idx_avm_n_pi" />
<property name="opacity" column="opacity" type="boolean"/>
<!-- Map of names to DirectoryEntries. -->
</subclass>
<!-- Just plain directories. -->
<subclass name="PlainDirectoryNodeImpl"
discriminator-value="plaindirectory" proxy="PlainDirectoryNode" lazy="false">
</subclass>
</subclass>
<!-- There are two kinds of files, plain and symlinky. -->
<subclass name="FileNodeImpl"
proxy="FileNode"
abstract="true"
lazy="false">
<!-- Plain files just have a reference to a Content object. -->
<subclass discriminator-value="plainfile"
name="PlainFileNodeImpl" proxy="PlainFileNode" lazy="false">
<property name="contentURL" column="content_url" type="string" length="128"/>
<property name="mimeType" column="mime_type" type="string" length="64"/>
<property name="encoding" column="encoding" type="string" length="16"/>
<property name="length" column="length" type="long"/>
</subclass>
<!-- Layered files are almost exactly copy on write symlinks. -->
<subclass name="LayeredFileNodeImpl"
discriminator-value="layeredfile" proxy="LayeredFileNode" lazy="false">
<property name="indirection" type="string" length="511"
column="indirection" />
<property name="indirectionVersion" type="int" column="indirection_version"/>
</subclass>
</subclass>
</class>
<!-- A store is the what we used to call a virtual repository. -->
<class table="avm_stores" name="AVMStoreImpl"
proxy="AVMStore" optimistic-lock="version">
<cache usage="read-write"/>
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<version name="vers" column="vers" type="long"/>
<property name="name" column="name" type="string" unique="true"/>
<property type="int" name="nextVersionID"
column="next_version_id" not-null="true"/>
<!-- Every AVMStore has a root directory that is the current root directory. -->
<many-to-one name="root" class="DirectoryNodeImpl"
column="current_root_id" cascade="save-update" foreign-key="fk_avm_s_root">
</many-to-one>
<!-- ACL -->
<many-to-one name="storeAcl" column="acl_id" foreign-key="fk_avm_s_acl" cascade="none"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
</class>
<class name="AVMStorePropertyImpl" proxy="AVMStoreProperty" table="avm_store_properties">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<many-to-one name="store" class="AVMStoreImpl" column="avm_store_id" foreign-key="fk_avm_sprop_store"/>
<property name="qnameId" column="qname_id" type="long" not-null="true" /> <!-- fk_avm_sprop_qname -->
<component class="org.alfresco.repo.domain.PropertyValue" name="value">
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
<property name="booleanValue" column="boolean_value" type="boolean" />
<property name="longValue" column="long_value" type="long" />
<property name="floatValue" column="float_value" type="float" />
<property name="doubleValue" column="double_value" type="double" />
<property name="stringValue" column="string_value" type="string" length="1024"/>
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
</component>
</class>
<class name="VersionRootImpl" proxy="VersionRoot" table="avm_version_roots">
<cache usage="read-write"/>
<id name="id" column="id" type="long">
<generator class="native"></generator>
</id>
<natural-id>
<property name="versionID" type="int" not-null="true"
column="version_id" index="idx_avm_vr_version">
</property>
<many-to-one name="avmStore" column="avm_store_id"
class="AVMStoreImpl" not-null="true" foreign-key="fk_avm_vr_store">
</many-to-one>
</natural-id>
<property name="createDate" type="long" not-null="true" column="create_date">
</property>
<property name="creator" type="string" column="creator"
not-null="true">
</property>
<many-to-one name="root" class="DirectoryNodeImpl"
column="root_id" not-null="true" foreign-key="fk_avm_vr_root">
</many-to-one>
<property name="tag" type="string" length="255" column="tag"/>
<property name="description" type="string" length="4000" column="description"/>
</class>
<class name="ChildEntryImpl" proxy="ChildEntry" table="avm_child_entries">
<cache usage="read-write"/>
<composite-id name="key" class="ChildKey" >
<key-many-to-one name="parent" column="parent_id" class="DirectoryNodeImpl" foreign-key="fk_avm_ce_parent"/>
<key-property name="name" column="name" type="string" length="160"/>
</composite-id>
<many-to-one name="child" column="child_id" class="AVMNodeImpl" not-null="true" foreign-key="fk_avm_ce_child"/>
</class>
<class name="HistoryLinkImpl" proxy="HistoryLink" table="avm_history_links">
<composite-id>
<key-many-to-one name="ancestor" class="AVMNodeImpl" column="ancestor" foreign-key="fk_avm_hl_ancestor"/>
<key-many-to-one name="descendent" class="AVMNodeImpl" column="descendent" foreign-key="fk_avm_hl_desc"/>
</composite-id>
</class>
<class name="MergeLinkImpl" proxy="MergeLink" table="avm_merge_links">
<composite-id>
<key-many-to-one name="mfrom" class="AVMNodeImpl" column="mfrom" foreign-key="fk_avm_ml_from"/>
<key-many-to-one name="mto" class="AVMNodeImpl" column="mto" foreign-key="fk_avm_ml_to"/>
</composite-id>
</class>
<!-- When a snapshot is created we stow away all of the layered
nodes that were frozen by the snapshot so that subsequent
snapshots can find them and force copies. -->
<class name="VersionLayeredNodeEntryImpl" proxy="VersionLayeredNodeEntry"
table="avm_version_layered_node_entry">
<composite-id>
<key-many-to-one name="version" class="VersionRootImpl" column="version_root_id" foreign-key="fk_avm_vlne_vr"/>
<key-property name="md5Sum" type="string" length="32" column="md5sum"/>
</composite-id>
<property name="path" type="string" length="512" column="path"/>
</class>
<class name="IssuerIDImpl" proxy="IssuerID" table="avm_issuer_ids" optimistic-lock="version" lazy="false">
<id name="issuer" type="string" length="32" column="issuer"/>
<version name="version" column="version" type="long"/>
<property name="next" type="long" column="next_id" not-null="true"/>
</class>
<query name="ChildEntry.DeleteByParent">
<![CDATA[
delete ChildEntryImpl ce
where ce.key.parent = :parent
]]>
</query>
<query name="AVMNode.GetNewInStore">
<![CDATA[
from AVMNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewInStoreID">
<![CDATA[
select an.id
from AVMNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.ClearNewInStore">
<![CDATA[
update versioned AVMNodeImpl an
set an.storeNew = null
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewLayeredDirectory">
<![CDATA[
select an.id
from LayeredDirectoryNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewLayeredFile">
<![CDATA[
select an.id
from LayeredFileNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetDescendents">
<![CDATA[
select hl.descendent
from HistoryLinkImpl hl
where hl.ancestor = :node
]]>
</query>
<query name="HistoryLink.ByAncestor">
<![CDATA[
from HistoryLinkImpl hl
where hl.ancestor = :node
]]>
</query>
<query name="AVMNode.GetMergedTo">
<![CDATA[
select ml.mto
from MergeLinkImpl ml
where ml.mfrom = :merged
]]>
</query>
<query name="MergeLink.ByFrom">
<![CDATA[
from MergeLinkImpl ml
where ml.mfrom = :merged
]]>
</query>
<query name="VersionRoot.GetVersionRoot">
<![CDATA[
select v.root
from VersionRootImpl v
where
v.avmStore = :store and v.versionID = :version
]]>
</query>
<query name="VersionRoot.VersionByID">
<![CDATA[
from VersionRootImpl v
where
v.avmStore = :store and v.versionID = :version
]]>
</query>
<query name="FindOrphans">
<![CDATA[
from AVMNodeImpl an
where
an not in ( select ce.child
from ChildEntryImpl ce )
and an.isRoot = false
]]>
</query>
<query name="FindOrphans2">
<![CDATA[
select an
from ChildEntryImpl ce
right outer join ce.child an
where ce.child is null and an.isRoot = false
]]>
</query>
<query name="PlainFileNode.GetContentUrls">
<![CDATA[
select
pfn.contentURL
from
PlainFileNodeImpl pfn
where pfn.contentURL is not null
]]>
</query>
<sql-query name="avm.GetStorePropertiesByKeyPattern">
<return alias="asp" class="AVMStorePropertyImpl"/>
SELECT
{asp.*}
FROM
avm_store_properties asp
JOIN alf_qname qn ON (qn.id = asp.qname_id)
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
WHERE
ns.uri LIKE :uri AND
qn.local_name LIKE :localName
</sql-query>
<sql-query name="avm.GetStorePropertiesByStoreAndKeyPattern">
<return alias="asp" class="AVMStorePropertyImpl"/>
SELECT
{asp.*}
FROM
avm_store_properties asp
JOIN alf_qname qn ON (qn.id = asp.qname_id)
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
WHERE
asp.avm_store_id = :storeId AND
ns.uri LIKE :uri AND
qn.local_name LIKE :localName
</sql-query>
<sql-query name="avm.DeleteStorePropertiesByType">
DELETE
FROM
avm_store_properties
WHERE
avm_store_id = :storeId AND
qname_id = :qnameId
</sql-query>
<sql-query name="avm.DeleteStoreProperties">
DELETE
FROM
avm_store_properties
WHERE
avm_store_id = :storeId
</sql-query>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.alfresco.repo.avm">
<typedef class="org.alfresco.repo.domain.hibernate.QNameUserType" name="QName" />
<!-- AVMNodeBean is the abstract base for filesystem like objects.
We're using the one table per class hierarchy strategy to implement
polymorphism. -->
<class table="avm_nodes" abstract="true"
name="AVMNodeImpl"
proxy="AVMNode"
optimistic-lock="version"
lazy="false">
<cache usage="read-write"/>
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<!-- I suppose this would be more efficient to encode type by an int.
We'll see if using a string makes a difference. -->
<discriminator column="class_type"
type="string"
length="20"/>
<!-- We're using hibernate's own versioning scheme for concurrency control.
I don't know how well that will play with a full Spring-JTA stack. -->
<version column="vers"
name="vers"
type="long"/>
<!-- This should really be not null, but I haven't figured out
the right way to build the relation so that nullability constraints
won't cause violations in the db during saves. -->
<property name="versionID" type="int" column="version_id"
not-null="true"/>
<property name="guid" type="string" length="36" column="guid"/>
<component name="basicAttributes" class="BasicAttributesImpl">
<property name="creator" type="string" not-null="true"/>
<property name="owner" type="string" not-null="true"/>
<property name="lastModifier" type="string" not-null="true"/>
<property name="createDate" type="long" not-null="true"/>
<property name="modDate" type="long" not-null="true"/>
<property name="accessDate" type="long" not-null="true"/>
</component>
<property name="isRoot" column="is_root" type="boolean"/>
<many-to-one name="storeNew" class="AVMStoreImpl" column="store_new_id" foreign-key="fk_avm_n_store"/>
<!-- ACL -->
<many-to-one name="acl" column="acl_id" foreign-key="fk_avm_n_acl" cascade="none"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
<set name="aspects" fetch="join" lazy="false" table="avm_aspects" cascade="all" optimistic-lock="true">
<cache usage="read-write"/>
<key column="node_id" not-null="true" foreign-key="fk_avm_nasp_n"/>
<element column="qname_id" type="long" not-null="true"/> <!-- fk_avm_nasp_qn -->
</set>
<map name="properties" fetch="join" lazy="false" table="avm_node_properties" cascade="all" optimistic-lock="true">
<cache usage="read-write"/>
<key column="node_id" not-null="true" foreign-key="fk_avm_nprop_n"/>
<map-key column="qname_id" type="long" /> <!-- fk_avm_nprop_qn -->
<composite-element class="org.alfresco.repo.domain.PropertyValue">
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
<property name="booleanValue" column="boolean_value" type="boolean" />
<property name="longValue" column="long_value" type="long" />
<property name="floatValue" column="float_value" type="float" />
<property name="doubleValue" column="double_value" type="double" />
<property name="stringValue" column="string_value" type="string" length="1024"/>
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
</composite-element>
</map>
<!-- Deleted nodes -->
<subclass name="DeletedNodeImpl"
proxy="DeletedNode"
lazy="false"
discriminator-value="deletednode">
<property name="deletedType" type="int"/>
</subclass>
<!-- Directories, two flavors. -->
<subclass name="DirectoryNodeImpl"
proxy="DirectoryNode"
abstract="true"
lazy="false">
<!-- A Layered Directory is our smart symlink thingy. -->
<subclass name="LayeredDirectoryNodeImpl"
proxy="LayeredDirectoryNode"
discriminator-value="layereddirectory" lazy="false">
<!-- The layer id is an implementation trick to disambiguate
exactly what layer is being refered to in various circumstances. -->
<property name="layerID" column="layer_id" type="long"/>
<!-- The is the moral equivalent of the value of a symlink. -->
<property name="indirection" column="indirection"
type="string" length="511" />
<property name="indirectionVersion" type="int" column="indirection_version"/>
<!-- This marks a layered directory as either knowing itself what
it points at (true) or inheriting what it points at from its
container (false).
Ideally we would have the column 'indirection' in the index but it is too long.
-->
<property name="primaryIndirection"
column="primary_indirection" type="boolean" index="idx_avm_n_pi" />
<property name="opacity" column="opacity" type="boolean"/>
<!-- Map of names to DirectoryEntries. -->
</subclass>
<!-- Just plain directories. -->
<subclass name="PlainDirectoryNodeImpl"
discriminator-value="plaindirectory" proxy="PlainDirectoryNode" lazy="false">
</subclass>
</subclass>
<!-- There are two kinds of files, plain and symlinky. -->
<subclass name="FileNodeImpl"
proxy="FileNode"
abstract="true"
lazy="false">
<!-- Plain files just have a reference to a Content object. -->
<subclass discriminator-value="plainfile"
name="PlainFileNodeImpl" proxy="PlainFileNode" lazy="false">
<property name="contentURL" column="content_url" type="string" length="128"/>
<property name="mimeType" column="mime_type" type="string" length="64"/>
<property name="encoding" column="encoding" type="string" length="16"/>
<property name="length" column="length" type="long"/>
</subclass>
<!-- Layered files are almost exactly copy on write symlinks. -->
<subclass name="LayeredFileNodeImpl"
discriminator-value="layeredfile" proxy="LayeredFileNode" lazy="false">
<property name="indirection" type="string" length="511"
column="indirection" />
<property name="indirectionVersion" type="int" column="indirection_version"/>
</subclass>
</subclass>
</class>
<!-- A store is the what we used to call a virtual repository. -->
<class table="avm_stores" name="AVMStoreImpl"
proxy="AVMStore" optimistic-lock="version">
<cache usage="read-write"/>
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<version name="vers" column="vers" type="long"/>
<property name="name" column="name" type="string" unique="true"/>
<property type="int" name="nextVersionID"
column="next_version_id" not-null="true"/>
<!-- Every AVMStore has a root directory that is the current root directory. -->
<many-to-one name="root" class="DirectoryNodeImpl"
column="current_root_id" cascade="save-update" foreign-key="fk_avm_s_root">
</many-to-one>
<!-- ACL -->
<many-to-one name="storeAcl" column="acl_id" foreign-key="fk_avm_s_acl" cascade="none"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
</class>
<class name="AVMStorePropertyImpl" proxy="AVMStoreProperty" table="avm_store_properties">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<many-to-one name="store" class="AVMStoreImpl" column="avm_store_id" foreign-key="fk_avm_sprop_store"/>
<property name="qnameId" column="qname_id" type="long" not-null="true" /> <!-- fk_avm_sprop_qname -->
<component class="org.alfresco.repo.domain.PropertyValue" name="value">
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
<property name="booleanValue" column="boolean_value" type="boolean" />
<property name="longValue" column="long_value" type="long" />
<property name="floatValue" column="float_value" type="float" />
<property name="doubleValue" column="double_value" type="double" />
<property name="stringValue" column="string_value" type="string" length="1024"/>
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
</component>
</class>
<class name="VersionRootImpl" proxy="VersionRoot" table="avm_version_roots">
<cache usage="read-write"/>
<id name="id" column="id" type="long">
<generator class="native"></generator>
</id>
<natural-id>
<property name="versionID" type="int" not-null="true"
column="version_id" index="idx_avm_vr_version">
</property>
<many-to-one name="avmStore" column="avm_store_id"
class="AVMStoreImpl" not-null="true" foreign-key="fk_avm_vr_store">
</many-to-one>
</natural-id>
<property name="createDate" type="long" not-null="true" column="create_date">
</property>
<property name="creator" type="string" column="creator"
not-null="true">
</property>
<many-to-one name="root" class="DirectoryNodeImpl"
column="root_id" not-null="true" foreign-key="fk_avm_vr_root">
</many-to-one>
<property name="tag" type="string" length="255" column="tag"/>
<property name="description" type="string" length="4000" column="description"/>
</class>
<class name="ChildEntryImpl" proxy="ChildEntry" table="avm_child_entries">
<cache usage="read-write"/>
<composite-id name="key" class="ChildKey" >
<key-many-to-one name="parent" column="parent_id" class="DirectoryNodeImpl" foreign-key="fk_avm_ce_parent"/>
<key-property name="name" column="name" type="string" length="160"/>
</composite-id>
<many-to-one name="child" column="child_id" class="AVMNodeImpl" not-null="true" foreign-key="fk_avm_ce_child"/>
</class>
<class name="HistoryLinkImpl" proxy="HistoryLink" table="avm_history_links">
<composite-id>
<key-many-to-one name="ancestor" class="AVMNodeImpl" column="ancestor" foreign-key="fk_avm_hl_ancestor"/>
<key-many-to-one name="descendent" class="AVMNodeImpl" column="descendent" foreign-key="fk_avm_hl_desc"/>
</composite-id>
</class>
<class name="MergeLinkImpl" proxy="MergeLink" table="avm_merge_links">
<composite-id>
<key-many-to-one name="mfrom" class="AVMNodeImpl" column="mfrom" foreign-key="fk_avm_ml_from"/>
<key-many-to-one name="mto" class="AVMNodeImpl" column="mto" foreign-key="fk_avm_ml_to"/>
</composite-id>
</class>
<!-- When a snapshot is created we stow away all of the layered
nodes that were frozen by the snapshot so that subsequent
snapshots can find them and force copies. -->
<class name="VersionLayeredNodeEntryImpl" proxy="VersionLayeredNodeEntry"
table="avm_version_layered_node_entry">
<composite-id>
<key-many-to-one name="version" class="VersionRootImpl" column="version_root_id" foreign-key="fk_avm_vlne_vr"/>
<key-property name="md5Sum" type="string" length="32" column="md5sum"/>
</composite-id>
<property name="path" type="string" length="512" column="path"/>
</class>
<query name="ChildEntry.DeleteByParent">
<![CDATA[
delete ChildEntryImpl ce
where ce.key.parent = :parent
]]>
</query>
<query name="AVMNode.GetNewInStore">
<![CDATA[
from AVMNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewInStoreID">
<![CDATA[
select an.id
from AVMNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.ClearNewInStore">
<![CDATA[
update versioned AVMNodeImpl an
set an.storeNew = null
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewLayeredDirectory">
<![CDATA[
select an.id
from LayeredDirectoryNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetNewLayeredFile">
<![CDATA[
select an.id
from LayeredFileNodeImpl an
where an.storeNew = :store
]]>
</query>
<query name="AVMNode.GetDescendents">
<![CDATA[
select hl.descendent
from HistoryLinkImpl hl
where hl.ancestor = :node
]]>
</query>
<query name="HistoryLink.ByAncestor">
<![CDATA[
from HistoryLinkImpl hl
where hl.ancestor = :node
]]>
</query>
<query name="AVMNode.GetMergedTo">
<![CDATA[
select ml.mto
from MergeLinkImpl ml
where ml.mfrom = :merged
]]>
</query>
<query name="MergeLink.ByFrom">
<![CDATA[
from MergeLinkImpl ml
where ml.mfrom = :merged
]]>
</query>
<query name="VersionRoot.GetVersionRoot">
<![CDATA[
select v.root
from VersionRootImpl v
where
v.avmStore = :store and v.versionID = :version
]]>
</query>
<query name="VersionRoot.VersionByID">
<![CDATA[
from VersionRootImpl v
where
v.avmStore = :store and v.versionID = :version
]]>
</query>
<query name="FindOrphans">
<![CDATA[
from AVMNodeImpl an
where
an not in ( select ce.child
from ChildEntryImpl ce )
and an.isRoot = false
]]>
</query>
<query name="FindOrphans2">
<![CDATA[
select an
from ChildEntryImpl ce
right outer join ce.child an
where ce.child is null and an.isRoot = false
]]>
</query>
<query name="PlainFileNode.GetContentUrls">
<![CDATA[
select
pfn.contentURL
from
PlainFileNodeImpl pfn
where pfn.contentURL is not null
]]>
</query>
<sql-query name="avm.GetStorePropertiesByKeyPattern">
<return alias="asp" class="AVMStorePropertyImpl"/>
SELECT
{asp.*}
FROM
avm_store_properties asp
JOIN alf_qname qn ON (qn.id = asp.qname_id)
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
WHERE
ns.uri LIKE :uri AND
qn.local_name LIKE :localName
</sql-query>
<sql-query name="avm.GetStorePropertiesByStoreAndKeyPattern">
<return alias="asp" class="AVMStorePropertyImpl"/>
SELECT
{asp.*}
FROM
avm_store_properties asp
JOIN alf_qname qn ON (qn.id = asp.qname_id)
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
WHERE
asp.avm_store_id = :storeId AND
ns.uri LIKE :uri AND
qn.local_name LIKE :localName
</sql-query>
<sql-query name="avm.DeleteStorePropertiesByType">
DELETE
FROM
avm_store_properties
WHERE
avm_store_id = :storeId AND
qname_id = :qnameId
</sql-query>
<sql-query name="avm.DeleteStoreProperties">
DELETE
FROM
avm_store_properties
WHERE
avm_store_id = :storeId
</sql-query>
</hibernate-mapping>

View File

@@ -1,70 +0,0 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing" */
package org.alfresco.repo.avm.hibernate;
import org.alfresco.repo.avm.IssuerDAO;
import org.alfresco.service.cmr.avm.AVMException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* DAO for Issuers. Hibernate version.
* @author britt
*/
class IssuerDAOHibernate extends HibernateDaoSupport implements
IssuerDAO
{
/**
* Do nothing constructor.
*/
public IssuerDAOHibernate()
{
super();
}
/**
* Get the largest issued id for the named issuer.
* @param The name of the issuer.
* @return The value or null if the issuer is brand new.
* @throws AVMException on an invalid name.
*/
public Long getIssuerValue(String name)
{
if (name.equals("content"))
{
return (Long)getSession().
createQuery("select max(fc.id) from FileContentImpl fc").uniqueResult();
}
else if (name.equals("layer"))
{
return (Long)getSession().
createQuery("select max(an.layerID) from AVMNodeImpl an").uniqueResult();
}
else if (name.equals("node"))
{
return (Long)getSession().createQuery("select max(an.id) from AVMNodeImpl an").uniqueResult();
}
throw new AVMException("Unknown issuer type: " + name);
}
}

View File

@@ -1,32 +0,0 @@
/**
*
*/
package org.alfresco.repo.avm.hibernate;
import org.alfresco.repo.avm.IssuerID;
import org.alfresco.repo.avm.IssuerIDDAO;
import org.alfresco.repo.avm.IssuerIDImpl;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* Hibernate implementation of IssuerIDDAO
* @author britt
*/
public class IssuerIDDAOHibernate extends HibernateDaoSupport implements IssuerIDDAO
{
/* (non-Javadoc)
* @see org.alfresco.repo.avm.IssuerIDDAO#get(java.lang.String)
*/
public IssuerID get(String name)
{
return (IssuerID)getSession().get(IssuerIDImpl.class, name);
}
/* (non-Javadoc)
* @see org.alfresco.repo.avm.IssuerIDDAO#save(org.alfresco.repo.avm.IssuerID)
*/
public void save(IssuerID issuerID)
{
getSession().save(issuerID);
}
}