/* * Copyright (c) 2015 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.io.geoserver; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Constructor; import org.apache.http.entity.ContentType; /** * TODO Type description * * @author stefano */ @SuppressWarnings("javadoc") public class ResourceBuilder { private final Resource resource; public static ResourceBuilder namespace(String prefix) { return new ResourceBuilder(new Namespace(prefix)); } public static ResourceBuilder workspace(String name) { return new ResourceBuilder(new Workspace(name)); } public static ResourceBuilder dataStoreFile(InputStream stream) { return new ResourceBuilder(new DataStoreFile(stream)); } public static ResourceBuilder dataStoreFile(InputStream stream, ContentType contentType) { return new ResourceBuilder(new DataStoreFile(stream, contentType)); } public static <T extends DataStore> ResourceBuilder dataStore(String name, Class<T> dataStoreType) { if (dataStoreType == null) { throw new IllegalArgumentException("DataStore type not specified"); } Constructor<T> constructor; try { // TODO: this code assumes a constructor taking a single String // parameter exists constructor = dataStoreType.getConstructor(String.class); return new ResourceBuilder(constructor.newInstance(name)); } catch (Exception e) { throw new RuntimeException( "Cannot instantiate DataStore type: " + dataStoreType.getName()); } } public static ResourceBuilder featureType(String name) { return new ResourceBuilder(new FeatureType(name)); } public static ResourceBuilder layer(String name) { return new ResourceBuilder(new Layer(name)); } private ResourceBuilder(Resource resource) { this.resource = resource; } public ResourceBuilder setAttribute(String name, Object value) { this.resource.setAttribute(name, value); return this; } @SuppressWarnings("unchecked") public <T extends Resource> T build() { return (T) this.resource; } public void print(OutputStream out) throws IOException { this.resource.write(out); } }