package org.osbp.mysmartshop.dtos.service;

import org.eclipse.osbp.dsl.dto.lib.services.impl.AbstractDTOService;
import org.osbp.mysmartshop.dtos.CompanyRelationTypeDto;
import org.osbp.mysmartshop.entities.CompanyRelationType;

@SuppressWarnings("all")
public class CompanyRelationTypeDtoService extends AbstractDTOService<CompanyRelationTypeDto, CompanyRelationType> {
  public Class<CompanyRelationTypeDto> getDtoClass() {
    return CompanyRelationTypeDto.class;
  }
  
  public Class<CompanyRelationType> getEntityClass() {
    return CompanyRelationType.class;
  }
  
  public Object getId(final CompanyRelationTypeDto dto) {
    return dto.getId();
  }
}
