Adding model update, model migrator, curved line support, relationship lines, remove of web-services classes

This commit is contained in:
Pablo Luna 2010-12-13 11:07:20 -03:00
parent 28aba40f6f
commit 67c4968aca
46 changed files with 2074 additions and 718 deletions

View File

@ -1,51 +0,0 @@
# WiseMapping: a Web based mindmapping application
## Project Information
The goal of this project is to provide a high quality product that can be deployed by educational and academic institutions, private and public companies and anyone who needs to have a mindmapping application. WiseMapping is based on the same code source supporting WiseMapping.com.
## Compiling and Running
### Prerequisites
The following products must be installed:
* Java Development Kit 6 or higher (http://java.sun.com/javase/downloads/index.jsp)
* Maven 2.2.1 or higher (http://maven.apache.org/)
### Compiling
WiseMapping uses Maven as packaging and project management. The project is composed of 4 maven sub-modules:
* core-js: Utilities JavaScript libraries
* web2d: JavaScript 2D VML/SVG abstraction library used by the mind map editor
* mindplot: JavaScript mind map designer core
* wise-webapp: J2EE web application
Full compilation of the project can be done executing within <project-dir>:
`mvn install`
Once this command is execute, the file <project-dir>/wise-webapp/target/wisemapping.war will be generated.
### Testing
The previously generated war can be deployed locally executing within the directory <project-dir>/wise-webapp the following command:
`mvn jetty:run-war`
This will start the application on the URL: http://localhost:8080/wise-webapp/. Additionally, a file based database is automatically populated with a test user.
User: test@wisemapping.org
Password: test
## Author
Pablo Luna
Paulo Veiga
Ignacio Manzano
Nicolas Damonte
## License
The source code is Licensed under the Apache License, Version 2.0 (the “License”);
You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0

View File

@ -1,51 +0,0 @@
# WiseMapping: a Web based mindmapping application
## Project Information
The goal of this project is to provide a high quality product that can be deployed by educational and academic institutions, private and public companies and anyone who needs to have a mindmapping application. WiseMapping is based on the same code source supporting WiseMapping.com.
## Compiling and Running
### Prerequisites
The following products must be installed:
* Java Development Kit 6 or higher (http://java.sun.com/javase/downloads/index.jsp)
* Maven 2.2.1 or higher (http://maven.apache.org/)
### Compiling
WiseMapping uses Maven as packaging and project management. The project is composed of 4 maven sub-modules:
* core-js: Utilities JavaScript libraries
* web2d: JavaScript 2D VML/SVG abstraction library used by the mind map editor
* mindplot: JavaScript mind map designer core
* wise-webapp: J2EE web application
Full compilation of the project can be done executing within <project-dir>:
`mvn install`
Once this command is execute, the file <project-dir>/wise-webapp/target/wisemapping.war will be generated.
### Testing
The previously generated war can be deployed locally executing within the directory <project-dir>/wise-webapp the following command:
`mvn jetty:run-war`
This will start the application on the URL: http://localhost:8080/wise-webapp/. Additionally, a file based database is automatically populated with a test user.
User: test@wisemapping.org
Password: test
## Author
* Pablo Luna
* Paulo Veiga
* Ignacio Manzano
* Nicolas Damonte
## License
The source code is Licensed under the Apache License, Version 2.0 (the “License”);
You may obtain a copy of the License at: http://www.apache.org/licenses/LICENSE-2.0

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
core.Point = function(x, y)
{
this.x = x;
@ -37,4 +37,9 @@ core.Point.prototype.inspect = function()
core.Point.prototype.clone = function()
{
return new core.Point(this.x, this.y);
};
};
core.Point.fromString = function(point) {
var values = point.split(',');
return new core.Point(values[0], values[1]);
};

View File

@ -64,7 +64,8 @@ core.assert = function(assert, message)
{
stack = e;
}
core.Logger.logError(message + "," + stack);
wLogger.error(message + "," + stack);
// core.Logger.logError(message + "," + stack);
}
};
@ -220,3 +221,54 @@ core.Utils.createDocumentFromText = function(/*string*/str, /*string?*/mimetype)
}
return null;
};
core.Utils.calculateRelationShipPointCoordinates = function(topic,controlPoint){
var size = topic.getSize();
var position = topic.getPosition();
var m = (position.y-controlPoint.y)/(position.x-controlPoint.x);
var y,x;
var gap = 5;
if(controlPoint.y>position.y+(size.height/2)){
y = position.y+(size.height/2)+gap;
x = position.x-((position.y-y)/m);
if(x>position.x+(size.width/2)){
x=position.x+(size.width/2);
}else if(x<position.x-(size.width/2)){
x=position.x-(size.width/2);
}
}else if(controlPoint.y<position.y-(size.height/2)){
y = position.y-(size.height/2) - gap;
x = position.x-((position.y-y)/m);
if(x>position.x+(size.width/2)){
x=position.x+(size.width/2);
}else if(x<position.x-(size.width/2)){
x=position.x-(size.width/2);
}
}else if(controlPoint.x<(position.x-size.width/2)){
x = position.x-(size.width/2) -gap;
y = position.y-(m*(position.x-x));
}else{
x = position.x+(size.width/2) + gap;
y = position.y-(m*(position.x-x));
}
return new core.Point(x,y);
};
core.Utils.calculateDefaultControlPoints = function(srcPos, tarPos){
var y = srcPos.y-tarPos.y;
var x = srcPos.x-tarPos.x;
var m = y/x;
var l = Math.sqrt(y*y+x*x)/3;
var fix=1;
if(srcPos.x>tarPos.x){
fix=-1;
}
var x1 = srcPos.x + Math.sqrt(l*l/(1+(m*m)))*fix;
var y1 = m*(x1-srcPos.x)+srcPos.y;
var x2 = tarPos.x + Math.sqrt(l*l/(1+(m*m)))*fix*-1;
var y2= m*(x2-tarPos.x)+tarPos.y;
return [new core.Point(x1,y1),new core.Point(x2,y2)];
};

View File

@ -40,6 +40,7 @@
<filelist dir="${basedir}/src/main/javascript/" files="header.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="Mindmap.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="NodeModel.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="RelationshipModel.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="MindmapDesigner.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="ScreenManager.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="Workspace.js"/>
@ -62,7 +63,11 @@
<filelist dir="${basedir}/src/main/javascript/" files="util/Shape.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="FixedDistanceBoard.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="BoardEntry.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="XMLMindmapSerializer.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="ModelCodeName.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="XMLMindmapSerializer_Pela.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="XMLMindmapSerializer_Beta.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="Beta2PelaMigrator.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="XMLMindmapSerializerFactory.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="PersistanceManager.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="EditorProperties.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="IconGroup.js"/>
@ -75,11 +80,10 @@
<filelist dir="${basedir}/src/main/javascript/" files="IconModel.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="LinkModel.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="NoteModel.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="Command.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="DesignerActionRunner.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="DesignerUndoManager.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="ControlPoint.js"/>
<filelist dir="${basedir}/src/main/javascript/"
files="commands/GenericFunctionCommand.js"/>
<filelist dir="${basedir}/src/main/javascript/"
@ -100,7 +104,10 @@
files="commands/AddNoteToTopicCommand.js"/>
<filelist dir="${basedir}/src/main/javascript/"
files="commands/RemoveNoteFromTopicCommand.js"/>
<filelist dir="${basedir}/src/main/javascript/"
files="commands/AddRelationshipCommand.js"/>
<filelist dir="${basedir}/src/main/javascript/"
files="commands/MoveControlPointCommand.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="footer.js"/>
</concat>
@ -144,6 +151,7 @@
<include>header-min.js</include>
<include>Mindmap-min.js</include>
<include>NodeModel-min.js</include>
<include>RelationshipModel-min.js</include>
<include>MindmapDesigner-min.js</include>
<include>ScreenManager-min.js</include>
<include>Workspace-min.js</include>
@ -166,7 +174,11 @@
<include>util/Shape-min.js</include>
<include>FixedDistanceBoard-min.js</include>
<include>BoardEntry-min.js</include>
<include>XMLMindmapSerializer-min.js</include>
<include>ModelCodeName-min.js</include>
<include>XMLMindmapSerializer_Beta-min.js</include>
<include>XMLMindmapSerializer_Pela-min.js</include>
<include>Beta2PelaMigrator-min.js</include>
<include>XMLMindmapSerializerFactory-min.js</include>
<include>PersistanceManager-min.js</include>
<include>EditorProperties-min.js</include>
<include>IconGroup-min.js</include>
@ -194,6 +206,8 @@
<include>commands/RemoveIconFromTopicCommand-min.js</include>
<include>commands/AddNoteToTopicCommand-min.js</include>
<include>commands/RemoveNoteFromTopicCommand-min.js</include>
<include>commands/AddRelationshipCommand-min.js</include>
<include>commands/MoveControlPointCommand-min.js</include>
<include>footer-min.js</include>

View File

@ -0,0 +1,17 @@
mindplot.Beta2PelaMigrator = function(betaSerializer){
this._betaSerializer=betaSerializer;
this._pelaSerializer = new mindplot.XMLMindmapSerializer_Pela();
};
mindplot.Beta2PelaMigrator.prototype.toXML = function(mindmap)
{
return this._pelaSerializer.toXML(mindmap);
};
mindplot.Beta2PelaMigrator.prototype.loadFromDom = function(dom)
{
var mindmap = this._betaSerializer.loadFromDom(dom);
mindmap.setVersion(mindplot.ModelCodeName.PELA);
return mindmap;
};

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.CentralTopic = function(model)
{
core.assert(model, "Model can not be null");
@ -29,9 +29,29 @@ mindplot.CentralTopic = function(model)
objects.extend(mindplot.CentralTopic, mindplot.Topic);
mindplot.CentralTopic.prototype.workoutIncomingConnectionPoint = function(sourcePosition)
mindplot.CentralTopic.prototype.workoutIncomingConnectionPoint = function(sourcePosition, onBoundingBox)
{
return this.getPosition();
if(!core.Utils.isDefined(onBoundingBox)){
onBoundingBox=false;
}
var pos = this.getPosition();
var size = this.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos);
var result = null;
if(onBoundingBox){
result = new core.Point();
if(isAtRight){
console.log("incomming at right");
result.x = pos.x - (size.width/2)-20;
result.y = pos.y;
} else {
result.x = pos.x;
result.y = pos.y;
}
}else{
result = pos;
}
return result;
};
mindplot.CentralTopic.prototype.getTopicType = function()

View File

