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}