org.bimserver.client.AbstractBimServerClientFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bimserverclientlib Show documentation
Show all versions of bimserverclientlib Show documentation
A client library for BIMserver, can communicate via JSON, SOAP and ProtocolBuffers
The newest version!
package org.bimserver.client;
import java.io.IOException;
import java.nio.file.Files;
/******************************************************************************
* Copyright (C) 2009-2016 BIMserver.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see {@literal }.
*****************************************************************************/
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.bimserver.emf.MetaDataManager;
import org.bimserver.interfaces.SServiceInterfaceService;
import org.bimserver.plugins.services.BimServerClientInterface;
import org.bimserver.shared.BimServerClientFactory;
import org.bimserver.shared.ChannelConnectionException;
import org.bimserver.shared.exceptions.BimServerClientException;
import org.bimserver.shared.exceptions.ServiceException;
import org.bimserver.shared.interfaces.AdminInterface;
import org.bimserver.shared.interfaces.AuthInterface;
import org.bimserver.shared.interfaces.LowLevelInterface;
import org.bimserver.shared.interfaces.MetaInterface;
import org.bimserver.shared.interfaces.NotificationInterface;
import org.bimserver.shared.interfaces.NotificationRegistryInterface;
import org.bimserver.shared.interfaces.PluginInterface;
import org.bimserver.shared.interfaces.RemoteServiceInterface;
import org.bimserver.shared.interfaces.ServiceInterface;
import org.bimserver.shared.interfaces.SettingsInterface;
import org.bimserver.shared.meta.SService;
import org.bimserver.shared.meta.SServicesMap;
public abstract class AbstractBimServerClientFactory implements BimServerClientFactory {
private final SServicesMap servicesMap;
private final MetaDataManager metaDataManager;
private CloseableHttpClient httpClient;
public AbstractBimServerClientFactory(SServicesMap servicesMap, MetaDataManager metaDataManager) {
this.servicesMap = servicesMap;
if (metaDataManager == null) {
throw new IllegalArgumentException("MetaDataManager cannot be null");
}
this.metaDataManager = metaDataManager;
initHttpClient();
}
public AbstractBimServerClientFactory(MetaDataManager metaDataManager) throws BimServerClientException {
if (metaDataManager == null) {
try {
this.metaDataManager = new MetaDataManager(Files.createTempDirectory("bimserver-tmp"));
this.metaDataManager.init();
} catch (IOException e) {
throw new BimServerClientException("Problem creating tmp directory");
}
// throw new IllegalArgumentException("MetaDataManager cannot be null");
} else {
this.metaDataManager = metaDataManager;
}
this.servicesMap = new SServicesMap();
// servicesMap.setReflectorFactory(new ReflectorFactoryImpl1());
SService serviceInterface = new SServiceInterfaceService(servicesMap, null, ServiceInterface.class);
addService(serviceInterface);
addService(new SService(servicesMap, null, MetaInterface.class));
addService(new SService(servicesMap, null, AdminInterface.class));
addService(new SService(servicesMap, null, AuthInterface.class));
addService(new SService(servicesMap, null, SettingsInterface.class));
addService(new SService(servicesMap, null, PluginInterface.class));
addService(new SService(servicesMap, null, NotificationInterface.class));
addService(new SService(servicesMap, null, RemoteServiceInterface.class));
addService(new SService(servicesMap, null, LowLevelInterface.class));
addService(new SService(servicesMap, null, NotificationRegistryInterface.class));
servicesMap.initialize();
initHttpClient();
}
public CloseableHttpClient getHttpClient() {
return httpClient;
}
public void initHttpClient() {
HttpClientBuilder builder = HttpClientBuilder.create();
HttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
builder.setConnectionManager(connManager);
// builder.addInterceptorFirst(new HttpRequestInterceptor() {
// public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
// if (!request.containsHeader("Accept-Encoding")) {
// request.addHeader("Accept-Encoding", "gzip");
// }
// }
// });
//
// builder.addInterceptorFirst(new HttpResponseInterceptor() {
// public void process(final HttpResponse response, final HttpContext context) throws HttpException, IOException {
// HttpEntity entity = response.getEntity();
// if (entity != null) {
// Header ceheader = entity.getContentEncoding();
// if (ceheader != null) {
// HeaderElement[] codecs = ceheader.getElements();
// for (int i = 0; i < codecs.length; i++) {
// if (codecs[i].getName().equalsIgnoreCase("gzip")) {
// response.setEntity(new GzipDecompressingEntity(response.getEntity()));
// return;
// }
// }
// }
// }
// }
// });
httpClient = builder.build();
}
public MetaDataManager getMetaDataManager() {
return metaDataManager;
}
@Override
public BimServerClientInterface create() throws ServiceException, ChannelConnectionException {
return create(null);
}
public void addService(SService sService) {
servicesMap.add(sService);
}
public SServicesMap getServicesMap() {
return servicesMap;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy