From 254ee6f47eebfc00462c10756a92066e82cc1a96 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 21 Jun 2011 15:46:02 +0200 Subject: Initial commit --- source/com/c2kernel/lookup/NextKeyManager.java | 72 ++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 source/com/c2kernel/lookup/NextKeyManager.java (limited to 'source/com/c2kernel/lookup/NextKeyManager.java') diff --git a/source/com/c2kernel/lookup/NextKeyManager.java b/source/com/c2kernel/lookup/NextKeyManager.java new file mode 100755 index 0000000..04581c0 --- /dev/null +++ b/source/com/c2kernel/lookup/NextKeyManager.java @@ -0,0 +1,72 @@ +package com.c2kernel.lookup; + +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.novell.ldap.LDAPEntry; + +/************************************************************************** + * + * $Revision: 1.2 $ + * $Date: 2005/04/27 13:47:24 $ + * + * Copyright (C) 2003 CERN - European Organization for Nuclear Research + * All rights reserved. + **************************************************************************/ + +// public static final String codeRevision = "$Revision: 1.2 $ $Date: 2005/04/27 13:47:24 $ $Author: abranson $"; +public class NextKeyManager { + + LDAPLookup ldap; + String lastKeyPath; + + public NextKeyManager(LDAPLookup ldap, String lastKeyPath) { + super(); + this.ldap = ldap; + this.lastKeyPath = lastKeyPath; + } + + public synchronized EntityPath generateNextEntityKey() + throws ObjectCannotBeUpdated, ObjectNotFoundException + { + LDAPEntry lastKeyEntry = LDAPLookupUtils.getEntry(ldap.getConnection(),lastKeyPath); + EntityPath lastKey = getLastEntityPath(); + + try { + lastKey.setSysKey(lastKey.getSysKey()+1); + } catch (InvalidEntityPathException ex) { + throw new ObjectCannotBeUpdated("Invalid syskey "+(lastKey.getSysKey()+1)+". Maybe centre is full."); + } + //set the last key + writeLastEntityKey(lastKey.getSysKey()); + + return lastKey; + } + + public synchronized AgentPath generateNextAgentKey() + throws ObjectCannotBeUpdated, ObjectNotFoundException { + EntityPath newEntity = generateNextEntityKey(); + return new AgentPath(newEntity); + } + + public void writeLastEntityKey(int sysKey) throws ObjectCannotBeUpdated, ObjectNotFoundException { + LDAPEntry lastKeyEntry = LDAPLookupUtils.getEntry(ldap.getConnection(),lastKeyPath); + LDAPLookupUtils.setAttributeValue(ldap.getConnection(), lastKeyEntry,"intsyskey",Integer.toString(sysKey)); + } + + public EntityPath getLastEntityPath() throws ObjectNotFoundException + { + LDAPEntry lastKeyEntry = LDAPLookupUtils.getEntry(ldap.getConnection(),lastKeyPath); + String lastKey = LDAPLookupUtils.getFirstAttributeValue(lastKeyEntry,"intsyskey"); + try { + int sysKey = Integer.parseInt(lastKey); + EntityPath sysPath = new EntityPath(sysKey); + return sysPath; + } catch (InvalidEntityPathException ex) { + throw new ObjectNotFoundException("Invalid syskey. Maybe centre is full."); + } catch (NumberFormatException ex) { + throw new ObjectNotFoundException("Invalid syskey in lastkey."); + } + + } + +} -- cgit v1.2.3