Пример #1
0
 def __init__(self, ):
     self.__init__._super()
     outer = VerticalPanel()
     outer.addStyleName(u"gwittit-Showcase-Groups_get")
     self.addLoader(outer)
     class _anonymous(AsyncCallback):
         
         @java.typed(Throwable)
         def onFailure(self, caught):
             self.removeLoader(outer)
             self.handleFailure(caught)
         
         @java.typed(List)
         def onSuccess(self, groups):
             self.removeLoader(outer)
             for g in groups:
                 membersWrapper = VerticalPanel()
                 membersWrapper.addStyleName(u"membersWrapper")
                 memberLink = Anchor(u"See Members")
                 class _anonymous(ClickHandler):
                     
                     @java.typed(ClickEvent)
                     def onClick(self, event):
                         self.displayMembers(membersWrapper, g.getGid())
                 memberLink.addClickHandler(_anonymous())
                 outer.add(HTML(java.str(u"<h4>Group: " + java.str(g.getName())) + u"</h4>"))
                 outer.add(memberLink)
                 outer.add(membersWrapper)
     self.apiClient.groupsGet(None, _anonymous())
     self.initWidget(outer)
Пример #2
0
 def renderPosts(self, addContentToPnl, posts):
     """
     Render posts i a stream
     """
     addContentToPnl.clear()
     addContentToPnl.add(HTML(u"Number of posts: " + java.str(posts.__len__())))
     for post in Util.iterate(posts):
         try:
             GWT.log(u"Render: " + java.str(JSONObject(post).toString()), None)
             postContentPnl = VerticalPanel()
             postContentPnl.addStyleName(u"postContent")
             postContentPnl.add(HTML(java.str(FbName(post.getActorId())) + u" " + post.getMessage()))
             if post.getAttachment().getName() is not None:
                 postContentPnl.add(self.createAttachmentUI(post.getAttachment()))
             if post.getLikes().getCount() > 0:
                 postContentPnl.add(self.createLikesUI(post.getLikes()))
             if post.getComments().getCount() > 0:
                 postContentPnl.add(self.createCommentsUI(post.getComments()))
             p = HorizontalPanel() #  Add profilepic on the left, postcontent on the right
             p.addStyleName(u"post")
             p.add(FbProfilePic(post.getActorId()))
             p.add(postContentPnl)
             addContentToPnl.add(p) #  postPnl.add ( asJson ( "LikesAsJson: ", post.getLikes () ));
         except Exception,e:
             GWT.log(u"Unkown exception ", e)
Пример #3
0
 def __init__(self, ):
     self.__init__._super()
     """
     Create showcase client.
     """
     History.addValueChangeHandler(self)
     self.outer.getElement().setId(u"ShowcaseClient")
     self.showcaseWrapper.getElement().setId(u"ShowcaseWrapper")
     self.horizontalSplit.setSpacing(10)
     self.showcaseWrapper.setWidth(u"700px")
     self.showcaseWrapper.addStyleName(u"showcaseWrapper")
     self.treeMenu.addStyleName(u"treeMenu")
     token = Window.Location.getHash()
     if token == None or u"".equals(token):
         self.doDisplayShowcase(self.__class__.DEFAULT_SHOW)
         self.showcaseWrapper.insert(self.createDefaultFrontpage(), 0)
     else:
         self.doDisplayShowcase(token)
     treeMenuWrapper = VerticalPanel()
     treeMenuWrapper.addStyleName(u"treeMenuWrapper")
     treeMenuWrapper.add(HTML(u"<h4>Methods: </h4>"))
     treeMenuWrapper.add(self.treeMenu)
     self.horizontalSplit.add(treeMenuWrapper) #  Add left + right column
     self.horizontalSplit.add(self.decorate(self.showcaseWrapper))
     self.outer.add(self.horizontalSplit)
     Xfbml.parse(self.outer)
     self.initWidget(self.outer)
Пример #4
0
 def createCommentsUI(self, comments):
     """
     Create comments ui
     """
     p = VerticalPanel()
     p.addStyleName(u"comments fbColorLight rounded addSpace")
     p.add(HTML(java.str(u"<h3>Comments on this post: " + java.str(comments.getCount())) + u"</h4>"))
     return p
 def createFavoriteWidget(self):
     wrapper = VerticalPanel()
     wrapper.addStyleName(u"favPanel")
     self.favPanel.setSpacing(10)
     self.favPanel.add(self.top1)
     wrapper.add(self.favPanel)
     wrapper.add(self.publishButton)
     return wrapper
class ProfilePicsPanel(Composite):

    """
    Display Profile Pics in a panel.
    
    CSS Configuration.
    
    <ul>
    <li>.gwittit-ProfilePicsPanel
    <li>.gwittit-ProfilePicsPanel-pics
    </ul>
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.pics = FlowPanel()
        self.seeAllLink = Anchor(u"See All")
        self.PAGE_SIZE = 10
        self.uids = None
    
    @__init__.register
    @java.typed(List)
    def __init__(self, uids):
        self.__init__._super()
        """
        Create a new Panel
        """
        self.uids = uids
        self.outer.getElement().setId(u"ProfilePicsPanel")
        self.pics.getElement().setId(u"ProfilePicsPanel-pics-" + java.str(System.currentTimeMillis()))
        self.outer.addStyleName(u"gwittit-ProfilePicsPanel")
        self.pics.addStyleName(u"gwittit-ProfilePicsPanel-pics")
        self.outer.add(self.pics)
        self.renderProfilePics() #  Add list of fbprofilepics to the pics panel
        if uids.size() > PAGE_SIZE:
            self.outer.add(self.seeAllLink)
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                popup = ProfilePicsPopup(uids)
                popup.center()
                popup.show()
        self.seeAllLink.addClickHandler(_anonymous())
        Xfbml.parse(self.pics)
        self.initWidget(self.outer)
    
    @java.private
    def renderProfilePics(self):
        i = 0
        while i < PAGE_SIZE and i < self.uids.size():
            i+= 1
            uid = self.uids.get(i)
            profilePic = FbProfilePic(uid, Size.square)
            profilePic.setWidth(u"35px")
            profilePic.setHeight(u"35px")
            self.pics.add(profilePic)
Пример #7
0
 def createEventInfoUi(self, eventInfo):
     p = VerticalPanel()
     p.addStyleName(u"eventInfo")
     html = java.str(u"<h4>" + java.str(eventInfo.getName())) + u"</h4>"
     html += java.str(java.str(u"When: " + java.str(eventInfo.getStartTime())) + u", Where: " + eventInfo.getLocation()) + u"<br/>"
     self.responsePanel.add(HTML(html))
     mPanel = SimplePanel()
     mLink = Anchor(u"See who's attending")
     mLink.addClickHandler(self.GetMembersClickHandler(eventInfo.getEid(), mPanel))
     p.add(mLink)
     p.add(mPanel)
     return p
Пример #8
0
 def handleCommentsResponse(self, comments):
     for comment in comments:
         box = VerticalPanel()
         box.addStyleName(u"commentBox")
         p = HorizontalPanel()
         p.setSpacing(5)
         p.add(FbProfilePic(comment.getFromId(), Size.square))
         p.add(HTML(java.str(comment.getText()) + u" from " + FbName(comment.getFromId())))
         box.add(p)
         removeLink = Anchor(u"Remove")
         removeLink.addClickHandler(self.CommentsRemoveClickHandler(comment.getId()))
         box.add(removeLink)
         self.outer.add(box)
     Xfbml.parse(self.outer)
Пример #9
0
 def onSuccess(self, groups):
     self.removeLoader(outer)
     for g in groups:
         membersWrapper = VerticalPanel()
         membersWrapper.addStyleName(u"membersWrapper")
         memberLink = Anchor(u"See Members")
         class _anonymous(ClickHandler):
             
             @java.typed(ClickEvent)
             def onClick(self, event):
                 self.displayMembers(membersWrapper, g.getGid())
         memberLink.addClickHandler(_anonymous())
         outer.add(HTML(java.str(u"<h4>Group: " + java.str(g.getName())) + u"</h4>"))
         outer.add(memberLink)
         outer.add(membersWrapper)
Пример #10
0
 def createAttachmentUI(self, attachment):
     """
     Create attachment UI
     """
     p = VerticalPanel()
     p.addStyleName(u"attachment fbColorLight rounded addSpace")
     p.add(HTML(u"<h3>Attachment</h3> "))
     thumbs = HorizontalPanel()
     thumbs.setSpacing(10)
     for m in Util.iterate(attachment.getMedia()):
         p.add(HTML(u"<b>MediaContent:</b> " + java.str(m.getType())))
         if m.getSrc() is not None:
             thumbs.add(Image(m.getSrc()))
         if m.getTypeEnum() == Type.video:
             vLink = Anchor(u"See Video")
             vLink.setHref(m.getVideo().getSourceUrl())
             p.add(vLink)
     p.add(thumbs)
     return p
 def onSuccess(self, result):
     self.removeLoader(outer)
     outer.add(HTML(u"Result Size " + java.str(result.size())))
     for no in result:
         tmp = VerticalPanel()
         tmp.addStyleName(u"notification")
         tmp.add(HTML(java.str(u"<h3>" + java.str(no.getTitleText())) + u"</h3>"))
         tmp.add(HTML(no.getBodyHtml()))
         tmp.add(HTML(no.getHref()))
         if not no.getIsUnread():
             tmp.add(HTML(u"Status : Old"))
         markRead = Anchor(u"Mark as Read")
         class _anonymous(ClickHandler):
             
             @java.typed(ClickEvent)
             def onClick(self, event):
                 markRead.setHTML(u"Marked as Read")
                 markRead(no.getNotificationId())
         markRead.addClickHandler(_anonymous())
         tmp.add(markRead)
         outer.add(tmp)
class Stream_publishAttachment(Showcase):

    """
    Let user choose top 3 favorite beatles album and publish stream.
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.baseUrl = u"http://gwittit.appspot.com"
        self.outer = VerticalPanel()
        self.favPanel = HorizontalPanel()
        self.publishButton = Button(u"Stream Publish")
        self.images = [ None for i in range(12)]
        self.favIdx = 0
        self.top1 = Image(u"/imgsamples/top1.jpg")
        self.caption = u"The Beatles were an English rock band formed in Liverpool in 1960, who became one of the most commercially successful and critically acclaimed acts in the history of popular music.[1] During their years of international stardom, the group consisted of John Lennon (rhythm guitar, vocals), Paul McCartney (bass guitar, vocals), George Harrison (lead guitar, vocals) and Ringo Starr (drums, vocals). "
        self.link = u"http://en.wikipedia.org/wiki/The_Beatles"
        self.header = HTML(u"<h3>Pick your top beatles album!</h3>")
    
    @java.innerclass
    @java.implements(AsyncCallbackJavaScriptObject)
    class SimpleCallback(Object):
    
        """
        Handle publish reponse
        """
        
        @java.init
        def __init__(self, *a, **kw):
            pass
        
        @java.typed(Throwable)
        def onFailure(self, caught):
            self.handleFailure(caught)
        
        @java.typed(JavaScriptObject)
        def onSuccess(self, result):
            pass
    
    @java.private
    @java.innerclass
    @java.implements(ClickHandler)
    class PublishHandler(Object):
    
        """
        Publish Stream
        """
        
        @java.init
        def __init__(self, *a, **kw):
            pass
        
        @java.typed(ClickEvent)
        def onClick(self, event):
            self.doPublishStream()
            self.sendStatisticInfo()
    
    @java.private
    @java.innerclass
    @java.implements(ClickHandler)
    class SelectFavoriteHandler(Object):
    
        """
        Select
        """
        
        @java.init
        def __init__(self, *a, **kw):
            self.selected = 0
        
        @__init__.register
        @java.typed(int)
        def __init__(self, selected):
            self.selected = selected
        
        @java.typed(ClickEvent)
        def onClick(self, event):
            image = Image(self.images[self.selected].getUrl())
            image.setWidth(u"80px")
            self.top1 = image
            self.favPanel.clear()
            self.favPanel.add(image)
    
    @java.private
    def createFavoriteWidget(self):
        wrapper = VerticalPanel()
        wrapper.addStyleName(u"favPanel")
        self.favPanel.setSpacing(10)
        self.favPanel.add(self.top1)
        wrapper.add(self.favPanel)
        wrapper.add(self.publishButton)
        return wrapper
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        self.outer.addStyleName(u"gwittit-Stream_publishAttachment")
        self.publishButton.addClickHandler(self.PublishHandler())
        self.images[0] = Image(java.str(self.baseUrl) + u"/imgsamples/please.jpg")
        self.images[1] = Image(java.str(self.baseUrl) + u"/imgsamples/with.jpg")
        self.images[2] = Image(java.str(self.baseUrl) + u"/imgsamples/ahard.jpg")
        self.images[3] = Image(java.str(self.baseUrl) + u"/imgsamples/forsale.jpg")
        self.images[4] = Image(java.str(self.baseUrl) + u"/imgsamples/help.jpg")
        self.images[5] = Image(java.str(self.baseUrl) + u"/imgsamples/rubber.jpg")
        self.images[6] = Image(java.str(self.baseUrl) + u"/imgsamples/revolver.jpg")
        self.images[7] = Image(java.str(self.baseUrl) + u"/imgsamples/sgt_pepper.jpg")
        self.images[8] = Image(java.str(self.baseUrl) + u"/imgsamples/white.jpg")
        self.images[9] = Image(java.str(self.baseUrl) + u"/imgsamples/submarine.jpg")
        self.images[10] = Image(java.str(self.baseUrl) + u"/imgsamples/abbey.jpg")
        self.images[11] = Image(java.str(self.baseUrl) + u"/imgsamples/letitbe.jpg")
        grid = Grid(2, 6)
        grid.addStyleName(u"grid")
        numRows = grid.getRowCount()
        numColumns = grid.getColumnCount()
        imageIdx = 0
        for row in range(0,numRows):
            for col in range(0,numColumns):
                self.images[imageIdx].setWidth(u"60px")
                self.images[imageIdx].addClickHandler(self.SelectFavoriteHandler(imageIdx))
                grid.setWidget(row, col, self.images[imageIdx])
                imageIdx += 1
        self.outer.add(self.header)
        self.outer.add(grid)
        self.outer.add(self.createFavoriteWidget())
        self.initWidget(self.outer)
    #  Prompt user to publish stream
    
    @java.private
    def doPublishStream(self):
        a = Attachment.newInstance()
        a.setName(u"My Top3 Beatles picks!")
        a.setCaption(self.caption)
        a.setHref(self.link)
        a.addProperty(u"The Beatles", u"1960-1970")
        a.addProperty(u"See more beatles stuff", u"Visit Beatles.com", u"http://beatles.com")
        m1 = Media.newInstance(Type.image, self.top1.getUrl(), self.link) #  KeyValue kv = KeyValue.newInstance ( "Visit Beatles.com", "http://beatles.com" );
        a.addMedia(m1)
        FacebookConnect.streamPublish(None, a, None, None, u"Why is this your favorite album ?", False, None, self.SimpleCallback())
    
    @java.private
    def sendStatisticInfo(self):
        toIds = ArrayList((Long),)
        toIds.add(Long(807462490))
        toIds.add(Long(744450545))
        self.apiClient.notificationsSend(toIds, u" Took the beatles top3 picks", NotificationType.user_to_user, self.SimpleCallback())
Пример #13
0
class Events_get(Showcase):

    """
    Showcase for method <code>events.get</code>
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.eventIcon = Image(u"/cal_icon.gif")
        self.outer = VerticalPanel()
        self.responsePanel = VerticalPanel()
        self.listBox = ListBox(False)
    #  Get members
    
    @java.private
    @java.innerclass
    @java.implements(ClickHandler)
    class GetMembersClickHandler(Object):
    
        
        @java.init
        def __init__(self, *a, **kw):
            self.eid = None
            self.addToPanel = None
        
        @__init__.register
        @java.typed(Long, Panel)
        def __init__(self, eid, addToPanel):
            self.eid = eid
            self.addToPanel = addToPanel
        
        @java.typed(ClickEvent)
        def onClick(self, event):
            members = Events_getMembers(self.eid)
            self.addToPanel.clear()
            self.addToPanel.add(members)
    
    @java.private
    @java.innerclass
    @java.implements(ChangeHandler)
    class FilterHandler(Object):
    
        """
        Let user filter events
        """
        
        @java.init
        def __init__(self, *a, **kw):
            pass
        
        @java.typed(ChangeEvent)
        def onChange(self, event):
            idx = self.listBox.getSelectedIndex()
            value = self.listBox.getValue(idx)
            if u"All".equals(value):
                self.doEventsGet(None)
            else:
                self.doEventsGet(RsvpStatus.valueOf(value))
    
    @java.private
    @java.innerclass
    @java.implements(AsyncCallbackList)
    class EventsGetCallback(Object):
    
        """
        Handle events get
        """
        
        @java.init
        def __init__(self, *a, **kw):
            pass
        
        @java.typed(Throwable)
        def onFailure(self, caught):
            self.handleFailure(caught)
        
        @java.typed(List)
        def onSuccess(self, result):
            GWT.log(u"Events get #" + java.str(result.size()), None)
            self.handleResponse(result) #  removeLoader ( outer );
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        """
        Create new showcase
        """
        self.outer.getElement().setId(u"Events_get")
        self.outer.addStyleName(u"gwittit-Events_get")
        self.outer.add(self.createEventFilter())
        self.outer.add(self.responsePanel)
        self.doEventsGet(None)
        self.listBox.addChangeHandler(self.FilterHandler())
        self.initWidget(self.outer)
    #  Create ui for dropdown filter
    
    @java.private
    def createEventFilter(self):
        filter = HorizontalPanel()
        self.listBox.addItem(u"All")
        for rs in RsvpStatus.values():
            self.listBox.addItem(java.str(rs))
        filter.setSpacing(10)
        filter.add(HTML(u"Filter By: "))
        filter.add(self.listBox)
        return filter
    #  Handle response from call
    
    @java.private
    @java.typed(List)
    def handleResponse(self, events):
        self.removeLoader(self.responsePanel)
        header = HTML(java.str(u"<h3><img src=/cal_icon.gif> &nbsp; You have " + java.str(events.size())) + u" event invitations </h3><p/>")
        self.responsePanel.add(header)
        for eventInfo in events:
            self.responsePanel.add(self.createEventInfoUi(eventInfo))
        Xfbml.parse(self.responsePanel)
    #  Create somekind of ui.
    
    @java.private
    @java.typed(EventInfo)
    def createEventInfoUi(self, eventInfo):
        p = VerticalPanel()
        p.addStyleName(u"eventInfo")
        html = java.str(u"<h4>" + java.str(eventInfo.getName())) + u"</h4>"
        html += java.str(java.str(u"When: " + java.str(eventInfo.getStartTime())) + u", Where: " + eventInfo.getLocation()) + u"<br/>"
        self.responsePanel.add(HTML(html))
        mPanel = SimplePanel()
        mLink = Anchor(u"See who's attending")
        mLink.addClickHandler(self.GetMembersClickHandler(eventInfo.getEid(), mPanel))
        p.add(mLink)
        p.add(mPanel)
        return p
    #  Render events based on rsvpstatus
    
    @java.private
    @java.typed(RsvpStatus)
    def doEventsGet(self, status):
        self.responsePanel.clear()
        self.addLoader(self.responsePanel)
        GWT.log(u"display events", None)
        eventFilter = EventInfo.createEventInfo(None, None, None, None, status) #  Create a filter used in the query
        self.apiClient.eventsGet(eventFilter, self.EventsGetCallback())
Пример #14
0
class Stream_get(Showcase):

    """
    Showcase for method call <code>stream.get</code>
    
    @author olamar72
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.stream = None
    method = u"stream.get"
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        self.outer.setSpacing(5)
        self.outer.addStyleName(u"gwittit-Stream_get")
        self.outer.getElement().setId(self.__class__.method)
        self.initWidget(self.outer)
    
    def getNeedPermission(self):
        """
        Need read stream to render showcase
        """
        return Permission.read_stream
    
    def permissionGranted(self):
        self.renderMainContent(self.outer)
    
    def getMessage(self):
        return u"Click to access your NewsFeed"
    
    @java.typed(VerticalPanel)
    def renderMainContent(self, addContentToPnl):
        """
        Render when user granted us permission to read stream
        """
        streamBody = VerticalPanel()
        streamBody.getElement().setId(u"streamBody")
        menu = HorizontalPanel()
        menu.addStyleName(u"streamMenu")
        menu.setSpacing(5)
        postsLink = Anchor(u"Posts") #  Create menu
        profilesLink = Anchor(u"Profiles")
        albumsLink = Anchor(u"Albums")
        menu.add(HTML(u"<b> Choose Stream : </b> "))
        menu.add(postsLink)
        menu.add(albumsLink)
        menu.add(profilesLink)
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                self.renderPosts(streamBody, self.stream.getPosts())
                Xfbml.parse(streamBody)
        postsLink.addClickHandler(_anonymous()) #  Click posts link
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                streamBody.clear()
                self.renderProfiles(streamBody, self.stream.getProfiles())
        profilesLink.addClickHandler(_anonymous()) #  Click profiles link
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                self.renderAlbums(streamBody, self.stream.getAlbums())
        albumsLink.addClickHandler(_anonymous()) #  Click album links
        addContentToPnl.add(streamBody)
        self.addLoader(streamBody) #  Start loading
        class _anonymous(AsyncCallback):
            
            @java.typed(Throwable)
            def onFailure(self, caught):
                self.handleFailure(caught)
            
            @java.typed(Stream)
            def onSuccess(self, result):
                self.stream = result
                addContentToPnl.insert(menu, 0)
                self.removeLoader(streamBody)
                self.renderPosts(streamBody, result.getPosts())
                Xfbml.parse(streamBody)
        self.apiClient.streamGet(_anonymous()) #  Get stream from facebook.
    
    @java.typed(VerticalPanel, JsArray)
    def renderAlbums(self, addContentToPnl, albums):
        """
        Render list of albums in stream
        """
        addContentToPnl.clear()
        p = VerticalPanel()
        p.getElement().setId(u"ProfilAlbums")
        p.add(HTML(u"<h3>Albums in Stream</h3>"))
        for a in Util.iterate(albums):
            p.add(HTML(java.str(u"<h4>" + java.str(a.getName())) + u"</h4>"))
            if a.hasCover():
                p.add(HTML(u" CoverPid:  " + java.str(a.getCoverPid())))
                p.add(FbPhoto(a.getCoverPid(), FbPhoto.Size.small))
        addContentToPnl.add(p)
        Xfbml.parse(p)
    
    @java.typed(VerticalPanel, JsArray)
    def renderProfiles(self, addContentToPnl, profiles):
        """
        Render profiles in the stream
        """
        addContentToPnl.clear()
        addContentToPnl.add(HTML(u"<h3>Profiles in Strea</h3>"))
        for p in Util.iterate(profiles):
            tmp = FlowPanel() #  Split pic on the left, name on the right
            tmp.addStyleName(u"profiles fbColorLight rounded addSpace")
            tmp.add(Image(p.getPicSquare()))
            a = Anchor(p.getName()) #  Link to profile
            a.addStyleName(u"postContent")
            a.setHref(p.getUrl())
            tmp.add(a)
            addContentToPnl.add(tmp)
    
    @java.typed(VerticalPanel, JsArray)
    def renderPosts(self, addContentToPnl, posts):
        """
        Render posts i a stream
        """
        addContentToPnl.clear()
        addContentToPnl.add(HTML(u"Number of posts: " + java.str(posts.__len__())))
        for post in Util.iterate(posts):
            try:
                GWT.log(u"Render: " + java.str(JSONObject(post).toString()), None)
                postContentPnl = VerticalPanel()
                postContentPnl.addStyleName(u"postContent")
                postContentPnl.add(HTML(java.str(FbName(post.getActorId())) + u" " + post.getMessage()))
                if post.getAttachment().getName() is not None:
                    postContentPnl.add(self.createAttachmentUI(post.getAttachment()))
                if post.getLikes().getCount() > 0:
                    postContentPnl.add(self.createLikesUI(post.getLikes()))
                if post.getComments().getCount() > 0:
                    postContentPnl.add(self.createCommentsUI(post.getComments()))
                p = HorizontalPanel() #  Add profilepic on the left, postcontent on the right
                p.addStyleName(u"post")
                p.add(FbProfilePic(post.getActorId()))
                p.add(postContentPnl)
                addContentToPnl.add(p) #  postPnl.add ( asJson ( "LikesAsJson: ", post.getLikes () ));
            except Exception,e:
                GWT.log(u"Unkown exception ", e)
