mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
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:
@@ -4,54 +4,6 @@
|
|||||||
|
|
||||||
<beans>
|
<beans>
|
||||||
|
|
||||||
<!-- ID Issuers. -->
|
|
||||||
|
|
||||||
<bean id="nodeIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" >
|
|
||||||
<property name="name">
|
|
||||||
<value>node</value>
|
|
||||||
</property>
|
|
||||||
<property name="issuerDAO">
|
|
||||||
<ref bean="issuerDAO"/>
|
|
||||||
</property>
|
|
||||||
<property name="issuerIDDAO">
|
|
||||||
<ref bean="issuerIDDAO"/>
|
|
||||||
</property>
|
|
||||||
<property name="transactionService">
|
|
||||||
<ref bean="transactionService"/>
|
|
||||||
</property>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="layerIssuer" class="org.alfresco.repo.avm.Issuer" depends-on="avmDAOs" >
|
|
||||||
<property name="name">
|
|
||||||
<value>layer</value>
|
|
||||||
</property>
|
|
||||||
<property name="issuerDAO">
|
|
||||||
<ref bean="issuerDAO"/>
|
|
||||||
</property>
|
|
||||||
<property name="issuerIDDAO">
|
|
||||||
<ref bean="issuerIDDAO"/>
|
|
||||||
</property>
|
|
||||||
<property name="transactionService">
|
|
||||||
<ref bean="transactionService"/>
|
|
||||||
</property>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- DAOs for persistent data types -->
|
|
||||||
|
|
||||||
<bean id="issuerIDDAO" class="org.alfresco.repo.avm.hibernate.IssuerIDDAOHibernate">
|
|
||||||
<property name="sessionFactory">
|
|
||||||
<ref bean="sessionFactory"/>
|
|
||||||
</property>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<!-- Issuers are not actual entities. More like pseudo entities. -->
|
|
||||||
|
|
||||||
<bean id="issuerDAO" class="org.alfresco.repo.avm.hibernate.IssuerDAOHibernate">
|
|
||||||
<property name="sessionFactory">
|
|
||||||
<ref bean="sessionFactory"/>
|
|
||||||
</property>
|
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="avmNodeDAO" class="org.alfresco.repo.avm.hibernate.AVMNodeDAOHibernate">
|
<bean id="avmNodeDAO" class="org.alfresco.repo.avm.hibernate.AVMNodeDAOHibernate">
|
||||||
<property name="sessionFactory">
|
<property name="sessionFactory">
|
||||||
<ref bean="sessionFactory"/>
|
<ref bean="sessionFactory"/>
|
||||||
@@ -113,9 +65,6 @@
|
|||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="avmDAOs" class="org.alfresco.repo.avm.AVMDAOs" factory-method="Instance">
|
<bean id="avmDAOs" class="org.alfresco.repo.avm.AVMDAOs" factory-method="Instance">
|
||||||
<property name="issuerDAO">
|
|
||||||
<ref bean="issuerDAO"/>
|
|
||||||
</property>
|
|
||||||
<property name="nodeDAO">
|
<property name="nodeDAO">
|
||||||
<ref bean="avmNodeDAO"/>
|
<ref bean="avmNodeDAO"/>
|
||||||
</property>
|
</property>
|
||||||
@@ -186,12 +135,6 @@
|
|||||||
<bean id="purgeVersionTxnListener" class="org.alfresco.repo.avm.PurgeVersionTxnListener"/>
|
<bean id="purgeVersionTxnListener" class="org.alfresco.repo.avm.PurgeVersionTxnListener"/>
|
||||||
|
|
||||||
<bean id="avmRepository" class="org.alfresco.repo.avm.AVMRepository">
|
<bean id="avmRepository" class="org.alfresco.repo.avm.AVMRepository">
|
||||||
<property name="nodeIssuer">
|
|
||||||
<ref bean="nodeIssuer"/>
|
|
||||||
</property>
|
|
||||||
<property name="layerIssuer">
|
|
||||||
<ref bean="layerIssuer"/>
|
|
||||||
</property>
|
|
||||||
<property name="lookupCache">
|
<property name="lookupCache">
|
||||||
<ref bean="lookupCache"/>
|
<ref bean="lookupCache"/>
|
||||||
</property>
|
</property>
|
||||||
|
@@ -95,6 +95,7 @@
|
|||||||
<ref bean="patch.db-V2.1-RemoveWcmSubmittedAspect" />
|
<ref bean="patch.db-V2.1-RemoveWcmSubmittedAspect" />
|
||||||
<ref bean="patch.db-V2.1-AuditPathIndex" />
|
<ref bean="patch.db-V2.1-AuditPathIndex" />
|
||||||
<ref bean="patch.db-V3.0-0-CreateActivitiesExtras" />
|
<ref bean="patch.db-V3.0-0-CreateActivitiesExtras" />
|
||||||
|
<ref bean="patch.db-V3.2-Remove-AVM-Issuer" />
|
||||||
</list>
|
</list>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
@@ -118,12 +119,6 @@
|
|||||||
|
|
||||||
<!-- Bootstrap the AVM -->
|
<!-- Bootstrap the AVM -->
|
||||||
<bean id="avmBootstrap" class="org.alfresco.repo.avm.AvmBootstrap" >
|
<bean id="avmBootstrap" class="org.alfresco.repo.avm.AvmBootstrap" >
|
||||||
<property name="issuers">
|
|
||||||
<list>
|
|
||||||
<ref bean="nodeIssuer" />
|
|
||||||
<ref bean="layerIssuer" />
|
|
||||||
</list>
|
|
||||||
</property>
|
|
||||||
<property name="avmLockingAwareService">
|
<property name="avmLockingAwareService">
|
||||||
<ref bean="avmLockingAwareService"/>
|
<ref bean="avmLockingAwareService"/>
|
||||||
</property>
|
</property>
|
||||||
|
@@ -0,0 +1,53 @@
|
|||||||
|
--
|
||||||
|
-- Title: Upgrade to V3.2 - Remove AVM Issuer
|
||||||
|
-- Database: MySQL
|
||||||
|
-- Since: V3.2 schema X
|
||||||
|
-- Author: janv
|
||||||
|
--
|
||||||
|
-- remove AVM node issuer - replace with auto-increment id
|
||||||
|
--
|
||||||
|
-- Please contact support@alfresco.com if you need assistance with the upgrade.
|
||||||
|
--
|
||||||
|
|
||||||
|
-- -----------------------------
|
||||||
|
-- Enable auto-increment --
|
||||||
|
-- -----------------------------
|
||||||
|
|
||||||
|
insert into avm_nodes
|
||||||
|
select
|
||||||
|
(select max(id)+1 from avm_nodes),
|
||||||
|
class_type, vers, version_id, guid, creator, owner, lastModifier, createDate, modDate, accessDate, is_root, store_new_id, acl_id, deletedType, layer_id, indirection, indirection_version, primary_indirection, opacity, content_url, mime_type, encoding, length
|
||||||
|
from avm_nodes where id = 0;
|
||||||
|
|
||||||
|
update avm_aspects set node_id = (select max(id) from avm_nodes) where node_id = 0;
|
||||||
|
|
||||||
|
update avm_child_entries set parent_id = (select max(id) from avm_nodes) where parent_id = 0;
|
||||||
|
update avm_child_entries set child_id = (select max(id) from avm_nodes) where child_id = 0;
|
||||||
|
|
||||||
|
update avm_history_links set ancestor = (select max(id) from avm_nodes) where ancestor = 0;
|
||||||
|
update avm_history_links set descendent = (select max(id) from avm_nodes) where descendent = 0;
|
||||||
|
|
||||||
|
update avm_merge_links set mfrom = (select max(id) from avm_nodes) where mfrom = 0;
|
||||||
|
update avm_merge_links set mto = (select max(id) from avm_nodes) where mto = 0;
|
||||||
|
|
||||||
|
update avm_node_properties set node_id = (select max(id) from avm_nodes) where node_id = 0;
|
||||||
|
|
||||||
|
update avm_stores set current_root_id = (select max(id) from avm_nodes) where current_root_id = 0;
|
||||||
|
|
||||||
|
update avm_version_roots set root_id = (select max(id) from avm_nodes) where root_id = 0;
|
||||||
|
|
||||||
|
delete from avm_nodes where id = 0;
|
||||||
|
|
||||||
|
alter table avm_nodes modify column id bigint not null auto_increment;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Record script finish
|
||||||
|
--
|
||||||
|
DELETE FROM alf_applied_patch WHERE id = 'patch.db-V3.2-Remove-AVM-Issuer';
|
||||||
|
INSERT INTO alf_applied_patch
|
||||||
|
(id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
'patch.db-V3.2-Remove-AVM-Issuer', 'Manually executed script upgrade V3.2 to remove AVM Issuer',
|
||||||
|
0, 2007, -1, 2008, null, 'UNKOWN', 1, 1, 'Script completed'
|
||||||
|
);
|
@@ -1759,5 +1759,15 @@
|
|||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="patch.db-V3.2-Remove-AVM-Issuer" class="org.alfresco.repo.admin.patch.impl.SchemaUpgradeScriptPatch" parent="basePatch">
|
||||||
|
<property name="id"><value>patch.db-V3.2-Remove-AVM-Issuer</value></property>
|
||||||
|
<property name="description"><value>patch.schemaUpgradeScript.description</value></property>
|
||||||
|
<property name="fixesFromSchema"><value>0</value></property>
|
||||||
|
<property name="fixesToSchema"><value>2007</value></property>
|
||||||
|
<property name="targetSchema"><value>2008</value></property>
|
||||||
|
<property name="scriptUrl">
|
||||||
|
<value>classpath:alfresco/dbscripts/upgrade/3.2/${db.script.dialect}/remove-AVM-issuer.sql</value>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
@@ -19,4 +19,4 @@ version.build=@build-number@
|
|||||||
|
|
||||||
# Schema number
|
# Schema number
|
||||||
|
|
||||||
version.schema=2007
|
version.schema=2008
|
||||||
|
@@ -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;
|
package org.alfresco.repo.avm;
|
||||||
|
|
||||||
import org.alfresco.repo.attributes.AttributeDAO;
|
import org.alfresco.repo.attributes.AttributeDAO;
|
||||||
@@ -34,11 +54,6 @@ public class AVMDAOs
|
|||||||
return fgInstance;
|
return fgInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The IssuerDAO.
|
|
||||||
*/
|
|
||||||
public IssuerDAO fIssuerDAO;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The AVMNodeDAO.
|
* The AVMNodeDAO.
|
||||||
*/
|
*/
|
||||||
@@ -141,14 +156,6 @@ public class AVMDAOs
|
|||||||
{
|
{
|
||||||
fVersionRootDAO = versionRootDAO;
|
fVersionRootDAO = versionRootDAO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param issuerDAO the fIssuerDAO to set
|
|
||||||
*/
|
|
||||||
public void setIssuerDAO(IssuerDAO issuerDAO)
|
|
||||||
{
|
|
||||||
fIssuerDAO = issuerDAO;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAvmStorePropertyDAO(AVMStorePropertyDAO avmStorePropertyDAO)
|
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
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -429,7 +429,9 @@ public class AVMStoreImpl implements AVMStore, Serializable
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Otherwise we issue a brand new layer id.
|
// 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)
|
if (child != null)
|
||||||
{
|
{
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -24,7 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.avm;
|
package org.alfresco.repo.avm;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
@@ -43,8 +42,6 @@ import org.springframework.context.ApplicationEvent;
|
|||||||
*/
|
*/
|
||||||
public class AvmBootstrap extends AbstractLifecycleBean
|
public class AvmBootstrap extends AbstractLifecycleBean
|
||||||
{
|
{
|
||||||
private List<Issuer> issuers;
|
|
||||||
|
|
||||||
private AVMLockingAwareService avmLockingAwareService;
|
private AVMLockingAwareService avmLockingAwareService;
|
||||||
|
|
||||||
private AVMRepository avmRepository;
|
private AVMRepository avmRepository;
|
||||||
@@ -56,7 +53,6 @@ public class AvmBootstrap extends AbstractLifecycleBean
|
|||||||
|
|
||||||
public AvmBootstrap()
|
public AvmBootstrap()
|
||||||
{
|
{
|
||||||
issuers = new ArrayList<Issuer>(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAvmLockingAwareService(AVMLockingAwareService service)
|
public void setAvmLockingAwareService(AVMLockingAwareService service)
|
||||||
@@ -79,26 +75,12 @@ public class AvmBootstrap extends AbstractLifecycleBean
|
|||||||
avmSyncService = service;
|
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.
|
* Initialize the issuers.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onBootstrap(ApplicationEvent event)
|
protected void onBootstrap(ApplicationEvent event)
|
||||||
{
|
{
|
||||||
for (Issuer issuer : issuers)
|
|
||||||
{
|
|
||||||
issuer.init();
|
|
||||||
}
|
|
||||||
avmLockingAwareService.init();
|
avmLockingAwareService.init();
|
||||||
avmRepository.setPermissionService(permissionService);
|
avmRepository.setPermissionService(permissionService);
|
||||||
avmSyncService.setPermissionService(permissionService);
|
avmSyncService.setPermissionService(permissionService);
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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.
|
* Create a new one from scratch.
|
||||||
* @param id The node id.
|
|
||||||
* @param store The store it's being created in.
|
* @param store The store it's being created in.
|
||||||
*/
|
*/
|
||||||
public DeletedNodeImpl(long id,
|
public DeletedNodeImpl(AVMStore store, DbAccessControlList acl)
|
||||||
AVMStore store, DbAccessControlList acl)
|
|
||||||
{
|
{
|
||||||
super(id, store);
|
super(store);
|
||||||
this.setAcl(acl);
|
this.setAcl(acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeletedNodeImpl(DeletedNode other,
|
public DeletedNodeImpl(DeletedNode other,
|
||||||
AVMStore store, Long parentAcl, ACLCopyMode mode)
|
AVMStore store, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||||
copyProperties(other);
|
copyProperties(other);
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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
|
* A pass through constructor. Called when a new concrete subclass
|
||||||
* instance is created.
|
* instance is created.
|
||||||
* @param id
|
|
||||||
* @param repo
|
* @param repo
|
||||||
*/
|
*/
|
||||||
protected DirectoryNodeImpl(long id, AVMStore repo)
|
protected DirectoryNodeImpl(AVMStore repo)
|
||||||
{
|
{
|
||||||
super(id, repo);
|
super(repo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
package org.alfresco.repo.avm;
|
package org.alfresco.repo.avm;
|
||||||
|
|
||||||
import org.alfresco.repo.domain.DbAccessControlList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for file objects.
|
* Base class for file objects.
|
||||||
@@ -40,11 +39,10 @@ abstract class FileNodeImpl extends AVMNodeImpl implements FileNode
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Pass through constructor.
|
* Pass through constructor.
|
||||||
* @param id The newly assigned object id.
|
|
||||||
* @param store The AVMStore we belong to.
|
* @param store The AVMStore we belong to.
|
||||||
*/
|
*/
|
||||||
public FileNodeImpl(long id, AVMStore store)
|
public FileNodeImpl(AVMStore store)
|
||||||
{
|
{
|
||||||
super(id, store);
|
super(store);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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);
|
|
||||||
}
|
|
@@ -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);
|
|
||||||
}
|
|
@@ -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);
|
|
||||||
}
|
|
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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)
|
public LayeredDirectoryNodeImpl(String indirection, AVMStore store, AVMNode toCopy, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
fLayerID = -1;
|
fLayerID = -1;
|
||||||
fIndirection = indirection;
|
fIndirection = indirection;
|
||||||
fIndirectionVersion = -1;
|
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)
|
public LayeredDirectoryNodeImpl(LayeredDirectoryNode other, AVMStore repos, Lookup lookup, boolean copyAll, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(repos.getAVMRepository().issueID(), repos);
|
super(repos);
|
||||||
fIndirection = other.getIndirection();
|
fIndirection = other.getIndirection();
|
||||||
fPrimaryIndirection = other.getPrimaryIndirection();
|
fPrimaryIndirection = other.getPrimaryIndirection();
|
||||||
fIndirectionVersion = -1;
|
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)
|
public LayeredDirectoryNodeImpl(PlainDirectoryNode other, AVMStore store, Lookup lPath, boolean copyContents, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
fIndirection = null;
|
fIndirection = null;
|
||||||
fPrimaryIndirection = false;
|
fPrimaryIndirection = false;
|
||||||
fIndirectionVersion = -1;
|
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)
|
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;
|
fIndirection = srcLookup.getIndirectionPath() + "/" + name;
|
||||||
fPrimaryIndirection = true;
|
fPrimaryIndirection = true;
|
||||||
fIndirectionVersion = -1;
|
fIndirectionVersion = -1;
|
||||||
@@ -793,7 +793,7 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec
|
|||||||
}
|
}
|
||||||
if (child != null && (indirect || child.getStoreNew() == null || child.getAncestor() != null))
|
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.save(ghost);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||||
ghost.setAncestor(child);
|
ghost.setAncestor(child);
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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)
|
public LayeredFileNodeImpl(LayeredFileNode other, AVMStore store, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
fIndirection = other.getIndirection();
|
fIndirection = other.getIndirection();
|
||||||
fIndirectionVersion = -1;
|
fIndirectionVersion = -1;
|
||||||
setVersionID(other.getVersionID() + 1);
|
setVersionID(other.getVersionID() + 1);
|
||||||
@@ -88,7 +88,7 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode
|
|||||||
*/
|
*/
|
||||||
public LayeredFileNodeImpl(String indirection, AVMStore store, DbAccessControlList acl)
|
public LayeredFileNodeImpl(String indirection, AVMStore store, DbAccessControlList acl)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
fIndirection = indirection;
|
fIndirection = indirection;
|
||||||
fIndirectionVersion = -1;
|
fIndirectionVersion = -1;
|
||||||
setVersionID(1);
|
setVersionID(1);
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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)
|
public PlainDirectoryNodeImpl(AVMStore store)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
setVersionID(1);
|
setVersionID(1);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||||
@@ -74,7 +74,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
|
|||||||
public PlainDirectoryNodeImpl(PlainDirectoryNode other,
|
public PlainDirectoryNodeImpl(PlainDirectoryNode other,
|
||||||
AVMStore store, Long parentAcl, ACLCopyMode mode)
|
AVMStore store, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||||
for (ChildEntry child : AVMDAOs.Instance().fChildEntryDAO.getByParent(other, null))
|
for (ChildEntry child : AVMDAOs.Instance().fChildEntryDAO.getByParent(other, null))
|
||||||
{
|
{
|
||||||
@@ -295,8 +295,7 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory
|
|||||||
AVMDAOs.Instance().fChildEntryDAO.delete(entry);
|
AVMDAOs.Instance().fChildEntryDAO.delete(entry);
|
||||||
if (child.getStoreNew() == null || child.getAncestor() != null)
|
if (child.getStoreNew() == null || child.getAncestor() != null)
|
||||||
{
|
{
|
||||||
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore().getAVMRepository().issueID(),
|
DeletedNodeImpl ghost = new DeletedNodeImpl(lPath.getAVMStore(), child.getAcl());
|
||||||
lPath.getAVMStore(), child.getAcl());
|
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.save(ghost);
|
AVMDAOs.Instance().fAVMNodeDAO.save(ghost);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||||
ghost.setAncestor(child);
|
ghost.setAncestor(child);
|
||||||
|
@@ -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
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* 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)
|
public PlainFileNodeImpl(AVMStore store)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
setVersionID(1);
|
setVersionID(1);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
AVMDAOs.Instance().fAVMNodeDAO.save(this);
|
||||||
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
AVMDAOs.Instance().fAVMNodeDAO.flush();
|
||||||
@@ -93,7 +93,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
|
|||||||
public PlainFileNodeImpl(PlainFileNode other,
|
public PlainFileNodeImpl(PlainFileNode other,
|
||||||
AVMStore store, Long parentAcl, ACLCopyMode mode)
|
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
|
// The null is OK because the Lookup argument is only use by
|
||||||
// layered files.
|
// layered files.
|
||||||
setContentData(other.getContentData(null));
|
setContentData(other.getContentData(null));
|
||||||
@@ -123,7 +123,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode
|
|||||||
DbAccessControlList acl,
|
DbAccessControlList acl,
|
||||||
int versionID, Long parentAcl, ACLCopyMode mode)
|
int versionID, Long parentAcl, ACLCopyMode mode)
|
||||||
{
|
{
|
||||||
super(store.getAVMRepository().issueID(), store);
|
super(store);
|
||||||
setContentData(content);
|
setContentData(content);
|
||||||
setBasicAttributes(attrs);
|
setBasicAttributes(attrs);
|
||||||
setVersionID(versionID + 1);
|
setVersionID(versionID + 1);
|
||||||
|
@@ -1,380 +1,376 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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" >
|
<!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">
|
<hibernate-mapping package="org.alfresco.repo.avm">
|
||||||
|
|
||||||
<typedef class="org.alfresco.repo.domain.hibernate.QNameUserType" name="QName" />
|
<typedef class="org.alfresco.repo.domain.hibernate.QNameUserType" name="QName" />
|
||||||
|
|
||||||
<!-- AVMNodeBean is the abstract base for filesystem like objects.
|
<!-- AVMNodeBean is the abstract base for filesystem like objects.
|
||||||
We're using the one table per class hierarchy strategy to implement
|
We're using the one table per class hierarchy strategy to implement
|
||||||
polymorphism. -->
|
polymorphism. -->
|
||||||
<class table="avm_nodes" abstract="true"
|
<class table="avm_nodes" abstract="true"
|
||||||
name="AVMNodeImpl"
|
name="AVMNodeImpl"
|
||||||
proxy="AVMNode"
|
proxy="AVMNode"
|
||||||
optimistic-lock="version"
|
optimistic-lock="version"
|
||||||
lazy="false">
|
lazy="false">
|
||||||
<cache usage="read-write"/>
|
<cache usage="read-write"/>
|
||||||
<!-- The id is set programmatically using an Issuer. See below. -->
|
|
||||||
<id name="id"
|
<id name="id" column="id" type="long">
|
||||||
column="id"
|
<generator class="native"/>
|
||||||
type="long"/>
|
</id>
|
||||||
<!-- I suppose this would be more efficient to encode type by an int.
|
|
||||||
We'll see if using a string makes a difference. -->
|
<!-- I suppose this would be more efficient to encode type by an int.
|
||||||
<discriminator column="class_type"
|
We'll see if using a string makes a difference. -->
|
||||||
type="string"
|
<discriminator column="class_type"
|
||||||
length="20"/>
|
type="string"
|
||||||
<!-- We're using hibernate's own versioning scheme for concurrency control.
|
length="20"/>
|
||||||
I don't know how well that will play with a full Spring-JTA stack. -->
|
<!-- We're using hibernate's own versioning scheme for concurrency control.
|
||||||
<version column="vers"
|
I don't know how well that will play with a full Spring-JTA stack. -->
|
||||||
name="vers"
|
<version column="vers"
|
||||||
type="long"/>
|
name="vers"
|
||||||
<!-- This should really be not null, but I haven't figured out
|
type="long"/>
|
||||||
the right way to build the relation so that nullability constraints
|
<!-- This should really be not null, but I haven't figured out
|
||||||
won't cause violations in the db during saves. -->
|
the right way to build the relation so that nullability constraints
|
||||||
<property name="versionID" type="int" column="version_id"
|
won't cause violations in the db during saves. -->
|
||||||
not-null="true"/>
|
<property name="versionID" type="int" column="version_id"
|
||||||
<property name="guid" type="string" length="36" column="guid"/>
|
not-null="true"/>
|
||||||
<component name="basicAttributes" class="BasicAttributesImpl">
|
<property name="guid" type="string" length="36" column="guid"/>
|
||||||
<property name="creator" type="string" not-null="true"/>
|
<component name="basicAttributes" class="BasicAttributesImpl">
|
||||||
<property name="owner" type="string" not-null="true"/>
|
<property name="creator" type="string" not-null="true"/>
|
||||||
<property name="lastModifier" type="string" not-null="true"/>
|
<property name="owner" type="string" not-null="true"/>
|
||||||
<property name="createDate" type="long" not-null="true"/>
|
<property name="lastModifier" type="string" not-null="true"/>
|
||||||
<property name="modDate" type="long" not-null="true"/>
|
<property name="createDate" type="long" not-null="true"/>
|
||||||
<property name="accessDate" type="long" not-null="true"/>
|
<property name="modDate" type="long" not-null="true"/>
|
||||||
</component>
|
<property name="accessDate" type="long" not-null="true"/>
|
||||||
<property name="isRoot" column="is_root" type="boolean"/>
|
</component>
|
||||||
<many-to-one name="storeNew" class="AVMStoreImpl" column="store_new_id" foreign-key="fk_avm_n_store"/>
|
<property name="isRoot" column="is_root" type="boolean"/>
|
||||||
<!-- ACL -->
|
<many-to-one name="storeNew" class="AVMStoreImpl" column="store_new_id" foreign-key="fk_avm_n_store"/>
|
||||||
<many-to-one name="acl" column="acl_id" foreign-key="fk_avm_n_acl" cascade="none"
|
<!-- ACL -->
|
||||||
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
|
<many-to-one name="acl" column="acl_id" foreign-key="fk_avm_n_acl" cascade="none"
|
||||||
<set name="aspects" fetch="join" lazy="false" table="avm_aspects" cascade="all" optimistic-lock="true">
|
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
|
||||||
<cache usage="read-write"/>
|
<set name="aspects" fetch="join" lazy="false" table="avm_aspects" cascade="all" optimistic-lock="true">
|
||||||
<key column="node_id" not-null="true" foreign-key="fk_avm_nasp_n"/>
|
<cache usage="read-write"/>
|
||||||
<element column="qname_id" type="long" not-null="true"/> <!-- fk_avm_nasp_qn -->
|
<key column="node_id" not-null="true" foreign-key="fk_avm_nasp_n"/>
|
||||||
</set>
|
<element column="qname_id" type="long" not-null="true"/> <!-- fk_avm_nasp_qn -->
|
||||||
<map name="properties" fetch="join" lazy="false" table="avm_node_properties" cascade="all" optimistic-lock="true">
|
</set>
|
||||||
<cache usage="read-write"/>
|
<map name="properties" fetch="join" lazy="false" table="avm_node_properties" cascade="all" optimistic-lock="true">
|
||||||
<key column="node_id" not-null="true" foreign-key="fk_avm_nprop_n"/>
|
<cache usage="read-write"/>
|
||||||
<map-key column="qname_id" type="long" /> <!-- fk_avm_nprop_qn -->
|
<key column="node_id" not-null="true" foreign-key="fk_avm_nprop_n"/>
|
||||||
<composite-element class="org.alfresco.repo.domain.PropertyValue">
|
<map-key column="qname_id" type="long" /> <!-- fk_avm_nprop_qn -->
|
||||||
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
|
<composite-element class="org.alfresco.repo.domain.PropertyValue">
|
||||||
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
|
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
|
||||||
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
|
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
|
||||||
<property name="booleanValue" column="boolean_value" type="boolean" />
|
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
|
||||||
<property name="longValue" column="long_value" type="long" />
|
<property name="booleanValue" column="boolean_value" type="boolean" />
|
||||||
<property name="floatValue" column="float_value" type="float" />
|
<property name="longValue" column="long_value" type="long" />
|
||||||
<property name="doubleValue" column="double_value" type="double" />
|
<property name="floatValue" column="float_value" type="float" />
|
||||||
<property name="stringValue" column="string_value" type="string" length="1024"/>
|
<property name="doubleValue" column="double_value" type="double" />
|
||||||
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
|
<property name="stringValue" column="string_value" type="string" length="1024"/>
|
||||||
</composite-element>
|
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
|
||||||
</map>
|
</composite-element>
|
||||||
<!-- Deleted nodes -->
|
</map>
|
||||||
<subclass name="DeletedNodeImpl"
|
<!-- Deleted nodes -->
|
||||||
proxy="DeletedNode"
|
<subclass name="DeletedNodeImpl"
|
||||||
lazy="false"
|
proxy="DeletedNode"
|
||||||
discriminator-value="deletednode">
|
lazy="false"
|
||||||
<property name="deletedType" type="int"/>
|
discriminator-value="deletednode">
|
||||||
</subclass>
|
<property name="deletedType" type="int"/>
|
||||||
<!-- Directories, two flavors. -->
|
</subclass>
|
||||||
<subclass name="DirectoryNodeImpl"
|
<!-- Directories, two flavors. -->
|
||||||
proxy="DirectoryNode"
|
<subclass name="DirectoryNodeImpl"
|
||||||
abstract="true"
|
proxy="DirectoryNode"
|
||||||
lazy="false">
|
abstract="true"
|
||||||
<!-- A Layered Directory is our smart symlink thingy. -->
|
lazy="false">
|
||||||
<subclass name="LayeredDirectoryNodeImpl"
|
<!-- A Layered Directory is our smart symlink thingy. -->
|
||||||
proxy="LayeredDirectoryNode"
|
<subclass name="LayeredDirectoryNodeImpl"
|
||||||
discriminator-value="layereddirectory" lazy="false">
|
proxy="LayeredDirectoryNode"
|
||||||
<!-- The layer id is an implementation trick to disambiguate
|
discriminator-value="layereddirectory" lazy="false">
|
||||||
exactly what layer is being refered to in various circumstances. -->
|
<!-- The layer id is an implementation trick to disambiguate
|
||||||
<property name="layerID" column="layer_id" type="long"/>
|
exactly what layer is being refered to in various circumstances. -->
|
||||||
<!-- The is the moral equivalent of the value of a symlink. -->
|
<property name="layerID" column="layer_id" type="long"/>
|
||||||
<property name="indirection" column="indirection"
|
<!-- The is the moral equivalent of the value of a symlink. -->
|
||||||
type="string" length="511" />
|
<property name="indirection" column="indirection"
|
||||||
<property name="indirectionVersion" type="int" column="indirection_version"/>
|
type="string" length="511" />
|
||||||
<!-- This marks a layered directory as either knowing itself what
|
<property name="indirectionVersion" type="int" column="indirection_version"/>
|
||||||
it points at (true) or inheriting what it points at from its
|
<!-- This marks a layered directory as either knowing itself what
|
||||||
container (false).
|
it points at (true) or inheriting what it points at from its
|
||||||
Ideally we would have the column 'indirection' in the index but it is too long.
|
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="primaryIndirection"
|
||||||
<property name="opacity" column="opacity" type="boolean"/>
|
column="primary_indirection" type="boolean" index="idx_avm_n_pi" />
|
||||||
<!-- Map of names to DirectoryEntries. -->
|
<property name="opacity" column="opacity" type="boolean"/>
|
||||||
</subclass>
|
<!-- Map of names to DirectoryEntries. -->
|
||||||
<!-- Just plain directories. -->
|
</subclass>
|
||||||
<subclass name="PlainDirectoryNodeImpl"
|
<!-- Just plain directories. -->
|
||||||
discriminator-value="plaindirectory" proxy="PlainDirectoryNode" lazy="false">
|
<subclass name="PlainDirectoryNodeImpl"
|
||||||
</subclass>
|
discriminator-value="plaindirectory" proxy="PlainDirectoryNode" lazy="false">
|
||||||
</subclass>
|
</subclass>
|
||||||
<!-- There are two kinds of files, plain and symlinky. -->
|
</subclass>
|
||||||
<subclass name="FileNodeImpl"
|
<!-- There are two kinds of files, plain and symlinky. -->
|
||||||
proxy="FileNode"
|
<subclass name="FileNodeImpl"
|
||||||
abstract="true"
|
proxy="FileNode"
|
||||||
lazy="false">
|
abstract="true"
|
||||||
<!-- Plain files just have a reference to a Content object. -->
|
lazy="false">
|
||||||
<subclass discriminator-value="plainfile"
|
<!-- Plain files just have a reference to a Content object. -->
|
||||||
name="PlainFileNodeImpl" proxy="PlainFileNode" lazy="false">
|
<subclass discriminator-value="plainfile"
|
||||||
<property name="contentURL" column="content_url" type="string" length="128"/>
|
name="PlainFileNodeImpl" proxy="PlainFileNode" lazy="false">
|
||||||
<property name="mimeType" column="mime_type" type="string" length="64"/>
|
<property name="contentURL" column="content_url" type="string" length="128"/>
|
||||||
<property name="encoding" column="encoding" type="string" length="16"/>
|
<property name="mimeType" column="mime_type" type="string" length="64"/>
|
||||||
<property name="length" column="length" type="long"/>
|
<property name="encoding" column="encoding" type="string" length="16"/>
|
||||||
</subclass>
|
<property name="length" column="length" type="long"/>
|
||||||
<!-- Layered files are almost exactly copy on write symlinks. -->
|
</subclass>
|
||||||
<subclass name="LayeredFileNodeImpl"
|
<!-- Layered files are almost exactly copy on write symlinks. -->
|
||||||
discriminator-value="layeredfile" proxy="LayeredFileNode" lazy="false">
|
<subclass name="LayeredFileNodeImpl"
|
||||||
<property name="indirection" type="string" length="511"
|
discriminator-value="layeredfile" proxy="LayeredFileNode" lazy="false">
|
||||||
column="indirection" />
|
<property name="indirection" type="string" length="511"
|
||||||
<property name="indirectionVersion" type="int" column="indirection_version"/>
|
column="indirection" />
|
||||||
</subclass>
|
<property name="indirectionVersion" type="int" column="indirection_version"/>
|
||||||
</subclass>
|
</subclass>
|
||||||
</class>
|
</subclass>
|
||||||
<!-- A store is the what we used to call a virtual repository. -->
|
</class>
|
||||||
<class table="avm_stores" name="AVMStoreImpl"
|
<!-- A store is the what we used to call a virtual repository. -->
|
||||||
proxy="AVMStore" optimistic-lock="version">
|
<class table="avm_stores" name="AVMStoreImpl"
|
||||||
<cache usage="read-write"/>
|
proxy="AVMStore" optimistic-lock="version">
|
||||||
<id name="id" column="id" type="long">
|
<cache usage="read-write"/>
|
||||||
<generator class="native"/>
|
<id name="id" column="id" type="long">
|
||||||
</id>
|
<generator class="native"/>
|
||||||
<version name="vers" column="vers" type="long"/>
|
</id>
|
||||||
<property name="name" column="name" type="string" unique="true"/>
|
<version name="vers" column="vers" type="long"/>
|
||||||
<property type="int" name="nextVersionID"
|
<property name="name" column="name" type="string" unique="true"/>
|
||||||
column="next_version_id" not-null="true"/>
|
<property type="int" name="nextVersionID"
|
||||||
<!-- Every AVMStore has a root directory that is the current root directory. -->
|
column="next_version_id" not-null="true"/>
|
||||||
<many-to-one name="root" class="DirectoryNodeImpl"
|
<!-- Every AVMStore has a root directory that is the current root directory. -->
|
||||||
column="current_root_id" cascade="save-update" foreign-key="fk_avm_s_root">
|
<many-to-one name="root" class="DirectoryNodeImpl"
|
||||||
</many-to-one>
|
column="current_root_id" cascade="save-update" foreign-key="fk_avm_s_root">
|
||||||
<!-- ACL -->
|
</many-to-one>
|
||||||
<many-to-one name="storeAcl" column="acl_id" foreign-key="fk_avm_s_acl" cascade="none"
|
<!-- ACL -->
|
||||||
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
|
<many-to-one name="storeAcl" column="acl_id" foreign-key="fk_avm_s_acl" cascade="none"
|
||||||
</class>
|
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"/>
|
||||||
<class name="AVMStorePropertyImpl" proxy="AVMStoreProperty" table="avm_store_properties">
|
</class>
|
||||||
<id name="id" column="id" type="long">
|
<class name="AVMStorePropertyImpl" proxy="AVMStoreProperty" table="avm_store_properties">
|
||||||
<generator class="native"/>
|
<id name="id" column="id" type="long">
|
||||||
</id>
|
<generator class="native"/>
|
||||||
<many-to-one name="store" class="AVMStoreImpl" column="avm_store_id" foreign-key="fk_avm_sprop_store"/>
|
</id>
|
||||||
<property name="qnameId" column="qname_id" type="long" not-null="true" /> <!-- fk_avm_sprop_qname -->
|
<many-to-one name="store" class="AVMStoreImpl" column="avm_store_id" foreign-key="fk_avm_sprop_store"/>
|
||||||
<component class="org.alfresco.repo.domain.PropertyValue" name="value">
|
<property name="qnameId" column="qname_id" type="long" not-null="true" /> <!-- fk_avm_sprop_qname -->
|
||||||
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
|
<component class="org.alfresco.repo.domain.PropertyValue" name="value">
|
||||||
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
|
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
|
||||||
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
|
<property name="persistedType" column="persisted_type_n" type="integer" not-null="true" />
|
||||||
<property name="booleanValue" column="boolean_value" type="boolean" />
|
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
|
||||||
<property name="longValue" column="long_value" type="long" />
|
<property name="booleanValue" column="boolean_value" type="boolean" />
|
||||||
<property name="floatValue" column="float_value" type="float" />
|
<property name="longValue" column="long_value" type="long" />
|
||||||
<property name="doubleValue" column="double_value" type="double" />
|
<property name="floatValue" column="float_value" type="float" />
|
||||||
<property name="stringValue" column="string_value" type="string" length="1024"/>
|
<property name="doubleValue" column="double_value" type="double" />
|
||||||
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
|
<property name="stringValue" column="string_value" type="string" length="1024"/>
|
||||||
</component>
|
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
|
||||||
</class>
|
</component>
|
||||||
<class name="VersionRootImpl" proxy="VersionRoot" table="avm_version_roots">
|
</class>
|
||||||
<cache usage="read-write"/>
|
<class name="VersionRootImpl" proxy="VersionRoot" table="avm_version_roots">
|
||||||
<id name="id" column="id" type="long">
|
<cache usage="read-write"/>
|
||||||
<generator class="native"></generator>
|
<id name="id" column="id" type="long">
|
||||||
</id>
|
<generator class="native"></generator>
|
||||||
<natural-id>
|
</id>
|
||||||
<property name="versionID" type="int" not-null="true"
|
<natural-id>
|
||||||
column="version_id" index="idx_avm_vr_version">
|
<property name="versionID" type="int" not-null="true"
|
||||||
</property>
|
column="version_id" index="idx_avm_vr_version">
|
||||||
<many-to-one name="avmStore" column="avm_store_id"
|
</property>
|
||||||
class="AVMStoreImpl" not-null="true" foreign-key="fk_avm_vr_store">
|
<many-to-one name="avmStore" column="avm_store_id"
|
||||||
</many-to-one>
|
class="AVMStoreImpl" not-null="true" foreign-key="fk_avm_vr_store">
|
||||||
</natural-id>
|
</many-to-one>
|
||||||
<property name="createDate" type="long" not-null="true" column="create_date">
|
</natural-id>
|
||||||
</property>
|
<property name="createDate" type="long" not-null="true" column="create_date">
|
||||||
<property name="creator" type="string" column="creator"
|
</property>
|
||||||
not-null="true">
|
<property name="creator" type="string" column="creator"
|
||||||
</property>
|
not-null="true">
|
||||||
<many-to-one name="root" class="DirectoryNodeImpl"
|
</property>
|
||||||
column="root_id" not-null="true" foreign-key="fk_avm_vr_root">
|
<many-to-one name="root" class="DirectoryNodeImpl"
|
||||||
</many-to-one>
|
column="root_id" not-null="true" foreign-key="fk_avm_vr_root">
|
||||||
<property name="tag" type="string" length="255" column="tag"/>
|
</many-to-one>
|
||||||
<property name="description" type="string" length="4000" column="description"/>
|
<property name="tag" type="string" length="255" column="tag"/>
|
||||||
</class>
|
<property name="description" type="string" length="4000" column="description"/>
|
||||||
<class name="ChildEntryImpl" proxy="ChildEntry" table="avm_child_entries">
|
</class>
|
||||||
<cache usage="read-write"/>
|
<class name="ChildEntryImpl" proxy="ChildEntry" table="avm_child_entries">
|
||||||
<composite-id name="key" class="ChildKey" >
|
<cache usage="read-write"/>
|
||||||
<key-many-to-one name="parent" column="parent_id" class="DirectoryNodeImpl" foreign-key="fk_avm_ce_parent"/>
|
<composite-id name="key" class="ChildKey" >
|
||||||
<key-property name="name" column="name" type="string" length="160"/>
|
<key-many-to-one name="parent" column="parent_id" class="DirectoryNodeImpl" foreign-key="fk_avm_ce_parent"/>
|
||||||
</composite-id>
|
<key-property name="name" column="name" type="string" length="160"/>
|
||||||
<many-to-one name="child" column="child_id" class="AVMNodeImpl" not-null="true" foreign-key="fk_avm_ce_child"/>
|
</composite-id>
|
||||||
</class>
|
<many-to-one name="child" column="child_id" class="AVMNodeImpl" not-null="true" foreign-key="fk_avm_ce_child"/>
|
||||||
<class name="HistoryLinkImpl" proxy="HistoryLink" table="avm_history_links">
|
</class>
|
||||||
<composite-id>
|
<class name="HistoryLinkImpl" proxy="HistoryLink" table="avm_history_links">
|
||||||
<key-many-to-one name="ancestor" class="AVMNodeImpl" column="ancestor" foreign-key="fk_avm_hl_ancestor"/>
|
<composite-id>
|
||||||
<key-many-to-one name="descendent" class="AVMNodeImpl" column="descendent" foreign-key="fk_avm_hl_desc"/>
|
<key-many-to-one name="ancestor" class="AVMNodeImpl" column="ancestor" foreign-key="fk_avm_hl_ancestor"/>
|
||||||
</composite-id>
|
<key-many-to-one name="descendent" class="AVMNodeImpl" column="descendent" foreign-key="fk_avm_hl_desc"/>
|
||||||
</class>
|
</composite-id>
|
||||||
<class name="MergeLinkImpl" proxy="MergeLink" table="avm_merge_links">
|
</class>
|
||||||
<composite-id>
|
<class name="MergeLinkImpl" proxy="MergeLink" table="avm_merge_links">
|
||||||
<key-many-to-one name="mfrom" class="AVMNodeImpl" column="mfrom" foreign-key="fk_avm_ml_from"/>
|
<composite-id>
|
||||||
<key-many-to-one name="mto" class="AVMNodeImpl" column="mto" foreign-key="fk_avm_ml_to"/>
|
<key-many-to-one name="mfrom" class="AVMNodeImpl" column="mfrom" foreign-key="fk_avm_ml_from"/>
|
||||||
</composite-id>
|
<key-many-to-one name="mto" class="AVMNodeImpl" column="mto" foreign-key="fk_avm_ml_to"/>
|
||||||
</class>
|
</composite-id>
|
||||||
<!-- When a snapshot is created we stow away all of the layered
|
</class>
|
||||||
nodes that were frozen by the snapshot so that subsequent
|
<!-- When a snapshot is created we stow away all of the layered
|
||||||
snapshots can find them and force copies. -->
|
nodes that were frozen by the snapshot so that subsequent
|
||||||
<class name="VersionLayeredNodeEntryImpl" proxy="VersionLayeredNodeEntry"
|
snapshots can find them and force copies. -->
|
||||||
table="avm_version_layered_node_entry">
|
<class name="VersionLayeredNodeEntryImpl" proxy="VersionLayeredNodeEntry"
|
||||||
<composite-id>
|
table="avm_version_layered_node_entry">
|
||||||
<key-many-to-one name="version" class="VersionRootImpl" column="version_root_id" foreign-key="fk_avm_vlne_vr"/>
|
<composite-id>
|
||||||
<key-property name="md5Sum" type="string" length="32" column="md5sum"/>
|
<key-many-to-one name="version" class="VersionRootImpl" column="version_root_id" foreign-key="fk_avm_vlne_vr"/>
|
||||||
</composite-id>
|
<key-property name="md5Sum" type="string" length="32" column="md5sum"/>
|
||||||
<property name="path" type="string" length="512" column="path"/>
|
</composite-id>
|
||||||
</class>
|
<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"/>
|
<query name="ChildEntry.DeleteByParent">
|
||||||
<version name="version" column="version" type="long"/>
|
<![CDATA[
|
||||||
<property name="next" type="long" column="next_id" not-null="true"/>
|
delete ChildEntryImpl ce
|
||||||
</class>
|
where ce.key.parent = :parent
|
||||||
<query name="ChildEntry.DeleteByParent">
|
]]>
|
||||||
<![CDATA[
|
</query>
|
||||||
delete ChildEntryImpl ce
|
<query name="AVMNode.GetNewInStore">
|
||||||
where ce.key.parent = :parent
|
<![CDATA[
|
||||||
]]>
|
from AVMNodeImpl an
|
||||||
</query>
|
where an.storeNew = :store
|
||||||
<query name="AVMNode.GetNewInStore">
|
]]>
|
||||||
<![CDATA[
|
</query>
|
||||||
from AVMNodeImpl an
|
<query name="AVMNode.GetNewInStoreID">
|
||||||
where an.storeNew = :store
|
<![CDATA[
|
||||||
]]>
|
select an.id
|
||||||
</query>
|
from AVMNodeImpl an
|
||||||
<query name="AVMNode.GetNewInStoreID">
|
where an.storeNew = :store
|
||||||
<![CDATA[
|
]]>
|
||||||
select an.id
|
</query>
|
||||||
from AVMNodeImpl an
|
<query name="AVMNode.ClearNewInStore">
|
||||||
where an.storeNew = :store
|
<![CDATA[
|
||||||
]]>
|
update versioned AVMNodeImpl an
|
||||||
</query>
|
set an.storeNew = null
|
||||||
<query name="AVMNode.ClearNewInStore">
|
where an.storeNew = :store
|
||||||
<![CDATA[
|
]]>
|
||||||
update versioned AVMNodeImpl an
|
</query>
|
||||||
set an.storeNew = null
|
<query name="AVMNode.GetNewLayeredDirectory">
|
||||||
where an.storeNew = :store
|
<![CDATA[
|
||||||
]]>
|
select an.id
|
||||||
</query>
|
from LayeredDirectoryNodeImpl an
|
||||||
<query name="AVMNode.GetNewLayeredDirectory">
|
where an.storeNew = :store
|
||||||
<![CDATA[
|
]]>
|
||||||
select an.id
|
</query>
|
||||||
from LayeredDirectoryNodeImpl an
|
<query name="AVMNode.GetNewLayeredFile">
|
||||||
where an.storeNew = :store
|
<![CDATA[
|
||||||
]]>
|
select an.id
|
||||||
</query>
|
from LayeredFileNodeImpl an
|
||||||
<query name="AVMNode.GetNewLayeredFile">
|
where an.storeNew = :store
|
||||||
<![CDATA[
|
]]>
|
||||||
select an.id
|
</query>
|
||||||
from LayeredFileNodeImpl an
|
<query name="AVMNode.GetDescendents">
|
||||||
where an.storeNew = :store
|
<![CDATA[
|
||||||
]]>
|
select hl.descendent
|
||||||
</query>
|
from HistoryLinkImpl hl
|
||||||
<query name="AVMNode.GetDescendents">
|
where hl.ancestor = :node
|
||||||
<![CDATA[
|
]]>
|
||||||
select hl.descendent
|
</query>
|
||||||
from HistoryLinkImpl hl
|
<query name="HistoryLink.ByAncestor">
|
||||||
where hl.ancestor = :node
|
<![CDATA[
|
||||||
]]>
|
from HistoryLinkImpl hl
|
||||||
</query>
|
where hl.ancestor = :node
|
||||||
<query name="HistoryLink.ByAncestor">
|
]]>
|
||||||
<![CDATA[
|
</query>
|
||||||
from HistoryLinkImpl hl
|
<query name="AVMNode.GetMergedTo">
|
||||||
where hl.ancestor = :node
|
<![CDATA[
|
||||||
]]>
|
select ml.mto
|
||||||
</query>
|
from MergeLinkImpl ml
|
||||||
<query name="AVMNode.GetMergedTo">
|
where ml.mfrom = :merged
|
||||||
<![CDATA[
|
]]>
|
||||||
select ml.mto
|
</query>
|
||||||
from MergeLinkImpl ml
|
<query name="MergeLink.ByFrom">
|
||||||
where ml.mfrom = :merged
|
<![CDATA[
|
||||||
]]>
|
from MergeLinkImpl ml
|
||||||
</query>
|
where ml.mfrom = :merged
|
||||||
<query name="MergeLink.ByFrom">
|
]]>
|
||||||
<![CDATA[
|
</query>
|
||||||
from MergeLinkImpl ml
|
<query name="VersionRoot.GetVersionRoot">
|
||||||
where ml.mfrom = :merged
|
<![CDATA[
|
||||||
]]>
|
select v.root
|
||||||
</query>
|
from VersionRootImpl v
|
||||||
<query name="VersionRoot.GetVersionRoot">
|
where
|
||||||
<![CDATA[
|
v.avmStore = :store and v.versionID = :version
|
||||||
select v.root
|
]]>
|
||||||
from VersionRootImpl v
|
</query>
|
||||||
where
|
<query name="VersionRoot.VersionByID">
|
||||||
v.avmStore = :store and v.versionID = :version
|
<![CDATA[
|
||||||
]]>
|
from VersionRootImpl v
|
||||||
</query>
|
where
|
||||||
<query name="VersionRoot.VersionByID">
|
v.avmStore = :store and v.versionID = :version
|
||||||
<![CDATA[
|
]]>
|
||||||
from VersionRootImpl v
|
</query>
|
||||||
where
|
<query name="FindOrphans">
|
||||||
v.avmStore = :store and v.versionID = :version
|
<![CDATA[
|
||||||
]]>
|
from AVMNodeImpl an
|
||||||
</query>
|
where
|
||||||
<query name="FindOrphans">
|
an not in ( select ce.child
|
||||||
<![CDATA[
|
from ChildEntryImpl ce )
|
||||||
from AVMNodeImpl an
|
and an.isRoot = false
|
||||||
where
|
]]>
|
||||||
an not in ( select ce.child
|
</query>
|
||||||
from ChildEntryImpl ce )
|
<query name="FindOrphans2">
|
||||||
and an.isRoot = false
|
<![CDATA[
|
||||||
]]>
|
select an
|
||||||
</query>
|
from ChildEntryImpl ce
|
||||||
<query name="FindOrphans2">
|
right outer join ce.child an
|
||||||
<![CDATA[
|
where ce.child is null and an.isRoot = false
|
||||||
select an
|
]]>
|
||||||
from ChildEntryImpl ce
|
</query>
|
||||||
right outer join ce.child an
|
<query name="PlainFileNode.GetContentUrls">
|
||||||
where ce.child is null and an.isRoot = false
|
<![CDATA[
|
||||||
]]>
|
select
|
||||||
</query>
|
pfn.contentURL
|
||||||
<query name="PlainFileNode.GetContentUrls">
|
from
|
||||||
<![CDATA[
|
PlainFileNodeImpl pfn
|
||||||
select
|
where pfn.contentURL is not null
|
||||||
pfn.contentURL
|
]]>
|
||||||
from
|
</query>
|
||||||
PlainFileNodeImpl pfn
|
|
||||||
where pfn.contentURL is not null
|
<sql-query name="avm.GetStorePropertiesByKeyPattern">
|
||||||
]]>
|
<return alias="asp" class="AVMStorePropertyImpl"/>
|
||||||
</query>
|
SELECT
|
||||||
|
{asp.*}
|
||||||
<sql-query name="avm.GetStorePropertiesByKeyPattern">
|
FROM
|
||||||
<return alias="asp" class="AVMStorePropertyImpl"/>
|
avm_store_properties asp
|
||||||
SELECT
|
JOIN alf_qname qn ON (qn.id = asp.qname_id)
|
||||||
{asp.*}
|
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
|
||||||
FROM
|
WHERE
|
||||||
avm_store_properties asp
|
ns.uri LIKE :uri AND
|
||||||
JOIN alf_qname qn ON (qn.id = asp.qname_id)
|
qn.local_name LIKE :localName
|
||||||
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
|
</sql-query>
|
||||||
WHERE
|
|
||||||
ns.uri LIKE :uri AND
|
<sql-query name="avm.GetStorePropertiesByStoreAndKeyPattern">
|
||||||
qn.local_name LIKE :localName
|
<return alias="asp" class="AVMStorePropertyImpl"/>
|
||||||
</sql-query>
|
SELECT
|
||||||
|
{asp.*}
|
||||||
<sql-query name="avm.GetStorePropertiesByStoreAndKeyPattern">
|
FROM
|
||||||
<return alias="asp" class="AVMStorePropertyImpl"/>
|
avm_store_properties asp
|
||||||
SELECT
|
JOIN alf_qname qn ON (qn.id = asp.qname_id)
|
||||||
{asp.*}
|
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
|
||||||
FROM
|
WHERE
|
||||||
avm_store_properties asp
|
asp.avm_store_id = :storeId AND
|
||||||
JOIN alf_qname qn ON (qn.id = asp.qname_id)
|
ns.uri LIKE :uri AND
|
||||||
JOIN alf_namespace ns ON (ns.id = qn.ns_id)
|
qn.local_name LIKE :localName
|
||||||
WHERE
|
</sql-query>
|
||||||
asp.avm_store_id = :storeId AND
|
|
||||||
ns.uri LIKE :uri AND
|
<sql-query name="avm.DeleteStorePropertiesByType">
|
||||||
qn.local_name LIKE :localName
|
DELETE
|
||||||
</sql-query>
|
FROM
|
||||||
|
avm_store_properties
|
||||||
<sql-query name="avm.DeleteStorePropertiesByType">
|
WHERE
|
||||||
DELETE
|
avm_store_id = :storeId AND
|
||||||
FROM
|
qname_id = :qnameId
|
||||||
avm_store_properties
|
</sql-query>
|
||||||
WHERE
|
|
||||||
avm_store_id = :storeId AND
|
<sql-query name="avm.DeleteStoreProperties">
|
||||||
qname_id = :qnameId
|
DELETE
|
||||||
</sql-query>
|
FROM
|
||||||
|
avm_store_properties
|
||||||
<sql-query name="avm.DeleteStoreProperties">
|
WHERE
|
||||||
DELETE
|
avm_store_id = :storeId
|
||||||
FROM
|
</sql-query>
|
||||||
avm_store_properties
|
|
||||||
WHERE
|
</hibernate-mapping>
|
||||||
avm_store_id = :storeId
|
|
||||||
</sql-query>
|
|
||||||
|
|
||||||
</hibernate-mapping>
|
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user