def __init__(self):
     # Init parent class for resizing etc...
     QMainWindow.__init__(self)
     
     # History Client
     self.client = HistoryClient()
     #self.requests = {}
     self.readResponseSubscriptions = []
     
     self.setWindowTitle('History Client')
     
     # Create Tab widget and fill with
     # pages
     self._build_tab_widget()
     
     page = self._build_requests_page()
     self.tabWidget.addTab(page, 'Requests')
    
     page = self._build_read_requests_page()
     self.tabWidget.addTab(page, 'Read')
     
     page = self._build_read_requests_page()
     self.tabWidget.addTab(page, 'DataBases')
    
    
     self.fetchRequests()
def main():
    
    client = HistoryClient()
    
    print '-- Car history simulator --'
    
    # Make a history request for data we're gonna insert
    sparql = """
        SELECT ?person ?car ?km ?tire ?tireTread WHERE {
            ?person <http://rdf.tesladocet.com/ns/person-car.owl#HasCar>   ?car .
            ?car    <http://rdf.tesladocet.com/ns/person-car.owl#HasKm> ?km .
            ?car    <http://rdf.tesladocet.com/ns/person-car.owl#HasTire> ?tire .
            ?tire   <http://rdf.tesladocet.com/ns/person-car.owl#HasTireTread> ?tireTread
        }"""
    req_id = client.addHistoryRequest(sparql)
    print req_id
    
    # Start the simulator
    tachometer = Tachometer()
    tachometer.start()
    
    # Keep it running untill Ctrl-c
    global carEngineOn
    try:
        while True:
            time.sleep(10)
    except KeyboardInterrupt:
        print 'Shutting off the engine...'
        carEngineOn = False
        
    # Retrieve back historical data
    client.readHistoryRequestData(req_id, ReadResponseHandler())
    
    # Close all the subscriptions of the client, otherwise it hangs
    client.quit()
    
    sys.exit()
class MainWindow(QMainWindow):
    
    def __init__(self):
        # Init parent class for resizing etc...
        QMainWindow.__init__(self)
        
        # History Client
        self.client = HistoryClient()
        #self.requests = {}
        self.readResponseSubscriptions = []
        
        self.setWindowTitle('History Client')
        
        # Create Tab widget and fill with
        # pages
        self._build_tab_widget()
        
        page = self._build_requests_page()
        self.tabWidget.addTab(page, 'Requests')
       
        page = self._build_read_requests_page()
        self.tabWidget.addTab(page, 'Read')
        
        page = self._build_read_requests_page()
        self.tabWidget.addTab(page, 'DataBases')
       
       
        self.fetchRequests()


    def _build_tab_widget(self):
        
        self.tabWidget = QTabWidget()
        self.setCentralWidget(self.tabWidget)
        
    
    def _build_requests_page(self):
        
        addRequestBox = QHBoxLayout()
        
        self.lineEdit = QLineEdit("")
        addRequestBox.addWidget(self.lineEdit)

        self.addbutton = QPushButton("Add Request")
        self.addbutton.clicked.connect(self.addRequest)
        addRequestBox.addWidget(self.addbutton)
        
       
        requestsBox = QHBoxLayout()
        requestActionsBox = QVBoxLayout()
                
        self.listWidget = QListWidget()
        self.listWidget.itemClicked.connect(self._enableDeleteButton)
        self.listWidget.itemClicked.connect(self._enableReadButton)
        self.listWidget.doubleClicked.connect(self._showInfoDialog)
        requestsBox.addWidget(self.listWidget)
        
        self.readButton = QPushButton("Read Request")
        self.readButton.setEnabled(False)
        self.readButton.clicked.connect(self.readRequest)
        requestActionsBox.addWidget(self.readButton)
        
        self.deleteButton = QPushButton("Delete Request")
        self.deleteButton.setEnabled(False)
        self.deleteButton.clicked.connect(self.deleteRequest)
        requestActionsBox.addWidget(self.deleteButton)
        
        requestsBox.addLayout(requestActionsBox)


        layout = QVBoxLayout()
        layout.addLayout(addRequestBox)
        layout.addLayout(requestsBox)
        
        
        page = QWidget()
        page.setLayout(layout)
        return page
    
    
    def _build_read_requests_page(self):
        
        layout = QVBoxLayout()
        
        page = QWidget()
        page.setLayout(layout)
        return page
    
    
    def _build_dbs_page(self):
        
        layout = QVBoxLayout()
        
        page = QWidget()
        page.setLayout(layout)
        return page
    
    
    def _enableDeleteButton(self):
        self.deleteButton.setEnabled(True)
        
    def _enableReadButton(self):
        self.readButton.setEnabled(True)
        
    def _showInfoDialog(self):
        text = QLabel('ciao')
        vbox = QVBoxLayout()
        vbox.addWidget(text)
        
        dialog = QDialog(self)
        dialog.setLayout(vbox)
        dialog.show()
    
    
    def fetchRequests(self):
        requests = self.client.showHistoryRequests()
        
        for r in requests:
            lvi = QListWidgetItem(r['sparql'], self.listWidget)
            lvi.setData(Qt.UserRole, QVariant(r['uri']))

    
    def addRequest(self):
        sparql = self.lineEdit.text()
        request_uri = self.client.addHistoryRequest(sparql)
        
        lvi = QListWidgetItem(sparql, self.listWidget)
        lvi.setData(Qt.UserRole, QVariant(request_uri))
        print request_uri


    def readRequest(self):
        # Issue a history read on the currently selected item
        item = self.listWidget.item(self.listWidget.currentRow())
        request_uri  = item.data(Qt.UserRole).toPyObject()
        
        # History read. Automatically fetch sparql from the request
        self.client.readHistoryRequestData(request_uri, HistoryReadResponseHandler())
        
        # Disable others requests untill dont receive a response!
        self.readButton.setEnabled(False)
        

    def deleteRequest(self):
        # Remove the currently selected item from the listview.
        item = self.listWidget.takeItem(self.listWidget.currentRow())
        request_uri  = item.data(Qt.UserRole).toPyObject()
        
        self.client.deleteHistoryRequest(request_uri)
        
        # Check if the list is empty - if yes, disable the deletebutton.
        if self.listWidget.count() == 0:
            self.deleteButton.setEnabled(False)
            
    
    def closeEvent(self, *args, **kwargs):
        self.client.quit()