/** * Copyright (c) 2010-2011 Ed Merks and others. * 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: * Ed Merks - Initial API and implementation */ package org.eclipse.emf.server.ecore.resource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.URIConverter; public class DatastoreURIHandlerImpl extends URIHandlerImpl { @Override public boolean canHandle(URI uri) { return "datastore".equals(uri.scheme()); } @Override public OutputStream createOutputStream(final URI uri, final Map<?, ?> options) throws IOException { return new ByteArrayOutputStream() { @Override public void close() throws IOException { flush(); super.close(); } @Override public void flush() throws IOException { byte[] bytes = toByteArray(); DatastoreUtil.store(uri.toString(), bytes, options); Map<Object, Object> response = getResponse(options); Long timestamp = (Long)response.get(URIConverter.RESPONSE_TIME_STAMP_PROPERTY); if (timestamp == null) { throw new IOException("Failed to save " + uri); } else { // TODO // If there is another flush, we'd need to use this timestamp for the options the next time... } } }; } @Override public InputStream createInputStream(URI uri, Map<?, ?> options) throws IOException { String uriString = uri.toString(); DatastoreUtil.fetch(uriString, options); Map<Object, Object> response = getResponse(options); Object result = response.get(URIConverter.RESPONSE_RESULT); if (result == null) { throw new IOException("URI not found " + uri); } else if (result instanceof byte[]) { byte[] bytes = (byte[])result; return new ByteArrayInputStream(bytes); } else { throw (IOException)result; } } @Override public void delete(URI uri, Map<?, ?> options) throws IOException { DatastoreUtil.delete(uri.toString(), options); } @Override public boolean exists(URI uri, Map<?, ?> options) { return DatastoreUtil.exists(uri.toString(), options); } @Override public Map<String, ?> getAttributes(URI uri, Map<?, ?> options) { // TODO Auto-generated method stub return super.getAttributes(uri, options); } @Override public void setAttributes(URI uri, Map<String, ?> attributes, Map<?, ?> options) throws IOException { // TODO Auto-generated method stub super.setAttributes(uri, attributes, options); } }