You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/02/22 16:21:36 UTC

[19/37] MARMOTTA-105: renamed packages in marmotta-core

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/http/HttpClientServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/http/HttpClientServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/http/HttpClientServiceImpl.java
deleted file mode 100644
index ddddbfd..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/http/HttpClientServiceImpl.java
+++ /dev/null
@@ -1,808 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.http;
-
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.http.HttpClientService;
-import kiwi.core.api.statistics.StatisticsModule;
-import kiwi.core.api.statistics.StatisticsService;
-import kiwi.core.api.task.Task;
-import kiwi.core.api.task.TaskManagerService;
-import kiwi.core.events.ConfigurationChangedEvent;
-import kiwi.core.qualifiers.cache.LMFCache;
-import kiwi.core.services.http.response.LastModifiedResponseHandler;
-import kiwi.core.services.http.response.StatusCodeResponseHandler;
-import kiwi.core.services.http.response.StringBodyResponseHandler;
-import net.sf.ehcache.Ehcache;
-import org.apache.http.*;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.HttpRequestRetryHandler;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.cache.CacheResponseStatus;
-import org.apache.http.client.cache.HttpCacheStorage;
-import org.apache.http.client.methods.*;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.client.DefaultRedirectStrategy;
-import org.apache.http.impl.client.cache.CacheConfig;
-import org.apache.http.impl.client.cache.CachingHttpClient;
-import org.apache.http.impl.client.cache.ehcache.EhcacheHttpCacheStorage;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
-import org.apache.http.params.*;
-import org.apache.http.pool.PoolStats;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- **/
-@ApplicationScoped
-public class HttpClientServiceImpl implements HttpClientService {
-
-    private static final String          TASK_GROUP_CLIENT       = "HttpClient";
-
-    private static final String[]        KEYS                    = {
-        "requests executed", "payload sent", "payload received", "payload from cache",
-        "ConnectionManager", "max connections", "available connections",
-        "active connections", "requests waiting"
-    };
-
-    private static final Charset         DEFAULT_CHARSET         = Charset.defaultCharset();
-
-    @Inject
-    private Logger                       log;
-
-    @Inject
-    private TaskManagerService           taskManagerService;
-
-    @Inject
-    private ConfigurationService         configurationService;
-
-    @Inject
-    private StatisticsService            statisticsService;
-
-    @Inject
-    @LMFCache("http-client-cache")
-    private Instance<Ehcache>            ehcache;
-
-    private HttpClient                   httpClient;
-    private IdleConnectionMonitorThread  idleConnectionMonitorThread;
-    private BasicHttpParams              httpParams;
-
-    private final AtomicLong             bytesSent               = new AtomicLong();
-    private final AtomicLong             bytesReceived           = new AtomicLong();
-    private final AtomicLong             bytesFromCache          = new AtomicLong();
-    private final AtomicLong             requestsExecuted        = new AtomicLong();
-
-    private final ReentrantReadWriteLock lock                    = new ReentrantReadWriteLock();
-
-    /**
-     * Execute a request and pass the response to the provided handler.
-     * 
-     * @param request
-     * @param handler
-     * @return
-     * @throws ClientProtocolException
-     * @throws IOException
-     */
-    @Override
-    public <T> T execute(HttpRequestBase request, ResponseHandler<? extends T> handler) throws ClientProtocolException, IOException {
-        if (handler == null)
-            throw new IllegalArgumentException("Response handler must not be null.");
-        final long start = System.nanoTime();
-        String logMessageF = "Request '{}' failed after {}";
-        try {
-            final T result = httpClient.execute(request, handler);
-            logMessageF = "Request '{}' took {}";
-            return result;
-        } finally {
-            log.debug(logMessageF, request.getRequestLine(), formatNanoDuration(System.nanoTime() - start));
-        }
-    }
-
-    /**
-     * Get a ready-to-use {@link HttpClient}.
-     */
-    @Override
-    public HttpClient getHttpClient() {
-        return new ReadLockHttpClient();
-    }
-
-    /**
-     * Execute a request.
-     * 
-     * <b>ATTENTION</b> Make sure to close the {@link InputStream} in the {@link HttpEntity}, or
-     * just use {@link #cleanupResponse(HttpResponse)}!
-     * 
-     * @param request
-     * @return
-     * @throws ClientProtocolException
-     * @throws IOException
-     * @see #cleanupResponse(HttpResponse)
-     * @see EntityUtils#consume(HttpEntity)
-     */
-    @Override
-    public HttpResponse execute(HttpRequestBase request) throws ClientProtocolException, IOException {
-        final long start = System.nanoTime();
-        String logMessageF = "Request '{}' failed after {}";
-        try {
-            final HttpResponse resp = httpClient.execute(request);
-            logMessageF = "Request '{}' took {}";
-            return resp;
-        } finally {
-            log.debug(logMessageF, request.getRequestLine(), formatNanoDuration(System.nanoTime() - start));
-        }
-    }
-
-    @Override
-    public void cleanupResponse(HttpResponse response) {
-        if (response == null) throw new IllegalArgumentException("Response must not be null");
-        EntityUtils.consumeQuietly(response.getEntity());
-    }
-
-    private final String formatNanoDuration(long nano) {
-        // convert to microseconds (1/1000s)
-        final long micro = nano / 1000;
-        if (micro > 1000 * 1000l) {
-            // more than a second
-            long millis = micro / 1000l;
-            if (millis > 60000l)
-                // more than a minute
-                return String.format("%d min %.1f sec", millis / (1000 * 60), 0.001d * millis % 60);
-            else
-                // more than a second
-                return String.format("%.1f sec", 0.001d * millis);
-        } else
-            // some millis
-            return String.format("%f ms", 0.001d * micro);
-    }
-
-    @Override
-    public String doGet(String requestUrl) throws IOException {
-        return doGet(requestUrl, new StringBodyResponseHandler());
-    }
-
-    @Override
-    public <T> T doGet(String requestUrl, ResponseHandler<? extends T> responseHandler) throws IOException {
-        final HttpGet get = new HttpGet(requestUrl);
-
-        return execute(get, responseHandler);
-    }
-
-    @Override
-    public <T> T doPost(String requestUrl, HttpEntity body, ResponseHandler<? extends T> responseHandler) throws IOException {
-        HttpPost post = new HttpPost(requestUrl);
-        post.setEntity(body);
-
-        return execute(post, responseHandler);
-    }
-
-    @Override
-    public String doPost(String url, String body) throws IOException {
-        return doPost(url, new StringEntity(body, ContentType.create("text/plain", DEFAULT_CHARSET)), new StringBodyResponseHandler());
-    }
-
-    @Override
-    public <T> T doPut(String url, HttpEntity body, ResponseHandler<? extends T> responseHandler) throws IOException {
-        HttpPut put = new HttpPut(url);
-        put.setEntity(body);
-
-        return execute(put, responseHandler);
-    }
-
-    @Override
-    public String doPut(String url, String body) throws IOException {
-        return doPut(url, new StringEntity(body, ContentType.create("text/plain", DEFAULT_CHARSET)), new StringBodyResponseHandler());
-    }
-
-    @Override
-    public <T> T doDelete(String url, ResponseHandler<? extends T> responseHandler) throws IOException {
-        HttpDelete delete = new HttpDelete(url);
-
-        return execute(delete, responseHandler);
-    }
-
-    @Override
-    public int doDelete(String url) throws IOException {
-        return doDelete(url, new StatusCodeResponseHandler());
-    }
-
-    @Override
-    public <T> T doHead(String url, ResponseHandler<? extends T> responseHandler) throws IOException {
-        HttpHead head = new HttpHead(url);
-
-        return execute(head, responseHandler);
-    }
-
-    @Override
-    public Date doHead(String url) throws IOException {
-        return doHead(url, new LastModifiedResponseHandler());
-    }
-
-    protected void onConfigurationChange(@Observes ConfigurationChangedEvent event) {
-        if (event.containsChangedKeyWithPrefix("core.http.")) {
-            try {
-                lock.writeLock().lock();
-                shutdown();
-                initialize();
-            } finally {
-                lock.writeLock().unlock();
-            }
-        }
-    }
-
-    @PostConstruct
-    protected void initialize() {
-        try {
-            lock.writeLock().lock();
-
-            httpParams = new BasicHttpParams();
-            String userAgentString =
-                    "LMF/" + configurationService.getStringConfiguration("kiwi.version") +
-                    " (running at " + configurationService.getServerUri() + ")" +
-                    " lmf-core/" + configurationService.getStringConfiguration("kiwi.version");
-            userAgentString = configurationService.getStringConfiguration("core.http.user_agent", userAgentString);
-
-            httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, configurationService.getIntConfiguration("core.http.so_timeout", 60000));
-            httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
-                    configurationService.getIntConfiguration("core.http.connection_timeout", 10000));
-
-            httpParams.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true);
-            httpParams.setIntParameter(ClientPNames.MAX_REDIRECTS, 3);
-
-            SchemeRegistry schemeRegistry = new SchemeRegistry();
-            schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
-            schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
-
-            PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);
-            cm.setMaxTotal(configurationService.getIntConfiguration("core.http.max_connections", 20));
-            cm.setDefaultMaxPerRoute(configurationService.getIntConfiguration("core.http.max_connections_per_route", 10));
-
-            final DefaultHttpClient hc = new DefaultHttpClient(cm, httpParams);
-            hc.setRedirectStrategy(new LMFRedirectStrategy());
-            hc.setHttpRequestRetryHandler(new LMFHttpRequestRetryHandler());
-            hc.removeRequestInterceptorByClass(org.apache.http.protocol.RequestUserAgent.class);
-            hc.addRequestInterceptor(new LMFRequestUserAgent(userAgentString));
-
-            if (configurationService.getBooleanConfiguration("core.http.client_cache_enable", true)) {
-                CacheConfig cacheConfig = new CacheConfig();
-                // FIXME: Hardcoded constants - is this useful?
-                cacheConfig.setMaxCacheEntries(1000);
-                cacheConfig.setMaxObjectSize(81920);
-
-                final HttpCacheStorage cacheStore = new EhcacheHttpCacheStorage(ehcache.get(), cacheConfig);
-
-                this.httpClient = new MonitoredHttpClient(new CachingHttpClient(hc, cacheStore, cacheConfig));
-            } else {
-                this.httpClient = new MonitoredHttpClient(hc);
-            }
-            bytesSent.set(0);
-            bytesReceived.set(0);
-            requestsExecuted.set(0);
-
-            idleConnectionMonitorThread = new IdleConnectionMonitorThread(httpClient.getConnectionManager());
-            idleConnectionMonitorThread.start();
-
-            StatisticsProvider stats = new StatisticsProvider(cm);
-            statisticsService.registerModule(HttpClientService.class.getSimpleName(), stats);
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    @PreDestroy
-    protected void shutdown() {
-        try {
-            lock.writeLock().lock();
-            statisticsService.unregisterModule(HttpClientService.class.getSimpleName());
-            idleConnectionMonitorThread.shutdown();
-            httpClient.getConnectionManager().shutdown();
-        } finally {
-            lock.writeLock().unlock();
-        }
-    }
-
-    private static class LMFRequestUserAgent implements HttpRequestInterceptor {
-
-        private final String baseUserAgent;
-
-        public LMFRequestUserAgent(String baseUserAgent) {
-            this.baseUserAgent = baseUserAgent;
-        }
-
-        private final String buildUserAgentString(String localPart) {
-            if (localPart == null || localPart.length() == 0)
-                return baseUserAgent;
-            else if (localPart.endsWith(baseUserAgent)) return localPart;
-            return localPart + " " + baseUserAgent;
-        }
-
-        @Override
-        public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
-            if (request == null) throw new IllegalArgumentException("HTTP request must not be null");
-            if (!request.containsHeader(HTTP.USER_AGENT)) {
-                String useragent = HttpProtocolParams.getUserAgent(request.getParams());
-                request.addHeader(HTTP.USER_AGENT, buildUserAgentString(useragent));
-            } else {
-                String useragent = request.getFirstHeader(HTTP.USER_AGENT).getValue();
-                request.setHeader(HTTP.USER_AGENT, buildUserAgentString(useragent));
-            }
-        }
-
-    }
-
-    private static class LMFRedirectStrategy extends DefaultRedirectStrategy {
-        @Override
-        public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException {
-            if (request == null)
-                throw new IllegalArgumentException("HTTP request must not be null");
-            if (response == null)
-                throw new IllegalArgumentException("HTTP response must not be null");
-
-            int statusCode = response.getStatusLine().getStatusCode();
-            String method = request.getRequestLine().getMethod();
-            Header locationHeader = response.getFirstHeader("location");
-            switch (statusCode) {
-            case HttpStatus.SC_MOVED_TEMPORARILY:
-                return (method.equalsIgnoreCase(HttpGet.METHOD_NAME) || method.equalsIgnoreCase(HttpHead.METHOD_NAME))
-                        && locationHeader != null;
-            case HttpStatus.SC_MOVED_PERMANENTLY:
-            case HttpStatus.SC_TEMPORARY_REDIRECT:
-                return method.equalsIgnoreCase(HttpGet.METHOD_NAME)
-                        || method.equalsIgnoreCase(HttpHead.METHOD_NAME);
-            case HttpStatus.SC_SEE_OTHER:
-                return true;
-            case HttpStatus.SC_MULTIPLE_CHOICES:
-                return true;
-            default:
-                return false;
-            } // end of switch
-        }
-    }
-
-    private static class LMFHttpRequestRetryHandler implements HttpRequestRetryHandler {
-        /**
-         * Determines if a method should be retried after an IOException occurs
-         * during execution.
-         * 
-         * @param exception
-         *            the exception that occurred
-         * @param executionCount
-         *            the number of times this method has been unsuccessfully
-         *            executed
-         * @param context
-         *            the context for the request execution
-         * @return <code>true</code> if the method should be retried, <code>false</code> otherwise
-         */
-        @Override
-        public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
-            return false;
-        }
-    }
-
-    private static class IdleConnectionMonitorThread extends Thread {
-
-        private final ClientConnectionManager connMgr;
-        private volatile boolean              shutdown;
-
-        public IdleConnectionMonitorThread(ClientConnectionManager connMgr) {
-            super("HttpClientService Idle Connection Manager");
-            this.connMgr = connMgr;
-            setDaemon(true);
-        }
-
-        @Override
-        public void run() {
-            try {
-                while (!shutdown) {
-                    synchronized (this) {
-                        wait(5000);
-                        // Close expired connections
-                        connMgr.closeExpiredConnections();
-                        // Optionally, close connections
-                        // that have been idle longer than 30 sec
-                        connMgr.closeIdleConnections(30, TimeUnit.SECONDS);
-                    }
-                }
-            } catch (InterruptedException ex) {
-                // terminate
-            }
-        }
-
-        public void shutdown() {
-            synchronized (this) {
-                shutdown = true;
-                notifyAll();
-            }
-        }
-
-    }
-
-    private class StatisticsProvider implements StatisticsModule {
-
-        private boolean                        enabled;
-        private PoolingClientConnectionManager connectionManager;
-
-        public StatisticsProvider(PoolingClientConnectionManager cm) {
-            this.connectionManager = cm;
-            enabled = true;
-        }
-
-        @Override
-        public void enable() {
-            enabled = true;
-        }
-
-        @Override
-        public void disable() {
-            enabled = false;
-        }
-
-        @Override
-        public boolean isEnabled() {
-            return enabled;
-        }
-
-        @Override
-        public List<String> getPropertyNames() {
-            return Collections.unmodifiableList(Arrays.asList(KEYS));
-        }
-
-        @Override
-        public Map<String, String> getStatistics() {
-            int i = 0;
-            final Map<String, String> data = new LinkedHashMap<String, String>();
-            data.put(KEYS[i++], String.valueOf(requestsExecuted.get()));
-            data.put(KEYS[i++], humanReadableBytes(bytesSent.get(), false));
-            data.put(KEYS[i++], humanReadableBytes(bytesReceived.get(), false));
-            data.put(KEYS[i++], humanReadableBytes(bytesFromCache.get(), false));
-
-            final PoolStats cmStats = connectionManager.getTotalStats();
-            data.put(KEYS[i++], connectionManager.getClass().getSimpleName());
-            data.put(KEYS[i++], String.valueOf(cmStats.getMax()));
-            data.put(KEYS[i++], String.valueOf(cmStats.getAvailable()));
-            data.put(KEYS[i++], String.valueOf(cmStats.getLeased()));
-            data.put(KEYS[i++], String.valueOf(cmStats.getPending()));
-            return data;
-        }
-
-        private String humanReadableBytes(long bytes, boolean si) {
-            final int unit = si ? 1000 : 1024;
-            if (bytes < unit) return bytes + " B";
-            int exp = (int) (Math.log(bytes) / Math.log(unit));
-            String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i");
-            return String.format("%.2f %sB", bytes / Math.pow(unit, exp), pre);
-        }
-
-        @Override
-        public String getName() {
-            return HttpClientService.class.getSimpleName();
-        }
-
-    }
-
-    private class ReadLockHttpClient implements HttpClient {
-
-        private HttpParams params;
-
-        public ReadLockHttpClient() {
-            this.params = new DefaultedHttpParams(new BasicHttpParams(), httpParams);
-        }
-
-        @Override
-        public HttpParams getParams() {
-            return params;
-        }
-
-        @Override
-        public ClientConnectionManager getConnectionManager() {
-            return httpClient.getConnectionManager();
-        }
-
-        @Override
-        public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(request);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public HttpResponse execute(HttpUriRequest request, HttpContext context) throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(request, context);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public HttpResponse execute(HttpHost target, HttpRequest request) throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(target, request);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public HttpResponse execute(HttpHost target, HttpRequest request, HttpContext context) throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(target, request, context);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public <T> T execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler) throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(request, responseHandler);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public <T> T execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context) throws IOException,
-        ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(request, responseHandler, context);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public <T> T execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler) throws IOException,
-        ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(target, request, responseHandler);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-        @Override
-        public <T> T execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context)
-                throws IOException, ClientProtocolException {
-            lock.readLock().lock();
-            try {
-                return httpClient.execute(target, request, responseHandler, context);
-            } finally {
-                lock.readLock().unlock();
-            }
-        }
-
-    }
-
-    protected class MonitoredHttpClient implements HttpClient {
-
-        private final HttpClient delegate;
-
-        public MonitoredHttpClient(HttpClient delegate) {
-            this.delegate = delegate;
-        }
-
-        @Override
-        public HttpParams getParams() {
-            return delegate.getParams();
-        }
-
-        @Override
-        public ClientConnectionManager getConnectionManager() {
-            return delegate.getConnectionManager();
-        }
-
-        @Override
-        public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException {
-            final Task task = preProcess(request);
-
-            final HttpResponse response;
-            lock.readLock().lock();
-            try {
-                response = delegate.execute(request);
-            } catch (ClientProtocolException cpe) {
-                task.endTask();
-                throw cpe;
-            } catch (IOException io) {
-                task.endTask();
-                throw io;
-            } finally {
-                lock.readLock().unlock();
-            }
-
-            return postProcess(response, null, task);
-        }
-
-        @Override
-        public HttpResponse execute(HttpUriRequest request, HttpContext context) throws IOException, ClientProtocolException {
-            final Task task = preProcess(request);
-
-            final HttpResponse response;
-            lock.readLock().lock();
-            try {
-                response = delegate.execute(request, context);
-            } catch (ClientProtocolException cpe) {
-                task.endTask();
-                throw cpe;
-            } catch (IOException io) {
-                task.endTask();
-                throw io;
-            } finally {
-                lock.readLock().unlock();
-            }
-
-            return postProcess(response, context, task);
-        }
-
-        private Task preProcess(HttpRequest request) {
-            final RequestLine rl = request.getRequestLine();
-            final String taskName = String.format("%S %s %S", rl.getMethod(), rl.getUri(), request.getProtocolVersion());
-
-            final Task task = taskManagerService.createSubTask(taskName, TASK_GROUP_CLIENT);
-            task.updateMessage("preparing request");
-            task.updateDetailMessage("method", rl.getMethod());
-            task.updateDetailMessage("url", rl.getUri());
-            // TODO: some more detail messages?
-
-            if (request instanceof HttpEntityEnclosingRequest) {
-                // To report upload progress, the entity is wrapped in a MonitoredHttpEntity.
-                final HttpEntityEnclosingRequest entityRequest = (HttpEntityEnclosingRequest) request;
-                entityRequest.setEntity(new MonitoredHttpEntity(entityRequest.getEntity(), task, bytesSent));
-            }
-
-            task.updateMessage("sending request");
-            return task;
-        }
-
-        private HttpResponse postProcess(final HttpResponse response, HttpContext context, final Task task) {
-            requestsExecuted.incrementAndGet();
-            task.resetProgress();
-            task.updateMessage("retrieving response");
-            if (response.getEntity() != null) {
-                boolean cachedResponse;
-                if (context != null) {
-                    CacheResponseStatus cacheRespStatus = (CacheResponseStatus) context.getAttribute(CachingHttpClient.CACHE_RESPONSE_STATUS);
-                    // To report download progress, the entity is wrapped in a MonitoredHttpEntity.
-                    cachedResponse = cacheRespStatus != null && cacheRespStatus != CacheResponseStatus.CACHE_MISS;
-                } else {
-                    cachedResponse = false;
-                }
-                response.setEntity(new MonitoredHttpEntity(response.getEntity(), task, cachedResponse ? bytesFromCache : bytesReceived));
-            } else {
-                task.endTask();
-            }
-            return response;
-        }
-
-        @Override
-        public HttpResponse execute(HttpHost target, HttpRequest request) throws IOException, ClientProtocolException {
-            final Task task = preProcess(request);
-
-            final HttpResponse response;
-            lock.readLock().lock();
-            try {
-                response = delegate.execute(target, request);
-            } catch (ClientProtocolException cpe) {
-                task.endTask();
-                throw cpe;
-            } catch (IOException io) {
-                task.endTask();
-                throw io;
-            } finally {
-                lock.readLock().unlock();
-            }
-
-            return postProcess(response, null, task);
-        }
-
-        @Override
-        public HttpResponse execute(HttpHost target, HttpRequest request, HttpContext context) throws IOException, ClientProtocolException {
-            final Task task = preProcess(request);
-
-            final HttpResponse response;
-            lock.readLock().lock();
-            try {
-                response = delegate.execute(target, request, context);
-            } catch (ClientProtocolException cpe) {
-                task.endTask();
-                throw cpe;
-            } catch (IOException io) {
-                task.endTask();
-                throw io;
-            } finally {
-                lock.readLock().unlock();
-            }
-
-            return postProcess(response, context, task);
-        }
-
-        @Override
-        public <T> T execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler) throws IOException, ClientProtocolException {
-            final HttpResponse response = execute(request);
-
-            return processResponse(responseHandler, response);
-        }
-
-        private <T> T processResponse(ResponseHandler<? extends T> responseHandler, final HttpResponse response) throws ClientProtocolException,
-        IOException {
-            try {
-                return responseHandler.handleResponse(response);
-            } finally {
-                // Make sure everything is cleaned up properly
-                EntityUtils.consume(response.getEntity());
-            }
-        }
-
-        @Override
-        public <T> T execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context) throws IOException,
-        ClientProtocolException {
-            final HttpResponse response = execute(request, context);
-
-            return processResponse(responseHandler, response);
-        }
-
-        @Override
-        public <T> T execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler) throws IOException,
-        ClientProtocolException {
-            final HttpResponse response = execute(target, request);
-
-            return processResponse(responseHandler, response);
-        }
-
-        @Override
-        public <T> T execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context)
-                throws IOException, ClientProtocolException {
-            final HttpResponse response = execute(target, request, context);
-
-            return processResponse(responseHandler, response);
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/http/MonitoredHttpEntity.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/http/MonitoredHttpEntity.java b/platform/marmotta-core/src/main/java/kiwi/core/services/http/MonitoredHttpEntity.java
deleted file mode 100644
index 92c2650..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/http/MonitoredHttpEntity.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.http;
-
-import kiwi.core.api.task.Task;
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.entity.HttpEntityWrapper;
-
-import java.io.*;
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * An implementation of {@link HttpEntity} that reports write/read operations to a {@link Task}.
- * 
- */
-@NotThreadSafe
-class MonitoredHttpEntity extends HttpEntityWrapper {
-
-    private MonitoredInputStream foo = null;
-    private final Task           monitor;
-    private final AtomicLong     bytesReceived;
-
-    /**
-     * Create a {@link MonitoredHttpEntity} based on the provided {@link HttpEntity} reporting
-     * progress to the {@link Task}.
-     * 
-     * @param delegate the {@link HttpEntity} to wrap.
-     * @param monitor the {@link Task} to report the progress to.
-     * @param bytesReceived {@link AtomicLong} to add transfered bytes to.
-     */
-    public MonitoredHttpEntity(HttpEntity delegate, Task monitor, AtomicLong bytesReceived) {
-        super(delegate);
-        this.monitor = monitor;
-        this.bytesReceived = bytesReceived;
-
-        monitorHeader(wrappedEntity.getContentType());
-        monitorHeader(wrappedEntity.getContentEncoding());
-    }
-
-    /**
-     * Create a {@link MonitoredHttpEntity} based on the provided {@link HttpEntity} reporting
-     * progress to the {@link Task}.
-     * 
-     * @param delegate the {@link HttpEntity} to wrap.
-     * @param monitor the {@link Task} to report the progress to.
-     */
-    public MonitoredHttpEntity(HttpEntity delegate, Task monitor) {
-        this(delegate, monitor, null);
-    }
-
-    @Override
-    public InputStream getContent() throws IOException {
-        if (foo == null) {
-            foo = new MonitoredInputStream(super.getContent());
-            if (monitor != null && getContentLength() > 0) {
-                monitor.updateTotalSteps(getContentLength());
-            }
-        }
-        return foo;
-    }
-
-    @Override
-    public void writeTo(OutputStream outstream) throws IOException {
-        if (monitor != null && getContentLength() > 0) {
-            monitor.updateTotalSteps(getContentLength());
-        }
-        super.writeTo(new MonitoredOutputStream(outstream));
-        if (monitor != null) {
-            monitor.updateMessage("waiting for response");
-        }
-    }
-
-    private void monitorHeader(final Header ct) {
-        if (monitor != null && ct != null) {
-            monitor.updateDetailMessage(ct.getName(), ct.getValue());
-        }
-    }
-
-    private void updateMonitor(long cPos, long delta) {
-        if (monitor != null) {
-            monitor.updateProgress(cPos);
-        }
-        if (bytesReceived != null) {
-            bytesReceived.addAndGet(delta);
-        }
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        monitor.endTask();
-        super.finalize();
-    }
-
-    /**
-     * OutputStream that reports the progress on every write operation.
-     * 
-     */
-    protected class MonitoredOutputStream extends FilterOutputStream {
-
-        private long cPos;
-
-        public MonitoredOutputStream(OutputStream out) {
-            super(out);
-            cPos = 0;
-        }
-
-        @Override
-        public void write(int b) throws IOException {
-            super.write(b);
-            updateMonitor(++cPos, 1);
-        }
-
-        @Override
-        public void write(byte[] b, int off, int len) throws IOException {
-            /* copied from FilterOutputStream.write(byte[], int, int) */
-            if ((off | len | b.length - (len + off) | off + len) < 0)
-                throw new IndexOutOfBoundsException();
-
-            for (int i = 0; i < len; i++) {
-                super.write(b[off + i]);
-            }
-            updateMonitor(cPos += len, len);
-        }
-
-        @Override
-        public void close() throws IOException {
-            super.close();
-        }
-
-    }
-
-    /**
-     * InputStream that reports the progress on every read operation.
-     */
-    protected class MonitoredInputStream extends FilterInputStream {
-
-        private long cPos, markPos;
-
-        protected MonitoredInputStream(InputStream in) {
-            super(in);
-            cPos = 0;
-        }
-
-        @Override
-        public int read() throws IOException {
-            final int i = super.read();
-            if (i >= 0) {
-                updateMonitor(++cPos, 1);
-            }
-            return i;
-        }
-
-        @Override
-        public int read(byte[] b) throws IOException {
-            final int i = super.read(b);
-            if (i > 0) {
-                updateMonitor(cPos += i, i);
-            }
-            return i;
-        }
-
-        @Override
-        public int read(byte[] b, int off, int len) throws IOException {
-            final int i = super.read(b, off, len);
-            if (i > 0) {
-                updateMonitor(cPos += i, i);
-            }
-            return i;
-        }
-
-        @Override
-        public long skip(long n) throws IOException {
-            final long i = super.skip(n);
-            if (i > 0) {
-                updateMonitor(cPos += i, i);
-            }
-            return i;
-        }
-
-        @Override
-        public synchronized void mark(int readlimit) {
-            super.mark(readlimit);
-            markPos = cPos;
-        }
-
-        @Override
-        public synchronized void reset() throws IOException {
-            super.reset();
-            updateMonitor(cPos = markPos, 0);
-        }
-
-        @Override
-        public void close() throws IOException {
-            monitor.endTask();
-            super.close();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/LastModifiedResponseHandler.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/LastModifiedResponseHandler.java b/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/LastModifiedResponseHandler.java
deleted file mode 100644
index 2dbe943..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/LastModifiedResponseHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.http.response;
-
-import org.apache.http.Header;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.util.EntityUtils;
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public class LastModifiedResponseHandler implements ResponseHandler<Date> {
-    // Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
-    private final SimpleDateFormat RFC_1123 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
-    // Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
-    private final SimpleDateFormat RFC_1036 = new SimpleDateFormat("EEEE, dd-MMM-yy HH:mm:ss z");
-    // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
-    private final SimpleDateFormat ANSI_C   = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy");
-
-    @Override
-    public Date handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
-        try {
-            Header lastModH = response.getFirstHeader("Last-Modified");
-            return lastModH != null ? parseDate(lastModH.getValue()) : null;
-        } finally {
-            EntityUtils.consume(response.getEntity());
-        }
-    }
-
-    private Date parseDate(String value) {
-        try {
-            return RFC_1123.parse(value);
-        } catch (ParseException e) {
-            try {
-                return RFC_1036.parse(value);
-            } catch (ParseException e1) {
-                try {
-                    return ANSI_C.parse(value);
-                } catch (ParseException e2) {
-                    return null;
-                }
-            }
-        }
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StatusCodeResponseHandler.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StatusCodeResponseHandler.java b/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StatusCodeResponseHandler.java
deleted file mode 100644
index 1d0c06c..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StatusCodeResponseHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.http.response;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.util.EntityUtils;
-
-import java.io.IOException;
-
-public class StatusCodeResponseHandler implements ResponseHandler<Integer> {
-
-    @Override
-    public Integer handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
-        try {
-            return response.getStatusLine().getStatusCode();
-        } finally {
-            EntityUtils.consume(response.getEntity());
-        }
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StringBodyResponseHandler.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StringBodyResponseHandler.java b/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StringBodyResponseHandler.java
deleted file mode 100644
index 95534ef..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/http/response/StringBodyResponseHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.http.response;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.util.EntityUtils;
-
-import java.io.IOException;
-
-public class StringBodyResponseHandler implements ResponseHandler<String> {
-
-    @Override
-    public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
-        if (response.getStatusLine().getStatusCode() == 200) {
-            final HttpEntity entity = response.getEntity();
-
-            return entity != null ? EntityUtils.toString(entity) : null;
-        }
-        return null;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/importer/ImportServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/importer/ImportServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/importer/ImportServiceImpl.java
deleted file mode 100644
index b7f6b68..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/importer/ImportServiceImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.importer;
-
-import kiwi.core.api.importer.ImportService;
-import kiwi.core.api.importer.Importer;
-import kiwi.core.exception.io.LMFImportException;
-import org.openrdf.model.Resource;
-import org.openrdf.model.URI;
-import org.slf4j.Logger;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * User: Thomas Kurz
- * Date: 02.02.11
- * Time: 11:38
- */
-@ApplicationScoped
-public class ImportServiceImpl implements ImportService{
-
-	@Inject
-    private Logger log;
-
-    private Map<String,Importer> importerMap;
-
-    public ImportServiceImpl() {
-    }
-
-    @Inject
-	public void initImporters(@Any Instance<Importer> importers) {
-        if(importerMap == null) {
-            importerMap = new HashMap<String,Importer>();
-            for( Importer i : importers ) {
-                for( String s : i.getAcceptTypes() ) {
-                    importerMap.put(s,i);
-                    log.info("registered importer for type {}: {}",s,i.getName());
-                }
-            }
-        }
-	}
-
-	@Override
-	public Set<String> getAcceptTypes() {
-		return importerMap.keySet();
-	}
-
-	@Override
-	public int importData(URL url, String format, Resource user, URI context) throws LMFImportException {
-		return getImporterInstance(format).importData(url,format,user,context);
-	}
-
-	@Override
-	public int importData(InputStream is, String format, Resource user, URI context) throws LMFImportException {
-		return getImporterInstance(format).importData(is,format,user,context);
-	}
-
-	@Override
-	public int importData(Reader reader, String format, Resource user, URI context) throws LMFImportException {
-		return getImporterInstance(format).importData(reader,format,user,context);
-	}
-
-	private Importer getImporterInstance(String type) throws LMFImportException {
-		if(!importerMap.containsKey(type)) throw new LMFImportException("no importer defined for type "+type);
-		return importerMap.get(type);
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/importer/rdf/RDFImporterImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/importer/rdf/RDFImporterImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/importer/rdf/RDFImporterImpl.java
deleted file mode 100644
index 2060c25..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/importer/rdf/RDFImporterImpl.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.importer.rdf;
-
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.importer.Importer;
-import kiwi.core.api.task.Task;
-import kiwi.core.api.task.TaskManagerService;
-import kiwi.core.api.triplestore.SesameService;
-import kiwi.core.exception.io.LMFImportException;
-import org.openrdf.model.Resource;
-import org.openrdf.model.URI;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.openrdf.rio.RDFFormat;
-import org.openrdf.rio.RDFParseException;
-import org.openrdf.rio.RDFParserRegistry;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * An io for importing RDF sources in RDF/XML or other RDF formats. Currently uses
- * the Sesame parser for parsing the RDF content.
- * <p>
- * For each triple found in the imported data, an appropriate KiWi triple is added. For each
- * resource in the imported data, the io creates a ContentItem using rdfs:label or
- * dc:title as title and rdfs:comment or dc:description as content.
- *
- * @author Sebastian Schaffert
- *
- */
-@ApplicationScoped
-public class RDFImporterImpl implements Importer {
-
-    @Inject
-    private Logger log;
-
-
-    @Inject
-    private ConfigurationService configurationService;
-
-    @Inject
-    private TaskManagerService   taskManagerService;
-
-    @Inject
-    private SesameService sesameService;
-
-    private static long taskCounter = 0;
-
-    private List<String> acceptTypes;
-
-
-
-
-    /**
-     * Get a collection of all mime types accepted by this io. Used for automatically
-     * selecting the appropriate io in ImportService.
-     *
-     * @return a set of strings representing the mime types accepted by this io
-     */
-    @Override
-    public Set<String> getAcceptTypes() {
-        return new HashSet<String>(acceptTypes);
-    }
-
-    /**
-     * Get a description of this io for presentation to the user.
-     *
-     * @return a string describing this io for the user
-     */
-    @Override
-    public String getDescription() {
-        return "Importer for various RDF formats (RDF/XML, N3, TURTLE); also supports OWL and RDFS files";
-    }
-
-    /**
-     * Get the name of this io. Used for presentation to the user and for internal
-     * identification.
-     *
-     * @return a string uniquely identifying this io
-     */
-    @Override
-    public String getName() {
-        return "RDF";
-    }
-
-    /**
-     * Import data from the input stream provided as argument into the KiWi database.
-     *
-     * @param url the url from which to read the data
-     * @param user the user to use as author of all imported data
-     */
-    @Override
-    //@RaiseEvent("ontologyChanged")
-    public int importData(URL url, String format, Resource user, URI context) throws LMFImportException {
-        try {
-            return importData(url.openStream(), format, user,context, url.toString());
-        } catch (IOException ex) {
-            log.error("I/O error while importing data from URL {}: {}", url, ex.getMessage());
-            return 0;
-        }
-    }
-
-
-    /**
-     * Import data from the input stream provided as argument into the KiWi database.
-     * <p>
-     * Import function for formats supported by Sesame; imports the data first into a separate memory
-     * repository, and then iterates over all statements, adding them to the current knowledge space.
-     * This method also checks for resources that have a rdfs:label, dc:title, or skos:prefLabel and uses
-     * it as the title for newly created ContentItems.
-     *
-     * @param is the input stream from which to read the data
-     * @param user the user to use as author of all imported data
-     */
-    @Override
-    //@RaiseEvent("ontologyChanged")
-    public int importData(InputStream is, String format, Resource user, URI context) throws LMFImportException {
-        String baseUri = configurationService.getBaseUri() + "resource/";
-        return importData(is,format,user,context,baseUri);
-    }
-
-    /**
-     * Import data from the input stream provided as argument into the KiWi database.
-     * <p>
-     * Import function for formats supported by Sesame; imports the data first into a separate memory
-     * repository, and then iterates over all statements, adding them to the current knowledge space.
-     * This method also checks for resources that have a rdfs:label, dc:title, or skos:prefLabel and uses
-     * it as the title for newly created ContentItems.
-     *
-     * @param is the input stream from which to read the data
-     * @param user the user to use as author of all imported data
-     */
-    //@RaiseEvent("ontologyChanged")
-    private int importData(InputStream is, String format, Resource user, URI context, String baseUri) throws LMFImportException {
-
-        // TODO: need to figure out format automatically!
-        RDFFormat f = getFormat(format);
-
-        final String taskName = String.format("RDF Importer Task %d (%s)", ++taskCounter, f.getName());
-        Task task = taskManagerService.createSubTask(taskName,"Importer");
-        task.updateMessage("importing data into LMF repository");
-        task.updateDetailMessage("format", f.getDefaultMIMEType());
-        task.updateDetailMessage("baseUri", baseUri);
-
-        int count = 0;
-
-        try {
-            if (is != null) {
-
-                long timer = System.currentTimeMillis();
-
-                RepositoryConnection c_import = sesameService.getConnection();
-                try {
-                    c_import.add(is, baseUri, f, context );
-                } catch (RepositoryException ex) {
-                    log.error("error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } catch (RDFParseException ex) {
-                    log.error("parse error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } catch (IOException ex) {
-                    log.error("I/O error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } finally {
-                    c_import.commit();
-                    c_import.close();
-                }
-                log.debug("imported data into LMF repository ({} ms)", System.currentTimeMillis() - timer);
-
-            } else {
-                log.error("could not load ontology; InputStream was null");
-            }
-        } catch (Exception ex) {
-            log.error("error while importing Sesame data:", ex);
-            throw new LMFImportException(ex);
-        } finally {
-            taskManagerService.endTask(task);
-        }
-        return count;
-
-    }
-
-    /**
-     * Import data from the reader provided as argument into the KiWi database.
-     * <p>
-     * Import function for formats supported by Sesame; imports the data first into a separate memory
-     * repository, and then iterates over all statements, adding them to the current knowledge space.
-     * This method also checks for resources that have a rdfs:label, dc:title, or skos:prefLabel and uses
-     * it as the title for newly created ContentItems.
-     *
-     * @param reader the reader from which to read the data
-     * @param user the user to use as author of all imported data
-     */
-    @Override
-    public int importData(Reader reader, String format, Resource user, URI context) throws LMFImportException {
-
-        // TODO: need to figure out format automatically!
-        RDFFormat f = getFormat(format);
-
-        String baseUri = configurationService.getBaseUri() + "resource/";
-        final String taskName = String.format("RDF Importer Task %d (%s)", ++taskCounter, f.getName());
-        Task task = taskManagerService.createSubTask(taskName, "Importer");
-        task.updateMessage("importing data into LMF repository");
-        task.updateDetailMessage("format", f.getDefaultMIMEType());
-        task.updateDetailMessage("baseURI", baseUri);
-
-        int count = 0;
-
-        try {
-            if (reader != null) {
-
-                long timer = System.currentTimeMillis();
-
-                RepositoryConnection c_import = sesameService.getConnection();
-                try {
-                    c_import.add(reader, baseUri, f, context);
-                } catch (RepositoryException ex) {
-                    log.error("error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } catch (RDFParseException ex) {
-                    log.error("parse error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } catch (IOException ex) {
-                    log.error("I/O error while importing Sesame data:", ex);
-                    c_import.rollback();
-                    throw ex;
-                } finally {
-                    c_import.commit();
-                    c_import.close();
-                }
-
-                log.info("imported data into LMF repository ({} ms)", System.currentTimeMillis() - timer);
-
-            } else {
-                log.error("could not load ontology; InputStream was null");
-            }
-        } catch (Exception ex) {
-            log.error("error while importing Sesame data:", ex);
-            throw new LMFImportException(ex);
-        } finally {
-            taskManagerService.endTask(task);
-        }
-        return count;
-    }
-
-
-    @PostConstruct
-    public void initialise() {
-        log.info("registering RDF importer ...");
-
-
-        RDFParserRegistry parserRegistry = RDFParserRegistry.getInstance();
-
-        acceptTypes = new ArrayList<String>();
-        for(RDFFormat format : parserRegistry.getKeys()) {
-            acceptTypes.addAll(format.getMIMETypes());
-        }
-        log.info(" - available parsers: {}", Arrays.toString(acceptTypes.toArray()));
-
-    }
-
-
-    private static RDFFormat getFormat(String format) {
-        return RDFParserRegistry.getInstance().getFileFormatForMIMEType(format);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/io/LMFIOServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/io/LMFIOServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/io/LMFIOServiceImpl.java
deleted file mode 100644
index 05019fe..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/io/LMFIOServiceImpl.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.io;
-
-import kiwi.core.api.io.LMFIOService;
-import org.openrdf.rio.RDFFormat;
-import org.openrdf.rio.RDFParserRegistry;
-import org.openrdf.rio.RDFWriterRegistry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * User: Thomas Kurz
- * Date: 18.02.11
- * Time: 10:41
- */
-@ApplicationScoped
-public class LMFIOServiceImpl implements LMFIOService {
-
-    private Logger log = LoggerFactory.getLogger(this.getClass());
-
-    private RDFParserRegistry parserRegistry;
-    private RDFWriterRegistry writerRegistry;
-
-    private List<String> acceptTypes;
-    private List<String> producedTypes;
-
-    @PostConstruct
-    public void initialise() {
-        log.info("initialising LMF I/O service ...");
-
-        parserRegistry = RDFParserRegistry.getInstance();
-
-        acceptTypes = new ArrayList<String>();
-        for(RDFFormat format : parserRegistry.getKeys()) {
-            acceptTypes.addAll(format.getMIMETypes());
-        }
-        log.info(" - available parsers: {}", Arrays.toString(acceptTypes.toArray()));
-
-        writerRegistry = RDFWriterRegistry.getInstance();
-
-        producedTypes = new ArrayList<String>();
-        for(RDFFormat format : writerRegistry.getKeys()) {
-            producedTypes.addAll(format.getMIMETypes());
-        }
-        log.info(" - available writers: {}", Arrays.toString(producedTypes.toArray()));
-
-
-
-    }
-
-
-	/**
-	 * returns a list of all mimetypes which can be parsed by implemented parsers
-	 * @return
-	 */
-	@Override
-	public List<String> getAcceptTypes() {
-		return acceptTypes;
-	}
-
-	/**
-	 * returns a list of all mimetypes which can be produced by implemented serializers
-	 * @return
-	 */
-	@Override
-	public List<String> getProducedTypes() {
-		return producedTypes;
-	}
-
-	/**
-	 * returns a serializer for a given mimetype; null if no serializer defined
-	 * @param mimetype
-	 * @return
-	 */
-	@Override
-	public RDFFormat getSerializer(String mimetype) {
-		return writerRegistry.getFileFormatForMIMEType(mimetype);
-	}
-
-	/**
-	 * returns a parser for a given mimetype; null if no parser defined
-	 * @param mimetype
-	 * @return
-	 */
-	@Override
-	public RDFFormat getParser(String mimetype) {
-		return parserRegistry.getFileFormatForMIMEType(mimetype);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LMFLogbackPropertyDefiner.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LMFLogbackPropertyDefiner.java b/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LMFLogbackPropertyDefiner.java
deleted file mode 100644
index 2330790..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LMFLogbackPropertyDefiner.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.logging;
-
-import ch.qos.logback.core.Context;
-import ch.qos.logback.core.spi.PropertyDefiner;
-import ch.qos.logback.core.status.Status;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.util.KiWiContext;
-
-/**
- * An abstract class with access to the LMF Configuration Service to get access to LMF runtime configuration.
- * <p/>
- * Author: Sebastian Schaffert
- */
-public class LMFLogbackPropertyDefiner implements PropertyDefiner {
-
-
-    protected ConfigurationService configurationService;
-
-    protected Context context;
-    
-    protected String key;
-
-    public LMFLogbackPropertyDefiner() {
-        configurationService = KiWiContext.getInstance(ConfigurationService.class);
-    }
-
-    /**
-     * Get the property value, defined by this property definer
-     *
-     * @return defined property value
-     */
-    @Override
-    public String getPropertyValue() {
-        if(key != null) {
-            return configurationService.getStringConfiguration(key);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public void setContext(Context context) {
-        this.context = context;
-    }
-
-    @Override
-    public Context getContext() {
-        return context;
-    }
-
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    @Override
-    public void addStatus(Status status) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addInfo(String msg) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addInfo(String msg, Throwable ex) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addWarn(String msg) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addWarn(String msg, Throwable ex) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addError(String msg) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public void addError(String msg, Throwable ex) {
-        //To change body of implemented methods use File | Settings | File Templates.
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LoggingServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LoggingServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LoggingServiceImpl.java
deleted file mode 100644
index 9f3fa65..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/logging/LoggingServiceImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.logging;
-
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.joran.JoranConfigurator;
-import ch.qos.logback.core.joran.spi.JoranException;
-import ch.qos.logback.core.util.StatusPrinter;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.logging.LoggingService;
-import kiwi.core.events.ConfigurationChangedEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Inject;
-import java.io.File;
-
-/**
- * LoggingServiceImpl
- *
- * @author Sebastian Schaffert
- *
- */
-@ApplicationScoped
-public class LoggingServiceImpl implements LoggingService {
-    private static Logger log = LoggerFactory.getLogger(LoggingService.class);
-
-    @Inject
-    private ConfigurationService configurationService;
-
-    @PostConstruct
-    public void initialize() {
-        log.info("KiWi Logging Service starting up ...");
-
-        for(String key : configurationService.listConfigurationKeys("logging.")) {
-            String loggerName   = key.substring("logging.".length());
-            setConfiguredLevel(loggerName);
-        }
-    }
-
-    public void configurationChangedEvent(@Observes ConfigurationChangedEvent event) {
-        for (String key : event.getKeys())
-            if (key.startsWith("logging.")) {
-                String loggerName   = key.substring("logging.".length());
-                setConfiguredLevel(loggerName);
-            } else if(key.equalsIgnoreCase("debug.enabled")) {
-                // set root logger level
-                reloadLoggingConfiguration();
-            }
-    }
-
-
-    private void reloadLoggingConfiguration() {
-        log.info("reloading logging configuration");
-        File log_configuration = new File(configurationService.getWorkDir() + File.separator + "logback.xml");
-        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
-        try {
-            JoranConfigurator configurator = new JoranConfigurator();
-            configurator.setContext(context);
-            context.reset();
-            configurator.doConfigure(log_configuration);
-        } catch (JoranException e) {
-            StatusPrinter.printInCaseOfErrorsOrWarnings(context);
-        }
-
-        // set root logger level
-        ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
-        if(configurationService.getBooleanConfiguration("debug.enabled",false)) {
-            rootLogger.setLevel(Level.DEBUG);
-        } else {
-            rootLogger.setLevel(Level.INFO);
-        }
-    }
-
-
-
-    private void setConfiguredLevel(String loggerName) {
-        String logLevelName = configurationService.getStringConfiguration("logging."+loggerName,"INFO");
-        Level logLevel = null;
-
-        if("DEBUG".equals(logLevelName.toUpperCase())) {
-            logLevel = Level.DEBUG;
-        } else if("INFO".equals(logLevelName.toUpperCase())) {
-            logLevel = Level.INFO;
-        } else if("WARN".equals(logLevelName.toUpperCase())) {
-            logLevel = Level.WARN;
-        } else if("ERROR".equals(logLevelName.toUpperCase())) {
-            logLevel = Level.ERROR;
-        } else {
-            log.error("unsupported log level for pattern {}: {}",loggerName,logLevelName);
-        }
-
-        if(logLevel != null) {
-            ch.qos.logback.classic.Logger logger =
-                    (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(loggerName);
-
-            logger.setLevel(logLevel);
-            log.info("configured logger {} to level {}",loggerName,logLevelName.toUpperCase());
-        }
-    }
-
-    /**
-     * Provide a logger to the injection point given as argument.
-     * 
-     * @see kiwi.core.api.logging.LoggingService#createLogger(javax.enterprise.inject.spi.InjectionPoint)
-     */
-    @Override
-    @Produces
-    public Logger createLogger(InjectionPoint injectionPoint) {
-        return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/4d3eebdd/platform/marmotta-core/src/main/java/kiwi/core/services/modules/LMFResourceServiceImpl.java
----------------------------------------------------------------------
diff --git a/platform/marmotta-core/src/main/java/kiwi/core/services/modules/LMFResourceServiceImpl.java b/platform/marmotta-core/src/main/java/kiwi/core/services/modules/LMFResourceServiceImpl.java
deleted file mode 100644
index 6614d80..0000000
--- a/platform/marmotta-core/src/main/java/kiwi/core/services/modules/LMFResourceServiceImpl.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/**
- * Copyright (C) 2013 Salzburg Research.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package kiwi.core.services.modules;
-
-import com.google.common.io.ByteStreams;
-import eu.medsea.mimeutil.MimeType;
-import eu.medsea.mimeutil.MimeUtil2;
-import kiwi.core.api.config.ConfigurationService;
-import kiwi.core.api.modules.LMFResourceService;
-import kiwi.core.api.modules.ModuleService;
-import kiwi.core.api.modules.ResourceEntry;
-import kiwi.core.events.SystemStartupEvent;
-import kiwi.core.model.module.ModuleConfiguration;
-import kiwi.core.qualifiers.cache.LMFCache;
-import net.sf.ehcache.Ehcache;
-import net.sf.ehcache.Element;
-import org.slf4j.Logger;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.inject.Inject;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A service for resolving and accessing resources contained in the LMF modules. The resource service takes care
- * of retrieving, caching and refreshing resources from the appropriate locations.
- * <p/>
- * Note that the resource service is not to be confused with the RDF resources maintained by the server. It is
- * purely meant to retrieve static non-Java resources contained in the modules and web application.
- *
- * User: sschaffe
- */
-@ApplicationScoped
-public class LMFResourceServiceImpl implements LMFResourceService {
-
-    @Inject
-    private Logger log;
-
-    @Inject
-    private ConfigurationService configurationService;
-
-
-    @Inject
-    private ModuleService moduleService;
-
-
-    @Inject @LMFCache("resource-cache")
-    private Ehcache resourceCache;
-
-    /**
-     * Used for detecting the mime type of resources contained in KiWi modules
-     */
-    private MimeUtil2 mimeUtil;
-
-
-    private Map<String,String> resourceMap;
-
-
-    @PostConstruct
-    public void initialise() {
-        // find all kiwi-module.properties and check whether they contain a baseurl property to map module web
-        // resources to a certain path prefix; if yes, store the prefix and jar URL in the map for lookup and
-        // resource resolving by the filter
-        this.resourceMap = new HashMap<String, String>();
-
-
-        for(String module : moduleService.listModules()) {
-            ModuleConfiguration config = moduleService.getModuleConfiguration(module);
-
-            if(config.getConfiguration().containsKey("baseurl")) {
-                String path = config.getConfiguration().getString("baseurl");
-                resourceMap.put(path.startsWith("/")?path:"/"+path,moduleService.getModuleJar(module).toString());
-            }
-        }
-
-
-
-        // detect the mime type of resources
-        this.mimeUtil = new MimeUtil2();
-        this.mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");
-    }
-
-
-    /**
-     * Makes sure the service is initialised on system startup
-     *
-     * @param event
-     */
-    public void systemStartup(@Observes SystemStartupEvent event) {
-
-    }
-
-
-    /**
-     * Return the resource identified by the relative URL passed as argument. The passed argument is relative
-     * to the web application root of this web application.
-     *
-     * @param relativeURL a URL relative to the web application root of this web application
-     * @return the resource identified by the relative URL, or null if it does not exist
-     */
-    @Override
-    public ResourceEntry getResource(String relativeURL) {
-        ResourceEntry data = null;
-
-        // check the request path prefix whether it matches with one of the prefixes in the prefix mapping; if yes,
-        // lookup the resource as follows:
-        // 1. look in the cache using the path of the request url as cache key
-        // 2. if not found: look in the jar file by mapping the resource to the correct jar file and retrieving it
-        //    from the "web" folder contained therein
-        // 3. if not found: proceed with the chain by calling chain.doFilter()
-        // TODO: (FIXME) data_cache.get(path) might return null some times even though path is in cache
-        if(isCached(relativeURL)) {
-            data = getFromCache(relativeURL);
-        } else {
-
-            try {
-                URL jarUrl = resolveResource(relativeURL);
-
-                if(jarUrl != null) {
-                    try {
-                        byte[] bytes = ByteStreams.toByteArray(jarUrl.openStream());
-
-                        data = new ResourceEntry(jarUrl,bytes,bytes.length,getMimeType(jarUrl));
-
-                        log.debug("retrieved resource {} (mime type {}, length {} bytes)", jarUrl.toString(), data.getContentType(),data.getLength());
-                    } catch (NullPointerException e) {
-                        // This happens if a directory is accessed in the jar-file.
-                        data = null;
-                    }
-                    putInCache(relativeURL,data);
-                } else {
-                    putInCache(relativeURL,null);
-
-                    log.debug("resource {} not found in any module",relativeURL);
-                }
-
-            } catch(IOException ex) {
-                log.debug("error while trying to retrieve resource {}: {}",relativeURL,ex.getMessage());
-            }
-        }
-        return data;
-
-    }
-
-    /**
-     * Return the file system URL of the resource identified by the relative HTTP URL passed as argument.
-     * he passed argument is relative to the web application root of this web application.
-     *
-     * @param relativeURL a URL relative to the web application root of this web application
-     * @return the file system URL of the resource, regardless whether it actually exists or not
-     */
-    @Override
-    public URL resolveResource(String relativeURL) {
-
-        // we take the first match from the resource map ...
-        for(String key : resourceMap.keySet()) {
-            if(relativeURL.startsWith(key)) {
-
-                // the name of the resource inside the jar file
-                String entryPath    = relativeURL.substring(key.length());
-                // map "/" to /index.html
-                if(entryPath.endsWith("/") || entryPath.equals("")) {
-                    entryPath += "index.html";
-                }
-
-                // the base URL of the jar file in the file system
-                String jarUrlBase   = resourceMap.get(key);
-
-                // the JAR URL of the resource inside the jar file
-                String jarUrlEntry;
-
-                if(jarUrlBase.endsWith(".jar")) {
-                    jarUrlEntry = "jar:" + jarUrlBase + "!/web" + ( entryPath.startsWith("/") ? entryPath : "/" + entryPath);
-                } else {
-                    jarUrlEntry = jarUrlBase + (jarUrlBase.endsWith("/")?"":"/") + "web" + ( entryPath.startsWith("/") ? entryPath : "/" + entryPath);
-                }
-
-
-                try {
-                    return new URL(jarUrlEntry);
-
-                } catch(IOException ex) {
-                    log.debug("error while trying to retrieve resource {}: {}",jarUrlEntry,ex.getMessage());
-
-                }
-            }
-        }
-        return null;
-    }
-
-
-
-
-
-    private boolean isCacheEnabled() {
-        return configurationService.getBooleanConfiguration("resources.servercache.enabled", false);
-    }
-
-
-    private boolean isCached(String key) {
-        return isCacheEnabled() && resourceCache.isKeyInCache(key) && resourceCache.get(key) != null;
-    }
-
-    private ResourceEntry getFromCache(String key) {
-        if (isCacheEnabled())
-            return (ResourceEntry) resourceCache.get(key).getObjectValue();
-        else
-            return null;
-    }
-
-    // Store in the cache
-    private void putInCache(String key, ResourceEntry data) {
-        if(isCacheEnabled()) {
-            resourceCache.put(new Element(key,data));
-        }
-    }
-
-
-    private String getMimeType(URL resource) {
-
-        @SuppressWarnings("unchecked")
-        Collection<MimeType> types = mimeUtil.getMimeTypes(resource);
-
-        if(types.size() > 0) {
-            MimeType t = types.iterator().next();
-            return t.toString();
-        } else
-            return null;
-
-    }
-
-
-}