001/*
002 * Copyright (c) 2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: crawl $'
006 * '$Date: 2012-11-26 22:22:04 +0000 (Mon, 26 Nov 2012) $' 
007 * '$Revision: 31121 $'
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.objectmanager.repository;
031
032import org.kepler.objectmanager.ActorMetadata;
033import org.kepler.objectmanager.cache.ActorCacheObject;
034import org.kepler.objectmanager.cache.CacheManager;
035import org.kepler.objectmanager.cache.CacheNamedObj;
036import org.kepler.objectmanager.library.LibItem;
037import org.kepler.objectmanager.library.LibraryManager;
038
039import ptolemy.kernel.ComponentEntity;
040import ptolemy.kernel.util.NamedObj;
041
042/**
043 * Created by IntelliJ IDEA.
044 * User: sean
045 * Date: Mar 10, 2010
046 * Time: 10:20:42 AM
047 */
048
049public class AlternateGetMoml {
050        
051        public AlternateGetMoml() {}
052        
053        public String getMoml(NamedObj dropObj) {
054
055                String actorString = "";
056                
057                if (dropObj instanceof CacheNamedObj) {
058                        CacheNamedObj cno = (CacheNamedObj) dropObj;
059                        Object object = cno.get().getObject();
060                        ActorMetadata am = (ActorMetadata) object;
061                        String name = am.getName();
062                        NamedObj no;
063                        try {
064                                no = am.getActorAsNamedObj(null);
065                        }
066                        catch(Exception ex) {
067                                ex.printStackTrace();
068                                return "";
069                        }
070                        actorString = no.exportMoML(name);
071                        int pos1 = actorString.indexOf("<!DOCTYPE");
072                        int pos2 = actorString.indexOf(">", pos1);
073                        int pos3 = actorString.indexOf("<", pos2);
074                        if (pos1 > -1) {
075                                actorString = actorString.substring(pos3, actorString.length());
076                        }
077                }
078                else if (dropObj instanceof ComponentEntity) {
079                        try {
080                                int liid = LibraryManager.getLiidFor((ComponentEntity)dropObj);
081                                if (liid >= 0) {
082                                        LibItem li = LibraryManager.getInstance().getTreeItemIndexInformation(liid);
083                                        
084                                        CacheManager cacheMan = CacheManager.getInstance();
085                                
086                                        String name = li.getName();
087                                        ActorCacheObject aco = (ActorCacheObject) cacheMan
088                                                        .getObject(li.getLsid());
089                                        if (aco == null) {
090                                                throw new Exception("Object not found: " + li.getLsid());
091                                        }
092        
093                                        ActorMetadata am = aco.getMetadata();
094                                        NamedObj no = am.getActorAsNamedObj(null);
095                                        actorString = no.exportMoML(name);
096                                        // this string has an xml header and a DOCTYPE declaration
097                                        // following removes those elements
098                                        int pos1 = actorString.indexOf("<!DOCTYPE");
099                                        int pos2 = actorString.indexOf(">", pos1);
100                                        int pos3 = actorString.indexOf("<", pos2);
101                                        if (pos1 > -1) {
102                                                actorString = actorString.substring(pos3, actorString.length());
103                                        }
104                                } else {
105                                        throw new Exception("No Library Index ID was found");
106                                }
107        
108                        } catch (Exception w) {
109                                String msg = w.getMessage();
110                                if (msg == null) {
111                                        msg = "empty error message";
112                                }
113                                System.out
114                                                .println("Error inside GetMomlFromLSID.getMoml(): " + msg);
115                                try {
116                                        Thread.sleep(500);
117                                }
118                                catch(InterruptedException ignored) {}
119                                try {
120                                        throw new Exception();
121                                }
122                                catch(Exception ex) {
123                                        ex.printStackTrace();
124                                }
125                                try {
126                                        Thread.sleep(500);
127                                }
128                                catch(InterruptedException ignored) {}
129                        }
130                }
131                else {
132                        System.out.println("I don't know what to do about this");
133                }
134                // System.out.println("actorString: " + actorString);
135                return actorString;
136        }
137        
138}