www.rinner.st

the blog/wiki/website/homepage/internetpräsenz of Stefan Rinner

type-properties-talk-2

rist: tag chl@jabber.at: ja grüsse! rist: ich hätt da ein paar hop fragen rist: also mal etwas code: rist: var e = new element();
e.name = req.data.elementName;
e.comment = req.data.elementComment;
this.add(e);
var languages = this.getProjectLanguages();
var t = new translation();
t.language = languages.get(0).language.iso;
t.content = req.data.originalLanguage;
t.editTime = new Date();
e.add(t); chl@jabber.at: die kombination aus wlan und wintergarten is durchaus erbaulich rist: wlna? rist: wlan? rist: in unterlangkampfen? rist: und die type.properties von element: rist: _db = translate
_table = element
_id = ID
_parent = container
_children = collection(translation)
_children.local = ID
_children.foreign = ELEMENT_ID
name = NAME
comment = COMMENT rist: irgendwas funktioniert aber bei der zuordnung der translations an die elements nicht - ich find sie nachher in der collection nicht und in der DB sind alle ELEMENT_IDs 0 chl@jabber.at: wie sehen die type.props von translation aus? rist: _db = translate
_table = translation
_id = ID
_parent = element
content = CONTENT
language = LANGUAGE
edittime = EDITTIME
predecessor = object(translation)
predecessor.local = OLDER_VERSION_ID
predecessor.foreign = ID chl@jabber.at: hmmm, ich kann mal nix offensichtlich falsches erkennen rist: mmm chl@jabber.at: aber gib der translation mal noch ein element-attr dazu chl@jabber.at: also element = object(element) uswusf. rist: ok rist: das geht rist: muss ich in den translation type.props das ELEMENT_ID auch noch irgendwie definierne? rist: was in der art von ELEMENT_ID = object(element) chl@jabber.at: na rist: so ein dreck chl@jabber.at: was denn? rist: ja dass das nit geht chl@jabber.at: ja was - geht's jetzt oder ned? rist: naja ich kann der transaltion noch ein element attribut geben und da das element reinschreiben - aber das nütz doch noch nix für meine 1.m Beziehung - oder? chl@jabber.at: welche 1:m-beziehung? rist: naja jedes element sollt mehrere translations besitzen chl@jabber.at: ja wo is da das problem? chl@jabber.at: die translation hat ja das element-attribute rist: ja sie hat sogar das ELEMENT_ID attribut das in den type.props des elements definert wird - und damit sollt doch alles automatisch gehen, oder? chl@jabber.at: und eine translation wird wohl 1:1 einem element zugeordnet sein chl@jabber.at: so ich geh mal was essen und wünsche inzwsichen viel glück! rist: ja mahlzeit rist: ich geh inzwischen kochen chl@jabber.at: ja gutes gelingen! rist: schon wieder da? chl@jabber.at: ja natürlich! rist: also noch mal zu meinen beziehungen rist: jedes element besitzt mehrere translations chl@jabber.at: ja, das is klar rist: die children eines elements sind seine translations chl@jabber.at: yes rist: also eine 1:m beziehung rist: 1 element - m Übersetzungen chl@jabber.at: ja chl@jabber.at: aus sicht des elements rist: und mittels dieser konstruktioN. rist: _children = collection(translation)
_children.local = ID
_children.foreign = ELEMENT_ID rist: sollt das ja auch gehen - ich mach element.add(translation) und dann is die Übersetzung ein child des Elements und in der DB schriebt der Hop die elterliche element_id ins Feld ELEMNT_ID der Übersetzung rist: macht er aber nit chl@jabber.at: eigentlich sollt das durchaus gehen chl@jabber.at: beschweren's ihnen auf der list! rist: bleibt mir wohl nix anderes übrig chl@jabber.at: oder läuten's den wallnöfer aus der wohnung! rist: na hop is ja nit wie vanilla wo man den developer asu dem bett klingenln kann chl@jabber.at: hehehehe chl@jabber.at: tja! rist: so - hab mal ein mail auf hop-l gessendet chl@jabber.at: das is lobenswert chl@jabber.at: ich hab' auf dem laptop noch ned einmal einen mailer rist: laptop? rist: wlan? chl@jabber.at: ich glaub jetzt isses dann endgültig zeit für imap? rist: ja imap is generell super chl@jabber.at: ?=! chl@jabber.at: laptop! wlan! imap! rist: alles neu? rist: macht der mai? chl@jabber.at: neu! mai! chl@jabber.at: so isses rist: waas für ein laptop? chl@jabber.at: ein schneller rist: welceh farbe? chl@jabber.at: schwarz und silber chl@jabber.at: mit spoiler und fuchsschwanz! rist: marke? chl@jabber.at: ähem ... gericom. hehehe. rist: jessas na! rist: und du glaubst das war eine schlaue investition? chl@jabber.at: naja mal sehen chl@jabber.at: 3 jahre garantie und vollkasko und was weiss ich rist: na dann chl@jabber.at: zudem war der preis heiss und das gerät is schon super rist: und auch gleich noch accesspoint gekauft? chl@jabber.at: na, den haben wir schon gehabt rist: na dann werd ich wohl bald deine MAC in meinem AP eintragen müsen chl@jabber.at: das wär lobenswert und gut rist: ach ja - anderes hop problem rist: ok - ich hab ein project: rist: http://213.129.248.131:8080/translate/projects/2/ rist: geh da mal hin und lösch es (via delete= rist: ) chl@jabber.at: machst einen smarten redirect? rist: ich mach das: rist: url = this._parent.href();
this.remove();
res.redirect(url); rist: wie komm ich zur richtigen URl des parents rist: projects type.rpops rist: _db = translate
_table = projects
_id = ID
_parent = root.projects
name = NAME
comment = COMMENT
languages = collection(projectLanguageAssociation)
languages.local = ID
languages.foreign = PROJECT_ID chl@jabber.at: hmmmmmmm chl@jabber.at: eh eigentlich so chl@jabber.at: der parent eines projects is ja eigentlich immer der root, oder? rist: ja an und für sich schon - d.h. ich könnts in dem fall hardcoden - aber ich möcht den delete.hac für alle prototypes verwenden chl@jabber.at: hast meine geistreiche antwort noch bekommen? rist: welche? chl@jabber.at: [8:36 PM] hmmmm, projects scheint mir kein mountpoint zu sein
[8:36 PM] parent is ja root.projects, und das hat gar keine eigene url in dem sinne rist: na die hab ich nit bekommen rist: und was willst mir damit sagen? chl@jabber.at: dass du das in diesem fall nicht generisch machen kannst chl@jabber.at: ausser du machst aus root.projects einen mountpoint und redirectest von dem aus auf root rist: wird es bei den anderen generisch funktionieren - da die ja beliebig geschachtelt werden können rist: ok bei den anderen scheints zu klappen - dann muss ich wohl für die proects eine eigene variante bauen chl@jabber.at: je nachdem ob's einfache children san - dann isses kein problem chl@jabber.at: naja chl@jabber.at: ich hoffe du überarbeitest dich nicht! rist: nana chl@jabber.at: ansonsten sieht die sache eh schon sehr nett aus! rist: ja und es is a witzig zum entwickeln
  • 20:54 -
