CMS 3D CMS Logo

VisWebRootService.cc

Go to the documentation of this file.
00001 //<<<<<< INCLUDES                                                       >>>>>>
00002 
00003 #include "VisRoot/VisWebRoot/interface/VisWebRootService.h"
00004 #include "VisRoot/VisRootBrowser/interface/VisHtmlRootBrowser.h"
00005 #include "Iguana/WebFramework/interface/IgBrowserManager.h"
00006 #include "Iguana/Studio/interface/IgDocumentData.h"
00007 #include "Iguana/Framework/interface/IgTwig.h"
00008 #include "Iguana/Models/interface/IgUIDModel.h"
00009 #include "Iguana/Models/interface/IgUIDRep.h"
00010 #include "Iguana/WebFramework/interface/IgWebTreeService.h"
00011 #include "Iguana/WebFramework/interface/IgWebServiceRegistry.h"
00012 #include "Iguana/Framework/interface/IgRepContext.h"
00013 #include <classlib/utils/Callback.h>
00014 #include <classlib/utils/DebugAids.h>
00015 #include <classlib/utils/Log.h>
00016 #include <qiodevice.h>
00017 #include <string>
00018 
00019 //<<<<<< PRIVATE DEFINES                                                >>>>>>
00020 //<<<<<< PRIVATE CONSTANTS                                              >>>>>>
00021 //<<<<<< PRIVATE TYPES                                                  >>>>>>
00022 //<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
00023 //<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
00024 //<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
00025 //<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
00026 //<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
00027 //<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
00028 
00029 VisWebRootService::VisWebRootService (IgState *state)
00030     : IgWebService (state)
00031 {
00032     registerCallback ("create", lat::CreateCallback (this, &VisWebRootService::create));
00033     registerCallback ("browse", lat::CreateCallback (this, &VisWebRootService::browse));    
00034 }
00035 
00036 void
00037 VisWebRootService::create (Arguments *arguments)
00038 {
00039     IgState *state = arguments->state ();
00040     ArgumentsMap &args = *arguments->args ();
00041     IgBrowserManager *manager = IgBrowserManager::get (state);
00042     ASSERT (manager);
00043     
00044     if (args.find ("name") == args.end ())
00045         return;
00046 
00047     std::string lookupName = args["name"];
00048 
00049     if (lookupName == "")
00050         return;
00051     
00052     VisHtmlRootBrowser *browser 
00053         = manager->lookup<VisHtmlRootBrowser> (lookupName);
00054     
00055     if (! browser)
00056     {
00057         LOG (0, trace, lat::LFgeneral, "Creating root browser");
00058         browser = new VisHtmlRootBrowser (state, 0);
00059         manager->add (browser, lookupName);
00060     }        
00061 }
00062 
00063 void
00064 VisWebRootService::browse (Arguments *arguments)
00065 {
00066     IgState *state = arguments->state ();
00067     QIODevice *outputDevice = arguments->outputDevice ();    
00068     ArgumentsMap &args = *arguments->args ();
00069     
00070     IgDocumentData *dd = IgDocumentData::get (state);
00071     IgBrowserManager *manager = IgBrowserManager::get (state);
00072     
00073     IgTwig *twig = 0;
00074     
00075     // FIXME: clean up so that only the UID API remains.
00076 
00077     std::string rootName = "";
00078     if (args.find ("root") != args.end ())
00079     {
00080         rootName = args["root"];
00081 
00082         twig = dynamic_cast <IgTwig *> (dd->root (rootName));
00083         ASSERT (twig);  
00084     }
00085     else if (args.find ("i") != args.end ())
00086     {
00087         IgWebServiceRegistry *serviceRegistry 
00088             = IgWebServiceRegistry::get (state);
00089         ASSERT (serviceRegistry);
00090         
00091         IgWebTreeService *treeWeb = dynamic_cast <IgWebTreeService *> 
00092                                     (serviceRegistry->getService ("Tree"));
00093         ASSERT (treeWeb);
00094         
00095         IgRep *rep = treeWeb->uidModel ()->lookup (atoi (args["i"].c_str ()));  
00096         ASSERT (rep);
00097         IgUIDRep *uidRep = dynamic_cast <IgUIDRep *> (rep);
00098         IgRepContext *context = uidRep->context ();
00099         ASSERT (context);
00100         IgRepSet::update (context, IgTwig::SELF_MASK | IgTwig::STRUCTURE_MASK);
00101         
00102         ASSERT (uidRep);
00103         twig = dynamic_cast <IgTwig *> (context->object ());
00104         ASSERT (twig);  
00105     }
00106     
00107     std::string browserName = "";
00108     if (args.find ("browserName") != args.end ())
00109         browserName = args["browserName"];
00110 
00111     
00112     VisHtmlRootBrowser *browser 
00113         = manager->lookup<VisHtmlRootBrowser> (browserName);
00114     ASSERT (browser);
00115     if (twig)
00116     {
00117         browser->browse (twig);
00118 
00119         QByteArray tmpArray = browser->getJPGBuffer ();
00120         this->sendBinary (outputDevice, tmpArray, std::string ("image/jpeg"));
00121     }    
00122 }
00123 
00124 const char *
00125 VisWebRootService::catalogLabel (void)
00126 {
00127     return "ROOT";    
00128 }

Generated on Tue Jun 9 17:50:29 2009 for CMSSW by  doxygen 1.5.4