@Override
 public RepositoryFile createFile(
     Serializable parentFolderId,
     RepositoryFile file,
     IRepositoryFileData data,
     String versionMessage) {
   if (data instanceof NodeRepositoryFileData) {
     return repositoryFileAdapter.unmarshal(
         repoWebService.createFile(
             parentFolderId != null ? parentFolderId.toString() : null,
             repositoryFileAdapter.marshal(file),
             nodeRepositoryFileDataAdapter.marshal((NodeRepositoryFileData) data),
             versionMessage));
   } else if (data instanceof SimpleRepositoryFileData) {
     SimpleRepositoryFileData simpleData = (SimpleRepositoryFileData) data;
     return repositoryFileAdapter.unmarshal(
         repoWebService.createBinaryFile(
             parentFolderId != null ? parentFolderId.toString() : null,
             repositoryFileAdapter.marshal(file),
             SimpleRepositoryFileDataDto.convert(simpleData),
             versionMessage));
   } else {
     throw new IllegalArgumentException();
   }
 }
 @Override
 @SuppressWarnings("unchecked")
 public <T extends IRepositoryFileData> java.util.List<T> getDataForReadInBatch(
     final List<RepositoryFile> files, final Class<T> dataClass) {
   List<RepositoryFileDto> fileDtos = new ArrayList<RepositoryFileDto>(files.size());
   for (RepositoryFile file : files) {
     fileDtos.add(repositoryFileAdapter.marshal(file));
   }
   if (dataClass.equals(NodeRepositoryFileData.class)) {
     List<NodeRepositoryFileDataDto> nodeData =
         repoWebService.getDataAsNodeForReadInBatch(fileDtos);
     List<T> data = new ArrayList<T>(nodeData.size());
     for (NodeRepositoryFileDataDto node : nodeData) {
       data.add((T) nodeRepositoryFileDataAdapter.unmarshal(node));
     }
     return data;
   } else if (dataClass.equals(SimpleRepositoryFileData.class)) {
     List<SimpleRepositoryFileDataDto> nodeData =
         repoWebService.getDataAsBinaryForReadInBatch(fileDtos);
     List<T> data = new ArrayList<T>(nodeData.size());
     for (SimpleRepositoryFileDataDto node : nodeData) {
       data.add((T) SimpleRepositoryFileDataDto.convert(node));
     }
     return data;
   } else {
     throw new IllegalArgumentException();
   }
 }
 @Override
 @SuppressWarnings("unchecked")
 public <T extends IRepositoryFileData> T getDataForRead(Serializable fileId, Class<T> dataClass) {
   if (dataClass.equals(NodeRepositoryFileData.class)) {
     return (T)
         nodeRepositoryFileDataAdapter.unmarshal(
             repoWebService.getDataAsNodeForRead(fileId != null ? fileId.toString() : null));
   } else if (dataClass.equals(SimpleRepositoryFileData.class)) {
     SimpleRepositoryFileDataDto simpleJaxWsData =
         repoWebService.getDataAsBinaryForRead(fileId != null ? fileId.toString() : null);
     return (T) SimpleRepositoryFileDataDto.convert(simpleJaxWsData);
   } else {
     throw new IllegalArgumentException();
   }
 }
 @Override
 public RepositoryFile updateFile(
     RepositoryFile file, IRepositoryFileData data, String versionMessage) {
   if (data instanceof NodeRepositoryFileData) {
     return repositoryFileAdapter.unmarshal(
         repoWebService.updateFile(
             repositoryFileAdapter.marshal(file),
             nodeRepositoryFileDataAdapter.marshal((NodeRepositoryFileData) data),
             versionMessage));
   } else if (data instanceof SimpleRepositoryFileData) {
     SimpleRepositoryFileData simpleData = (SimpleRepositoryFileData) data;
     return repositoryFileAdapter.unmarshal(
         repoWebService.updateBinaryFile(
             repositoryFileAdapter.marshal(file),
             SimpleRepositoryFileDataDto.convert(simpleData),
             versionMessage));
   } else {
     throw new IllegalArgumentException();
   }
 }