/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.index.service.resources.list.api; import org.opencastproject.serviceregistry.api.ServiceState; import org.opencastproject.serviceregistry.api.ServiceStatistics; import org.json.simple.JSONAware; import org.json.simple.JSONObject; import java.util.HashMap; import java.util.List; import java.util.Map; /** * A model class representing the displayed fields in the services screen. * * @author ademasi * */ public class Service implements JSONAware { private static final String MEAN_RUN_TIME = "meanRunTime"; private static final String MEAN_QUEUE_TIME = "meanQueueTime"; private static final String QUEUED = "queued"; private static final String RUNNING = "running"; private static final String COMPLETED = "completed"; private static final String STATUS = "status"; private static final String NAME = "name"; private static final String HOST = "host"; private Map<String, String> map = new HashMap<String, String>(); public Service(ServiceStatistics stats) { setStatus(stats.getServiceRegistration().getServiceState()); setName(stats.getServiceRegistration().getServiceType()); setCompleted(stats.getFinishedJobs()); setMeanQueueTime(stats.getMeanQueueTime()); setMeanRunTime(stats.getMeanRunTime()); setQueued(stats.getQueuedJobs()); setRunning(stats.getRunningJobs()); setHost(stats.getServiceRegistration().getHost()); } public void setHost(String host) { map.put(HOST, host); } public String toJson() { return JSONObject.toJSONString(map); } /** * @return the name */ public String getName() { return map.get(NAME); } /** * @param name * the name to set */ public void setName(String name) { map.put(NAME, name); } /** * @return the status */ public String getStatus() { return map.get(STATUS); } /** * @param status * the status to set */ public void setStatus(ServiceState status) { map.put(STATUS, status.name()); } /** * @return the completed */ public Integer getCompleted() { return Integer.valueOf(map.get(COMPLETED)); } /** * @param completed * the completed to set */ public void setCompleted(Integer completed) { map.put(COMPLETED, String.valueOf(completed)); } /** * @return the running */ public Integer getRunning() { return Integer.valueOf(map.get(RUNNING)); } /** * @param running * the running to set */ public void setRunning(Integer running) { map.put(RUNNING, String.valueOf(running)); } /** * @return the queued */ public Integer getQueued() { return Integer.valueOf(map.get(QUEUED)); } /** * @param queued * the queued to set */ public void setQueued(Integer queued) { map.put(QUEUED, String.valueOf(queued)); } public void setMeanQueueTime(long meanQueueTime) { map.put(MEAN_QUEUE_TIME, String.valueOf(meanQueueTime)); } public long getMeanQueueTime() { return Long.valueOf(map.get(MEAN_QUEUE_TIME)); } public void setMeanRunTime(long meanRunTime) { map.put(MEAN_RUN_TIME, String.valueOf(meanRunTime)); } public long getMeanRunTime() { return Long.valueOf(map.get(MEAN_RUN_TIME)); } public String getHost() { return map.get(HOST); } @Override public String toJSONString() { return JSONObject.toJSONString(map); } /** * Checks if the query filters this service or not. Allowed filtering criteria per definition (EAU-473): name, * host(s), freetext (i.e. either name or host(s) or both. * * @param query * @return True if the given filter applies to this record, false if it doesn't. */ public boolean isCompliant(ResourceListQuery query) { if (query == null) { return true; // no filter } List<ResourceListFilter<?>> filters = query.getFilters(); for (ResourceListFilter<?> resourceListFilter : filters) { String filterName = resourceListFilter.getName(); Object value = resourceListFilter.getValue().get(); if (!(value instanceof String)) { return false; // Only String filters allowed here. } String filterValue = (String) value; if (filterName.equals(ResourceListFilter.FREETEXT)) { return complies(NAME, filterValue) || complies(HOST, filterValue); } if (!complies(filterName, filterValue)) { return false; } } return true; } private boolean complies(String criteria, String filterValue) { String value = map.get(criteria); if (value == null) { // the criteria doesn't exist return false; } return value.toLowerCase().contains(filterValue.toLowerCase()); } }