def show_main_window(self):
        self.graph_form = matplotlibWidget()
        if self.widget:
            self.widget.destroy()
            self.widget = None;
        self.widget = QWidget()
        self.widget.setMinimumSize(800, 600)
        btn_api = QtGui.QPushButton("Recommend Modules", self.widget)
        btn_api.move(30, 20)

        btn_mashup = QtGui.QPushButton("Recommend Workflows", self.widget)
        btn_mashup.move(200, 20)

        self.textboxLabel = QLabel(self.widget)
        self.textboxLabel.setText("Describe your goals:")
        self.textboxLabel.move(35, 60)
        self.textboxLabel.show
        
        self.textbox = QTextEdit(self.widget)
        self.textbox.move(30, 80)
        self.textbox.setFixedWidth(300)
        self.textbox.setFixedHeight(28)

        btn_api.clicked.connect(self.api_button_clicked)
        btn_mashup.clicked.connect(self.mashups_button_clicked)

        self.table = QTableView(self.widget)
        self.table.clicked.connect(self.table_clicked)
        self.table.setMinimumSize(740, 500)
        self.table.resizeColumnsToContents()
        self.table.move(30, 120)

        self.widget.show()
        
        self.add_btn = QPushButton(self.widget)
        self.add_btn.clicked.connect(self.add_new_api)
        self.add_btn.setText("Add to Palette")
        self.add_btn.hide()
        self.add_btn.move(650, 20)
        
        self.recommendLabel = QLabel(self.widget)
        self.recommendLabel.setText("Also Used")
        self.recommendLabel.move(30, 95)
        self.recommendLabel.hide()
        
        self.switch_btn_apis = QPushButton(self.widget)
        self.switch_btn_apis.clicked.connect(self._show_related_apis)
        self.switch_btn_apis.setText("Related Mashup")
        self.switch_btn_apis.move(500, 20)
        self.switch_btn_apis.hide()
        
        self.switch_btn_mashups = QPushButton(self.widget)
        self.switch_btn_mashups.clicked.connect(self._show_related_mashups)
        self.switch_btn_mashups.setText("Related API")
        self.switch_btn_mashups.move(500, 20)
        self.switch_btn_mashups.hide()
    def show_main_window(self):
        self.graph_form = matplotlibWidget()
        if self.widget:
            self.widget.destroy()
            self.widget = None;
        self.widget = QWidget()
        self.widget.setMinimumSize(800, 600)

        ds_label = QLabel(self.widget)
        ds_label.setText("Data Source:")
        ds_label.move(30,20)
        self.ds = QtGui.QComboBox(self.widget)
        self.ds.addItem("NASA/MODIS")
        self.ds.addItem("NASA/AMSRE")
        self.ds.move(30, 40)

        var_label = QLabel(self.widget)
        var_label.setText("Variable Name:")
        var_label.move(150,20)
        self.var = QtGui.QComboBox(self.widget)
        self.var.addItem("Precipitation Flux")
        self.var.addItem("Total Cloud Fraction")
        self.var.move(150, 40)
        self.var.setCurrentIndex(1)
        
        self.sdate = QTextEdit("2004-01", self.widget)
        self.sdate.move(30, 100)
        self.sdate.setFixedWidth(100)
        self.sdate.setFixedHeight(30)
