Hello,
Sorry, I meant to post the code but went and debug some more and forgot
about it. It seems that the first runnable(one from the first loop) call to
create the tspan grabs the next element(ie second loops element) and not the
one that called it. Here is the code(sorry its so messy):
private void jButtonInsertActionPerformed(java.awt.event.ActionEvent evt) {
final DrawingPanel drawingPanel = main.getActiveDrawingPanel();
ListIterator<APTElement> li =
main.getActiveDrawing().getSelectedAPTElements().listIterator();
while (li.hasNext()) {
APTElement aptElement = li.next();
System.out.println("id: " + aptElement.getElementId());
Point2D.Double dataNode = aptElement.getDataNode();
final double x = dataNode.getX();
final double y = dataNode.getY();
drawingPanel.placeTextBySelection(finalTextPanel, x, y);
}
}
public void placeTextBySelection(TextPanel textPanel, double x, double y) {
if (textPanel.isCell()) {
Vector textContent = textPanel.getTextCellContent();
if (textContent.size() > 0)
placeCellText(textPanel, textContent, x, y);
} else {
TextBoxElementContent textBoxElementContent =
textPanel.getNoteTextBoxElementContent();
if (textBoxElementContent != null)
placeNoteText(textPanel, textBoxElementContent, x, y);
}
}
private void placeCellText(TextPanel textPanel, Vector textContent, double
x, double y) {
final Layer layer = addLayerToDrawing(textPanel.getLayerName());
if(layer.isLocked()){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
JOptionPane.showMessageDialog(parent, "Icon's target
layer, " +
layer.getLayerName() + ", is locked!");
}
});
return;
}
long textBoxElementID = -1;
try{
textBoxElementID =
APTElement.getNextElementId(parent.getConnection());
}
catch(SQLException sql){
JOptionPane.showMessageDialog(parent, "SQL Error getting next
available " +
"elementId for new TextBox: " + sql.getMessage());
parent.safeExit();
}
String elementName = layer.getLayerName() + "_" +
Long.toString(textBoxElementID);
Attribute textBoxAttribute = textPanel.getSelectedAttribute();
TextBoxElement textBoxElement = new TextBoxElement(textBoxElementID,
elementName,
x, y, layer, null, textBoxAttribute);
System.out.println("textBoxElement id: " +
textBoxElement.getElementId());
final DrawingPanel finalDrawingPanel = this;
final Vector temp = textContent;
final Connection con = parent.getConnection();
final DrawingPanel dp = this;
textBoxElement.addNew(finalDrawingPanel,
parent.getConnection()); //see method below
} catch(SQLException sqlex){
sqlex.printStackTrace();
JOptionPane.showMessageDialog(parent, "SQL Error adding
TextBox Element: " +
sqlex.getMessage());
parent.safeExit();
}
SVGDocument doc =
textBoxElement.getLayer().getDrawing().getSVGDocument();
Element element =
doc.getElementById(Long.toString(textBoxElement.getElementId()));
System.out.println("element: " + element);
final Vector textContentClone = (Vector)temp.clone();
while (textContentClone.size() > 0) {
System.out.println("begin while " +
textBoxElement.getElementId());
final TextBoxElementContent firstTextBoxElementContent =
(TextBoxElementContent)textContentClone.remove(0);
textBoxElement.addTextBoxElementContentToTextBoxElement(firstTextBoxElementContent);
addTexts(textBoxElement, firstTextBoxElementContent);
//see method below
for (int i = 0; i < textContentClone.size(); i++) {
System.out.println("begin for " +
textBoxElement.getElementId());
final TextBoxElementContent
secondTextBoxElementContent =
(TextBoxElementContent)textContentClone.elementAt(i);
if (firstTextBoxElementContent.getRow() ==
secondTextBoxElementContent.getRow()) {
textContentClone.remove(secondTextBoxElementContent);
textBoxElement.addTextBoxElementContentToTextBoxElement(secondTextBoxElementContent);
addTexts(textBoxElement,
secondTextBoxElementContent);
break;
}
System.out.println("end for " +
textBoxElement.getElementId());
}
System.out.println("end while " +
textBoxElement.getElementId());
}
final TextBoxElement finalTextBoxElement = textBoxElement;
getUpdateManager().getUpdateRunnableQueue().invokeLater(new Runnable(){
public void run(){
System.out.println("begin last runnable " +
finalTextBoxElement.getElementId());
//update the text box dimensions
finalTextBoxElement.wrapCellTextBoxToContents();
//recenter the datanode
Point2D.Double centroid = finalTextBoxElement.getCentroid();
finalTextBoxElement.getDataNode().setLocation(centroid);
try{
finalTextBoxElement.update(dp, con);
con.commit();
con.setAutoCommit(true);
} catch(SQLException s){
s.printStackTrace();
JOptionPane.showMessageDialog(parent, "SQL error
updating " +
"text box: " + s.getMessage());
parent.safeExit();
}
System.out.println("end last runnable " +
finalTextBoxElement.getElementId());
dp.setIsThreadFinish(true);
}
});
}
//textBoxElement.addnew
public void addNew(JSVGCanvas canvas, Connection con) throws SQLException{
if(con != null){
boolean conStatus = con.getAutoCommit();
if(conStatus){
con.setAutoCommit(false);
}
super.addNew(con);
TextBoxElementDA.addNew(this, con);
if(conStatus){
con.commit();
con.setAutoCommit(true);
}
}
//update SVG; if canvas isn't null update via update manager
if(canvas == null){
TextBoxElementSVGDA.addNew(this);
}
else{
final TextBoxElement me = this;
// try {
//
canvas.getUpdateManager().getUpdateRunnableQueue().invokeAndWait(new
Runnable() {
canvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(new
Runnable(){
public void run(){
//this addnew method in here just acces svg and creates the text element no
more runnable in here
System.out.println("b4 TextBoxElementSVGDA.addNew(me) "
+ me.getElementId());
TextBoxElementSVGDA.addNew(me);
System.out.println("after TextBoxElementSVGDA.addNew(me)
" + me.getElementId());
}
});
}
}
private void addTexts(TextBoxElement textBoxElement, TextBoxElementContent
textBoxElementContent) {
System.out.println("begin addTexts " +
textBoxElement.getElementId());
if (textBoxElementContent instanceof TextBoxElementRecordContent){
TextBoxElementRecordContent textBoxElementRecordContent =
(TextBoxElementRecordContent)textBoxElementContent;
APTElement spaceElement;
try {
spaceElement = getSpaceElement(textBoxElement);
textBoxElementRecordContent.setRefId(spaceElement.getElementId());
textBoxElementRecordContent.refreshText(parent.getConnection());
} catch (Exception ex) {
ex.printStackTrace();
}
}
try{
Connection con = parent.getConnection();
DrawingPanel dp = this;
con.setAutoCommit(false);
textBoxElementContent.addNew(dp, con, true); //see method below
final TextBoxElementContent finalTextBoxElementContent =
textBoxElementContent;
//update the text box and contents
dp.getUpdateManager().getUpdateRunnableQueue().invokeLater(new
Runnable(){
public void run(){
System.out.println("b4
finalTextBoxElementContent.refreshComputedWidth() " +
finalTextBoxElementContent.getTextBoxElement().getElementId());
//update the computed text width for the new content
finalTextBoxElementContent.refreshComputedWidth();
System.out.println("after
finalTextBoxElementContent.refreshComputedWidth() " +
finalTextBoxElementContent.getTextBoxElement().getElementId());
}
});
} catch(SQLException sqlex){
sqlex.printStackTrace();
JOptionPane.showMessageDialog(parent, "SQL Error adding new text
content to " +
"text box: " + sqlex.getMessage());
parent.safeExit();
}
System.out.println("end addTexts " + textBoxElement.getElementId());
}
//textBoxElementContent.addNew
public void addNew(final JSVGCanvas canvas, final Connection con,
boolean updateSVG) throws SQLException{
System.out.println("begin TextBoxElementContent addnew " +
getTextBoxElement().getElementId());
if(con != null){
TextBoxElementContentDA.addNew(this, con);
}
//update SVG; if canvas isn't null update via update manager
if(!updateSVG){
return;
}
if(canvas == null){
TextBoxElementContentSVGDA.addNew(this);
}
else{
final TextBoxElementContent me = this;
canvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(new
Runnable(){
public void run(){
//this method just access svg and creates the tspan element no more runnable
access
System.out.println("b4
TextBoxElementContentSVGDA.addNew(me) " +
me.getTextBoxElement().getElementId());
TextBoxElementContentSVGDA.addNew(me);
System.out.println("after
TextBoxElementContentSVGDA.addNew(me) " +
me.getTextBoxElement().getElementId());
}
});
}
System.out.println("end TextBoxElementContent addnew " +
getTextBoxElement().getElementId());
}
--
View this message in context:
http://www.nabble.com/invokelater-thread-issue--tf4319567.html#a12315257
Sent from the Batik - Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]