/** * Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET * (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije * informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE * COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp., * INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM * ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC)) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.societies.webapp.controller; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.RequestScoped; import org.societies.api.internal.css.ICSSInternalManager; import org.societies.orchestration.communitylifecyclemanagementbean.Cis; import org.societies.webapp.controller.privacy.PrivacyPolicyUtils; import org.societies.webapp.models.CisInfo; import org.societies.webapp.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestPolicy; import javax.servlet.http.HttpSession; import java.lang.reflect.Field; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.activity.client.ActivityFeedClient; import org.societies.api.activity.IActivity; import org.societies.api.activity.IActivityFeed; import org.societies.api.cis.attributes.MembershipCriteria; import org.societies.api.cis.attributes.Rule; import org.societies.api.cis.attributes.Rule.OperationType; //import org.societies.api.cis.directory.ICisDirectory; import org.societies.api.cis.directory.ICisDirectoryRemote; import org.societies.api.cis.directory.ICisDirectoryCallback; import org.societies.api.cis.management.ICis; import org.societies.api.cis.management.ICisManager; import org.societies.api.cis.management.ICisManagerCallback; import org.societies.api.cis.management.ICisOwned; import org.societies.api.cis.management.ICisParticipant; import org.societies.api.cis.management.ICisRemote; import org.societies.api.comm.xmpp.interfaces.ICommManager; import org.societies.api.context.model.CtxAttributeTypes; import org.societies.api.css.directory.ICssDirectoryRemote; import org.societies.api.identity.IIdentity; import org.societies.api.identity.InvalidFormatException; import org.societies.api.identity.Requestor; import org.societies.api.identity.RequestorCis; import org.societies.api.identity.RequestorService; import org.societies.api.internal.privacytrust.privacyprotection.IPrivacyPolicyManager; import org.societies.api.internal.privacytrust.privacyprotection.model.listener.IPrivacyPolicyManagerListener; //import org.societies.api.privacytrust.privacy.model.privacypolicy.RequestPolicy; import org.societies.api.internal.privacytrust.privacyprotection.remote.IPrivacyPolicyManagerRemote; import org.societies.api.privacytrust.privacy.model.PrivacyException; //import org.societies.api.privacytrust.privacy.util.privacypolicy.PrivacyPolicyUtils; import org.societies.api.privacytrust.privacy.util.privacypolicy.RequestPolicyUtils; import org.societies.api.schema.activity.MarshaledActivity; import org.societies.api.schema.activityfeed.MarshaledActivityFeed; import org.societies.api.schema.cis.community.Community; import org.societies.api.schema.cis.community.CommunityMethods; import org.societies.api.schema.cis.community.Criteria; import org.societies.api.schema.cis.community.JoinResponse; import org.societies.api.schema.cis.community.LeaveResponse; import org.societies.api.schema.cis.community.MembershipCrit; import org.societies.api.schema.cis.community.Participant; import org.societies.api.schema.cis.community.WhoResponse; import org.societies.api.schema.cis.directory.CisAdvertisementRecord; import org.societies.api.schema.cis.manager.Create; import org.societies.api.schema.css.directory.CssAdvertisementRecord; import org.societies.api.schema.cssmanagement.CssAdvertisementRecordDetailed; import org.societies.api.schema.cssmanagement.CssManagerResultActivities; import org.societies.api.schema.cssmanagement.CssRequest; import org.societies.api.schema.cssmanagement.CssRequestOrigin; import org.societies.api.schema.cssmanagement.CssRequestStatusType; import org.societies.api.schema.privacytrust.privacy.model.privacypolicy.PrivacyPolicyBehaviourConstants; import org.societies.api.schema.servicelifecycle.model.ServiceResourceIdentifier; import org.societies.cis.directory.client.CisDirectoryRemoteClient; import org.societies.cis.mgmtClient.CisManagerClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; import org.societies.webapp.service.UserService; import org.societies.webapp.models.WebAppParticipant; @Controller @ManagedBean(name = "cismanager") @RequestScoped public class CISController extends BasePageController{ @ManagedProperty(value = "#{userService}") private UserService userService; @ManagedProperty(value = "#{cssLocalManager}") private ICSSInternalManager cssLocalManager; @ManagedProperty(value = "#{cisDirectoryRemote}") private ICisDirectoryRemote cisDirectory; @ManagedProperty(value = "#{cisManager}") @Autowired private ICisManager cisManager; @Autowired @ManagedProperty(value = "#{commMngrRef}") private ICommManager commMngrRef; private IActivityFeed actFeed; @Autowired @ManagedProperty(value = "#{ciscallback}") private ICisManagerCallback ciscallback; public ICisManagerCallback getCiscallback() { return ciscallback; } public void setCiscallback(ICisManagerCallback ciscallback) { this.ciscallback = ciscallback; } @Autowired private ICisDirectoryRemote cisDirectoryRemote; @Autowired private IPrivacyPolicyManager privacyPolicyManager; @Autowired private IPrivacyPolicyManagerRemote privacyPolicyManagerRemote; //@Autowired //@ManagedProperty(value = "#{privacypol}") // private PrivacyPolicyUtils privacypol; // public PrivacyPolicyUtils getPrivacypol() { // return privacypol; // } // public void setPrivacypol(PrivacyPolicyUtils privacypol) { // this.privacypol = privacypol; // } private String cisname; public String getCisname() { return cisname; } public void setCisname(String cisname) { this.cisname = cisname; } public String getCistype() { return cistype; } public void setCistype(String cistype) { this.cistype = cistype; } public String getCisdesc() { return cisdesc; } public void setCisdesc(String cisdesc) { this.cisdesc = cisdesc; } List<Participant> m_remoteMemberRecords = new ArrayList<Participant>(); private String cistype; private String cisdesc; private int mode; public int getMode() { return mode; } public void setMode(int mode) { this.mode = mode; } //for the callback private String resultCallback; private Community remoteCommunity; private HttpSession m_session; // AUTOWIRING GETTERS AND SETTERS public ICisManager getCisManager() { return cisManager; } public void setCisManager(ICisManager cisManager) { this.cisManager = cisManager; } public IActivityFeed getactFeed() { return actFeed; } public void setCis(IActivityFeed actFeed) { this.actFeed = actFeed; } public ICommManager getCommMngrRef() { return this.commMngrRef; } public void setCommMngrRef(ICommManager commMngrRef) { this.commMngrRef = commMngrRef; } public IPrivacyPolicyManager getPrivacyPolicyManager() { return privacyPolicyManager; } public void setPrivacyPolicyManager(IPrivacyPolicyManager privacyPolicyManager) { this.privacyPolicyManager = privacyPolicyManager; } public IPrivacyPolicyManagerRemote getPrivacyPolicyManagerRemote() { return privacyPolicyManagerRemote; } public void setPrivacyPolicyManagerRemote( IPrivacyPolicyManagerRemote privacyPolicyManagerRemote) { this.privacyPolicyManagerRemote = privacyPolicyManagerRemote; } public ICisDirectoryRemote getcisDirectory() { return this.cisDirectory; } public void setcisDirectory(ICisDirectoryRemote cisDirectory) { this.cisDirectory = cisDirectory; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public ICSSInternalManager getCssLocalManager() { return cssLocalManager; } public void setCssLocalManager(ICSSInternalManager cssLocalManager) { this.cssLocalManager = cssLocalManager; } public CISController() { log.info("CISController constructor called"); } public void createcommunity(){ log.info("CISController create community called"); Hashtable<String, MembershipCriteria> cisCriteria = new Hashtable<String, MembershipCriteria>(); PrivacyPolicyBehaviourConstants policyType = null; String pPolicy = null; log.info("create community cisname: " +cisname); log.info("create community cistype: " +cistype); log.info("create community cisdesc: " +cisdesc); log.info("create community mode: " +mode); log.info("create community cisCriteria: " +cisCriteria); if(mode == 0){ policyType = PrivacyPolicyBehaviourConstants.PRIVATE; pPolicy = "private"; } if(mode == 1){ policyType = PrivacyPolicyBehaviourConstants.MEMBERS_ONLY; pPolicy = "membersOnly"; } if(mode == 2){ policyType = PrivacyPolicyBehaviourConstants.PUBLIC; pPolicy = "public"; } log.info("create community mode is now: " +policyType); //GENERATE MEMBERSHIP CRITERIA Hashtable<String, MembershipCriteria> h = null; MembershipCrit m = new MembershipCrit(); log.info("create MembershipCrit: " +m); //MembershipCrit m = create.getCommunity().getMembershipCrit(); if (m!=null && m.getCriteria() != null && m.getCriteria().size()>0){ h =new Hashtable<String, MembershipCriteria>(); // populate the hashtable for (Criteria crit : m.getCriteria()) { MembershipCriteria meb = new MembershipCriteria(); log.info("create MembershipCriteria: " +meb); meb.setRank(crit.getRank()); Rule r = new Rule(); if( r.setOperation(crit.getOperator()) == false); ArrayList<String> a = new ArrayList<String>(); a.add(crit.getValue1()); if (crit.getValue2() != null && !crit.getValue2().isEmpty()) a.add(crit.getValue2()); if( r.setValues(a) == false){ meb.setRule(r); h.put(crit.getAttrib(), meb); } } } log.info("about to create Create"); Create create = new Create(); create.setPrivacyPolicy(pPolicy); //POLICY RECEIVED IS ENUM VALUE, CONVERT TO POLICY XML //String pPolicy = "membersOnly"; //DEFAULT VALUE String privacyPolicyXml = "<RequestPolicy />"; if(create.getPrivacyPolicy() != null && create.getPrivacyPolicy().isEmpty() == false){ pPolicy = create.getPrivacyPolicy(); log.info("pPolicy = " +pPolicy); } //PrivacyPolicyBehaviourConstants policyType = PrivacyPolicyBehaviourConstants.MEMBERS_ONLY; //DEFAULT PrivacyPolicyUtils utility = new PrivacyPolicyUtils(); log.info("Create new PrivacyPolicyUtils: " +utility ); RequestPolicy policyObj = null; log.info("Create RequestPolicy: " +policyObj ); try { policyType = PrivacyPolicyBehaviourConstants.fromValue(pPolicy); } catch (IllegalArgumentException ex) { //IGNORE - DEFAULT TO MEMBERS_ONLY log.error("Exception parsing: " + pPolicy + ". " + ex); } //CALL POLICY UTILS TO CREATE XML FOR STORAGE try { log.info("call to PrivacyPolicyUtils: " ); //org.societies.api.schema.privacytrust.privacy.model.privacypolicy.RequestPolicy policyObj = PrivacyPolicyUtils.inferCisPrivacyPolicy(policyType, m); policyObj = PrivacyPolicyUtils.inferCisPrivacyPolicy(policyType, m); privacyPolicyXml = PrivacyPolicyUtils.toXacmlString(policyObj); log.info("@@@@@@@########### privacyPolicyXml contains: " +privacyPolicyXml); } catch (PrivacyException pEx) { pEx.printStackTrace(); } // real create this.cisManager.createCis(cisname, cistype, h, cisdesc, privacyPolicyXml); //Cis icis = (Cis) localCreateCis(cisname, cistype, cisdesc, h, privacyPolicyXml); //cisManager.createCis(cisname, cistype, cisCriteria, cisdesc); } public List<CisInfo> getsuggestedcommunities(){ log.info("CISController get suggested communities called"); CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); ICisDirectoryRemote remote = getcisDirectory(); log.info("ICisDirectoryRemote : " +remote); List<CisInfo> cisinfoList = new ArrayList<CisInfo>(); List<ICis> cisList = new ArrayList<ICis>(); cisList = this.cisManager.getCisList(); log.info("cisList size is " +cisList.size()); log.info("cisList contains " +cisList); getcisDirectory().findAllCisAdvertisementRecords(callback); List<CisAdvertisementRecord> adverts = callback.getResultList(); List<String> listIds = new ArrayList<String>(); for(int i = 0; i < cisList.size(); i++){ listIds.add(cisList.get(i).getCisId()); } for (CisAdvertisementRecord cisAdd : adverts){ log.info(" @@@@@@@@@ listIds contains : " +listIds); if (listIds.contains(cisAdd.getId())){ log.info("Already a member of CIS not adding it"); }else { CisInfo cisInfo = new CisInfo(); cisInfo.setCisid(cisAdd.getId()); cisInfo.setCisname(cisAdd.getName()); cisinfoList.add(cisInfo); log.info("===== adding cisid " +cisInfo.getCisid() +" and name " +cisInfo.getCisname()); log.info("===== cisinfoList size is " +cisinfoList.size()); //cisinfoList.add((cisAdd.getId())); } } log.info("cisinfoList size is " +cisinfoList.size()); log.info("cisinfoList contains " +cisinfoList); //return adverts; return cisinfoList; } public List<MarshaledActivity> getactivities(){ log.debug("getActivities called"); Date date = new Date(); long longDate=date.getTime(); String timespan = "1262304000000 " + longDate; List<MarshaledActivity> listSchemaActivities = new ArrayList<MarshaledActivity>(); List<MarshaledActivity> Result = new ArrayList<MarshaledActivity>(); Future<List<MarshaledActivity>> asyncActivitiesResult = this.cssLocalManager.getActivities(timespan, 20); //Future<List<MarshaledActivity>> asyncActivitiesResult = this.cisManager.getActivities(timespan, 20); CssManagerResultActivities results = new CssManagerResultActivities(); try { results.setMarshaledActivity(asyncActivitiesResult.get()); } catch (InterruptedException e1) { e1.printStackTrace(); } catch (ExecutionException e1) { e1.printStackTrace(); } log.debug("Activities : " +results); log.debug("Activities Size: " +results.getMarshaledActivity().size()); for(MarshaledActivity result : results.getMarshaledActivity()){ log.debug("MarshaledActivity Published " +result.getPublished()); log.debug("MarshaledActivity Verb " +result.getVerb()); log.debug("MarshaledActivity Actor" +result.getActor()); Result.add(result); } return Result; } public List<CisInfo> getownedcommunities(){ log.info("getownedcommunities method called"); List<CisInfo> cisinfoList = new ArrayList<CisInfo>(); List<ICisOwned> ownedCISs = cisManager.getListOfOwnedCis(); log.info("ownedCISs SIZE is now " +ownedCISs.size()); for(ICisOwned entry : ownedCISs){ log.info("entry id is " +entry.getCisId()); log.info("entry name is " +entry.getName()); } CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); getcisDirectory().findAllCisAdvertisementRecords(callback); List<CisAdvertisementRecord> adverts = callback.getResultList(); for ( int i = 0; i < ownedCISs.size(); i++) { //find ad for this id boolean bFound = false; int j = 0; do { if (adverts.get(j).getId().contains(ownedCISs.get(i).getCisId())){ bFound = true; }else j++; } while ((bFound == false) && (j < adverts.size())); if (bFound) { CisInfo cisInfo = new CisInfo(); cisInfo.setCisid(ownedCISs.get(i).getCisId()); cisInfo.setCisname(adverts.get(j).getName()); cisinfoList.add(cisInfo); } } return cisinfoList; } public List<CisInfo> getcommunities(){ log.info("getcommunities method called"); List<ICis> cisList = getCisManager().getCisList(); log.info("cisList size :" +cisList.size()); //Future<List<CssAdvertisementRecord>> asynchFriends = getCssLocalManager().getCssFriends(); List<CisInfo> cisinfoList = new ArrayList<CisInfo>(); List<ICis> comList = new ArrayList<ICis>(); //comList = cisManager.getCisList(); CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); getcisDirectory().findAllCisAdvertisementRecords(callback); List<CisAdvertisementRecord> adverts = callback.getResultList(); for ( int i = 0; i < cisList.size(); i++) { //find ad for this id boolean bFound = false; int j = 0; do { if (adverts.get(j).getId().contains(cisList.get(i).getCisId())){ bFound = true; }else j++; } while ((bFound == false) && (j < adverts.size())); if (bFound) { CisInfo cisInfo = new CisInfo(); cisInfo.setCisid(cisList.get(i).getCisId()); cisInfo.setCisname(adverts.get(j).getName()); cisinfoList.add(cisInfo); } } log.info("cisinfoList contains " +cisinfoList); return cisinfoList; } public List<CisInfo> getmembercommunities(){ log.info("getmembercommunities method called"); CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); getcisDirectory().findAllCisAdvertisementRecords(callback); List<CisAdvertisementRecord> adverts = callback.getResultList(); List<CisInfo> ownedCISs = this.getownedcommunities(); log.info("ownedCISs SIZE is now " +ownedCISs.size()); List<CisInfo> allCiss = this.getcommunities(); log.info("allCiss SIZE is now " +allCiss.size()); List<CisInfo> memberCISs = new ArrayList<CisInfo>(); memberCISs = allCiss; log.info("memberCISs size is now " +memberCISs.size()); //now compare the two lists for(int i = 0; i < allCiss.size(); i++){ for(CisInfo entry : ownedCISs){ if(allCiss.get(i).getCisid().contains(entry.getCisid())){ memberCISs.remove(allCiss.get(i)); }else{ log.info("Not on the owned list adding to the members list " +allCiss.get(i).getCisid()); } } } log.info("memCISs SIZE is now " +memberCISs.size()); return memberCISs; } public void joincis(CisInfo adv){ log.info("JoinCIS method called"); log.info("JoinCIS method called CIS ID " +adv.getCisid()); CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); cisDirectory.searchByID(adv.getCisid(), callback); List<CisAdvertisementRecord> adverts = callback.getResultList(); log.info("callback.getResultList() size is " +adverts.size()); log.info("callback.getResultList() is " +adverts); CisManagerClient joinCallback = new CisManagerClient(); log.info("CisManagerClient joinCallback is " +joinCallback); log.info("cisManager instance is " +cisManager); cisManager.joinRemoteCIS(adverts.get(0), joinCallback); log.info("and we're back :( "); } public void leavecis(CisInfo adv){ log.info("leaveCIS method called"); log.info("leaveCIS method called CIS ID " +adv.getCisid()); CisManagerClient leaveCallback = new CisManagerClient(); log.info("CisManagerClient joinCallback is " +leaveCallback); String CISID = adv.getCisid(); cisManager.leaveRemoteCIS(CISID, leaveCallback); } public List<String> getsuggestedlistmembers(CisInfo adv){ log.info("getsuggestedlistmembers method called"); List<String> suggestedMembers = new ArrayList<String>(); List<WebAppParticipant> membersDetails = new ArrayList<WebAppParticipant>(); String placeholder = "placeholder"; String Id = adv.getCisid(); IIdentity cisID = null; try { cisID = getCommMngrRef().getIdManager().fromJid(Id); log.info("cisID is : " +cisID); } catch (InvalidFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } // List<ICis> cisList = getCisManager().getCisList(); // log.info("cisList size :" +cisList.size()); Requestor requestor = new Requestor(cisID); ServiceResourceIdentifier myServiceID = new ServiceResourceIdentifier(); RequestorService service = new RequestorService(cisID, myServiceID); cisManager.getListOfMembers(requestor , cisID, icall); if (m_remoteMemberRecords != null) { for ( int memberIndex = 0; memberIndex < m_remoteMemberRecords.size(); memberIndex++) { WebAppParticipant memberDetail = new WebAppParticipant(); memberDetail.setMembersJid(m_remoteMemberRecords.get(memberIndex).getJid()); memberDetail.setMembershipType(m_remoteMemberRecords.get(memberIndex).getRole()); log.info("membersDetail jid is: " +memberDetail.getMembersJid()); log.info("membersDetail type is: " +memberDetail.getMembershipType()); membersDetails.add(memberDetail); suggestedMembers.add(m_remoteMemberRecords.get(memberIndex).getJid()); } } log.info(" >>>>>>>>>> suggestedMembers size is: " +suggestedMembers.size()); return suggestedMembers; } public List<String> getmembers(CisInfo adv){ log.info("getmembers method called"); log.info("CisAdvertisementRecord is: " +adv.getCisid()); String Id = adv.getCisid(); IIdentity cisID = null; log.info("Id is: " +Id); List<String> remotemembers = new ArrayList<String>(); List<WebAppParticipant> membersDetails = new ArrayList<WebAppParticipant>(); ICisOwned thisCis = null; List<ICisOwned> ownedCISs = this.getCisManager().getListOfOwnedCis(); log.info("ownedCISs size: " +ownedCISs.size()); if (ownedCISs.size() > 0) { Iterator<ICisOwned> it = ownedCISs.iterator(); while(it.hasNext() && thisCis == null) { ICisOwned element = it.next(); if (element.getCisId().equalsIgnoreCase(Id)) { thisCis = element; } } } if(thisCis == null) { // "thisCIS is null"; //NOT LOCAL CIS, SO CALL REMOTE ICis remoteCIS = this.getCisManager().getCis(Id); if (remoteCIS != null) { Requestor req = new Requestor(this.commMngrRef.getIdManager().getThisNetworkNode()); remoteCIS.getListOfMembers(req, icall); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (m_remoteMemberRecords != null) { for ( int memberIndex = 0; memberIndex < m_remoteMemberRecords.size(); memberIndex++) { WebAppParticipant memberDetail = new WebAppParticipant(); memberDetail.setMembersJid(m_remoteMemberRecords.get(memberIndex).getJid()); memberDetail.setMembershipType(m_remoteMemberRecords.get(memberIndex).getRole()); log.info("membersDetail jid is: " +memberDetail.getMembersJid()); log.info("membersDetail type is: " +memberDetail.getMembershipType()); membersDetails.add(memberDetail); remotemembers.add(m_remoteMemberRecords.get(memberIndex).getJid()); } } } } else { Set<ICisParticipant> records = thisCis.getMemberList(); List<String> localmembersDetails = new ArrayList<String>(); log.info("else Participant records size is: " +records.size()); // CisDirectoryRemoteClient callback = new CisDirectoryRemoteClient(); // getcisDirectory().findAllCisAdvertisementRecords(callback); // List<CisAdvertisementRecord> adverts = callback.getResultList(); for (ICisParticipant s : records) { log.info("else Participant jid is: " +s.getMembersJid()); localmembersDetails.add(s.getMembersJid()); } return localmembersDetails; //return null; } log.info("membersDetails: " +Id); return remotemembers; } WebAppCISCallback icall = new WebAppCISCallback();//this.userFeedback); public class WebAppCISCallback implements ICisManagerCallback{ public WebAppCISCallback(){ super(); } public void receiveResult(CommunityMethods communityResultObject) { if(communityResultObject == null){ resultCallback = "Failure getting result from remote node!"; } else { if(communityResultObject.getJoinResponse() != null){ if(communityResultObject.getJoinResponse().isResult()){ if(null != communityResultObject.getJoinResponse().getCommunity() && null != communityResultObject.getJoinResponse().getCommunity().getCommunityJid() && communityResultObject.getJoinResponse().getCommunity().getCommunityJid().isEmpty() == false){ String community = communityResultObject.getJoinResponse().getCommunity().getCommunityJid(); log.info("callback for join regarindg community " + community); //this.userFeedback.showNotification("Joined CIS: " + community); resultCallback = "Joined CIS " + community; remoteCommunity = communityResultObject.getJoinResponse().getCommunity(); m_session.setAttribute("community", remoteCommunity); log.info("done at join response"); } else{ resultCallback = "Joined CIS work but community xsd was bogus "; } }else{ resultCallback = "Failure when trying to joined CIS: " + communityResultObject.getJoinResponse().getCommunity().getCommunityJid(); //this.userFeedback.showNotification("failed to join " + communityResultObject.getJoinResponse().getCommunity().getCommunityJid()); } } if(communityResultObject.getWhoResponse() != null){ log.info("### " + communityResultObject.getWhoResponse().getParticipant().size()); //m_session.setAttribute("community", remoteCommunity); m_remoteMemberRecords = communityResultObject.getWhoResponse().getParticipant(); //m_session.setAttribute("remoteMemberRecords", m_remoteMemberRecords); } } } } }