예제 #1
0
파일: gremlin.go 프로젝트: mestery/skydive
func (g GremlinBackend) SetMetadata(i interface{}, k string, v interface{}) bool {
	var e graphElement
	var elType string

	switch i.(type) {
	case *Node:
		e = i.(*Node).graphElement
		elType = "V"
	case *Edge:
		e = i.(*Edge).graphElement
		elType = "V"
	}

	properties, err := idToPropertiesString(e.ID)
	if err != nil {
		logging.GetLogger().Error("Error while retrieving a Node: %s", err.Error())
		return false
	}

	encoder := gremlin.GremlinPropertiesEncoder{}
	encoder.EncodeKVPair(k, v)

	query := "g." + elType + "().has(" + properties + ").property(" + encoder.String() + ")"

	_, err = g.client.Query(query)
	if err != nil {
		logging.GetLogger().Error("Gremlin query error: %s, %s", query, err.Error())
		return false
	}

	return true
}
예제 #2
0
파일: gremlin.go 프로젝트: mestery/skydive
func idToPropertiesString(i Identifier) (string, error) {
	properties := map[string]interface{}{
		"_ID": string(i),
	}

	encoder := gremlin.GremlinPropertiesEncoder{}
	err := encoder.Encode(properties)
	if err != nil {
		logging.GetLogger().Error("Error while retrieving a Node: %s", err.Error())
		return "", err
	}

	return encoder.String(), nil
}