@Override
 public MetadataXCsw addDatasetToCSW(final int serviceID, final int datasetID) {
   final Metadata metadata =
       dsl.select()
           .from(METADATA)
           .where(METADATA.DATASET_ID.eq(datasetID))
           .fetchOneInto(Metadata.class);
   if (metadata != null) {
     final MetadataXCsw dxc =
         dsl.select()
             .from(METADATA_X_CSW)
             .where(METADATA_X_CSW.CSW_ID.eq(serviceID))
             .and(METADATA_X_CSW.METADATA_ID.eq(metadata.getId()))
             .fetchOneInto(MetadataXCsw.class);
     if (dxc == null) {
       MetadataXCswRecord newRecord = dsl.newRecord(METADATA_X_CSW);
       newRecord.setCswId(serviceID);
       newRecord.setMetadataId(metadata.getId());
       newRecord.store();
       return newRecord.into(MetadataXCsw.class);
     }
     return dxc;
   }
   return null;
 }
 @Override
 public List<Dataset> getCswLinkedDataset(final int cswId) {
   return dsl.select(DATASET.fields())
       .from(DATASET, METADATA, METADATA_X_CSW)
       .where(METADATA.ID.eq(METADATA_X_CSW.METADATA_ID))
       .and(DATASET.ID.eq(METADATA.DATASET_ID))
       .and(METADATA_X_CSW.CSW_ID.eq(cswId))
       .and(METADATA.DATASET_ID.isNotNull())
       .fetchInto(Dataset.class);
 }
 @Override
 @Transactional(propagation = Propagation.MANDATORY)
 public void removeDatasetFromCSW(int serviceID, int datasetID) {
   final Metadata metadata =
       dsl.select()
           .from(METADATA)
           .where(METADATA.DATASET_ID.eq(datasetID))
           .fetchOneInto(Metadata.class);
   if (metadata != null) {
     dsl.delete(METADATA_X_CSW)
         .where(METADATA_X_CSW.CSW_ID.eq(serviceID))
         .and(METADATA_X_CSW.METADATA_ID.eq(metadata.getId()))
         .execute();
   }
 }
 @Override
 @Transactional(propagation = Propagation.MANDATORY)
 public void removeAllDatasetFromCSW(int serviceID) {
   dsl.delete(METADATA_X_CSW).where(METADATA_X_CSW.CSW_ID.eq(serviceID)).execute();
 }