SEBA-738 implement SetDirty

Change-Id: Ia46096faaed7c45f72f873044f8e18b3a1a091b3
diff --git a/commands/orm.go b/commands/orm.go
index a817ea5..5938698 100644
--- a/commands/orm.go
+++ b/commands/orm.go
@@ -33,10 +33,22 @@
 )
 
 // Flags for calling the *WithRetry methods
-const GM_QUIET = 1
-const GM_UNTIL_FOUND = 2
-const GM_UNTIL_ENACTED = 4
-const GM_UNTIL_STATUS = 8
+const (
+	GM_QUIET         = 1
+	GM_UNTIL_FOUND   = 2
+	GM_UNTIL_ENACTED = 4
+	GM_UNTIL_STATUS  = 8
+)
+
+// Valid choices for FilterModels `Kind` argument
+const (
+	FILTER_DEFAULT    = "DEFAULT"
+	FILTER_ALL        = "ALL"
+	FILTER_DIRTY      = "SYNCHRONIZER_DIRTY_OBJECTS"
+	FILTER_DELETED    = "SYNCHRONIZER_DELETED_OBJECTS"
+	FILTER_DIRTYPOL   = "SYNCHRONIZER_DIRTY_POLICIES"
+	FILTER_DELETEDPOL = "SYNCHRONIZER_DELETED_POLICIES"
+)
 
 type QueryEventHandler struct {
 	RpcEventHandler
@@ -451,7 +463,7 @@
 //   queries is a map of <field_name> to <operator><query>
 //   For example,
 //     map[string]string{"name": "==mysite"}
-func FilterModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, queries map[string]string) ([]*dynamic.Message, error) {
+func FilterModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, kind string, queries map[string]string) ([]*dynamic.Message, error) {
 	ctx, cancel := context.WithTimeout(ctx, GlobalConfig.Grpc.Timeout)
 	defer cancel()
 
@@ -472,7 +484,7 @@
 		},
 		Elements: queries,
 		Model:    model_md,
-		Kind:     "DEFAULT",
+		Kind:     kind,
 	}
 	err = grpcurl.InvokeRPC(ctx, descriptor, conn, "xos.xos.Filter"+modelName, headers, h, h.GetParams)
 	if err != nil {
@@ -497,17 +509,17 @@
 }
 
 // Call ListModels or FilterModels as appropriate
-func ListOrFilterModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, queries map[string]string) ([]*dynamic.Message, error) {
-	if len(queries) == 0 {
+func ListOrFilterModels(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, kind string, queries map[string]string) ([]*dynamic.Message, error) {
+	if (len(queries) == 0) && (kind == FILTER_DEFAULT) {
 		return ListModels(ctx, conn, descriptor, modelName)
 	} else {
-		return FilterModels(ctx, conn, descriptor, modelName, queries)
+		return FilterModels(ctx, conn, descriptor, modelName, kind, queries)
 	}
 }
 
 // Get a model from XOS given a fieldName/fieldValue
 func FindModel(ctx context.Context, conn *grpc.ClientConn, descriptor grpcurl.DescriptorSource, modelName string, queries map[string]string) (*dynamic.Message, error) {
-	models, err := FilterModels(ctx, conn, descriptor, modelName, queries)
+	models, err := FilterModels(ctx, conn, descriptor, modelName, FILTER_DEFAULT, queries)
 	if err != nil {
 		return nil, err
 	}