/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.file.service.legacy.internal; import java.io.IOException; import java.net.URI; import de.rcenvironment.core.communication.api.CommunicationService; import de.rcenvironment.core.communication.common.CommunicationException; import de.rcenvironment.core.communication.file.service.legacy.api.RemotableFileStreamAccessService; import de.rcenvironment.core.communication.fileaccess.api.RemoteFileConnection; import de.rcenvironment.core.utils.common.StringUtils; import de.rcenvironment.core.utils.common.rpc.RemoteOperationException; import de.rcenvironment.core.utils.incubator.Assertions; /** * This class provides access remote files via the communication bundle service call concept. * * @author Heinrich Wendel * @author Doreen Seider * @author Robert Mischke (adapted for 7.0.0) */ @Deprecated public class ServiceRemoteFileConnection implements RemoteFileConnection { private static final int MINUS_ONE = -1; private static final long serialVersionUID = -3315352695999821776L; private static final String ERROR_PARAMETERS_NULL = "The parameter \"%s\" must not be null."; /** * The {@link RemotableFileStreamAccessService} of the remote instance where the file is located. */ private final RemotableFileStreamAccessService fileService; /** * The remote UUID of the {@link InputStream}. */ private final String remoteInputStreamUUID; /** * Creates a new {@link ServiceRemoteFileConnection} of a remote file and initialize it. * @param uri URI pointing to remote file. (rce://node-id/dataReferenceUUID/revision) * @param user The user's certificate. * * @throws IOException if the file could not be accessed remotely. */ public ServiceRemoteFileConnection(URI uri, CommunicationService communicationService) throws IOException { try { fileService = communicationService.getRemotableService(RemotableFileStreamAccessService.class, RCEFileURIUtils.getNodeIdentifier(uri)); remoteInputStreamUUID = fileService.open(RCEFileURIUtils.getType(uri), RCEFileURIUtils.getPath(uri)); } catch (RemoteOperationException e) { throw new IOException(e.toString()); } catch (CommunicationException e) { throw new IOException(e); } } @Override public int read(byte[] b, int off, int len) throws IOException { Assertions.isDefined(b, StringUtils.format(ERROR_PARAMETERS_NULL, "b")); Byte[] objectB = new Byte[b.length]; for (int i = 0; i < b.length; i++) { objectB[i] = new Byte(b[i]); } int read = 0; try { byte[] buffer = (byte[]) fileService.read(remoteInputStreamUUID, new Integer(len)); if (buffer.length > 0) { System.arraycopy(buffer, 0, b, off, buffer.length); read = buffer.length; } else { read = MINUS_ONE; } } catch (RemoteOperationException e) { throw new IOException(e.toString()); } return read; } @Override public int read() throws IOException { try { return fileService.read(remoteInputStreamUUID); } catch (RemoteOperationException e) { throw new IOException(e.toString()); } } @Override public long skip(long n) throws IOException { try { return fileService.skip(remoteInputStreamUUID, n); } catch (RemoteOperationException e) { throw new IOException(e.toString()); } } @Override public void close() throws IOException { try { fileService.close(remoteInputStreamUUID); } catch (RemoteOperationException e) { throw new IOException(e.toString()); } } }