summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/lookup/LegacyLDAPPropertyManager.java
blob: 62653fbb89245d6fedfbc7e8f07778303d3f888e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.c2kernel.lookup;

import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.property.Property;
import com.c2kernel.utils.Logger;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPDN;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;

public class LegacyLDAPPropertyManager extends LDAPPropertyManager {

	public LegacyLDAPPropertyManager(LDAPLookup ldap) {
		super(ldap);
	}
	
	public void deleteProperty(EntityPath thisEntity, String name) throws ObjectNotFoundException, ObjectCannotBeUpdated {
        try {
            LDAPLookupUtils.delete(ldap.getConnection(), "cn="+name+","+thisEntity.getFullDN());
        } catch (LDAPException ex) {
            Logger.error("Error deleting prop "+name+" from "+thisEntity.getSysKey());
            Logger.error(ex);
        }
	}

	public String[] getPropertyNames(EntityPath thisEntity) throws ObjectNotFoundException {
        String props[]= LDAPLookupUtils.getChildrenDNs(ldap.getConnection(), thisEntity.getFullDN(), "objectclass=cristalproperty");
        String names[] = new String[props.length];
        for (int i=0; i<props.length;i++)
            names[i] = new String(LDAPDN.explodeDN(props[i],true)[0]);
        return names;
	}

	public String getPropertyValue(EntityPath thisEntity, String name) throws ObjectNotFoundException {
        LDAPEntry anEntry = LDAPLookupUtils.getEntry(ldap.getConnection(),"cn="+name+","+thisEntity.getFullDN());
        if (anEntry==null)
            throw new ObjectNotFoundException("LDAPLookup: Property "+name+" not found in "+thisEntity.getSysKey(), "");
        return LDAPLookupUtils.getFirstAttributeValue(anEntry,"propval");
	}

	public boolean hasProperties(EntityPath thisEntity) throws ObjectNotFoundException {
		return LDAPLookupUtils.hasChildren(ldap.getConnection(), thisEntity.getFullDN(), "objectclass=cristalproperty" );
	}

	public void setProperty(EntityPath thisEntity, Property prop) throws ObjectNotFoundException, ObjectCannotBeUpdated {
        try {
            LDAPEntry anEntry = LDAPLookupUtils.getEntry(ldap.getConnection(),"cn="+prop.getName()+","+thisEntity.getFullDN());
        	String currentVal = LDAPLookupUtils.getFirstAttributeValue(anEntry,"propval");
        	if (currentVal == null || !currentVal.equals(prop.getValue()) )
            //change the propvalue if the prop.getValue() is not the same value in LDAP
           	LDAPLookupUtils.setAttributeValue(ldap.getConnection(), anEntry,"propval",prop.getValue());

		} catch (ObjectNotFoundException ex) {
	        LDAPAttributeSet attrSet = new LDAPAttributeSet();
	        attrSet.add(new LDAPAttribute("objectclass","cristalproperty"));
	        attrSet.add(new LDAPAttribute("cn",prop.getName()));
	        if (prop.getValue()!=null && prop.getValue().length()!=0)
	        	attrSet.add(new LDAPAttribute("propval",prop.getValue()));
            LDAPEntry newEntry = new LDAPEntry("cn="+prop.getName()+","+thisEntity.getFullDN(),attrSet);
            try {
				LDAPLookupUtils.addEntry(ldap.getConnection(),newEntry);
			} catch (Exception e) {
				Logger.error(e);
				throw new ObjectCannotBeUpdated(e.getMessage(), "");
			} 
        }
	}
}