rist: ich brauch halt noch diese element-translation gschicht und ein bissi userverwaltung chl@jabber.at: naja das mit den elements geht eh, wenn du das zusätzliche attribut hast, oder? rist: ja ich könnts schon zusammenschustern aber i möcht das schon elegant wenns geht rist: müüst halt einfac die elements mit den translations joinen chl@jabber.at: was heisst da zusammenschustern? chl@jabber.at: schaden tut's eh nicht, wenn du das element auch über die translation ansprechen kannst rist: mm
  • 21:07 -
rist: ok wenn ich die zusätzliche property "element" in den translations einführ was muss icj dann in den type.props von element machen? chl@jabber.at: ja nix rist: wie komm ich von einer instanz eines elements zu seinen übersetzungen? rist: über die children? chl@jabber.at: ja sicher rist: mmmmm rist: also ganz von vorn: rist: ich hab in der translation-table meine spalte namens ELEMENT_ID - reicht das oder brauch ich noch was zusätzliches für das ganze mapping? chl@jabber.at: ich glaube es sollte reichen - tut es aber offensichtlich nicht rist: ich glaub ich wart mal antowrten auf hop-l ab chl@jabber.at: ja mach das chl@jabber.at: welche hop-version verwendest denn? rist: ich glaub schon die aktuellste rist: 1.2.4 irgendwas rist: ich versuch mal den nightly build chl@jabber.at: ich hab jedenfalls in kindern immer ein attribut, das zum parent linkt rist: ja das hilft sicherlich wenn man sich durch bäume rumhanteln muss rist: obowhl den aprent kreig ich doch immer via _parent chl@jabber.at: und dazu _parent = attributName chl@jabber.at: und das funktioniert so wiet auch immer chl@jabber.at: was sagt denn die doc dazu? rist: nix besondersn rist: aber der nightly build bingt grad neue errormeldungen chl@jabber.at: heheh chl@jabber.at: welche denn? rist: Conversion to object unsupported by null
detected at line 71 of function 'getProjectLanguages' in file: 'hopobject/function.js'
called at line 10 of function 'createElement_action' in file: 'project/createElement.hac' rist: mal sehen chl@jabber.at: sieh dar rist: ok - das is nun gefixt - die elemnt gschicht schaut aber no nit besser aus chl@jabber.at: _parent = property1, property2 chl@jabber.at: das sagt die doc chl@jabber.at: was mich dann allerdings wundert is, wieso dass zB root.project als parent kein problem is chl@jabber.at: vielleicht muss es absolut auflösbar sein
  • 21:34 -
