/*- ******************************************************************************* * Copyright (c) 2011, 2016 Diamond Light Source Ltd. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Matthew Gerring - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.dawnsci.remotedataset.client; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.Map; import java.util.concurrent.Executor; import org.eclipse.dawnsci.analysis.api.io.IRemoteDatasetService; import org.eclipse.dawnsci.analysis.api.persistence.IMarshallerService; import org.eclipse.dawnsci.remotedataset.XMLMarshallerService; import org.eclipse.january.dataset.IDatasetConnector; import org.eclipse.january.dataset.IRemoteData; class RemoteData implements IRemoteData { private String path; private URLBuilder urlBuilder; private Executor exec; private IRemoteDatasetService service; public RemoteData(IRemoteDatasetService service, String serverName, int port, Executor exec) { this.urlBuilder = new URLBuilder(serverName, port); urlBuilder.setWritingExpected(true); this.exec = exec; this.service = service; } @SuppressWarnings("unchecked") @Override public Map<String, Object> getTree() throws Exception { urlBuilder.setGet(true); final URL url = new URL(urlBuilder.getTreeURL()); URLConnection conn = url.openConnection(); final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); try { String xml = reader.readLine(); IMarshallerService marshaller = new XMLMarshallerService(); return (Map<String, Object>)marshaller.unmarshal(xml, Map.class); } finally { reader.close(); } } @Override public IDatasetConnector createRemoteDataset(String datasetPath) throws Exception { IDatasetConnector set = service.createRemoteDataset(urlBuilder.getServerName(), urlBuilder.getPort()); set.setDatasetName(datasetPath); set.setPath(getPath()); return set; } public String getPath() { return urlBuilder.getPath(); } public void setPath(String path) { urlBuilder.setPath(path); } }