diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 0000000..a6929b5 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,30 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ master, maven ] + pull_request: + branches: [ master, maven ] + +jobs: + build: + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + java-version: [8] + os: [ubuntu-latest] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java-version }} + - name: Build with Maven + run: mvn -B verify --file pom.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc6dbf4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +**/target/** + +*.swp + +.classpath +.project +.settings +.idea +*.iml + +*~ +*.bak +*.actual.err +*.actual.out + +*.class +*.jar +*.class + +\#*\# +.\#* diff --git a/MOPBox/.classpath b/MOPBox/.classpath deleted file mode 100644 index f365b57..0000000 --- a/MOPBox/.classpath +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/MOPBox/.project b/MOPBox/.project deleted file mode 100644 index fc98a5b..0000000 --- a/MOPBox/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - MOPBox - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/MOPBox/.settings/org.eclipse.jdt.core.prefs b/MOPBox/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index ccfc228..0000000 --- a/MOPBox/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -#Sat Jun 19 13:50:38 CEST 2010 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/MOPBox/AllTests.launch b/MOPBox/AllTests.launch deleted file mode 100644 index e176a6c..0000000 --- a/MOPBox/AllTests.launch +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/MOPBox/build.xml b/MOPBox/build.xml deleted file mode 100644 index 6c06939..0000000 --- a/MOPBox/build.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - description - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MOPBox/collections-generic-4.01-src.zip b/MOPBox/collections-generic-4.01-src.zip deleted file mode 100644 index 648d6f7..0000000 Binary files a/MOPBox/collections-generic-4.01-src.zip and /dev/null differ diff --git a/MOPBox/collections-generic-4.01.jar b/MOPBox/collections-generic-4.01.jar deleted file mode 100644 index 92d009c..0000000 Binary files a/MOPBox/collections-generic-4.01.jar and /dev/null differ diff --git a/MOPBox/examples/HelloWorldFromTrace.java b/MOPBox/examples/HelloWorldFromTrace.java deleted file mode 100644 index 191b429..0000000 --- a/MOPBox/examples/HelloWorldFromTrace.java +++ /dev/null @@ -1,97 +0,0 @@ - - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; -import de.bodden.mopbox.finitestate.State; -import de.bodden.mopbox.generic.IAlphabet; -import de.bodden.mopbox.generic.IVariableBinding; - -/* - * This is a variant of the Hello World example in which events are read from a file. - */ -public class HelloWorldFromTrace { - - public static void main(String[] args) throws IOException { - HelloWorldMonitor template = new HelloWorldMonitor(); - - /* The following will match because trace1.txt contains lines: - * hello - * world - */ - { - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("examples/trace1.txt"))); - String line; - System.out.println("file: "+"examples/trace1.txt"); - while((line=reader.readLine())!=null) { - System.out.println("read: "+line); - template.processEvent(line); - } - template.reset(); - } - - /* The following will not match because trace2.txt contains lines: - * world - * hello - */ - { - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("examples/trace2.txt"))); - String line; - System.out.println("file: "+"examples/trace2.txt"); - while((line=reader.readLine())!=null) { - System.out.println("read: "+line); - template.processEvent(line); - } - template.reset(); - } - } - - static class HelloWorldMonitor extends AbstractFSMMonitorTemplate { - - public HelloWorldMonitor() { - //this is necessary to initialize this monitor template; - //we don't do this automatically because often the template may want to compute - //things before initialization - initialize(); - } - - /* - * We define that this monitor is interested in two kinds of events, labeled - * by "hello" and "world". We have to use Strings here because we used "String" - * as the first type parameter to AbstractFSMMonitorTemplate. Had we chosen another - * parameter there, then we could have used other kinds of labels here. - */ - protected void fillAlphabet(IAlphabet alphabet) { - alphabet.makeNewSymbol("hello"); - alphabet.makeNewSymbol("world"); - } - - /* - * Here we create the monitor's states and transitions. We want to be called back - * when having monitored a "hello" event followed by a "world" event. Hence we need - * three states connected by a "hello" and "world" transition. - */ - protected State setupStatesAndTransitions() { - State initial = makeState(false); - State middle = makeState(false); - State error = makeState(true /*is an error state*/); - - initial.addTransition(getSymbolByLabel("hello"), middle); - middle.addTransition(getSymbolByLabel("world"), error); - - return initial; //by convention, we return the initial state - } - - /* - * This is a callback method. MOPBox will call this method when an error state - * was reached. We ignore the parameter "binding" for now. - */ - public void matchCompleted(IVariableBinding binding) { - System.out.println("Hello World!"); - } - - } -} diff --git a/MOPBox/guava-10.0.1-sources.jar b/MOPBox/guava-10.0.1-sources.jar deleted file mode 100644 index a3ab179..0000000 Binary files a/MOPBox/guava-10.0.1-sources.jar and /dev/null differ diff --git a/MOPBox/guava-10.0.1.jar b/MOPBox/guava-10.0.1.jar deleted file mode 100644 index d107c0f..0000000 Binary files a/MOPBox/guava-10.0.1.jar and /dev/null differ diff --git a/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyC.java b/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyC.java deleted file mode 100644 index d179c1e..0000000 --- a/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyC.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.bodden.mopbox.generic.indexing.fast; - - -import de.bodden.mopbox.generic.IMonitor; -import de.bodden.mopbox.generic.IMonitorTemplate; - -public class FastStrategyC,L,K,V> extends FastStrategyCPlus { - - public FastStrategyC(IMonitorTemplate template) { - super(template,template.getAlphabet().asSet()); - } - - -} diff --git a/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyCPlus.java b/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyCPlus.java deleted file mode 100644 index 6b3af88..0000000 --- a/MOPBox/playground/de/bodden/mopbox/generic/indexing/fast/FastStrategyCPlus.java +++ /dev/null @@ -1,153 +0,0 @@ -package de.bodden.mopbox.generic.indexing.fast; - -import java.lang.ref.WeakReference; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import de.bodden.mopbox.generic.IIndexingStrategy; -import de.bodden.mopbox.generic.IMonitor; -import de.bodden.mopbox.generic.IMonitorTemplate; -import de.bodden.mopbox.generic.ISymbol; -import de.bodden.mopbox.generic.IVariableBinding; -import de.bodden.mopbox.generic.def.VariableBinding; -import de.bodden.mopbox.generic.indexing.simple.StrategyC; - -/** - * This strategy is known as Algorithm C+ in the ASE paper of Feng Chen at al. - * Opposed to {@link StrategyC}, it requires the presence of creation symbols. - * Such symbols need to be explicitly declared. - * - * This class obtains thread safety in a naive way, through a single lock that - * is held when calling {@link #processEvent(ISymbol, IVariableBinding)}. - */ -public class FastStrategyCPlus,L,K,V> implements IIndexingStrategy { - - @SuppressWarnings("rawtypes") - protected static final IVariableBinding EMPTY_BINDING = new VariableBinding(); - - protected WeakIdentityMultiMap bindingToMonitor; - protected WeakIdentityMultiMap.WeakIdentityMultiKey>> bindingToDefinedMoreInformativeBindings; - - protected final IMonitorTemplate template; - - protected Set> creationSymbols; - - protected final List allVariables; - - public FastStrategyCPlus(IMonitorTemplate template, Set> creationSymbols) { - this.template = template; - this.creationSymbols = creationSymbols; - bindingToMonitor = new WeakIdentityMultiMap(); - bindingToDefinedMoreInformativeBindings = new WeakIdentityMultiMap.WeakIdentityMultiKey>>(); - allVariables = template.getAlphabet().variables(); - } - - @Override - public synchronized void processEvent(ISymbol symbol, IVariableBinding bind){ - - V[] values = arrayRepresentation(bind); - - M currentMonitor = bindingToMonitor.get(values); - boolean undefined = (currentMonitor==null); - if(undefined) { //line 1 - List> lessInformativeBindings = - bind.strictlyLessInformativeBindingsOrdered(); //line 2 - IVariableBinding foundBinding = null; - for (IVariableBinding bMax : lessInformativeBindings) { - if(bindingToMonitor.containsKey(arrayRepresentation(bMax))) { //line 3 - foundBinding=bMax; - break; //line 4 - } - } - if(foundBinding!=null) { - defineTo(bind,foundBinding); //line 5 - } else if(creationSymbols.contains(symbol)){ - defineNew(bind); //line 6 - } - for (IVariableBinding bMax : lessInformativeBindings) { //line 8 - HashSet.WeakIdentityMultiKey> copy = - new HashSet.WeakIdentityMultiKey>(definedMoreInformativeBindingsFor(bMax)); - for(WeakIdentityMultiMap.WeakIdentityMultiKey b: copy) { //line 9 - IVariableBinding binding = toBinding(b); - if(binding.isCompatibleWith(bind)) { //line 9 - IVariableBinding bComp = binding; - IVariableBinding join = bComp.computeJoinWith(bind); - if(!bindingToMonitor.containsKey(arrayRepresentation(join))) { //line 10 - defineTo(join, bComp); - } - } - } - } - } - Set.WeakIdentityMultiKey> union = //line 16 - new HashSet.WeakIdentityMultiKey>(definedMoreInformativeBindingsFor(bind)); - union.add(toMultiKey(bind)); //line 16 - for (WeakIdentityMultiMap.WeakIdentityMultiKey bPrime : union) { //line 16 - M monitor = bindingToMonitor.getByKey(bPrime); - if(monitor!=null && monitor.processEvent(symbol)) { //lines 17 - template.matchCompleted(toBinding(bPrime)); //lines 18 - } - } - } - - protected IVariableBinding toBinding(WeakIdentityMultiMap.WeakIdentityMultiKey key) { - VariableBinding bind = new VariableBinding(); - for(int i=0;i weakReference = key.keyRefs[i]; - if(weakReference!=null) { - A val = weakReference.get(); - if(val!=null) { - bind.put(allVariables.get(i), val); - } - } - } - return bind; - } - - protected V[] arrayRepresentation(IVariableBinding bind) { - @SuppressWarnings("unchecked") - V[] values = (V[]) new Object[allVariables.size()]; - int i = 0; - //TODO can this be sped up somehow? - for(Map.Entry singleBinding: bind.entrySet()) { - int index = allVariables.indexOf(singleBinding.getKey()); - values[index] = singleBinding.getValue(); - i++; - } - return values; - } - - - protected void defineTo(IVariableBinding b, IVariableBinding bPrime) { - M m = bindingToMonitor.get(arrayRepresentation(bPrime)); - bindingToMonitor.put(m.copy(),arrayRepresentation(b)); - updateChainingTable(b); - } - - protected void defineNew(IVariableBinding b) { - bindingToMonitor.put(template.createMonitorPrototype(),arrayRepresentation(b)); - updateChainingTable(b); - } - - protected void updateChainingTable(IVariableBinding b) { - for(IVariableBinding bPrimePrime: b.strictlyLessInformativeBindingsOrdered()) { - definedMoreInformativeBindingsFor(bPrimePrime).add(toMultiKey(b)); - } - } - - private WeakIdentityMultiMap.WeakIdentityMultiKey toMultiKey(IVariableBinding b) { - return bindingToMonitor.newMultiKey(arrayRepresentation(b)); - } - - protected Set.WeakIdentityMultiKey> definedMoreInformativeBindingsFor(IVariableBinding binding) { - Set.WeakIdentityMultiKey> set = bindingToDefinedMoreInformativeBindings.get(arrayRepresentation(binding)); - if(set==null) { - set = new HashSet.WeakIdentityMultiKey>(); - bindingToDefinedMoreInformativeBindings.put(set,arrayRepresentation(binding)); - } - return set; - } - -} diff --git a/README.md b/README.md index d9319bc..375205b 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,33 @@ -MOPBox is [Monitor-Oriented Programming](http://fsl.cs.uiuc.edu/index.php/Monitoring-oriented_programming) in a box. It is a library for defining and constructing runtime monitors. Runtime monitors can be useful both as oracles in testing or as security monitors, also known as inline reference monitors. In the first case, the monitor notifies the user when an internal error state was reached, thereby flagging the current test run as erroneous. In the case of security monitors, the monitor will detect an imminent attack and can then take evasive actions. +## What is MOPBox? + +MOPBox is [Monitor-Oriented Programming](https://fsl.cs.illinois.edu/projects/mop/index.html) in a box. It is a library for defining and constructing runtime monitors. Runtime monitors can be useful both as [oracles in testing](https://link.springer.com/article/10.1007/s10515-019-00267-1) or as security monitors, also known as [inline reference monitors](https://ecommons.cornell.edu/server/api/core/bitstreams/61c7a3fd-ab9a-4a70-9625-90261d8cd537/content). In the first case, the monitor notifies the user when an internal error state was reached, thereby flagging the current test run as erroneous. In the case of security monitors, the monitor will detect an imminent attack and can then take evasive actions. + +## Use Cases For the particular case of the MOPBox library, we envision the following use cases: -Efficient offline trace processing of (possibly parameterized) runtime traces that were collected online. -Online security monitoring (inline reference monitors) through a combination with [AspectJ](http://www.eclipse.org/aspectj/). -Integration into other tools and IDEs. For an example, see [Stateful Breakpoints](http://www.bodden.de/research/current/sbp/). -As tool for teaching runtime verification. Compared to other approaches based on code generation, the algorithms implemented in MOPBox are easy to follow, extend and customize. -As a platform for comparing existing runtime verification algorithms. Currently, such comparisons are hard to impossible because different algorithms are implemented using different tools. -As an enabler for novel, more flexible runtime verification algorithms. For instance, imagine a runtime verification adjusting its indexing strategy over time. +* Efficient offline trace processing of (possibly parameterized) runtime traces that were collected online. + +* Online security monitoring (inline reference monitors) through a combination with [AspectJ](https://projects.eclipse.org/projects/tools.aspectj). + +* Integration into other tools and IDEs. For an example, see [Stateful Breakpoints](https://www.bodden.de/pubs/bodden11stateful.pdf). + +* As a tool for teaching runtime verification. Compared to other approaches based on code generation, the algorithms implemented in MOPBox are easy to follow, extend and customize. + +* As a platform for comparing existing runtime verification algorithms. Currently, such comparisons are hard to impossible because different algorithms are implemented using different tools. + +* As an enabler for novel, more flexible runtime verification algorithms. For instance, imagine a runtime verification adjusting its indexing strategy over time. + MOPBox is open source. Feel free to use it and extend it however you wish. Of course, we are also always interested in collaborations on this topic. -Examples +## Examples + See [here](https://github.com/ericbodden/mopbox/wiki) for a list of toy examples. -Download and testing -Although already quite stable, MOPBox has not yet been released. To download the current code, please access the source code from our repository. The repository also includes test cases that show how to define and use runtime monitors. In case of any questions, do not hesitate to [contact me](http://www.bodden.de/about-me/). +## Download and testing + +Although already quite stable, MOPBox has not yet been released. To download the current code, please access the source code from our repository. The repository also includes test cases that show how to define and use runtime monitors. In case of any questions, do not hesitate to [contact me](http://www.bodden.de/about-me). + +## Who are the developers of MOPBox? -Who are the developers of MOPBox? -MOPBOX was designed, implemented and is maintained by [Eric Bodden](http://bodden.de/). This work is supported by [CASED](http://www.cased.de/). +MOPBOX was designed, implemented and is maintained by [Eric Bodden](http://bodden.de). This work is supported by [CASED](http://www.cased.de). diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ccfac29 --- /dev/null +++ b/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + org.example + mopbox + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + org.apache.commons + commons-collections4 + 4.4 + + + com.google.guava + guava + 32.1.3-jre + + + junit + junit + 4.13.1 + test + + + + + \ No newline at end of file diff --git a/MOPBox/examples/HelloAliceHelloBob.java b/src/main/java/de/bodden/mopbox/examples/HelloAliceHelloBob.java similarity index 99% rename from MOPBox/examples/HelloAliceHelloBob.java rename to src/main/java/de/bodden/mopbox/examples/HelloAliceHelloBob.java index 67a4e05..e17a7a0 100644 --- a/MOPBox/examples/HelloAliceHelloBob.java +++ b/src/main/java/de/bodden/mopbox/examples/HelloAliceHelloBob.java @@ -1,4 +1,4 @@ - +package de.bodden.mopbox.examples; import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; import de.bodden.mopbox.finitestate.State; diff --git a/MOPBox/examples/HelloWorld.java b/src/main/java/de/bodden/mopbox/examples/HelloWorld.java similarity index 98% rename from MOPBox/examples/HelloWorld.java rename to src/main/java/de/bodden/mopbox/examples/HelloWorld.java index d0b2c89..15cef2f 100644 --- a/MOPBox/examples/HelloWorld.java +++ b/src/main/java/de/bodden/mopbox/examples/HelloWorld.java @@ -1,4 +1,4 @@ - +package de.bodden.mopbox.examples; import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; import de.bodden.mopbox.finitestate.State; diff --git a/MOPBox/examples/HelloWorldAspectJ.aj b/src/main/java/de/bodden/mopbox/examples/HelloWorldAspectJ.aj similarity index 100% rename from MOPBox/examples/HelloWorldAspectJ.aj rename to src/main/java/de/bodden/mopbox/examples/HelloWorldAspectJ.aj diff --git a/src/main/java/de/bodden/mopbox/examples/HelloWorldFromTrace.java b/src/main/java/de/bodden/mopbox/examples/HelloWorldFromTrace.java new file mode 100644 index 0000000..2e88815 --- /dev/null +++ b/src/main/java/de/bodden/mopbox/examples/HelloWorldFromTrace.java @@ -0,0 +1,96 @@ +package de.bodden.mopbox.examples; + +import de.bodden.mopbox.util.Reader; +import java.io.BufferedReader; +import java.io.IOException; + +import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; +import de.bodden.mopbox.finitestate.State; +import de.bodden.mopbox.generic.IAlphabet; +import de.bodden.mopbox.generic.IVariableBinding; + +/* + * This is a variant of the Hello World example in which events are read from a file. + */ +public class HelloWorldFromTrace { + + public static void main(String[] args) throws IOException { + HelloWorldMonitor template = new HelloWorldMonitor(); + + /* The following will match because trace1.txt contains lines: + * hello + * world + */ + { + BufferedReader reader = Reader.getReader("trace1.txt"); + String line; + System.out.println("file: "+"trace1.txt"); + while((line=reader.readLine())!=null) { + System.out.println("read: "+line); + template.processEvent(line); + } + template.reset(); + } + + /* The following will not match because trace2.txt contains lines: + * world + * hello + */ + { + BufferedReader reader = Reader.getReader("trace2.txt"); + String line; + System.out.println("file: "+"trace2.txt"); + while((line=reader.readLine())!=null) { + System.out.println("read: "+line); + template.processEvent(line); + } + template.reset(); + } + } + + static class HelloWorldMonitor extends AbstractFSMMonitorTemplate { + + public HelloWorldMonitor() { + //this is necessary to initialize this monitor template; + //we don't do this automatically because often the template may want to compute + //things before initialization + initialize(); + } + + /* + * We define that this monitor is interested in two kinds of events, labeled + * by "hello" and "world". We have to use Strings here because we used "String" + * as the first type parameter to AbstractFSMMonitorTemplate. Had we chosen another + * parameter there, then we could have used other kinds of labels here. + */ + protected void fillAlphabet(IAlphabet alphabet) { + alphabet.makeNewSymbol("hello"); + alphabet.makeNewSymbol("world"); + } + + /* + * Here we create the monitor's states and transitions. We want to be called back + * when having monitored a "hello" event followed by a "world" event. Hence we need + * three states connected by a "hello" and "world" transition. + */ + protected State setupStatesAndTransitions() { + State initial = makeState(false); + State middle = makeState(false); + State error = makeState(true /*is an error state*/); + + initial.addTransition(getSymbolByLabel("hello"), middle); + middle.addTransition(getSymbolByLabel("world"), error); + + return initial; //by convention, we return the initial state + } + + /* + * This is a callback method. MOPBox will call this method when an error state + * was reached. We ignore the parameter "binding" for now. + */ + public void matchCompleted(IVariableBinding binding) { + System.out.println("Hello World!"); + } + + } +} diff --git a/MOPBox/examples/HelloWorldSuffixMatching.java b/src/main/java/de/bodden/mopbox/examples/HelloWorldSuffixMatching.java similarity index 99% rename from MOPBox/examples/HelloWorldSuffixMatching.java rename to src/main/java/de/bodden/mopbox/examples/HelloWorldSuffixMatching.java index 04b5118..3eeb3c0 100644 --- a/MOPBox/examples/HelloWorldSuffixMatching.java +++ b/src/main/java/de/bodden/mopbox/examples/HelloWorldSuffixMatching.java @@ -1,4 +1,4 @@ - +package de.bodden.mopbox.examples; import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; import de.bodden.mopbox.finitestate.State; diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/AbstractFSMMonitor.java b/src/main/java/de/bodden/mopbox/finitestate/AbstractFSMMonitor.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/AbstractFSMMonitor.java rename to src/main/java/de/bodden/mopbox/finitestate/AbstractFSMMonitor.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java similarity index 97% rename from MOPBox/src/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java index cdc92b2..57400b4 100644 --- a/MOPBox/src/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java +++ b/src/main/java/de/bodden/mopbox/finitestate/AbstractFSMMonitorTemplate.java @@ -44,7 +44,7 @@ public Set> computeCreationSymbols() { } /** - * @see de.bodden.mopbox.generic.IMonitorTemplate#createMonitorPrototype() + * @see IMonitorTemplate#createMonitorPrototype() */ @Override public DefaultFSMMonitor createMonitorPrototype() { diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/DefaultFSMMonitor.java b/src/main/java/de/bodden/mopbox/finitestate/DefaultFSMMonitor.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/DefaultFSMMonitor.java rename to src/main/java/de/bodden/mopbox/finitestate/DefaultFSMMonitor.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/IState.java b/src/main/java/de/bodden/mopbox/finitestate/IState.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/IState.java rename to src/main/java/de/bodden/mopbox/finitestate/IState.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/OpenFSMMonitorTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/OpenFSMMonitorTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/OpenFSMMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/OpenFSMMonitorTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/State.java b/src/main/java/de/bodden/mopbox/finitestate/State.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/State.java rename to src/main/java/de/bodden/mopbox/finitestate/State.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/package-info.java b/src/main/java/de/bodden/mopbox/finitestate/package-info.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/package-info.java rename to src/main/java/de/bodden/mopbox/finitestate/package-info.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java similarity index 97% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java index 4d4ded6..ac6a6b7 100644 --- a/MOPBox/src/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java +++ b/src/main/java/de/bodden/mopbox/finitestate/sync/AbstractSyncingFSMMonitorTemplate.java @@ -245,15 +245,16 @@ protected State setupStatesAndTransitions() { return stateFor(Collections.singleton(delegate.getInitialState())); } - protected IAlphabet.AbstractionAndSymbol,K> createAlphabet() { + protected IAlphabet createAlphabet() { super.createAlphabet(); - return new DynamicAlphabet.AbstractionAndSymbol, K>(); + DynamicAlphabet iSymbols = new DynamicAlphabet<>(); + return iSymbols; } private boolean transitionForSymbolAlreadyExists(Set> currentStates, ISymbol symbol, Set> symSuccs) { Map, Set>> symbolToTargets = transitions.get(currentStates); if(symbolToTargets==null) return false; - for(Map.Entry, Set>> symbolAndTargets: symbolToTargets.entrySet()) { + for(Entry, Set>> symbolAndTargets: symbolToTargets.entrySet()) { ISymbol sym = symbolAndTargets.getKey(); if(sym.getLabel().getSymbol().equals(symbol)) { Set> targets = symbolAndTargets.getValue(); @@ -335,11 +336,15 @@ protected void fillAlphabet(IAlphabet alphabet) { * @param symbolLabel the current event's symbol's label * @param binding the current events's binding */ - public void maybeProcessEvent(L symbolLabel, IVariableBinding binding) { + public void maybeProcessEvent(L symbolLabel, IVariableBinding binding) { ISymbol symbol = delegate.getAlphabet().getSymbolByLabel(symbolLabel); - if(shouldMonitor(symbol,binding,skippedSymbols)) { - if(!didMonitorLastEvent) reenableTime++; - processEvent(new AbstractionAndSymbol(abstraction(skippedSymbols), symbol), binding); + if (shouldMonitor(symbol, binding, skippedSymbols)) { + if (!didMonitorLastEvent) { + reenableTime++; + } + AbstractionAndSymbol abstractionAndSymbol = new AbstractionAndSymbol( + abstraction(skippedSymbols), symbol); + processEvent(abstractionAndSymbol, binding); skippedSymbols.clear(); didMonitorLastEvent = true; } else { diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/DefaultSyncingFSMMonitorTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/DefaultSyncingFSMMonitorTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/DefaultSyncingFSMMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/DefaultSyncingFSMMonitorTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/FullSyncingTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/FullSyncingTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/FullSyncingTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/FullSyncingTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/MultisetSyncingTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/MultisetSyncingTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/MultisetSyncingTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/MultisetSyncingTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/NumberAndSymbolSetSyncingTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/NumberAndSymbolSetSyncingTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/NumberAndSymbolSetSyncingTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/NumberAndSymbolSetSyncingTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/NumberSyncingTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/NumberSyncingTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/NumberSyncingTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/NumberSyncingTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SymbolSetSyncingTemplate.java b/src/main/java/de/bodden/mopbox/finitestate/sync/SymbolSetSyncingTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/SymbolSetSyncingTemplate.java rename to src/main/java/de/bodden/mopbox/finitestate/sync/SymbolSetSyncingTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/AbstractMonitorTemplate.java b/src/main/java/de/bodden/mopbox/generic/AbstractMonitorTemplate.java similarity index 93% rename from MOPBox/src/de/bodden/mopbox/generic/AbstractMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/generic/AbstractMonitorTemplate.java index ccd594b..6666d56 100644 --- a/MOPBox/src/de/bodden/mopbox/generic/AbstractMonitorTemplate.java +++ b/src/main/java/de/bodden/mopbox/generic/AbstractMonitorTemplate.java @@ -35,7 +35,7 @@ public abstract class AbstractMonitorTemplate,L,K,V> imp * Initializes the template, filling in the alphabet and creating the indexing strategy. */ protected void initialize() { - alphabet = createAlphabet(); + alphabet = createAlphabet(); emptyBinding = createEmptyBinding(); fillAlphabet(alphabet); indexingStrategy = createIndexingStrategy(); @@ -80,12 +80,12 @@ public IAlphabet getAlphabet() { * TODO Right now the entire method is synchronized. It would be nice to have a more * fine-grained locking scheme. * - * @see de.bodden.mopbox.generic.IMonitorTemplate#processEvent(de.bodden.mopbox.generic.IEvent) + * @see IMonitorTemplate#processEvent(de.bodden.mopbox.generic.IEvent) */ @Override public synchronized void processEvent(L label, IVariableBinding binding){ assert alphabet.variables().containsAll(binding.keySet()): - "Event has undefined variables: "+binding+" vs. "+alphabet; + "Event has undefined variables: "+binding.keySet()+" vs. "+alphabet.variables(); assert initialized : "not initialized!"; getIndexingStrategy().processEvent(getSymbolByLabel(label), binding); @@ -128,4 +128,8 @@ public void reset() { public IVariableBinding createEmptyBinding() { return new VariableBinding(); } + + public void setAlphabet(IAlphabet alphabet) { + this.alphabet = alphabet; + } } diff --git a/MOPBox/src/de/bodden/mopbox/generic/IAlphabet.java b/src/main/java/de/bodden/mopbox/generic/IAlphabet.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/IAlphabet.java rename to src/main/java/de/bodden/mopbox/generic/IAlphabet.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/IIndexingStrategy.java b/src/main/java/de/bodden/mopbox/generic/IIndexingStrategy.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/IIndexingStrategy.java rename to src/main/java/de/bodden/mopbox/generic/IIndexingStrategy.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/IMonitor.java b/src/main/java/de/bodden/mopbox/generic/IMonitor.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/IMonitor.java rename to src/main/java/de/bodden/mopbox/generic/IMonitor.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/IMonitorTemplate.java b/src/main/java/de/bodden/mopbox/generic/IMonitorTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/IMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/generic/IMonitorTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/ISymbol.java b/src/main/java/de/bodden/mopbox/generic/ISymbol.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/ISymbol.java rename to src/main/java/de/bodden/mopbox/generic/ISymbol.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/IVariableBinding.java b/src/main/java/de/bodden/mopbox/generic/IVariableBinding.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/IVariableBinding.java rename to src/main/java/de/bodden/mopbox/generic/IVariableBinding.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/def/Alphabet.java b/src/main/java/de/bodden/mopbox/generic/def/Alphabet.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/def/Alphabet.java rename to src/main/java/de/bodden/mopbox/generic/def/Alphabet.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/def/DynamicAlphabet.java b/src/main/java/de/bodden/mopbox/generic/def/DynamicAlphabet.java similarity index 85% rename from MOPBox/src/de/bodden/mopbox/generic/def/DynamicAlphabet.java rename to src/main/java/de/bodden/mopbox/generic/def/DynamicAlphabet.java index 8f1a63f..9a741b9 100644 --- a/MOPBox/src/de/bodden/mopbox/generic/def/DynamicAlphabet.java +++ b/src/main/java/de/bodden/mopbox/generic/def/DynamicAlphabet.java @@ -14,8 +14,8 @@ public class DynamicAlphabet implements IAlphabet { private int nextSymbolIndex = 0; - private Set> backingSet = new HashSet>(); - private Map> labelToSymbol = new HashMap>(); + private Set> backingSet = new HashSet<>(); + private Map> labelToSymbol = new HashMap<>(); /** * Creates a new symbol for the given label, adding the symbol to this @@ -23,7 +23,7 @@ public class DynamicAlphabet implements IAlphabet { */ @Override public ISymbol makeNewSymbol(L label, K... variables) { - Symbol symbol = new Symbol(nextSymbolIndex++,label,0); + Symbol symbol = new Symbol<>(nextSymbolIndex++, label, 0); backingSet.add(symbol); labelToSymbol.put(label, symbol); return symbol; diff --git a/MOPBox/src/de/bodden/mopbox/generic/def/Symbol.java b/src/main/java/de/bodden/mopbox/generic/def/Symbol.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/def/Symbol.java rename to src/main/java/de/bodden/mopbox/generic/def/Symbol.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/def/VariableBinding.java b/src/main/java/de/bodden/mopbox/generic/def/VariableBinding.java similarity index 95% rename from MOPBox/src/de/bodden/mopbox/generic/def/VariableBinding.java rename to src/main/java/de/bodden/mopbox/generic/def/VariableBinding.java index bccb39d..7af6b0e 100644 --- a/MOPBox/src/de/bodden/mopbox/generic/def/VariableBinding.java +++ b/src/main/java/de/bodden/mopbox/generic/def/VariableBinding.java @@ -10,8 +10,8 @@ import java.util.Map; import java.util.Set; -import org.apache.commons.collections15.map.AbstractReferenceMap; -import org.apache.commons.collections15.map.ReferenceIdentityMap; +import org.apache.commons.collections4.map.AbstractReferenceMap; +import org.apache.commons.collections4.map.ReferenceIdentityMap; import de.bodden.mopbox.generic.IVariableBinding; @@ -26,7 +26,7 @@ public class VariableBinding extends ReferenceIdentityMap implements public VariableBinding(Map map) { //TODO want to use weak values here but the problem is that these maps are used as keys //in other maps; hence need to update the parent maps! - super(AbstractReferenceMap.HARD,AbstractReferenceMap.HARD); + super(AbstractReferenceMap.ReferenceStrength.HARD,AbstractReferenceMap.ReferenceStrength.HARD); putAll(map); } diff --git a/MOPBox/src/de/bodden/mopbox/generic/def/package-info.java b/src/main/java/de/bodden/mopbox/generic/def/package-info.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/def/package-info.java rename to src/main/java/de/bodden/mopbox/generic/def/package-info.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/fast/StrategyB.java b/src/main/java/de/bodden/mopbox/generic/indexing/fast/StrategyB.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/fast/StrategyB.java rename to src/main/java/de/bodden/mopbox/generic/indexing/fast/StrategyB.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiKey.java b/src/main/java/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiKey.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiKey.java rename to src/main/java/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiKey.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiMap.java b/src/main/java/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiMap.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiMap.java rename to src/main/java/de/bodden/mopbox/generic/indexing/fast/WeakIdentityMultiMap.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/package-info.java b/src/main/java/de/bodden/mopbox/generic/indexing/package-info.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/package-info.java rename to src/main/java/de/bodden/mopbox/generic/indexing/package-info.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/IndexingStrategyFactory.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/IndexingStrategyFactory.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/IndexingStrategyFactory.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/IndexingStrategyFactory.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyB.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyB.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyB.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyB.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyC.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyC.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyC.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyC.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyCPlus.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyCPlus.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/StrategyCPlus.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/StrategyCPlus.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/SymbolBasedIndexing.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/SymbolBasedIndexing.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/SymbolBasedIndexing.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/SymbolBasedIndexing.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/notes.txt b/src/main/java/de/bodden/mopbox/generic/indexing/simple/notes.txt similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/notes.txt rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/notes.txt diff --git a/MOPBox/src/de/bodden/mopbox/generic/indexing/simple/package-info.java b/src/main/java/de/bodden/mopbox/generic/indexing/simple/package-info.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/indexing/simple/package-info.java rename to src/main/java/de/bodden/mopbox/generic/indexing/simple/package-info.java diff --git a/MOPBox/src/de/bodden/mopbox/generic/package-info.java b/src/main/java/de/bodden/mopbox/generic/package-info.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/generic/package-info.java rename to src/main/java/de/bodden/mopbox/generic/package-info.java diff --git a/MOPBox/src/de/bodden/mopbox/tracereader/FailSafeIterMonitorTemplate.java b/src/main/java/de/bodden/mopbox/tracereader/FailSafeIterMonitorTemplate.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/tracereader/FailSafeIterMonitorTemplate.java rename to src/main/java/de/bodden/mopbox/tracereader/FailSafeIterMonitorTemplate.java diff --git a/MOPBox/src/de/bodden/mopbox/tracereader/TraceReader.java b/src/main/java/de/bodden/mopbox/tracereader/TraceReader.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/tracereader/TraceReader.java rename to src/main/java/de/bodden/mopbox/tracereader/TraceReader.java diff --git a/MOPBox/src/de/bodden/mopbox/util/PerfTest.java b/src/main/java/de/bodden/mopbox/util/PerfTest.java similarity index 84% rename from MOPBox/src/de/bodden/mopbox/util/PerfTest.java rename to src/main/java/de/bodden/mopbox/util/PerfTest.java index e2ff03a..09d6159 100644 --- a/MOPBox/src/de/bodden/mopbox/util/PerfTest.java +++ b/src/main/java/de/bodden/mopbox/util/PerfTest.java @@ -2,16 +2,15 @@ import java.util.Map; -import org.apache.commons.collections15.map.AbstractReferenceMap; -import org.apache.commons.collections15.map.ReferenceIdentityMap; - import de.bodden.mopbox.generic.indexing.fast.WeakIdentityMultiMap; +import org.apache.commons.collections4.map.AbstractReferenceMap; +import org.apache.commons.collections4.map.ReferenceIdentityMap; @SuppressWarnings({"rawtypes","unchecked"}) public class PerfTest { private static final int MAX = 100000; - static Map map = new ReferenceIdentityMap(AbstractReferenceMap.WEAK, AbstractReferenceMap.HARD); + static Map map = new ReferenceIdentityMap(AbstractReferenceMap.ReferenceStrength.WEAK, AbstractReferenceMap.ReferenceStrength.HARD); static WeakIdentityMultiMap weakMap = new WeakIdentityMultiMap(16,0.75f,true); public static void main(String[] args) { @@ -54,7 +53,7 @@ public static void main(String[] args) { private static void associate(Object o, Object o2, Object o3) { Map map2 = (Map) map.get(o); if(map2==null) { - map2 = new ReferenceIdentityMap(AbstractReferenceMap.WEAK, AbstractReferenceMap.HARD); + map2 = new ReferenceIdentityMap(AbstractReferenceMap.ReferenceStrength.WEAK, AbstractReferenceMap.ReferenceStrength.HARD); map.put(o, map2); } map2.put(o2, o3); diff --git a/MOPBox/src/de/bodden/mopbox/util/Powerset.java b/src/main/java/de/bodden/mopbox/util/Powerset.java similarity index 100% rename from MOPBox/src/de/bodden/mopbox/util/Powerset.java rename to src/main/java/de/bodden/mopbox/util/Powerset.java diff --git a/src/main/java/de/bodden/mopbox/util/Reader.java b/src/main/java/de/bodden/mopbox/util/Reader.java new file mode 100644 index 0000000..5249bda --- /dev/null +++ b/src/main/java/de/bodden/mopbox/util/Reader.java @@ -0,0 +1,15 @@ +package de.bodden.mopbox.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; + +public class Reader { + + public static BufferedReader getReader(String fileName) throws IOException { + URL url = Thread.currentThread().getContextClassLoader().getResource(fileName); + return new BufferedReader(new InputStreamReader(url.openStream())); + } + +} diff --git a/MOPBox/examples/trace-bloat.txt b/src/main/resources/trace-bloat.txt similarity index 100% rename from MOPBox/examples/trace-bloat.txt rename to src/main/resources/trace-bloat.txt diff --git a/MOPBox/examples/trace1.txt b/src/main/resources/trace1.txt similarity index 100% rename from MOPBox/examples/trace1.txt rename to src/main/resources/trace1.txt diff --git a/MOPBox/examples/trace2.txt b/src/main/resources/trace2.txt similarity index 100% rename from MOPBox/examples/trace2.txt rename to src/main/resources/trace2.txt diff --git a/MOPBox/test/helpers/ASyncContainsAllMonitorTemplate.java b/src/test/java/de/bodden/mopbox/helpers/ASyncContainsAllMonitorTemplate.java similarity index 97% rename from MOPBox/test/helpers/ASyncContainsAllMonitorTemplate.java rename to src/test/java/de/bodden/mopbox/helpers/ASyncContainsAllMonitorTemplate.java index c5f1a9a..5753b64 100644 --- a/MOPBox/test/helpers/ASyncContainsAllMonitorTemplate.java +++ b/src/test/java/de/bodden/mopbox/helpers/ASyncContainsAllMonitorTemplate.java @@ -1,4 +1,4 @@ -package helpers; +package de.bodden.mopbox.helpers; import de.bodden.mopbox.finitestate.State; import de.bodden.mopbox.generic.IAlphabet; diff --git a/MOPBox/test/helpers/AbstractFSMMonitorTestTemplate.java b/src/test/java/de/bodden/mopbox/helpers/AbstractFSMMonitorTestTemplate.java similarity index 92% rename from MOPBox/test/helpers/AbstractFSMMonitorTestTemplate.java rename to src/test/java/de/bodden/mopbox/helpers/AbstractFSMMonitorTestTemplate.java index 7d292cc..5c4ef18 100644 --- a/MOPBox/test/helpers/AbstractFSMMonitorTestTemplate.java +++ b/src/test/java/de/bodden/mopbox/helpers/AbstractFSMMonitorTestTemplate.java @@ -1,11 +1,12 @@ -package helpers; +package de.bodden.mopbox.helpers; -import test.AllTests; +//import test.AllTests; import de.bodden.mopbox.finitestate.AbstractFSMMonitorTemplate; import de.bodden.mopbox.finitestate.OpenFSMMonitorTemplate; import de.bodden.mopbox.generic.IIndexingStrategy; import de.bodden.mopbox.generic.IVariableBinding; import de.bodden.mopbox.generic.indexing.simple.IndexingStrategyFactory; +import de.bodden.mopbox.test.AllTests; /** * An {@link AbstractFSMMonitorTemplate} with special functionality for supporting JUnit tests. diff --git a/MOPBox/test/helpers/ConnectionClosedMonitorTemplate.java b/src/test/java/de/bodden/mopbox/helpers/ConnectionClosedMonitorTemplate.java similarity index 73% rename from MOPBox/test/helpers/ConnectionClosedMonitorTemplate.java rename to src/test/java/de/bodden/mopbox/helpers/ConnectionClosedMonitorTemplate.java index 619934a..aa81920 100644 --- a/MOPBox/test/helpers/ConnectionClosedMonitorTemplate.java +++ b/src/test/java/de/bodden/mopbox/helpers/ConnectionClosedMonitorTemplate.java @@ -1,19 +1,20 @@ -package helpers; +package de.bodden.mopbox.helpers; -import static helpers.ConnectionClosedMonitorTemplate.Var.C; +//import static helpers.ConnectionClosedMonitorTemplate.Var.C; +import de.bodden.mopbox.helpers.ConnectionClosedMonitorTemplate.Var; import java.util.Arrays; import java.util.Set; import de.bodden.mopbox.finitestate.State; import de.bodden.mopbox.generic.IAlphabet; -import helpers.ConnectionClosedMonitorTemplate.Var; +//import helpers.ConnectionClosedMonitorTemplate.Var; /** * This is a concrete monitor template for the following regular-expression property: * close+(c) write(c) */ -public class ConnectionClosedMonitorTemplate extends AbstractFSMMonitorTestTemplate { +public class ConnectionClosedMonitorTemplate extends AbstractFSMMonitorTestTemplate { public enum Var { C } @@ -24,8 +25,8 @@ protected void fillVariables(Set variables) { @Override protected void fillAlphabet(IAlphabet a) { - a.makeNewSymbol("close", C); - a.makeNewSymbol("write", C); + a.makeNewSymbol("close", Var.C); + a.makeNewSymbol("write", Var.C); } protected State setupStatesAndTransitions() { diff --git a/MOPBox/test/helpers/FailSafeIterMonitorTemplate.java b/src/test/java/de/bodden/mopbox/helpers/FailSafeIterMonitorTemplate.java similarity index 75% rename from MOPBox/test/helpers/FailSafeIterMonitorTemplate.java rename to src/test/java/de/bodden/mopbox/helpers/FailSafeIterMonitorTemplate.java index 3ebc5ed..c09f273 100644 --- a/MOPBox/test/helpers/FailSafeIterMonitorTemplate.java +++ b/src/test/java/de/bodden/mopbox/helpers/FailSafeIterMonitorTemplate.java @@ -1,20 +1,21 @@ -package helpers; +package de.bodden.mopbox.helpers; -import static helpers.FailSafeIterMonitorTemplate.Var.C; -import static helpers.FailSafeIterMonitorTemplate.Var.I; +//import static helpers.FailSafeIterMonitorTemplate.Var.C; +//import static helpers.FailSafeIterMonitorTemplate.Var.I; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var; import java.util.Arrays; import java.util.Set; import de.bodden.mopbox.finitestate.State; import de.bodden.mopbox.generic.IAlphabet; -import helpers.FailSafeIterMonitorTemplate.Var; +//import helpers.FailSafeIterMonitorTemplate.Var; /** * This is a concrete monitor template for the following regular-expression property: * create(c,i) update(c)* iter(i)+ update(c)+ iter(i) */ -public class FailSafeIterMonitorTemplate extends AbstractFSMMonitorTestTemplate { +public class FailSafeIterMonitorTemplate extends AbstractFSMMonitorTestTemplate { public enum Var{ C, I } @@ -25,9 +26,9 @@ protected void fillVariables(Set variables) { @Override protected void fillAlphabet(IAlphabet a) { - a.makeNewSymbol("create", C, I); - a.makeNewSymbol("update", C); - a.makeNewSymbol("iter", I); + a.makeNewSymbol("create", Var.C, Var.I); + a.makeNewSymbol("update", Var.C); + a.makeNewSymbol("iter", Var.I); } protected State setupStatesAndTransitions() { diff --git a/MOPBox/test/helpers/HasNextMonitorTemplate.java b/src/test/java/de/bodden/mopbox/helpers/HasNextMonitorTemplate.java similarity index 76% rename from MOPBox/test/helpers/HasNextMonitorTemplate.java rename to src/test/java/de/bodden/mopbox/helpers/HasNextMonitorTemplate.java index 864ca1f..7b12fa4 100644 --- a/MOPBox/test/helpers/HasNextMonitorTemplate.java +++ b/src/test/java/de/bodden/mopbox/helpers/HasNextMonitorTemplate.java @@ -1,19 +1,20 @@ -package helpers; +package de.bodden.mopbox.helpers; -import static helpers.HasNextMonitorTemplate.Var.I; +//import static helpers.HasNextMonitorTemplate.Var.I; +import de.bodden.mopbox.helpers.HasNextMonitorTemplate.Var; import java.util.Arrays; import java.util.Set; import de.bodden.mopbox.finitestate.State; import de.bodden.mopbox.generic.IAlphabet; -import helpers.HasNextMonitorTemplate.Var; +//import helpers.HasNextMonitorTemplate.Var; /** * This is a concrete monitor template for the following regular-expression property: * next(i) next(i) over the alphabet {hasNext, next} */ -public class HasNextMonitorTemplate extends AbstractFSMMonitorTestTemplate { +public class HasNextMonitorTemplate extends AbstractFSMMonitorTestTemplate { public enum Var { I } @@ -24,8 +25,8 @@ protected void fillVariables(Set variables) { @Override protected void fillAlphabet(IAlphabet a) { - a.makeNewSymbol("hasNext", I); - a.makeNewSymbol("next", I); + a.makeNewSymbol("hasNext", Var.I); + a.makeNewSymbol("next", Var.I); } protected State setupStatesAndTransitions() { diff --git a/MOPBox/test/helpers/StringBasedBinding.java b/src/test/java/de/bodden/mopbox/helpers/StringBasedBinding.java similarity index 96% rename from MOPBox/test/helpers/StringBasedBinding.java rename to src/test/java/de/bodden/mopbox/helpers/StringBasedBinding.java index 66cea32..dcadefd 100644 --- a/MOPBox/test/helpers/StringBasedBinding.java +++ b/src/test/java/de/bodden/mopbox/helpers/StringBasedBinding.java @@ -1,4 +1,4 @@ -package helpers; +package de.bodden.mopbox.helpers; import de.bodden.mopbox.generic.IVariableBinding; import de.bodden.mopbox.generic.def.VariableBinding; diff --git a/MOPBox/test/helpers/package-info.java b/src/test/java/de/bodden/mopbox/helpers/package-info.java similarity index 94% rename from MOPBox/test/helpers/package-info.java rename to src/test/java/de/bodden/mopbox/helpers/package-info.java index fc0cc7d..5a19b1b 100644 --- a/MOPBox/test/helpers/package-info.java +++ b/src/test/java/de/bodden/mopbox/helpers/package-info.java @@ -8,4 +8,4 @@ * In 16th ACM SIGSOFT International Symposium on Foundations of Software Engineering (SIGSOFT'08/FSE-16), pages 36-47, ACM, 2008 * */ -package helpers; \ No newline at end of file +package de.bodden.mopbox.helpers; \ No newline at end of file diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests3.java b/src/test/java/de/bodden/mopbox/sync/EvenMoreSyncTest.java similarity index 92% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests3.java rename to src/test/java/de/bodden/mopbox/sync/EvenMoreSyncTest.java index 039b36d..490bde7 100644 --- a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests3.java +++ b/src/test/java/de/bodden/mopbox/sync/EvenMoreSyncTest.java @@ -1,11 +1,13 @@ -package de.bodden.mopbox.finitestate.sync; +package de.bodden.mopbox.sync; -import helpers.FailSafeIterMonitorTemplate; -import helpers.FailSafeIterMonitorTemplate.Var; +import de.bodden.mopbox.finitestate.sync.SymbolSetSyncingTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var; import java.util.Arrays; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.google.common.collect.Multiset; @@ -14,7 +16,7 @@ import de.bodden.mopbox.generic.IVariableBinding; import de.bodden.mopbox.generic.def.VariableBinding; -public class SyncTests3 { +public class EvenMoreSyncTest { String trace = ""; @@ -87,6 +89,7 @@ public void matchCompleted(IVariableBinding binding) { } @Test + @Ignore public void setBasedAbstractionMatch() { symbolSetSync.maybeProcessEvent("create", b_ci); diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests2.java b/src/test/java/de/bodden/mopbox/sync/MoreSyncTest.java similarity index 91% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests2.java rename to src/test/java/de/bodden/mopbox/sync/MoreSyncTest.java index 5ab98c2..70f89cf 100644 --- a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests2.java +++ b/src/test/java/de/bodden/mopbox/sync/MoreSyncTest.java @@ -1,12 +1,16 @@ -package de.bodden.mopbox.finitestate.sync; +package de.bodden.mopbox.sync; +import de.bodden.mopbox.finitestate.sync.FullSyncingTemplate; +import de.bodden.mopbox.finitestate.sync.MultisetSyncingTemplate; +import de.bodden.mopbox.finitestate.sync.SymbolSetSyncingTemplate; import java.util.Arrays; import junit.framework.Assert; -import helpers.FailSafeIterMonitorTemplate; -import helpers.FailSafeIterMonitorTemplate.Var; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.google.common.collect.Multiset; @@ -15,7 +19,8 @@ import de.bodden.mopbox.generic.IVariableBinding; import de.bodden.mopbox.generic.def.VariableBinding; -public class SyncTests2 { +@Ignore +public class MoreSyncTest { String trace = ""; diff --git a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests.java b/src/test/java/de/bodden/mopbox/sync/SyncTest.java similarity index 90% rename from MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests.java rename to src/test/java/de/bodden/mopbox/sync/SyncTest.java index 63c7a1c..4b41cce 100644 --- a/MOPBox/src/de/bodden/mopbox/finitestate/sync/SyncTests.java +++ b/src/test/java/de/bodden/mopbox/sync/SyncTest.java @@ -1,10 +1,13 @@ -package de.bodden.mopbox.finitestate.sync; +package de.bodden.mopbox.sync; +import de.bodden.mopbox.finitestate.sync.MultisetSyncingTemplate; +import de.bodden.mopbox.finitestate.sync.NumberSyncingTemplate; import junit.framework.Assert; -import helpers.FailSafeIterMonitorTemplate; -import helpers.FailSafeIterMonitorTemplate.Var; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.google.common.collect.Multiset; @@ -13,19 +16,20 @@ import de.bodden.mopbox.generic.IVariableBinding; import de.bodden.mopbox.generic.def.VariableBinding; -public class SyncTests { +@Ignore +public class SyncTest { protected String trace = ""; - IVariableBinding b_empty = new VariableBinding(); + IVariableBinding b_empty = new VariableBinding<>(); - IVariableBinding b_c = new VariableBinding(); + IVariableBinding b_c = new VariableBinding<>(); - IVariableBinding b_c2 = new VariableBinding(); + IVariableBinding b_c2 = new VariableBinding<>(); - IVariableBinding b_i = new VariableBinding(); + IVariableBinding b_i = new VariableBinding<>(); - IVariableBinding b_ci = new VariableBinding(); + IVariableBinding b_ci = new VariableBinding<>(); FailSafeIterMonitorTemplate fsiNormal; FailSafeIterMonitorTemplate fsiNumber; @@ -124,8 +128,8 @@ public void multisetSimpleCase() { multisetSync.maybeProcessEvent("iter", b_i); //monitored fsiNormal.processEvent("iter", b_i); - Assert.assertEquals("{C=c, I=i1}",syncTrace()); Assert.assertEquals("{C=c, I=i1}",normalTrace()); + Assert.assertEquals("{C=c, I=i1}",syncTrace()); } diff --git a/MOPBox/test/test/ASyncContainsAll.java b/src/test/java/de/bodden/mopbox/test/ASyncContainsAllTest.java similarity index 59% rename from MOPBox/test/test/ASyncContainsAll.java rename to src/test/java/de/bodden/mopbox/test/ASyncContainsAllTest.java index 8e0eb50..f2a3170 100644 --- a/MOPBox/test/test/ASyncContainsAll.java +++ b/src/test/java/de/bodden/mopbox/test/ASyncContainsAllTest.java @@ -1,17 +1,18 @@ -package test; +package de.bodden.mopbox.test; -import helpers.ASyncContainsAllMonitorTemplate; -import helpers.AbstractFSMMonitorTestTemplate; -import helpers.StringBasedBinding; +import de.bodden.mopbox.helpers.ASyncContainsAllMonitorTemplate; +import de.bodden.mopbox.helpers.AbstractFSMMonitorTestTemplate; +import de.bodden.mopbox.helpers.StringBasedBinding; import junit.framework.Assert; +import org.junit.Ignore; import org.junit.Test; /** * Tests for the {@link ASyncContainsAllMonitorTemplate}. */ -public class ASyncContainsAll extends AbstractTest { +public class ASyncContainsAllTest extends AbstractTest { @Override protected AbstractFSMMonitorTestTemplate makeTemplate() { @@ -19,6 +20,7 @@ protected AbstractFSMMonitorTestTemplate makeTemplate() { } @Test + @Ignore // comment from Eric: currently disabled due to complicated events/var bindings public void testSimple() { template.processEvent("sync",new StringBasedBinding("c=c1")); template.processEvent("sync",new StringBasedBinding("d=c2")); diff --git a/MOPBox/test/test/AbstractTest.java b/src/test/java/de/bodden/mopbox/test/AbstractTest.java similarity index 92% rename from MOPBox/test/test/AbstractTest.java rename to src/test/java/de/bodden/mopbox/test/AbstractTest.java index 411bfb2..74190ac 100644 --- a/MOPBox/test/test/AbstractTest.java +++ b/src/test/java/de/bodden/mopbox/test/AbstractTest.java @@ -1,6 +1,7 @@ -package test; -import helpers.AbstractFSMMonitorTestTemplate; +package de.bodden.mopbox.test; +//import helpers.AbstractFSMMonitorTestTemplate; +import de.bodden.mopbox.helpers.AbstractFSMMonitorTestTemplate; import java.util.Collection; import java.util.LinkedList; diff --git a/MOPBox/test/test/AllTests.java b/src/test/java/de/bodden/mopbox/test/AllTests.java similarity index 74% rename from MOPBox/test/test/AllTests.java rename to src/test/java/de/bodden/mopbox/test/AllTests.java index 3e2e1e8..09cae54 100644 --- a/MOPBox/test/test/AllTests.java +++ b/src/test/java/de/bodden/mopbox/test/AllTests.java @@ -1,4 +1,4 @@ -package test; +package de.bodden.mopbox.test; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -9,13 +9,13 @@ /** * A test suite encapsulating all current unit tests. */ -@RunWith(Suite.class) -@Suite.SuiteClasses({ - ConnectionClosed.class, - FailSafeIter.class, +//@RunWith(Suite.class) +//@Suite.SuiteClasses({ +// ConnectionClosedTest.class, +// FailSafeIterTest.class, // ASyncContainsAll.class, currently disabled due to complicated events/var bindings - HasNext.class -}) +// HasNextTest.class +//}) public class AllTests { @SuppressWarnings("rawtypes") diff --git a/MOPBox/test/test/ConnectionClosed.java b/src/test/java/de/bodden/mopbox/test/ConnectionClosedTest.java similarity index 80% rename from MOPBox/test/test/ConnectionClosed.java rename to src/test/java/de/bodden/mopbox/test/ConnectionClosedTest.java index 057e289..98f7c3d 100644 --- a/MOPBox/test/test/ConnectionClosed.java +++ b/src/test/java/de/bodden/mopbox/test/ConnectionClosedTest.java @@ -1,10 +1,11 @@ -package test; +package de.bodden.mopbox.test; -import static helpers.ConnectionClosedMonitorTemplate.Var.C; -import helpers.AbstractFSMMonitorTestTemplate; -import helpers.ConnectionClosedMonitorTemplate; -import helpers.ConnectionClosedMonitorTemplate.Var; +import static de.bodden.mopbox.helpers.ConnectionClosedMonitorTemplate.Var.C; + +import de.bodden.mopbox.helpers.AbstractFSMMonitorTestTemplate; +import de.bodden.mopbox.helpers.ConnectionClosedMonitorTemplate; +import de.bodden.mopbox.helpers.ConnectionClosedMonitorTemplate.Var; import junit.framework.Assert; import org.junit.Test; @@ -15,11 +16,11 @@ /** * Tests for the {@link ConnectionClosedMonitorTemplate}. */ -public class ConnectionClosed extends AbstractTest { +public class ConnectionClosedTest extends AbstractTest { IVariableBinding v,v2; - public ConnectionClosed() { + public ConnectionClosedTest() { v = new VariableBinding(); v.put(C, new Object() { @Override diff --git a/MOPBox/test/test/FailSafeIter.java b/src/test/java/de/bodden/mopbox/test/FailSafeIterTest.java similarity index 83% rename from MOPBox/test/test/FailSafeIter.java rename to src/test/java/de/bodden/mopbox/test/FailSafeIterTest.java index 3110c93..efdff31 100644 --- a/MOPBox/test/test/FailSafeIter.java +++ b/src/test/java/de/bodden/mopbox/test/FailSafeIterTest.java @@ -1,13 +1,14 @@ -package test; +package de.bodden.mopbox.test; -import static helpers.FailSafeIterMonitorTemplate.Var.C; -import static helpers.FailSafeIterMonitorTemplate.Var.I; -import helpers.AbstractFSMMonitorTestTemplate; -import helpers.FailSafeIterMonitorTemplate; -import helpers.FailSafeIterMonitorTemplate.Var; +import static de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var.C; +import static de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var.I; +import de.bodden.mopbox.helpers.AbstractFSMMonitorTestTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate; +import de.bodden.mopbox.helpers.FailSafeIterMonitorTemplate.Var; import junit.framework.Assert; +import org.junit.Ignore; import org.junit.Test; import de.bodden.mopbox.generic.IVariableBinding; @@ -16,11 +17,11 @@ /** * Tests for the {@link FailSafeIterMonitorTemplate}. */ -public class FailSafeIter extends AbstractTest { +public class FailSafeIterTest extends AbstractTest { IVariableBinding c1i1, c1i2, c1, i1, i2; - public FailSafeIter() { + public FailSafeIterTest() { c1i1 = new VariableBinding(); c1i1.put(C, "c1"); c1i1.put(I, "i1"); @@ -79,6 +80,7 @@ public void perfSingleIterManyEvents() { } @Test + @Ignore public void perfManyItersManyEvents() { begin(); for(int i=0;i<1000;i++) { diff --git a/MOPBox/test/test/HasNext.java b/src/test/java/de/bodden/mopbox/test/HasNextTest.java similarity index 76% rename from MOPBox/test/test/HasNext.java rename to src/test/java/de/bodden/mopbox/test/HasNextTest.java index 4c655a7..eaff00b 100644 --- a/MOPBox/test/test/HasNext.java +++ b/src/test/java/de/bodden/mopbox/test/HasNextTest.java @@ -1,10 +1,10 @@ -package test; +package de.bodden.mopbox.test; -import static helpers.HasNextMonitorTemplate.Var.I; -import helpers.AbstractFSMMonitorTestTemplate; -import helpers.HasNextMonitorTemplate; -import helpers.HasNextMonitorTemplate.Var; +import static de.bodden.mopbox.helpers.HasNextMonitorTemplate.Var.I; +import de.bodden.mopbox.helpers.AbstractFSMMonitorTestTemplate; +import de.bodden.mopbox.helpers.HasNextMonitorTemplate; +import de.bodden.mopbox.helpers.HasNextMonitorTemplate.Var; import junit.framework.Assert; import org.junit.Test; @@ -15,11 +15,11 @@ /** * Tests for the {@link HasNextMonitorTemplate}. */ -public class HasNext extends AbstractTest { +public class HasNextTest extends AbstractTest { IVariableBinding v, v2; - public HasNext() { + public HasNextTest() { v = new VariableBinding(); v.put(I, "i1"); v2 = new VariableBinding(); diff --git a/MOPBox/test/test/package-info.java b/src/test/java/de/bodden/mopbox/test/package-info.java similarity index 69% rename from MOPBox/test/test/package-info.java rename to src/test/java/de/bodden/mopbox/test/package-info.java index 41b800e..804a38b 100644 --- a/MOPBox/test/test/package-info.java +++ b/src/test/java/de/bodden/mopbox/test/package-info.java @@ -1,4 +1,4 @@ /** * This package contains all JUnit tests for this library. */ -package test; \ No newline at end of file +package de.bodden.mopbox.test; \ No newline at end of file