@ -1,23 +1,23 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.ConnectionLine = function(sourceNode, targetNode)
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.ConnectionLine = function(sourceNode, targetNode, lineType)
{
core.assert(targetNode, 'parentNode node can not be null');
core.assert(sourceNode, 'childNode node can not be null');
@ -25,22 +25,50 @@ mindplot.ConnectionLine = function(sourceNode, targetNode)
this._targetTopic = targetNode;
this._sourceTopic = sourceNode;
this._isRelationship=false;
var strokeColor = mindplot.ConnectionLine.getStrokeColor();
var line;
if (targetNode.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE)
{
line = new web2d.Line();
line = this._createLine(lineType,mindplot.ConnectionLine.SIMPLE);
// line = new web2d.Line();
line.setStroke(1, 'solid', strokeColor);
} else
{
line = new web2d.PolyLine();
line = this._createLine(lineType,mindplot.ConnectionLine.POLYLINE);
// line = new web2d.PolyLine();
line.setStroke(1, 'solid', strokeColor);
}
this._line2d = line;
};
mindplot.ConnectionLine.prototype._createLine = function(lineType, defaultStyle){
if(!core.Utils.isDefined(lineType)){
lineType = defaultStyle;
}
lineType = parseInt(lineType);
this._lineType = lineType;
var line = null;
switch(lineType){
case mindplot.ConnectionLine.POLYLINE:
line = new web2d.PolyLine();
break;
case mindplot.ConnectionLine.CURVED:
line = new web2d.CurvedLine();
break;
case mindplot.ConnectionLine.SIMPLE_CURVED:
line = new web2d.CurvedLine();
line.setStyle(web2d.CurvedLine.SIMPLE_LINE);
break;
default:
line = new web2d.Line();
break;
}
return line;
}
mindplot.ConnectionLine.getStrokeColor = function()
{
return '#495879';
@ -61,11 +89,28 @@ mindplot.ConnectionLine.prototype.redraw = function()
var targetTopic = this._targetTopic;
var targetPosition = targetTopic.getPosition();
var sPos = sourceTopic.workoutOutgoingConnectionPoint(targetPosition);
line2d.setTo(sPos.x, sPos.y);
var sPos,tPos;
if(this._isRelationship){
this._line2d.setStroke(2);
var ctrlPoints = this._line2d.getControlPoints();
if(!core.Utils.isDefined(ctrlPoints[0].x) || !core.Utils.isDefined(ctrlPoints[1].x)){
var defaultPoints = core.Utils.calculateDefaultControlPoints(sourceTopic.getPosition(), targetTopic.getPosition());
ctrlPoints[0].x=defaultPoints[0].x;
ctrlPoints[0].y=defaultPoints[0].y;
ctrlPoints[1].x=defaultPoints[1].x;
ctrlPoints[1].y=defaultPoints[1].y;
}
sPos = core.Utils.calculateRelationShipPointCoordinates(sourceTopic,ctrlPoints[0]);
tPos = core.Utils.calculateRelationShipPointCoordinates(targetTopic,ctrlPoints[1]);
}else{
sPos = sourceTopic.workoutOutgoingConnectionPoint(targetPosition, false);
tPos = targetTopic.workoutIncomingConnectionPoint(sourcePosition, false);
}
// console.log("source:"+sPos.x+":"+sPos.y);
var tPos = targetTopic.workoutIncomingConnectionPoint(sourcePosition);
line2d.setFrom(tPos.x, tPos.y);
line2d.setFrom(sPos.x, sPos.y);
// console.log("target:"+tPos.x+":"+tPos.y);
line2d.setTo(tPos.x, tPos.y);
line2d.moveToBack();
@ -111,6 +156,14 @@ mindplot.ConnectionLine.prototype.setStroke = function(color, style, opacity)
mindplot.ConnectionLine.prototype.addToWorkspace = function(workspace)
{
if(this._line2d.getType() == "CurvedLine"){
this._line2d.addEventListener('click',function(event){
var controlPoints = workspace.getLineControlPoints();
controlPoints.setLine(this);
controlPoints.setVisibility(true);
event.stopPropagation();
}.bind(this));
}
workspace.appendChild(this._line2d);
};
@ -122,4 +175,38 @@ mindplot.ConnectionLine.prototype.removeFromWorkspace = function(workspace)
mindplot.ConnectionLine.prototype.getTargetTopic = function()
{
return this._targetTopic;
};
};
mindplot.ConnectionLine.prototype.getSourceTopic = function()
{
return this._sourceTopic;
};
mindplot.ConnectionLine.prototype.getLineType = function(){
return this._lineType;
};
mindplot.ConnectionLine.prototype.getLine = function(){
return this._line2d;
};
mindplot.ConnectionLine.prototype.getModel = function(){
return this._model;
};
mindplot.ConnectionLine.prototype.setModel = function(model){
this._model = model;
};
mindplot.ConnectionLine.prototype.setIsRelationship = function(isRelationship){
this._isRelationship=isRelationship;
};
mindplot.ConnectionLine.prototype.isRelationship = function(){
return this._isRelationship;
};
mindplot.ConnectionLine.SIMPLE=0;
mindplot.ConnectionLine.POLYLINE=1;
mindplot.ConnectionLine.CURVED=2;
mindplot.ConnectionLine.SIMPLE_CURVED=3;

View File

@ -0,0 +1,155 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.ControlPoint = function()
{
this._controlPoints= [new web2d.Elipse({width:6, height:6, stroke:'1 solid #6589de',fillColor:'gray', visibility:false}),
new web2d.Elipse({width:6, height:6, stroke:'1 solid #6589de',fillColor:'gray', visibility:false})];
this._controlLines=[new web2d.Line({strokeColor:"#6589de", strokeWidth:1, opacity:0.3}),
new web2d.Line({strokeColor:"#6589de", strokeWidth:1, opacity:0.3})];
this._isBinded=false;
this._controlPoints[0].addEventListener('mousedown',this._mouseDown.bindWithEvent(this, mindplot.ControlPoint.FROM));
this._controlPoints[0].addEventListener('click',this._mouseClick.bindWithEvent(this));
this._controlPoints[0].addEventListener('dblclick',this._mouseClick.bindWithEvent(this));
this._controlPoints[1].addEventListener('mousedown',this._mouseDown.bindWithEvent(this,mindplot.ControlPoint.TO));
this._controlPoints[1].addEventListener('click',this._mouseClick.bindWithEvent(this));
this._controlPoints[1].addEventListener('dblclick',this._mouseClick.bindWithEvent(this));
this._mouseClickOnBackgroundFunction = this._mouseClickOnBackground.bind(this);
};
mindplot.ControlPoint.prototype.setSide= function(side) {
this._side = side;
};
mindplot.ControlPoint.prototype.setLine= function(line) {
if(core.Utils.isDefined(this._line)){
this._removeLine();
}
this._line= line;
this._createControlPoint();
};
mindplot.ControlPoint.prototype._createControlPoint = function() {
this._controls= this._line.getLine().getControlPoints();
this._controlPoints[0].setPosition(this._controls[mindplot.ControlPoint.FROM].x, this._controls[mindplot.ControlPoint.FROM].y-3);
this._controlPoints[1].setPosition(this._controls[mindplot.ControlPoint.TO].x, this._controls[mindplot.ControlPoint.TO].y-3);
var pos = this._line.getLine().getFrom();
this._controlLines[0].setFrom(pos.x, pos.y);
this._controlLines[0].setTo(this._controls[mindplot.ControlPoint.FROM].x+3, this._controls[mindplot.ControlPoint.FROM].y);
pos = this._line.getLine().getTo();
this._controlLines[1].setFrom(pos.x, pos.y);
this._controlLines[1].setTo(this._controls[mindplot.ControlPoint.TO].x+3, this._controls[mindplot.ControlPoint.TO].y);
};
mindplot.ControlPoint.prototype._removeLine= function() {
};
mindplot.ControlPoint.prototype._mouseDown = function(event, point) {
if(!this._isBinded){
this._isBinded=true;
this._mouseMoveFunction = this._mouseMove.bindWithEvent(this,point);
this._workspace.getScreenManager().addEventListener('mousemove',this._mouseMoveFunction);
this._mouseUpFunction = this._mouseUp.bindWithEvent(this,point);
this._workspace.getScreenManager().addEventListener('mouseup',this._mouseUpFunction);
}
event.preventDefault();
event.stop();
return false;
};
mindplot.ControlPoint.prototype._mouseMove = function(event, point) {
var screen = this._workspace.getScreenManager();
var pos = screen.getWorkspaceMousePosition(event);
var topic = null;
if(point==0){
var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getSourceTopic(),pos);
this._line.getLine().setFrom(cords.x, cords.y);
}else{
var cords = core.Utils.calculateRelationShipPointCoordinates(this._line.getTargetTopic(),pos);
this._line.getLine().setTo(cords.x, cords.y);
}
this._controls[point].x=pos.x;
this._controls[point].y=pos.y;
this._controlPoints[point].setPosition(pos.x-5,pos.y-3);
this._controlLines[point].setFrom(cords.x, cords.y);
this._controlLines[point].setTo(pos.x-2,pos.y);
this._line.getLine().updateLine(point);
/*event.preventDefault();
event.stop();
return false;*/
};
mindplot.ControlPoint.prototype._mouseUp = function(event, point) {
this._workspace.getScreenManager().removeEventListener('mousemove',this._mouseMoveFunction);
this._workspace.getScreenManager().removeEventListener('mouseup',this._mouseUpFunction);
var command = new mindplot.commands.MoveControlPointCommand(this,point);
designer._actionRunner.execute(command); //todo:Uggly!! designer is global!!
this._isBinded=false;
/*event.preventDefault();
event.stop();
return false;*/
};
mindplot.ControlPoint.prototype._mouseClick = function(event){
event.preventDefault();
event.stop();
return false;
};
mindplot.ControlPoint.prototype._mouseClickOnBackground = function(event){
this.setVisibility(false);
};
mindplot.ControlPoint.prototype.setVisibility = function(visible){
if(visible){
this._workspace.getScreenManager().addEventListener('mousedown',this._mouseClickOnBackgroundFunction);
this._controlLines[0].moveToFront();
this._controlLines[1].moveToFront();
this._controlPoints[0].moveToFront();
this._controlPoints[1].moveToFront();
}
else{
this._workspace.getScreenManager().removeEventListener('mousedown',this._mouseClickOnBackgroundFunction);
}
this._controlPoints[0].setVisibility(visible);
this._controlPoints[1].setVisibility(visible);
this._controlLines[0].setVisibility(visible);
this._controlLines[1].setVisibility(visible);
};
mindplot.ControlPoint.prototype.addToWorkspace = function(workspace){
this._workspace = workspace;
workspace.appendChild(this._controlPoints[0]);
workspace.appendChild(this._controlPoints[1]);
workspace.appendChild(this._controlLines[0]);
workspace.appendChild(this._controlLines[1]);
};
mindplot.ControlPoint.prototype.removeFromWorkspace = function(workspace){
this._workspace = null;
workspace.removeChild(this._controlPoints[0]);
workspace.removeChild(this._controlPoints[1]);
workspace.removeChild(this._controlLines[0]);
workspace.removeChild(this._controlLines[1]);
};
mindplot.ControlPoint.FROM = 0;
mindplot.ControlPoint.TO = 1;

View File

