I dont think you understood my question. I am trying to create a diagram using data I have. I can loop through my data but I cannot seem to insert the required shapes and connectors. Below is my code which only draws a single connector on the page.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ccp;
import com.aspose.diagram.Connection;
import com.aspose.diagram.Diagram;
import com.aspose.diagram.Page;
import com.aspose.diagram.SaveFileFormat;
import com.aspose.diagram.Shape;
import com.aspose.diagram.Txt;
import com.aspose.diagram.TypeValue;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.DOMException;
import org.xml.sax.SAXException;
/**
*
* @author UddinS2
*/
public class ReadXMLFile {
public static void main(String argv[]) throws Exception {
try {
String dataDir = "C:\\Users\\Uddins2\\Documents\\aspose\\";
File fXmlFile = new File(dataDir + "comms_matrix.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//optional, but recommended
//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("flow");
System.out.println("----------------------------");
Flow[] flows;
flows = new Flow[nList.getLength()];
// initialize a new drawing
Diagram diagram = new Diagram();
// get page by index
Page page = new Page();//diagram.getPages().get(0);
diagram.getPages().add(page);
// add masters
String connectorMaster = "Connector";
String router = "Router";
int pageNumber = 0;
diagram.addMaster(dataDir + "stencil\\Network Connectivity.vss", router);
diagram.addMaster(dataDir + "stencil\\Network Connectivity.vss", connectorMaster);
double x = 4.5;
double y = 7;
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
Flow currentflow = new Flow(eElement.getElementsByTagName("src").item(0).getTextContent(), eElement.getElementsByTagName("dst").item(0).getTextContent());
//System.out.println(x.getSrc());
//System.out.println(x.getDst());
flows[temp] = currentflow;
//System.out.println("src : " + eElement.getElementsByTagName("src").item(0).getTextContent());
//System.out.println("dst : " + eElement.getElementsByTagName("dst").item(0).getTextContent());
//System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
//System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
//System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
// add shapes
long shape1_ID = diagram.addShape(x, y, router, pageNumber);
long shape2_ID = diagram.addShape(x+2.5, y+4.5, router, pageNumber);
//long shape3_ID = diagram.addShape(4.5, 4.5, router, pageNumber);
//long shape4_ID = diagram.addShape(6.75, 4.5, router, pageNumber);
// get shapes by ID
Shape shape1 = page.getShapes().getShape(shape1_ID);
Shape shape2 = page.getShapes().getShape(shape2_ID);
//Shape shape3 = page.getShapes().getShape(shape3_ID);
//Shape shape4 = page.getShapes().getShape(shape4_ID);
// add two more connection points
Connection connection1 = new Connection();
connection1.getX().getUfe().setF("Width*0.33");
connection1.getY().getUfe().setF("Height*0");
Connection connection3 = new Connection();
connection3.getX().getUfe().setF("Width*0.66");
connection3.getY().getUfe().setF("Height*0");
shape1.getConnections().add(connection1);
shape1.getConnections().add(connection3);
// add connector shapes
Shape connector1 = new Shape();
Shape connector2 = new Shape();
Shape connector3 = new Shape();
long connecter1Id = diagram.addShape(connector1, connectorMaster, 0);
long connecter2Id = diagram.addShape(connector2, connectorMaster, 0);
long connecter3Id = diagram.addShape(connector3, connectorMaster, 0);
// connect shapes by index of conneecting points
//page.connectShapesViaConnectorIndex(shape1.getID(), 6, shape2.getID(), 3, connecter1Id);
//page.connectShapesViaConnectorIndex(shape1.getID(), 1, shape3.getID(), 3, connecter2Id);
//page.connectShapesViaConnectorIndex(shape1.getID(), 7, shape4.getID(), 3, connecter3Id);
}
} //end of for loop
// save drawing
diagram.save(dataDir + "Drawing1_out.vsdx", SaveFileFormat.VSDX);
System.out.println(flows.length);
} catch (IOException e) {
} catch (ParserConfigurationException e) {
} catch (DOMException e) {
} catch (SAXException e) {
}
/*
String dataDir = "C:\\Users\\Uddins2\\Documents\\aspose\\";
// load diagram
Diagram diagram = new Diagram(dataDir + "CreateDiagram_Out.vsdx");
// it calculates max page id
int max = 0;
if (diagram.getPages().getCount() != 0) {
max = diagram.getPages().get(0).getID();
}
for (int i = 1; i < diagram.getPages().getCount(); i++) {
if (max < diagram.getPages().get(i).getID()) {
max = diagram.getPages().get(i).getID();
}
}
// Initialize a new page object
Page newPage = new Page();
// Set name
newPage.setName("new page");
Page page = newPage;
// Set page ID
newPage.setID(max + 1);
// Add a new blank page
diagram.getPages().add(newPage);
// Save diagram
diagram.save(dataDir + "InsertBlankPageInVisio_Out.vsdx", SaveFileFormat.VSDX);
String masterName = "Router";
// Add master with stencil file path and master name
diagram.addMaster(dataDir + "stencil\\Network Connectivity.vss", masterName);
// page indexing starts from 0
int PageIndex = 1;
double width = 2, height = 2, pinX = 4.25, pinY = 4.5;
//Add a new rectangle shape
long rectangleId = diagram.addShape(pinX, pinY, width, height, masterName, PageIndex);
// add masters
String connectorMaster = "Dynamic connector", router = "Router";
int pageNumber = 0;
//double width = 2, height = 2, pinX = 4.25, pinY = 9.5;
diagram.addMaster(dataDir + "stencil\\Network Connectivity.vss", router);
// add shapes
long shape1_ID = diagram.addShape(4.5, 7, router, 0);
// set shape properties
Shape rectangle = page.getShapes().getShape(rectangleId);
rectangle.getXForm().getPinX().setValue(5);
rectangle.getXForm().getPinY().setValue(5);
rectangle.setType(TypeValue.SHAPE);
rectangle.getText().getValue().add(new Txt("Aspose Diagram"));
rectangle.setTextStyle(diagram.getStyleSheets().get(3));
rectangle.getLine().getLineColor().setValue("#ff0000");
rectangle.getLine().getLineWeight().setValue(0.03);
rectangle.getLine().getRounding().setValue(0.1);
rectangle.getFill().getFillBkgnd().setValue("#ff00ff");
rectangle.getFill().getFillForegnd().setValue("#ebf8df");
diagram.save(dataDir + "AddShape_Out.vsdx", SaveFileFormat.VSDX);
System.out.println("Shape has been added.");
*/
}
}
the stencil i am using contains the shapes
Router
Switch
Firewall
Load Balancer
LAN
Cloud
Server
Connector
It doesn’t seem to be adding my custom shapes in the stencil.