001/* 002 * Copyright (c) 2017 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: crawl $' 006 * '$Date: 2017-08-29 15:27:08 -0700 (Tue, 29 Aug 2017) $' 007 * '$Revision: 1392 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.kepler.webview.actor; 031 032import ptolemy.actor.CompositeActor; 033import ptolemy.actor.Manager; 034import ptolemy.kernel.util.IllegalActionException; 035import ptolemy.kernel.util.NameDuplicationException; 036import ptolemy.kernel.util.NamedObj; 037import ptolemy.kernel.util.Settable; 038import ptolemy.kernel.util.StringAttribute; 039 040/** 041 * TODO: notify client of errors 042 * TODO: add pause, resume? 043 * 044 * @author Daniel Crawl 045 * @version $Id: ControlAttribute.java 1392 2017-08-29 22:27:08Z crawl $ 046 */ 047public class ControlAttribute extends WebViewAttribute { 048 049 public ControlAttribute(NamedObj container, String name) throws IllegalActionException, NameDuplicationException { 050 super(container, name); 051 052 htmlFile.setExpression("web-view/control.html"); 053 title.setExpression("Control"); 054 StringAttribute position = new StringAttribute(this, "_webWindowProperties"); 055 position.setExpression("{\"top\":0,\"left\":0,\"width\":172,\"height\":95}"); 056 position.setVisibility(Settable.NONE); 057 } 058 059 @Override 060 protected void _dataReceived(String name, Object value) { 061 062 //System.out.println("dr " + name + " " + value); 063 064 CompositeActor toplevel; 065 Manager manager; 066 067 if(name.equals("event")) { 068 if(!(value instanceof String)) { 069 System.err.println("ERROR: expected String for event value; got " + value.getClass()); 070 } else { 071 switch((String)value) { 072 case "run": 073 074 toplevel = (CompositeActor) toplevel(); 075 manager = toplevel.getManager(); 076 if(manager == null) { 077 try { 078 manager = new Manager(toplevel.workspace(), "manager"); 079 toplevel.setManager(manager); 080 } catch (IllegalActionException e) { 081 System.err.print("ERROR: could not create Manager: " + e.getMessage()); 082 return; 083 } 084 } 085 try { 086 manager.startRun(); 087 } catch (IllegalActionException e) { 088 System.err.println("ERROR: count not start execution: " + e.getMessage()); 089 return; 090 } 091 092 break; 093 case "stop": 094 toplevel = (CompositeActor) toplevel(); 095 manager = toplevel.getManager(); 096 if(manager == null) { 097 System.err.println("ERROR: cannot stop when no Manager found."); 098 } else { 099 manager.finish(); 100 } 101 break; 102 default: 103 System.err.println("ERROR: unexpected event: " + value); 104 break; 105 } 106 } 107 } 108 } 109}