#import "enunciate-common.h"

@class REDBACK_REST_APINS0LdapGroupMapping;
@class REDBACK_REST_APINS0LoginRequest;
@class REDBACK_REST_APINS0Permission;
@class REDBACK_REST_APINS0ResetPasswordRequest;
@class REDBACK_REST_APINS0Role;
@class REDBACK_REST_APINS0StringList;
@class REDBACK_REST_APINS0UserRegistrationRequest;
@class REDBACK_REST_APINS0User;
@class REDBACK_REST_APINS0RoleTemplate;
@class REDBACK_REST_APINS0Resource;
@class REDBACK_REST_APINS0RegistrationKey;
@class REDBACK_REST_APINS0Operation;
@class REDBACK_REST_APINS0LdapGroupMappingUpdateRequest;
@class REDBACK_REST_APINS0ApplicationRoles;
@class REDBACK_REST_APINS0Application;

#ifndef DEF_REDBACK_REST_APINS0LdapGroupMapping_H
#define DEF_REDBACK_REST_APINS0LdapGroupMapping_H

/**
 *  @author Olivier Lamy
 @since 2.1

 */
@interface REDBACK_REST_APINS0LdapGroupMapping : NSObject <EnunciateXML>
{
  @private
    NSString *_group;
    NSArray *_roleNames;
}

/**
 * (no documentation provided)
 */
- (NSString *) group;

/**
 * (no documentation provided)
 */
- (void) setGroup: (NSString *) newGroup;

/**
 * (no documentation provided)
 */
- (NSArray *) roleNames;

/**
 * (no documentation provided)
 */
- (void) setRoleNames: (NSArray *) newRoleNames;
@end /* interface REDBACK_REST_APINS0LdapGroupMapping */

#endif /* DEF_REDBACK_REST_APINS0LdapGroupMapping_H */
#ifndef DEF_REDBACK_REST_APINS0LoginRequest_H
#define DEF_REDBACK_REST_APINS0LoginRequest_H

/**
 *  @author Olivier Lamy
 @since 2.0

 */
@interface REDBACK_REST_APINS0LoginRequest : NSObject <EnunciateXML>
{
  @private
    NSString *_username;
    NSString *_password;
}

/**
 * (no documentation provided)
 */
- (NSString *) username;

/**
 * (no documentation provided)
 */
- (void) setUsername: (NSString *) newUsername;

/**
 * (no documentation provided)
 */
- (NSString *) password;

/**
 * (no documentation provided)
 */
- (void) setPassword: (NSString *) newPassword;
@end /* interface REDBACK_REST_APINS0LoginRequest */

#endif /* DEF_REDBACK_REST_APINS0LoginRequest_H */
#ifndef DEF_REDBACK_REST_APINS0Permission_H
#define DEF_REDBACK_REST_APINS0Permission_H

/**
 *  @author Olivier Lamy
 @since 1.4

 */
@interface REDBACK_REST_APINS0Permission : NSObject <EnunciateXML>
{
  @private
    NSString *_name;
    REDBACK_REST_APINS0Operation *_operation;
    REDBACK_REST_APINS0Resource *_resource;
}

/**
 * (no documentation provided)
 */
- (NSString *) name;

/**
 * (no documentation provided)
 */
- (void) setName: (NSString *) newName;

/**
 * (no documentation provided)
 */
- (REDBACK_REST_APINS0Operation *) operation;

/**
 * (no documentation provided)
 */
- (void) setOperation: (REDBACK_REST_APINS0Operation *) newOperation;

/**
 * (no documentation provided)
 */
- (REDBACK_REST_APINS0Resource *) resource;

/**
 * (no documentation provided)
 */
- (void) setResource: (REDBACK_REST_APINS0Resource *) newResource;
@end /* interface REDBACK_REST_APINS0Permission */

#endif /* DEF_REDBACK_REST_APINS0Permission_H */
#ifndef DEF_REDBACK_REST_APINS0ResetPasswordRequest_H
#define DEF_REDBACK_REST_APINS0ResetPasswordRequest_H

/**
 *  @author Olivier Lamy

 */
@interface REDBACK_REST_APINS0ResetPasswordRequest : NSObject
{
  @private
    NSString *_username;
    NSString *_applicationUrl;
}

