Git Product home page Git Product logo

pipe's Introduction

PIPE 5 Build Status

A tool for creating and analysing Petri nets, migrated from Sourceforge. A user-guide can be found here for how to use PIPE 5's features.

PIPE 5 is currently in beta stage due to an entire re-write of the back end and so is missing most of the analysis modules. If you require Petri net analysis, please use PIPE 4.

New (March, 2015)

An alpha version that supports hierarchical Petri nets and external interfaces is under development, and is available in the hierarchical-nets branches of PIPE and PIPECore. It consists of business logic in the PIPECore project (plus a few compatibility changes in PIPE), and does not yet have user interface support.

About PIPE

PIPE is an open source, platform independent tool for creating, simulating and analysing Petri nets including Generalised Stochastic Petri nets. Petri nets are a popular way for modelling concurrency and synchronisation in distributed systems and to learn more about Petri nets, you can start by reading the 2006/7 MSc. project report available here.

How to cite PIPE

If you use PIPE in your research, we would be grateful if you would cite the relevant publications:

Installation

Uber jar

If you just wish to use the latest release download the latest uber-jar from the release page, double click and go!

Building the project manually

First check out the release you're interested in e.g:

$ git checkout PIPE-5.0.0-beta-3

Then to build the jar execute the following from within the PIPE root directory:

$ mvn install

Once finished you should see the creates jars in the directory pipe-gui/target.

Execution

In order to run the PIPE GUI execute the following commands from within the PIPE root directory:

$ mvn install
$ mvn exec:exec -pl pipe-gui

Note: local libs

There are some internal libraries, which need to be found for maven. For the mean time they are located in the project under src/local-libs and this directory is treated as a local library. When installing expect the following warning:

[WARNING] The POM for internal:XXX is missing, no dependency information available

The original method for these local libraries required running a Python script to install the local libraries using mvn install, however this new method removes the need for a pre-install step).

If you know of a better way to do this, please raise it in the issues section.

Contributing

