Created
September 19, 2013 13:18
-
-
Save imduffy15/6623352 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| private List<ServiceOfferingVO> searchServiceOfferingsInternal(Account caller, Object name, Object id, Long vmId, Object keyword, Filter searchFilter) { | |
| // it was decided to return all offerings for the user's domain, and everything above till root (for normal user | |
| // or | |
| // domain admin) | |
| // list all offerings belonging to this domain, and all of its parents | |
| // check the parent, if not null, add offerings for that parent to list | |
| List<ServiceOfferingVO> sol = new ArrayList<ServiceOfferingVO>(); | |
| DomainVO domainRecord = _domainDao.findById(caller.getDomainId()); | |
| boolean includePublicOfferings = true; | |
| if (domainRecord != null) { | |
| while (true) { | |
| if (id != null) { | |
| ServiceOfferingVO so = _offeringsDao.findById((Long) id); | |
| if (so != null) { | |
| sol.add(so); | |
| } | |
| return sol; | |
| } | |
| SearchCriteria<ServiceOfferingVO> sc = _offeringsDao.createSearchCriteria(); | |
| if (keyword != null) { | |
| includePublicOfferings = false; | |
| SearchCriteria<ServiceOfferingVO> ssc = _offeringsDao.createSearchCriteria(); | |
| ssc.addOr("displayText", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | |
| ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); | |
| sc.addAnd("name", SearchCriteria.Op.SC, ssc); | |
| } else if (vmId != null) { | |
| UserVmVO vmInstance = _userVmDao.findById(vmId); | |
| if ((vmInstance == null) || (vmInstance.getRemoved() != null)) { | |
| InvalidParameterValueException ex = new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); | |
| ex.addProxyObject(vmInstance, vmId, "vmId"); | |
| throw ex; | |
| } | |
| _accountMgr.checkAccess(caller, null, false, vmInstance); | |
| ServiceOfferingVO offering = _offeringsDao.findById(vmInstance.getServiceOfferingId()); | |
| sc.addAnd("id", SearchCriteria.Op.NEQ, offering.getId()); | |
| sc.addAnd("useLocalStorage", SearchCriteria.Op.EQ, offering.getUseLocalStorage()); | |
| } | |
| if (name != null) { | |
| includePublicOfferings = false; | |
| sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); | |
| } | |
| sc.addAnd("systemUse", SearchCriteria.Op.EQ, false); | |
| // for this domain | |
| sc.addAnd("domainId", SearchCriteria.Op.EQ, domainRecord.getId()); | |
| // don't return removed service offerings | |
| sc.addAnd("removed", SearchCriteria.Op.NULL); | |
| // search and add for this domain | |
| sol.addAll(_offeringsDao.search(sc, searchFilter)); | |
| // try and move on to the next domain | |
| if (domainRecord.getParent() != null) { | |
| domainRecord = _domainDao.findById(domainRecord.getParent()); | |
| } else { | |
| break;// now we got all the offerings for this user/dom adm | |
| } | |
| } | |
| } else { | |
| s_logger.error("Could not find the domainId for account:" + caller.getAccountName()); | |
| throw new CloudAuthenticationException("Could not find the domainId for account:" + caller.getAccountName()); | |
| } | |
| // add all the public offerings to the sol list before returning | |
| if (includePublicOfferings) { | |
| sol.addAll(_offeringsDao.findPublicServiceOfferings()); | |
| } | |
| return sol; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment