[isidorus-cvs] r34 - trunk/src/ajax/javascripts
Lukas Giessmann
lgiessmann at common-lisp.net
Sun Jun 7 18:29:18 UTC 2009
Author: lgiessmann
Date: Sun Jun 7 14:29:14 2009
New Revision: 34
Log:
added the otherroleplayer-constraint and a player-type-change-handler to the ajax-client; currently there is missing a remove- and add- handler for roles and the possibility to set the new created topic as a roleplyer
Modified:
trunk/src/ajax/javascripts/datamodel.js
Modified: trunk/src/ajax/javascripts/datamodel.js
==============================================================================
--- trunk/src/ajax/javascripts/datamodel.js (original)
+++ trunk/src/ajax/javascripts/datamodel.js Sun Jun 7 14:29:14 2009
@@ -1037,7 +1037,7 @@
"value" : this.__value__.value};
}
return {"itemIdentities" : this.__itemIdentity__.getContent(true, true),
- "type" : [this.__type__.__frames__[0].getContent()],
+ "type" : new Array(this.__type__.__frames__[0].getContent()),
"scopes" : this.__scope__.getContent(),
"resourceRef" : resourceRef,
"resourceData" : resourceData};
@@ -1212,19 +1212,6 @@
_constraints = (constraints ? constraints.topicOccurrenceConstraints : null);
this.__occurrence__ = new OccurrenceContainerC(_contents, _constraints);
this.__table__.insert({"bottom" : newRow(CLASSES.occurrenceContainer(), "Occurrences", this.__occurrence__.getFrame())});
-
-
-
-
-
- var btn = new Element("input", {"value" : "topic.toJSON()", "type" : "button"});
- function addBtnHandler(myself){
- btn.observe("click", function(event){
- alert(myself.toJSON());
- })
- }
- addBtnHandler(this);
- this.__frame__.insert({"bottom" : btn});
}catch(err){
alert("From TopciC(): " + err);
}
@@ -1336,7 +1323,6 @@
}
if(j !== this.__rolePlayers__.length){
this.__rolePlayers__[j] = player;
- alert("test");
break;
}
}
@@ -1421,9 +1407,7 @@
this.__frame__.writeAttribute({"class" : CLASSES.roleContainer()});
this.__arContainer__ = new Object();
this.__orContainer__ = new Object();
-
/*
-
*associationrole-constraints: A association role constraint defines how many and of what type the roles in associations of given a type must be.
*min: card-min indicating the minimum number of times the role can appear in the association
*max: card-max indicating the maximum number of times the role can appear in the association
@@ -1437,22 +1421,7 @@
player type in an association.
*min: card-min indicating the minimum number of times the other role can occur
*max: card-max indicating the maximum number of times the other role can occur
-
-
-algorithmus:
-OK *alle rollen aus associationroleconstraints erstellen in einem __arContainer__
-OK *überprüfen, ob die kardinalitäten der roleplayer mit den kardinalitäten der associationrole übereinstimmen
-OK *card-min rp < card-min ar -> fehler
-OK *card-max rp > card-max ar -> fehler
-OK *card-min rp > card-max ar -> fehler
-OK *card-max rp < card-min ar -> fehler
-OK *zu allen gefundenen roles vorhandene roleplayer-constraints suchen
-OK *alle roleplayer sammeln und an eine leere option anhängen, anschließend in RoleC anhängen
-*__orContainer__ für otherrole-constraints initialisieren
-*handler hinzufügen
*/
-
-
try{
if((!contents || contents.length === 0) && associationRoleConstraints){
this.resetValues(associationRoleConstraints, rolePlayerConstraints, otherRoleConstraints);
@@ -1489,7 +1458,6 @@
this.__orContainer__ = new Object();
}
-
// --- creates all roles from existing associationroleconstraints and roleplayerConstraints
// TODO: insert existing contents to the corresponding constraints
for(var i = 0; this.__associationRoleConstraints__ && i !== this.__associationRoleConstraints__.length; ++i){
@@ -1497,6 +1465,10 @@
var foundRpcs = getRolePlayerConstraintsForRole(arc.roleType, this.__rolePlayerConstraints__);
this.__makeRolesFromARC__(arc, foundRpcs);
}
+ // --- creates roles from otherrole-constraints
+ for(var i = 0; i !== this.__arContainer__.__frames__.length; ++i){
+ this.__makeRolesFromORC__(this.__arContainer__.__frames__[i].getType(), this.__arContainer__.__frames__[i].getPlayer());
+ }
},
"__makeRolesFromARC__" : function(associationRoleConstraint, rolePlayerConstraints){
if(!associationRoleConstraint || !rolePlayerConstraints || rolePlayerConstraints.length === 0) return;
@@ -1522,7 +1494,7 @@
var _players = cleanedPlayers;
_players.unshift(selectedPlayer);
var role = new RoleC(null, roleType, _players, this.__arContainer__, removeFunction, addFunction);
- this.__setRoleChangePlayerHandler__(role);
+ this.__setRoleChangePlayerHandler__(role, this.__arContainer__.__frames__, rolePlayerConstraints, null);
this.__error__.insert({"before" : role.getFrame()});
++rolesCreated;
}
@@ -1552,7 +1524,7 @@
}
var role = new RoleC(null, roleType, cleanedPlayers, this.__arContainer__, removeFunction, addFunction);
- this.__setRoleChangePlayerHandler__(role);
+ this.__setRoleChangePlayerHandler__(role, this.__arContainer__.__frames__, rolePlayerConstraints, null);
this.__error__.insert({"before" : role.getFrame()});
++rolesCreated;
++currentlyCreated;
@@ -1562,7 +1534,38 @@
}
},
"__makeRolesFromORC__" : function(roleType, player){
+ var orpcs = getOtherRoleConstraintsForRole(new Array(roleType), new Array(player), this.__otherRoleConstraints__);
+ var removeFunction = function(event){ alert("removeFunction"); };
+ var addFunction = function(event){ alert("addFunction"); };
+ for(var i = 0; i !== orpcs.length; ++i){
+ var cPlayers = orpcs[i].players;
+ var cRoleType = orpcs[i].roleType;
+ var cOtherPlayers = orpcs[i].otherPlayers;
+ var cOtherRoleType = orpcs[i].otherRoleType;
+ var cMin = parseInt(orpcs[i].cardMin);
+ if(!cOtherPlayers || cOtherPlayers.length < cMin) throw "from __makeRolesFromORC__(): not enough players(=" + cOtherPlayers.length + ") for roletype + \"" + cOtherRoleType.flatten()[0] + "\"!";
+ var existingRoles = this.getExistingRoles(cOtherRoleType, cOtherPlayers, this.__orContainer__.__frames__);
+ for(var j = 0; j < cMin - existingRoles.length; ++j){
+ // --- removes all players that are already selected from the
+ // --- current players list
+ var cleanedPlayers = new Array();
+ for(var k = 0; k !== cOtherPlayers.length; ++k){
+ if(this.getExistingRoles(cOtherRoleType, cOtherPlayers[k], this.__orContainer__.__frames__).length === 0){
+ cleanedPlayers.push(cOtherPlayers[k]);
+ }
+ }
+ // --- removes the player that will be selected in this role
+ // --- from all existing roles
+ for(var j = 0; this.__orContainer__.__frames__ && j !== this.__orContainer__.__frames__.length; ++j){
+ this.__orContainer__.__frames__[j].removePlayer(cleanedPlayers[0]);
+ }
+
+ var role = new RoleC(null, cOtherRoleType, cleanedPlayers, this.__orContainer__, removeFunction, addFunction);
+ this.__setRoleChangePlayerHandler__(role, this.__orContainer__.__frames__, null, orpcs);
+ this.__error__.insert({"before" : role.getFrame()});
+ }
+ }
},
"getExistingRoles" : function(roleType, players, roles){
var rolesFound = new Array();
@@ -1576,19 +1579,90 @@
return rolesFound;
},
- "__setRoleChangePlayerHandler__" : function(role){
+ "__setRoleChangePlayerHandler__" : function(role, roleContainer, arConstraints, orConstraints){
+ var constraints = null;
+ if(arConstraints && arConstraints.length !== 0) constraints = arConstraints;
+ else if(orConstraints && orConstraints.length !== 0) constraints = orConstraints;
+ else if(arConstraints && orConstraints && arConstraints.length !== 0 && orConstraints.length !== 0) throw "From __setRoleChangePlayerHandler__(): one of the parameters arConstraints or orConstraints must be set to null";
+ role.__lastPlayer__ = new Array(role.getPlayer());
var select = role.__table__.select("tr." + CLASSES.playerFrame())[0].select("td." + CLASSES.content())[0].select("select")[0];
- select.observe("change", function(event){ alert("changed!"); });
-
+ function setEvent(myself){
+ select.observe("change", function(event){
+ role.__lastPlayer__.push(role.getPlayer());
+ if(role.__lastPlayer__.length > 2) role.__lastPlayer__.shift();
+ if(!roleContainer || roleContainer.length < 2 || ! constraints || constraints.length === 0) return;
+ role.getLastPlayer = function(){
+ return role.__lastPlayer__[role.__lastPlayer__.length - 2];
+ }
+ // --- selects the players which have to be removed or added to
+ // --- the found roles
+ var playerToAdd = new Array(role.getLastPlayer());
+ var playerToRemove = new Array(role.getPlayer());
+
+ // --- collects all roles depending on the same constraint as the passed role
+ var existingRoles = new Array();
+ for(var i = 0; constraints && i !== constraints.length; ++i){
+ var roleType = orConstraints ? constraints[i].otherRoleType : constraints[i].roleType;
+ var players = orConstraints ? constraints[i].otherPlayers : constraints[i].players;
+
+ // --- adds new psi of the roles have to be added
+ for(var j = 0; j !== players.length; ++j){
+ if(players[j].indexOf(playerToRemove[0]) !== -1){
+ for(var l = 0; l !== players[j].length; ++l){
+ if(players[j][l] !== playerToRemove[0]) playerToRemove.push(players[j][l]);
+ }
+ }
+ if(players[j].indexOf(playerToAdd[0]) !== -1){
+ for(var l = 0; l !== players[j].length; ++l){
+ if(players[j][l] !== playerToAdd[0]) playerToAdd.push(players[j][l]);
+ }
+ }
+ }
+
+ var foundRoles = myself.getExistingRoles(roleType, players, roleContainer);
+ for(var j = 0; j !== foundRoles.length; ++j){
+ existingRoles.push(foundRoles[j]);
+ }
+ }
+ existingRoles = existingRoles.without(role);
+
+ // --- removes and adds the new selected psi-value
+ // --- and the old deselected psi if the player is another one
+ if(playerToRemove.indexOf(role.getLastPlayer()) === -1){
+ for(var i = 0; i !== existingRoles.length; ++i){
+ existingRoles[i].addPlayer(playerToAdd);
+ existingRoles[i].removePlayer(playerToRemove);
+ }
+ }
+ });
+ }
+ setEvent(this);
},
"getContent" : function(){
- // TODO: implement
+ if((!this.__orContainer__.__frames__ && this.__orContainer__.frames__.length === 0) || (!this.__arContainer__.__frames__ && this.__arContainer__.__frames__.length === 0)) return null;
+ var roles = new Array();
+ for(var i = 0; this.__arContainer__.__frames__ && i !== this.__arContainer__.__frames__.length; ++i){
+ roles.push(this.__arContainer__.__frames__[i].getContent());
+ }
+ for(var i = 0; this.__orContainer__.__frames__ && i !== this.__orContainer__.__frames__.length; ++i){
+ roles.push(this.__orContainer__.__frames__[i].getContent());
+ }
+ return roles;
},
"toJSON" : function(){
- // TODO: implement
+ if((!this.__orContainer__.__frames__ && this.__orContainer__.frames__.length === 0) || (!this.__arContainer__.__frames__ && this.__arContainer__.__frames__.length === 0)) return "null";
+ var roles = "[";
+ for(var i = 0; this.__arContainer__.__frames__ && i !== this.__arContainer__.__frames__.length; ++i){
+ roles += this.__arContainer__.__frames__[i].toJSON() + ",";
+ }
+ for(var i = 0; this.__orContainer__.__frames__ && i !== this.__orContainer__.__frames__.length; ++i){
+ roles += this.__orContainer__.__frames__[i].toJSON() + ",";
+ }
+ return roles.substring(0, roles.length - 1) + "]";
},
"isValid" : function(){
// TODO: implement
+ return true;
}});
@@ -1676,16 +1750,26 @@
this.__roles__.resetValues(_roleConstraints, _playerConstraints, _otherRoleConstraints);
},
"getContent" : function(){
- // TODO: implement
+ if(!this.isUsed()) return null;
+ return {"itemIdentities" : this.__itemIdentity__.getContent(true, true),
+ "type" : new Array(this.__type__.__frames__[0].getContent()),
+ "scopes" : this.__scope__.getContent(),
+ "roles" : this.__roles__.getContent()};
},
"toJSON" : function(){
- // TODO: implement
+ if(!this.isUsed()) return "null";
+ return "{\"itemIdentities\":" + this.__itemIdentity__.toJSON(true, true) +
+ ",\"type\":[" + this.__type__.__frames__[0].toJSON() + "]" +
+ ",\"scopes\":" + this.__scope__.toJSON() +
+ ",\"roles\":" + this.__roles__.toJSON() + "}";
},
"isValid" : function(){
// TODO: implement
+ return true;
},
"isUsed" : function(){
- // TODO: implement
+ // TODO: implement (activate button)
+ return true;
}});
@@ -1718,22 +1802,56 @@
tr.update(td);
this.__table__.insert({"bottom" : tr});
}
+ function setMinimizeHandler(myself){
+ myself.__caption__.observe("click", function(event){
+ myself.minimize();
+ });
+ }
+ setMinimizeHandler(this);
+/*
+ var button = new Element("input", {"type" : "button", "value" : "toJSON()"});
+ function test(myself){
+ button.observe("click", function(event){
+ alert("content:\n\n" + myself.getContent());
+ alert("JSON:\n\n" + myself.toJSON());
+ });
+ }
+ test(this);
+ this.getFrame().insert({"bottom" : button});
+*/
}
catch(err){
alert("From AssociationContainerC(): " + err);
}
},
"getContent" : function(){
- // TODO: implement
+ var associations = new Array();
+ for(var i = 0; this.__container__.__frames__ && i !== this.__container__.__frames__.length; ++i){
+ if(this.__container__.__frames__[i].isUsed() === true) associations.push(this.__container__.__frames__[i].getContent());
+ }
+ if(associations.length === 0) return null;
+ return associations;
},
"toJSON" : function(){
- // TODO: implement
+ var associations = "[";
+ for(var i = 0; this.__container__.__frames__ && i !== this.__container__.__frames__.length; ++i){
+ if(this.__container__.__frames__[i].isUsed() === true) associations += this.__container__.__frames__[i].toJSON() +",";
+ }
+
+ if(associations === "[") return "null";
+ return associations.substring(0, associations.length - 1) + "]";
},
"isValid" : function(){
// TODO: implement
+ return true;
},
"minimize" : function(){
- // TODO: implement
+ var rows = this.__table__.select("tr." + CLASSES.associationFrame());
+ for(var i = 0; i != rows.length; ++i){
+ if(this.__minimized__ === false) rows[i].hide();
+ else rows[i].show();
+ }
+ this.__minimized__ = !this.__minimized__;
}});
More information about the Isidorus-cvs
mailing list