Ejemplo n.º 1
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    global dsgraph
    global mss_cnt
    global i

    def buscaActivitats():
        global i
        
        activitats = Graph()
        activitats.bind('via', VIA)
        contingut = Graph()
        ciutat = gm.value(subject=content, predicate=DEM.Ciutat)
        cost_max = gm.value(subject=content, predicate=DEM.Cost)
        data_act = gm.value(subject=content, predicate=DEM.Data_activitat)        
        franja = gm.value(subject=content, predicate=DEM.Horari)
        tipus_activitat = gm.value(subject=content, predicate=DEM.Tipus_activitat)
        if (Literal(tipus_activitat).eq('LUDICA')):
            tipus_activitat = "Ludica"
        elif (Literal(tipus_activitat).eq('CULTURAL')):
            tipus_activitat = "Cultural"
        else:
            tipus_activitat = "Festiva"

        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')

        for x in range (3):
            res = contingut.query(f"""
                            SELECT ?nm ?id ?preu ?dat ?franja ?ciu ?rec
                            WHERE {{
                                ?a rdf:type via:{tipus_activitat} .
                                ?a via:val ?p .
                                ?p via:Import ?preu .
    			                FILTER (?preu <= {cost_max}) .
                                ?a via:se_celebra_de ?franja .
                                ?franja via:Nom "{franja}" .
                                ?a via:se_celebra_el ?dat .
                                ?dat via:Data "{data_act}" .
                                ?a via:se_celebra_a ?rec .
                                ?rec via:es_troba_a ?ciu .
                                ?ciu via:Nom "{ciutat}" .
    			    			?a via:Nom ?nm .
    			    			?a via:IDAct ?id .
                            }}
                            LIMIT 1
                            """, initNs={"via":VIA})
            if (len(res) == 0):
                if (Literal(tipus_activitat).eq('Ludica')):
                    tipus_activitat = "Cultural"
                elif (Literal(tipus_activitat).eq('Cultural')):
                    tipus_activitat = "Festiva"
                else:
                    tipus_activitat = "Ludica"
            else: break

        if (len(res) == 0):
        	print("BUIT------------------------------------------")

        for row in res:
            Activitat= VIA.Activitat + "_" + tipus_activitat + str(i)
            i += 1
            activitats.add((Activitat, RDF.type, VIA.Activitat))
            activitats.add((Activitat, VIA.Nom , Literal(row[0])))
            activitats.add((Activitat, VIA.IDAct, Literal(row[1])))
            activitats.add((Activitat, VIA.Preu, Literal(row[2])))
            activitats.add((Activitat, VIA.Data, Literal(row[3])))
            activitats.add((Activitat, VIA.Nom + "_Franja", Literal(row[4])))
            activitats.add((Activitat, VIA.Nom + "_Ciutat", Literal(row[5])))
            activitats.add((Activitat, VIA.Nom + "_Recinte", Literal(row[6])))

        return activitats

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = Graph()

    # FIPA ACL message?
    if msgdic is None:      # NO: responem "not understood"
        print('msg dic is empty')
        gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)
    else:                   # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            print('not an acl request')
            gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(subject=content, predicate=RDF.type)
                if accion == DEM.Demanar_activitat : #comparar que sigui del tipus d'accio que volem
                    graph_content = buscaActivitats()
                    gr = build_message(graph_content, ACL['inform'], sender=AgentActivitats.uri, msgcnt=mss_cnt, content = VIA.Activitat)
                else:
                    print('action not understood')
                    gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 2
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """

    global dsgraph
    global mss_cnt

    def getAllotjaments():
    #----------- STUB VERSION -----------#
        allotjaments = Graph()
        #allotjaments.bind('foaf', FOAF)
        allotjaments.bind('via', VIA)

        allotjament = VIA.allotjament + '_allotjament' + str(mss_cnt)
        allotjaments.add((allotjament, RDF.type, VIA.Allotjament))

        # localització de l'allotjament
        localitzacio = VIA.Localitzacio + '_localitzacio' + str(mss_cnt)
        allotjaments.add((localitzacio, RDF.type, VIA.Localitzacio))
        allotjaments.add((localitzacio, VIA.Nom, Literal('NOM LOCALITZACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_troba_a, localitzacio))

        # popularitat de l'allotjament
        popularitat = VIA.Popularitat + '_popularitat' + str(mss_cnt)
        allotjaments.add((popularitat, RDF.type, VIA.Popularitat))
        allotjaments.add((popularitat, VIA.Nom, Literal('NOM POPULARITAT ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_popular, popularitat))

        # preu de l'allotjament
        preu = VIA.Preu + '_preu' + str(mss_cnt)
        allotjaments.add((preu, RDF.type, VIA.Preu))
        allotjaments.add((preu, VIA.Import, Literal('IMPORT PREU ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.val, preu))

        # situacio de l'allotjament
        situacio = VIA.Situacio + '_situacio' + str(mss_cnt)
        allotjaments.add((situacio, RDF.type, VIA.Situacio))
        allotjaments.add((situacio, VIA.Nom, Literal('NOM SITUACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_troba_a, situacio))

        # tipus d'estada de l'allotjament
        estada = VIA.Tipus_estada + '_estada' + str(mss_cnt)
        allotjaments.add((estada, RDF.type, VIA.Tipus_estada))
        allotjaments.add((estada, VIA.Nom, Literal('NOM TIPUS ESTADA ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.ofereix, estada))

        # tipus d'habitacio de l'allotjament
        habitacio = VIA.Tipus_habitacio + '_habitacio' + str(mss_cnt)
        allotjaments.add((habitacio, RDF.type, VIA.Tipus_habitacio))
        allotjaments.add((habitacio, VIA.Nom, Literal('NOM TIPUS HABITACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.te_habitacions, habitacio))


        # allotjament dummy de capacitat 10
        allotjament1 = VIA.Allotjament + 'allotjament1' + str(mss_cnt)
        allotjaments.add((allotjament, VIA.Allotjament, allotjament1))
        allotjaments.add((allotjament1, VIA.Nom, Literal("Apartament 1 " + str(mss_cnt))))
        allotjaments.add((allotjament1, VIA.Capacitat, Literal("10 " + str(mss_cnt))))

        # allotjament dummy de capacitat 20
        allotjament2 = VIA.Allotjament + 'allotjament2' + str(mss_cnt)
        allotjaments.add((allotjament, VIA.Allotjament, allotjament2))
        allotjaments.add((allotjament2, VIA.Nom, Literal("Apartament 2 " + str(mss_cnt))))
        allotjaments.add((allotjament2, VIA.Capacitat, Literal("20 " + str(mss_cnt))))

        return allotjaments
    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = Graph()

    # FIPA ACL message?
    if msgdic is None:      # NO: responem "not understood" i un graph de contingut buit
        gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)
    else:                   # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(subject=content, predicate=RDF.type)

                if accion == DEM.Consultar_hotels: #comparar que sigui del tipus d'accio que volem
                    graph_content = getAllotjaments()
                    gr = build_message(graph_content, ACL['inform'], sender=AgentAllotjament.uri, msgcnt=mss_cnt, content = VIA.Allotjament)

                else:
                    gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 3
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    print('entrypoint comunicacion')
    global dsgraph
    global mss_cnt

    def GetTransports():

        #----------- STUB VERSION -----------#
        transports = Graph()
        #transports.bind('foaf', FOAF)
        transports.bind('via', VIA)

        transport = VIA.transport + '_transport' + str(mss_cnt)
        transports.add((transport, RDF.type, VIA.Transport))

        # Municipi origen i desti del transport
        localitzacio = VIA.Localitzacio + '_localitzacio' + str(mss_cnt)
        municipi = VIA.Municipi + '_municipi' + str(mss_cnt)
        transports.add((localitzacio, RDF.type, VIA.Localitzacio))
        transports.add((localitzacio, VIA.Municipi, municipi))
        transports.add(
            (municipi, VIA.Nom, Literal('NOM MUNICIPI ' + str(mss_cnt))))

        # Data anada i tornada del transport
        temps = VIA.Temps + '_temps' + str(mss_cnt)
        data = VIA.Data + '_data' + str(mss_cnt)
        transports.add((temps, RDF.type, VIA.Temps))
        transports.add((temps, VIA.Data, data))
        transports.add((data, VIA.Data, Literal('DATA ' + str(mss_cnt))))

        # preu del transport
        preu = VIA.Preu + '_preu' + str(mss_cnt)
        transports.add((preu, RDF.type, VIA.Preu))
        transports.add(
            (preu, VIA.Import, Literal('IMPORT PREU ' + str(mss_cnt))))

        # tipus de seient del transport
        seient = VIA.Tipus_seient + '_seient' + str(mss_cnt)
        transports.add((seient, RDF.type, VIA.Tipus_seient))
        transports.add((seient, VIA.Nom, Literal('convencional')))

        # transport dummy de capacitat 10
        transport1 = VIA.Transport + 'transport' + str(mss_cnt)
        transports.add((transport, VIA.Transport, transport1))
        transports.add(
            (transport1, VIA.Nom, Literal("Transport 1 " + str(mss_cnt))))
        transports.add((transport1, VIA.Capacitat, Literal("10")))
        transports.add((transport1, VIA.MitjaTransport, Literal('AVIO')))
        transports.add((transport1, VIA.val, preu))
        transports.add((transport1, VIA.data_anada, data))
        transports.add((transport1, VIA.data_tornada, data))
        transports.add((transport1, VIA.origen, municipi))
        transports.add((transport1, VIA.desti, municipi))
        transports.add((transport1, VIA.ofereix_seients, seient))

        # transport dummy de capacitat 20
        transport2 = VIA.Transport + 'transport' + str(mss_cnt)
        transports.add((transport, VIA.Transport, transport2))
        transports.add(
            (transport2, VIA.Nom, Literal("Transport 2 " + str(mss_cnt))))
        transports.add((transport2, VIA.Capacitat, Literal("20")))
        transports.add((transport2, VIA.MitjaTransport, Literal('AVIO')))
        transports.add((transport2, VIA.val, preu))
        transports.add((transport2, VIA.data_anada, data))
        transports.add((transport2, VIA.data_tornada, data))
        transports.add((transport2, VIA.origen, municipi))
        transports.add((transport2, VIA.desti, municipi))
        transports.add((transport2, VIA.ofereix_seients, seient))

        return transports

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood"
        print('you did not send anything')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTransport.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            print('did not receive an acl request')
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentTransport.uri,
                               msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(
                    subject=content,
                    predicate=RDF.type)  # TODO preguntar com va aixo

                if accion == DEM.Consultar_transports:  #comparar que sigui del tipus d'accio que volem
                    print('getting transports')
                    graph_content = GetTransports()
                    gr = build_message(graph_content,
                                       ACL['inform'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Transport)

                else:
                    print('wrong action')
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 4
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def cercaTransports():

        resultat = Graph()
        resultat.bind('via', VIA)
        contingut = Graph()
        global ciutat_origen
        restriccions_transport = gm.value(
            subject=content, predicate=DEM.Restriccions_transports)
        DataF = gm.value(subject=restriccions_transport,
                         predicate=DEM.Data_final)
        DataIni = gm.value(subject=restriccions_transport,
                           predicate=DEM.Data_inici)
        ciutat_desti = gm.value(subject=restriccions_transport,
                                predicate=DEM.Desti)
        NPers = gm.value(subject=restriccions_transport,
                         predicate=DEM.NumPersones)
        ciutat_origen = gm.value(subject=restriccions_transport,
                                 predicate=DEM.Origen)
        Preu = gm.value(subject=restriccions_transport, predicate=DEM.Preu)

        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')
        res_Anada = contingut.query(f"""
                        SELECT ?nm ?mitja ?c ?preu ?se
                        WHERE {{
                            ?t rdf:type via:Transport .
                            ?t via:Nom ?nm .
                            ?t via:MitjaTransport ?mitja .
                            ?t via:Capacitat ?c .
                            ?t via:val ?p .
                            ?t via:data_anada ?da .
                            ?t via:ofereix_seients ?s .
                            ?s via:Nom ?se .
                            ?da via:Data "{DataIni}" .
                            ?t via:data_tornada ?dt .
                            ?dt via:Data "{DataF}" .
                            ?p via:Import ?preu .
                            ?t via:origen ?ciu .
                            ?ciu via:Nom "{ciutat_origen}" .
                            ?t via:desti ?ciu1 .
                            ?ciu1 via:Nom "{ciutat_desti}" .
                        }}""",
                                    initNs={"via": VIA})
        for row in res_Anada:
            if (int(NPers) <= int(row[2])):
                preuTotal = int(NPers) * int(row[3]) * 2
                if (preuTotal <= Preu):
                    Transports = VIA.Transport + "_" + row[0]
                    resultat.add((Transports, RDF.type, VIA.Transport))
                    resultat.add((Transports, VIA.Nom, Literal(row[0])))
                    resultat.add((Transports, VIA.Capacitat, Literal(row[2])))
                    resultat.add(
                        (Transports, VIA.MitjaTransport, Literal(row[1])))
                    resultat.add((Transports, VIA.Preu, Literal(preuTotal)))
                    resultat.add(
                        (Transports, VIA.Tipus_seient, Literal(row[4])))
                    resultat.add(
                        (Transports, VIA.Data + "_anada", Literal(DataIni)))
                    resultat.add(
                        (Transports, VIA.Data + "_tornada", Literal(DataF)))
                    resultat.add((Transports, VIA.Nom + "_origen",
                                  Literal(ciutat_origen)))
                    resultat.add((Transports, VIA.Nom + "_desti",
                                  Literal(ciutat_desti)))

        return resultat

    global dsgraph
    global mss_cnt

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood"
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTransport.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentTransport.uri,
                               msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                action = gm.value(
                    subject=content,
                    predicate=RDF.type)  # TODO preguntar com va aixo

                if action == DEM.Consultar_transports:  #comparar que sigui del tipus d'accio que volem
                    graf_resposta = cercaTransports()
                    gr = build_message(graf_resposta,
                                       ACL['inform'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Viatge)
                else:
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 5
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def cercaHotels():

        resultat = Graph()
        resultat.bind('via', VIA)
        contingut = Graph()
        obj_restriccions = gm.value(subject=content,
                                    predicate=DEM.Restriccions_hotels)
        ciutat = gm.value(subject=obj_restriccions, predicate=DEM.Ciutat)
        dataI = gm.value(subject=obj_restriccions, predicate=DEM.Data_inici)
        dataF = gm.value(subject=obj_restriccions, predicate=DEM.Data_final)
        NumPer = gm.value(subject=obj_restriccions, predicate=DEM.NumPersones)
        preuAllot = gm.value(subject=obj_restriccions, predicate=DEM.Preu)
        data_ini = stringToDate(dataI)
        data_fi = stringToDate(dataF)
        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')
        res = contingut.query(f"""
                        SELECT ?nm ?c ?ta ?preu ?sit ?t ?testn ?ppn
                        WHERE {{
                            ?a rdf:type via:Allotjament .
                            ?a via:Nom ?nm .
                            ?a via:Capacitat ?c .
                            ?a via:TipusAllotjament ?ta .
                            ?a via:val ?p .
                            ?p via:Import ?preu .
                            ?a via:es_troba_a ?ciu .
                            ?ciu via:Nom "{ciutat}" .
                            ?a via:se_situa_a ?s .
                            ?s via:Nom ?sit .
                            ?a via:te_habitacions ?th .
                            ?th via:Nom ?t .
                            ?a via:ofereix ?test .
                            ?test via:Nom ?testn .
                            ?a via:es_popular ?pp .
                            ?pp via:Nom ?ppn .
                        }}""",
                              initNs={"via": VIA})

        dies = data_fi - data_ini
        for row in res:
            if (int(row[1]) >= int(NumPer)):
                print(row[3])
                preuTotal = int(NumPer) * int(row[3]) * (dies.days)
                print(preuTotal)
                if (preuTotal <= preuAllot):
                    Allotjaments = VIA.Allotjament + "_" + row[0]
                    resultat.add((Allotjaments, RDF.type, VIA.Allotjament))
                    resultat.add((Allotjaments, VIA.Nom, Literal(row[0])))
                    resultat.add(
                        (Allotjaments, VIA.Capacitat, Literal(row[1])))
                    resultat.add(
                        (Allotjaments, VIA.TipusAllotjament, Literal(row[2])))
                    resultat.add((Allotjaments, VIA.Preu, Literal(preuTotal)))
                    resultat.add(
                        (Allotjaments, VIA.Nom + "_Situacio", Literal(row[4])))
                    resultat.add((Allotjaments, VIA.Nom + "_TipusHabitacio",
                                  Literal(row[5])))
                    resultat.add((Allotjaments, VIA.Nom + "_TipusEstada",
                                  Literal(row[6])))
                    resultat.add((Allotjaments, VIA.Nom + "_Popularitat",
                                  Literal(row[7])))
                    resultat.add(
                        (Allotjaments, VIA.Data + "_anada", Literal(dataI)))
                    resultat.add(
                        (Allotjaments, VIA.Data + "_tornada", Literal(dataF)))

        return resultat

    global dsgraph
    global mss_cnt

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood" i un graph de contingut buit
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentAllotjament.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # SI NO ENS FAN UN REQUEST
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentAllotjament.uri,
                               msgcnt=mss_cnt)
        else:
            # AQUI HI ARRIBEM QUAN HEM ENTES EL MISSATGE I ES DEL TIPUS QUE VOLIEM

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                action = gm.value(subject=content, predicate=RDF.type)

                if action == DEM.Consultar_hotels:  #comparar que sigui del tipus d'accio que volem
                    graf_resposta = cercaHotels()
                    gr = build_message(graf_resposta,
                                       ACL['inform'],
                                       sender=AgentAllotjament.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Viatge)
                else:
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentAllotjament.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 6
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def addMarca():
        content = msgdic['content']

        properties_obj = gm.value(subject=content, predicate=REQ.Properties)

        nombre = gm.value(subject=properties_obj, predicate=REQ.Nombre)

        g = Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        g.add((PrOntRes[nombre], RDF.type, PrOnt.Marca))

        g.add((PrOntRes[nombre], PrOntPr.nombre, nombre))

        ofile = open('./Ontologies/product.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        return g

    def addProducte():
        global mss_cnt

        content = msgdic['content']

        properties_obj = gm.value(subject=content, predicate=REQ.Properties)

        nombre = gm.value(subject=properties_obj, predicate=REQ.Nombre)
        precio = gm.value(subject=properties_obj, predicate=REQ.Precio)
        peso = gm.value(subject=properties_obj, predicate=REQ.Peso)
        marca = gm.value(subject=properties_obj, predicate=REQ.Marca)
        categoria = gm.value(subject=properties_obj, predicate=REQ.Categoria)

        g = Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        g.add((PrOntRes[nombre], RDF.type, PrOnt[categoria]))

        g.add((PrOntRes[nombre], PrOntPr['nombre'], nombre))
        g.add((PrOntRes[nombre], PrOntPr['precio'], precio))
        g.add((PrOntRes[nombre], PrOntPr['peso'], peso))
        g.add((PrOntRes[nombre], PrOntPr['esExterno'], Literal(1)))
        g.add((PrOntRes[nombre], PrOntPr['tieneMarca'], PrOntRes[marca]))

        g.add((PrOntRes[marca], RDF.type, PrOnt.Marca))

        g.add((PrOntRes[marca], PrOntPr.nombre, marca))

        ofile = open('./Ontologies/product.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        g = Graph()
        g.parse("./Ontologies/centresProd.owl", format="xml")
        g.add(
            (CenOntRes[nombre], RDF.type, CenOnt['Producte_CentreLogistic1']))

        g.add((CenOntRes[nombre], CenOntPr['nombre'], nombre))
        g.add((CenOntRes[nombre], CenOntPr['nombreCentreLogistic'],
               Literal('cl1')))
        g.add((CenOntRes[nombre], CenOntPr['stock'], Literal(5)))

        ofile = open('./Ontologies/centresProd.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        gresult = Graph()
        gresult.bind('req', REQ)
        cerca_obj = agn['cerca']
        xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
        result_properties = {
            'Marca': 's',
            'Precio': 'i',
            'Peso': 'f',
            'Categoria': 's',
            'Nombre': 's'
        }
        for prop in result_properties:
            if result_properties[prop] in ['s', 'i', 'f']:
                gresult.add((REQ[prop], RDF.type, OWL.DatatypeProperty))
                gresult.add((REQ[prop], RDFS.range,
                             xsddatatypes[result_properties[prop]]))
            else:
                gresult.add((REQ[prop], RDF.type, OWL.ObjectProperty))
                gresult.add(
                    (REQ[prop], RDFS.range, REQ[result_properties[prop]]))

        gresult.add((REQ.Result, RDF.type, OWL.Class))

        result_obj = REQ[nombre]
        gresult.add((result_obj, RDF.type, REQ.Result))
        gresult.add((result_obj, REQ['Nombre'], nombre))
        gresult.add((result_obj, REQ['Precio'], precio))
        gresult.add((result_obj, REQ['Peso'], peso))
        gresult.add((result_obj, REQ['esExterno'], Literal(1)))
        gresult.add((result_obj, REQ['Marca'], marca))

        return gresult

    global dsgraph
    global mss_cnt

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentVenedorExtern.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentVenedorExtern.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)

            #placeholder
            if action == REQ.AfegirProducteExtern:
                logger.info('Processem la peticio')
                gr = addProducte()

            elif action == REQ.AfegirMarca:
                gr = addMarca()
            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)

                print("Hem rebut diners: ", diners)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=AgentVenedorExtern.uri,
                                   msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=AgentVenedorExtern.uri,
                                   msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 7
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    global dsgraph
    global mss_cnt

    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=EmpresaTransportista.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=EmpresaTransportista.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('La action es:', action)
            print('La action hauria de ser:', REQ.PeticioEmpresa)

            if action == REQ.PeticioEmpresa:
                logger.info('Es demana preu')
                print(
                    '------------------------Rebem peticio------------------------'
                )

                #obté pes, ciutat desti i plaç màxim d'entrega per ara HARDCODED

                pes = gm.value(subject=content, predicate=REQ.QuantProductes)
                #pes = 2
                ciutatDesti = 'Barcelona'
                diaMaxim = '15/10/2021'
                #conjuntEmpreses = ['empresa_1', 'empresa_2', 'empresa_3', 'empresa_4', 'empresa_5']
                conjuntEmpreses = []
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE1)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE2)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE3)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE4)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE5)))

                gResposta = Graph()
                gResposta.bind('req', REQ)
                resposta_empresa = agn['resposta']

                xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
                result_properties = {'Nombre': 's', 'Precio': 'f'}

                print('HOLA1')

                for prop in result_properties:
                    if result_properties[prop] in ['s', 'i', 'f']:
                        gResposta.add(
                            (REQ[prop], RDF.type, OWL.DatatypeProperty))
                        gResposta.add((REQ[prop], RDFS.range,
                                       xsddatatypes[result_properties[prop]]))
                    else:
                        gResposta.add(
                            (REQ[prop], RDF.type, OWL.ObjectProperty))
                        gResposta.add((REQ[prop], RDFS.range,
                                       REQ[result_properties[prop]]))

                gResposta.add((REQ.RespostaEmpresa, RDF.type, OWL.Class))

                print('HOLA2')
                print('Conjunt empreses:', conjuntEmpreses)
                print('Tamany empreses:', len(conjuntEmpreses))

                for i in range(0, len(conjuntEmpreses)):
                    result_obj = REQ[conjuntEmpreses[i]]
                    print('Estic dins: ', i)
                    preu = float(pes) * random.uniform(limR[0], limR[1])
                    print('PES CALCULAT')
                    gResposta.add((result_obj, RDF.type, REQ.RespostaEmpresa))
                    print('Estic a dins del bucle:', conjuntEmpreses[i])
                    gResposta.add((result_obj, REQ['Nombre'],
                                   Literal(conjuntEmpreses[i])))
                    print('Estic a dins del bucle2:', conjuntEmpreses[i])
                    gResposta.add((result_obj, REQ['Precio'], Literal(preu)))
                    print(preu)


#                for row in conjuntEmpreses:
#                    print('Estic dins bucle:', row)
#                    preu = pes * random.uniform(limR[0], limR[1])
#                    gResposta.add((resposta_empresa, RDF.type, REQ.RespostaEmpresa))
#                    gResposta.add((resposta_empresa, REQ['Nombre'], row))
#                    gResposta.add((resposta_empresa, REQ['Precio'], preu))

                print(
                    '------------------------Preparat per retornar resposta------------------------'
                )

                gr = build_message(gResposta,
                                   ACL['inform-done'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.EmpresaGuanyadora:
                print(
                    '------------------------Rebem Resposta Millor Empresa------------------------'
                )

                empresaEscollida = gm.value(subject=content,
                                            predicate=REQ.NomEmpresa)
                print('La empresa escollida és: ', empresaEscollida)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

        mss_cnt += 1
        return gr.serialize(format='xml')

    pass
Ejemplo n.º 8
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """    
    global dsgraph
    global mss_cnt
    
    
    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            
            if action == REQ.PeticioTransferenciaAPlataforma:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                compte = gm.value(subject=content, predicate=REQ.compte)
                nombreProd = gm.value(subject=content, predicate=REQ.np)
                
                esExtern = esProducteExtern(nombreProd)
                
                if esExtern == False:
                
                    print("El client paga a la plataforma ", diners, " usant el compte ", compte)
                    
                    conGraph = Graph()
                    conGraph.bind('req', REQ)
                    con_obj = agn['transferencia']
                    conGraph.add((con_obj, RDF.type, REQ.rebreDiners)) 
                    conGraph.add((con_obj, REQ.diners, Literal(diners)))
                    conGraph.add((con_obj, REQ.compte, Literal(compte)))
            
                    missatgeEnviament = build_message(conGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=PlataformaAgent.uri, content=con_obj)
                    response = send_message(missatgeEnviament, PlataformaAgent.address)
                else:
                    
                    print("El client paga al agent extern")
                    
                    tGraph = Graph()
                    tGraph.bind('req', REQ)
                    t_obj = agn['transferencia']
                    tGraph.add((t_obj, RDF.type, REQ.rebreDiners)) 
                    tGraph.add((t_obj, REQ.diners, Literal(diners)))
                    tGraph.add((t_obj, REQ.compte, Literal(compte)))
            
                    missatgeEnviament2 = build_message(tGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=AgentVenedorExtern.uri, content=t_obj)
                    response = send_message(missatgeEnviament2, AgentVenedorExtern.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
            elif action == REQ.PeticioTransferenciaAClient:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                print("La plataforma retorna al client els diners:", diners)
                
                transGraph = Graph()
                transGraph.bind('req', REQ)
                trans_obj = agn['transferencia2']
                transGraph.add((trans_obj, RDF.type, REQ.rebreDiners)) 
                transGraph.add((trans_obj, REQ.diners, Literal(diners)))
        
                print("Preparat per enviar a client")
                
                missatgeEnviament2 = build_message(transGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=Client.uri, content=trans_obj)
                response = send_message(missatgeEnviament2, Client.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
                
        mss_cnt += 1
        return gr.serialize(format='xml')

    pass
Ejemplo n.º 9
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """

    global dsgraph
    global mss_cnt

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=PlataformaAgent.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('La action es:', action)
            print('La action hauria de ser:', REQ.PeticioCompra)

            #placeholder
            if action == REQ.PeticioCompra:
                logger.info('Processem la compra')
                #agafar el nom del producte i la quantitat, i la localitzacio del client
                content = msgdic['content']
                nombreProd = gm.value(subject=content,
                                      predicate=REQ.NombreProducte)
                quant = gm.value(subject=content,
                                 predicate=REQ.QuantitatProducte)
                latClient = gm.value(subject=content,
                                     predicate=REQ.LatitudClient)
                longClient = gm.value(subject=content,
                                      predicate=REQ.LongitudClient)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)

                #cercar el millor centre logistic que tingui aquest producte
                cl = buscarCentreLogistic(nombreProd, quant, latClient,
                                          longClient)
                resCL = crearRespostaPeticioCompra(cl)
                if cl is None:
                    logger.info('No hi ha aquest producte en ningun centre')
                    print('No hi ha aquest producte en ningun centre')
                    resGraph = Graph()
                    resGraph.bind('req', REQ)
                    res_obj = agn['factura']
                    resGraph.add(
                        (res_obj, RDF.type, REQ.ConfirmacioAmbResposta))
                    resGraph.add((res_obj, REQ.resposta, Literal(resCL)))
                    gr = build_message(resGraph,
                                       ACL['inform-done'],
                                       sender=PlataformaAgent.uri,
                                       msgcnt=mss_cnt)
                    return gr.serialize(format='xml')
                else:
                    print('El millor centre logistic es:', cl)

                #cl sera el reciever del message
                #fer peticio enviament a centre logistic
                actualitzarStock(cl, nombreProd)

                envGraph = Graph()
                envGraph.bind('req', REQ)
                env_obj = agn['delegarEnviament']
                pes = buscarPesProducte(nombreProd)
                envGraph.add((env_obj, RDF.type, REQ.PeticioEnviament))
                envGraph.add((env_obj, REQ.prod, nombreProd))
                envGraph.add((env_obj, REQ.pes, pes))
                envGraph.add((env_obj, REQ.idCompra, idCompra))
                envGraph.add((env_obj, REQ.quant, quant))

                missatgeEnviament = Graph()
                centreReciever = None
                if str(cl) == 'cl1':
                    centreReciever = CentroLogistico1
                elif str(cl) == 'cl2':
                    centreReciever = CentroLogistico2
                elif str(cl) == 'cl3':
                    centreReciever = CentroLogistico3
                elif str(cl) == 'cl4':
                    centreReciever = CentroLogistico4
                elif str(cl) == 'cl5':
                    centreReciever = CentroLogistico5

                #per ara enviarem sempre al mateix centre (segona entrega)
                #centreReciever = CentroLogistico3

                print('\n')
                print('PREPAREM PER DELEGAR ENVIAMENT')
                print('\n')
                missatgeEnviament = build_message(envGraph,
                                                  perf=ACL.request,
                                                  sender=PlataformaAgent.uri,
                                                  msgcnt=0,
                                                  receiver=centreReciever.uri,
                                                  content=env_obj)
                response = send_message(missatgeEnviament,
                                        centreReciever.address)

                resGraph = Graph()
                resGraph.bind('req', REQ)
                res_obj = agn['factura']
                resGraph.add((res_obj, RDF.type, REQ.ConfirmacioAmbResposta))
                resGraph.add((res_obj, REQ.resposta, Literal(resCL)))
                gr = build_message(resGraph,
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
                return gr.serialize(format='xml')

            elif action == REQ.IniciarEnviament:
                content = msgdic['content']

                #response = gm.value(subject=content, predicate=REQ.PreuEnviament)

                print('\n')
                print('REBEM PREU ENVIAMENT')
                print('\n')

                nomE = gm.value(subject=content, predicate=REQ.NomEmpresa)
                preuEnv = gm.value(subject=content, predicate=REQ.Preu)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                nombreProd = gm.value(subject=content, predicate=REQ.NomProd)
                quant = gm.value(subject=content, predicate=REQ.quant)

                print('El preu enviament es:', preuEnv)
                print('El nom empresa es:', nomE)
                print('El idCompra es:', idCompra)
                print('El nom prod es:', nombreProd)
                print('La quant del producte es:', quant)

                preuProducte = buscarPreuProducte(nombreProd)

                print('El preu producte es:', preuProducte)

                preuProducte = Literal(int(preuProducte) * int(quant))
                preuTot = Literal(
                    float(preuEnv) + int(preuProducte * int(quant)))

                print('Registrant compra...')
                registrarCompra(idCompra, nombreProd, preuTot)

                print('Preparant factura...')

                contentFactura = Graph()
                contentFactura.bind('req', REQ)
                factura_obj = agn['factura']
                contentFactura.add(
                    (factura_obj, RDF.type, REQ.ConfirmacioAmbFactura))
                contentFactura.add((factura_obj, REQ.nomP, nombreProd))
                contentFactura.add(
                    (factura_obj, REQ.preuEnviament, Literal(preuEnv)))
                contentFactura.add((factura_obj, REQ.preuProd, preuProducte))
                contentFactura.add((factura_obj, REQ.preuTotal, preuTot))
                contentFactura.add((factura_obj, REQ.nomEmpresa, nomE))
                #El centre logistic hauria de passar el idCompra!!!!!!!!!!!!!!
                contentFactura.add(
                    (factura_obj, REQ.idCompra, Literal(idCompra)))

                print('Factura creada')

                missatgeFactura = build_message(contentFactura,
                                                perf=ACL.request,
                                                sender=PlataformaAgent.uri,
                                                msgcnt=0,
                                                receiver=Client.uri,
                                                content=factura_obj)
                response = send_message(missatgeFactura, Client.address)

                print("Cridar obtenir feedback...")
                obtenirFeedback()

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.PeticioDevolucio:
                content = msgdic['content']
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                dies = gm.value(subject=content, predicate=REQ.dies)
                print("SENSE TRANSFORMACIO: ", dies)
                print("AMB TRANSFORMACIO: ", int(dies))
                resposta = ""

                print("Preparat per gestionar peticio devolucio")

                if int(dies) >= 0 and int(dies) <= 15:
                    preu = cercarCompra(idCompra)
                    print("Compra cercada")
                    if preu < 0.0:
                        resposta = "NO es possible procedir amb la devolució ja que no existeix un registre d'aquesta compra"
                    else:
                        eliminarRegistreCerca(idCompra)
                        preu = str(preu)
                        resposta = "Peticio ACCEPTADA. L'empresa transportista recollirà el producte en el mateix lloc que l'entrega en un plaç màxim de 3 dies. Es procedirà a fer un reembolsament de " + preu

                        recGraph = Graph()
                        recGraph.bind('req', REQ)
                        rec_obj = agn['recomanacio']
                        recGraph.add((rec_obj, RDF.type,
                                      REQ.PeticioTransferenciaAClient))
                        recGraph.add((rec_obj, REQ.diners, Literal(preu)))

                        print("Preparant comunicacio amb Tresorer...")

                        missatgeEnviament = build_message(
                            recGraph,
                            perf=ACL.request,
                            sender=PlataformaAgent.uri,
                            msgcnt=0,
                            receiver=AgentTesorer.uri,
                            content=rec_obj)
                        response = send_message(missatgeEnviament,
                                                AgentTesorer.address)
                else:
                    resposta = "NO es possible procedir amb la devolució, el període màxim per a la devolució és de 15 dies."

                contentDev = Graph()
                contentDev.bind('req', REQ)
                devo_obj = agn['dev']
                contentDev.add((devo_obj, RDF.type, REQ.RespostaDevolucio))
                contentDev.add((devo_obj, REQ.respostaDev, Literal(resposta)))

                print('Resposta devolucio preparada per enviar')

                gr = build_message(contentDev,
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
            elif action == REQ.PeticioIniciarConnexio:
                iniC = gm.value(subject=content, predicate=REQ.iniciar)

                #                global connexiolientIniciada
                if iniC:
                    connexioClientIniciada.value = 1
                print('ESTAT DE CONNEXIO: ', connexioClientIniciada.value)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)

                print("Hem rebut diners: ", diners)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 10
0
def comunicacion():
    
    """
    Entrypoint de comunicacion
    """
    def getProductes():
        global mss_cnt
        #Obtenir parametres de cerca (filtre + keyword)
        content = msgdic['content']
        print(content)
        filters_obj = gm.value(subject=content, predicate=REQ.Filters)
        print(filters_obj)
        categoria_filter = gm.value(subject=filters_obj, predicate=REQ.Categoria)
        nombre_filter = gm.value(subject=filters_obj, predicate=REQ.Nombre)
        precio_filter = gm.value(subject=filters_obj, predicate=REQ.Precio)
        marca_filter = gm.value(subject=filters_obj, predicate=REQ.TieneMarca)
        
        g=Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        query = """
              SELECT ?nombre ?precio ?nombreMarca ?categoria
              WHERE {
              ?a rdf:type ?categoria .
              ?a PrOntPr:nombre ?nombre .
              ?a PrOntPr:precio ?precio .
              ?a PrOntPr:tieneMarca ?b .
              ?b PrOntPr:nombre ?nombreMarca .
              }
              """
        qres = g.query(query, initNs = {'PrOnt': PrOnt, 'PrOntPr': PrOntPr, 'PrOntRes' : PrOntRes})  
            
        
        gresult = Graph()
        gresult.bind('req', REQ)
        cerca_obj = agn['cerca']
        xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
        result_properties = {'Marca': 's',
                          'Precio': 'i',
                          'Peso': 'f',
                          'Categoria': 's',
                          'Nombre': 's'}
        for prop in result_properties:
            if result_properties[prop] in ['s', 'i', 'f']:
                gresult.add((REQ[prop], RDF.type, OWL.DatatypeProperty))
                gresult.add((REQ[prop], RDFS.range, xsddatatypes[result_properties[prop]]))
            else:
                gresult.add((REQ[prop], RDF.type, OWL.ObjectProperty))
                gresult.add((REQ[prop], RDFS.range, REQ[result_properties[prop]]))
        
        gresult.add((REQ.Result, RDF.type, OWL.Class))
        for row in qres:
            result_obj = REQ[row['nombre']]
            count = 0
            i = 0
            while(i < 4):
                product_pr = row[i]
                if (i == 0):
                    if (nombre_filter != None):
                        if (nombre_filter.lower() in product_pr.lower()):
                            count += 1
                    else:
                        count += 1
                if (i == 1):
                    if (precio_filter != None):
                        if (product_pr <= precio_filter):
                            count += 1
                    else:
                        count += 1
                if (i == 2):
                    if (marca_filter != None):
                        if (marca_filter.lower() in product_pr.lower()):
                            count += 1
                    else:
                        count += 1
                if (i == 3):
                    if (categoria_filter != None):
                        categoriaURI = urlparse(row['categoria']).path
                        categoria = PurePosixPath(categoriaURI).parts[2]
                        if (categoria_filter.lower() in categoria.lower()):
                            count += 1
                    else:
                        count += 1
                        
                i += 1
            
            if (count == 4):
                #print(row[0], row[1], row[2], row[3])
                #t = term.URIRef(PrOntPr.nombre + "_" + row[0])
                #gresult.add((cerca_obj, REQ.Results, result_obj))
                gresult.add((result_obj, RDF.type, REQ.Result))
                gresult.add((result_obj, REQ['Nombre'], row[0]))
                gresult.add((result_obj, REQ['Precio'], row[1]))
                gresult.add((result_obj, REQ['Marca'], row[2]))
                gresult.add((result_obj, REQ['Categoria'], Literal(PurePosixPath(urlparse(row[3]).path).parts[2])))
            
                registrarCerca(row[0], row[2])
        
        return gresult
    
    global dsgraph
    global mss_cnt
        
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)
    
    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            
            #placeholder
            if action == REQ.PeticioCerca:
                logger.info('Processem la cerca')
                gr = getProductes()
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 11
0
def comunicacion():
    
    """
    Entrypoint de comunicacion
    """
    
    global dsgraph
    global mss_cnt
        
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)
    
    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('-------------------La action es:', action)
#            print('La action hauria de ser:', REQ.PeticioCompra)
            
            #placeholder
            if action == REQ.ConfirmacioAmbFactura:
                content = msgdic['content']
                print('-------------------FACTURA--------------------')
                nombreProd = gm.value(subject=content, predicate=REQ.nomP)
                preuProd = gm.value(subject=content, predicate=REQ.preuProd)
                preuEnv = gm.value(subject=content, predicate=REQ.preuEnviament)
                preuTotal = gm.value(subject=content, predicate=REQ.preuTotal)
                nomEmpresa = gm.value(subject=content, predicate=REQ.nomEmpresa)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                print('NomProducte:',nombreProd)
                print('PreuEnviament:',preuEnv)
                print('PreuProducte:',preuProd)
                print('PreuTotal:',preuTotal)
                print('NomEmpresa:',nomEmpresa)
                print('idCompra:', idCompra)
                print('FinalitzemPeticioCompra')
                
                print("Proces pagament")
                consolaEnUs.value = 1
                compte = ""
                compte = input("Introdueix el teu compte")
                while compte == "":
                    compte = input("Introdueix un compte vàlid")
                
                consolaEnUs.value = 0
                
                conGraph = Graph()
                conGraph.bind('req', REQ)
                con_obj = agn['transferencia']
                conGraph.add((con_obj, RDF.type, REQ.PeticioTransferenciaAPlataforma)) 
                conGraph.add((con_obj, REQ.diners, Literal(preuTotal)))
                conGraph.add((con_obj, REQ.compte, Literal(compte)))
                conGraph.add((con_obj, REQ.np, Literal(nombreProd)))
        
                missatgeEnviament = build_message(conGraph,perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=AgentTesorer.uri, content=con_obj)
                response = send_message(missatgeEnviament, AgentTesorer.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
                
            elif action == REQ.PeticioRecomanacio:
                content = msgdic['content']
                consolaEnUs.value = 1
                print('-------------------RECOMANACIO--------------------')
                nombreProd = gm.value(subject=content, predicate=REQ.prod)
                print("Potser t'interessa el producte " + str(nombreProd))
                consolaEnUs.value = 0
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
            
            elif action == REQ.PeticioFeedback:
                content = msgdic['content']
                pucObtenirFeedback = gm.value(subject=content, predicate=REQ.obtenirFeedcack)
                pucObtenirFeedback = bool(pucObtenirFeedback)
                
                if pucObtenirFeedback == True:
                    print('-------------------FEEDBACK D\'USUARI--------------------')
                    print("p - Phone")
                    print("v - Blender")
                    print("c - Computer")
                    
                    consolaEnUs.value = 1
                    
                    var_marca = input("Introdueix la categoria que has comprat recentment")
                    while var_marca != "p" and var_marca != "v" and var_marca != "c":
                        var_marca = input("No es una marca. Introdueix una marca:")
                    
                    var_puntuacio = input("Introdueix una valoracio s, a, b")
                    while var_puntuacio != "s" and var_puntuacio != "a" and var_puntuacio != "b":
                        var_puntuacio = input("Valor invalid: Introdueix la puntuacio una altre vegada:")
                    
                    consolaEnUs.value = 0
                    
                    if var_marca == "p":
                        var_marca = "Phone"
                    elif var_marca == "v":
                        var_marca = "Blender"
                    else:
                        var_marca = "Computer"
                        
                    punts = 0
                        
                    if var_puntuacio == "s":
                        punts = 10
                    elif var_puntuacio == "a":
                        punts = 5
                    else:
                        punts = 0
                        
                    contentFeed = Graph()
                    contentFeed.bind('req', REQ)
                    feed_obj = agn['feed']
                    contentFeed.add((feed_obj, RDF.type, REQ.RespostaFeedback))
                    contentFeed.add((feed_obj, REQ.marca, Literal(var_marca)))
                    contentFeed.add((feed_obj, REQ.puntuacio, Literal(punts)))
                    
                    gr = build_message(contentFeed,
                           ACL['inform-done'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
                    
            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                        
                print("Hem rebut diners: ", diners)
    
                gr = build_message(Graph(),
                       ACL['inform-done'],
                       sender=Client.uri,
                       msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
#                return gr.serialize(format='xml')
    mss_cnt += 1
    return gr.serialize(format='xml')