00001
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
00020
00021
00022
00023
00024
00025
00026
00027
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
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 }