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."); } } }