/**
 * (no documentation provided)
 */
- (NSString *) username;

/**
 * (no documentation provided)
 */
- (void) setUsername: (NSString *) newUsername;

/**
 * (no documentation provided)
 */
- (NSString *) applicationUrl;

/**
 * (no documentation provided)
 */
- (void) setApplicationUrl: (NSString *) newApplicationUrl;
@end /* interface REDBACK_REST_APINS0ResetPasswordRequest */

#endif /* DEF_REDBACK_REST_APINS0ResetPasswordRequest_H */
#ifndef DEF_REDBACK_REST_APINS0Role_H
#define DEF_REDBACK_REST_APINS0Role_H

/**
 *  @author Olivier Lamy
 @since 1.4

 */
@interface REDBACK_REST_APINS0Role : NSObject <EnunciateXML>
{
  @private
    NSString *_name;
    NSString *_description;
    BOOL _assignable;
    NSArray *_childRoleNames;
    NSArray *_permissions;
    BOOL _permanent;
    NSArray *_parentRoleNames;
    NSArray *_parentsRolesUsers;
    NSArray *_users;
    NSArray *_otherUsers;
    NSArray *_removedUsers;
}

/**
 * (no documentation provided)
 */
- (NSString *) name;

/**
 * (no documentation provided)
 */
- (void) setName: (NSString *) newName;

/**
 * (no documentation provided)
 */
- (NSString *) description;

/**
 * (no documentation provided)
 */
- (void) setDescription: (NSString *) newDescription;

/**
 * (no documentation provided)
 */
- (BOOL) assignable;

/**
 * (no documentation provided)
 */
- (void) setAssignable: (BOOL) newAssignable;

/**
 * (no documentation provided)
 */
- (NSArray *) childRoleNames;

/**
 * (no documentation provided)
 */
- (void) setChildRoleNames: (NSArray *) newChildRoleNames;

/**
 * (no documentation provided)
 */
- (NSArray *) permissions;

/**
 * (no documentation provided)
 */
- (void) setPermissions: (NSArray *) newPermissions;

/**
 * (no documentation provided)
 */
- (BOOL) permanent;

/**
 * (no documentation provided)
 */
- (void) setPermanent: (BOOL) newPermanent;

/**
 * (no documentation provided)
 */
- (NSArray *) parentRoleNames;

/**
 * (no documentation provided)
 */
- (void) setParentRoleNames: (NSArray *) newParentRoleNames;

/**
 * (no documentation provided)
 */
- (NSArray *) parentsRolesUsers;

/**
 * (no documentation provided)
 */
- (void) setParentsRolesUsers: (NSArray *) newParentsRolesUsers;

/**
 * (no documentation provided)
 */
- (NSArray *) users;

/**
 * (no documentation provided)
 */
- (void) setUsers: (NSArray *) newUsers;

/**
 * (no documentation provided)
 */
- (NSArray *) otherUsers;

/**
 * (no documentation provided)
 */
- (void) setOtherUsers: (NSArray *) newOtherUsers;

/**
 * (no documentation provided)
 */
- (NSArray *) removedUsers;

/**
 * (no documentation provided)
 */
- (void) setRemovedUsers: (NSArray *) newRemovedUsers;
@end /* interface REDBACK_REST_APINS0Role */

#endif /* DEF_REDBACK_REST_APINS0Role_H */
#ifndef DEF_REDBACK_REST_APINS0StringList_H
#define DEF_REDBACK_REST_APINS0StringList_H

/**
 *  jaxrs fail to return List {@link String} so use this contains for rest services returning that

 @author Olivier Lamy
 @since 2.1

 */
@interface REDBACK_REST_APINS0StringList : NSObject <EnunciateXML>
{
  @private
    NSArray *_strings;
}

/**
 * (no documentation provided)
 */
- (NSArray *) strings;

/**
 * (no documentation provided)
 */
- (void) setStrings: (NSArray *) newStrings;
@end /* interface REDBACK_REST_APINS0StringList */

#endif /* DEF_REDBACK_REST_APINS0StringList_H */
#ifndef DEF_REDBACK_REST_APINS0UserRegistrationRequest_H
#define DEF_REDBACK_REST_APINS0UserRegistrationRequest_H

/**
 *  @author Olivier Lamy
 @since 2.0

 */
