⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datalayer.java

📁 Petri网分析工具PIPE is open-source
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
   * @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 + -