@ -117,6 +117,14 @@ mindplot.CommandContext = new Class({
disconnect:function(topic)
{
topic.disconnect(this._designer._workspace);
},
createRelationship:function(model){
core.assert(model, "model cannot be null");
var relationship = this._designer.createRelationship(model);
return relationship;
},
removeRelationship:function(model) {
this._designer.removeRelationship(model);
}
});

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.MainTopic = function(model)
{
core.assert(model, "Model can not be null");
@ -201,13 +201,18 @@ mindplot.MainTopic.prototype.setPosition = function(point)
topicBoard.updateChildrenPosition(this);
};
mindplot.MainTopic.prototype.workoutIncomingConnectionPoint = function(sourcePosition)
mindplot.MainTopic.prototype.workoutIncomingConnectionPoint = function(sourcePosition, onBoundingBox)
{
if(!core.Utils.isDefined(onBoundingBox)){
onBoundingBox=false;
}
core.assert(sourcePosition, 'sourcePoint can not be null');
var pos = this.getPosition();
var size = this.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos);
var result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight);
if (this.getShapeType() == mindplot.NodeModel.SHAPE_TYPE_LINE)
{
@ -223,54 +228,16 @@ mindplot.MainTopic.prototype.workoutIncomingConnectionPoint = function(sourcePos
{
result.x = result.x - offset;
}
return result;
};
mindplot.MainTopic.prototype.workoutOutgoingConnectionPoint = function(targetPosition)
{
core.assert(targetPosition, 'targetPoint can not be null');
var pos = this.getPosition();
var size = this.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos);
var result;
if (this.getShapeType() == mindplot.NodeModel.SHAPE_TYPE_LINE)
{
if (!this.isConnectedToCentralTopic())
{
result = new core.Point();
if (!isAtRight)
{
result.x = pos.x - (size.width / 2);
} else
{
result.x = pos.x + (size.width / 2);
}
result.y = pos.y + (size.height / 2);
} else
{
// In this case, connetion line is not used as shape figure.
result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true);
result.y = pos.y + (size.height / 2);
// Correction factor ...
if (!isAtRight)
{
result.x = result.x + 2;
} else
{
result.x = result.x - 2;
}
if(onBoundingBox){
if(isAtRight){
result.x -= 10;
} else{
result.x += 10;
}
} else
{
result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true);
}
return result;
};
};
mindplot.MainTopic.prototype.isConnectedToCentralTopic = function()
{

View File

@ -1,27 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.Mindmap = function()
{
this._branches = [];
this._name = null;
this._description = null;
this._version=null;
this._relationships=[];
};
mindplot.Mindmap.prototype.getCentralTopic = function()
@ -45,6 +47,20 @@ mindplot.Mindmap.prototype.setId = function(id)
this._iconType = id;
};
mindplot.Mindmap.prototype.getVersion = function()
{
return this._version;
};
mindplot.Mindmap.prototype.setVersion = function(version)
{
this._version = version;
};
mindplot.Mindmap.prototype.addBranch = function(nodeModel)
{
core.assert(nodeModel && nodeModel.isNodeModel(), 'Add node must be invoked with model objects');
@ -65,6 +81,10 @@ mindplot.Mindmap.prototype.getBranches = function()
return this._branches;
};
mindplot.Mindmap.prototype.getRelationships = function() {
return this._relationships;
};
mindplot.Mindmap.prototype.connect = function(parent, child)
{
// Child already has a parent ?
@ -120,6 +140,21 @@ mindplot.Mindmap.prototype._createNode = function(type)
return result;
};
mindplot.Mindmap.prototype.createRelationship = function(fromNode, toNode){
core.assert(fromNode, 'from node cannot be null');
core.assert(toNode, 'to node cannot be null');
return new mindplot.RelationshipModel(fromNode, toNode);
};
mindplot.Mindmap.prototype.addRelationship = function(relationship) {
this._relationships.push(relationship);
};
mindplot.Mindmap.prototype.removeRelationship = function(relationship) {
this._relationships.remove(relationship);
};
mindplot.Mindmap.prototype.inspect = function()
{
var result = '';

View File

@ -17,9 +17,8 @@
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.MindmapDesigner = function(profile, divElement, persistanManager)
mindplot.MindmapDesigner = function(profile, divElement)
{
core.assert(persistanManager, "Persistant manager must be defined");
core.assert(core.Utils.isDefined(profile.zoom), "zoom must be defined");
// Undo manager ...
@ -53,11 +52,11 @@ mindplot.MindmapDesigner = function(profile, divElement, persistanManager)
// Init dragger manager.
this._dragger = this._buildDragManager(workspace);
this._persistantManager = persistanManager;
// Add shapes to speed up the loading process ...
mindplot.DragTopic.initialize(workspace);
this._relationships={};
this._events = {};
};
@ -368,6 +367,62 @@ mindplot.MindmapDesigner.prototype.createSiblingForSelectedNode = function()
}
};
mindplot.MindmapDesigner.prototype.addRelationShip2SelectedNode = function(event)
{
var screen = this._workspace.getScreenManager();
var pos = screen.getWorkspaceMousePosition(event);
var selectedTopics = this.getSelectedNodes();
if(selectedTopics.length >0){
var fromNodePosition = selectedTopics[0].getPosition();
this._relationship = new web2d.CurvedLine();
this._relationship.setStyle(web2d.CurvedLine.SIMPLE_LINE);
this._relationship.setDashed(2,2);
this._relationship.setFrom(fromNodePosition.x, fromNodePosition.y);
this._relationship.setTo(pos.x, pos.y);
this._workspace.appendChild(this._relationship);
this._relationshipMouseMoveFunction = this._relationshipMouseMove.bindWithEvent(this);
this._relationshipMouseClickFunction = this._relationshipMouseClick.bindWithEvent(this, selectedTopics[0]);
this._workspace.getScreenManager().addEventListener('mousemove',this._relationshipMouseMoveFunction);
this._workspace.getScreenManager().addEventListener('click',this._relationshipMouseClickFunction);
}
};
mindplot.MindmapDesigner.prototype._relationshipMouseMove = function(event){
var screen = this._workspace.getScreenManager();
var pos = screen.getWorkspaceMousePosition(event);
this._relationship.setTo(pos.x-1, pos.y-1); //to prevent click event target to be the line itself
event.preventDefault();
event.stop();
return false;
};
mindplot.MindmapDesigner.prototype._relationshipMouseClick = function (event, fromNode) {
var target = event.target;
while(target.tagName != "g" && core.Utils.isDefined(target.parentNode)){
target=target.parentNode;
}
if(core.Utils.isDefined(target.virtualRef)){
var targetNode = target.virtualRef;
this.addRelationship(fromNode, targetNode);
}
this._workspace.removeChild(this._relationship);
this._relationship = null;
this._workspace.getScreenManager().removeEventListener('mousemove',this._relationshipMouseMoveFunction);
this._workspace.getScreenManager().removeEventListener('click',this._relationshipMouseClickFunction);
event.preventDefault();
event.stop();
return false;
};
mindplot.MindmapDesigner.prototype.addRelationship= function(fromNode, toNode){
// Create a new topic model ...
var mindmap = this.getMindmap();
var model = mindmap.createRelationship(fromNode.getModel().getId(), toNode.getModel().getId());
var command = new mindplot.commands.AddRelationshipCommand(model, mindmap);
this._actionRunner.execute(command);
};
mindplot.MindmapDesigner.prototype.needsSave = function()
{
return this._actionRunner.hasBeenChanged();
@ -390,7 +445,7 @@ mindplot.MindmapDesigner.prototype.autoSaveEnabled = function(value)
mindplot.MindmapDesigner.prototype.save = function(onSavedHandler, saveHistory)
{
var persistantManager = this._persistantManager;
var persistantManager = mindplot.PersistanceManager;
var mindmap = this._mindmap;
var xmlChart = this._workspace.dumpNativeChart();
@ -417,7 +472,7 @@ mindplot.MindmapDesigner.prototype.loadFromXML = function(mapId, xmlContent)
// Explorer Hack with local files ...
var domDocument = core.Utils.createDocumentFromText(xmlContent);
var serializer = new mindplot.XMLMindmapSerializer();
var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(domDocument);
var mindmap = serializer.loadFromDom(domDocument);
this._loadMap(mapId, mindmap);
@ -435,7 +490,7 @@ mindplot.MindmapDesigner.prototype.load = function(mapId)
core.assert(mapId, 'mapName can not be null');
// Build load function ...
var persistantManager = this._persistantManager;
var persistantManager = mindplot.PersistanceManager;
// Loading mindmap ...
var mindmap = persistantManager.load(mapId);
@ -469,6 +524,10 @@ mindplot.MindmapDesigner.prototype._loadMap = function(mapId, mindmapModel)
// Update shrink render state...
nodeGraph.setBranchVisibility(true);
}
var relationships = mindmapModel.getRelationships();
for (var j=0; j<relationships.length; j++) {
var relationship = this._relationshipModelToRelationship(relationships[j]);
}
}
this._fireEvent("loadsuccess");
@ -527,6 +586,86 @@ mindplot.MindmapDesigner.prototype._nodeModelToNodeGraph = function(nodeModel)
return nodeGraph;
};
mindplot.MindmapDesigner.prototype._relationshipModelToRelationship = function(model) {
core.assert(model, "Node model can not be null");
var relationship = this._buildRelationship(model);
var sourceTopic = relationship.getSourceTopic();
sourceTopic.addRelationship(relationship);
var targetTopic = relationship.getTargetTopic();
targetTopic.addRelationship(relationship);
var workspace = this._workspace;
workspace.appendChild(relationship);
relationship.redraw();
return relationship;
};
mindplot.MindmapDesigner.prototype.createRelationship= function(model){
this._mindmap.addRelationship(model);
return this._relationshipModelToRelationship(model);
};
mindplot.MindmapDesigner.prototype.removeRelationship = function(model) {
this._mindmap.removeRelationship(model);
var relationship = this._relationships[model.getId()];
var sourceTopic = relationship.getSourceTopic();
sourceTopic.removeRelationship(relationship);
var targetTopic = relationship.getTargetTopic();
targetTopic.removeRelationship(relationship);
this._workspace.removeChild(relationship);
delete this._relationships[model.getId()];
};
mindplot.MindmapDesigner.prototype._buildRelationship = function (model) {
var workspace = this._workspace;
var elem = this;
var fromNodeId = model.getFromNode();
var toNodeId = model.getToNode();
var fromTopic = null;
var toTopic = null;
var topics = this._topics;
for (var i = 0; i < topics.length; i++)
{
var t = topics[i];
if (t.getModel().getId() == fromNodeId)
{
fromTopic= t;
if(toTopic!=null){
break;
}
}else if (t.getModel().getId() == toNodeId)
{
toTopic= t;
if(fromTopic!=null){
break;
}
}
}
// Create node graph ...
var relationLine = new mindplot.ConnectionLine(fromTopic, toTopic, model.getLineType());
relationLine.setIsRelationship(true);
if(core.Utils.isDefined(model.getSrcCtrlPoint())){
var srcPoint = model.getSrcCtrlPoint().clone();
relationLine.getLine().setSrcControlPoint(srcPoint);
}
if(core.Utils.isDefined(model.getDestCtrlPoint())){
var destPoint = model.getDestCtrlPoint().clone();
relationLine.getLine().setDestControlPoint(destPoint);
}
relationLine.getLine().setDashed(3,2);
relationLine.getLine().setShowArrow(model.getEndArrow());
relationLine.setModel(model);
// Append it to the workspace ...
this._relationships[model.getId()]=relationLine;
return relationLine;
};
mindplot.MindmapDesigner.prototype.getEditor = function()
{
return this._editor;

View File

@ -0,0 +1,4 @@
mindplot.ModelCodeName ={};
mindplot.ModelCodeName.BETA = "beta";
mindplot.ModelCodeName.PELA = "pela";

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.NodeModel = function(type, mindmap)
{
core.assert(type, 'Node type can not be null');

View File

@ -17,13 +17,9 @@
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.PersistanceManager = function(editorService)
{
this._editorService = editorService;
this._serializer = new mindplot.XMLMindmapSerializer();
};
mindplot.PersistanceManager = {};
mindplot.PersistanceManager.prototype.save = function(mindmap, chartType, xmlChart, editorProperties, onSavedHandler,saveHistory)
mindplot.PersistanceManager.save = function(mindmap, chartType, xmlChart, editorProperties, onSavedHandler,saveHistory)
{
core.assert(mindmap, "mindmap can not be null");
core.assert(chartType, "chartType can not be null");
@ -32,11 +28,12 @@ mindplot.PersistanceManager.prototype.save = function(mindmap, chartType, xmlCha
var mapId = mindmap.getId();
var xmlMap = this._serializer.toXML(mindmap);
var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap(mindmap);
var xmlMap = serializer.toXML(mindmap);
var xmlMapStr = core.Utils.innerXML(xmlMap);
var pref = Json.toString(editorProperties);
this._editorService.saveMap(mapId, xmlMapStr, chartType, xmlChart, pref,saveHistory,
window.MapEditorService.saveMap(mapId, xmlMapStr, chartType, xmlChart, pref,saveHistory,
{
callback:function(response) {
@ -64,14 +61,12 @@ mindplot.PersistanceManager.prototype.save = function(mindmap, chartType, xmlCha
};
mindplot.PersistanceManager.prototype.load = function(mapId)
mindplot.PersistanceManager.load = function(mapId)
{
core.assert(mapId, "mapId can not be null");
var deserializer = this;
var result = {r:null};
var serializer = this._serializer;
this._editorService.loadMap(mapId, {
window.MapEditorService.loadMap(mapId, {
callback:function(response) {
if (response.msgCode == "OK")
@ -79,6 +74,7 @@ mindplot.PersistanceManager.prototype.load = function(mapId)
// Explorer Hack with local files ...
var xmlContent = response.content;
var domDocument = core.Utils.createDocumentFromText(xmlContent);
var serializer = mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument(domDocument);
var mindmap = serializer.loadFromDom(domDocument);
mindmap.setId(mapId);

View File

@ -0,0 +1,88 @@
mindplot.RelationshipModel = function(fromNode, toNode)
{
core.assert(fromNode, 'from node type can not be null');
core.assert(toNode, 'to node type can not be null');
this._id = mindplot.RelationshipModel._nextUUID();
this._fromNode = fromNode;
this._toNode = toNode;
this._lineType=mindplot.ConnectionLine.SIMPLE_CURVED;
this._srcCtrlPoint=null;
this._destCtrlPoint=null;
this._endArrow=true;
};
mindplot.RelationshipModel.prototype.getFromNode=function(){
return this._fromNode;
};
mindplot.RelationshipModel.prototype.getToNode=function(){
return this._toNode;
};
mindplot.RelationshipModel.prototype.getId=function(){
return this._id;
};
mindplot.RelationshipModel.prototype.getLineType = function(){
return this._lineType;
};
mindplot.RelationshipModel.prototype.setLineType = function(lineType){
this._lineType = lineType;
};
mindplot.RelationshipModel.prototype.getSrcCtrlPoint= function(){
return this._srcCtrlPoint;
};
mindplot.RelationshipModel.prototype.setSrcCtrlPoint= function(srcCtrlPoint){
this._srcCtrlPoint = srcCtrlPoint;
};
mindplot.RelationshipModel.prototype.getDestCtrlPoint= function(){
return this._destCtrlPoint;
};
mindplot.RelationshipModel.prototype.setDestCtrlPoint= function(destCtrlPoint){
this._destCtrlPoint = destCtrlPoint;
};
mindplot.RelationshipModel.prototype.getEndArrow= function(){
return this._endArrow;
};
mindplot.RelationshipModel.prototype.setEndArrow= function(endArrow){
this._endArrow = endArrow;
};
mindplot.RelationshipModel.prototype.clone = function(model){
var result = new mindplot.RelationshipModel(this._fromNode, this._toNode);
result._id = this._id;
result._lineType = this._lineType;
result._srcCtrlPoint = this._srcCtrlPoint;
result._destCtrlPoint = this._destCtrlPoint;
result._endArrow = this._endArrow;
return result;
};
/**
* @todo: This method must be implemented.
*/
mindplot.RelationshipModel._nextUUID = function()
{
if (!this._uuid)
{
this._uuid = 0;
}
this._uuid = this._uuid + 1;
return this._uuid;
};
mindplot.RelationshipModel.prototype.inspect = function()
{
return '(fromNode:' + this.getFromNode().getId() + ' , toNode: ' + this.getToNode().getId() + ')';
};

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.Topic = function()
{
mindplot.Topic.superClass.initialize.call(this);
@ -31,6 +31,8 @@ mindplot.Topic.prototype.initialize = function(topicBoard)
this._children = [];
this._parent = null;
this._lastIconId = -1;
this._relationships = [];
this._isInWorkspace = false;
this._topicBoard = topicBoard;
this._buildShape();
@ -419,6 +421,18 @@ mindplot.Topic.prototype.removeNote = function(){
this._hasNote=false;
}
mindplot.Topic.prototype.addRelationship = function(relationship){
this._relationships.push(relationship);
};
mindplot.Topic.prototype.removeRelationship = function(relationship){
this._relationships.remove(relationship);
};
mindplot.Topic.prototype.getRelationships = function(){
return this._relationships;
};
mindplot.Topic.prototype._buildTextShape = function(disableEventsListeners)
{
var result = new web2d.Text();
@ -646,7 +660,7 @@ mindplot.Topic.prototype._setText = function(text, updateModel)
{
return function()
{
elem.updateNode();
elem.updateNode();
};
};
@ -741,6 +755,7 @@ mindplot.Topic.prototype._buildShape = function()
{
var groupAttributes = {width: 100, height:100,coordSizeWidth:100,coordSizeHeight:100};
var group = new web2d.Group(groupAttributes);
group._peer._native.virtualRef=this;
this._set2DElement(group);
// Shape must be build based on the model width ...
@ -949,6 +964,11 @@ mindplot.Topic.prototype._updateConnectionLines = function()
{
incomingLines[i].redraw();
}
// Update relationship lines
for(var j=0; j<this._relationships.length; j++){
this._relationships[j].redraw();
}
};
mindplot.Topic.prototype.setBranchVisibility = function(value)
@ -1222,12 +1242,18 @@ mindplot.Topic.prototype.removeFromWorkspace = function(workspace)
{
workspace.removeChild(line);
}
this._isInWorkspace=false;
};
mindplot.Topic.prototype.addToWorkspace = function(workspace)
{
var elem = this.get2DElement();
workspace.appendChild(elem);
this._isInWorkspace=true;
};
mindplot.Topic.prototype.isInWorkspace = function(){
return this._isInWorkspace;
};
mindplot.Topic.prototype.getTopicBoard = function()
@ -1250,16 +1276,78 @@ mindplot.Topic.prototype.createDragNode = function()
mindplot.Topic.prototype.updateNode = function()
{
var textShape = this.getTextShape();
var sizeWidth = textShape.getWidth();
var sizeHeight = textShape.getHeight();
var font = textShape.getFont();
var iconOffset = this.getIconOffset();
if(this.isInWorkspace()){
var textShape = this.getTextShape();
var sizeWidth = textShape.getWidth();
var sizeHeight = textShape.getHeight();
var font = textShape.getFont();
var iconOffset = this.getIconOffset();
var newSize = {width:sizeWidth + this._offset*2 + iconOffset,height:sizeHeight + this._offset};
this.setSize(newSize);
var newSize = {width:sizeWidth + this._offset*2 + iconOffset,height:sizeHeight + this._offset};
this.setSize(newSize);
// Positionate node ...
textShape.setPosition(iconOffset+this._offset, this._offset / 2);
textShape.setTextSize(sizeWidth, sizeHeight);
// Positionate node ...
textShape.setPosition(iconOffset+this._offset, this._offset / 2);
textShape.setTextSize(sizeWidth, sizeHeight);
}
};
mindplot.Topic.prototype.workoutOutgoingConnectionPoint = function(targetPosition, onBoundingBox)
{
if(!core.Utils.isDefined(onBoundingBox)){
onBoundingBox=false;
}
core.assert(targetPosition, 'targetPoint can not be null');
var pos = this.getPosition();
var size = this.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos);
var result;
if(onBoundingBox){
result = new core.Point();
if(isAtRight){
result.x = pos.x - (size.width/2)-5;
result.y = pos.y;
} else {
result.x = pos.x + (size.width/2)+ 5;
result.y = pos.y;
}
}
else{
if (this.getShapeType() == mindplot.NodeModel.SHAPE_TYPE_LINE)
{
if (!this.isConnectedToCentralTopic())
{
result = new core.Point();
if (!isAtRight)
{
result.x = pos.x - (size.width / 2);
} else
{
result.x = pos.x + (size.width / 2);
}
result.y = pos.y + (size.height / 2);
} else
{
// In this case, connetion line is not used as shape figure.
result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true);
result.y = pos.y + (size.height / 2);
// Correction factor ...
if (!isAtRight)
{
result.x = result.x + 2;
} else
{
result.x = result.x - 2;
}
}
} else
{
result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true);
}
}
return result;
};

View File

@ -41,6 +41,9 @@ mindplot.Workspace = function(profile, screenManager, zoom)
// Register drag events ...
this._registerDragEvents();
//Create CurvedLineControlPoints
this._createCuvedLineControlPoints();
this._eventsEnabled = true;
};
@ -234,3 +237,12 @@ mindplot.Workspace.prototype._registerDragEvents = function()
screenManager.addEventListener('mousedown', mouseDownListener);
};
mindplot.Workspace.prototype._createCuvedLineControlPoints = function(){
this._lineControlPoints = new mindplot.ControlPoint();
this.appendChild(this._lineControlPoints);
};
mindplot.Workspace.prototype.getLineControlPoints = function(){
return this._lineControlPoints;
};

View File

@ -0,0 +1,46 @@
mindplot.XMLMindmapSerializerFactory = {};
mindplot.XMLMindmapSerializerFactory.getSerializerFromMindmap = function(mindmap){
return mindplot.XMLMindmapSerializerFactory.getSerializer(mindmap.getVersion());
};
mindplot.XMLMindmapSerializerFactory.getSerializerFromDocument = function(domDocument){
var rootElem = domDocument.documentElement;
return mindplot.XMLMindmapSerializerFactory.getSerializer(rootElem.getAttribute("version"))
};
mindplot.XMLMindmapSerializerFactory.getSerializer = function(version){
if(!core.Utils.isDefined(version)){
version = mindplot.ModelCodeName.BETA;
}
var codeNames = mindplot.XMLMindmapSerializerFactory._codeNames;
var found = false;
var serializer = null;
for(var i=0; i<codeNames.length; i++){
if(!found){
found = codeNames[i].codeName==version;
if(found)
serializer = new (codeNames[i].serializer)();
} else{
var migrator = codeNames[i].migrator;
serializer = new migrator(serializer);
}
}
return serializer;
};
mindplot.XMLMindmapSerializerFactory._codeNames =
[{
codeName:mindplot.ModelCodeName.BETA,
serializer: mindplot.XMLMindmapSerializer_Beta,
migrator:function(){//todo:error
}
},
{
codeName:mindplot.ModelCodeName.PELA,
serializer:mindplot.XMLMindmapSerializer_Pela,
migrator:mindplot.Beta2PelaMigrator
}
];

View File

@ -1,28 +1,9 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.XMLMindmapSerializer = function()
mindplot.XMLMindmapSerializer_Beta = function()
{
};
mindplot.XMLMindmapSerializer.prototype.toXML = function(mindmap)
mindplot.XMLMindmapSerializer_Beta.prototype.toXML = function(mindmap)
{
core.assert(mindmap, "Can not save a null mindmap");
@ -49,7 +30,7 @@ mindplot.XMLMindmapSerializer.prototype.toXML = function(mindmap)
return document;
};
mindplot.XMLMindmapSerializer.prototype._topicToXML = function(document, topic)
mindplot.XMLMindmapSerializer_Beta.prototype._topicToXML = function(document, topic)
{
var parentTopic = document.createElement("topic");
@ -158,37 +139,37 @@ mindplot.XMLMindmapSerializer.prototype._topicToXML = function(document, topic)
return parentTopic;
};
mindplot.XMLMindmapSerializer.prototype._iconToXML = function(document, icon)
mindplot.XMLMindmapSerializer_Beta.prototype._iconToXML = function(document, icon)
{
var iconDom = document.createElement("icon");
iconDom.setAttribute('id', icon.getIconType());
return iconDom;
};
mindplot.XMLMindmapSerializer.prototype._linkToXML = function(document, link)
mindplot.XMLMindmapSerializer_Beta.prototype._linkToXML = function(document, link)
{
var linkDom = document.createElement("link");
linkDom.setAttribute('url', link.getUrl());
return linkDom;
};
mindplot.XMLMindmapSerializer.prototype._noteToXML = function(document, note)
mindplot.XMLMindmapSerializer_Beta.prototype._noteToXML = function(document, note)
{
var noteDom = document.createElement("note");
noteDom.setAttribute('text', note.getText());
return noteDom;
};
mindplot.XMLMindmapSerializer.prototype.loadFromDom = function(dom)
mindplot.XMLMindmapSerializer_Beta.prototype.loadFromDom = function(dom)
{
core.assert(dom, "Dom can not be null");
var rootElem = dom.documentElement;
// Is a wisemap?.
core.assert(rootElem.tagName == mindplot.XMLMindmapSerializer.MAP_ROOT_NODE, "This seem not to be a map document.");
core.assert(rootElem.tagName == mindplot.XMLMindmapSerializer_Beta.MAP_ROOT_NODE, "This seem not to be a map document.");
// Start the loading process ...
var mindmap = new mindplot.Mindmap();
var mindmap = new mindplot.Mindmap();
var children = rootElem.childNodes;
for (var i = 0; i < children.length; i++)
@ -203,7 +184,7 @@ mindplot.XMLMindmapSerializer.prototype.loadFromDom = function(dom)
return mindmap;
};
mindplot.XMLMindmapSerializer.prototype._deserializeNode = function(domElem, mindmap)
mindplot.XMLMindmapSerializer_Beta.prototype._deserializeNode = function(domElem, mindmap)
{
var type = (domElem.getAttribute('central') != null) ? mindplot.NodeModel.CENTRAL_TOPIC_TYPE : mindplot.NodeModel.MAIN_TOPIC_TYPE;
var topic = mindmap.createNode(type);
@ -303,19 +284,19 @@ mindplot.XMLMindmapSerializer.prototype._deserializeNode = function(domElem, min
return topic;
};
mindplot.XMLMindmapSerializer.prototype._deserializeIcon = function(domElem, topic)
mindplot.XMLMindmapSerializer_Beta.prototype._deserializeIcon = function(domElem, topic)
{
return topic.createIcon(domElem.getAttribute("id"));
};
mindplot.XMLMindmapSerializer.prototype._deserializeLink = function(domElem, topic)
mindplot.XMLMindmapSerializer_Beta.prototype._deserializeLink = function(domElem, topic)
{
return topic.createLink(domElem.getAttribute("url"));
};
mindplot.XMLMindmapSerializer.prototype._deserializeNote = function(domElem, topic)
mindplot.XMLMindmapSerializer_Beta.prototype._deserializeNote = function(domElem, topic)
{
return topic.createNote(domElem.getAttribute("text"));
};
mindplot.XMLMindmapSerializer.MAP_ROOT_NODE = 'map';
mindplot.XMLMindmapSerializer_Beta.MAP_ROOT_NODE = 'map';

View File

@ -0,0 +1,397 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
mindplot.XMLMindmapSerializer_Pela = function()
{
};
mindplot.XMLMindmapSerializer_Pela.prototype.toXML = function(mindmap)
{
core.assert(mindmap, "Can not save a null mindmap");
var document = core.Utils.createDocument();
// Store map attributes ...
var mapElem = document.createElement("map");
var name = mindmap.getId();
if (name)
{
mapElem.setAttribute('name', name);
}
var version = mindmap.getVersion();
if (version)
{
mapElem.setAttribute('version', version);
}
document.appendChild(mapElem);
// Create branches ...
var topics = mindmap.getBranches();
for (var i = 0; i < topics.length; i++)
{
var topic = topics[i];
var topicDom = this._topicToXML(document, topic);
mapElem.appendChild(topicDom);
}
// Create Relationships
var relationships = mindmap.getRelationships();
if(relationships.length>0){
// var relationshipDom=document.createElement("relationships");
// mapElem.appendChild(relationshipDom);
for (var j = 0; j<relationships.length; j++){
var relationDom = this._relationshipToXML(document, relationships[j]);
mapElem.appendChild(relationDom);
}
}
return document;
};
mindplot.XMLMindmapSerializer_Pela.prototype._topicToXML = function(document, topic)
{
var parentTopic = document.createElement("topic");
// Set topic attributes...
if (topic.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE)
{
parentTopic.setAttribute("central", true);
} else
{
var parent = topic.getParent();
if (parent == null || parent.getType() == mindplot.NodeModel.CENTRAL_TOPIC_TYPE)
{
var pos = topic.getPosition();
parentTopic.setAttribute("position", pos.x + ',' + pos.y);
} else
{
var order = topic.getOrder();
parentTopic.setAttribute("order", order);
}
}
var text = topic.getText();
if (text) {
parentTopic.setAttribute('text', text);
}
var shape = topic.getShapeType();
if (shape) {
parentTopic.setAttribute('shape', shape);
}
if(topic.areChildrenShrinked())
{
parentTopic.setAttribute('shrink',true);
}
// Font properties ...
var id = topic.getId();
parentTopic.setAttribute('id',id);
var font = "";
var fontFamily = topic.getFontFamily();
font += (fontFamily ? fontFamily : '') + ';';
var fontSize = topic.getFontSize();
font += (fontSize ? fontSize : '') + ';';
var fontColor = topic.getFontColor();
font += (fontColor ? fontColor : '') + ';';
var fontWeight = topic.getFontWeight();
font += (fontWeight ? fontWeight : '') + ';';
var fontStyle = topic.getFontStyle();
font += (fontStyle ? fontStyle : '') + ';';
if (fontFamily || fontSize || fontColor || fontWeight || fontStyle)
{
parentTopic.setAttribute('fontStyle', font);
}
var bgColor = topic.getBackgroundColor();
if (bgColor) {
parentTopic.setAttribute('bgColor', bgColor);
}
var brColor = topic.getBorderColor();
if (brColor) {
parentTopic.setAttribute('brColor', brColor);
}
//ICONS
var icons = topic.getIcons();
for (var i = 0; i < icons.length; i++)
{
var icon = icons[i];
var iconDom = this._iconToXML(document, icon);
parentTopic.appendChild(iconDom);
}
//LINKS
var links = topic.getLinks();
for (var i = 0; i < links.length; i++)
{
var link = links[i];
var linkDom = this._linkToXML(document, link);
parentTopic.appendChild(linkDom);
}
var notes = topic.getNotes();
for (var i = 0; i < notes.length; i++)
{
var note = notes[i];
var noteDom = this._noteToXML(document, note);
parentTopic.appendChild(noteDom);
}
//CHILDREN TOPICS
var childTopics = topic.getChildren();
for (var i = 0; i < childTopics.length; i++)
{
var childTopic = childTopics[i];
var childDom = this._topicToXML(document, childTopic);
parentTopic.appendChild(childDom);
}
return parentTopic;
};
mindplot.XMLMindmapSerializer_Pela.prototype._iconToXML = function(document, icon)
{
var iconDom = document.createElement("icon");
iconDom.setAttribute('id', icon.getIconType());
return iconDom;
};
mindplot.XMLMindmapSerializer_Pela.prototype._linkToXML = function(document, link)
{
var linkDom = document.createElement("link");
linkDom.setAttribute('url', link.getUrl());
return linkDom;
};
mindplot.XMLMindmapSerializer_Pela.prototype._noteToXML = function(document, note)
{
var noteDom = document.createElement("note");
noteDom.setAttribute('text', note.getText());
return noteDom;
};
mindplot.XMLMindmapSerializer_Pela.prototype._relationshipToXML = function(document,relationship){
var relationDom = document.createElement("relationship");
relationDom.setAttribute("srcTopicId",relationship.getFromNode());
relationDom.setAttribute("destTopicId",relationship.getToNode());
var lineType = relationship.getLineType();
relationDom.setAttribute("lineType",lineType);
if(lineType==mindplot.ConnectionLine.CURVED || lineType==mindplot.ConnectionLine.SIMPLE_CURVED){
if(core.Utils.isDefined(relationship.getSrcCtrlPoint())){
var srcPoint = relationship.getSrcCtrlPoint();
relationDom.setAttribute("srcCtrlPoint",srcPoint.x+","+srcPoint.y);
}
if(core.Utils.isDefined(relationship.getDestCtrlPoint())){
var destPoint = relationship.getDestCtrlPoint();
relationDom.setAttribute("destCtrlPoint",destPoint.x+","+destPoint.y);
}
}
relationDom.setAttribute("endArrow",relationship.getEndArrow());
return relationDom;
};
mindplot.XMLMindmapSerializer_Pela.prototype.loadFromDom = function(dom)
{
core.assert(dom, "Dom can not be null");
var rootElem = dom.documentElement;
// Is a wisemap?.
core.assert(rootElem.tagName == mindplot.XMLMindmapSerializer_Pela.MAP_ROOT_NODE, "This seem not to be a map document.");
// Start the loading process ...
var mindmap = new mindplot.Mindmap();
var version = rootElem.getAttribute("version");
mindmap.setVersion(version);
var children = rootElem.childNodes;
for (var i = 0; i < children.length; i++)
{
var child = children[i];
if (child.nodeType == 1)
{
switch(child.tagName){
case "topic":
var topic = this._deserializeNode(child, mindmap);
mindmap.addBranch(topic);
break;
case "relationship":
var relationship = this._deserializeRelationship(child,mindmap);
mindmap.addRelationship(relationship);
break;
}
}
}
return mindmap;
};
mindplot.XMLMindmapSerializer_Pela.prototype._deserializeNode = function(domElem, mindmap)
{
var type = (domElem.getAttribute('central') != null) ? mindplot.NodeModel.CENTRAL_TOPIC_TYPE : mindplot.NodeModel.MAIN_TOPIC_TYPE;
var topic = mindmap.createNode(type);
// Load attributes...
var id = domElem.getAttribute('id');
if(id) {
topic.setId(id);
}
var text = domElem.getAttribute('text');
if (text) {
topic.setText(text);
}
var order = domElem.getAttribute('order');
if (order) {
topic.setOrder(order);
}
var shape = domElem.getAttribute('shape');
if (shape) {
topic.setShapeType(shape);
}
var isShrink = domElem.getAttribute('shrink');
if(isShrink)
{
topic.setChildrenShrinked(isShrink);
}
var fontStyle = domElem.getAttribute('fontStyle');
if (fontStyle) {
var font = fontStyle.split(';');
if (font[0])
{
topic.setFontFamily(font[0]);
}
if (font[1])
{
topic.setFontSize(font[1]);
}
if (font[2])
{
topic.setFontColor(font[2]);
}
if (font[3])
{
topic.setFontWeight(font[3]);
}
if (font[4])
{
topic.setFontStyle(font[4]);
}
}
var bgColor = domElem.getAttribute('bgColor');
if (bgColor) {
topic.setBackgroundColor(bgColor);
}
var borderColor = domElem.getAttribute('brColor');
if (borderColor) {
topic.setBorderColor(borderColor);
}
var position = domElem.getAttribute('position');
if (position) {
var pos = position.split(',');
topic.setPosition(pos[0], pos[1]);
}
//Creating icons and children nodes
var children = domElem.childNodes;
for (var i = 0; i < children.length; i++)
{
var child = children[i];
if (child.nodeType == 1)
{
core.assert(child.tagName == "topic" || child.tagName == "icon" || child.tagName == "link" || child.tagName == "note", 'Illegal node type:' + child.tagName);
if (child.tagName == "topic") {
var childTopic = this._deserializeNode(child, mindmap);
childTopic.connectTo(topic);
} else if(child.tagName == "icon") {
var icon = this._deserializeIcon(child, topic);
topic.addIcon(icon);
} else if(child.tagName == "link") {
var link = this._deserializeLink(child, topic);
topic.addLink(link);
} else if(child.tagName == "note") {
var note = this._deserializeNote(child, topic);
topic.addNote(note);
}
}
}
;
return topic;
};
mindplot.XMLMindmapSerializer_Pela.prototype._deserializeIcon = function(domElem, topic)
{
return topic.createIcon(domElem.getAttribute("id"));
};
mindplot.XMLMindmapSerializer_Pela.prototype._deserializeLink = function(domElem, topic)
{
return topic.createLink(domElem.getAttribute("url"));
};
mindplot.XMLMindmapSerializer_Pela.prototype._deserializeNote = function(domElem, topic)
{
return topic.createNote(domElem.getAttribute("text"));
};
mindplot.XMLMindmapSerializer_Pela.prototype._deserializeRelationship = function(domElement, mindmap)
{
var srcId = domElement.getAttribute("srcTopicId");
var destId = domElement.getAttribute("destTopicId");
var lineType = domElement.getAttribute("lineType");
var srcCtrlPoint = domElement.getAttribute("srcCtrlPoint");
var destCtrlPoint = domElement.getAttribute("destCtrlPoint");
var endArrow = domElement.getAttribute("endArrow");
var model = mindmap.createRelationship(srcId, destId);
model.setLineType(lineType);
if(core.Utils.isDefined(srcCtrlPoint) && srcCtrlPoint!=""){
model.setSrcCtrlPoint(core.Point.fromString(srcCtrlPoint));
}
if(core.Utils.isDefined(destCtrlPoint) && destCtrlPoint!=""){
model.setDestCtrlPoint(core.Point.fromString(destCtrlPoint));
}
model.setEndArrow(endArrow);
return model;
};
mindplot.XMLMindmapSerializer_Pela.MAP_ROOT_NODE = 'map';

View File

@ -0,0 +1,19 @@
mindplot.commands.AddRelationshipCommand = mindplot.Command.extend(
{
initialize: function(model, mindmap)
{
core.assert(model, 'Relationship model can not be null');
this._model = model;
this._mindmap = mindmap;
this._id = mindplot.Command._nextUUID();
},
execute: function(commandContext)
{
var relationship = commandContext.createRelationship(this._model);
},
undoExecute: function(commandContext)
{
var relationship = commandContext.removeRelationship(this._model);
this._mindmap.removeRelationship(this._model);
}
});

View File

@ -25,6 +25,7 @@ mindplot.commands.DeleteTopicCommand = mindplot.Command.extend(
this._topicId = topicsIds;
this._deletedTopicModels = [];
this._parentTopicIds = [];
this._deletedRelationships = [];
this._id = mindplot.Command._nextUUID();
},
execute: function(commandContext)
@ -34,6 +35,15 @@ mindplot.commands.DeleteTopicCommand = mindplot.Command.extend(
function(topic, index)
{
var model = topic.getModel().clone();
//delete relationships
var relationships = topic.getRelationships();
while(relationships.length>0){
var relationship = relationships[0];
this._deletedRelationships.push(relationship.getModel().clone());
commandContext.removeRelationship(relationship.getModel());
}
this._deletedTopicModels.push(model);
// Is connected?.
@ -49,7 +59,7 @@ mindplot.commands.DeleteTopicCommand = mindplot.Command.extend(
commandContext.deleteTopic(topic);
}.bind(this)
)
);
},
undoExecute: function(commandContext)
{
@ -70,9 +80,14 @@ mindplot.commands.DeleteTopicCommand = mindplot.Command.extend(
}
}.bind(this)
)
);
this._deletedRelationships.forEach(
function(relationship, index){
commandContext.createRelationship(relationship);
}.bind(this));
this._deletedTopicModels = [];
this._parentTopicIds = [];
this._deletedRelationships = [];
}
});

View File

@ -0,0 +1,59 @@
mindplot.commands.MoveControlPointCommand = mindplot.Command.extend(
{
initialize: function(ctrlPointControler, point)
{
core.assert(ctrlPointControler, 'line can not be null');
this._ctrlPointControler = ctrlPointControler;
this._id = mindplot.Command._nextUUID();
this._wasCustom=false;
this._point = point;
this._controlPoint = null;
},
execute: function(commandContext)
{
var line = this._ctrlPointControler._line;
var ctrlPoints = line.getLine().getControlPoints();
var model = line.getModel();
var point = null;
switch (this._point){
case 0:
if(core.Utils.isDefined(model.getSrcCtrlPoint())){
this._controlPoint= model.getSrcCtrlPoint().clone();
}
model.setSrcCtrlPoint(ctrlPoints[0].clone());
this._wasCustom = line.getLine().isSrcControlPointCustom();
line.getLine().setIsSrcControlPointCustom(true);
break;
case 1:
if(core.Utils.isDefined(model.getDestCtrlPoint())){
this._controlPoint = model.getDestCtrlPoint().clone();
}
model.setDestCtrlPoint(ctrlPoints[1].clone());
this._wasCustom = line.getLine().isDestControlPointCustom();
line.getLine().setIsDestControlPointCustom(true);
break;
}
},
undoExecute: function(commandContext)
{
var line = this._ctrlPointControler._line;
var model = line.getModel();
switch (this._point){
case 0:
if(core.Utils.isDefined(this._controlPoint)){
model.setSrcCtrlPoint(this._controlPoint.clone());
line.getLine().setSrcControlPoint(this._controlPoint.clone());
line.getLine().setIsSrcControlPointCustom(this._wasCustom);
}
break;
case 1:
if(core.Utils.isDefined(this._controlPoint)){
model.setDestCtrlPoint(this._controlPoint.clone());
line.getLine().setDestControlPoint(this._controlPoint.clone());
line.getLine().setIsDestControlPointCustom(this._wasCustom);
}
break;
}
this._ctrlPointControler.setLine(line);
}
});

View File

@ -91,6 +91,7 @@
<include>${basedir}/target/tmp/peer/svg/Font-min.js</include>
<include>${basedir}/target/tmp/peer/svg/ArialFont-min.js</include>
<include>${basedir}/target/tmp/peer/svg/PolyLinePeer-min.js</include>
<include>${basedir}/target/tmp/peer/svg/CurvedLinePeer-min.js</include>
<include>${basedir}/target/tmp/peer/svg/TextPeer-min.js</include>
<include>${basedir}/target/tmp/peer/svg/WorkspacePeer-min.js</include>
<include>${basedir}/target/tmp/peer/svg/GroupPeer-min.js</include>
@ -109,6 +110,7 @@
<include>${basedir}/target/tmp/Image-min.js</include>
<include>${basedir}/target/tmp/Line-min.js</include>
<include>${basedir}/target/tmp/PolyLine-min.js</include>
<include>${basedir}/target/tmp/CurvedLine-min.js</include>
<include>${basedir}/target/tmp/Rect-min.js</include>
<include>${basedir}/target/tmp/Text-min.js</include>
<include>${basedir}/target/tmp/Toolkit-min.js</include>

View File

@ -0,0 +1,112 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
web2d.CurvedLine = function(attributes)
{
var peer = web2d.peer.Toolkit.createCurvedLine();
var defaultAttributes = {strokeColor:'blue',strokeWidth:1,strokeStyle:'solid',strokeOpacity:1};
for (var key in attributes)
{
defaultAttributes[key] = attributes[key];
}
web2d.Element.call(this, peer, defaultAttributes);
};
objects.extend(web2d.CurvedLine, web2d.Element);
web2d.CurvedLine.prototype.getType = function()
{
return "CurvedLine";
};
web2d.CurvedLine.prototype.setFrom = function(x, y)
{
this._peer.setFrom(x, y);
};
web2d.CurvedLine.prototype.setTo = function(x, y)
{
this._peer.setTo(x, y);
};
web2d.CurvedLine.prototype.getFrom = function()
{
return this._peer.getFrom();
};
web2d.CurvedLine.prototype.getTo = function()
{
return this._peer.getTo();
};
web2d.CurvedLine.prototype.setShowArrow = function(visible){
this._peer.setShowArrow(visible);
};
web2d.CurvedLine.prototype.isShowArrow = function(){
return this._peer.isShowArrow();
};
web2d.CurvedLine.prototype.setSrcControlPoint = function(control){
this._peer.setSrcControlPoint(control);
};
web2d.CurvedLine.prototype.setDestControlPoint = function(control){
this._peer.setDestControlPoint(control);
};
web2d.CurvedLine.prototype.getControlPoints = function(){
return this._peer.getControlPoints();
};
web2d.CurvedLine.prototype.isSrcControlPointCustom = function(){
return this._peer.isSrcControlPointCustom();
};
web2d.CurvedLine.prototype.isDestControlPointCustom = function(){
return this._peer.isDestControlPointCustom();
};
web2d.CurvedLine.prototype.setIsSrcControlPointCustom = function(isCustom){
this._peer.setIsSrcControlPointCustom(isCustom);
};
web2d.CurvedLine.prototype.setIsDestControlPointCustom = function(isCustom){
this._peer.setIsDestControlPointCustom(isCustom);
};
web2d.CurvedLine.prototype.updateLine= function(avoidControlPointFix){
return this._peer.updateLine(avoidControlPointFix);
};
web2d.CurvedLine.prototype.setStyle = function(style){
this._peer.setLineStyle(style);
};
web2d.CurvedLine.prototype.getStyle = function(){
return this._peer.getLineStyle();
};
web2d.CurvedLine.prototype.setDashed = function(length,spacing){
this._peer.setDashed(length, spacing);
};
web2d.CurvedLine.SIMPLE_LINE = false;
web2d.CurvedLine.NICE_LINE = true;

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
web2d.Line = function(attributes)
{
var peer = web2d.peer.Toolkit.createLine();
@ -44,6 +44,16 @@ web2d.Line.prototype.setTo = function(x, y)
this._peer.setTo(x, y);
};
web2d.Line.prototype.getFrom = function()
{
return this._peer.getFrom();
};
web2d.Line.prototype.getTo = function()
{
return this._peer.getTo();
};
/**
* Defines the start and the end line arrow style.
* Can have values "none | block | classic | diamond | oval | open | chevron | doublechevron"

View File

@ -74,9 +74,13 @@ web2d.peer.ToolkitVML =
{
return new web2d.peer.vml.LinePeer();
},
createPolyLine: function()
createCurvedLine: function()
{
return new web2d.peer.vml.PolyLinePeer();
return new web2d.peer.vml.CurvedLinePeer();
},
createCurvedLine: function()
{
return new web2d.peer.vml.CurvedLinePeer();
},
createImage: function ()
{
@ -135,6 +139,10 @@ web2d.peer.ToolkitSVG =
{
return new web2d.peer.svg.PolyLinePeer();
},
createCurvedLine: function()
{
return new web2d.peer.svg.CurvedLinePeer();
},
createText: function ()
{
return new web2d.peer.svg.TextPeer();

View File

@ -0,0 +1,223 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
web2d.peer.svg.CurvedLinePeer = function()
{
var svgElement = window.document.createElementNS(this.svgNamespace, 'path');
web2d.peer.svg.ElementPeer.call(this, svgElement);
this._style={fill:'gray'};
this._updateStyle();
this._customControlPoint_1 = false;
this._customControlPoint_2 = false;
this._control1=new core.Point();
this._control2=new core.Point();
this._lineStyle=true;
};
objects.extend(web2d.peer.svg.CurvedLinePeer, web2d.peer.svg.ElementPeer);
web2d.peer.svg.CurvedLinePeer.prototype.setSrcControlPoint = function(control){
this._customControlPoint_1 = true;
if(core.Utils.isDefined(control.x)){
this._control1 = control;
}
this._updatePath();
};
web2d.peer.svg.CurvedLinePeer.prototype.setDestControlPoint = function(control){
this._customControlPoint_2 = true;
if(core.Utils.isDefined(control.x)){
this._control2 = control;
}
this._updatePath();
};
web2d.peer.svg.CurvedLinePeer.prototype.isSrcControlPointCustom = function() {
return this._customControlPoint_1;
};
web2d.peer.svg.CurvedLinePeer.prototype.isDestControlPointCustom = function() {
return this._customControlPoint_2;
};
web2d.peer.svg.CurvedLinePeer.prototype.setIsSrcControlPointCustom = function(isCustom) {
this._customControlPoint_1 = isCustom;
};
web2d.peer.svg.CurvedLinePeer.prototype.setIsDestControlPointCustom = function(isCustom) {
this._customControlPoint_2 = isCustom;
};
web2d.peer.svg.CurvedLinePeer.prototype.getControlPoints = function(){
return [this._control1, this._control2];
};
web2d.peer.svg.CurvedLinePeer.prototype.setFrom = function(x1, y1)
{
if(this._customControlPoint_1 && core.Utils.isDefined(this._x1)){
this._control1.x-=this._x1-x1;
this._control1.y-=this._y1-y1;
}
this._x1 = x1;
this._y1 = y1;
this._updatePath();
};
web2d.peer.svg.CurvedLinePeer.prototype.setTo = function(x2, y2)
{
if(this._customControlPoint_2 && core.Utils.isDefined(this._x2)){
this._control2.x-=this._x2-x2;
this._control2.y-=this._y2-y2;
}
this._x2 = x2;
this._y2 = y2;
this._updatePath();
};
web2d.peer.svg.CurvedLinePeer.prototype.getFrom = function()
{
return new core.Point(this._x1,this._y1);
};
web2d.peer.svg.CurvedLinePeer.prototype.getTo = function()
{
return new core.Point(this._x2,this._y2);
};
web2d.peer.svg.CurvedLinePeer.prototype.setStrokeWidth = function(width)
{
this._style['stroke-width']= width;
this._updateStyle();
};
web2d.peer.svg.CurvedLinePeer.prototype.setColor = function(color)
{
this._style['stroke']= color;
this._style['fill']=color;
this._updateStyle();
};
web2d.peer.svg.CurvedLinePeer.prototype.updateLine = function(avoidControlPointFix){
this._updatePath(avoidControlPointFix);
};
web2d.peer.svg.CurvedLinePeer.prototype.setLineStyle = function (style){
this._lineStyle=style;
if(this._lineStyle){
this._style['fill']=this._fill;
} else {
this._fill = this._style['fill'];
this._style['fill']='none';
}
this._updateStyle();
this.updateLine();
};
web2d.peer.svg.CurvedLinePeer.prototype.getLineStyle = function (){
return this._lineStyle;
};
web2d.peer.svg.CurvedLinePeer.prototype.setShowArrow = function(visible){
this._showArrow =visible;
this.updateLine();
};
web2d.peer.svg.CurvedLinePeer.prototype.isShowArrow = function(){
return this._showArrow;
};
web2d.peer.svg.CurvedLinePeer.prototype._updatePath = function(avoidControlPointFix)
{
this._calculateAutoControlPoints(avoidControlPointFix);
var x,y, xp, yp;
if(this._showArrow){
if(this._control2.y == 0)
this._control2.y=1;
var y0 = parseInt(this._control2.y) - this._y2;
var x0 = parseInt(this._control2.x) - this._x2;
var x2=x0+y0;
var y2 = y0-x0;
var x3 = x0-y0;
var y3 = y0+x0;
var m = y2/x2;
var mp = y3/x3;
var l = 6;
var pow = Math.pow;
x = (x2==0?0:Math.sqrt(pow(l,2)/(1+pow(m,2))));
x *=Math.sign(x2);
y = (x2==0?l*Math.sign(y2):m*x);
xp = (x3==0?0:Math.sqrt(pow(l,2)/(1+pow(mp,2))));
xp *=Math.sign(x3);
yp = (x3==0?l*Math.sign(y3):mp*xp);
}
var path = "M"+this._x1+","+this._y1
+" C"+this._control1.x+","+this._control1.y+" "
+this._control2.x+","+this._control2.y+" "
+this._x2+","+this._y2+
(this._lineStyle?" "
+this._control2.x+","+(parseInt(this._control2.y)+3)+" "
+this._control1.x+","+(parseInt(this._control1.y)+3)+" "
+this._x1+","+(parseInt(this._y1)+3)+" Z"
:""
)+
(this._showArrow?" "
+"M"+this._x2+","+this._y2+" "
+"L"+(x+this._x2)+","+(y+this._y2)
+"M"+this._x2+","+this._y2+" "
+"L"+(xp+this._x2)+","+(yp+this._y2)
:"");
this._native.setAttribute("d",path);
};
web2d.peer.svg.CurvedLinePeer.prototype._updateStyle = function()
{
var style = "";
for(var key in this._style){
style+=key+":"+this._style[key]+" ";
}
this._native.setAttribute("style",style);
};
web2d.peer.svg.CurvedLinePeer.prototype._calculateAutoControlPoints = function(avoidControlPointFix){
if(core.Utils.isDefined(this._x1) && core.Utils.isDefined(this._x2)){
//Both points available, calculate real points
var defaultpoints = core.Utils.calculateDefaultControlPoints(new core.Point(this._x1, this._y1),new core.Point(this._x2,this._y2));
if(!this._customControlPoint_1 && !(core.Utils.isDefined(avoidControlPointFix) && avoidControlPointFix==0)){
this._control1.x = defaultpoints[0].x;
this._control1.y = defaultpoints[0].y;
}
if(!this._customControlPoint_2 && !(core.Utils.isDefined(avoidControlPointFix) && avoidControlPointFix==1)){
this._control2.x = defaultpoints[1].x;
this._control2.y = defaultpoints[1].y;
}
}
};
web2d.peer.svg.CurvedLinePeer.prototype.setDashed = function(length,spacing){
if(core.Utils.isDefined(length) && core.Utils.isDefined(spacing)){
this._native.setAttribute("stroke-dasharray",length+","+spacing);
} else {
this._native.setAttribute("stroke-dasharray","");
}
};

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
web2d.peer.svg.LinePeer = function()
{
var svgElement = window.document.createElementNS(this.svgNamespace, 'line');
@ -28,16 +28,29 @@ objects.extend(web2d.peer.svg.LinePeer, web2d.peer.svg.ElementPeer);
web2d.peer.svg.LinePeer.prototype.setFrom = function(x1, y1)
{
this._x1=x1;
this._y1=y1;
this._native.setAttribute('x1', x1);
this._native.setAttribute('y1', y1);
};
web2d.peer.svg.LinePeer.prototype.setTo = function(x2, y2)
{
this._x2=x2;
this._y2=y2;
this._native.setAttribute('x2', x2);
this._native.setAttribute('y2', y2);
};
web2d.peer.svg.LinePeer.prototype.getFrom = function(){
return new core.Point(this._x1,this._y1);
};
web2d.peer.svg.LinePeer.prototype.getTo = function(){
return new core.Point(this._x2,this._y2);
};
/*
* http://www.zvon.org/HowTo/Output/howto_jj_svg_27.html?at=marker-end
*/

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
web2d.peer.svg.PolyLinePeer = function()
{
var svgElement = window.document.createElementNS(this.svgNamespace, 'polyline');
@ -82,7 +82,7 @@ web2d.peer.svg.PolyLinePeer.prototype._updateStraightPath = function()
{
if (core.Utils.isDefined(this._x1) && core.Utils.isDefined(this._x2) && core.Utils.isDefined(this._y1) && core.Utils.isDefined(this._y2))
{
this.buildStraightPath(this.breakDistance, this._x1, this._y1, this._x2, this._y2);
var path = web2d.PolyLine.buildStraightPath(this.breakDistance, this._x1, this._y1, this._x2, this._y2);
this._native.setAttribute('points', path);
}
};

View File

@ -0,0 +1,116 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--[if gte IE 9]>
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<![endif]-->
<script type="text/javascript">
web2d = {
peer: {}
};
web2d.peer =
{
svg: {},
vml: {}
};
web2d.peer.utils = {};
</script>
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="../../../../../core-js/target/classes/core.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/EventDispatcher.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/ElementPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/ElementPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Element.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Workspace.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/WorkspacePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/WorkspacePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Toolkit.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Elipse.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/ElipsePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/ElipsePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Line.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/LinePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/LinePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/PolyLine.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/CurvedLine.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/PolyLinePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/PolyLinePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/CurvedLinePeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Group.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/GroupPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/GroupPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Rect.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/RectPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/RectPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Text.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/TextPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/TextPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/TextBoxPeer.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/utils/TransformUtils.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/utils/EventUtils.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/Font.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/Font.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/Font.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/TahomaFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/TimesFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/ArialFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/svg/VerdanaFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/TahomaFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/TimesFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/ArialFont.js"></script>
<script type="text/javascript" src="../../../../src/main/javascript/peer/vml/VerdanaFont.js"></script>
<script type="text/javascript" src="utils.js"></script>
<script type="text/javascript">
function initialize(){
web2d.peer.Toolkit.init();
var overflowWorkspace = new web2d.Workspace({fillColor:'green'});
overflowWorkspace.setSize("200px", "200px");
line1 = new web2d.CurvedLine();
line1.setStyle(web2d.CurvedLine.SIMPLE_LINE);
line1.setFrom(200, 200);
line1.setTo(100, 100);
// line1.setControlPoints({x:150,y:100},{x:150,y:200});
overflowWorkspace.appendChild(line1);
overflowWorkspace.addItAsChildTo($("overflowExample"));
}
</script>
</head>
<body onload="initialize();">
<h1>PolyLines Render Tests </h1>
<table border="1">
<colgroup style="width:80%;">
<col style="width:30%"/>
<col style="width:60%"/>
</colgroup>
<tr>
<td>
Different types of PolyLines that can be used.
</td>
<td>
<div id="overflowExample"/>
</td>
</tr>
<tr>
<td>
This is how multiple childs will look in each style line
</td>
<td>
<div id="multipleLineExample"/>
</td>
</tr>
</table>
</body>
</html>

View File

@ -417,7 +417,7 @@
</execution>
</executions>
</plugin>
<plugin>
<!-- <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
@ -439,7 +439,7 @@
</wsdlFiles>
</configuration>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>

View File

@ -83,7 +83,7 @@ public final class Mailer {
}
};
this.mailSender.send(preparator);
//this.mailSender.send(preparator);
}
public void setMailSender(JavaMailSender mailer) {

View File

@ -1,22 +1,22 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
package com.wisemapping.service;
import com.wisemapping.dao.UserManager;
@ -24,6 +24,7 @@ import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.mail.Mailer;
import com.wisemapping.model.User;
import com.wisemapping.model.Colaborator;
import org.apache.log4j.Logger;
import java.util.Calendar;
import java.util.HashMap;
@ -35,6 +36,7 @@ public class UserServiceImpl
private UserManager userManager;
private MindmapService mindmapService;
private Mailer mailer;
final static Logger logger = Logger.getLogger("org.wisemapping.service");
public void activateAcount(long code)
throws InvalidActivationCodeException
@ -113,6 +115,7 @@ public class UserServiceImpl
model.put("user", user);
// TODO: ver como no hacer hardcode el url
final String activationUrl = "http://wisemapping.com/c/activation.htm?code=" + user.getActivationCode();
logger.info("create User - acrivationUrl: "+activationUrl);
model.put("emailcheck", activationUrl);
mailer.sendEmail(mailer.getRegistrationEmail(), user.getEmail(), "Welcome to Wisemapping!", model,
"confirmationMail.vm");

View File

@ -1,160 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
package com.wisemapping.ws;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.apache.log4j.Logger;
import com.wisemapping.service.MindmapService;
import com.wisemapping.service.UserService;
import com.wisemapping.model.MindMap;
import com.wisemapping.model.User;
import com.wisemapping.exceptions.NoMapFoundException;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Calendar;
/**
* WiseMapping Web Services API
*/
@Endpoint
public class WiseWsEndpoint {
MindmapService mindmapService;
private UserService userService;
final static Logger logger = Logger.getLogger("org.wisemapping.ws");
private JAXBContext jaxbContext;
public WiseWsEndpoint(MindmapService mindmapService, UserService userService) throws JAXBException {
this.mindmapService = mindmapService;
this.userService = userService;
jaxbContext = JAXBContext.newInstance("com.wisemapping.ws");
}
@PayloadRoot(localPart = "loadMindmapRequest", namespace = "http://www.wisemapping.org/ws")
public LoadMindmapResponse loadMindmap(final LoadMindmapRequest request) throws Throwable {
logger.debug("Invoking loadMindmap");
final LoadMindmapResponse result = new LoadMindmapResponse();
try {
final MindMap mindmap = mindmapService.getMindmapById((int) request.getMapdId());
if(mindmap==null)
{
throw new NoMapFoundException(request.getMapdId());
}
String xml = mindmap.getNativeXml();
// Hack, we need to unify to only one XSD schema definitions per map ...
xml = "<map xmlns=\"http://www.wisemapping.org/mindmap\"" + xml.substring(4,xml.length());
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
final StringReader stringReader = new StringReader(xml);
final StreamSource streamSource = new StreamSource(stringReader);
final JAXBElement<MapType> mapElement = unmarshaller.unmarshal(streamSource,MapType.class);
// Load map data ...
result.creator = mindmap.getCreator();
result.setMap(mapElement.getValue());
} catch (Throwable e) {
logger.fatal("Unexpexted Exception", e);
throw e;
}
return result;
}
@PayloadRoot(localPart = "addMindmapRequest", namespace = "http://www.wisemapping.org/ws")
public AddMindmapResponse createMindmap(final AddMindmapRequest request) throws Throwable {
logger.debug("Invoking createMindmap");
final AddMindmapResponse response = new AddMindmapResponse();
try {
final String creator = request.getCreator();
final User user = userService.getUserBy(creator);
if(user==null)
{
throw new IllegalArgumentException("Invalid addMindmapRequest.' " + creator+"' is not valid wisemapping user.");
}
final MindMap mindmap = new MindMap();
mindmap.setCreationTime(Calendar.getInstance());
// Set title ...
final String title = request.getTitle();
if(title==null)
{
throw new IllegalArgumentException("Invalid addMindmapRequest. Title element can not be null.");
}
mindmap.setTitle(title);
// Set description ...
final String description = request.getDescription();
if(description==null)
{
throw new IllegalArgumentException("Invalid addMindmapRequest. Description element can not be null.");
}
mindmap.setDescription(description);
// Convert Map to XML
final MapType mapType = request.getMap();
if(mapType==null)
{
throw new IllegalArgumentException("Invalid addMindmapRequest. Map element can not be null.");
}
ObjectFactory factory = new ObjectFactory();
final Marshaller marshaller = jaxbContext.createMarshaller();
StringWriter stringWriter = new StringWriter();
marshaller.marshal(factory.createMap(mapType),stringWriter);
mindmap.setNativeXml(stringWriter.toString());
mindmapService.addMindmap(mindmap,user);
// Prepare result ...
response.setMapId(mindmap.getId());
} catch (Throwable e) {
logger.fatal("Unexpexted Exception", e);
throw e;
}
return response;
}
public MindmapService getMindmapService() {
return mindmapService;
}
public void setMindmapService(MindmapService mindmapService) {
this.mindmapService = mindmapService;
}
}

View File

@ -10,11 +10,12 @@
<xsd:complexType name="mapType">
<xsd:sequence>
<xsd:element ref="topic" minOccurs="1" maxOccurs='unbounded'/>
<xsd:element ref="relationship" minOccurs="0" maxOccurs='unbounded'/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="version" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="topic" type="topicType"/>
<xsd:complexType name="topicType">
@ -32,6 +33,7 @@
<xsd:attribute name="order" type="xsd:int"/>
<xsd:attribute name="position" type="xsd:string"/>
<xsd:attribute name="central" type="xsd:boolean"/>
<xsd:attribute name="id" type="xsd:ID" use="optional"/>
</xsd:complexType>
<xsd:complexType name="icon">
@ -48,4 +50,15 @@
<xsd:attribute name="text" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="relationship" type="relationshipType"/>
<xsd:complexType name="relationshipType">
<xsd:attribute name="id" type="xsd:ID"/>
<xsd:attribute name="srcTopicId" type="xsd:ID"/>
<xsd:attribute name="destTopicId" type="xsd:ID"/>
<xsd:attribute name="lineType" type="xsd:string"/>
<xsd:attribute name="srcCtrlPoint" type="xsd:string"/>
<xsd:attribute name="destCtrlPoint" type="xsd:string"/>
<xsd:attribute name="endArrow" type="xsd:boolean"/>
</xsd:complexType>
</xsd:schema>

View File

@ -216,11 +216,11 @@ div#node {
}
div#font {
left: 619px; /*left:581px;*/
left: 656px; /*left:581px;*/
}
div#share {
left: 815px; /*left:777px;*/
left: 852px; /*left:777px;*/
}
div#saveButton {
@ -311,6 +311,12 @@ div#topicLink {
z-index: 4;
}
div#topicRelation {
background: url(../images/topic_link.png) no-repeat center top;
behavior: url(../css/iepngfix.htc);
z-index: 4;
}
div#topicNote {
background-image: url(../images/note.png);
behavior: url(../css/iepngfix.htc);

View File

@ -269,7 +269,7 @@ function afterMindpotLibraryLoading()
designer.deleteCurrentNode();
});
var context = this;
var colorPicker1 = new MooRainbow('topicColor', {
/*var colorPicker1 = new MooRainbow('topicColor', {
id: 'topicColor',
imgPath: '../images/',
startColor: [255, 255, 255],
@ -298,12 +298,16 @@ function afterMindpotLibraryLoading()
onComplete: function(color) {
removeCurrentColorPicker.attempt(colorPicker2, context);
}
});
});*/
$('topicLink').addEvent('click', function(event) {
designer.addLink2SelectedNode();
});
$('topicRelation').addEvent('click', function(event) {
designer.addRelationShip2SelectedNode(event);
});
$('topicNote').addEvent('click', function(event) {
designer.addNote2SelectedNode();
@ -318,7 +322,7 @@ function afterMindpotLibraryLoading()
designer.setStyle2SelectedNode();
});
var colorPicker3 = new MooRainbow('fontColor', {
/*var colorPicker3 = new MooRainbow('fontColor', {
id: 'fontColor',
imgPath: '../images/',
startColor: [255, 255, 255],
@ -332,7 +336,7 @@ function afterMindpotLibraryLoading()
onComplete: function(color) {
removeCurrentColorPicker.attempt(colorPicker3, context);
}
});
});*/
// Save event handler ....
var saveButton = $('saveButton');
@ -520,7 +524,6 @@ function buildMindmapDesigner()
var container = $('mindplot');
// Initialize Editor ...
var persistantManager = new mindplot.PersistanceManager(window.MapEditorService);
var screenWidth = window.getWidth();
var screenHeight = window.getHeight();
@ -533,7 +536,7 @@ function buildMindmapDesigner()
editorProperties.width = screenWidth;
editorProperties.height = screenHeight;
designer = new mindplot.MindmapDesigner(editorProperties, container, persistantManager);
designer = new mindplot.MindmapDesigner(editorProperties, container);
designer.loadFromXML(mapId, mapXml);
// If a node has focus, focus can be move to another node using the keys.

View File

@ -67,7 +67,6 @@ function buildMindmapDesigner()
var container = $('mindplot');
// Initialize Editor ...
var persistantManager = new mindplot.PersistanceManager(window.MapEditorService);
var screenWidth = window.getWidth();
var screenHeight = window.getHeight();
@ -77,7 +76,7 @@ function buildMindmapDesigner()
editorProperties.height = screenHeight;
editorProperties.viewMode = true;
designer = new mindplot.MindmapDesigner(editorProperties, container, persistantManager);
designer = new mindplot.MindmapDesigner(editorProperties, container);
designer.loadFromXML(mapId, mapXml);
// If a node has focus, focus can be move to another node using the keys.

View File

@ -15,9 +15,10 @@
</form>
</div>
</div>
<%--
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2347723-1";
urchinTracker();
</script>
</script>--%>

View File

@ -1,3 +1,4 @@
<%@page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

View File

@ -192,6 +192,9 @@
<div id="topicLink" class="button" title="<spring:message code="TOPIC_LINK"/>">
<div class="toolbarLabel"><p><spring:message code="LINK"/></p></div>
</div>
<div id="topicRelation" class="button" title="<spring:message code="TOPIC_RELATIONSHIP"/>">
<div class="toolbarLabel"><p><spring:message code="TOPIC_RELATIONSHIP"/></p></div>
</div>
</fieldset>
</div>
<div id="font" class="buttonContainer" title="Font Properties">
@ -332,11 +335,11 @@
<script type="text/javascript" src="../dwr/interface/MapEditorService.js"></script>
</c:if>
<script type="text/javascript" src="../js/editor.js"></script>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
<%--<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2347723-1";
urchinTracker();
</script>
</script>--%>
</body>
</html>

View File

@ -1,4 +1,5 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<%@page pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://struts.apache.org/tags-tiles" %>
<%@ include file="/jsp/init.jsp" %>

View File

@ -1,100 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: file 64488 2006-03-10 17:32:09Z paulo $
*/
package com.wisemapping.ws.test;
import org.testng.annotations.Test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.net.MalformedURLException;
import java.io.StringWriter;
import java.util.List;
import com.wisemapping.ws.*;
@Test(groups = {"wsintegration"})
public class WiseWebServicesTest {
@Test(dependsOnMethods = "addMapTest")
public void loadMapTest() throws MalformedURLException, JAXBException {
final WiseServicesPortTypeService portTypeService = new WiseServicesPortTypeService();
final WiseServicesPortType servicesPortType = portTypeService.getWiseServicesPortTypeSoap11();
final LoadMindmapRequest request = new LoadMindmapRequest();
request.setMapdId(1);
LoadMindmapResponse response = servicesPortType.loadMindmap(request);
JAXBContext jc = JAXBContext.newInstance("com.wisemapping.ws.test");
Marshaller marshaller = jc.createMarshaller();
final StringWriter xmlContext = new StringWriter();
marshaller.marshal(response,xmlContext);
System.out.println("Response:"+xmlContext);
}
public void addMapTest() throws MalformedURLException, JAXBException {
final WiseServicesPortTypeService portTypeService = new WiseServicesPortTypeService();
final WiseServicesPortType servicesPortType = portTypeService.getWiseServicesPortTypeSoap11();
final AddMindmapRequest request = new AddMindmapRequest();
request.setCreator("test@wisemapping.org");
request.setTitle("MyFirstMap");
request.setDescription("My First Map Description");
// Set Map ...
MapType sampleMap = createMockMap();
request.setMap(sampleMap);
AddMindmapResponse response = servicesPortType.addMindmap(request);
JAXBContext jc = JAXBContext.newInstance("com.wisemapping.ws.test");
Marshaller marshaller = jc.createMarshaller();
final StringWriter xmlContext = new StringWriter();
marshaller.marshal(response,xmlContext);
System.out.println("Response:"+xmlContext);
}
private MapType createMockMap() {
ObjectFactory factory = new ObjectFactory();
MapType mapType = factory.createMapType();
mapType.setName("map name");
TopicType topicType = factory.createTopicType();
topicType.setCentral(true);
topicType.setText("Central topic value");
List<TopicType> topics = mapType.getTopic();
topics.add(topicType);
return mapType;
}
}