Just follow the following recommended process:

  • Fork it
  • Create your feature branch (git checkout -b my-new-feature)
  • Ensure your new code is tested thoroughly
  • Commit your changes (git commit -am 'Add some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create new Pull Request

pipe's People

Contributors

gareth12 avatar sjdayday avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pipe's Issues

Remove the 'enabled' flag from tokens

In the GUI remove the enabled check box and instead make it so that tokens can be deleted. The same approach can be used as for rate parameters.

Remove the enabled field from the Token model.

Pipe 5 beta arcs endpoints should be stationary

Create a simple Petri net P1 -> T1.

Click and hold T1 end point of arc, dragging mouse around causes arc start point to move. Furthermore loading the example from #32, the endpoints seem to be movable entirely!

Animation History does not work when changing the path

Steps to reproduce:

  1. Create simple Petri net
  2. Fire a few tokens
  3. Press back to end up in the middle of the history
  4. Now manually fire a new transition

Notice that the animation history clears everything from before, what should be expected is just the future transitions to be cleared. Now fire some more transitions and notice that stepping forwards/backwards does not work.

Change the way enabled transitions are calculated

Currently the PetriNetAnimator will directly alter the existing Petri net architecture.

It would be more useful if the animator could perform the calculations for enabled transitions without needing to set the number of tokens in a Place. I envisage this could be done if some of the State stuff is moved from #50 into pipe-core and the inhibitor matricies were used.

Also in order to make firing logic as easy as possible perhaps each arc should contain its own the firing strategy. This avoids having to match Arc to type... It also makes new arc types more flexible for creation.

Response Time Analysis

Hello,
congratulations for your work, pipe works really well!
My only problem is how to set the form "Response Time Analysis", because even in the Help section there is no hint.
I'm using this GSPN (taken from "Performance Aware Open-world software in a 3-Layer Architecture, Diego Perez-Palacin, José Merseguer, Simona Bernardi
").

Can you give me an help?
thank you very much

<?xml version="1.0" encoding="iso-8859-1"?><pnml>
<net id="Net-One" type="P/T net">
<token id="Default" enabled="true" red="0" green="0" blue="0"/>
<place id="P0">
<graphics>
<position x="270.0" y="75.0"/>
</graphics>
<name>
<value>P0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>1</value>
</capacity>
</place>
<place id="P1">
<graphics>
<position x="450.0" y="135.0"/>
</graphics>
<name>
<value>P1</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P10">
<graphics>
<position x="120.0" y="525.0"/>
</graphics>
<name>
<value>P10</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P11">
<graphics>
<position x="240.0" y="645.0"/>
</graphics>
<name>
<value>P11</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P12">
<graphics>
<position x="15.0" y="405.0"/>
</graphics>
<name>
<value>P12</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,1</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P2">
<graphics>
<position x="450.0" y="270.0"/>
</graphics>
<name>
<value>P2</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P3">
<graphics>
<position x="285.0" y="195.0"/>
</graphics>
<name>
<value>P3</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P4">
<graphics>
<position x="285.0" y="330.0"/>
</graphics>
<name>
<value>P4</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P5">
<graphics>
<position x="315.0" y="495.0"/>
</graphics>
<name>
<value>P5</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P6">
<graphics>
<position x="435.0" y="435.0"/>
</graphics>
<name>
<value>P6</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P7">
<graphics>
<position x="435.0" y="540.0"/>
</graphics>
<name>
<value>P7</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P8">
<graphics>
<position x="195.0" y="435.0"/>
</graphics>
<name>
<value>P8</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<place id="P9">
<graphics>
<position x="255.0" y="525.0"/>
</graphics>
<name>
<value>P9</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</name>
<initialMarking>
<value>Default,0</value>
<graphics>
<offset x="0.0" y="0.0"/>
</graphics>
</initialMarking>
<capacity>
<value>0</value>
</capacity>
</place>
<transition id="T1">
<graphics>
<position x="450.0" y="195.0"/>
</graphics>
<name>
<value>T1</value>
<graphics>
<offset x="85.0" y="17.5"/>
</graphics>
</name>
<orientation>
<value>90</value>
</orientation>
<rate>
<value>0.2</value>
</rate>
<timed>
<value>true</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T10">
<graphics>
<position x="135.0" y="645.0"/>
</graphics>
<name>
<value>T10</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>90</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T11">
<graphics>
<position x="270.0" y="0.0"/>
</graphics>
<name>
<value>T11</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>90</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>true</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T2">
<graphics>
<position x="270.0" y="135.0"/>
</graphics>
<name>
<value>T2</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>270</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T3">
<graphics>
<position x="270.0" y="270.0"/>
</graphics>
<name>
<value>T3</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>90</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T4">
<graphics>
<position x="330.0" y="420.0"/>
</graphics>
<name>
<value>T4</value>
<graphics>
<offset x="81.25" y="-36.25"/>
</graphics>
</name>
<orientation>
<value>45</value>
</orientation>
<rate>
<value>0.75</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T5">
<graphics>
<position x="180.0" y="360.0"/>
</graphics>
<name>
<value>T5</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>270</value>
</orientation>
<rate>
<value>0.25</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T6">
<graphics>
<position x="360.0" y="600.0"/>
</graphics>
<name>
<value>T6</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>270</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T7">
<graphics>
<position x="435.0" y="480.0"/>
</graphics>
<name>
<value>T7</value>
<graphics>
<offset x="98.75" y="15.0"/>
</graphics>
</name>
<orientation>
<value>90</value>
</orientation>
<rate>
<value>0.1</value>
</rate>
<timed>
<value>true</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T8">
<graphics>
<position x="195.0" y="495.0"/>
</graphics>
<name>
<value>T8</value>
<graphics>
<offset x="-5.0" y="35.0"/>
</graphics>
</name>
<orientation>
<value>270</value>
</orientation>
<rate>
<value>1.0</value>
</rate>
<timed>
<value>false</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<transition id="T9">
<graphics>
<position x="255.0" y="585.0"/>
</graphics>
<name>
<value>T9</value>
<graphics>
<offset x="-12.5" y="7.5"/>
</graphics>
</name>
<orientation>
<value>270</value>
</orientation>
<rate>
<value>0.05</value>
</rate>
<timed>
<value>true</value>
</timed>
<infiniteServer>
<value>false</value>
</infiniteServer>
<priority>
<value>1</value>
</priority>
</transition>
<arc id="P0 to T2" source="P0" target="T2">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="282" y="101" curvePoint="false"/>
<arcpath id="001" x="282" y="142" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P10 to T10" source="P10" target="T10">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="133" y="551" curvePoint="false"/>
<arcpath id="001" x="151" y="652" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P11 to T10" source="P11" target="T10">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="237" y="657" curvePoint="false"/>
<arcpath id="001" x="161" y="657" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P12 to T2" source="P12" target="T2">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="37" y="406" curvePoint="false"/>
<arcpath id="001" x="277" y="151" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P1 to T1" source="P1" target="T1">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="461" y="161" curvePoint="false"/>
<arcpath id="001" x="461" y="201" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P2 to T3" source="P2" target="T3">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="447" y="282" curvePoint="false"/>
<arcpath id="001" x="296" y="282" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P3 to T3" source="P3" target="T3">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="293" y="221" curvePoint="false"/>
<arcpath id="001" x="281" y="276" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P4 to T4" source="P4" target="T4">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="303" y="355" curvePoint="false"/>
<arcpath id="001" x="337" y="428" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P4 to T5" source="P4" target="T5">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="282" y="346" curvePoint="false"/>
<arcpath id="001" x="207" y="371" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P5 to T6" source="P5" target="T6">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="333" y="520" curvePoint="false"/>
<arcpath id="001" x="367" y="606" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P6 to T7" source="P6" target="T7">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="446" y="461" curvePoint="false"/>
<arcpath id="001" x="446" y="486" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P7 to T6" source="P7" target="T6">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="435" y="561" curvePoint="false"/>
<arcpath id="001" x="377" y="607" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P8 to T8" source="P8" target="T8">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="207" y="461" curvePoint="false"/>
<arcpath id="001" x="207" y="502" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="P9 to T9" source="P9" target="T9">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="267" y="551" curvePoint="false"/>
<arcpath id="001" x="267" y="592" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T10 to P12" source="T10" target="P12">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="141" y="651" curvePoint="false"/>
<arcpath id="001" x="17" y="537" curvePoint="false"/>
<arcpath id="002" x="25" y="431" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T11 to P0" source="T11" target="P0">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="281" y="16" curvePoint="false"/>
<arcpath id="001" x="281" y="72" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T1 to P2" source="T1" target="P2">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="461" y="211" curvePoint="false"/>
<arcpath id="001" x="461" y="267" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T2 to P1" source="T2" target="P1">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="297" y="146" curvePoint="false"/>
<arcpath id="001" x="447" y="146" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T2 to P3" source="T2" target="P3">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="287" y="152" curvePoint="false"/>
<arcpath id="001" x="294" y="192" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T3 to P4" source="T3" target="P4">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="281" y="286" curvePoint="false"/>
<arcpath id="001" x="292" y="327" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T4 to P5" source="T4" target="P5">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="341" y="439" curvePoint="false"/>
<arcpath id="001" x="330" y="492" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T4 to P6" source="T4" target="P6">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="349" y="432" curvePoint="false"/>
<arcpath id="001" x="432" y="444" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T5 to P8" source="T5" target="P8">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="192" y="377" curvePoint="false"/>
<arcpath id="001" x="204" y="432" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T6 to P4" source="T6" target="P4">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="372" y="617" curvePoint="false"/>
<arcpath id="001" x="368" y="648" curvePoint="false"/>
<arcpath id="002" x="572" y="537" curvePoint="false"/>
<arcpath id="003" x="593" y="337" curvePoint="false"/>
<arcpath id="004" x="311" y="341" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T7 to P7" source="T7" target="P7">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="446" y="496" curvePoint="false"/>
<arcpath id="001" x="446" y="537" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T8 to P10" source="T8" target="P10">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="192" y="506" curvePoint="false"/>
<arcpath id="001" x="145" y="530" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T8 to P9" source="T8" target="P9">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="222" y="506" curvePoint="false"/>
<arcpath id="001" x="254" y="528" curvePoint="false"/>
<type value="normal"/>
</arc>
<arc id="T9 to P11" source="T9" target="P11">
<graphics/>
<inscription>
<value>Default,1</value>
<graphics/>
</inscription>
<tagged>
<value>false</value>
</tagged>
<arcpath id="000" x="267" y="602" curvePoint="false"/>
<arcpath id="001" x="256" y="642" curvePoint="false"/>
<type value="normal"/>
</arc>
</net>
</pnml>

Should program to interface

As a good rule of thumb, and to make use of mocks in testing PIPE should make use of interfaces where possible.

For example
ArrayList x = new ArrayList();

would become
List x = new ArrayList();

Method parameters also need to be changed to interfaces allowing them to be mocked.
For example in TransitionView.java the method public TransitionView paste(double x, double y, boolean fromAnotherView, PetriNetView model) would be far better if PetriNetView was an interface and therefore mockable.

Editing Components creates many undo items

For example

  1. Create transition
  2. Change name
  3. Change weight
  4. Press OK
  5. Press undo - notice how only the weight changes
  6. Press undo again - now it changes the name back

Ideally we want to join 5 and 6

Improve unit testing

The current unit tests only cover about 11% of the code base, we should aim for a far higher coverage.

The current unit tests also need a bit of refactoring to make them clearer.

GSPN Analysis module returning 'I/O Error' and not able to use Steady State Analysis Module

Hello:
Can you help in investigating the following error messages encountered using PIPE2 on my project.

  1. GSPN analysis module returning 'I/O Error'.
  2. I get the following error msg 'Unable to connect to server camelot01.doc.ic.ac.uk : 55500: Connection refused: connect'. Can you advise on how to get access to the 'camelot' server that the steady state analysis module connects to?
    Thanks

Move logic out of PetriNetView

There's a lot of logic in the PetriNetView & PipeApplicationView, this needs splitting out. It shouldn't belong here.

Branches could be nicer

It's nicer to work from master and only have other branches for features (though legacy could be kept for reference).

Implement BNF for expression parsing

Not being able to tell which components an expression depends on is a problem as identified when deleting a place that a transition depends on in #26.

Redesign the rate (and eventually arc) functional rates into a BNF that can be parsed via ANTLR.

Refactor

PIPE needs quite a lot of refactoring to improve readability

Null Passed causes NullPointerException

On line 84 in pipe-gui/src/main/java/pipe/gui/widgets/TransitionFunctionEditor.java, 'null' is passed to the constructor of ExprEvaluator. This causes a NullPointerException, which in turn means that any Rate Expression is considered invalid.

cant build, packages missing!

There seem to be some private packages necessary that are not delivered as Open Source. I am not a big friend of java programming. If you could provide me a binary i would be happy.

[ERROR] Failed to execute goal on project PIPE: Could not resolve dependencies for project uk.ac.imperial:PIPE:jar:4.3.1: The following artifacts could not be resolved: uk.ac.imperial:tools:jar:1.0, uk.ac.imperial:hadoop-dev-core:jar:0.13.1, uk.ac.imperial:drmaa:jar:1.0, uk.ac.imperial:jama:jar:1.0.2, uk.ac.imperial:powerswing:jar:0.3, uk.ac.imperial:jpowergraph-swing:jar:0.2, uk.ac.imperial:jpowergraph-common:jar:0.2: Could not find artifact uk.ac.imperial:tools:jar:1.0 in central (http://repo.maven.apache.org/maven2) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]

IndexOutOfBoundsException when adding an arc

Get IndexOutOfBoundsException trying to add an arc to a net. The arc is not added.

MIGRATED FROM SOURCEFORGE

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at pipe.dataLayer.ArcPath.setStraightControlPoints(ArcPath.java:182)
    at pipe.dataLayer.ArcPath.setControlPoints(ArcPath.java:90)
    at pipe.dataLayer.ArcPath.createPath(ArcPath.java:55)
    at pipe.dataLayer.Arc.setTargetLocation(Arc.java:507)
    at pipe.dataLayer.Transition.updateEndPoints(Transition.java:416)
    at pipe.dataLayer.Transition.updateEndPoint(Transition.java:351)
    at pipe.dataLayer.Arc.updateArcPosition(Arc.java:488)
    at pipe.dataLayer.Transition.contains(Transition.java:306)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTargetImpl(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.Container.getMouseEventTarget(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Analysis Modules

Hi,

Functionality for permutation is added to rate transitions and works fine #23 #27, but none of the analysis modules (e.g. GSPN Analysis) start.

Thanks,
Muz

Arcs change coordinates on loading a previously saved net

I create a Petri Net and make arcs perfectly aligned with the grid. I save the file, reopen it and the intermediate points of the arcs have slightly shifted. Every time I save the file again and reopen it, the arcs are shifted more and more. An example is given below:

1st
Original net
2nd
After saving and opening the first time
3rd
After saving and opening the second time
4th
After saving and opening the third time
5th
After saving and opening the fourth time
10th
After saving and opening the nineth time

The problem probably lies in the opening of the net, because when I save the original net, the coordinates in the XML file look fine. When I open it again, the lines seem slightly shifted.

What I also noticed is that in the XML file, the coordinates of arcs are given as integers, while the coordinates of places and transitions are given as floats. Maybe this has something to do with the shifting?

Function rate on time transitions is buggy

For example with a petrinet when typing in "#(P0)×2", we get the error message

screen shot 2014-01-06 at 08 49 57

After which we cannot press ok because of a NullPointer exception so we are stuck in limbo!

Error in animation navigation

  • Input: http://pastebin.com/pjpRXjuN
  • Issue: From initial marking, I press "5" (Random) until the "Use" place contains one token, then I press "4" to go back to the initial marking but it does not work as expected.
  • Environment: Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.35-2 i686 GNU/Linux

Forking PIPE?

Hi,
related to the questions asked by user MuzShehk, I intend to implement functionality for Permutations (nPk = n!/(n-k)!) and other related functions for the transition rate expressions.
Would you prefer for me to fork your repository, and make the required changes, or would it be better to write the patch, and send it to you directly. I am not quite certain on the correct etiquette here.
Regards
Max

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.