@interface REDBACK_REST_APINS0UserRegistrationRequest : NSObject <EnunciateXML>
{
  @private
    REDBACK_REST_APINS0User *_user;
    NSString *_applicationUrl;
}

/**
 * (no documentation provided)
 */
- (REDBACK_REST_APINS0User *) user;

/**
 * (no documentation provided)
 */
- (void) setUser: (REDBACK_REST_APINS0User *) newUser;

/**
 * (no documentation provided)
 */
- (NSString *) applicationUrl;

/**
 * (no documentation provided)
 */
- (void) setApplicationUrl: (NSString *) newApplicationUrl;
@end /* interface REDBACK_REST_APINS0UserRegistrationRequest */

#endif /* DEF_REDBACK_REST_APINS0UserRegistrationRequest_H */
#ifndef DEF_REDBACK_REST_APINS0User_H
#define DEF_REDBACK_REST_APINS0User_H

/**
 * (no documentation provided)
 */
@interface REDBACK_REST_APINS0User : NSObject <EnunciateXML>
{
  @private
    NSString *_username;
    NSString *_fullName;
    NSString *_email;
    BOOL _validated;
    BOOL _locked;
    NSString *_password;
    BOOL _passwordChangeRequired;
    BOOL _permanent;
    NSString *_confirmPassword;
    NSString *_timestampAccountCreation;
    NSString *_timestampLastLogin;
    NSString *_timestampLastPasswordChange;
    NSString *_previousPassword;
    NSArray *_assignedRoles;
    BOOL _readOnly;
    NSString *_userManagerId;
}

/**
 * (no documentation provided)
 */
- (NSString *) username;

/**
 * (no documentation provided)
 */
- (void) setUsername: (NSString *) newUsername;

/**
 * (no documentation provided)
 */
- (NSString *) fullName;

/**
 * (no documentation provided)
 */
- (void) setFullName: (NSString *) newFullName;

/**
 * (no documentation provided)
 */
- (NSString *) email;

/**
 * (no documentation provided)
 */
- (void) setEmail: (NSString *) newEmail;

/**
 * (no documentation provided)
 */
- (BOOL) validated;

/**
 * (no documentation provided)
 */
- (void) setValidated: (BOOL) newValidated;

/**
 * (no documentation provided)
 */
- (BOOL) locked;

/**
 * (no documentation provided)
 */
- (void) setLocked: (BOOL) newLocked;

/**
 * (no documentation provided)
 */
- (NSString *) password;

/**
 * (no documentation provided)
 */
- (void) setPassword: (NSString *) newPassword;

/**
 * (no documentation provided)
 */
- (BOOL) passwordChangeRequired;

/**
 * (no documentation provided)
 */
- (void) setPasswordChangeRequired: (BOOL) newPasswordChangeRequired;

/**
 * (no documentation provided)
 */
- (BOOL) permanent;

/**
 * (no documentation provided)
 */
- (void) setPermanent: (BOOL) newPermanent;

/**
 * (no documentation provided)
 */
- (NSString *) confirmPassword;

/**
 * (no documentation provided)
 */
- (void) setConfirmPassword: (NSString *) newConfirmPassword;

/**
 * (no documentation provided)
 */
- (NSString *) timestampAccountCreation;

/**
 * (no documentation provided)
 */
- (void) setTimestampAccountCreation: (NSString *) newTimestampAccountCreation;

/**
 * (no documentation provided)
 */
- (NSString *) timestampLastLogin;

/**
 * (no documentation provided)
 */
- (void) setTimestampLastLogin: (NSString *) newTimestampLastLogin;

/**
 * (no documentation provided)
 */
- (NSString *) timestampLastPasswordChange;

/**
 * (no documentation provided)
 */
- (void) setTimestampLastPasswordChange: (NSString *) newTimestampLastPasswordChange;

/**
 * (no documentation provided)
 */
- (NSString *) previousPassword;

/**
 * (no documentation provided)
 */
- (void) setPreviousPassword: (NSString *) newPreviousPassword;

/**
 * (no documentation provided)
 */
- (NSArray *) assignedRoles;

/**
 * (no documentation provided)
 */
- (void) setAssignedRoles: (NSArray *) newAssignedRoles;