rist: wenden wir uns mal dem abenteuer der userverwaltung zu rist: ich nehme an, dafür brauch ich auch eine table chl@jabber.at: paste noch mal die zwei type-props chl@jabber.at: natürlich rist: element props rist: _db = translate
_table = element
_id = ID
_parent = container
_children = collection(translation)
_children.local = ID
_children.foreign = ELEMENT_ID
name = NAME
comment = COMMENT rist: translation props rist: _db = translate
_table = translation
_id = ID
_parent = element
content = CONTENT
language = LANGUAGE
edittime = EDITTIME
predecessor = object(translation)
predecessor.local = OLDER_VERSION_ID
predecessor.foreign = ID rist: und für die zurodungung user-projekte wieder eine zusätlzich tabell wie auch bei der zuordnung projekt-sprachen chl@jabber.at: also hast das mit der element-prop nicht drinnen chl@jabber.at: und mit dem _parent = container funktioniert's? chl@jabber.at: hmmmmm chl@jabber.at: hmmmmmmmmmmmmmmmmm chl@jabber.at: hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm rist: das mit dem parent muesst funktionieren - ich kann auf die elemente ja auch zugreifen
  • 22:30 -
rist: matrix chl@jabber.at: O! was g'scheites? rist: accessability rist: zur kombination von user und proejkten brauch ich ja eine eigene table - kann ich in die auch zusätzliche info reinschrieben und wieder auslesen? rist: also user-table und project-table und eine user-project-table die eben die beiden IDs und noch eine spalte für die privilegs chl@jabber.at: ja sicher rist: mal sehen chl@jabber.at: genau rist: dafür brauch ich dann auch wieder einen eigenen prototype chl@jabber.at: wär durchaus anzuratem rist: _db = translate
_table = user_projects
_id = ID
_parent = root
project = object(project)
project.local = PROJECT_ID
project.foreign = ID
user = object(user)
user.local = USER_ID
user.foreign = ID rist: fehler rist: _db = translate
_table = user_projects
_id = ID
_parent = root
project = object(project)
project.local = PROJECT_ID
project.foreign = ID
user = object(user)
user.local = USER_ID
user.foreign = ID
privileges = PRIVILEGES
  • 22:45 -
chl@jabber.at: sieht wunderbar aus chl@jabber.at: bis auf das _parent = root chl@jabber.at: die children vom root san doch keine user, oder? rist: dann halt nit
  • 22:52 -