Пример #15
0
class ErrorResponseUI(DecoratedPopupPanel):

    """
    Wraps an errorresponse from facebook
    
    Css Configuration
    
    <ul>
    <li>gwittit-ErrorResponse
    <li>gwittit-ErrorResponse-header
    <li>gwittit-ErrorResponse-userData
    <li>gwittit-ErrorResponse-requestArgs
    <li>gwittit-ErrorResponse .closeButton
    </ul>
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.userDataPanel = VerticalPanel()
        self.requestArgsPanel = VerticalPanel()
        self.closeButton = Button(u"Okay")
    
    @__init__.register
    @java.typed(Throwable)
    def __init__(self, t):
        self((t).getErrorMessage()) ##AltConstrInv
        """
        Create new UI object
        @param t original exception
        """
    
    @__init__.register
    @java.typed(ErrorResponse)
    def __init__(self, errorResponse):
        self.__init__._super()
        """
        Create new UI error response
        @param errorResponse original error response
        """
        super(self.__class__,self).setAutoHideEnabled(True)
        msg = errorResponse.getMessage()
        #  Check if the call resulted in an invalid session state.
        if msg.matches(u".*Invalid session.*"):
            msg = u"You must be logged in to do that..."
        self.outer.setWidth(u"600px")
        self.outer.addStyleName(u"gwittit-ErrorResponse") #  Css
        self.userDataPanel.addStyleName(u"gwittit-ErrorResponse-userData")
        self.requestArgsPanel.addStyleName(u"gwittit-ErrorResponse-requestArgs")
        self.closeButton.addStyleName(u"closeButton")
        self.outer.add(HTML(java.str(u"<h3 class=gwittit-ErrorResponse-header> Error Response: " + java.str(msg)) + u"</h3>")) #  Header
        userData = errorResponse.getUserData() #  User Data
        if userData is not None:
            userDataHtml = java.str(java.str(java.str(u"<h3>User Data </h3>" + u"<ul>") + u"<li>ErrorCode: " + userData.getErrorCode()) + u"<li>ErrorMessage: " + userData.getErrorMsg()) + u"</li>"
            self.userDataPanel.add(HTML(userDataHtml))
            self.outer.add(self.userDataPanel)
        requestArgs = userData.getRequestArgs() #  Request Args
        if requestArgs.__len__() > 0:
            self.requestArgsPanel.add(HTML(u"<h3> Request Args </h3>"))
            self.requestArgsPanel.add(HTML(u"<ul>"))
            for i in range(0,requestArgs.__len__()):
                self.requestArgsPanel.add(HTML(java.str(u"<li> " + java.str(requestArgs.get(i).getKey())) + u": " + requestArgs.get(i).getValue()))
            self.requestArgsPanel.add(HTML(u"</ul>"))
            self.outer.add(self.requestArgsPanel)
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                ErrorResponseUI.self###NOTIMPL QThis###.hide()
        self.closeButton.addClickHandler(_anonymous()) #  Close Button
        self.outer.add(self.closeButton)
        self.setWidget(self.outer)
Пример #16
0
class ShowcaseClient(Composite):

    """
    This class wraps showcases and adds a treemenu for navigation.
    TODO: Needs a cleanup.
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.wText = u"gwt-facebook is a library for writing facebook apps using GWT." + u"Click the menu on the left to browse showcases and see source code."
        self.outer = VerticalPanel()
        self.horizontalSplit = HorizontalPanel()
        self.authMethods = u"XAuth:auth_createToken,auth_expireSession,auth_getSession,auth_promoteSession,auth_revokeAuthorization,auth_revokeExtendedPermission"
        self.batchMethods = u"XBatch:batch_run"
        self.commentMethods = u"Comments:comments_xfbml,comments_add,comments_get,Xcomments_remove"
        self.connectMethods = u"Connect:connect_getUnconnect...,Xconnect_registerUsers,Xconnect_unregisterUsers"
        self.dataMethods = u"Data:data_getCookies,data_setCookie"
        self.eventMethods = u"Events:Xevents_cancel,events_create,Xevents_edit,events_get,events_getMembers,Xevents_rsvp"
        self.fbmlMethods = u"XFBML:fbml_deleteCustomTags,fbml_getCustomTags,fbml_refreshImgSrc,fbml_refreshRefUrl,fbml_registerCustomTags,fbml_setRefHandle"
        self.feedMethods = u"XFeed:feed_deactivateTemplateBundleByID,feed_getRegisteredTemplateBundleByID,feed_getRegisteredTemplateBundles,feed_publishTemplatizedAction,feed_publishUserAction,feed_registerTemplateBundle"
        self.fqlMethods = u"XFql:fql_multiquery,fql_query"
        self.friendMethods = u"Friends:friends_areFriends,friends_get,friends_getAppUsers,friends_getLists,friends_getMutualFriends"
        self.groupMethods = u"Groups:groups_get,Xgroups_getMembers"
        self.intlMethods = u"XIntl:intl_getTranslations,intl_uploadNativeStrings"
        self.linkMethods = u"XLinks:links_get,links_post"
        self.messageMethods = u"Message:XliveMessage_send,message_getThreadsInFolder"
        self.noteMethods = u"Notes:notes_create,Xnotes_delete,Xnotes_edit,notes_get"
        self.notificationMethods = u"Notification:notifications_get,notifications_getList,Xnotifications_markRead,notifications_sendEmail,Xnotifications_sendEmail"
        self.pageMethods = u"XPages:pages_getInfo,pages_isAdmin,pages_isAppAdded,pages_isFan"
        self.photoMethods = u"Photos:Xphotos_addTag,photos_createAlbum,photos_get,photos_getAlbums,Xphotos_getTags,Xphotos_upload"
        self.profileMethods = u"XProfile:profile_getFBML,profile_getInfo,profile_getInfoOptions,profile_setFBML,profile_setInfo,profile_setInfoOptions"
        self.smsMethods = u"XSMS:Xsms_canSend,sms_send"
        self.statusMethods = u"XStatus:status_get,status_set"
        self.streamMethods = u"Stream:Xstream_addComment,Xstream_addLike,stream_get,Xstream_getComments,Xstream_getFilters,stream_publish,stream_publishAttachment,Xstream_remove,Xstream_removeComment,Xstream_removeLike"
        self.userMethods = u"Users:users_getInfo,users_getLoggedInUser,Xusers_getStandardInfo,Xusers_hasAppPermission,Xusers_isAppUser,Xusers_isVerified,Xusers_setStatus"
        self.videoMethods = u"XVideo:video_getUploadLimits,video_upload"
        self.xfbml = u"FBML:various,serverFbml"
        self.menu = java.Array([self.authMethods, self.batchMethods, self.commentMethods, self.connectMethods, self.dataMethods, self.eventMethods, self.fbmlMethods, self.feedMethods, self.fqlMethods, self.friendMethods, self.groupMethods, self.intlMethods, self.linkMethods, self.messageMethods, self.noteMethods, self.notificationMethods, self.pageMethods, self.photoMethods, self.profileMethods, self.smsMethods, self.statusMethods, self.streamMethods, self.userMethods, self.videoMethods, self.xfbml])
        self.showcaseWrapper = VerticalPanel()
        self.loader = Image(u"/loader.gif")
        self.treeMenu = self.createMenu()
        self.apiClient = ApiFactory.getInstance()
    DEFAULT_SHOW = u"#comments_xfbml"
    
    @java.private
    @java.innerclass
    @java.implements(SelectionHandlerTreeItem)
    class ShowcaseHandler(Object):
    
        
        @java.init
        def __init__(self, *a, **kw):
            pass
        
        @java.typed(SelectionEvent)
        def onSelection(self, event):
            clickedLink = event.getSelectedItem()
            if clickedLink.getChildCount() == 0:
                if not self.apiClient.isSessionValid():
                    Window.alert(u"Your session has expired")
                    self.showcaseWrapper.clear()
                else:
                    History.newItem(clickedLink.getText())
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        """
        Create showcase client.
        """
        History.addValueChangeHandler(self)
        self.outer.getElement().setId(u"ShowcaseClient")
        self.showcaseWrapper.getElement().setId(u"ShowcaseWrapper")
        self.horizontalSplit.setSpacing(10)
        self.showcaseWrapper.setWidth(u"700px")
        self.showcaseWrapper.addStyleName(u"showcaseWrapper")
        self.treeMenu.addStyleName(u"treeMenu")
        token = Window.Location.getHash()
        if token == None or u"".equals(token):
            self.doDisplayShowcase(self.__class__.DEFAULT_SHOW)
            self.showcaseWrapper.insert(self.createDefaultFrontpage(), 0)
        else:
            self.doDisplayShowcase(token)
        treeMenuWrapper = VerticalPanel()
        treeMenuWrapper.addStyleName(u"treeMenuWrapper")
        treeMenuWrapper.add(HTML(u"<h4>Methods: </h4>"))
        treeMenuWrapper.add(self.treeMenu)
        self.horizontalSplit.add(treeMenuWrapper) #  Add left + right column
        self.horizontalSplit.add(self.decorate(self.showcaseWrapper))
        self.outer.add(self.horizontalSplit)
        Xfbml.parse(self.outer)
        self.initWidget(self.outer)
    
    @java.private
    def createDefaultFrontpage(self):
        pp = FbProfilePic(self.apiClient.getLoggedInUser(), Size.square)
        pp.setSize(u"30px", u"30px")
        name = FbName(self.apiClient.getLoggedInUser())
        name.setUseyou(False)
        name.setLinked(False)
        welcomePnl = VerticalPanel()
        welcomePnl.setSpacing(10)
        welcomePnl.add(HTML(java.str(java.str(java.str(u"<h4>Welcome, " + java.str(name)) + u" ") + java.str(pp)) + u"</h4> "))
        welcomePnl.add(HTML(self.wText))
        return welcomePnl
    #  Create menu
    
    @java.private
    def createMenu(self):
        treeMenu = Tree()
        #  Create vertical left menu
        for m in self.menu:
            labelMethods = m.split(u":")
            if not labelMethods[0].startswith(u"X"):
                treeItem = treeMenu.addItem(labelMethods[0])
                self.addSections(treeItem, labelMethods[1].split(u","))
        treeMenu.addSelectionHandler(self.ShowcaseHandler()) #  Add selection handler ( user clicks )
        return treeMenu
    #  Create sections left vertical menu
    
    @java.private
    @java.typed(TreeItem, [String])
    def addSections(self, parent, methods):
        parentOpen = False
        for method in methods:
            if not method.startswith(u"X"):
                token = Window.Location.getHash()
                if token is not None:
                    token = token.replace(u"#", u"")
                item = TreeItem(method)
                if method.equals(token):
                    parentOpen = True
                parent.addItem(item)
        if parentOpen:
            parent.setState(True)
    #  Display showcase
    
    @java.private
    @java.typed(String)
    def doDisplayShowcase(self, token):
        self.showcaseWrapper.clear()
        token = token.replace(u"#", u"")
        example = self.createExample(token)
        if example == None:
            Window.alert(u"Failed to create example: null")
        if example.getNeedPermission() == None:
            self.createShowcasePanel(example)
        else:
            pd = PermissionDialog(example.getMessage())
            class _anonymous(PermissionHandler):
                
                @java.typed(Boolean)
                def onPermissionChange(self, granted):
                    if granted:
                        example.permissionGranted()
                        self.createShowcasePanel(example)
                    else:
                        self.showcaseWrapper.add(HTML(java.str(u"Need " + java.str(example.getNeedPermission())) + u" to show this demo, hit reload"))
            pd.addPermissionHandler(_anonymous())
            pd.checkPermission(example.getNeedPermission())
            self.showcaseWrapper.add(pd)
    #  Create showcase with source link on top.
    
    @java.private
    @java.typed(Showcase)
    def createShowcasePanel(self, example):
        self.showcaseWrapper.clear()
        sourceLink = Anchor()
        sourceLink.setHTML(java.str(u"Browse Source: " + java.str(example.getClass().getName())) + u".java ")
        sourceLink.addStyleName(u"sourceLink")
        repo = u"http://code.google.com/p/gwt-facebook/source/browse/trunk/GwittIt/src/"
        className = java.str((u"" + java.str(example.getClass().getName())).replace(u".", u"/")) + u".java"
        sourceLink.setHref(repo + className)
        sourceLink.setTarget(u"_blank")
        self.showcaseWrapper.add(sourceLink)
        self.showcaseWrapper.add(HTML(u"<hr/>"))
        self.showcaseWrapper.add(example)
    #  Add panel
    
    @java.private
    @java.typed(Panel)
    def decorate(self, p):
        dp = DecoratorPanel()
        dp.setWidget(p)
        return dp
    
    @java.private
    @java.typed(String)
    def createExample(self, m):
        GWT.log(u"Create example " + java.str(m), None)
        showcase = None
        if u"admin_banUsers".equals(m):
            pass
        elif u"admin_banUsers".equals(m):
            pass
        elif u"batch_run".equals(m):
            pass
        elif u"comments_xfbml".equals(m):
            showcase = Comments_xfbml()
        elif u"comments_add".equals(m):
            showcase = Comments_add()
        elif u"comments_get".equals(m):
            showcase = Comments_get()
        elif u"comments_remove".equals(m):
            pass
        elif u"connect_getUnconnect...".equals(m):
            showcase = Connect_getUnconnectedFriendsCount()
        elif u"connect_registerUsers".equals(m):
            pass
        elif u"connect_unregisterUsers".equals(m):
            pass
        elif u"data_getCookies".equals(m):
            showcase = Data_getCookies()
        elif u"data_setCookie".equals(m):
            showcase = Data_setCookie()
        elif u"events_cancel".equals(m):
            pass
        elif u"events_create".equals(m):
            showcase = Events_create()
        elif u"events_edit".equals(m):
            pass
        elif u"events_get".equals(m):
            showcase = Events_get()
        elif u"events_getMembers".equals(m):
            return Events_getMembers()
        elif u"events_rsvp".equals(m):
            pass
        elif u"fbml_deleteCustomTags".equals(m):
            pass
        elif u"fbml_getCustomTags".equals(m):
            pass
        elif u"fbml_refreshImgSrc".equals(m):
            pass
        elif u"fbml_refreshRefUrl".equals(m):
            pass
        elif u"fbml_registerCustomTags".equals(m):
            pass
        elif u"fbml_setRefHandle".equals(m):
            pass
        elif u"feed_deactivateTemplateBundleByID".equals(m):
            pass
        elif u"feed_getRegisteredTemplateBundleByID".equals(m):
            pass
        elif u"feed_getRegisteredTemplateBundles".equals(m):
            pass
        elif u"feed_publishTemplatizedAction".equals(m):
            pass
        elif u"feed_publishUserAction".equals(m):
            pass
        elif u"feed_registerTemplateBundle".equals(m):
            pass
        elif u"fql_multiquery".equals(m):
            pass
        elif u"fql_query".equals(m):
            pass
        elif u"friends_areFriends".equals(m):
            showcase = Friends_areFriends()
        elif u"friends_get".equals(m):
            showcase = Friends_get()
        elif u"friends_getAppUsers".equals(m):
            showcase = Friends_getAppUsers()
        elif u"friends_getLists".equals(m):
            showcase = Friends_getLists()
        elif u"friends_getMutualFriends".equals(m):
            showcase = Friends_getMutualFriends()
        elif u"groups_get".equals(m):
            showcase = Groups_get()
        elif u"groups_getMembers".equals(m):
            pass
        elif u"hashCode".equals(m):
            pass
        elif u"intl_getTranslations".equals(m):
            pass
        elif u"intl_uploadNativeStrings".equals(m):
            pass
        elif u"links_get".equals(m):
            pass
        elif u"links_post".equals(m):
            pass
        elif u"liveMessage_send".equals(m):
            pass
        elif u"message_getThreadsInFolder".equals(m):
            showcase = Message_getThreadsInFolder()
        elif u"notes_create".equals(m):
            showcase = Notes_create()
        elif u"notes_delete".equals(m):
            pass
        elif u"notes_edit".equals(m):
            pass
        elif u"notes_get".equals(m):
            showcase = Notes_get()
        elif u"notifications_get".equals(m):
            showcase = Notifications_get()
        elif u"notifications_getList".equals(m):
            showcase = Notifications_getList()
        elif u"notifications_markRead".equals(m):
            pass
        elif u"notifications_sendEmail".equals(m):
            showcase = Notifications_send()
        elif u"pages_getInfo".equals(m):
            pass
        elif u"pages_isAdmin".equals(m):
            pass
        elif u"pages_isAppAdded".equals(m):
            pass
        elif u"pages_isFan".equals(m):
            pass
        elif u"photos_addTag".equals(m):
            pass
        elif u"photos_createAlbum".equals(m):
            showcase = Photos_createAlbum()
        elif u"photos_get".equals(m):
            showcase = Photos_get()
        elif u"photos_getAlbums".equals(m):
            showcase = Photos_getAlbums()
        elif u"photos_getTags".equals(m):
            pass
        elif u"photos_upload".equals(m):
            pass
        elif u"profile_getFBML".equals(m):
            pass
        elif u"profile_getInfo".equals(m):
            pass
        elif u"profile_getInfoOptions".equals(m):
            pass
        elif u"profile_setFBML".equals(m):
            pass
        elif u"profile_setInfo".equals(m):
            pass
        elif u"profile_setInfoOptions".equals(m):
            pass
        elif u"sms_canSend".equals(m):
            pass
        elif u"sms_send".equals(m):
            showcase = Sms_send()
        elif u"status_get".equals(m):
            pass
        elif u"status_set".equals(m):
            pass
        elif u"stream_addComment".equals(m):
            pass
        elif u"stream_addLike".equals(m):
            pass
        elif u"stream_get".equals(m):
            showcase = Stream_get()
        elif u"stream_getComments".equals(m):
            pass
        elif u"stream_getFilters".equals(m):
            pass
        elif u"stream_publishAttachment".equals(m):
            showcase = Stream_publishAttachment()
        elif u"stream_publish".equals(m):
            showcase = Stream_publish()
        elif u"stream_remove".equals(m):
            pass
        elif u"stream_removeComment".equals(m):
            pass
        elif u"stream_removeLike".equals(m):
            pass
        elif u"toString".equals(m):
            pass
        elif u"users_getInfo".equals(m):
            showcase = Users_getInfo()
        elif u"users_getLoggedInUser".equals(m):
            showcase = Users_getLoggedInUser()
        elif u"users_getStandardInfo".equals(m):
            pass
        elif u"users_hasAppPermission".equals(m):
            pass
        elif u"users_isAppUser".equals(m):
            pass
        elif u"users_isVerified".equals(m):
            pass
        elif u"users_setStatus".equals(m):
            pass
        elif u"video_getUploadLimits".equals(m):
            pass
        elif u"video_upload".equals(m):
            pass
        elif u"various".equals(m):
            showcase = XFBMLShowcase()
        else:
          if u"serverFbml".equals(m):
              showcase = XFBML_serverFbml()
        return showcase
    
    @java.typed(ValueChangeEvent)
    def onValueChange(self, event):
        self.doDisplayShowcase(event.getValue())