/**
 * (no documentation provided)
 */
- (BOOL) readOnly;

/**
 * (no documentation provided)
 */
- (void) setReadOnly: (BOOL) newReadOnly;

/**
 * (no documentation provided)
 */
- (NSString *) userManagerId;

/**
 * (no documentation provided)
 */
- (void) setUserManagerId: (NSString *) newUserManagerId;
@end /* interface REDBACK_REST_APINS0User */

#endif /* DEF_REDBACK_REST_APINS0User_H */
#ifndef DEF_REDBACK_REST_APINS0RoleTemplate_H
#define DEF_REDBACK_REST_APINS0RoleTemplate_H

/**
 *  @author Olivier Lamy
 @since 2.0

 */
@interface REDBACK_REST_APINS0RoleTemplate : NSObject <EnunciateXML>
{
  @private
    NSString *_identifier;
    NSString *_namePrefix;
    NSString *_delimiter;
    NSString *_description;
    NSString *_resource;
    NSArray *_roles;
}

/**
 * (no documentation provided)
 */
- (NSString *) identifier;

/**
 * (no documentation provided)
 */
- (void) setIdentifier: (NSString *) newIdentifier;

/**
 * (no documentation provided)
 */
- (NSString *) namePrefix;

/**
 * (no documentation provided)
 */
- (void) setNamePrefix: (NSString *) newNamePrefix;

/**
 * (no documentation provided)
 */
- (NSString *) delimiter;

/**
 * (no documentation provided)
 */
- (void) setDelimiter: (NSString *) newDelimiter;

/**
 * (no documentation provided)
 */
- (NSString *) description;

/**
 * (no documentation provided)
 */
- (void) setDescription: (NSString *) newDescription;

/**
 * (no documentation provided)
 */
- (NSString *) resource;

/**
 * (no documentation provided)
 */
- (void) setResource: (NSString *) newResource;

/**
 * (no documentation provided)
 */
- (NSArray *) roles;

/**
 * (no documentation provided)
 */
- (void) setRoles: (NSArray *) newRoles;
@end /* interface REDBACK_REST_APINS0RoleTemplate */

#endif /* DEF_REDBACK_REST_APINS0RoleTemplate_H */
#ifndef DEF_REDBACK_REST_APINS0Resource_H
#define DEF_REDBACK_REST_APINS0Resource_H

/**
 *  @author Olivier Lamy
 @since 1.4

 */
@interface REDBACK_REST_APINS0Resource : NSObject <EnunciateXML>
{
  @private
    NSString *_identifier;
    BOOL _pattern;
    BOOL _permanent;
}

/**
 * (no documentation provided)
 */
- (NSString *) identifier;

/**
 * (no documentation provided)
 */
- (void) setIdentifier: (NSString *) newIdentifier;

/**
 * (no documentation provided)
 */
- (BOOL) pattern;

/**
 * (no documentation provided)
 */
- (void) setPattern: (BOOL) newPattern;

/**
 * (no documentation provided)
 */
- (BOOL) permanent;

/**
 * (no documentation provided)
 */
- (void) setPermanent: (BOOL) newPermanent;
@end /* interface REDBACK_REST_APINS0Resource */

#endif /* DEF_REDBACK_REST_APINS0Resource_H */
#ifndef DEF_REDBACK_REST_APINS0RegistrationKey_H
#define DEF_REDBACK_REST_APINS0RegistrationKey_H

/**
 *  @author Olivier Lamy
 @since 1.4

 */
@interface REDBACK_REST_APINS0RegistrationKey : NSObject <EnunciateXML>
{
  @private
    NSString *_key;
}

/**
 * (no documentation provided)
 */
- (NSString *) key;

/**
 * (no documentation provided)
 */
- (void) setKey: (NSString *) newKey;
@end /* interface REDBACK_REST_APINS0RegistrationKey */

#endif /* DEF_REDBACK_REST_APINS0RegistrationKey_H */
#ifndef DEF_REDBACK_REST_APINS0Operation_H
#define DEF_REDBACK_REST_APINS0Operation_H

/**
 *  @author Olivier Lamy
 @since 1.4

 */
@interface REDBACK_REST_APINS0Operation : NSObject <EnunciateXML>
{
  @private
    NSString *_name;
    NSString *_description;
    BOOL _permanent;
}