#        print self.sdate.toPlainText()

        sdate_label = QLabel(self.widget)
        sdate_label.setText("Start Date")
        sdate_label.move(30, 80)

        self.edate = QTextEdit("2004-12", self.widget)
        self.edate.move(150, 100)
        self.edate.setFixedWidth(100)
        self.edate.setFixedHeight(30)

        edate_label = QLabel(self.widget)
        edate_label.setText("End Date")
        edate_label.move(150, 80)

        self.slat = QTextEdit("-90", self.widget)
        self.slat.move(270, 100)
        self.slat.setFixedWidth(100)
        self.slat.setFixedHeight(30)

        slat_label = QLabel(self.widget)
        slat_label.setText("Start Lat (deg)")
        slat_label.move(270, 80)

        self.elat = QTextEdit("90", self.widget)
        self.elat.move(390, 100)
        self.elat.setFixedWidth(100)
        self.elat.setFixedHeight(30)

        elat_label = QLabel(self.widget)
        elat_label.setText("End Lat (deg)")
        elat_label.move(390, 80)

        self.slon = QTextEdit("0", self.widget)
        self.slon.move(510, 100)
        self.slon.setFixedWidth(100)
        self.slon.setFixedHeight(30)

        slon_label = QLabel(self.widget)
        slon_label.setText("Start Lon (deg)")
        slon_label.move(510, 80)

        self.elon = QTextEdit("360", self.widget)
        self.elon.move(630, 100)
        self.elon.setFixedWidth(100)
        self.elon.setFixedHeight(30)

        elon_label = QLabel(self.widget)
        elon_label.setText("End Lon (deg)")
        elon_label.move(630, 80)

        self.cb1 = QtGui.QCheckBox('January', self.widget)
        self.cb1.move(30,160)
        self.cb1.setChecked(True)
        self.cb2 = QtGui.QCheckBox('February', self.widget)
        self.cb2.move(130,160)
        self.cb2.setChecked(True)
        self.cb3 = QtGui.QCheckBox('March', self.widget)
        self.cb3.move(230,160)
        self.cb3.setChecked(True)
        self.cb4 = QtGui.QCheckBox('April', self.widget)
        self.cb4.move(330,160)
        self.cb4.setChecked(True)
        self.cb5 = QtGui.QCheckBox('May', self.widget)
        self.cb5.move(430,160)
        self.cb5.setChecked(True)
        self.cb6 = QtGui.QCheckBox('June', self.widget)
        self.cb6.move(530,160)
        self.cb6.setChecked(True)
        self.cb7 = QtGui.QCheckBox('July', self.widget)
        self.cb7.move(30,200)
        self.cb7.setChecked(True)
        self.cb8 = QtGui.QCheckBox('August', self.widget)
        self.cb8.move(130,200)
        self.cb8.setChecked(True)
        self.cb9 = QtGui.QCheckBox('September', self.widget)
        self.cb9.move(230,200)
        self.cb9.setChecked(True)
        self.cb10 = QtGui.QCheckBox('October', self.widget)
        self.cb10.move(330,200)
        self.cb10.setChecked(True)
        self.cb11 = QtGui.QCheckBox('November', self.widget)
        self.cb11.move(430,200)
        self.cb11.setChecked(True)
        self.cb12 = QtGui.QCheckBox('December', self.widget)
        self.cb12.move(530,200)
        self.cb12.setChecked(True)

        cscale_label = QLabel(self.widget)
        cscale_label.setText("Color Scale")
        cscale_label.move(30, 240)
        self.rbg = QtGui.QButtonGroup(self.widget)
        self.rb1 = QtGui.QRadioButton('Linear', self.widget)
        self.rb1.move(130,240)

        self.rb2 = QtGui.QRadioButton('Logarithmic', self.widget)
        self.rb2.move(230,240)
        self.rbg.addButton(self.rb1)
        self.rbg.addButton(self.rb2)
        self.rb1.setChecked(True)
