Commit 647f9bfd authored by Jonathan Shahen's avatar Jonathan Shahen

Strange eclipse bug where there is a class not found error, but the build...

Strange eclipse bug where there is a class not found error, but the build script works.....Saw this on the other project too, but it fixed its self (might just be a local problem)

Still need to debug the ANTLR4 grammar but it is almost done for parsing
parent a83e70b3
......@@ -2,6 +2,11 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="lib" path="lib/commons-cli-1.2/commons-cli-1.2.jar"/>
<classpathentry kind="lib" path="lib/commons-cli-1.2.jar"/>
<classpathentry kind="lib" path="lib/commons-lang3-3.3.2.jar"/>
<classpathentry kind="lib" path="lib/antlr-4.4-complete.jar"/>
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
<classpathentry kind="lib" path="lib/stringtemplate.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
/bin/
target/
src/mohawk/converter/generated/*.java
src/mohawk/converter/generated/*.tokens
......@@ -5,6 +5,11 @@
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
......@@ -13,5 +18,6 @@
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>
# everything after a hash tag, until the newline, is considered a comment and ignored
# white space is ignored, this includes tabs and spaces and newline characters
# You can put as much white space anywhere and it will be ignored
# control chain: remove comments -> remove whitespace -> parse text into internal structure -> convert
# The order of the document doesn't matter: MaxRoles can be last, first, or somewhere in the middle and same goes for all the others
MaxRoles: 15 # roles count from 0 to MaxRoles - 1; represented below with 'role0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
MaxTimeSlots: 10 # time slots count from 0 to MaxTimeSlots - 1; represented below with 't0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
/* everything after a hash tag, until the newline, is considered a comment and ignored
*
* white space is ignored, this includes tabs and spaces and newline characters
* You can put as much white space anywhere and it will be ignored
*
* control chain: remove comments -> remove whitespace -> parse text into internal structure -> convert
*
* The order of the document doesn't matter: MaxRoles can be last, first, or somewhere in the middle and same goes for all the others
*/
MaxRoles : 15 // roles count from 0 to MaxRoles - 1; represented below with 'role0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
MaxTimeSlots: 10 // time slots count from 0 to MaxTimeSlots - 1; represented below with 't0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
CanAssign {
#<Admin role, starting timeslot - end timeslot for admin role, role preconditions, [time slot rule gives role to user for, another time slot (optional)...],role to give to the user>
// <Admin role, starting timeslot - end timeslot for admin role, role preconditions, [time slot rule gives role to user for, another time slot (optional)...],role to give to the user>
<role0,t0-t5,TRUE,[t1,t1],role1> #(1)
<role0,t0-t0,role1 & NOT role2 & role3,[t1,t2],role2> #(2)
}
CanRevoke {
# same as above
// same as above
}
CanEnable {
# same as above
// same as above
}
CanDisable {
# same as above
// same as above
}
# Query: timeslot to check, [set of roles that the user must have in the timeslot (no NOTs allowed)]
// Query: timeslot to check, [set of roles that the user must have in the timeslot (no NOTs allowed)]
Query: t0,[role1,role0,role2]
\ No newline at end of file
<!--
@author Jonathan Shahen
-->
<project name="mohawk_converter" default="dist" basedir=".">
<description>Mohawk-T Converter Tool.</description>
<!-- set global properties for this build -->
<property name="src" location="src" />
<property name="lib" location="lib" />
<property name="bin" location="bin" />
<property name="data" location="data" />
<property name="build" location="${bin}/build" />
<property name="dist" location="${bin}/dist" />
<property name="mohawksrc" location="${src}/mohawk" />
<property name="antlr-script" location="${mohawksrc}/converter/generated" />
<property name="antlr" location="${lib}/antlr-4.4-complete.jar" />
<property name="junit" location="${lib}/junit-4.12.jar" />
<property name="qtest" location="${data}/" />
<!-- TODO -->
<target name="init">
<!-- create the bin directory -->
<mkdir dir="${bin}" />
<!-- create the build directory -->
<mkdir dir="${build}" />
<!-- create the distribution directory -->
<mkdir dir="${dist}" />
</target>
<target name="parser" depends="init" description="generate parser files">
<!-- Create the parser files -->
<!--
<antlr target="${antlr-script}/mohawktarbac.g4" outputdirectory="${antlr-script}">
<classpath>
<pathelement location="${antlr}" />
</classpath>
</antlr>
-->
<java jar="${antlr}" fork="true">
<arg value="-o" />
<arg value="${antlr-script}" />
<arg value="${antlr-script}/MohawkTARBAC.g4" />
</java>
</target>
<target name="compile" depends="parser" description="compile the source ">
<!-- compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" debug="on" deprecation="true">
<classpath>
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</classpath>
</javac>
<!--
<copy file="${template}/smvtemplate.st" todir="${build}/mohawk/output" />
<copy file="${template}/transitions.st" todir="${build}/mohawk/output" />
<copy file="${template}/rbac.st" todir="${build}/mohawk/output" />
-->
</target>
<target name="dist" depends="compile" description="generate the distribution">
<!-- put everything in ${build} into the jar file -->
<jar destfile="${dist}/${ant.project.name}.jar" basedir="${build}">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Main-Class" value="mohawk.converter.Converter" />
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="${build}" />
<zipfileset src="${antlr}" />
<zipfileset src="${lib}/commons-cli-1.2.jar" />
<zipfileset src="${lib}/commons-lang3-3.3.2.jar" />
<zipfileset src="${lib}/hamcrest-core-1.3.jar" />
<zipfileset src="${junit}" />
<zipfileset src="${lib}/stringtemplate.jar" />
</jar>
</target>
<target name="qtest" depends="dist" description="generate a JAR file that will be placed close to the data for quick testing">
<!-- put everything in ${build} into the jar file -->
<copy file="${dist}/${ant.project.name}.jar" tofile="${qtest}"/>
</target>
<target name="regression" depends="dist" description="Performs a regression test">
<!-- @author Jonathan Shahen -->
<echo>java -cp ${dist}/${ant.project.name}.jar org.junit.runner.JUnitCore mohawk.testing.RegressionTests</echo>
<exec executable="cmd" dir="." failonerror="true">
<arg value="/c" />
<arg value="java -cp &quot;${dist}/${ant.project.name}.jar&quot; org.junit.runner.JUnitCore mohawk.testing.RegressionTests" />
</exec>
</target>
<target name="clean" description="clean up">
<!-- delete the ${build} and ${dist} directory trees -->
<delete dir="${bin}" />
<delete>
<fileset dir="." defaultexcludes="no">
<include name="**/*.*~" />
</fileset>
</delete>
</target>
</project>
/* everything after a hash tag, until the newline, is considered a comment and ignored
*
* white space is ignored, this includes tabs and spaces and newline characters
* You can put as much white space anywhere and it will be ignored
*
* control chain: remove comments -> remove whitespace -> parse text into internal structure -> convert
*
* The order of the document doesn't matter: MaxRoles can be last, first, or somewhere in the middle and same goes for all the others
*/
MaxRoles : 15 // roles count from 0 to MaxRoles - 1; represented below with 'role0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
MaxTimeSlots: 10 // time slots count from 0 to MaxTimeSlots - 1; represented below with 't0' (without quotes, and the 0 can be replaced with any number in the appropriate range)
CanAssign {
// <Admin role, starting timeslot - end timeslot for admin role, role preconditions, [time slot rule gives role to user for, another time slot (optional)...],role to give to the user>
<role0,t0-t5,TRUE,[t1,t1],role1> //(1)
<role0,t0-t0,role1 & NOT role2 & role3,[t1,t2],role2> //(2)
}
CanRevoke {
// same as above
}
CanEnable {
// same as above
}
CanDisable {
// same as above
}
// Query: timeslot to check, [set of roles that the user must have in the timeslot (no NOTs allowed)]
Query: t0,[role1,role0,role2]
\ No newline at end of file
This diff is collapsed.
package mohawk;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class Converter {
private static final String VERSION = "v0.0.1";
// Logger Fields
public final static Logger logger = Logger.getLogger("mohawk-converter");
public static String Logger_filepath = "mohawk.log";
private static ConsoleHandler consoleHandler = new ConsoleHandler();
private static Level LoggerLevel;
public static void main(String[] args) {
try {
Options options = new Options();
setupOptions(options, args);
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options, args);
} catch (ParseException e) {
if (logger.getLevel() == Level.FINEST) {
e.printStackTrace();
}
logger.severe(e.getMessage());
}
}
@SuppressWarnings("static-access")
private static void setupOptions(Options options, String[] args) {
// Add Information Options
options.addOption("help", false, "Print this message");
options.addOption("version", false, "Prints the version (" + VERSION
+ ") information");
options.addOption("checknusmv", false,
"Checks that NuSMV is on the system and displays which version is installed");
// Add Logging Level Options
options.addOption(OptionBuilder
.withArgName("quiet|debug|verbose")
.withDescription(
"Be extra quiet only errors are shown; "
+ "Show debugging information; "
+ "extra information is given for Verbose; "
+ "default is warning level").hasArg()
.create("loglevel"));
options.addOption(OptionBuilder
.withArgName("logfile|'n'|'u'")
.withDescription(
"The filepath where the log file should be created; "
+ "No file will be created when equal to 'n'; "
+ "A unique filename will be created when equal to 'u'; "
+ "default it creates a log called '"
+ Logger_filepath + "'").hasArg()
.create("output"));
options.addOption("noheader", false,
"Does not write the CSV file header to the output log");
options.addOption(OptionBuilder.withArgName("csvfile")
.withDescription("The file where the result should be stored")
.hasArg().create("results"));
// custom Console Logging Options
options.addOption(OptionBuilder
.withArgName("num")
.withDescription(
"The maximum width of the console (default 120)")
.hasArg().create("maxw"));
options.addOption(OptionBuilder
.withArgName("string")
.withDescription(
"The new line string when wrapping a long line (default '\\n ')")
.hasArg().create("linestr"));
// Add File IO Options
options.addOption(OptionBuilder
.withArgName("file|folder")
.withDescription(
"Path to the RBAC Spec file or Folder if the 'bulk' option is set")
.hasArg().create("rbacspec"));
options.addOption(OptionBuilder
.withArgName("filepath")
.withDescription(
"Path to the NuSMV program file (defaults to 'NuSMV')")
.hasArg().create("nusmv"));
// Add Functional Options
options.addOption("bulk", false,
"Use the folder that rbacspec points to and run against all *.spec");
options.addOption(OptionBuilder
.withArgName("bmc|smc|both")
.withDescription(
"Uses the Bound Estimation Checker when equal to 'bmc'; Uses Symbolic Model Checking when equal to 'smc'")
.hasArg().create("mode"));
// Add Actionable Options
options.addOption(OptionBuilder
.withArgName("all|smv")
.withDescription(
"Runs the whole model checker when equal to 'all'; Runs only the SMV conversion when equal to 'smv'")
.hasArg().create("run"));
}
}
package mohawk;
package mohawk.converter;
public class ConvertToRBAC {
......
package mohawk;
package mohawk.converter;
public class ConvertToRanise {
......
package mohawk;
package mohawk.converter;
public class ConvertToUzun {
......
package mohawk.converter;
public class Converter {
public static void main(String[] args) {
ConverterInstance inst = new ConverterInstance();
inst.run(args);
}
}
package mohawk.converter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import mohawk.logging.MohawkCSVFileFormatter;
import mohawk.logging.MohawkConsoleFormatter;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.StringUtils;
public class ConverterInstance {
private final String VERSION = "v0.0.1";
// Logger Fields
public final Logger logger = Logger.getLogger("mohawk-converter");
private String Logger_filepath = "mohawk-converter.log";
private String Logger_folderpath = "logs";
private ConsoleHandler consoleHandler = new ConsoleHandler();
private Level LoggerLevel;
private FileHandler fileHandler;
private Boolean WriteCSVFileHeader = true;
private String resultsFile = "latestMohawkResults.csv";
public int run(String[] args) {
try {
Options options = new Options();
setupOptions(options, args);
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options, args);
setupLoggerOptions(cmd, options, args);
if (setupReturnImmediatelyOptions(cmd, options, args)) { return 0; }
} catch (ParseException e) {
if (logger.getLevel() == Level.FINEST) {
e.printStackTrace();
}
logger.severe(e.getMessage());
} catch (SecurityException e) {
if (logger.getLevel() == Level.FINEST) {
e.printStackTrace();
}
logger.severe(e.getMessage());
} catch (IOException e) {
if (logger.getLevel() == Level.FINEST) {
e.printStackTrace();
}
logger.severe(e.getMessage());
}
return 0;
}
@SuppressWarnings("static-access")
private void setupOptions(Options options, String[] args) {
// Add Information Options
options.addOption("help", false, "Print this message");
options.addOption("version", false, "Prints the version (" + VERSION + ") information");
options.addOption("checknusmv", false,
"Checks that NuSMV is on the system and displays which version is installed");
// Add Logging Level Options
options.addOption(OptionBuilder
.withArgName("quiet|debug|verbose")
.withDescription(
"Be extra quiet only errors are shown; " + "Show debugging information; "
+ "extra information is given for Verbose; " + "default is warning level").hasArg()
.create("loglevel"));
options.addOption(OptionBuilder
.withArgName("logfile|'n'|'u'")
.withDescription(
"The filepath where the log file should be created; "
+ "No file will be created when equal to 'n'; "
+ "A unique filename will be created when equal to 'u'; "
+ "default it creates a log called '" + Logger_filepath + "'").hasArg()
.create("output"));
options.addOption("noheader", false, "Does not write the CSV file header to the output log");
options.addOption(OptionBuilder.withArgName("csvfile")
.withDescription("The file where the result should be stored").hasArg().create("results"));
// custom Console Logging Options
options.addOption(OptionBuilder.withArgName("num")
.withDescription("The maximum width of the console (default 120)").hasArg().create("maxw"));
options.addOption(OptionBuilder.withArgName("string")
.withDescription("The new line string when wrapping a long line (default '\\n ')").hasArg()
.create("linestr"));
// Add File IO Options
options.addOption(OptionBuilder.withArgName("file|folder")
.withDescription("Path to the RBAC Spec file or Folder if the 'bulk' option is set").hasArg()
.create("rbacspec"));
options.addOption(OptionBuilder.withArgName("filepath")
.withDescription("Path to the NuSMV program file (defaults to 'NuSMV')").hasArg().create("nusmv"));
// Add Functional Options
options.addOption("bulk", false, "Use the folder that rbacspec points to and run against all *.spec");
options.addOption(OptionBuilder
.withArgName("bmc|smc|both")
.withDescription(
"Uses the Bound Estimation Checker when equal to 'bmc'; Uses Symbolic Model Checking when equal to 'smc'")
.hasArg().create("mode"));
// Add Actionable Options
options.addOption(OptionBuilder
.withArgName("all|smv")
.withDescription(
"Runs the whole model checker when equal to 'all'; Runs only the SMV conversion when equal to 'smv'")
.hasArg().create("run"));
}
public Level getLoggerLevel() {
return LoggerLevel;
}
public void setLoggerLevel(Level loggerLevel) {
LoggerLevel = loggerLevel;
}
private void setupLoggerOptions(CommandLine cmd, Options options, String[] args) throws SecurityException,
IOException {
// Logging Level
logger.setUseParentHandlers(false);
consoleHandler.setFormatter(new MohawkConsoleFormatter());
setLoggerLevel(Level.WARNING); // Default Level
if (cmd.hasOption("loglevel")) {
String loglevel = cmd.getOptionValue("loglevel");
if (loglevel.equalsIgnoreCase("quiet")) {
setLoggerLevel(Level.SEVERE);
} else if (loglevel.equalsIgnoreCase("debug")) {
setLoggerLevel(Level.FINEST);
} else if (loglevel.equalsIgnoreCase("verbose")) {
setLoggerLevel(Level.INFO);
}
}
logger.setLevel(LoggerLevel);
consoleHandler.setLevel(LoggerLevel);
logger.addHandler(consoleHandler);
// Add CSV File Headers
if (cmd.hasOption("noheader")) {
WriteCSVFileHeader = false;
}
// Set Logger Folder
if (cmd.hasOption("logfolder")) {
File logfile = new File(cmd.getOptionValue("logfolder"));
if (!logfile.exists()) {
logfile.mkdir();
}
if (logfile.isDirectory()) {
Logger_folderpath = cmd.getOptionValue("logfolder");
} else {
logger.severe("logfolder did not contain a folder that exists or that could be created!");
}
}
// Set File Logger
if (cmd.hasOption("logfile")) {
// Check if no log file was requested
if (cmd.getOptionValue("logfile").equals("n")) {
// Create no log file
Logger_filepath = "";
} else if (cmd.getOptionValue("logfile").equals("u")) {
// Create a unique log file
Logger_filepath = "mohawk-log.%u.%g.txt";
} else {
try {
// Create a log file with a specific name
File logfile = new File(Logger_folderpath + File.separator + cmd.getOptionValue("logfile"));
if (!logfile.exists()) {
logfile.createNewFile();
}
Logger_filepath = logfile.getAbsolutePath();
if (WriteCSVFileHeader) {
FileOutputStream writer = new FileOutputStream(logfile, true); // Always append!
writer.write(MohawkCSVFileFormatter.csvHeaders().getBytes());
writer.flush();
writer.close();
}
} catch (IOException e) {
logger.severe(e.getMessage());
return;
}
}
}
// Add Logger File Handler
if (!Logger_filepath.isEmpty()) {
fileHandler = new FileHandler(Logger_folderpath + File.separator + Logger_filepath);
fileHandler.setLevel(getLoggerLevel());
fileHandler.setFormatter(new MohawkCSVFileFormatter());
logger.addHandler(fileHandler);
}
}
private Boolean setupReturnImmediatelyOptions(CommandLine cmd, Options options, String[] args) {
if (cmd.hasOption("help") == true || args.length < 1) {
HelpFormatter f = new HelpFormatter();
if (cmd.hasOption("maxw")) {
try {
Integer maxw = Integer.decode(cmd.getOptionValue("maxw"));
f.printHelp(maxw, "mohawk", StringUtils.repeat("-", maxw), options, StringUtils.repeat("-", maxw),
true);
} catch (Exception e) {
System.out.println("An error occured when trying to print out the help options!");
}
} else {
f.printHelp(80, "mohawk", StringUtils.repeat("-", 80), options, StringUtils.repeat("-", 80), true);
}
return true;
}
if (cmd.hasOption("version")) {
// keep it as simple as possible for the version
System.out.println(VERSION);
return true;
}
return false;
}
}
package mohawk;
package mohawk.converter;
public class Parser {
......
/**
*
*/
grammar MohawkTARBAC;
@header {
package mohawk.converter.generated;
}
@members {
boolean maxroles_found = false;
boolean maxtimeslots_found = false;
boolean canassign_found = false;
boolean canrevoke_found = false;
boolean canenable_found = false;
boolean candisable_found = false;
boolean query_found = false;
}
init
:
stat stat stat stat stat stat stat
;
stat
:
{maxroles_found==false}?
maxroles
{maxroles_found=true;}
{maxtimeslots_found==false}?
maxtimeslots
{maxtimeslots_found=true;}
{canassign_found==false}?
canassign
{canassign_found=true;}
{canrevoke_found==false}?
canrevoke
{canrevoke_found=true;}
{canenable_found==false}?
canenable
{canenable_found=true;}
{candisable_found==false}?
candisable
{candisable_found=true;}
{query_found==false}?
query
{query_found=true;}
;
maxroles
:
MaxRoles Colon INT
;
maxtimeslots