001/* Filter for simple class name changes 002 003 Copyright (c) 2002-2016 The Regents of the University of California. 004 All rights reserved. 005 Permission is hereby granted, without written agreement and without 006 license or royalty fees, to use, copy, modify, and distribute this 007 software and its documentation for any purpose, provided that the above 008 copyright notice and the following two paragraphs appear in all copies 009 of this software. 010 011 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 012 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 013 ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 014 THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 015 SUCH DAMAGE. 016 017 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 018 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 019 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 020 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 021 CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 022 ENHANCEMENTS, OR MODIFICATIONS. 023 024 PT_COPYRIGHT_VERSION_2 025 COPYRIGHTENDKEY 026 */ 027package ptolemy.moml.filter; 028 029import java.util.HashMap; 030import java.util.HashSet; 031import java.util.Iterator; 032import java.util.Map; 033import java.util.StringTokenizer; 034 035import ptolemy.kernel.util.NamedObj; 036import ptolemy.moml.MoMLParser; 037 038/////////////////////////////////////////////////////////////////// 039//// ClassChanges 040 041/** When this class is registered with the MoMLParser.setMoMLFilter() 042 method, it will cause MoMLParser to filter so that models from 043 earlier releases will run in the current release. 044 045 <p>This class will filter moml for simple class changes where 046 the context of the class name to be changed does not matter - all 047 occurrences of the class name will be changed. This class 048 can be thought of as a primitive form of sed. 049 050 <p> If a class within an actor is what has changed, use (@see 051 PropertyClassChanges) instead. 052 053 @author Christopher Hylands 054 @version $Id$ 055 @since Ptolemy II 2.0 056 @Pt.ProposedRating Red (cxh) 057 @Pt.AcceptedRating Red (cxh) 058 */ 059public class ClassChanges extends MoMLFilterSimple { 060 /** Clear the map of class renames and the set of class removals. 061 */ 062 public static void clear() { 063 _classChanges = new HashMap<String, String>(); 064 _classesToRemove = new HashSet<String>(); 065 } 066 067 /** If the attributeName is "class" and attributeValue names a 068 * class that needs to be renamed, then substitute in the new class 069 * name. If the attributeValue names a class that needs to be removed, 070 * then return null, which will cause the MoMLParser to skip the 071 * rest of the element; 072 * 073 * @param container The container for this attribute. 074 * @param element The XML element name. 075 * @param attributeName The name of the attribute. 076 * @param attributeValue The value of the attribute. 077 * @param xmlFile The file currently being parsed. 078 * @return the value of the attributeValue argument. 079 */ 080 @Override 081 public String filterAttributeValue(NamedObj container, String element, 082 String attributeName, String attributeValue, String xmlFile) { 083 // This method gets called many times by the MoMLParser, 084 // so we try to be smart about the number of comparisons 085 // and we try to group comparisons together so that we 086 // are not making the same comparison more than once. 087 if (attributeValue == null) { 088 // attributeValue == null is fairly common, so we check for 089 // that first 090 return null; 091 } 092 093 // If you change this class, you should run before and after 094 // timing tests on large moml files, a good command to run 095 // is: 096 // $PTII/bin/ptolemy -test $PTII/ptolemy/domains/ct/demo/CarTracking/CarTracking.xml 097 // which will open up a large xml file and then close after 2 seconds. 098 if (attributeName.equals("class")) { 099 if (_classChanges.containsKey(attributeValue)) { 100 // We found a class with a class change. 101 MoMLParser.setModified(true); 102 103 // Uncomment this to trace changes. 104 //System.out.println("ClassChanges: " + attributeValue + " " + _classChanges.get(attributeValue)); 105 106 return _classChanges.get(attributeValue); 107 } else if (_classesToRemove.contains(attributeValue)) { 108 // We found a class to remove. 109 return null; 110 } 111 } 112 return attributeValue; 113 } 114 115 /** In this class, do nothing. 116 * @param container The object created by this element. 117 * @param elementName The element name. 118 * @param currentCharData The character data, which appears 119 * only in the doc and configure elements 120 * @param xmlFile The file currently being parsed. 121 * @exception Exception Not thrown in this base class. 122 */ 123 @Override 124 public void filterEndElement(NamedObj container, String elementName, 125 StringBuffer currentCharData, String xmlFile) throws Exception { 126 } 127 128 /** Add a class to be filtered. Note that if you add a class with this 129 * method, then you must remove it with {@link #remove(String)}, 130 * calling "new ClassChanges()" will not remove a class that was 131 * added with this method. 132 * @param oldName The old name of the class to be filtered. 133 * @param newName The new name of the class to be filtered. If 134 * the value is null, then the class in oldName will be removed. 135 * @see #remove(String) 136 */ 137 public void put(String oldName, String newName) { 138 if (newName == null) { 139 _classesToRemove.add(oldName); 140 } else { 141 _classChanges.put(oldName, newName); 142 } 143 } 144 145 /** Remove a class to be filtered. 146 * @param className The name of the class to be filtered 147 * out, for example "ptolemy.copernicus.kernel.GeneratorAttribute". 148 * @see #put(String, String) 149 */ 150 public void remove(String className) { 151 if (_classChanges.containsKey(className)) { 152 _classChanges.remove(className); 153 } else if (_classesToRemove.contains(className)) { 154 _classesToRemove.remove(className); 155 } 156 } 157 158 /** Return a string that describes what the filter does. 159 * @return the description of the filter that ends with a newline. 160 */ 161 @Override 162 public String toString() { 163 StringBuffer results = new StringBuffer(getClass().getName() 164 + ": change any class names that have been " 165 + "renamed and remove obsolete classes.\n" 166 + "Below are original class names followed by " 167 + "the new class names:\n"); 168 169 for (Map.Entry<String, String> classChange : _classChanges.entrySet()) { 170 String className = classChange.getKey(); 171 results.append("\t" + className + "\t -> " + classChange.getValue() 172 + "\n"); 173 } 174 175 results.append("\nBelow are the classes to remove:\n"); 176 177 Iterator classesToRemove = _classesToRemove.iterator(); 178 179 while (classesToRemove.hasNext()) { 180 String className = (String) classesToRemove.next(); 181 results.append("\t" + className + "\n"); 182 } 183 184 return results.toString(); 185 } 186 187 /////////////////////////////////////////////////////////////////// 188 //// private variables //// 189 // Map of actor names a HashMap of property names to new classes. 190 private static HashMap<String, String> _classChanges; 191 192 static { 193 /////////////////////////////////////////////////////////// 194 // Actors and attributes that have changed names. 195 _classChanges = new HashMap<String, String>(); 196 197 // If the ptolemy.ptII.classesToChange property is set, then 198 // assume that it is consists of fully qualified class names in 199 // pairs. The first name is the old class name, the second name is the 200 // new name. 201 String propertyName = "ptolemy.ptII.classesToChange"; 202 try { 203 String classesToChange = System.getProperty(propertyName); 204 if (classesToChange != null && !classesToChange.equals("")) { 205 StringTokenizer tokenizer = new StringTokenizer( 206 classesToChange); 207 while (tokenizer.hasMoreTokens()) { 208 String oldClassName = tokenizer.nextToken(); 209 if (tokenizer.hasMoreTokens()) { 210 String newClassName = tokenizer.nextToken(); 211 System.out.println( 212 "ptolemy.moml.filter.ClassChanges(): property " 213 + propertyName + " was set, adding " 214 + oldClassName + " -> " + newClassName); 215 _classChanges.put(oldClassName, newClassName); 216 } 217 } 218 } 219 } catch (Throwable throwable) { 220 System.err.println("Failed to handle the \"" + propertyName + "\": " 221 + throwable); 222 throwable.printStackTrace(); 223 } 224 225 // JSAccessor 226 _classChanges.put("org.terraswarm.accessor.jjs.JSAccessor", 227 "org.terraswarm.accessor.JSAccessor"); 228 229 // AccessorOne 230 _classChanges.put("org.terraswarm.kernel.AccessorOne", 231 "org.terraswarm.accessor.JSAccessor"); 232 233 // Rhino JavaScript 234 _classChanges.put("ptolemy.actor.lib.js.JavaScript", 235 "ptolemy.actor.lib.jjs.JavaScript"); 236 237 // Location 238 _classChanges.put("ptolemy.moml.Location", 239 "ptolemy.kernel.util.Location"); 240 241 // New in 2.1-devel-2 242 _classChanges.put("ptolemy.kernel.util.VersionAttribute", 243 "ptolemy.kernel.attributes.VersionAttribute"); 244 245 _classChanges.put("ptolemy.kernel.util.RelativeLocation", 246 "ptolemy.vergil.basic.RelativeLocation"); 247 248 // New in 2.3-devel 249 _classChanges.put("ptolemy.actor.lib.comm.SerialComm", 250 "ptolemy.actor.lib.io.comm.SerialComm"); 251 252 // New in 3.1-devel 253 _classChanges.put("ptolemy.domains.fsm.lib.RelationList", 254 "ptolemy.domains.modal.kernel.RelationList"); 255 256 _classChanges.put("ptolemy.domains.fsm.kernel.CommitActionsAttribute", 257 "ptolemy.domains.modal.kernel.CommitActionsAttribute"); 258 259 _classChanges.put("ptolemy.domains.fsm.kernel.FSMDirector", 260 "ptolemy.domains.modal.kernel.FSMDirector"); 261 262 _classChanges.put("ptolemy.domains.fsm.kernel.OutputActionsAttribute", 263 "ptolemy.domains.modal.kernel.OutputActionsAttribute"); 264 265 _classChanges.put("ptolemy.domains.fsm.kernel.State", 266 "ptolemy.domains.modal.kernel.State"); 267 268 _classChanges.put("ptolemy.domains.fsm.kernel.Transition", 269 "ptolemy.domains.modal.kernel.Transition"); 270 271 _classChanges.put("ptolemy.domains.fsm.modal.ModalModel", 272 "ptolemy.domains.modal.modal.ModalModel"); 273 274 _classChanges.put("ptolemy.domains.fsm.modal.ModalPort", 275 "ptolemy.domains.modal.modal.ModalPort"); 276 277 _classChanges.put("ptolemy.domains.fsm.modal.State", 278 "ptolemy.domains.modal.modal.State"); 279 280 _classChanges.put("ptolemy.domains.fsm.modal.Refinement", 281 "ptolemy.domains.modal.modal.Refinement"); 282 283 _classChanges.put("ptolemy.domains.fsm.modal.RefinementPort", 284 "ptolemy.domains.modal.modal.RefinementPort"); 285 286 _classChanges.put( 287 "ptolemy.vergil.fsm.modal.HierarchicalStateControllerFactory", 288 "ptolemy.vergil.fsm.modal.HierarchicalStateControllerFactory"); 289 290 _classChanges.put("ptolemy.vergil.fsm.modal.ModalTableauFactory", 291 "ptolemy.vergil.modal.modal.ModalTableauFactory"); 292 293 // Renamed in 3.1-devel 294 _classChanges.put("ptolemy.vergil.icon.ImageEditorIcon", 295 "ptolemy.vergil.icon.ImageIcon"); 296 297 // Replaced FileAttribute with FileParameter in 3.2-devel 298 _classChanges.put("ptolemy.kernel.attributes.FileAttribute", 299 "ptolemy.data.expr.FileParameter"); 300 301 // SDFIOPort is obsolete as of 3.2-devel 302 _classChanges.put("ptolemy.domains.sdf.kernel.SDFIOPort", 303 "ptolemy.actor.TypedIOPort"); 304 305 // Moved MultiInstanceComposite 306 _classChanges.put("ptolemy.actor.hoc.MultiInstanceComposite", 307 "ptolemy.actor.lib.hoc.MultiInstanceComposite"); 308 309 // Moved ModalModel 310 _classChanges.put("ptolemy.vergil.fsm.modal.ModalModel", 311 "ptolemy.domains.modal.modal.ModalModel"); 312 313 _classChanges.put( 314 "ptolemy.vergil.fsm.modal.HierarchicalStateControllerFactory", 315 "ptolemy.vergil.modal.modal.HierarchicalStateControllerFactory"); 316 317 // Moved InterfaceAutomatonTransition 318 _classChanges.put( 319 "ptolemy.domains.fsm.kernel.InterfaceAutomatonTransition", 320 "ptolemy.domains.modal.kernel.ia.InterfaceAutomatonTransition"); 321 322 // Moved InterfaceAutomatonTransition 323 _classChanges.put("ptolemy.domains.fsm.kernel.InterfaceAutomaton", 324 "ptolemy.domains.modal.kernel.ia.InterfaceAutomaton"); 325 326 // Moved InterfaceAutomatonTransition 327 _classChanges.put( 328 "ptolemy.domains.modal.kernel.InterfaceAutomatonTransition", 329 "ptolemy.domains.modal.kernel.ia.InterfaceAutomatonTransition"); 330 331 // Moved InterfaceAutomatonTransition 332 _classChanges.put("ptolemy.domains.modal.kernel.InterfaceAutomaton", 333 "ptolemy.domains.modal.kernel.ia.InterfaceAutomaton"); 334 335 // Moved ModalTableauFactory 336 _classChanges.put( 337 "ptolemy.vergil.fsm.modal.ModalModel$ModalTableauFactory", 338 "ptolemy.vergil.modal.modal.ModalTableauFactory"); 339 340 // Moved ModalPort 341 _classChanges.put("ptolemy.vergil.fsm.modal.ModalPort", 342 "ptolemy.domains.modal.modal.ModalPort"); 343 344 // Moved ModalController 345 _classChanges.put("ptolemy.vergil.fsm.modal.ModalController", 346 "ptolemy.domains.modal.modal.ModalController"); 347 348 // Moved Refinement 349 _classChanges.put("ptolemy.vergil.fsm.modal.Refinement", 350 "ptolemy.domains.modal.modal.Refinement"); 351 352 // Moved RefinementPort 353 _classChanges.put("ptolemy.vergil.fsm.modal.RefinementPort", 354 "ptolemy.domains.modal.modal.RefinementPort"); 355 356 // Moved TransitionRefinement 357 _classChanges.put("ptolemy.vergil.fsm.modal.TransitionRefinement", 358 "ptolemy.domains.modal.modal.TransitionRefinement"); 359 360 // Moved TransitionRefinementPort 361 _classChanges.put("ptolemy.vergil.fsm.modal.TransitionRefinementPort", 362 "ptolemy.domains.modal.modal.TransitionRefinementPort"); 363 364 // Moved IDAttribute from ptolemy.kernel.attributes to 365 // ptolemy.vergil.kernel.atttributes 366 _classChanges.put("ptolemy.kernel.attributes.IDAttribute", 367 "ptolemy.vergil.kernel.attributes.IDAttribute"); 368 369 _classChanges.put("ptolemy.domains.gr.lib.ViewScreen", 370 "ptolemy.domains.gr.lib.ViewScreen3D"); 371 372 _classChanges.put("ptolemy.domains.sr.lib.Default", 373 "ptolemy.actor.lib.Default"); 374 375 _classChanges.put("ptolemy.domains.sr.lib.Latch", 376 "ptolemy.domains.sr.lib.Current"); 377 378 // Renamed VergilPreferences 379 _classChanges.put("ptolemy.vergil.VergilPreferences", 380 "ptolemy.actor.gui.PtolemyPreferences"); 381 382 // Use FPScheduler instead of SROptimizedScheduler 383 _classChanges.put("ptolemy.domains.sr.kernel.SROptimizedScheduler", 384 "ptolemy.actor.sched.FixedPointScheduler"); 385 386 // Moved HSFSMDirector 387 _classChanges.put("ptolemy.domains.fsm.kernel.HSFSMDirector", 388 "ptolemy.domains.ct.kernel.HSFSMDirector"); 389 390 // Moved ParameterSet 391 _classChanges.put("ptolemy.data.expr.ParameterSet", 392 "ptolemy.actor.parameters.ParameterSet"); 393 394 // ColtSeedParameter is obsolete 395 _classChanges.put("ptolemy.actor.lib.colt.ColtSeedParameter", 396 "ptolemy.moml.SharedParameter"); 397 398 // 1/08: Moved SingleTokenCommutator so that DDF can extend it 399 _classChanges.put("ptolemy.domains.sr.lib.SingleTokenCommutator", 400 "ptolemy.actor.lib.SingleTokenCommutator"); 401 402 // DependencyHighlighter is really a vergil class 403 _classChanges.put("ptolemy.actor.gui.DependencyHighlighter", 404 "ptolemy.vergil.basic.DependencyHighlighter"); 405 406 _classChanges.put("ptolemy.moml.SharedParameter", 407 "ptolemy.actor.parameters.SharedParameter"); 408 409 _classChanges.put("ptolemy.actor.lib.gui.LEDMatrix", 410 "ptolemy.vergil.actor.lib.LEDMatrix"); 411 412 _classChanges.put("ptolemy.actor.lib.gui.ModelDisplay", 413 "ptolemy.vergil.actor.lib.ModelDisplay"); 414 415 _classChanges.put("ptolemy.domains.sr.lib.ButtonTime", 416 "ptolemy.domains.sr.lib.gui.ButtonTime"); 417 418 _classChanges.put("ptolemy.domains.sr.lib.NonStrictDisplay", 419 "ptolemy.domains.sr.lib.gui.NonStrictDisplay"); 420 421 _classChanges.put("ptolemy.actor.lib.CodegenActor", 422 "ptolemy.actor.lib.jni.CodegenActor"); 423 424 _classChanges.put("ptolemy.codegen.c.actor.lib.CodegenActor", 425 "ptolemy.codegen.c.actor.lib.jni.CodegenActor"); 426 427 _classChanges.put("ptolemy.codegen.kernel.Director", 428 "ptolemy.codegen.actor.Director"); 429 430 _classChanges.put("ptolemy.domains.de.lib.UnionMerge", 431 "ptolemy.actor.lib.UnionMerge"); 432 433 // Look for Kepler's NamedObjId, and if we don't find it, then 434 // add it to the filter. This makes it much easier to open 435 // Kepler models in Ptolemy. 436 try { 437 Class.forName("org.kepler.moml.NamedObjId"); 438 } catch (ClassNotFoundException ex) { 439 _classChanges.put("org.kepler.moml.NamedObjId", 440 "ptolemy.kernel.util.StringAttribute"); 441 } 442 443 // Look for Kepler's CompositeClassEntity, and if we don't find it, then 444 // add it to the filter. This makes it much easier to open 445 // Kepler models in Ptolemy. 446 try { 447 Class.forName("org.kepler.moml.CompositeClassEntity"); 448 } catch (ClassNotFoundException ex) { 449 _classChanges.put("org.kepler.moml.CompositeClassEntity", 450 "ptolemy.actor.TypedCompositeActor"); 451 } 452 453 // Look for Kepler's NamedOjbIdReferralList, and if we don't find it, then 454 // add it to the filter. This makes it much easier to open 455 // Kepler models in Ptolemy. 456 try { 457 Class.forName("org.kepler.moml.NamedObjIdReferralList"); 458 } catch (ClassNotFoundException ex) { 459 _classChanges.put("org.kepler.moml.NamedObjIdReferralList", 460 "ptolemy.kernel.util.StringAttribute"); 461 } 462 463 // Look for Kepler's SemanticType, and if we don't find it, then 464 // add it to the filter. This makes it much easier to open 465 // Kepler models in Ptolemy. 466 try { 467 Class.forName("org.kepler.sms.SemanticType"); 468 } catch (ClassNotFoundException ex) { 469 _classChanges.put("org.kepler.sms.SemanticType", 470 "ptolemy.kernel.util.StringAttribute"); 471 } 472 473 _classChanges.put("ptolemy.data.unit.UnitAttribute", 474 "ptolemy.moml.unit.UnitAttribute"); 475 476 _classChanges.put("ptolemy.domains.properties.LatticeElement", 477 "ptolemy.domains.properties.kernel.LatticeElement"); 478 _classChanges.put("ptolemy.domains.properties.LatticeElementIcon", 479 "ptolemy.vergil.properties.LatticeElementIcon"); 480 _classChanges.put("ptolemy.domains.properties.PropertyLatticeComposite", 481 "ptolemy.domains.properties.kernel.PropertyLatticeComposite"); 482 483 // Renamed the DE Sampler to MostRecent. 484 _classChanges.put("ptolemy.domains.de.lib.Sampler", 485 "ptolemy.domains.de.lib.MostRecent"); 486 487 // Moved SingleEvent. 488 _classChanges.put("ptolemy.domains.de.lib.SingleEvent", 489 "ptolemy.actor.lib.SingleEvent"); 490 491 _classChanges.put("ptolemy.actor.lib.GetCurrentMicrostep", 492 "ptolemy.actor.lib.CurrentMicrostep"); 493 494 // Moved MonitorValue into the gui package. 495 _classChanges.put("ptolemy.actor.lib.MonitorValue", 496 "ptolemy.actor.lib.gui.MonitorValue"); 497 498 // Classes moved from vergil.export.html to vergil.export.web 499 _classChanges.put("ptolemy.vergil.basic.export.html.AreaEventType", 500 "ptolemy.vergil.basic.export.web.AreaEventType"); 501 _classChanges.put("ptolemy.vergil.basic.export.html.DefaultIconLink", 502 "ptolemy.vergil.basic.export.web.DefaultIconLink"); 503 _classChanges.put("ptolemy.vergil.basic.export.html.DefaultIconScript", 504 "ptolemy.vergil.basic.export.web.DefaultIconScript"); 505 _classChanges.put("ptolemy.vergil.basic.export.html.DefaultTitle", 506 "ptolemy.vergil.basic.export.web.DefaultTitle"); 507 _classChanges.put("ptolemy.vergil.basic.export.html.HTMLImage", 508 "ptolemy.vergil.basic.export.web.HTMLImage"); 509 _classChanges.put("ptolemy.vergil.basic.export.html.HTMLText", 510 "ptolemy.vergil.basic.export.web.HTMLText"); 511 _classChanges.put("ptolemy.vergil.basic.export.html.HTMLTextPosition", 512 "ptolemy.vergil.basic.export.web.HTMLTextPosition"); 513 _classChanges.put("ptolemy.vergil.basic.export.html.IconLink", 514 "ptolemy.vergil.basic.export.web.IconLink"); 515 _classChanges.put("ptolemy.vergil.basic.export.html.IconScript", 516 "ptolemy.vergil.basic.export.web.IconScript"); 517 _classChanges.put("ptolemy.vergil.basic.export.html.LinkTarget", 518 "ptolemy.vergil.basic.export.web.LinkTarget"); 519 _classChanges.put("ptolemy.vergil.basic.export.html.LinkToOpenTableaux", 520 "ptolemy.vergil.basic.export.web.LinkToOpenTableaux"); 521 _classChanges.put( 522 "ptolemy.vergil.basic.export.html.ParameterDisplayIconScript", 523 "ptolemy.vergil.basic.export.web.ParameterDisplayIconScript"); 524 _classChanges.put("ptolemy.vergil.basic.export.html.Title", 525 "ptolemy.vergil.basic.export.web.Title"); 526 _classChanges.put("ptolemy.vergil.basic.export.html.WebContent", 527 "ptolemy.vergil.basic.export.web.WebContent"); 528 _classChanges.put( 529 "ptolemy.vergil.basic.export.html.WebExportParameters", 530 "ptolemy.vergil.basic.export.web.WebExportParameters"); 531 _classChanges.put("ptolemy.vergil.basic.export.html.WebExportable", 532 "ptolemy.vergil.basic.export.web.WebExportable"); 533 _classChanges.put("ptolemy.vergil.basic.export.html.WebExporter", 534 "ptolemy.vergil.basic.export.web.WebExporter"); 535 536 // ptolemy.actor.lib.jni was removed before ptII-9.0 537 _classChanges.put("ptolemy.actor.lib.jni.EmbeddedCActor", 538 "ptolemy.cg.lib.EmbeddedCodeActor"); 539 540 _classChanges.put("ptolemy.vergil.basic.export.html.HTMLPageAssembler", 541 "ptolemy.vergil.basic.export.html.jsoup.HTMLPageAssembler"); 542 543 //Move hlaptolemy classes from $PTII/ptolemy.apps to $PTII/org 544 { 545 String[] hlaPt2Classes = { "HlaPublisher", "HlaManager", 546 "HlaSubscriber" }; 547 for (int i = 0; i < hlaPt2Classes.length; ++i) { 548 _classChanges.put( 549 "ptolemy.apps.hlacerti.lib." + hlaPt2Classes[i], 550 "org.hlacerti.lib." + hlaPt2Classes[i]); 551 } 552 } 553 554 // KIELER LayoutHint was moved 555 _classChanges.put("ptolemy.vergil.basic.layout.kieler.LayoutHint", 556 "ptolemy.vergil.actor.LayoutHint"); 557 558 // KIELER LayoutConfiguraiont was extended 559 _classChanges.put("ptolemy.vergil.basic.layout.LayoutConfiguration", 560 "ptolemy.vergil.basic.layout.ActorLayoutConfiguration"); 561 562 } 563 564 // Set of class names that are obsolete and should be simply 565 // removed. 566 private static HashSet<String> _classesToRemove; 567 568 static { 569 //////////////////////////////////////////////////////////// 570 // Classes that are obsolete and should be removed. 571 _classesToRemove = new HashSet<String>(); 572 573 _classesToRemove.add("ptolemy.codegen.c.kernel.CCodeGenerator"); 574 575 // NotEditableParameter 576 _classesToRemove.add("ptolemy.data.expr.NotEditableParameter"); 577 578 //DEIOPort 579 _classesToRemove.add("ptolemy.domains.de.kernel.DEIOPort"); 580 581 // SROptimizedScheduler 582 _classesToRemove.add("ptolemy.domains.sr.kernel.SROptimizedScheduler"); 583 584 // SRRandomizedScheduler 585 _classesToRemove.add("ptolemy.domains.sr.kernel.SRRandomizedScheduler"); 586 587 } 588}