rist: habs auf _parent = root.users geämdert - ok? chl@jabber.at: ja sofern es root.users gibt schon rist: also dies ins type.props vom root: rist: users = collection (user)
users.accessname = name chl@jabber.at: mhm, das sollt passen rist: das problem sit jetzt nur dass dies funkltioniert: rist: http://127.0.0.1:8080/translate/users/3/ rist: dies aber nit rist: http://127.0.0.1:8080/translate/users/rist/
  • 23:07 -
chl@jabber.at: hast im users.prop auch _accessname = name? rist: ja rist: du meinst im tpye.props im user-folder - oder? chl@jabber.at: hmmmm chl@jabber.at: ja! rist: ja da hab ichs so chl@jabber.at: argh chl@jabber.at: grossgeschrieben? rist: _db = translate
_table = users
_id = ID
_parent = root.users
_accessname = name
name = NAME
superuser = SUPERUSER
password = PASSWORD
email = EMAIL
privileges = collection(userProjectAssociation) chl@jabber.at: das priviliges is mir etwas suspect chl@jabber.at: und _accessname = NAME glaub ich muss das sein rist: großgeschireben gehts a nit chl@jabber.at: loggst du eigentlich das sql mit, das der hop schreibt? rist: na - wo geht das chl@jabber.at: (logSql = true in irgendeiner der props) chl@jabber.at: server.properties glaub ich rist: http://helma.org/docs/faq/47798/ chl@jabber.at: gut chl@jabber.at: das sollte etwas aufschluss geben rist: trotz logDir = console schriebt er nix in die console chl@jabber.at: neu gestartet auch? rist: moemnt rist: ok jetzt loggt er chl@jabber.at: naja den hop neuzustarten schadet ab und an nicht chl@jabber.at: obwohl er die type.props mittlerweile eigentlich immer brav kapiert rist: [2003/05/18 23:19] translate/users/rist aborted after 1 millis
[2003/05/18 23:19] translate/error aborted after 0 millis
[2003/05/18 23:19] Closing DB connection: org.gjt.mm.mysql.jdbc2.Connection@bcecc0
[2003/05/18 23:19] Exception in Transactor[translate/users/rist]: helma.framework.FrameworkException: Object not found.
chl@jabber.at: herrje herrje chl@jabber.at: das sieht nicht gut aus rist: zurück zum element-translation problem: rist: [2003/05/18 23:21] ### insertNode: INSERT INTO translation ( ID, CONTENT, OLDER_VERSION_ID, LANGUAGE, EDITTIME ) VALUES ( ?, ?, ?, ?, ? )
[2003/05/18 23:21] inserted: Node translation/6 rist: der fügt gar nie was in ELEMENT_ID ein chl@jabber.at: offensichtlich chl@jabber.at: hast da jetzt die element-property endlich drin? rist: ja wenn ich sie geziel setz dann scheints zu gehen rist: [2003/05/18 23:25] ### insertNode: INSERT INTO translation ( ID, CONTENT, OLDER_VERSION_ID, ELEMENT_ID, LANGUAGE, EDITTIME ) VALUES ( ?, ?, ?, ?, ?, ? ) chl@jabber.at: wie gezielt setzen? chl@jabber.at: also element = object(...) ... ? rist: t.element_id = e; chl@jabber.at: ARGH chl@jabber.at: das sieht _sehr_ seltsam aus chl@jabber.at: paste mal deine elem/type.props rist: aber wenn man sie so setzt, dann findet das elemnt die translation nacchher rist: _db = translate
_table = element
_id = ID
_parent = container
_children = collection(translation)
_children.local = ID
_children.foreign = ELEMENT_ID
name = NAME
comment = COMMENT chl@jabber.at: ah - deine trans/type.props hab ich gemeint rist: hop schafft es also beim auslesen die type.props richtig zu interpretiren, nciht aber beim schreiben, da muss man selber die foreign_IDs setzen rist: _db = translate
_table = translation
_id = ID
_parent = element
content = CONTENT
language = LANGUAGE
edittime = EDITTIME
predecessor = object(translation)
predecessor.local = OLDER_VERSION_ID
predecessor.foreign = ID
element_id = ELEMENT_ID chl@jabber.at: du bist eher abenteuerlich unterwegs rist: inwiefern? chl@jabber.at: mach halt mal das element = object(element), element.local = ELEMENT_ID, element.foreign = ID chl@jabber.at: naja direkt ids zu setzen konterkariert das ganze o/r-mapping vom hop rist: wohin mit element = .... chl@jabber.at: naja in trans/type.props rist: das element_id = ELEMENT_ID dafür wieder raus? chl@jabber.at: das kannst/solltest rausnehmen rist: und auch das künstliceh setzen im .hac - oder? chl@jabber.at: (schau mal in die db, ich glaub kaum dass die element_id da drin stimmt) chl@jabber.at: ja rist: es scheitn zu funtkioniern!!!! chl@jabber.at: ROFL rist: was alchst? chl@jabber.at: [6:24 PM] aber gib der translation mal noch ein element-attr dazu
[6:24 PM] also element = object(element) uswusf. rist: naja - das war vor 5 stunden chl@jabber.at: eben chl@jabber.at: eclipse downloaden über isdn is eher mühsam rist: oje chl@jabber.at: das dauert auch schon fast fünf stunden rist: hab die auch mal kurz installiert rist: ok - aber die sache mit dem element - war ich eifnach deppert oder ist das ein fehler vom hop? chl@jabber.at: naja ich hab' gewusst dass es bei mir so geht, nachdem ich es immer so mache chl@jabber.at: es is ein bissl deppert, weil nirgendwo genau definiert is, was auf der rechten seite von _parent = eigentlich stehen darf chl@jabber.at: (das "property" is da imo ziemlich missverständlich) rist: naja aber mit _parent hatte das doch wenig zu tun? chl@jabber.at: das glaubst du! rist: oje chl@jabber.at: _parent = property chl@jabber.at: also _parent = element, the property of translation und NICHT element, the proto rist: aso!! rist: ok - also das element = object(element)
element.local = ELEMENT_ID
element.foreign = ID definiert den join und dann sagt man dass der parent des objekts über den join gefunden wird chl@jabber.at: so isses chl@jabber.at: hmmmm, join über den protonamen kann eigentlich gar nicht gehen chl@jabber.at: frag mich nur, wieso dann so sachen wie _parent = root.blah gehen - wie die auflösung da genau funktioniert chl@jabber.at: naja man könnte sich ja mal den source ansehen
  • 23:50 -
