blob: 0aa79cd70c9fd7ebaba4a7877069eb853dbdfd51 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
namespace Usergrid.Sdk.Model
{
public class NotificationRecipients : INotificationRecipients
{
string _userName;
string _userUuid;
string _userQuery;
string _groupPath;
string _groupQuery;
string _deviceName;
string _deviceQuery;
public INotificationRecipients AddUserWithName (string name)
{
if (_userUuid != null)
throw new ArgumentException("User name and uuid can not be added at the same time.");
_userName = name;
return this;
}
public INotificationRecipients AddUserWithUuid (string uuid)
{
if (_userName != null)
throw new ArgumentException ("User name and uuid can not be added at the same time.");
_userUuid = uuid;
return this;
}
public INotificationRecipients AddUserWithQuery (string query)
{
if (_userName != null || _userUuid != null)
throw new ArgumentException("User query can not be added together with user name or uuid.");
_userQuery = query;
return this;
}
public INotificationRecipients AddGroupWithPath (string path)
{
if (_groupQuery != null)
throw new ArgumentException("Group path and query can not be added at the same time.");
_groupPath = path;
return this;
}
public INotificationRecipients AddGroupWithQuery (string query)
{
if (_groupPath != null)
throw new ArgumentException("Group path and query can not be added at the same time.");
_groupQuery = query;
return this;
}
public INotificationRecipients AddDeviceWithName (string name)
{
if (_deviceQuery != null)
throw new ArgumentException("Device name and query can not be added at the same time.");
_deviceName = name;
return this;
}
public INotificationRecipients AddDeviceWithQuery (string query)
{
if (_deviceName != null)
throw new ArgumentException("Device name and query can not be added at the same time.");
_deviceQuery = query;
return this;
}
public string BuildQuery()
{
var query = string.Empty;
if (_groupPath != null)
{
query += string.Format ("/groups/{0}", _groupPath);
}
if (_groupQuery != null)
{
query += string.Format ("/groups;ql={0}", _groupQuery);
}
if (_userName != null)
{
query += string.Format ("/users/{0}", _userName);
}
if (_userUuid != null)
{
query += string.Format ("/users/{0}", _userUuid);
}
if (_userQuery != null)
{
query += string.Format ("/users;ql={0}", _userQuery);
}
if (_deviceName != null)
{
query += string.Format ("/devices/{0}", _deviceName);
}
if (_deviceQuery != null)
{
query += string.Format ("/devices;ql={0}", _deviceQuery);
}
query += "/notifications";
return query;
}
}
}