designed to minimize sql-code in implements
call-backs are used in insertInto( Vector ) and Vector getAll()
methods to construct sql statements
simple naming-convention to facilitate mixed data-types of fields
supports the use of 1 key column
contents of table are loaded and cached
can only add node if leaves is empty (or this is root)
after first call to addNode, this is a branch, and adding persons is no longer possible
:error: cannot add node to group
can only add person if nodelist is empty (or root)
if this method is called 'this' becomes a group, and adding nodes is no longer possible
person is added to 'this' and to root (if 'this' is not root)
:error: cannot add person to branch
voeg een user toe en werk de indexen bij;
voeg altijd toe aan allUsers en ndsUsers (user heeft altijd een name);
voeg toe aan keyUsers als key niet null is en niet gelijk aan de lege string
:error: nds-user met ongeldige container als container niet bekend is in containerfactory
:error: null user aangeboden
controleer kolomnamen in achtereenvolgens Person, INames en NDSUser;
bijbehorende methoden worden opgeslagen in 'methods'
de laatste overschrijft eventueel overlappende namen ('key' en 'lastname' mn).
zoek users waar geen persoon bij is gevonden (wordt na constructie aangeroepen in init() na connectPTreeToNDS())
zorg er voor dat alleen users met een key in delete terecht komen
doe evt (boolean CugApp.updateLookALikes) een vergelijking met create en hevel lookalikes over naar update;
de groep ndsupdate met status 'disabled': bestaande ndsusers die niet rechtstreeks aan een persoon gekoppeld
kunnen worden; stel dat ze gewijzigd worden zoals hier voorgesteld, dan worden ze gekoppeld aan
de persoon met personid; je geeft de dn ahw aan de persoon
koppel person aan nds-user en voeg toe aan de lijst van reguliere users;
controleer of person-id overeenkomt met user-key en of param cx overeenkomt met context van user
als dit niet het geval is, koppel de persoon aan de user, maar voeg toe aan de lijst van update users
doorloop PTree
neem groepNaam
als groepNaam sleutel is in groupContainerMap
neem personen onder de PTree 'groepNaam'
is er een nds-user met hetzelfde nummer ?
zoek juiste personen bij users in een nds-map;
retourneer een NDSMap met de nds-users die te koppelen zijn aan PTree
wordt gebruikt als de nds-users in de n-tabellen als uitgangspunt dienen
standaard cugapp; gebruik om rapporten te draaien met gegevens uit de n-tabellen,
na de laatste -update en evt handmatige wijzigingen
initialiseer cugapp create/update vanaf n-tabellen;
gebruik standaard ptree;
creëer een ndsmaprapport op basis van classname en printwriter;
classname moet een subclass van SimpleNDSMapReport zijn en een constructor hebben die 1 printwriter ontvangt;
hier worden door novell gebruikte attribuutnamen beschikbaar gemaakt
deze worden gebruikt door cug.report.NgwImportCfg en cug.report.NgwImportRapport om een correcte header te maken
in cug.CreateParams worden de namen aangepast zodat ze ook geschikte veldnamen zijn voor een tabel
noodzakelijke waarden voor create krijgen hier een default
alle create worden aangemaakt met dezelfde cug_create params
cug_idPattern = "G+I+L+"
cug_passwordLen = "5"
cug_idMaxLen = "12"
alle novell createparam constants krijgen een standaard waarde ( '__' )
maak een nieuwe user in context aan voor person en voeg die toe aan de create-lijst
verplaats de gebruiker naar cx als de gebruiker al in de create-lijst voorkomt,
doe dit echter alleen als de param cx langer is dan de cx die de gebruiker al heeft;
'langer' wordt hier dus geinterpreteerd als 'preciezer'; bv 'BE.EDU.HSBOS' is preciezer dan 'EDU.HSBOS'
doet niets als cx ongeldig is (wordt getest via container-factory)
configuratie mbhv 1 java.util.Properties; deze class garandeerd dat benodigde waarden altijd beschikbaar zijn
zie bestand 'cugprogram.ini' in de programma directory
default waarden
dsnTarget = CUG
mySql = true
dsnImport = CUGImport
outputDir = user.home
cugOrgClass = cug.ptree.CugOrgImpl
createProps = createparams.properties
uimportProps = uimportparams.properties
+ (niet verplicht) boolean 'connectByUserID' en 'updateLookALikes'
add entry with this id-factory key and given object
Object could be instance of IDObject; in which case getID() is used for key; otherwise toString() is used;
voeg standaard waarden in; stel defaults in voor alle CreateParamConstants;
vertaal CreateParamConstants in gemakkelijke property-names om te kunnen laden van een propertiesfile
(dit is afhankelijk van util.Util.extractLetters)
de defaults dienen om in rapporten via CreateParams string-waarden te kunnen krijgen voor alle CreateParamConstants;
de defaults beginnen en eindigen altijd met een underscore
(in CugParams wordt aangegeven welke properties-file bij deze configuratie hoort)
een lookalike is een NDSUser met bijna dezelfde naam (in dezelfde container)
geef de users met een name die begint met dezelfde letters als die van param;
het is mogelijk het criterium 'in dezelfde container' te laten vallen door aan param 'strict'
de waarde 'false' toe te kennen;
(methode is duur; per nds-user in allUsers mogelijk 3 string-vergelijkingen)
:debug: lookalike gevonden
:debug: lookalike gevonden (strict)
:info: lookalike in andere container
alle users in 'regulier, 'update' en 'create'; alle users met person bekend; bestaande en niet-bestaande
alle person hebben hier dus een user; gebruik deze als je een ptree wilt doorlopen.
hulp functie om via een naam een printwriter te krijgen op output-dir
kan ook relatief zijn: 'create/rapport.csv';
filenotfound wordt afgevangen, geeft dan een printwriter naar System.out
hulp functie om via een naam een printwriter te krijgen op output-dir
kan ook relatief zijn: 'create/rapport.csv';
filenotfound wordt afgevangen, geeft dan een printwriter naar System.out
selecteer die gebruikers in een zekere nds-map, die behoren tot een zekere ptree
gaat met een iterator over nds-map; gebruik als nds-map kleiner is dan ptree
selecteer die gebruikers in een zekere nds-map, die behoren tot een zekere ptree
gaat met een iterator over ptree; gebruik als ptree kleiner is dan nds-map (zelden)
mapping van groepnaam naar containernaam
middel om via de naam van een groep waar een persoon in thuishoort,
de container van de bijbehorende nds-user te vinden
collection of string id's; all keys are lowerCase ascii7;
createUniqueID() returns a string which is added to this collection
length of keys can be limited by setMaxLength()
pattern to create ID;
createID pseudo grammar
createID = select-letter*
select-letter = letter | letter '+' | letter '*'
letter = 'F' | 'I' | 'L'
'+' is used to extract all first-letters; eg 'john-ross' -> 'jr'
'*' is used to extract all letters
single letter is used to extract 1 letter
default 'F*I+L*'
lees de ndsCreate en ndsUpdate in vanaf de n-tabellen, gebruik alleen die gebruikers die bij deze ptree horen;
ndsUsers en ndsDelete wordt gevuld in setPTree(); ndsCreate en ndsUpdate vanaf de de resp. tabellen;
users die ook in update voorkomen worden verwijderd uit delete
de n-tabellen kunnen nabewerkt zijn, waardoor de relatie met ndsUsers onnauwkeurig kan worden
??
voeg 1 NDSUser in; override super; 'extra' veld container wordt hier iets anders gebruikt
voor nds-user met NDSUser.UNKNOWN wordt de Person.connectedObject geinterpreteerd als containernaam
om te ondersteunen dat nds-user verplaatst kan worden
insert 1 rec using PreparedStatement, call-back for insertInto( Vector )
has to be implemented if user of the table needs to call public insertInto( Vector )
does nothing by default
installeert de toepassing; dwz bereid de jdbc-omgeving voor
creeert de ptree tabellen en de nds tabellen op dsnTarget
default waarden voor SysGroepContainer uit bestand 'install_initgroepcontainer.properties'
main: [-install] | [-ndsimport] | [-import] [-update] [-clear] | [-test]
instellingen uit cugprogram.ini worden geladen
optie -install: richt database in op 'dsnTarget';
optie -ndsimport: doe een update van de ndsgegevens in 'target';
optie -import: importeer persoonsgegevens;
optie -update: doe een update van de tabellen NCREATE, NUPDATE, NDELETE in 'target';
optie -clear: wis de inhoud van de tabellen NCREATE, NUPDATE, NDELETE in 'target';
okt 2001 - feb 2002
assemble legal ID-string from 3 name parts (last name, first name, infix name)
verwerking van het bekende 'van de' probleem ( lang=NL )
<>infix between first and last name is common in dutch spelling folklore.
create Names2ID based on full (formatted) name
if param contains ',' lastname is part of fname before comma;
otherwise firstname is considered part up to first space.
voorstelling van een novell container in maildomein met bijbehorende postoffice
alle waarden worden als string opgeslagen, wordt gebruikt om NDSUsers te markeren (FlyWeight)
Abstract Factory voor NDSContainers; tevens Factory Method
zorgt er voor dat er
a) verschillende soorten containers geimplementeerd kunnen worden
b) steeds maar 1 instantie is van elke container met bepaalde dn
geindexeerde blik op NDS; hier wordt een selectie van de beschikbare NDSContainers gekoppeld aan een selectie NDSUsers
index NDSUsers op objectname, sleutelwaarde
indexeer NDSContainers op dn
met build vul je een nds-map met nds-users, er worden verwijzingen naar de bijbehorende containers aangemaakt,
en de indexen worden aangemaakt.
update lijst; nds-user met persoon bekend
van de nds-user klopt of het nummer niet of de context; in dit laatste geval wordt de status op UNKNOWN gezet
users afkomstig uit 'update' zijn al geupdate in het geheugen,
maw stemmen niet 1 op 1 overeen met de gegevens in de nds
parses 1 string containing a formatted name;
strings after last comma are added to first name
all strings starting with uppercase letters are added to first or lastname or initials
words starting with lowercase letters or apostrophe are added to infix
only words with uppercase letters and periods are added to initials
:info: verwijderen niet consequent als user niet voorkomt in names of keys index
:info: kan user niet verwijderen als hij niet in all zit
:error: poging null user te vewijderen
print de inhoud van een nds-map met kengetallen: aantal users; aantal verschillende namen;
aantal verschillende sleutels; print per container een beschrijvende regel
print per container ook regels voor alle users als printUsers true is;
print anders alleen het aantal users in de nds-container
minimaal rapport voor nds-user; werkt alleen als persoon gekoppeld is
gaat er van uit dat nds-user een mail-adres heeft gelijk aan zijn userid
wordt waarschijnlijk opnieuw geimplementeerd in sub-class
gebruik wel 'writeRec()' ipv 'TxtReport.writeLine()' om ook rol en availability toe te voegen
assemble 1 Object based on 1 ResultSet item
has to be implemented if client needs to use public Vector get( String sqlStatement )
returns null if not overridden in subclass
stel in welke class gebruikt wordt als CugOrg
default 'cug.CugOrgImpl'; blijft onveranderd als
a) Class.forName() niet lukt; b) geen instantie gemaakt kan worden; c) cast naar CugOrg niet lukt
stel in welke class gebruikt wordt om NDSContainers aan te maken in createNDSContainer()
default 'cug.novell.NDSContainer'; blijft onveranderd als
a) Class.forName() niet lukt; b) geen instantie gemaakt kan worden; c) cast naar NDSContainer niet lukt
stel util.Name2ID_NL in; sjabloon; id's in gebruik worden ingelezen vanuit NDSEXPORT en NCREATE
onderdeel van setupNDSData()
standaardlengte wachtwoord: 20 (indicatie dat createparams niet goed geladen zijn)
build sql statement
create table; all fields VarChar( <defaultFieldLenght> )
for fieldnames ending in 'DATE' a Date field is created
for fieldnames ending in '_INT', a (MSJet) Long field is created
vertaal waarden bij sleutels in index naar de oorspronkelijke novellnaam; bv
'PasswordAllowChange' --> 'Password Allow Change' etc
; maw maak opvraagbaar via novell-naam
Attribute and Control File Help
IMPORT CONTROL
CREATE HOME DIRECTORY=N
DELETE MAILBOX DIRS=N
DELETE PROPERTY=
HOME DIRECTORY PATH=
HOME DIRECTORY VOLUME=
IMPORT MODE=B
MAXIMUM DIRECTORY RETRIES=5
NAME CONTEXT="CORP.NYC.EMA"
QUOTE="
REPLACE VALUE=N
SEPARATOR=,
USER TEMPLATE=N
update person vwb de userid adhv nds-user waar person aan gekoppeld is;
doe een regel voor regel update in de tabel person;
(of sla over door CugApp.skipUpdateUserID true te maken)