From 6aa1f44575a48bdc633fdf6a3274fd6a1a4065b9 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 12 Jun 2014 19:49:01 +0200 Subject: Initial migration out of cristal-kernel --- .../c2kernel/lookup/ldap/LDAPNextKeyManager.java | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/main/java/com/c2kernel/lookup/ldap/LDAPNextKeyManager.java (limited to 'src/main/java/com/c2kernel/lookup/ldap/LDAPNextKeyManager.java') diff --git a/src/main/java/com/c2kernel/lookup/ldap/LDAPNextKeyManager.java b/src/main/java/com/c2kernel/lookup/ldap/LDAPNextKeyManager.java new file mode 100644 index 0000000..48f938e --- /dev/null +++ b/src/main/java/com/c2kernel/lookup/ldap/LDAPNextKeyManager.java @@ -0,0 +1,97 @@ +package com.c2kernel.lookup.ldap; + +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.persistency.ClusterStorageException; +import com.c2kernel.persistency.NextKeyManager; +import com.c2kernel.process.Gateway; +import com.c2kernel.process.auth.Authenticator; +import com.c2kernel.utils.Logger; +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 LDAPNextKeyManager implements NextKeyManager { + + LDAPAuthManager ldap; + String lastKeyPath; + + public LDAPNextKeyManager() { + super(); + LDAPProperties props = new LDAPProperties(Gateway.getProperties()); + this.lastKeyPath = "cn=last,cn=entity,"+props.mLocalPath; + } + + public void open(Authenticator auth) { + this.ldap = (LDAPAuthManager)auth; + } + + @Override + public synchronized ItemPath generateNextEntityKey() + throws ObjectCannotBeUpdated, ObjectNotFoundException + { + ItemPath lastKey = getLastEntityPath(); + + try { + lastKey.setSysKey(lastKey.getSysKey()+1); + } catch (InvalidItemPathException ex) { + throw new ObjectCannotBeUpdated("Invalid syskey "+(lastKey.getSysKey()+1)+". Maybe centre is full."); + } + //test that storage is empty for that key + try { + if (Gateway.getStorage().getClusterContents(lastKey.getSysKey(), "").length > 0) + throw new ObjectCannotBeUpdated("NextKeyManager: Storage already contains data for syskey "+lastKey.getSysKey()+ + ". Storage is out of sync with nextkey. Please contact an administrator", ""); + } catch (ClusterStorageException e) { + Logger.error(e); + throw new ObjectCannotBeUpdated("Could not check storage for prior data for the next generated systemKey: "+e.getMessage()); + } + + //set the last key + writeLastEntityKey(lastKey.getSysKey()); + + return lastKey; + } + + @Override + public synchronized AgentPath generateNextAgentKey() + throws ObjectCannotBeUpdated, ObjectNotFoundException { + ItemPath newEntity = generateNextEntityKey(); + return new AgentPath(newEntity); + } + + @Override + public void writeLastEntityKey(int sysKey) throws ObjectCannotBeUpdated, ObjectNotFoundException { + LDAPEntry lastKeyEntry = LDAPLookupUtils.getEntry(ldap.getAuthObject(),lastKeyPath); + LDAPLookupUtils.setAttributeValue(ldap.getAuthObject(), lastKeyEntry,"intsyskey",Integer.toString(sysKey)); + } + + @Override + public ItemPath getLastEntityPath() throws ObjectNotFoundException + { + LDAPEntry lastKeyEntry = LDAPLookupUtils.getEntry(ldap.getAuthObject(),lastKeyPath); + String lastKey = LDAPLookupUtils.getFirstAttributeValue(lastKeyEntry,"intsyskey"); + try { + int sysKey = Integer.parseInt(lastKey); + ItemPath sysPath = new ItemPath(sysKey); + return sysPath; + } catch (InvalidItemPathException ex) { + throw new ObjectNotFoundException("Invalid syskey. Maybe centre is full."); + } catch (NumberFormatException ex) { + throw new ObjectNotFoundException("Invalid syskey in lastkey."); + } + + } + +} -- cgit v1.2.3