data.addTextBox(new DBTextBox(str, tx, ty, tx2, ty2, border, str2, t2, StringUtils.int2color(t), desc));
data.addTextBox(new DBTextBox(str, tx, ty, tx2, ty2, border, str2, t2, t3, StringUtils.int2color(t), desc));
public static String processComment(DBData rootData, StreamTokenizer tokenizer, String fileName) throws Exception {   if ((rootData==null) || !tokenizer.sval.equals(DBConstants.layoutDataString)) {	// comment	 String comment = tokenizer.sval;	 	 tokenizer.wordChars(32, 255);			 tokenizer.wordChars('\t', '\t');	 	 while ((tokenizer.nextToken() != tokenizer.TT_EOL) &&						// read till EOL		    (tokenizer.ttype != tokenizer.TT_EOF))	 	if (tokenizer.ttype == tokenizer.TT_NUMBER) {		 	if (!comment.equals(nullString)) comment+=SPACE;	 		comment=comment+tokenizer.nval;	 	}		else {		 	if (!comment.equals(nullString)) comment+=SPACE;			comment=comment+tokenizer.sval;		}	 initializeTokenizer(tokenizer);	 return comment+NL; } else {																		// graphics layout data		// only template definition od depth 1 are supported	// (use stack od DBData-s otherwise)	DBData data = null;	if (templateData!=null)		data = templateData.getData();	else		data = rootData;	 DBRecordData rd;	 DBFieldData fd; 	 String str, str2, desc; int t, tx, tx2, ty, ty2, t2; 	 boolean r1, r2; 	 while ((tokenizer.nextToken() != tokenizer.TT_EOL) &&		    (tokenizer.ttype != tokenizer.TT_EOF)) 		if (tokenizer.ttype == tokenizer.TT_WORD) 				if (tokenizer.sval.equalsIgnoreCase(VDCTRECORD)) {					// read record_name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					rd = (DBRecordData)(data.getRecords().get(str));					if (rd!=null) {						// read x pos						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setX((int)tokenizer.nval);						else throw (new DBGParseException(errorString, tokenizer, fileName));											// read y pos						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setY((int)tokenizer.nval);						else throw (new DBGParseException(errorString, tokenizer, fileName));						// read color						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setColor(StringUtils.int2color((int)tokenizer.nval));						else throw (new DBGParseException(errorString, tokenizer, fileName));						// read rotation						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setRotated(((int)tokenizer.nval)!=0);						else throw (new DBGParseException(errorString, tokenizer, fileName));												// read description						tokenizer.nextToken();						if ((tokenizer.ttype == tokenizer.TT_WORD)||							(tokenizer.ttype == DBConstants.quoteChar)) rd.setDescription(tokenizer.sval);						else throw (new DBGParseException(errorString, tokenizer, fileName));					}				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTFIELD)) {					// read name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					int pos = str.lastIndexOf(com.cosylab.vdct.Constants.FIELD_SEPARATOR);					str2 = str.substring(pos+1);					str = str.substring(0, pos);					rd = (DBRecordData)data.getRecords().get(str);					if (rd!=null)					{						fd=(DBFieldData)rd.getFields().get(str2);						if (fd==null)						{							fd = new DBFieldData(str2, nullString);							rd.addField(fd);						}													// read color						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) fd.setColor(StringUtils.int2color((int)tokenizer.nval));						else throw (new DBGParseException(errorString, tokenizer, fileName));						// read rotation						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) fd.setRotated(((int)tokenizer.nval)!=0);						else throw (new DBGParseException(errorString, tokenizer, fileName));												// read description						tokenizer.nextToken();						if ((tokenizer.ttype == tokenizer.TT_WORD)||							(tokenizer.ttype == DBConstants.quoteChar)) fd.setDescription(tokenizer.sval);						else throw (new DBGParseException(errorString, tokenizer, fileName));												}				}								else if (tokenizer.sval.equalsIgnoreCase(VDCTVISIBILITY)) {					// read name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					int pos = str.lastIndexOf(com.cosylab.vdct.Constants.FIELD_SEPARATOR);					str2 = str.substring(pos+1);					str = str.substring(0, pos);					rd = (DBRecordData)data.getRecords().get(str);					if (rd!=null)					{						fd=(DBFieldData)rd.getFields().get(str2);						if (fd==null)						{							fd = new DBFieldData(str2, nullString);							rd.addField(fd);						}													tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) fd.setVisibility((int)tokenizer.nval);						else throw (new DBGParseException(errorString, tokenizer, fileName));					}				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTCONNECTOR)) {					// read connector id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read target id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addConnector(new DBConnectorData(str, str2, tx, ty, StringUtils.int2color(t), desc));				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTLINK)) {										// read name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));									// read target					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addLink(new DBLinkData(str, str2));										}								else if (tokenizer.sval.equalsIgnoreCase(VDCTGROUP)) {					// read group_name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addGroup(new DBGroupData(str, tx, ty, StringUtils.int2color(t), desc));				}				else if (tokenizer.sval.equalsIgnoreCase(TEMPLATE_START)) {					// nested tempaltes					if (templateData!=null)						throw (new DBGParseException("Nested template definitions!", tokenizer, fileName));											templateData = new DBTemplate();					// generate template id from fileName					File file = new File(fileName);					String id = null;					// read optional id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) id=tokenizer.sval;					else					{						id = file.getName();						tokenizer.pushBack();					}										// remove spaces and extension					id = id.replace(' ', '_');					int pos = id.lastIndexOf('.');					if (pos>0)						id = id.substring(0, pos);										// set data					templateData.setId(id);					templateData.setDescription(id);		// default					templateData.setFileName(file.getAbsolutePath());					data = templateData.getData();			// redirect				}				else if (tokenizer.sval.equalsIgnoreCase(TEMPLATE_INSTANCE)) {					// read template id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read template class id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addTemplateInstance(new DBTemplateInstance(str, str2, tx, ty, StringUtils.int2color(t), desc));				}				else if (tokenizer.sval.equalsIgnoreCase(TEMPLATE_PROPERTY)) {					// read template id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read value					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					DBTemplateInstance ti = (DBTemplateInstance)data.getTemplateInstances().get(str);					if (ti!=null)						ti.getProperties().put(str2, desc);									}				else if (tokenizer.sval.equalsIgnoreCase(TEMPLATE_VALUE)) {					// read template id					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read field alias					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read value					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					DBTemplateInstance ti = (DBTemplateInstance)data.getTemplateInstances().get(str);					if (ti!=null)						ti.getValues().put(str2, desc);									}				else if (templateData!=null && tokenizer.sval.equalsIgnoreCase(TEMPLATE_DESC)) {					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// set data					templateData.setDescription(str);				}				else if (templateData!=null && tokenizer.sval.equalsIgnoreCase(TEMPLATE_INPUT)) {					// read alias					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read field name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// set data					templateData.getInputs().put(str, str2);					templateData.getInputComments().put(str, desc);				}				else if (templateData!=null && tokenizer.sval.equalsIgnoreCase(TEMPLATE_OUTPUT)) {					// read alias					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read field name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// set data					templateData.getOutputs().put(str, str2);					templateData.getOutputComments().put(str, desc);				}				else if (templateData!=null && tokenizer.sval.equalsIgnoreCase(TEMPLATE_END)) {					data = rootData;					templateEnd(data);				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTLINE)) {					// read template name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read dashed					boolean dashed = false;					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) dashed=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read startArrow					boolean startArrow = false;					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) startArrow=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read endArrow					boolean endArrow = false;					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) endArrow=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addLine(new DBLine(str, tx, ty, tx2, ty2, dashed, startArrow, endArrow, StringUtils.int2color(t)));				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTBOX)) {					// read template name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read dashed					boolean dashed = false;					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) dashed=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addBox(new DBBox(str, tx, ty, tx2, ty2, dashed, StringUtils.int2color(t)));				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTTEXTBOX)) {					// read template name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read border					boolean border = false;					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) border=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read fontName					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str2=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read fontSize pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read color					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) t=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read description					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addTextBox(new DBTextBox(str, tx, ty, tx2, ty2, border, str2, t2, StringUtils.int2color(t), desc));				}				else if (tokenizer.sval.equalsIgnoreCase(VDCTSKIP)) {					// read optional n of lines					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else					{						tx = 1; 						tokenizer.pushBack();					}											// skip tx lines (including the rest of this one)					skipLines(tx+1, tokenizer, fileName);				}				/***************************************************/				/************* Version v1.0 support ****************/				/***************************************************/								/****************** layout data ********************/				else if (tokenizer.sval.equalsIgnoreCase("VDCTRecordPos")) {					// read record_name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					rd = (DBRecordData)(data.records.get(str));					if (rd!=null) {						// read x pos						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setX((int)tokenizer.nval);						else throw (new DBGParseException(errorString, tokenizer, fileName));											// read y pos						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setY((int)tokenizer.nval);						else throw (new DBGParseException(errorString, tokenizer, fileName));						// read rotation						tokenizer.nextToken();						if (tokenizer.ttype == tokenizer.TT_NUMBER) rd.setRotated(((int)tokenizer.nval)!=0);						else throw (new DBGParseException(errorString, tokenizer, fileName));						rd.setColor(java.awt.Color.black);					}				}				else if (tokenizer.sval.equalsIgnoreCase("VDCTGroupPos")) {					// read group_name					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read y pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) ty=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					data.addGroup(new DBGroupData(str, tx, ty, java.awt.Color.black, nullString));				}				else if (tokenizer.sval.equalsIgnoreCase("VDCTLinkData")) {					// read linkID					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD)||						(tokenizer.ttype == DBConstants.quoteChar)) str=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read desc					tokenizer.nextToken();					if ((tokenizer.ttype == tokenizer.TT_WORD) ||						(tokenizer.ttype == DBConstants.quoteChar)) desc=tokenizer.sval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read x pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));										// read x2 pos					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) tx2=(int)tokenizer.nval;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read obj1rotated					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) r1=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));					// read obj2rotated					tokenizer.nextToken();					if (tokenizer.ttype == tokenizer.TT_NUMBER) r2=((int)tokenizer.nval)!=0;					else throw (new DBGParseException(errorString, tokenizer, fileName));/*					// transformation to v2 visual data										int pos = str.lastIndexOf('/');					if (pos<0) continue;	// invalid, skip					StringBuffer fieldName = new StringBuffer(str);					fieldName.setCharAt(pos, '.');					pos = fieldName.toString().lastIndexOf(com.cosylab.vdct.Constants.FIELD_SEPARATOR);					String field = fieldName.substring(pos+1);					String record = fieldName.substring(0, pos);					rd = (DBRecordData)data.getRecords().get(record);					if (rd==null) continue;					fd = (DBFieldData)rd.getFields().get(field);					if (fd==null) continue;					String target = com.cosylab.vdct.vdb.LinkProperties.getTargetFromString(fd.getValue());					if (target==null) continue;					if (!com.cosylab.vdct.graphics.objects.Group.substractParentName(fieldName.toString()).equals(com.cosylab.vdct.graphics.objects.Group.substractParentName(target)))					{						// intergroup link, no connector needed						data.addLink(new DBLinkData(fieldName.toString(), target));					}					else					{						String connectorName = com.cosylab.vdct.graphics.objects.Group.substractObjectName(str);						data.addLink(new DBLinkData(fieldName.toString(), connectorName));						int y = rd.getX()+com.cosylab.vdct.Constants.RECORD_HEIGHT;						pos = target.lastIndexOf(com.cosylab.vdct.Constants.FIELD_SEPARATOR);						record = target.substring(0, pos);						rd = (DBRecordData)data.getRecords().get(record);						if (rd!=null)							y = (y+rd.getX()+com.cosylab.vdct.Constants.RECORD_HEIGHT)/2;												data.addConnector(new DBConnectorData(connectorName, target, tx, y, java.awt.Color.black, nullString));					}					fd.setRotated(r1);*/				}		return nullString;  }}