/*******************************************************************************
 * Copyright (c) 2013-2020 LAAS-CNRS (www.laas.fr)
 * 7 Colonel Roche 31077 Toulouse - France
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * Initial Contributors:
 *     Thierry Monteil : Project manager, technical co-manager
 *     Mahdi Ben Alaya : Technical co-manager
 *     Samir Medjiah : Technical co-manager
 *     Khalil Drira : Strategy expert
 *     Guillaume Garzone : Developer
 *     François Aïssaoui : Developer
 *
 * New contributors :
 *******************************************************************************/
package org.eclipse.om2m.core.controller;

import java.util.List;

import org.eclipse.om2m.commons.constants.ResponseStatusCode;
import org.eclipse.om2m.commons.entities.AccessControlPolicyEntity;
import org.eclipse.om2m.commons.entities.CSEBaseEntity;
import org.eclipse.om2m.commons.exceptions.OperationNotAllowed;
import org.eclipse.om2m.commons.exceptions.ResourceNotFoundException;
import org.eclipse.om2m.commons.resource.CSEBase;
import org.eclipse.om2m.commons.resource.RequestPrimitive;
import org.eclipse.om2m.commons.resource.ResponsePrimitive;
import org.eclipse.om2m.core.entitymapper.EntityMapperFactory;

/**
 * Controller for CSE base resource
 *
 */
public class CSEBaseController extends Controller {

	// OPERATION_NOT_ALLOWED
	@Override
	public ResponsePrimitive doCreate(RequestPrimitive requestIndication) {
		throw new OperationNotAllowed("Create of CSEBase is not allowed");
	}

	// Generic  retrieve operation
	@Override
	public ResponsePrimitive doRetrieve(RequestPrimitive request) {
		ResponsePrimitive response = new ResponsePrimitive(request);

		// Check existence of the resource
		CSEBaseEntity cseBaseEntity = dbs.getDAOFactory().getCSEBaseDAO().find(transaction, request.getTo());
		if (cseBaseEntity == null){
			throw new ResourceNotFoundException("Resource " + request.getTo() + "not found");
		}
		// Check authorization
		List<AccessControlPolicyEntity> acpList = cseBaseEntity.getAccessControlPolicies();
		checkACP(acpList, request.getFrom(), request.getOperation());
	
		// Mapping the entity with exchange resource
		CSEBase cseBaseResource = EntityMapperFactory.getCseBaseMapper().mapEntityToResource(cseBaseEntity, request);
		response.setContent(cseBaseResource);
		response.setResponseStatusCode(ResponseStatusCode.OK);
		
		return response;
	}

	// OPERATION_NOT_ALLOWED
	@Override
	public ResponsePrimitive doUpdate(RequestPrimitive requestIndication) {
		throw new OperationNotAllowed("Update of CSEBase is not allowed");
	}

	// OPERATION_NOT_ALLOWED
	@Override
	public ResponsePrimitive doDelete(RequestPrimitive requestIndication) {
		throw new OperationNotAllowed("Delete of CSEBase is not allowed");
	}

}
