public static boolean check_cmd(String line) { // must have the length of 3 or 4 String line_test = line; String[] line_arr = line.split("\\s+"); int line_length = line_arr.length; if (line_length != 3 && line_length != 4) { // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); // set InstructionObject as "bad" inst_obj.set_type("bad"); // feed to BadInstrution to ReferenceManager ref_mgr.badInst(bad_inst); // print state printState(); return false; } // must have read or write in the first command if ((!line_arr[0].toLowerCase().equals("read")) && (!line_arr[0].toLowerCase().equals("write"))) { // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to ReferenceManager ref_mgr.badInst(bad_inst); // print state printState(); return false; } // format = string string string int, where int is optional try { Integer.parseInt(line_arr[1]); // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to Reference Manager ref_mgr.badInst(bad_inst); // print state printState(); return false; } catch (Exception e) { // it is not an int! good! do nothing } try { Integer.parseInt(line_arr[2]); // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to Reference Manager ref_mgr.badInst(bad_inst); // print state printState(); return false; } catch (Exception e) { // it is not an int! good! do nothing } if (line_arr.length == 4) { if (!line_arr[0].toLowerCase().equals("write")) { // it's a "read" command with 4 length. INVALID! // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to Reference Manager ref_mgr.badInst(bad_inst); // print state printState(); return false; } try { cmd_value = Integer.parseInt(line_arr[3]); // it is an int! good! do nothing! // save! main_cmd = line_arr[0] + "s"; } catch (Exception e) { // last command is NOT int // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to Reference Manager ref_mgr.badInst(bad_inst); // print state printState(); return false; } } else { if (!line_arr[0].toLowerCase().equals("read")) { // it's a "read" command with 4 length. INVALID! // it's a bad instruction! BadInstructionObject bad_inst = new BadInstructionObject(); inst_obj.set_type("bad"); // feed to Reference Manager ref_mgr.badInst(bad_inst); // print state printState(); return false; } main_cmd = line_arr[0] + "s"; } // save global for later use subject_name = line_arr[1]; object_name = line_arr[2]; cmd_length = line_arr.length; return true; }
public static void main(String[] args) { // create subjects with security label and inform ref_mgr.createSubj("Lyle", 2); ref_mgr.createSubj("Hal", 1); // create objects with security label and inform ref_mgr.createObj("Lobj", 2); ref_mgr.createObj("Hobj", 1); // read command line ######################################################## try { File aFile = new File(args[0]); Scanner sc = new Scanner(aFile); System.out.println("Reading from file: " + args[0] + "\n"); while (sc.hasNextLine()) { // case-insensitive, lower the case! String line = sc.nextLine().toLowerCase(); // check for illegal commands if (check_cmd(line)) { if (cmd_length == 3) { System.out.println(subject_name + " " + main_cmd + " " + object_name); } else { System.out.println( subject_name + " " + main_cmd + " value " + cmd_value + " to " + object_name); } Scanner scLine = new Scanner(line); // parse command inst_obj.set_type(scLine.next()); inst_obj.set_subj(scLine.next()); inst_obj.set_obj(scLine.next()); // exeception-prone (takes last cmd if there is one) try { inst_obj.set_value(scLine.next()); } catch (NoSuchElementException e) { // System.out.println("Error message: " + e.getMessage()); // e.printStackTrace(); } scLine.close(); // feed to ReferenceManager try { ref_mgr.validate(inst_obj); } catch (Exception e) { System.out.println(e.getMessage()); } // print state printState(); } } sc.close(); } catch (IOException e) { e.getMessage(); e.printStackTrace(); } // done with read command line ############################################# // execute commands // print states }