chl@jabber.at: auf jeden fall is helma.org mit folders schon _viel_ besser rist: mein mail an hop-l: rist: - so - "_parent = element" doesn't refer to the prototype "element" but to the "translation"'s property "element" which joins the "translation" and "element" table in the db.
I somehow expected it to work without this additional explicit JOIN and just with the definitions in the "element"'s type.properties (_children = collection(translation), _children.local = ID, _children.foreign = ELEMENT_ID).
Without the additional property in "translation"''s type.props HOP wasn't able to create a connection between "element" and "translation" (write the "element"'s ID into "ELEMENT_ID" of the "translation" table) but was able to recognize it, when reading the data out of the DB (after i set ELEMENT_ID manually to the "element"'s ID) - a little bit weired.
chl@jabber.at: perfetto! chl@jabber.at: das sollte für klarheit sorgen rist: das hoff ich rist: aber jetzt geh ich schlafen chl@jabber.at: keine schlechte idee chl@jabber.at: nun gut! ich wünsche eine gar erquickliche nachtruhe mit bernd dem brot und konsorten rist: ja danke rist: wiederschaun chl@jabber.at: ciao! rist: und mir is aufgefallen, dass in wenigen tagen blogtalk ist chl@jabber.at: ja allerdings! chl@jabber.at: was mich ein quäntchen stresst rist: soll ich schon die matratze herrichten? chl@jabber.at: na noch nicht rist: aber sie freihalten? chl@jabber.at: das wär höchst wunderbar! rist: und deine MAC in den AP füttern rist: na dann bis dann