/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.csw.response; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.io.IOUtils; import org.geoserver.config.GeoServer; import org.geoserver.csw.GetRepositoryItemType; import org.geoserver.csw.store.RepositoryItem; import org.geoserver.ows.HttpErrorCodeException; import org.geoserver.ows.Response; import org.geoserver.platform.Operation; import org.geoserver.platform.ServiceException; /** * Encodes Repository Item stream * * @author Alessio Fabiani - GeoSolutions */ public class CSWGetRepositoryItemResponse extends Response { GeoServer gs; public CSWGetRepositoryItemResponse(GeoServer gs) { super(RepositoryItem.class); this.gs = gs; } @Override public boolean canHandle(Operation operation) { Object request = operation.getParameters()[0]; if (request instanceof GetRepositoryItemType) { return true; } else { throw new IllegalArgumentException("Unsupported request object type: " + request); } } @Override public String getMimeType(Object value, Operation operation) throws ServiceException { String mimeType = ((RepositoryItem) value).getMime(); return mimeType; } @Override public void write(Object value, OutputStream output, Operation operation) throws IOException, ServiceException { InputStream input = null; try { input = ((RepositoryItem) value).getContents(); if (null != input) { IOUtils.copy(input, output); } else { throw new HttpErrorCodeException(404, "Repository item had no content"); } } catch (IOException e) { throw new ServiceException("Failed to encode the repository item onto the output", e); } finally { IOUtils.closeQuietly(input); output.flush(); } } }