/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.usergrid.services;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.usergrid.persistence.AggregateCounterSet;
import org.apache.usergrid.persistence.Entity;
import org.apache.usergrid.persistence.EntityRef;
import org.apache.usergrid.persistence.Query;
import org.apache.usergrid.persistence.Results;
public class ServiceResults extends Results {
private static final Logger logger = LoggerFactory.getLogger( ServiceResults.class );
public enum Type {
GENERIC, COLLECTION, CONNECTION, COUNTERS
}
private final Service service;
private final ServiceRequest request;
private final Map<String, Object> serviceMetadata;
private final List<ServiceRequest> nextRequests;
private final String path;
private final String childPath;
private final Type resultsType;
private final ServiceResults previousResults;
public ServiceResults( Service service, ServiceRequest request, ServiceResults previousResults, String childPath,
Type resultsType, Results r, Map<String, Object> serviceMetadata,
List<ServiceRequest> nextRequests ) {
super( r );
this.service = service;
this.request = request;
this.previousResults = previousResults;
this.childPath = childPath;
this.resultsType = resultsType;
if ( request != null ) {
path = request.getPath();
}
else {
path = null;
}
this.serviceMetadata = serviceMetadata;
this.nextRequests = nextRequests;
if (logger.isTraceEnabled()) {
logger.trace("Child path: {}", childPath);
}
}
public ServiceResults( Service service, ServiceContext context, Type resultsType, Results r,
Map<String, Object> serviceMetadata, List<ServiceRequest> nextRequests ) {
super( r );
this.service = service;
request = context.getRequest();
previousResults = context.getPreviousResults();
childPath = context.getRequest().getChildPath();
this.resultsType = resultsType;
if ( request != null ) {
path = request.getPath();
}
else {
path = null;
}
this.serviceMetadata = serviceMetadata;
this.nextRequests = nextRequests;
if (logger.isTraceEnabled()) {
logger.trace("Child path: {}", childPath);
}
}
public static ServiceResults genericServiceResults() {
return new ServiceResults( null, null, null, null, Type.GENERIC, null, null, null );
}
public static ServiceResults genericServiceResults( Results r ) {
return new ServiceResults( null, null, null, null, Type.GENERIC, r, null, null );
}
public static ServiceResults simpleServiceResults( Type resultsType ) {
return new ServiceResults( null, null, null, null, resultsType, null, null, null );
}
public static ServiceResults simpleServiceResults( Type resultsType, Results r ) {
return new ServiceResults( null, null, null, null, resultsType, r, null, null );
}
public Service getService() {
return service;
}
public ServiceRequest getRequest() {
return request;
}
public Map<String, Object> getServiceMetadata() {
return serviceMetadata;
}
public String getPath() {
return path;
}
public List<ServiceRequest> getNextRequests() {
return nextRequests;
}
public boolean hasMoreRequests() {
return ( nextRequests != null ) && ( nextRequests.size() > 0 );
}
public String getChildPath() {
return childPath;
}
public Type getResultsType() {
return resultsType;
}
public void setChildResults( ServiceResults childResults ) {
setChildResults( childResults.getResultsType(), childResults.getRequest().getOwner().getUuid(),
childResults.getChildPath(), childResults.getEntities() );
}
public void setChildResults( Type rtype, UUID id, String name, List<Entity> results ) {
if ( ( results == null ) || ( results.size() == 0 ) ) {
return;
}
if ( rtype == Type.GENERIC ) {
return;
}
List<Entity> entities = getEntities();
if ( entities != null ) {
for ( Entity entity : entities ) {
if ( entity.getUuid().equals( id ) ) {
if ( rtype == Type.COLLECTION ) {
entity.setCollections( name, results );
}
else if ( rtype == Type.CONNECTION ) {
entity.setConnections( name, results );
}
}
}
}
}
@Override
public ServiceResults withQuery( Query query ) {
return ( ServiceResults ) super.withQuery( query );
}
@Override
public ServiceResults withIds( List<UUID> resultsIds ) {
return ( ServiceResults ) super.withIds( resultsIds );
}
@Override
public ServiceResults withRefs( List<EntityRef> resultsRefs ) {
return ( ServiceResults ) super.withRefs( resultsRefs );
}
@Override
public ServiceResults withRef( EntityRef ref ) {
return ( ServiceResults ) super.withRef( ref );
}
@Override
public ServiceResults withEntity( Entity resultEntity ) {
return ( ServiceResults ) super.withEntity( resultEntity );
}
@Override
public ServiceResults withEntities( List<? extends Entity> resultsEntities ) {
return ( ServiceResults ) super.withEntities( resultsEntities );
}
@Override
public ServiceResults withDataName( String dataName ) {
return ( ServiceResults ) super.withDataName( dataName );
}
@Override
public ServiceResults withCounters( List<AggregateCounterSet> counters ) {
return ( ServiceResults ) super.withCounters( counters );
}
@Override
public ServiceResults withNextResult( UUID nextResult ) {
return ( ServiceResults ) super.withNextResult( nextResult );
}
@Override
public ServiceResults withCursor( String cursor ) {
return ( ServiceResults ) super.withCursor( cursor );
}
@Override
public ServiceResults withMetadata( UUID id, String name, Object value ) {
return ( ServiceResults ) super.withMetadata( id, name, value );
}
@Override
public ServiceResults withMetadata( UUID id, Map<String, Object> data ) {
return ( ServiceResults ) super.withMetadata( id, data );
}
@Override
public ServiceResults withMetadata( Map<UUID, Map<String, Object>> metadata ) {
return ( ServiceResults ) super.withMetadata( metadata );
}
@Override
public ServiceResults withData( Object data ) {
return ( ServiceResults ) super.withData( data );
}
}