/**
 * (no documentation provided)
 */
- (NSString *) name;

/**
 * (no documentation provided)
 */
- (void) setName: (NSString *) newName;

/**
 * (no documentation provided)
 */
- (NSString *) description;

/**
 * (no documentation provided)
 */
- (void) setDescription: (NSString *) newDescription;

/**
 * (no documentation provided)
 */
- (BOOL) permanent;

/**
 * (no documentation provided)
 */
- (void) setPermanent: (BOOL) newPermanent;
@end /* interface REDBACK_REST_APINS0Operation */

#endif /* DEF_REDBACK_REST_APINS0Operation_H */
#ifndef DEF_REDBACK_REST_APINS0LdapGroupMappingUpdateRequest_H
#define DEF_REDBACK_REST_APINS0LdapGroupMappingUpdateRequest_H

/**
 *  @author Olivier Lamy

 */
@interface REDBACK_REST_APINS0LdapGroupMappingUpdateRequest : NSObject <EnunciateXML>
{
  @private
    NSArray *_ldapGroupMapping;
}

/**
 * (no documentation provided)
 */
- (NSArray *) ldapGroupMapping;

/**
 * (no documentation provided)
 */
- (void) setLdapGroupMapping: (NSArray *) newLdapGroupMapping;
@end /* interface REDBACK_REST_APINS0LdapGroupMappingUpdateRequest */

#endif /* DEF_REDBACK_REST_APINS0LdapGroupMappingUpdateRequest_H */
#ifndef DEF_REDBACK_REST_APINS0ApplicationRoles_H
#define DEF_REDBACK_REST_APINS0ApplicationRoles_H

/**
 *  @author Olivier Lamy
 @since 2.0

 */
@interface REDBACK_REST_APINS0ApplicationRoles : NSObject <EnunciateXML>
{
  @private
    NSString *_name;
    NSString *_description;
    NSArray *_globalRoles;
    NSArray *_roleTemplates;
    NSArray *_resources;
}

/**
 * (no documentation provided)
 */
- (NSString *) name;

/**
 * (no documentation provided)
 */
- (void) setName: (NSString *) newName;

/**
 * (no documentation provided)
 */
- (NSString *) description;

/**
 * (no documentation provided)
 */
- (void) setDescription: (NSString *) newDescription;

/**
 * (no documentation provided)
 */
- (NSArray *) globalRoles;

/**
 * (no documentation provided)
 */
- (void) setGlobalRoles: (NSArray *) newGlobalRoles;

/**
 * (no documentation provided)
 */
- (NSArray *) roleTemplates;

/**
 * (no documentation provided)
 */
- (void) setRoleTemplates: (NSArray *) newRoleTemplates;

/**
 * (no documentation provided)
 */
- (NSArray *) resources;

/**
 * (no documentation provided)
 */
- (void) setResources: (NSArray *) newResources;
@end /* interface REDBACK_REST_APINS0ApplicationRoles */

#endif /* DEF_REDBACK_REST_APINS0ApplicationRoles_H */
#ifndef DEF_REDBACK_REST_APINS0Application_H
#define DEF_REDBACK_REST_APINS0Application_H

/**
 *  @author Olivier Lamy

 */
@interface REDBACK_REST_APINS0Application : NSObject <EnunciateXML>
{
  @private
    NSString *_version;
    NSString *_identifier;
    NSString *_description;
    NSString *_longDescription;
}

/**
 * (no documentation provided)
 */
- (NSString *) version;

/**
 * (no documentation provided)
 */
- (void) setVersion: (NSString *) newVersion;

/**
 * (no documentation provided)
 */
- (NSString *) identifier;

/**
 * (no documentation provided)
 */
- (void) setIdentifier: (NSString *) newIdentifier;

/**
 * (no documentation provided)
 */
- (NSString *) description;

/**
 * (no documentation provided)
 */
- (void) setDescription: (NSString *) newDescription;

/**
 * (no documentation provided)
 */
- (NSString *) longDescription;

/**
 * (no documentation provided)
 */
- (void) setLongDescription: (NSString *) newLongDescription;
@end /* interface REDBACK_REST_APINS0Application */

#endif /* DEF_REDBACK_REST_APINS0Application_H */
