package org.societies.api.internal.css.management;
import java.util.concurrent.Future;
import java.util.List;
import org.societies.api.schema.cssmanagement.CssAdvertisementRecordDetailed;
import org.societies.api.schema.cssmanagement.CssInterfaceResult;
import org.societies.api.schema.cssmanagement.CssRecord;
import org.societies.api.schema.cssmanagement.CssRequest;
import org.societies.api.schema.css.directory.CssAdvertisementRecord;
import org.societies.api.schema.servicelifecycle.model.Service;
/**
* @deprecated see org.societies.api.internal.css.ICSSInternalManager
*
* This interface forms the basis of the CSSManager, a component that will exist
* on all nodes. Its main tasks are:
*
* 1. Allow a user to register or unregister a CSS 2. Allow a user to login into
* a CSS 3. Allow a user to logout out of a CSS 3. Add and remove nodes that
* make up a CSS 4. Get the current CSS profile 5. Allow the status of a device
* to be changed 6. Synchronise profile data 7. Modify the CSS profile
*
* This interface will be implemented for rich and cloud nodes. This interface
* is used when calling the CSSManager on a different node.
*/
public interface ICSSLocalManager {
/**
* Register with chosen Domain Server
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> registerXMPPServer(CssRecord profile);
/**
* Unregister with chosen Domain Server
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> unregisterXMPPServer(CssRecord profile);
/**
* Login with chosen Domain server
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> loginXMPPServer(CssRecord profile);
/**
* Logout from chosen Domain server
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> logoutXMPPServer(CssRecord profile);
/**
* Login a user to a CSS.
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> loginCSS(CssRecord profile);
/**
* Logout the user from a CSS
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> logoutCSS(CssRecord profile);
/**
* Register a CSS
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> registerCSS(CssRecord profile);
/**
* Unregister the CSS TODO Is a CSS deleted or made inactive
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> unregisterCSS(CssRecord profile);
/**
* Register a device(s) with a CSS
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> registerCSSNode(CssRecord profile);
/**
* Unregister a device(s) from a CSS
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> unregisterCSSNode(CssRecord profile);
/**
* Get the CSS Profile. This operation will retrieve the local CSS Profile.
* If none exists or the local cache is deemed to have expired this will
* result in a synchronisation with the cloud node.
*
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> getCssRecord();
/**
* Modify the CSS Profile
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> modifyCssRecord(CssRecord profile);
/**
* Change the status a CSS device
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> changeCSSNodeStatus(CssRecord profile);
/**
* Synchronise the CSS profile. The CSS cloud node's current profile is
* synchronised with the local device's cached version
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> synchProfile(CssRecord profile);
/**
* Set the presence status of the user
*
* @param profile
* @return Future<CssInterfaceResult>
*/
Future<CssInterfaceResult> setPresenceStatus(CssRecord profile);
/**
* Maria - Temporary adding 5 functions below to showcase system
* functionality
*/
/**
* adds advertisement records to CssDirectory
*
* @param record
*/
void addAdvertisementRecord(CssAdvertisementRecord record);
/**
* deletes advertisement record from CssDirectory
*
* @param record
*/
void deleteAdvertisementRecord(CssAdvertisementRecord record);
/**
* updates advertisement records to CssDirectory
*
* @param currentRecord
* , newRecord
*/
void updateAdvertisementRecord(CssAdvertisementRecord currentRecord,
CssAdvertisementRecord updatedRecord);
/**
* returns all advertisement records in CssDirectory
*
* @return Future<List<CssAdvertisementRecord>>
*/
Future<List<CssAdvertisementRecord>> findAllCssAdvertisementRecords();
/**
* finds all services for advertised Css's via service discovery
*
* @param listCssAds
* @return Future<List<Service>>
*/
Future<List<Service>> findAllCssServiceDetails(
List<CssAdvertisementRecord> listCssAds);
/**
* Return a list of people who I have asked to my friend
* @return
*/
Future<List<CssRequest>> findAllCssFriendRequests();
/**
* Return list of requests to be my friend
* @return
*/
Future<List<CssRequest>> findAllCssRequests();
/* Add update a reuest sent to join your css */
void updateCssRequest(CssRequest request);
/* send a request to remote css to join */
void sendCssFriendRequest(String friendCssId);
/* Called by remote css is response t your request to join*/
void updateCssFriendRequest(CssRequest request);
Future<List<CssAdvertisementRecordDetailed>> getCssAdvertisementRecordsFull() ;
/**
* Returns the current Node Type
* i.e. "CSS_CLOUD", "CSS_RICH" or "CSS_LIGHT"
*
* @return Future<String>
*/
Future<String> getthisNodeType(String nodeId);
public void setNodeType(CssRecord cssrecord, String nodeId, int nodestatus, int nodetype, String cssNodeMAC, String interactable);
public void removeNode(CssRecord cssrecord, String nodeId);
/**
* Returns a list of Css id's of people who we have accepted/have accepted friend requests
*/
public Future<List<CssAdvertisementRecord>> getCssFriends();
/**
* Return a list of SNS inspired friends
* @return
*/
public Future<List<CssAdvertisementRecord>> suggestedFriends();
/**
*
* @return
*/
public Future<List<CssAdvertisementRecord>> getFriendRequests();
/**
* Accept
* @param request
*/
public void acceptCssFriendRequest(CssRequest request);
/**
* Decline
* @param request
*/
public void declineCssFriendRequest(CssRequest request);
}