#        print self.rb1.isChecked()
        self.btn_call_service = QtGui.QPushButton("Call Service", self.widget)
        self.btn_call_service.move(30,280)
        self.btn_call_service.clicked.connect(self.button_call_service)


        btn_api = QtGui.QPushButton("Recommend Modules", self.widget)
        btn_api.move(30, 20)
        btn_api.hide()

        btn_mashup = QtGui.QPushButton("Recommend Workflows", self.widget)
        btn_mashup.move(200, 20)
        btn_mashup.hide()
        self.widget.show()
    def show_main_window(self):
        # Get datasets from server
        data = json.load(urllib2.urlopen(RECO_API_SERVER_ADDR + "/getAllDataSets/"))
        # self.climateData = self.loadClimateDataSet(data)
        self.climateData = self.parseServerData(data)

        self.graph_form = matplotlibWidget()
        if self.widget:
            self.widget.destroy()
            self.widget = None;
        self.widget = QWidget()
        self.widget.setMinimumSize(1000, 900)
        self.widget.setWindowTitle("Recommendation PlugIn")
        margin = 30

        # Search Feature
        self.textboxLabel = QLabel(self.widget)
        self.textboxLabel.setText("Describe your goals:")
        self.textboxLabel.move(30, 20)
        self.textboxLabel.show
        self.textbox = QTextEdit(self.widget)
        self.textbox.move(30, 45)
        self.textbox.setFixedWidth(300)
        self.textbox.setFixedHeight(28)

        btn_api = QtGui.QPushButton("Recommend Services", self.widget)
        btn_api.move(30, 80)

        btn_mashup = QtGui.QPushButton("Recommend Workflows", self.widget)
        btn_mashup.move(230, 80)

        btn_api.clicked.connect(self.api_button_clicked)
        btn_mashup.clicked.connect(self.mashups_button_clicked)

        self.table = QTableView(self.widget)
        self.table.clicked.connect(self.table_clicked)
        self.table.setMinimumSize(600, 300)
        self.table.resizeColumnsToContents()
        self.table.move(30, 120)

        # Top Service
        self.textboxLabel = QLabel("Top Datasets (Usage)", self.widget)
        self.textboxLabel.move(650, 20)
        self.textboxLabel.show

        self.listWidget = QListWidget(self.widget)
        topDatasets = json.load(urllib2.urlopen(RECO_API_SERVER_ADDR + "/getTop10UsedDataset/"))
        for topDataset in topDatasets:
            id = int(topDataset["datasetID"])
            item = QListWidgetItem("{} ({})".format(self.climateData[id]["name"], topDataset["usage"]))
            item.setData(Qt.UserRole,self.climateData[id])
            self.listWidget.addItem(item)
        self.listWidget.move(650, 45)
        self.listWidget.resize(280, 380)
        self.listWidget.show()
        self.listWidget.clicked.connect(lambda: self.dataset_clicked(\
            self.listWidget.currentItem().data(Qt.UserRole)))


        # Username input box and button for generating recommendations
        userTopOffset = 430
        self.textboxLabel = QLabel("Enter username for dataset recommendations:", self.widget)
        self.textboxLabel.move(30, userTopOffset)
        self.textboxLabel.show()

        self.userTextbox = QTextEdit(self.widget)
        self.userTextbox.move(30, userTopOffset + 30)
        self.userTextbox.setFixedWidth(200)
        self.userTextbox.setFixedHeight(28)

        userBtn = QPushButton("Recommend Datasets", self.widget)
        userBtn.move(30 + self.userTextbox.width() + 10, userTopOffset + 30)
	#print RECO_API_SERVER_ADDR + "/getTop5RecommendationByUserName/"
	    
	    ## Jan.20 2016 
	    ##  Change the API names here by shenggu 
	    ##  According to github.com/cmusv-sc/RecommendationAPIs
	    ##
        userBtn.clicked.connect(lambda: self.getRecommendations(RECO_API_SERVER_ADDR + "/getTopKContentBasedCFRecommendedDatasetByUsername",
            self.recListFeature))
        userBtn.clicked.connect(lambda: self.getRecommendations(RECO_API_SERVER_ADDR + "/getTopKItemBasedCFRecommendedDatasetByUsername",
            self.recListItem))
        userBtn.clicked.connect(lambda: self.getRecommendations(RECO_API_SERVER_ADDR + "/getTopKUserBasedCFRecommendedDatasetByUsername",
            self.recListUser))
        userBtn.show()

        # Test QlineEdit
        # self.userTextbox2 = QLineEdit(self.widget)
        # self.userTextbox.move(200, userTopOffset + 30)
        # self.userTextbox.setFixedWidth(200)
        # self.userTextbox.setFixedHeight(28)

        # Feature Recommendations
        recTopOffset = 500
        self.textboxLabel = QLabel("Feature Recommendations", self.widget)
        self.textboxLabel.move(30, recTopOffset)
        self.textboxLabel.show()

        self.recListFeature = QListWidget(self.widget)
        self.recListFeature.move(30, recTopOffset + 30)
        self.recListFeature.resize(280, 250)
        self.recListFeature.show()

        # Item-based Recommendations
        self.textboxLabel = QLabel("Item-based Recommendations", self.widget)
        self.textboxLabel.move(340, recTopOffset)
        self.textboxLabel.show

        self.recListItem = QListWidget(self.widget)
        self.recListItem.move(340, recTopOffset + 30)
        self.recListItem.resize(280, 250)
        self.recListItem.show()

        # User-based Recommendations
        self.textboxLabel = QLabel("User-based Recommendations", self.widget)
        self.textboxLabel.move(650, recTopOffset)
        self.textboxLabel.show

        self.recListUser = QListWidget(self.widget)
        self.recListUser.move(650, recTopOffset + 30)
        self.recListUser.resize(280, 250)
        self.recListUser.show()

        # Categories
        categoryTopOffset = 300
        self.textboxLabel = QLabel("Categories", self.widget)
        self.textboxLabel.move(30, recTopOffset + categoryTopOffset)
        self.textboxLabel.show

        button1 = QPushButton("By Agency", self.widget)
        button1.clicked.connect(lambda: self.listCategory_clicked("agency"))
        button1.move(30, recTopOffset + categoryTopOffset + 30)
        button1.show()

        button2 = QPushButton("By Instrument", self.widget)
        button2.clicked.connect(lambda: self.listCategory_clicked("instrument"))
        button2.move(margin + button1.width() + 20, recTopOffset + categoryTopOffset + 30)
        button2.show()

        button3 = QPushButton("By Data Source Input", self.widget)
        button3.clicked.connect(lambda: self.listCategory_clicked("input"))
        button3.move(margin + button1.width() + button2.width() + 40, recTopOffset + categoryTopOffset + 30)
        button3.show()

        # Show and move widget
        self.widget.move(QtGui.QApplication.desktop().screen().rect().center() - \
            self.widget.rect().center())
        self.widget.show()

        # Service and workflow recommendation
        self.add_btn = QPushButton("Add to Palette", self.widget)
        self.add_btn.clicked.connect(self.add_new_api)
        self.add_btn.hide()
        self.add_btn.setFixedWidth(160)
        self.add_btn.move(470, 20)
        
        self.recommendLabel = QLabel("Also Used", self.widget)
        self.recommendLabel.hide()
        self.recommendLabel.setFixedWidth(160)
        self.recommendLabel.move(470, 50)
        
        self.switch_btn_apis = QPushButton("Related Workflows", self.widget)
        self.switch_btn_apis.clicked.connect(self._show_related_apis)
        self.switch_btn_apis.hide()
        self.switch_btn_apis.setFixedWidth(160)
        self.switch_btn_apis.move(470, 80)
        
        self.switch_btn_mashups = QPushButton("Related Modules", self.widget)
        self.switch_btn_mashups.clicked.connect(self._show_related_mashups)
        self.switch_btn_mashups.hide()
        self.switch_btn_mashups.setFixedWidth(160)
        self.switch_btn_mashups.move(470, 80)