/* * Copyright 2013 JBoss Inc * * Licensed 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. */ package org.overlord.rtgov.ui.server.services.impl; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Alternative; import org.overlord.commons.services.ServiceRegistryUtil; import org.overlord.rtgov.ui.client.model.ApplicationListBean; import org.overlord.rtgov.ui.client.model.Constants; import org.overlord.rtgov.ui.client.model.QName; import org.overlord.rtgov.ui.client.model.ReferenceBean; import org.overlord.rtgov.ui.client.model.ServiceBean; import org.overlord.rtgov.ui.client.model.ServiceResultSetBean; import org.overlord.rtgov.ui.client.model.ServiceSummaryBean; import org.overlord.rtgov.ui.client.model.ServicesSearchBean; import org.overlord.rtgov.ui.client.model.UiException; import org.overlord.rtgov.ui.provider.ServicesProvider; import org.overlord.rtgov.ui.server.services.IServicesServiceImpl; /** * SwitchYard implementation of the services service. :) * * @author kconner@redhat.com */ @ApplicationScoped @Alternative public class ServicesProviderServiceImpl implements IServicesServiceImpl { private static final int SERVICES_PER_PAGE=10; private java.util.Set<ServicesProvider> _providers; /** * The default constructor. */ public ServicesProviderServiceImpl() { _providers = ServiceRegistryUtil.getServices(ServicesProvider.class); } /** * @see org.overlord.rtgov.ui.server.services.IServicesServiceImpl#getApplicationNames() */ @Override public ApplicationListBean getApplicationNames() throws UiException { final List<QName> apps = new ArrayList<QName>(); for (ServicesProvider sp : _providers) { apps.addAll(sp.getApplicationNames()); } ApplicationListBean ret=new ApplicationListBean(); ret.setApplicationNames(apps); return ret; } /** * @see org.overlord.rtgov.ui.server.services.IServicesServiceImpl#findServices(org.overlord.rtgov.ui.client.model.ServicesFilterBean, int) */ @Override public ServiceResultSetBean findServices(final ServicesSearchBean search) throws UiException { final ServiceResultSetBean serviceResult = new ServiceResultSetBean(); final ArrayList<ServiceSummaryBean> services = new ArrayList<ServiceSummaryBean>(); for (ServicesProvider sp : _providers) { services.addAll(sp.findServices(search.getFilters())); } int total=services.size(); // Sort based on column and direction if (search.getSortColumnId() != null) { java.util.Comparator<ServiceSummaryBean> comp=null; if (search.getSortColumnId().equals(Constants.SORT_COLID_NAME)) { comp = new java.util.Comparator<ServiceSummaryBean>() { @Override public int compare(ServiceSummaryBean o1, ServiceSummaryBean o2) { int ret=o1.getName().compareTo(o2.getName()); if (!search.isSortAscending()) { ret = 0 - ret; } return ret; } }; } if (comp != null) { Collections.sort(services, comp); } } int startIndex=(SERVICES_PER_PAGE*(search.getPage()-1)); if (services.size() >= startIndex) { // Remove initial entries for (int i=0; i < startIndex; i++) { services.remove(0); } // Remove trailing entries while (services.size() > SERVICES_PER_PAGE) { services.remove(SERVICES_PER_PAGE); } } else { services.clear(); } serviceResult.setServices(services); serviceResult.setItemsPerPage(SERVICES_PER_PAGE); serviceResult.setStartIndex((search.getPage()-1)*SERVICES_PER_PAGE); serviceResult.setTotalResults(total); return serviceResult; } /** * @see org.overlord.dtgov.ui.client.shared.services.IServicesServiceImpl#getService(java.lang.String) */ @Override public ServiceBean getService(final String uuid) throws UiException { for (ServicesProvider sp : _providers) { ServiceBean sb=sp.getService(uuid); if (sb != null) { return sb; } } return null; } /** * @see org.overlord.rtgov.ui.server.services.IServicesServiceImpl#getReference(java.lang.String) */ @Override public ReferenceBean getReference(final String referenceId) throws UiException { for (ServicesProvider sp : _providers) { ReferenceBean rb=sp.getReference(referenceId); if (rb != null) { return rb; } } return null; } }