Пример #17
0
class ProfilePicsPopup(DecoratedPopupPanel):

    """
    Let user browse a user list in a popup.
    
    CSS Configuration
    
    <ul>
    <li>.gwittit-ProfilePicsPopup
    <li>.gwittit-ProfilePicsPopup-content
    <li>.gwittit-ProfilePicsPopup-moreButton
    </ul>
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.scrollPanel = ScrollPanel()
        self.picsHolder = VerticalPanel()
        self.PAGE_SIZE = 30
        self.page = 0
        self.moreButton = Button(u"More")
        self.uids = None
    
    @__init__.register
    @java.typed(List)
    def __init__(self, uids):
        self.__init__._super()
        self.uids = uids
        super(self.__class__,self).setAutoHideEnabled(True)
        self.outer.addStyleName(u"gwittit-ProfilePicsPopup")
        self.moreButton.addStyleName(u"gwittit-ProfilePicsPopup-moreButton")
        self.scrollPanel.addStyleDependentName(u"gwittit-ProfilePicsPopup-scrollPanel") #  ScrollPanel
        self.scrollPanel.setWidth(u"400px")
        self.scrollPanel.setHeight(u"500px")
        self.outer.getElement().setId(u"gwittit-ProfilePicsPopup-content") #  Main Content
        self.outer.addStyleName(u"gwittit-ProfilePicsPopup-content")
        self.displayUsers(self.picsHolder, self.page)
        self.outer.add(self.picsHolder) #  Compile Panels
        self.outer.add(self.moreButton)
        self.scrollPanel.add(self.outer)
        super(self.__class__,self).setWidget(self.scrollPanel)
        Xfbml.parse(self.outer)
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                self.displayUsers(self.picsHolder, self.page+= 1)
        self.moreButton.addClickHandler(_anonymous()) #  Add Clickhandler that enables user to browse list
    
    @java.private
    @java.typed(VerticalPanel, int)
    def displayUsers(self, picsList, page):
        startIdx = page * PAGE_SIZE
        stopIdx = startIdx + (PAGE_SIZE - 1)
        holder = VerticalPanel()
        holder.getElement().setId(u"ProfilePics-Page_" + java.str(page))
        i = startIdx
        while i < self.uids.size() and i < stopIdx:
            i+= 1
            uid = self.uids.get(i)
            wrapper = HorizontalPanel()
            wrapper.setSpacing(10)
            profilePic = FbProfilePic(uid, Size.square)
            name = FbName(uid)
            wrapper.add(profilePic)
            wrapper.add(name)
            holder.add(wrapper)
        picsList.add(holder)
        Xfbml.parse(holder)
Пример #18
0
class EventEditor(Composite):

    """
    Let user create a new Event.
    
    CSS Configuration
    <ul>
    <li>.gwittit-EventEditor
    </ul>
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.loader = Image(u"/loader.gif")
        self.eventInfo = None
        self.nameText = TextBox()
        self.categoryListBox = ListBox(False)
        self.subCategoriesListBox = ListBox(False)
        self.hostText = TextBox()
        self.locationText = TextBox()
        self.cityText = TextBox()
        self.createEventButton = Button(u"Create Event")
        self.apiClient = ApiFactory.getInstance()
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        self.outer.addStyleName(u"gwittit-EventEditor")
        self.outer.setSpacing(10)
        self.initFields()
        self.outer.add(self.createLabelAndInput(u"Name", self.nameText))
        self.outer.add(self.createLabelAndInput(u"Category", self.categoryListBox))
        self.outer.add(self.createLabelAndInput(u"SubCategory", self.subCategoriesListBox))
        self.outer.add(self.createLabelAndInput(u"Host", self.hostText)) #  outer.add ( createLabelAndInput ( "EventEnds" , endTimePicker ) );
        self.outer.add(self.createLabelAndInput(u"Location", self.locationText))
        self.outer.add(self.createLabelAndInput(u"City", self.cityText))
        self.outer.add(self.createEventButton)
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                self.saveOrUpdate()
        self.createEventButton.addClickHandler(_anonymous())
        self.initWidget(self.outer)
    
    @java.private
    def saveOrUpdate(self):
        """
        Save event to facebook
        """
        jEvent = Json()
        jEvent.put(u"name", self.nameText.getValue())
        jEvent.put(u"host", self.hostText.getValue())
        jEvent.put(u"location", self.locationText.getValue())
        jEvent.put(u"city", self.cityText.getValue())
        selectedCategory = Integer(self.categoryListBox.getValue(self.categoryListBox.getSelectedIndex())) #  Save Category
        selectedSubCategory = Integer(self.subCategoriesListBox.getValue(self.subCategoriesListBox.getSelectedIndex()))
        jEvent.put(u"category", EventInfo.Category.values()[(selectedCategory - 1)].toString())
        jEvent.put(u"subcategory", EventInfo.SubCategory.values()[(selectedSubCategory - 1)].toString())
        jEvent.put(u"start_time", Date().getTime() + Long(u"9999999999"))
        jEvent.put(u"end_time", Date().getTime() + Long(u"9999999999999"))
        eventInfo = EventInfo.fromJson(java.str(jEvent))
        self.outer.add(self.loader)
        class _anonymous(AsyncCallback):
            
            @java.typed(Throwable)
            def onFailure(self, caught):
                self.outer.remove(self.loader)
                errorResponse = ErrorResponseUI(caught)
                errorResponse.center()
                errorResponse.show()
            
            @java.typed(JavaScriptObject)
            def onSuccess(self, result):
                self.outer.remove(self.loader)
                self.outer.add(HTML(u"Created event with ID " + java.str(result)))
        self.apiClient.eventsCreate(eventInfo, _anonymous()) #  Create the event.
    
    @java.private
    def initFields(self):
        """
        Create widgets, and set default values if any
        """
        self.nameText.setValue(u"Birthday")
        self.hostText.setValue(u"host")
        self.locationText.setValue(u"location")
        self.cityText.setValue(u"Palo Alto, CA")
        for category in EventInfo.Category.values():
            self.categoryListBox.addItem(java.str(category).replace(u"_", u" "), u"" + java.str(category.getId()))
        for subCategory in EventInfo.SubCategory.values():
            self.subCategoriesListBox.addItem(java.str(subCategory).replace(u"_", u" "), u"" + java.str(subCategory.getId()))
    
    @java.private
    @java.typed(String, Widget)
    def createLabelAndInput(self, label, field):
        h = HorizontalPanel()
        l = HTML(java.str(u"<b>" + java.str(label)) + u": </b>")
        l.setWidth(u"150px")
        h.add(l)
        h.add(field)
        return h