📄 datalayer.java
字号:
* @param incidenceInput Backward Incidence Matrix object
*/
public void setIncidenceMatrix(int[][] incidenceInput) {
incidenceMatrix = new PNMatrix(incidenceInput);
}
/**
* Set the Initial Markup Matrix
*
* @param markupInput Initial Markup Matrix object
*/
public void setInitalMarkupMatrix(int[][] markupInput) {
/*
int i = 0;
int j = 0;
Integer intergerInput = null;
for( ; i < markupInput.length ; i++) {
fowardsIncidenceMatrix.add(i, new ArrayList(markupInput[i].length));
for( ; j < markupInput[i].length ; j++) {
intergerInput = new Integer(markupInput[i][j]);
fowardsIncidenceMatrix.add(j, intergerInput);
}
}
*/
}
/**
* Save the Petri-Net
*
* @param filename URI location to save file
* @throws ParserConfigurationException
* @throws DOMException
* @throws TransformerConfigurationException
* @throws TransformerException
*/
public void savePNML(String filename)
throws NullPointerException, IOException, ParserConfigurationException, DOMException, TransformerConfigurationException, TransformerException {
savePNML(new File(filename));
}
/**
* Save the Petri-Net
*
* @param filename URI location to save file
* @throws ParserConfigurationException
* @throws DOMException
* @throws TransformerConfigurationException
* @throws TransformerException
*/
public void savePNML(File file)
throws NullPointerException, IOException, ParserConfigurationException, DOMException, TransformerConfigurationException, TransformerException {
// Error checking
if(file == null) throw new NullPointerException("Null file in savePNML");
/*
System.out.println("=======================================");
System.out.println("dataLayer SAVING FILE=\"" + file.getCanonicalPath() + "\"");
System.out.println("=======================================");
*/
Document pnDOM = null;
int i;
StreamSource xsltSource = null;
Transformer transformer = null;
try {
// Build a Petri Net XML Document
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
pnDOM = builder.newDocument();
Element PNML = pnDOM.createElement("pnml"); // PNML Top Level Element
pnDOM.appendChild(PNML);
Attr pnmlAttr = pnDOM.createAttribute("xmlns"); // PNML "xmlns" Attribute
pnmlAttr.setValue("http://www.informatik.hu-berlin.de/top/pnml/ptNetb");
PNML.setAttributeNode(pnmlAttr);
Element NET = pnDOM.createElement("net"); // Net Element
PNML.appendChild(NET);
Attr netAttrId = pnDOM.createAttribute("id"); // Net "id" Attribute
netAttrId.setValue("Net-One");
NET.setAttributeNode(netAttrId);
Attr netAttrType = pnDOM.createAttribute("type"); // Net "type" Attribute
netAttrType.setValue("P/T net");
NET.setAttributeNode(netAttrType);
Place[] places = getPlaces();
for(i = 0 ; i < places.length ; i++) {
NET.appendChild(createPlaceElement(places[i], pnDOM));
}
places = null;
AnnotationNote[] labels = getLabels();
if (labels.length>0) {
for (i = 0; i <labels.length; i++) {
NET.appendChild(createAnnotationNoteElement(labels[i], pnDOM));
}
labels = null;
}
Transition[] transitions = getTransitions();
for(i = 0 ; i < transitions.length ; i++) {
NET.appendChild(createTransitionElement(transitions[i], pnDOM));
}
transitions = null;
Arc[] arcs = getArcs();
for(i = 0 ; i < arcs.length ; i++) {
Element newArc = createArcElement(arcs[i],pnDOM);
int arcPoints = arcs[i].getArcPath().getArcPathDetails().length;
String[][] point = arcs[i].getArcPath().getArcPathDetails();
for (int j = 0; j < arcPoints; j++){
newArc.appendChild(createArcPoint(point[j][0],point[j][1],point[j][2],pnDOM,j));
}
NET.appendChild(newArc);
//newArc = null;
}
arcs = null;
pnDOM.normalize();
// Create Transformer with XSL Source File
xsltSource = new StreamSource(CreateGui.appPath+"xslt"+System.getProperty("file.separator")+"GeneratePNML.xsl");
transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
// Write file and do XSLT transformation to generate correct PNML
File outputObjectArrayList = file;//new File(filename); // Output for XSLT Transformation
DOMSource source = new DOMSource(pnDOM);
StreamResult result = new StreamResult(outputObjectArrayList);
transformer.transform(source, result);
} catch (ParserConfigurationException e) {
// System.out.println("=====================================================================================");
System.out.println("ParserConfigurationException thrown in savePNML() : dataLayer Class : dataLayer Package: filename=\"" + file.getCanonicalPath() + "\" xslt=\"" + xsltSource.getSystemId() + "\" transformer=\"" + transformer.getURIResolver() + "\"");
// System.out.println("=====================================================================================");
// e.printStackTrace(System.err);
} catch (DOMException e) {
// System.out.println("=====================================================================");
System.out.println("DOMException thrown in savePNML() : dataLayer Class : dataLayer Package: filename=\"" + file.getCanonicalPath() + "\" xslt=\"" + xsltSource.getSystemId() + "\" transformer=\"" + transformer.getURIResolver() + "\"");
// System.out.println("=====================================================================");
// e.printStackTrace(System.err);
} catch (TransformerConfigurationException e) {
// System.out.println("==========================================================================================");
System.out.println("TransformerConfigurationException thrown in savePNML() : dataLayer Class : dataLayer Package: filename=\"" + file.getCanonicalPath() + "\" xslt=\"" + xsltSource.getSystemId() + "\" transformer=\"" + transformer.getURIResolver() + "\"");
// System.out.println("==========================================================================================");
// e.printStackTrace(System.err);
} catch (TransformerException e) {
// System.out.println("=============================================================================");
System.out.println("TransformerException thrown in savePNML() : dataLayer Class : dataLayer Package: filename=\"" + file.getCanonicalPath() + "\" xslt=\"" + xsltSource.getSystemId() + "\" transformer=\"" + transformer.getURIResolver() + "\"" + e);
// System.out.println("=============================================================================");
// e.printStackTrace(System.err);
}
}
/**
* Load PNML file
*
* @param filename URI location of PNML
* @throws IOException
* @throws SAXException
* @throws TransformerException
* @throws ParserConfigurationException
*/
public void loadPNML(String filename)
throws IOException, SAXException, TransformerException, ParserConfigurationException {
// System.out.println("========================================================");
// System.out.println("dataLayer Loading filename=\"" + filename + "\"");
// System.out.println("========================================================");
emptyPNML();
Element element = null;
Node node = null;
NodeList nodeList = null;
int noOfObjects = 0;
Document document = null;
File outputObjectArrayList;
try {
// Create Transformer with XSL Source File
StreamSource xsltSource = new StreamSource(CreateGui.appPath+"xslt"+System.getProperty("file.separator")+"GenerateObjectList.xsl");
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource);
// TRY TO DO ALL IN MEMORT TO REDUCE READ-WRITE DELAYS
outputObjectArrayList = new File(System.getProperty("java.io.tmpdir")+System.getProperty("file.separator")+"ObjectList.xml"); // Output for XSLT Transformation
outputObjectArrayList.deleteOnExit();
StreamSource source = new StreamSource(filename);
StreamResult result = new StreamResult(outputObjectArrayList);
transformer.transform(source, result);
// Get DOM for transformed document
document = getDOM(outputObjectArrayList);
nodeList = document.getDocumentElement().getChildNodes();
CreateGui.getApp().setMode(CREATING); // Notifies used to indicate new instances.
for(int i = 0 ; i < nodeList.getLength() ; i++) {
node = nodeList.item(i);
if(node instanceof Element) {
element = (Element)node;
if ("labels".equals(element.getNodeName())){
addAnnotation(createAnnotation(element));
}
else if("place".equals(element.getNodeName()))
addPlace(createPlace(element));
else if ("transition".equals(element.getNodeName())){
addTransition(createTransition(element));
}
else if ("arc".equals(element.getNodeName())) {
Arc a=createArc(element);
addArc(a);
a.addWeightLabelToContainer();
}
}
}
CreateGui.getApp().restoreMode();
pnmlName = filename;
// } catch (IOException e) {
// System.out.println("IOException thrown in loadPNML(String filename) : dataLayer Class : dataLayer Package");
// e.printStackTrace(System.err);
// } catch (SAXException e) {
// System.out.println("SAXException thrown in loadPNML(String filename) : dataLayer Class : dataLayer Package");
// e.printStackTrace(System.err);
// } catch (TransformerException e) {
// System.out.println("TransformerException thrown in loadPNML(String filename) : dataLayer Class : dataLayer Package");
// e.printStackTrace(System.err);
// } catch (ParserConfigurationException e) {
// System.out.println("ParserConfigurationException thrown in loadPNML(String filename) : dataLayer Class : dataLayer Package");
// e.printStackTrace(System.err);
// Maxim - make it throw out any exception it gets to the caller. Debugging message left in for now.
} catch (Exception e) {
throw new RuntimeException(e);
}
// Delete transformed file
if(outputObjectArrayList!=null) outputObjectArrayList.delete();
}
/**
* Creates a Place object from a Place DOM Element
*
* @param inputPlaceElement Input Place DOM Element
* @return Place Object
*/
private Place createPlace(Element inputPlaceElement){
double positionXInput = 0;
double positionYInput = 0;
String idInput = null;
String nameInput = null;
double nameOffsetYInput = 0;
double nameOffsetXInput = 0;
int initialMarkingInput = 0;
double markingOffsetXInput = 0;
double markingOffsetYInput = 0;
String positionXTempStorage = inputPlaceElement.getAttribute("positionX");
String positionYTempStorage = inputPlaceElement.getAttribute("positionY");
String idTempStorage = inputPlaceElement.getAttribute("id");
String nameTempStorage = inputPlaceElement.getAttribute("name");
String nameOffsetYTempStorage = inputPlaceElement.getAttribute("nameOffsetX");
String nameOffsetXTempStorage = inputPlaceElement.getAttribute("nameOffsetY");
String initialMarkingTempStorage = inputPlaceElement.getAttribute("initialMarking");
String markingOffsetXTempStorage = inputPlaceElement.getAttribute("markingOffsetX");
String markingOffsetYTempStorage = inputPlaceElement.getAttribute("markingOffsetY");
if (positionXTempStorage.length() > 0)
positionXInput = Double.valueOf(positionXTempStorage).doubleValue()*(false ? DISPLAY_SCALE_FACTORX : 1)+(false ? DISPLAY_SHIFT_FACTORX : 1);
if (positionYTempStorage.length() > 0)
positionYInput = Double.valueOf(positionYTempStorage).doubleValue()*(false ? DISPLAY_SCALE_FACTORY : 1)+(false ? DISPLAY_SHIFT_FACTORY : 1);
if (idTempStorage.length() > 0)
idInput = idTempStorage;
else if (nameTempStorage.length() > 0)
idInput = nameTempStorage;
if (nameTempStorage.length() > 0)
nameInput = nameTempStorage;
else if (idTempStorage.length() > 0)
nameInput = idTempStorage;
if (nameOffsetYTempStorage.length() > 0)
nameOffsetXInput = Double.valueOf(nameOffsetYTempStorage).doubleValue();
if (nameOffsetXTempStorage.length() > 0)
nameOffsetYInput = Double.valueOf(nameOffsetXTempStorage).doubleValue();
if (initialMarkingTempStorage.length() > 0)
initialMarkingInput = Integer.valueOf(initialMarkingTempStorage).intValue();
if (markingOffsetXTempStorage.length() > 0)
markingOffsetXInput = Double.valueOf(markingOffsetXTempStorage).doubleValue();
if (markingOffsetYTempStorage.length() > 0)
markingOffsetYInput = Double.valueOf(markingOffsetYTempStorage).doubleValue();
// Pete: Removed colour properties
positionXInput+=PLACE_TRANSITION_HEIGHT/2-1;
positionYInput+=PLACE_TRANSITION_HEIGHT/2-1;
return new Place(positionXInput, positionYInput, idInput, nameInput, nameOffsetXInput, nameOffsetYInput, initialMarkingInput, markingOffsetXInput, markingOffsetYInput);
}
/**
* Creates a Label object from a Label DOM Element
*
* @param inputLabelElement Input Label DOM Element
* @return Label Object
*/
private AnnotationNote createAnnotation(Element inputLabelElement){
int positionXInput = 0;
int positionYInput = 0;
int widthInput = 0;
int heightInput = 0;
String text = null;
boolean borderInput = true;
String positionXTempStorage = inputLabelElement.getAttribute("xPosition");
String positionYTempStorage = inputLabelElement.getAttribute("yPosition");
String widthTemp = inputLabelElement.getAttribute("w");
String heightTemp = inputLabelElement.getAttribute("h");
String textTempStorage = inputLabelElement.getAttribute("txt");
String borderTemp = inputLabelElement.getAttribute("border");
if (positionXTempStorage.length() > 0)
positionXInput = Integer.valueOf(positionXTempStorage).intValue()*(false ? DISPLAY_SCALE_FACTORX : 1)+(false ? DISPLAY_SHIFT_FACTORX : 1);
if (positionYTempStorage.length() > 0)
positionYInput = Integer.valueOf(positionYTempStorage).intValue()*(false ? DISPLAY_SCALE_FACTORX : 1)+(false ? DISPLAY_SHIFT_FACTORX : 1);
if (widthTemp.length() > 0)
widthInput = Integer.valueOf(widthTemp).intValue()*(false ? DISPLAY_SCALE_FACTORY : 1)+(false ? DISPLAY_SHIFT_FACTORY : 1);
if (heightTemp.length() > 0)
heightInput = Integer.valueOf(heightTemp).intValue()*(false ? DISPLAY_SCALE_FACTORY : 1)+(false ? DISPLAY_SHIFT_FACTORY : 1);
if (borderTemp.length()>0)
borderInput = Boolean.valueOf(borderTemp).booleanValue();
else borderInput = true;
if (textTempStorage.length() > 0)
text = textTempStorage;
else text = "";
return new AnnotationNote(text, (int)positionXInput, (int)positionYInput, (int)widthInput, (int)heightInput, borderInput);
}
/**
* Creates a Transition object from a Transition DOM Element
*
* @param inputTransitionElement Input Transition DOM Element
* @return Transition Object
*/
private Transition createTransition(Element inputTransitionElement){
double positionXInput = 0;
double positionYInput = 0;
String idInput = null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -