Juan Hernandez has uploaded a new change for review. Change subject: restapi: Improve details helper ......................................................................
restapi: Improve details helper This patch improves the details helper so that details can be included and excluded. Change-Id: I31e10aa2df770dbb957586a6791766f72d324dfe Related-To: Bug-Url: https://bugzilla.redhat.com/1132249 Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- D backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailHelper.java A backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/Details.java A backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailsHelper.java M backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/DetailHelperTest.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java 12 files changed, 319 insertions(+), 160 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/34569/1 diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailHelper.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailHelper.java deleted file mode 100644 index 000b783..0000000 --- a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailHelper.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2010 Red Hat, 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.ovirt.engine.api.common.util; - -import java.util.EnumSet; -import java.util.List; -import java.util.Set; - -import javax.ws.rs.core.HttpHeaders; - -public class DetailHelper { - - private static final String ACCEPT = "Accept"; - private static final String DETAIL = "detail"; - private static final String PARAM_SEPARATOR = ";"; - private static final String VALUE_SEPARATOR = "="; - private static final String DETAIL_SEPARATOR = "\\+"; - - public static boolean include(HttpHeaders httpheaders, String relation) { - List<String> accepts = httpheaders.getRequestHeader(ACCEPT); - if (!(accepts == null || accepts.isEmpty())) { - String[] parameters = accepts.get(0).split(PARAM_SEPARATOR); - for (String parameter : parameters) { - String[] includes = parameter.split(VALUE_SEPARATOR); - if (includes.length > 1 && DETAIL.equalsIgnoreCase(includes[0].trim())) { - for (String rel : includes[1].trim().split(DETAIL_SEPARATOR)) { - if (relation.equalsIgnoreCase(rel.trim())) { - return true; - } - } - } - } - } - return false; - } - - public enum Detail { - DISKS, - NICS, - STATISTICS, - TAGS - } - - public static Set<Detail> getDetails(HttpHeaders httpHeaders) { - Set<Detail> details = EnumSet.noneOf(Detail.class); - for (Detail detail : Detail.class.getEnumConstants()) { - if (include(httpHeaders, detail.name().toLowerCase())) { - details.add(detail); - } - } - return details; - } -} diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/Details.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/Details.java new file mode 100644 index 0000000..68fdfd5 --- /dev/null +++ b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/Details.java @@ -0,0 +1,63 @@ +/* +* Copyright (c) 2014 Red Hat, 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.ovirt.engine.api.common.util; + +import java.util.HashSet; +import java.util.Set; + +/** + * This class represents what level of detail should be returned. It is basically a pair of sets that specify what to + * include and what to exclude. + */ +public class Details { + private Set<String> excluded = new HashSet<>(); + private Set<String> included = new HashSet<>(); + + public void addIncluded(String what) { + included.add(what); + } + + public boolean isIncluded(String what) { + return included.contains(what) && !excluded.contains(what); + } + + public void addExcluded(String what) { + excluded.add(what); + } + + public boolean isExcluded(String what) { + return excluded.contains(what) && included.contains(what); + } + + public String toString() { + StringBuilder buffer = new StringBuilder(); + for (String what : included) { + if (buffer.length() > 0) { + buffer.append(','); + } + buffer.append(what); + } + for (String what : excluded) { + if (buffer.length() > 0) { + buffer.append(','); + } + buffer.append('!'); + buffer.append(what); + } + return buffer.toString(); + } +} diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailsHelper.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailsHelper.java new file mode 100644 index 0000000..bf759c9 --- /dev/null +++ b/backend/manager/modules/restapi/interface/common/jaxrs/src/main/java/org/ovirt/engine/api/common/util/DetailsHelper.java @@ -0,0 +1,163 @@ +/* +* Copyright (c) 2014 Red Hat, 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.ovirt.engine.api.common.util; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.http.HeaderElement; +import org.apache.http.NameValuePair; +import org.apache.http.message.BasicHeaderValueParser; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriInfo; + +/** + * This class is responsible for determining what details should be included in a response. The details can be specified + * using the {@code detail} parameter of the HTTP {@code Accept} header, or with the {@code detail} matrix or query + * parameter. The value of this parameter should be a comma (or plus sign when using the {@code Accept} header) + * separated list of names. If the name is preceded by the an exclamation mark then it will be excluded, otherwise it + * will be included. For example, to request the information of NICs and disks using the header: + * + * <pre> + * GET /vms/{vm:id} HTTP/1.1 + * Accept: application/xml; detail=nics+disks + * </pre> + * + * Note that when using the HTTP {@code Accept} header the separator should be the plus sign, as the comma is used to + * separate elements of HTTP headers and some web servers may get confused when using the comma. + * + * Same using a matrix parameter (this is the preferred way, as proxy servers may then cache the modified content): + * + * <pre> + * GET /vms/{vm:id};detail=nics,disks HTTP/1.1 + * </pre> + * + * Same using a query parameter: + * + * <pre> + * GET /vms/{vm:id}?detail=nics,disks HTTP/1.1 + * </pre> + * + * The exclamation mark is used to exclude some data that is included by default. For example, it could be used to + * specify that only the size of a collection is requested, but not its actual data: + * + * <pre> + * GET /vms;detail=size,!data HTTP/1.1 + * </pre> + */ +public class DetailsHelper { + /** + * The name of the HTTP {@code Accept} header. + */ + private static final String ACCEPT = "Accept"; + + /** + * The name of the header, matrix, or query parameter that contains the list of details to include or exclude. + */ + private static final String DETAIL = "detail"; + + /** + * Determines what details to include or exclude from the {@code detail} parameter of the {@code Accept} header and + * from the {@code detail} matrix or query parameters. + * + * @param headers the object that gives access to the HTTP headers of the request, may be {@code null} in which case + * it will be completely ignored + * @param uri the object that gives access to the URI information, may be {@code null} in which case it will be + * completely ignored + * @return the object containing the extracted information, may be empty, but never {@code null} + */ + public static Details getDetails(HttpHeaders headers, UriInfo uri) { + // We will collect the detail specifications obtained from different places into this list, for later + // processing: + List<String> specs = new ArrayList<>(1); + + // Try to extract the specification of what to include/exclude from the accept header: + if (headers != null) { + List<String> headerValues = headers.getRequestHeader(ACCEPT); + for (String headerValue : headerValues) { + HeaderElement[] headerElements = BasicHeaderValueParser.parseElements(headerValue, null); + for (HeaderElement headerElement : headerElements) { + for (NameValuePair parameter : headerElement.getParameters()) { + if (StringUtils.equalsIgnoreCase(parameter.getName(), DETAIL)) { + specs.add(parameter.getValue()); + } + } + } + } + } + + // Try also from the matrix parameters: + if (uri != null) { + List<String> parameters = uri.getPathParameters().get(DETAIL); + if (CollectionUtils.isNotEmpty(parameters)) { + for (String parameter : parameters) { + specs.add(parameter); + } + } + } + + // Try also from the query parameters: + if (uri != null) { + List<String> parameters = uri.getQueryParameters().get(DETAIL); + if (CollectionUtils.isNotEmpty(parameters)) { + for (String parameter : parameters) { + specs.add(parameter); + } + } + } + + // Process all the obtained detail specifications: + return parseDetails(specs); + } + + /** + * Parses a string into the object that represents what to include or exclude. + * + * @param specs the specification of what to include or exclude + * @return the object that represents what to include or exclude, which may be completely empty, but never + * {@code null} + */ + private static Details parseDetails(List<String> specs) { + Details details = new Details(); + if (CollectionUtils.isNotEmpty(specs)) { + for (String spec : specs) { + if (spec != null) { + String[] chunks = spec.split("[+,]"); + if (ArrayUtils.isNotEmpty(chunks)) { + for (String chunk : chunks) { + chunk = chunk.trim(); + if (chunk.startsWith("!")) { + chunk = chunk.substring(1).trim(); + if (StringUtils.isNotEmpty(chunk)) { + details.addExcluded(chunk); + } + } + else { + details.addIncluded(chunk); + } + } + } + } + } + } + return details; + } +} diff --git a/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/DetailHelperTest.java b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/DetailHelperTest.java index 52940bf..a77bdd0 100644 --- a/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/DetailHelperTest.java +++ b/backend/manager/modules/restapi/interface/common/jaxrs/src/test/java/org/ovirt/engine/api/common/util/DetailHelperTest.java @@ -97,17 +97,18 @@ new boolean[] {false, false}); } - private void doTestIncludes(String details, String[] rels, boolean[] expected) throws Exception { + private void doTestIncludes(String spec, String[] rels, boolean[] expected) throws Exception { HttpHeaders httpheaders = createMock(HttpHeaders.class); List<String> requestHeaders = new ArrayList<String>(); expect(httpheaders.getRequestHeader("Accept")).andReturn(requestHeaders).anyTimes(); - requestHeaders.add(ACCEPTABLE + details); + requestHeaders.add(ACCEPTABLE + spec); replay(httpheaders); for (int i = 0; i < rels.length; i++) { - assertEquals(expected[i], DetailHelper.include(httpheaders, rels[i])); + Details details = DetailsHelper.getDetails(httpheaders, null); + assertEquals(expected[i], details.isIncluded(rels[i])); } verify(httpheaders); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java index 58fb1e2..bc9de3c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostNicsResource.java @@ -7,11 +7,10 @@ import java.util.List; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; -import org.ovirt.engine.api.common.util.DetailHelper; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Bonding; import org.ovirt.engine.api.model.Host; @@ -300,22 +299,23 @@ @Override protected HostNIC deprecatedPopulate(HostNIC model, VdsNetworkInterface entity) { - return addStatistics(model, entity, uriInfo, httpHeaders); - } - - HostNIC addStatistics(HostNIC model, VdsNetworkInterface entity, UriInfo ui, HttpHeaders httpHeaders) { - if (DetailHelper.include(httpHeaders, "statistics")) { - model.setStatistics(new Statistics()); - HostNicStatisticalQuery query = new HostNicStatisticalQuery(newModel(model.getId())); - List<Statistic> statistics = query.getStatistics(entity); - for (Statistic statistic : statistics) { - LinkHelper.addLinks(ui, statistic, query.getParentType()); - } - model.getStatistics().getStatistics().addAll(statistics); + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); + if (details.isIncluded("statistics")) { + addStatistics(model, entity); } return model; } + private void addStatistics(HostNIC model, VdsNetworkInterface entity) { + model.setStatistics(new Statistics()); + HostNicStatisticalQuery query = new HostNicStatisticalQuery(newModel(model.getId())); + List<Statistic> statistics = query.getStatistics(entity); + for (Statistic statistic : statistics) { + LinkHelper.addLinks(uriInfo, statistic, query.getParentType()); + } + model.getStatistics().getStatistics().addAll(statistics); + } + protected class HostNicResolver extends EntityIdResolver<Guid> { private String name; diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java index 1f544ff..86a1b1f 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java @@ -18,6 +18,8 @@ import org.ovirt.engine.api.model.LogicalUnit; import org.ovirt.engine.api.model.PowerManagement; import org.ovirt.engine.api.model.PowerManagementStatus; +import org.ovirt.engine.api.model.Statistic; +import org.ovirt.engine.api.model.Statistics; import org.ovirt.engine.api.resource.ActionResource; import org.ovirt.engine.api.resource.AssignedPermissionsResource; import org.ovirt.engine.api.resource.AssignedTagsResource; @@ -27,6 +29,7 @@ import org.ovirt.engine.api.resource.HostStorageResource; import org.ovirt.engine.api.resource.StatisticsResource; import org.ovirt.engine.api.restapi.model.AuthenticationMethod; +import org.ovirt.engine.api.utils.LinkHelper; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.ApproveVdsParameters; import org.ovirt.engine.core.common.action.ChangeVDSClusterParameters; @@ -397,9 +400,9 @@ @Override protected Host deprecatedPopulate(Host model, VDS entity) { - Host host = parent.addStatistics(model, entity, uriInfo, httpHeaders); - parent.addCertificateInfo(host); - return host; + parent.addStatistics(model, entity); + parent.addCertificateInfo(model); + return model; } public BackendHostsResource getParent() { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java index e58c871..4b29c7e 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostsResource.java @@ -2,11 +2,10 @@ import java.util.List; -import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; -import org.ovirt.engine.api.common.util.DetailHelper; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Certificate; import org.ovirt.engine.api.model.Cluster; @@ -125,22 +124,22 @@ @Override protected Host deprecatedPopulate(Host model, VDS entity) { - Host host = addStatistics(model, entity, uriInfo, httpHeaders); - addCertificateInfo(host); - return host; + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); + if (details.isIncluded("statistics")) { + addStatistics(model, entity); + } + addCertificateInfo(model); + return model; } - Host addStatistics(Host model, VDS entity, UriInfo ui, HttpHeaders httpHeaders) { - if (DetailHelper.include(httpHeaders, "statistics")) { - model.setStatistics(new Statistics()); - HostStatisticalQuery query = new HostStatisticalQuery(newModel(model.getId())); - List<Statistic> statistics = query.getStatistics(entity); - for (Statistic statistic : statistics) { - LinkHelper.addLinks(ui, statistic, query.getParentType()); - } - model.getStatistics().getStatistics().addAll(statistics); + public void addStatistics(Host model, VDS entity) { + model.setStatistics(new Statistics()); + HostStatisticalQuery query = new HostStatisticalQuery(newModel(model.getId())); + List<Statistic> statistics = query.getStatistics(entity); + for (Statistic statistic : statistics) { + LinkHelper.addLinks(uriInfo, statistic, query.getParentType()); } - return model; + model.getStatistics().getStatistics().addAll(statistics); } private Hosts mapCollection(List<VDS> entities) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java index 18d53ba..058a3bf 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java @@ -1,12 +1,11 @@ package org.ovirt.engine.api.restapi.resource; import java.util.List; -import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; import org.apache.commons.lang.BooleanUtils; -import org.ovirt.engine.api.common.util.DetailHelper; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Disks; @@ -193,22 +192,23 @@ @Override protected Disk deprecatedPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { - return addStatistics(model, entity, uriInfo, httpHeaders); - } - - Disk addStatistics(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity, UriInfo ui, HttpHeaders httpHeaders) { - if (DetailHelper.include(httpHeaders, "statistics")) { - model.setStatistics(new Statistics()); - DiskStatisticalQuery query = new DiskStatisticalQuery(newModel(model.getId())); - List<Statistic> statistics = query.getStatistics(entity); - for (Statistic statistic : statistics) { - LinkHelper.addLinks(ui, statistic, query.getParentType()); - } - model.getStatistics().getStatistics().addAll(statistics); + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); + if (details.isIncluded("statistics")) { + addStatistics(model, entity); } return model; } + private void addStatistics(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { + model.setStatistics(new Statistics()); + DiskStatisticalQuery query = new DiskStatisticalQuery(newModel(model.getId())); + List<Statistic> statistics = query.getStatistics(entity); + for (Statistic statistic : statistics) { + LinkHelper.addLinks(uriInfo, statistic, query.getParentType()); + } + model.getStatistics().getStatistics().addAll(statistics); + } + private Response attachDiskToVm(Disk disk) { boolean isDiskActive = BooleanUtils.toBooleanDefaultIfNull(disk.isActive(), false); boolean isDiskReadOnly = BooleanUtils.toBooleanDefaultIfNull(disk.isReadOnly(), false); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java index f41a7c3..6644742 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicResource.java @@ -61,7 +61,8 @@ model.setPortMirroring(portMirroring); } - return parent.addStatistics(model, entity, uriInfo, httpHeaders); + parent.addStatistics(model, entity); + return model; } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java index 3d0d575..acfc57c 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmNicsResource.java @@ -4,12 +4,11 @@ import java.util.List; import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; import org.apache.commons.lang.StringUtils; -import org.ovirt.engine.api.common.util.DetailHelper; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.model.Fault; import org.ovirt.engine.api.model.NIC; import org.ovirt.engine.api.model.ReportedDevice; @@ -130,23 +129,24 @@ @Override protected NIC deprecatedPopulate(NIC model, VmNetworkInterface entity) { + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); addReportedDevices(model, entity); - return addStatistics(model, entity, uriInfo, httpHeaders); - } - - NIC addStatistics(NIC model, VmNetworkInterface entity, UriInfo ui, HttpHeaders httpHeaders) { - if (DetailHelper.include(httpHeaders, "statistics")) { - model.setStatistics(new Statistics()); - NicStatisticalQuery query = new NicStatisticalQuery(newModel(model.getId())); - List<Statistic> statistics = query.getStatistics(entity); - for (Statistic statistic : statistics) { - LinkHelper.addLinks(ui, statistic, query.getParentType()); - } - model.getStatistics().getStatistics().addAll(statistics); + if (details.isIncluded("statistics")) { + addStatistics(model, entity); } return model; } + public void addStatistics(NIC model, VmNetworkInterface entity) { + model.setStatistics(new Statistics()); + NicStatisticalQuery query = new NicStatisticalQuery(newModel(model.getId())); + List<Statistic> statistics = query.getStatistics(entity); + for (Statistic statistic : statistics) { + LinkHelper.addLinks(uriInfo, statistic, query.getParentType()); + } + model.getStatistics().getStatistics().addAll(statistics); + } + void addReportedDevices(NIC model, VmNetworkInterface entity) { List<ReportedDevice> devices = getDevices(entity.getVmId(), entity.getMacAddress()); if (!devices.isEmpty()) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java index d90abef..b0ebf0b 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java @@ -4,15 +4,13 @@ import static org.ovirt.engine.core.utils.Ticketing.generateOTP; import java.util.List; -import java.util.Set; import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.ovirt.engine.api.common.util.DetailHelper; -import org.ovirt.engine.api.common.util.DetailHelper.Detail; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.common.util.QueryHelper; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.AuthorizedKey; @@ -485,26 +483,25 @@ @Override protected VM deprecatedPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { - Set<Detail> details = DetailHelper.getDetails(getHttpHeaders()); + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); parent.addInlineDetails(details, model); - addStatistics(model, entity, uriInfo, httpHeaders); + if (details.isIncluded("statistics")) { + addStatistics(model, entity, uriInfo); + } parent.setPayload(model); parent.setBallooning(model); parent.setCertificateInfo(model); return model; } - VM addStatistics(VM model, org.ovirt.engine.core.common.businessentities.VM entity, UriInfo ui, HttpHeaders httpHeaders) { - if (DetailHelper.include(httpHeaders, "statistics")) { - model.setStatistics(new Statistics()); - VmStatisticalQuery query = new VmStatisticalQuery(newModel(model.getId())); - List<Statistic> statistics = query.getStatistics(entity); - for (Statistic statistic : statistics) { - LinkHelper.addLinks(ui, statistic, query.getParentType()); - } - model.getStatistics().getStatistics().addAll(statistics); + private void addStatistics(VM model, org.ovirt.engine.core.common.businessentities.VM entity, UriInfo ui) { + model.setStatistics(new Statistics()); + VmStatisticalQuery query = new VmStatisticalQuery(newModel(model.getId())); + List<Statistic> statistics = query.getStatistics(entity); + for (Statistic statistic : statistics) { + LinkHelper.addLinks(ui, statistic, query.getParentType()); } - return model; + model.getStatistics().getStatistics().addAll(statistics); } protected class UpdateParametersProvider implements diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index 28c4b2a..70bbc4a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -5,13 +5,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; -import org.ovirt.engine.api.common.util.DetailHelper; -import org.ovirt.engine.api.common.util.DetailHelper.Detail; +import org.ovirt.engine.api.common.util.Details; +import org.ovirt.engine.api.common.util.DetailsHelper; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Certificate; import org.ovirt.engine.api.model.Configuration; @@ -453,14 +452,14 @@ return diskImages; } - protected VM addInlineDetails(Set<Detail> details, VM vm) { - if (details.contains(Detail.DISKS)) { + protected VM addInlineDetails(Details details, VM vm) { + if (details.isIncluded("disks")) { addInlineDisks(vm); } - if (details.contains(Detail.NICS)) { + if (details.isIncluded("nics")) { addInlineNics(vm); } - if (details.contains(Detail.TAGS)) { + if (details.isIncluded("tags")) { addInlineTags(vm); } return vm; @@ -664,9 +663,9 @@ @Override protected VM deprecatedPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { - Set<Detail> details = DetailHelper.getDetails(getHttpHeaders()); + Details details = DetailsHelper.getDetails(httpHeaders, uriInfo); model = addInlineDetails(details, model); - if (details.contains(Detail.STATISTICS)) { + if (details.isIncluded("statistics")) { addInlineStatistics(model); } return model; -- To view, visit http://gerrit.ovirt.org/34569 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I31e10aa2df770dbb957586a6791766f72d324dfe Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches