/*
* Copyright 2012 Nodeable 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 com.streamreduce.rest.resource.api;
import com.mongodb.BasicDBObject;
import com.streamreduce.core.model.Connection;
import com.streamreduce.core.model.InventoryItem;
import com.streamreduce.core.model.SobaObject;
import com.streamreduce.core.model.User;
import com.streamreduce.connections.GatewayProvider;
import com.streamreduce.rest.dto.response.AbstractOwnableResponseSobaDTO;
import com.streamreduce.rest.dto.response.ConnectionResponseDTO;
import com.streamreduce.rest.dto.response.InventoryItemResponseDTO;
import com.streamreduce.rest.dto.response.OutboundConfigurationResponseDTO;
public abstract class AbstractOwnableResource extends AbstractTagableSobaResource {
protected <T extends AbstractOwnableResponseSobaDTO> T toOwnerDTO(SobaObject sobaObject, T baseResponseDTO) {
super.toBaseDTO(sobaObject, baseResponseDTO);
User currentUser = securityService.getCurrentUser();
baseResponseDTO.setOwner(sobaObject.getUser().getId().equals(currentUser.getId()));
return baseResponseDTO;
}
protected InventoryItemResponseDTO toFullDTO(InventoryItem inventoryItem) {
InventoryItemResponseDTO dto = new InventoryItemResponseDTO();
Connection connection = inventoryItem.getConnection();
BasicDBObject payload = applicationManager.getInventoryService().getInventoryItemPayload(inventoryItem);
super.toBaseDTO(inventoryItem, dto);
dto.setOwner(inventoryItem.getUser().getId().equals(securityService.getCurrentUser().getId()));
dto.setConnectionAlias(connection.getAlias());
dto.setConnectionId(connection.getId());
dto.setConnectionType(connection.getType());
dto.setConnectionProviderId(connection.getProviderId());
dto.setExternalId(inventoryItem.getExternalId());
dto.setType(inventoryItem.getType());
// Prune any sensitive information from the payload
if (!dto.isOwner()) {
if (payload.containsField("adminPassword")) {
payload.removeField("adminPassword");
}
if (payload.containsField("credentials")) {
payload.removeField("credentials");
}
}
dto.setPayload(payload);
return dto;
}
protected ConnectionResponseDTO toFullDTO(Connection connection) {
ConnectionResponseDTO dto = new ConnectionResponseDTO();
// set user
this.toOwnerDTO(connection, dto);
dto.setType(connection.getType());
dto.setUrl(connection.getUrl());
dto.setProviderId(connection.getProviderId());
dto.setAuthType(connection.getAuthType());
dto.setOutboundConfigurations(OutboundConfigurationResponseDTO.toDTOs(connection.getOutboundConfigurations()));
// return the identity for GMG connections only
// TODO: this is really just to get the Autogenerated key... better way to do this?
if (connection.getCredentials() != null && GatewayProvider.TYPE.equals(connection.getType()) && dto.isOwner()) {
dto.setIdentity(connection.getCredentials().getIdentity());
}
return dto;
}
}