Changeset 80 for trunk/src/org/expeditee/actions
- Timestamp:
- 05/30/08 10:14:43 (16 years ago)
- Location:
- trunk/src/org/expeditee/actions
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/actions/Actions.java
r72 r80 7 7 import java.net.URL; 8 8 import java.util.ArrayList; 9 import java.util.Collection; 9 10 import java.util.Enumeration; 10 11 import java.util.HashMap; … … 26 27 27 28 /** 28 * The Action class is used to launch KMS Actions as well as launching JAGs.29 * The Action class is used to launch Actions and Agents. 29 30 * 30 31 * This class checks all class files in the same directory, and reads in and … … 32 33 * the lowercase method names can be mapped to the correctly capatilized method 33 34 * names (to provide case-insensitivity) 35 * 36 * When adding an action to a class in the actions folder the following must be 37 * considered: 38 * <li> If the first parameter is of type Frame or Item they will be called with 39 * the current frame and the item used to execute the action.</li> 40 * <li> If the second item is also of type Frame or Item it will be set to the 41 * current frame or item.</li> 42 * <li> If there are multiple overloads for the same method they should be 43 * declared in order of the methods with the most parameteres to least 44 * parameters.</li> 34 45 */ 35 46 public class Actions { … … 59 70 // Get a File object for the package 60 71 File directory = null; 61 String path = pckgname.replace('.', '/');72 String path = pckgname.replace('.', File.separatorChar); 62 73 try { 63 74 ClassLoader cld = Thread.currentThread().getContextClassLoader(); … … 65 76 throw new ClassNotFoundException("Can't get class loader."); 66 77 } 67 URL resource = cld.getResource(path); 78 URL resource = null; 79 try { 80 Enumeration<URL> resources = cld.getResources(path); 81 while (resources.hasMoreElements()) { 82 URL url = resources.nextElement(); 83 // Ingore the classes in the test folder when we are running 84 // the program from Eclipse 85 // This doesnt apply when running directly from the jar 86 // because the test classes are not compiled into the jar. 87 if (!url.toString().toLowerCase().contains("test")) { 88 resource = url; 89 break; 90 } 91 } 92 } catch (Exception e) { 93 94 } 68 95 if (resource == null) { 69 96 throw new ClassNotFoundException("No resource for " + path); … … 137 164 * Clears out the Action and JAG Hashtables and refills them. Normally this 138 165 * is only called once when the system starts. 139 */ 140 public static void Init() { 166 * @return a warning message if there were any problems loading agents or actions. 167 */ 168 public static Collection<String> Init() { 169 Collection<String> warnings = new LinkedList<String>(); 141 170 Class[] classes; 171 142 172 try { 143 173 classes = getClasses(AGENTS_PACKAGE); … … 149 179 } 150 180 } catch (Exception e) { 151 System.out 152 .println("You must have Java 1.5 or higher to run Expeditee"); 153 System.out.println(e.getMessage()); 181 warnings.add("You must have Java 1.5 or higher to run Expeditee"); 182 warnings.add(e.getMessage()); 154 183 } 155 184 try { … … 158 187 for (int i = 0; i < classes.length; i++) { 159 188 String name = classes[i].getSimpleName(); 189 // Ignore the test classes 190 if (name.toLowerCase().contains("test")) 191 continue; 160 192 // read in all the methods from the class 161 193 try { 162 // System.out.println(name) ;194 // System.out.println(name) 163 195 LoadMethods(Class.forName(ACTIONS_PACKAGE + name)); 164 196 } catch (ClassNotFoundException e) { … … 168 200 } 169 201 } catch (Exception e) { 170 System.out.println(e.getMessage()); 171 } 202 warnings.add(e.getMessage()); 203 } 204 return warnings; 172 205 } 173 206 … … 186 219 // only allow methods with the right modifiers 187 220 if (MethodCheck(m)) { 188 if (!(_Actions.containsKey(m.getName().toLowerCase()))) 189 _Actions.put(m.getName().toLowerCase(), m); 221 String lowercaseName = m.getName().toLowerCase(); 222 if (!(_Actions.containsKey(lowercaseName))) 223 _Actions.put(lowercaseName, m); 190 224 else { 191 225 int i = 0; 192 while (_Actions.containsKey( m.getName().toLowerCase()+ i))226 while (_Actions.containsKey(lowercaseName + i)) 193 227 i++; 194 228 195 _Actions.put( m.getName().toLowerCase()+ i, m);229 _Actions.put(lowercaseName + i, m); 196 230 } 197 231 … … 259 293 mname = mname.substring(1); 260 294 261 mname = mname.trim() .toLowerCase();262 295 mname = mname.trim(); 296 String lowercaseName = mname.toLowerCase(); 263 297 // check for protection on frame 264 298 if (ItemUtils.ContainsTag(source.getItems(), "@No" + mname)) { … … 269 303 270 304 // retrieve methods that match the name 271 Method toRun = _Actions.get( mname);305 Method toRun = _Actions.get(lowercaseName); 272 306 273 307 // if this is not the name of a method, it may be the name of an agent … … 287 321 possibles.add(toRun); 288 322 int i = 0; 289 while (_Actions.containsKey( mname + i)) {290 possibles.add(_Actions.get( mname + i));323 while (_Actions.containsKey(lowercaseName + i)) { 324 possibles.add(_Actions.get(lowercaseName + i)); 291 325 i++; 292 326 } … … 301 335 Object[] parameters = CreateObjects(possible, source, launcher, 302 336 command); 337 // Check that there are the same amount of params 338 if (parameters == null) { 339 continue; 340 } 303 341 304 342 possible.invoke(null, parameters); … … 322 360 */ 323 361 private static void LaunchAgent(String name, String parameters, Frame source) { 362 // Use the correct case version for printing error messages 363 String nameWithCorrectCase = name; 364 name = name.toLowerCase(); 324 365 // save the current frame (if necesssary) 325 366 FrameUtils.LeavingFrame(source); … … 362 403 // if there is no constructor, return 363 404 if (con == null) { 364 FrameGraphics.DisplayMessage("Invalid parametres for agent."); 405 FrameGraphics.DisplayMessage("Invalid parametres for agent: " 406 + nameWithCorrectCase); 365 407 // System.out.println("Constructor not found..."); 366 408 return; … … 375 417 // check for errors during initialisation 376 418 if (!_Agent.initialise(source)) { 377 FrameGraphics.ErrorMessage("Error initialising agent: " + name); 419 FrameGraphics.ErrorMessage("Error initialising agent: " 420 + nameWithCorrectCase); 378 421 return; 379 422 } … … 390 433 391 434 } catch (ClassNotFoundException cnf) { 392 FrameGraphics.ErrorMessage("Error: '" + name 393 + "' is not an action statement or Agent.");435 FrameGraphics.ErrorMessage("Error: '" + nameWithCorrectCase 436 + "' is not an action or agent."); 394 437 } catch (Exception e) { 395 FrameGraphics.ErrorMessage("Error creating Agent: '" + name + "'"); 438 FrameGraphics.ErrorMessage("Error creating Agent: '" 439 + nameWithCorrectCase + "'"); 396 440 System.out.println("Agent set to Null."); 397 441 _Agent = null; … … 421 465 */ 422 466 public static void stopAgent() { 423 if (_Agent != null ) {467 if (_Agent != null && _Agent.isRunning()) { 424 468 FrameGraphics.DisplayMessage("Stopping Agent..."); 425 469 _Agent.stop(); 426 427 // while (_Agent.isRunning())428 // ;429 // FrameGraphics.DisplayMessage("Agent Stopped.");430 470 } 431 471 } … … 489 529 param = values.trim(); 490 530 // check if its a string 491 if (param.length() > 0 && param.charAt(0) == '"') {531 if (param.length() > 0 && param.charAt(0) == '"') { 492 532 int endOfString = param.indexOf('"', 1); 493 if (endOfString > 0) {494 param = param.substring(0, endOfString);533 if (endOfString > 0) { 534 param = param.substring(0, endOfString); 495 535 } 496 536 } … … 501 541 // convert the value to an object 502 542 Object o = Conversion.Convert(paramTypes[ind], param); 543 if (o == null) 544 return null; 503 545 objects[ind] = o; 504 546 } … … 530 572 if (params.charAt(0) == '"') { 531 573 int endOfString = params.indexOf('"', 1); 532 if (endOfString > 0) {574 if (endOfString > 0) { 533 575 if (endOfString > params.length()) 534 576 return ""; -
trunk/src/org/expeditee/actions/IDE.java
r22 r80 13 13 public static void CompileClass() { 14 14 Frame source = DisplayIO.getCurrentFrame(); 15 String title = source.getTitle ().getTextNoList();15 String title = source.getTitleItem().getText(); 16 16 String[] tokens = title.split(" "); 17 17 String className = tokens[tokens.length - 1]; … … 33 33 34 34 public static String getClassName(Frame source) { 35 return source.getTitle ().getTextNoList().trim();35 return source.getTitleItem().getText().trim(); 36 36 //String title = source.getTitle().getTextNoList(); 37 37 //String[] tokens = title.split(" "); -
trunk/src/org/expeditee/actions/Misc.java
r78 r80 98 98 public static void RunCurrentItem(Item current) { 99 99 if (current instanceof Text) { 100 List<String> actions = ((Text) current).getText ();100 List<String> actions = ((Text) current).getTextList(); 101 101 102 102 for (String action : actions) { … … 117 117 Frame toDelete = DisplayIO.getCurrentFrame(); 118 118 DisplayIO.Back(); 119 String deletedFrame = toDelete.get FrameName();119 String deletedFrame = toDelete.getName(); 120 120 String deletedFrameNameLowercase = deletedFrame.toLowerCase(); 121 121 try { … … 123 123 if (!del) { 124 124 FrameGraphics.ErrorMessage("Error trying to delete " 125 + toDelete.get FrameName());125 + toDelete.getName()); 126 126 } else { 127 127 Frame current = DisplayIO.getCurrentFrame(); … … 316 316 */ 317 317 public static void JpegFrame(String framename) { 318 ImageFrame(framename, "JP G");318 ImageFrame(framename, "JPEG"); 319 319 } 320 320 321 321 /** 322 322 * Saves the current frame as a JPEG image. This is the same as calling 323 * JpegFrame(currentFrame.get FrameName())323 * JpegFrame(currentFrame.getName()) 324 324 */ 325 325 public static void JpegFrame() { 326 ImageFrame(DisplayIO.getCurrentFrame().getFrameName(), "JPG"); 326 ImageFrame(DisplayIO.getCurrentFrame().getName(), "JPEG"); 327 } 328 329 public static void JPGFrame() { 330 JpegFrame(); 327 331 } 328 332 … … 339 343 /** 340 344 * Saves the current frame as a PNG image. This is the same as calling 341 * PNGFrame(currentFrame.get FrameName())345 * PNGFrame(currentFrame.getName()) 342 346 */ 343 347 public static void PNGFrame() { 344 ImageFrame(DisplayIO.getCurrentFrame().getFrameName(), "PNG"); 348 ImageFrame(DisplayIO.getCurrentFrame().getName(), "PNG"); 349 } 350 351 public static String SaveImage(BufferedImage screen, String format, String directory, String fileName){ 352 // Check if we need to append the suffix 353 if (fileName.indexOf('.') < 0) 354 fileName += "." + format.toLowerCase(); 355 356 try { 357 // set up the file for output 358 String fullFileName = directory + fileName; 359 File out = new File(fullFileName); 360 if (!out.getParentFile().exists()) 361 out.mkdirs(); 362 363 // If the image is successfully written out return the fileName 364 if (ImageIO.write(screen, format, out)) 365 return fileName; 366 367 } catch (Exception e) { 368 e.printStackTrace(); 369 } 370 return null; 371 } 372 373 public static String ImageFrame(Frame frame, String format, String directory) { 374 assert (frame != null); 375 376 FrameGraphics.UpdateBuffer(frame, false); 377 378 BufferedImage screen = null; 379 Image frameBuffer = frame.getBuffer(); 380 if (frame.getBuffer() instanceof BufferedImage) { 381 screen = (BufferedImage) frameBuffer; 382 } else if (frameBuffer instanceof VolatileImage) { 383 screen = ((VolatileImage) frameBuffer).getSnapshot(); 384 } else { 385 assert (false); 386 } 387 return SaveImage(screen, format, directory, frame.getExportFileName()); 345 388 } 346 389 … … 355 398 public static void ImageFrame(String framename, String format) { 356 399 Frame loaded = FrameIO.LoadFrame(framename); 357 String fileName = loaded.getExportFileName();358 400 359 401 // if the frame was loaded successfully 360 402 if (loaded != null) { 361 // check if the buffer needs to be redrawn 362 // if (loaded.getBuffer() == null) 363 FrameGraphics.UpdateBuffer(loaded, false); 364 365 BufferedImage screen = null; 366 Image frameBuffer = loaded.getBuffer(); 367 if (loaded.getBuffer() instanceof BufferedImage){ 368 screen = (BufferedImage)frameBuffer; 369 }else if (frameBuffer instanceof VolatileImage){ 370 screen = ((VolatileImage)frameBuffer).getSnapshot(); 371 }else{ 372 assert(false); 373 } 374 375 try { 376 // set up the file for output 377 File out = new File(FrameIO.EXPORTS_DIR + fileName + "." 378 + format.toLowerCase()); 379 if (!out.getParentFile().exists()) 380 out.mkdirs(); 381 382 ImageIO.write(screen, format, out); 403 String path = FrameIO.IMAGES_PATH; 404 String frameName = ImageFrame(loaded, format, path); 405 if (frameName != null) 383 406 FrameGraphics.DisplayMessage("Frame successfully saved to " 384 + FrameIO.EXPORTS_DIR + out.getName());385 } catch (IOException e) {386 FrameGraphics.ErrorMessage( e.getMessage());387 }407 + path + frameName); 408 else 409 FrameGraphics.ErrorMessage("Could not find image writer for " 410 + format + " format"); 388 411 // if the frame was not loaded successfully, alert the user 389 412 } else … … 455 478 timeKeeper.restart(); 456 479 for (int j = 0; j < repsPerTest; j++) { 457 methodA.invoke((Object) null, new Object[] {});480 methodA.invoke((Object) null, new Object[] {}); 458 481 } 459 482 timeA += timeKeeper.getElapsedMillis(); … … 461 484 // Test methodB 462 485 for (int j = 0; j < repsPerTest; j++) { 463 methodB.invoke((Object) null, new Object[] {});486 methodB.invoke((Object) null, new Object[] {}); 464 487 } 465 488 timeB += timeKeeper.getElapsedMillis(); … … 530 553 // swap the items links 531 554 item.setActions(current.getAction()); 532 item.setLink(childFrame.get FrameName());533 current.setLink(parentFrame.get FrameName());555 item.setLink(childFrame.getName()); 556 current.setLink(parentFrame.getName()); 534 557 // current.setLink(null); 535 558 current.setActions(null); … … 564 587 565 588 for (Item i : body) 566 if (i != child.getTitle () && !i.isAnnotation()) {589 if (i != child.getTitleItem() && !i.isAnnotation()) { 567 590 item = i; 568 591 break; -
trunk/src/org/expeditee/actions/NavigationActions.java
r70 r80 21 21 _LastItemUsed = i; 22 22 if (i.getParent() != null) { 23 _Parent = i.getParent().get FrameName();23 _Parent = i.getParent().getName(); 24 24 } 25 25 } … … 196 196 197 197 // ByMike: If the 'Next' child is being sought for the 1st time... 198 String sourceName = source.get FrameName().toLowerCase();198 String sourceName = source.getName().toLowerCase(); 199 199 200 200 // ByMike: Find the first occurence of a ParentItem linked to the source … … 212 212 && !items.get(i).isAnnotation() 213 213 && !items.get(i).getAbsoluteLink().equalsIgnoreCase( 214 source.get FrameName())) {214 source.getName())) { 215 215 _LastItemUsed = items.get(i); 216 216 FrameUtils.DisplayFrame(_LastItemUsed.getAbsoluteLink(), false); -
trunk/src/org/expeditee/actions/Simple.java
r78 r80 8 8 import java.util.ArrayList; 9 9 import java.util.Collection; 10 import java.util.HashMap; 10 11 import java.util.LinkedList; 11 12 import java.util.List; 13 import java.util.Map; 12 14 import java.util.Random; 13 15 … … 63 65 private static final String DEFAULT_FRAME = "$fp."; 64 66 67 private static final String DEFAULT_ASSOCIATION = "$ap."; 68 65 69 private static final String EXIT_TEXT = "exitall"; 66 70 … … 121 125 List<String> actions = new ArrayList<String>(); 122 126 actions.add(RUN_FRAME_ACTION); 123 newSimpleTest.getTitle ().setActions(actions);127 newSimpleTest.getTitleItem().setActions(actions); 124 128 FrameUtils.DisplayFrame(newSimpleTest, true); 125 129 FrameGraphics.DisplayMessage("New test created"); … … 131 135 next = FrameIO.LoadNext(next); 132 136 } while (next != null 133 && (next.getTitle () == null || !RUN_FRAME_ACTION134 .equalsIgnoreCase(next.getTitle ().getFirstAction())));137 && (next.getTitleItem() == null || !RUN_FRAME_ACTION 138 .equalsIgnoreCase(next.getTitleItem().getFirstAction()))); 135 139 FrameUtils.DisplayFrame(next, true); 136 140 } … … 141 145 prev = FrameIO.LoadPrevious(prev); 142 146 } while (prev != null 143 && (prev.getTitle () == null || !RUN_FRAME_ACTION144 .equalsIgnoreCase(prev.getTitle ().getFirstAction())));147 && (prev.getTitleItem() == null || !RUN_FRAME_ACTION 148 .equalsIgnoreCase(prev.getTitleItem().getFirstAction()))); 145 149 146 150 FrameUtils.DisplayFrame(prev, true); … … 153 157 // check if its a test frame 154 158 if (next != null 155 && next.getTitle () != null156 && RUN_FRAME_ACTION.equalsIgnoreCase(next.getTitle ()159 && next.getTitleItem() != null 160 && RUN_FRAME_ACTION.equalsIgnoreCase(next.getTitleItem() 157 161 .getFirstAction())) { 158 162 lastTest = next; … … 191 195 if (nextFrame == null) 192 196 continue; 193 Item frameTitle = nextFrame.getTitle ();197 Item frameTitle = nextFrame.getTitleItem(); 194 198 if (frameTitle == null) 195 199 continue; … … 248 252 if (current.getLink() == null) { 249 253 current = current.copy(); 250 current.setLink(DisplayIO.getCurrentFrame().get FrameName());254 current.setLink(DisplayIO.getCurrentFrame().getName()); 251 255 } 252 256 … … 264 268 265 269 private static void FlagError(Item item) { 266 FrameUtils.DisplayFrame(item.getParent().get FrameName(), true);270 FrameUtils.DisplayFrame(item.getParent().getName(), true); 267 271 item.setSelectedMode(SelectedMode.Normal); 268 272 item.setSelectionColor(Color.CYAN); … … 342 346 Frame frame = i.getParent(); 343 347 344 if (i == frame.getTitle () || i == frame.getFrameNameItem()348 if (i == frame.getTitleItem() || i == frame.getNameItem() 345 349 || i.isAnnotation()) { 346 350 return false; … … 357 361 */ 358 362 private static String[] parseStatement(Text code) throws Exception { 359 String statement = code.getText NoList();363 String statement = code.getText(); 360 364 ArrayList<String> tokens = new ArrayList<String>(); 361 365 … … 420 424 // Add call to the start of the title if it doesnt exist 421 425 // This makes the call and signature tokens counts match 422 String procedureTitle = procedure.getTitle ().getFirstLine();426 String procedureTitle = procedure.getTitleItem().getFirstLine(); 423 427 if (!procedureTitle.toLowerCase().startsWith("call ")) 424 428 procedureTitle = "call " + procedureTitle; … … 588 592 throw new RuntimeException(e.getMessage()); 589 593 } 594 } else if (tokens[0].equals("setassociation")) { 595 assertMinParametreCount(tokens, 3); 596 597 Map map = (Map) context.getPointers().getVariable(tokens[1]) 598 .getValue(); 599 String attribute = context.getPrimitives().getStringValue( 600 tokens[2]); 601 String value = context.getPrimitives() 602 .getStringValue(tokens[3]); 603 map.put(attribute, value); 604 return Status.OK; 590 605 } else if (tokens[0].equals("setframevalue")) { 591 606 assertMinParametreCount(tokens, 3); … … 605 620 // Begin the search 606 621 for (Text text : targetFrame.getBodyTextItems(true)) { 607 String s = text.getText NoList().toLowerCase();622 String s = text.getText().toLowerCase(); 608 623 609 624 if (s.startsWith(targetAttribute)) { … … 697 712 Item item = (Item) context.getPointers().getVariable( 698 713 tokens[1]).getValue(); 699 item.setAction(context.getPrimitives().getVariable( tokens[2])700 .stringValue());714 item.setAction(context.getPrimitives().getVariable( 715 tokens[2]).stringValue()); 701 716 } else if (tokens[0].equals("setitemfillcolor")) { 702 717 assertVariableType(tokens[1], 1, SPointer.itemPrefix); … … 757 772 Text item = (Text) context.getPointers().getVariable(tokens[1]) 758 773 .getValue(); 759 List<String> itemText = item.getText ();774 List<String> itemText = item.getTextList(); 760 775 761 776 while (row >= itemText.size()) { … … 858 873 // Begin the search 859 874 for (Text text : targetFrame.getBodyTextItems(true)) { 860 String s = text.getText NoList().toLowerCase();875 String s = text.getText().toLowerCase(); 861 876 if (s.startsWith(targetAttribute)) { 862 877 attributeItem = text; 863 value = AttributeUtils. stripValue(s);878 value = AttributeUtils.getValue(s); 864 879 if (value.length() > 0) { 865 880 found = true; … … 880 895 found = true; 881 896 valueItem = text; 882 value = text.getText NoList();897 value = text.getText(); 883 898 break; 884 899 } … … 915 930 frameVar).getValue(); 916 931 context.getPrimitives().setValue(frameNameVar, 917 frame.get FrameName());932 frame.getName()); 918 933 return Status.OK; 919 934 } else if (tokens[0].startsWith("getframefilepath")) { … … 932 947 String log = SessionStats.getFrameEventList(); 933 948 Text t; 934 // try { 949 935 950 t = (Text) context.getPointers().getVariable(tokens[1]) 936 951 .getValue(); 937 952 t.setText(log); 938 // } catch (Exception e) {939 // t = new Text(-1, log);940 // context.getPointers().setObject(tokens[1], t);941 // }942 953 943 954 return Status.OK; 944 955 } 956 } else if (tokens[0].equals("getassociation")) { 957 assertMinParametreCount(tokens, 3); 958 Map map = (Map) context.getPointers().getVariable(tokens[1]) 959 .getValue(); 960 String attribute = context.getPrimitives().getStringValue( 961 tokens[2]); 962 String newValue = map.get(attribute).toString(); 963 context.getPrimitives().setValue(tokens[3], newValue); 964 return Status.OK; 945 965 } else if (tokens[0].startsWith("getcurrent")) { 946 966 if (tokens[0].equals("getcurrentframe")) { … … 954 974 if (tokens.length > 2) { 955 975 context.getPrimitives().setValue(tokens[2], 956 new SString(currentFrame.get FrameName()));976 new SString(currentFrame.getName())); 957 977 } 958 978 return Status.OK; … … 1017 1037 context.getPrimitives().setValue(tokens[2], 1018 1038 new SString(action)); 1019 } else if (tokens[0].equals("getitemfillcolor")) {1039 } else if (tokens[0].equals("getitemfillcolor")) { 1020 1040 assertVariableType(tokens[1], 1, SPointer.itemPrefix); 1021 1041 // assertPrimitiveType(tokens[2], 2); … … 1043 1063 tokens[2], 1044 1064 new SString((item instanceof Text) ? ((Text) item) 1045 .getText NoList() : ""));1065 .getText() : "")); 1046 1066 } else 1047 1067 throw new Exception("Unsupported getItem command: " … … 1209 1229 String s = getMessage(tokens, context, code.toString(), " ", 2); 1210 1230 for (int i = 0; i < s.length(); i++) { 1211 FrameKeyboardActions.processChar(s.charAt(i) );1231 FrameKeyboardActions.processChar(s.charAt(i), false); 1212 1232 Thread.sleep((int) (delay * 1000)); 1213 1233 } … … 1218 1238 .equals("type") ? " " : "", 1); 1219 1239 for (int i = 0; i < s.length(); i++) { 1220 FrameKeyboardActions.processChar(s.charAt(i) );1240 FrameKeyboardActions.processChar(s.charAt(i), false); 1221 1241 Thread.sleep(25); 1222 1242 } … … 1566 1586 tokens[1]).getValue(); 1567 1587 FrameIO.SuspendCache(); 1568 Frame freshCopy = FrameIO.LoadFrame(frameToCopy.get FrameName());1588 Frame freshCopy = FrameIO.LoadFrame(frameToCopy.getName()); 1569 1589 // Change the frameset if one was provided 1570 1590 if (tokens.length > 3) { … … 1658 1678 new SCharacter(nextChar)); 1659 1679 1680 return Status.OK; 1681 } else if (tokens[0].equals("createassociation")) { 1682 1683 String associationVar = DEFAULT_ASSOCIATION; 1684 1685 if (tokens.length > 0) { 1686 assertVariableType(tokens[1], 2, SPointer.associationPrefix); 1687 associationVar = tokens[1]; 1688 } 1689 Map<String, String> newMap = new HashMap<String, String>(); 1690 context.getPointers().setObject(associationVar, newMap); 1691 return Status.OK; 1692 } else if (tokens[0].equals("deleteassociation")) { 1693 1694 String associationVar = DEFAULT_ASSOCIATION; 1695 1696 if (tokens.length > 0) { 1697 assertVariableType(tokens[1], 2, SPointer.associationPrefix); 1698 associationVar = tokens[1]; 1699 } 1700 context.getPointers().delete(associationVar); 1660 1701 return Status.OK; 1661 1702 } else if (tokens[0].equals("openreadfile")) { … … 1847 1888 int count = 0; 1848 1889 if (item instanceof Text) 1849 count = countCharsInString(((Text) item).getTextNoList(), 1850 pattern); 1890 count = countCharsInString(((Text) item).getText(), pattern); 1851 1891 context.getPrimitives().setValue(tokens[3], new SInteger(count)); 1852 1892 return Status.OK; … … 2141 2181 } 2142 2182 2143 assertVariableType(tokens[ 1], 1, SPointer.itemPrefix);2144 assertVariableType(tokens[ 2], 2, SPointer.framePrefix);2183 assertVariableType(tokens[2], 2, SPointer.itemPrefix); 2184 assertVariableType(tokens[1], 1, SPointer.framePrefix); 2145 2185 Frame currFrame = (Frame) context.getPointers().getVariable( 2146 tokens[ 2]).getValue();2186 tokens[1]).getValue(); 2147 2187 // Create the ip variable 2148 Item frameName = currFrame.getFrameNameItem(); 2149 Item frameTitle = currFrame.getTitle(); 2188 Item frameTitle = currFrame.getTitleItem(); 2150 2189 2151 2190 for (Item i : currFrame.getItems()) { 2152 if (i == frame Name || i == frameTitle)2191 if (i == frameTitle) 2153 2192 continue; 2154 2193 if (!(itemType.isInstance(i))) 2155 2194 continue; 2156 2195 2157 context.getPointers().setObject(tokens[ 1], i);2196 context.getPointers().setObject(tokens[2], i); 2158 2197 Status status = RunFrameAndReportError(code, context); 2159 2198 // check if we need to exit this loop because of … … 2182 2221 context.getPrimitives().exp(tokens[1], tokens[2]); 2183 2222 } else if (tokens[0].equals("log")) { 2184 context.getPrimitives().log(tokens[ 1], tokens[2]);2223 context.getPrimitives().log(tokens[2], tokens[2]); 2185 2224 } else if (tokens[0].equals("log10")) { 2186 2225 context.getPrimitives().log10(tokens[1], tokens[2]); … … 2188 2227 context.getPrimitives().sqrt(tokens[1], tokens[2]); 2189 2228 } else if (tokens[0].equals("add")) { 2190 context.getPrimitives().add(tokens[ 1], tokens[2]);2229 context.getPrimitives().add(tokens[2], tokens[1]); 2191 2230 } else if (tokens[0].equals("subtract")) { 2192 context.getPrimitives().subtract(tokens[ 1], tokens[2]);2231 context.getPrimitives().subtract(tokens[2], tokens[1]); 2193 2232 } else if (tokens[0].equals("multiply")) { 2194 context.getPrimitives().multiply(tokens[ 1], tokens[2]);2233 context.getPrimitives().multiply(tokens[2], tokens[1]); 2195 2234 } else if (tokens[0].equals("divide")) { 2196 context.getPrimitives().divide(tokens[ 1], tokens[2]);2235 context.getPrimitives().divide(tokens[2], tokens[1]); 2197 2236 } else 2198 2237 throw new RuntimeException("Invalid statement:"); … … 2200 2239 } 2201 2240 } else if (tokens.length == 4) { 2241 if (tokens[0].equals("foreachassociation")) { 2242 assertExactParametreCount(tokens, 3); 2243 assertVariableType(tokens[1], 1, SPointer.associationPrefix); 2244 Map<String,String> map = (Map<String,String>) context.getPointers().getVariable( 2245 tokens[1]).getValue(); 2246 for(Map.Entry entry: map.entrySet()){ 2247 String value = entry.getValue().toString(); 2248 String key = entry.getKey().toString(); 2249 context.getPrimitives().setValue(tokens[2], key); 2250 context.getPrimitives().setValue(tokens[3], value); 2251 Status status = RunFrameAndReportError(code, context); 2252 // check if we need to exit this loop because of 2253 // statements in the code that was run 2254 if (status == Status.Exit || status == Status.Return) 2255 return status; 2256 else if (status == Status.Break) 2257 return Status.OK; 2258 } 2259 return Status.OK; 2260 } 2261 2202 2262 if (Primitives.isPrimitive(tokens[1]) 2203 2263 && Primitives.isPrimitive(tokens[2])
Note:
See TracChangeset
for help on using the changeset viewer.