You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by yo...@apache.org on 2006/06/26 20:14:55 UTC
svn commit: r417265 [2/6] - in /lucene/java/trunk/contrib/gdata-server: ./
lib/ src/java/ src/java/org/apache/lucene/gdata/server/
src/java/org/apache/lucene/gdata/server/registry/
src/java/org/apache/lucene/gdata/servlet/ src/java/org/apache/lucene/gd...
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/GDataService.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/GDataService.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/GDataService.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/GDataService.java Mon Jun 26 11:14:53 2006
@@ -1,275 +1,398 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.server;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.gdata.data.ServerBaseEntry;
+import org.apache.lucene.gdata.data.ServerBaseFeed;
+import org.apache.lucene.gdata.server.registry.ComponentType;
+import org.apache.lucene.gdata.server.registry.GDataServerRegistry;
+import org.apache.lucene.gdata.storage.ResourceNotFoundException;
+import org.apache.lucene.gdata.storage.Storage;
+import org.apache.lucene.gdata.storage.StorageController;
+import org.apache.lucene.gdata.storage.StorageException;
+
+import com.google.gdata.data.BaseEntry;
+import com.google.gdata.data.BaseFeed;
+import com.google.gdata.data.DateTime;
+import com.google.gdata.data.Generator;
+import com.google.gdata.data.Link;
+import com.google.gdata.util.ParseException;
+
+/**
+ * default implementation of the {@link org.apache.lucene.gdata.server.Service}
+ * interface.
*
- * 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
+ * @author Simon Willnauer
*
- * 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 org.apache.lucene.gdata.server;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.gdata.server.registry.GDataServerRegistry;
-import org.apache.lucene.gdata.storage.Storage;
-import org.apache.lucene.gdata.storage.StorageException;
-import org.apache.lucene.gdata.storage.StorageFactory;
-
-import com.google.gdata.data.BaseEntry;
-import com.google.gdata.data.BaseFeed;
-import com.google.gdata.data.DateTime;
-import com.google.gdata.data.Generator;
-import com.google.gdata.data.Link;
-import com.google.gdata.util.ParseException;
-
-/**
- * @author Simon Willnauer
- *
- */
-public class GDataService extends Service {
- private static final Log LOGGER = LogFactory.getLog(GDataService.class);
-
- private Storage storage;
-
- private GDataServerRegistry registry = GDataServerRegistry.getRegistry();
-
- private static final Generator generator;
-
- private static final String generatorName = "Lucene GData-Server";
-
- private static final String generatorURI = "http://lucene.apache.org";
- static {
- generator = new Generator();
- generator.setName(generatorName);
- generator.setUri(generatorURI);
- generator.setVersion("0.1");
- }
-
- protected GDataService() throws ServiceException {
- try {
- this.storage = StorageFactory.getStorage();
-
- } catch (StorageException e) {
- LOGGER
- .fatal(
- "Can't get Storage Instance -- can't serve any requests",
- e);
- ServiceException ex = new ServiceException(
- "Can't get Storage instance" + e.getMessage(), e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- }
-
- /**
- * @see org.apache.lucene.gdata.server.Service#createEntry(org.apache.lucene.gdata.server.GDataRequest,
- * org.apache.lucene.gdata.server.GDataResponse)
- */
- @Override
- public BaseEntry createEntry(GDataRequest request, GDataResponse response)
- throws ServiceException {
-
- checkFeedIsRegisterd(request);
- if (LOGGER.isInfoEnabled())
- LOGGER.info("create Entry for feedId: " + request.getFeedId());
- BaseEntry entry = buildEntry(request);
- setUpdateTime(entry);
- try {
-
- this.storage.storeEntry(entry, request.getFeedId());
- } catch (Exception e) {
- ServiceException ex = new ServiceException("Could not store entry",
- e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- return entry;
- }
-
- /**
- * @see org.apache.lucene.gdata.server.Service#deleteEntry(org.apache.lucene.gdata.server.GDataRequest,
- * org.apache.lucene.gdata.server.GDataResponse)
- */
- @Override
- public BaseEntry deleteEntry(GDataRequest request, GDataResponse response)
- throws ServiceException {
- checkFeedIsRegisterd(request);
- String entryid = request.getEntryId();
- String feedid = request.getFeedId();
- try {
- this.storage.deleteEntry(entryid, feedid);
- } catch (Exception e) {
- ServiceException ex = new ServiceException(
- "Could not delete entry", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- return null;
- }
-
- /**
- * @see org.apache.lucene.gdata.server.Service#updateEntry(org.apache.lucene.gdata.server.GDataRequest,
- * org.apache.lucene.gdata.server.GDataResponse)
- */
- @Override
- public BaseEntry updateEntry(GDataRequest request, GDataResponse response)
- throws ServiceException {
- checkFeedIsRegisterd(request);
-
- BaseEntry entry = buildEntry(request);
- String feedid = request.getFeedId();
- if (LOGGER.isInfoEnabled())
- LOGGER.info("update Entry" + entry.getId() + " for feedId: "
- + feedid);
- setUpdateTime(entry);
- try {
- this.storage.updateEntry(entry, feedid);
- } catch (StorageException e) {
- ServiceException ex = new ServiceException(
- "Could not update entry", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- return entry;
- }
-
- /**
- * @see org.apache.lucene.gdata.server.Service#getFeed(org.apache.lucene.gdata.server.GDataRequest,
- * org.apache.lucene.gdata.server.GDataResponse)
- */
- @SuppressWarnings("unchecked")
- @Override
- public BaseFeed getFeed(GDataRequest request, GDataResponse response)
- throws ServiceException {
- checkFeedIsRegisterd(request);
-
- try {
- // TODO remove when storing feeds is implemented just for
- // development
- BaseFeed feed = this.storage.getFeed(request.getFeedId(), request
- .getStartIndex(), request.getItemsPerPage());
- buildDynamicFeedElements(request, feed);
- List<BaseEntry> list = feed.getEntries();
- addContextPath(list, request.getContextPath());
- return feed;
- } catch (StorageException e) {
- ServiceException ex = new ServiceException("Could not get feed", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
-
- }
-
- /*
- * build the dynamic elements like self link and next link
- */
- private void buildDynamicFeedElements(final GDataRequest request,
- final BaseFeed feed) {
- feed.setGenerator(generator);
- feed.setItemsPerPage(request.getItemsPerPage());
- feed.getLinks().add(
- buildLink(Link.Rel.SELF, Link.Type.ATOM, request.getSelfId()));
- // TODO add next link
- }
-
- private Link buildLink(String rel, String type, String href) {
- Link retVal = new Link();
- retVal.setHref(href);
- retVal.setRel(rel);
- retVal.setType(type);
- return retVal;
- }
-
- /*
- * every entry has an ID which has to have a prefix. The prefix is the
- * context path of the requested feed. This will be used to request the
- * entry directly
- */
- private void addContextPath(List<BaseEntry> list, final String contextPath) {
- for (BaseEntry entry : list) {
- addcontextPath(entry, contextPath);
- }
- }
-
- @SuppressWarnings("unchecked")
- private BaseEntry addcontextPath(final BaseEntry entry,
- final String contextPath) {
- String id = contextPath + entry.getId();
- entry.setId(id);
- Link self = new Link();
- self.setRel("self");
- self.setHref(id);
- self.setType("application/atom+xml");
- entry.getLinks().add(self);
- return entry;
- }
-
- private BaseEntry buildEntry(final GDataRequest request)
- throws ServiceException {
- try {
- return GDataEntityBuilder.buildEntry(request);
-
- } catch (ParseException e) {
- ServiceException ex = new ServiceException(
- "Could not parse entry from incoming request", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- } catch (IOException e) {
- ServiceException ex = new ServiceException(
- "Could not read or open input stream", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- }
-
- /*
- * checks whether the reqeuested feed is registered
- */
- private void checkFeedIsRegisterd(final GDataRequest request)
- throws FeedNotFoundException {
- if (!this.registry.isFeedRegistered(request.getFeedId()))
- throw new FeedNotFoundException(
- "Feed could not be found - is not registed - Feed ID:"
- + request.getFeedId());
- this.storage.setExtensionProfile(request.getExtensionProfile());
- }
-
- private BaseEntry setUpdateTime(final BaseEntry entry) {
- entry.setUpdated(DateTime.now());
- return entry;
- }
-
- /**
- * @see org.apache.lucene.gdata.server.Service#getSingleEntry(org.apache.lucene.gdata.server.GDataRequest,
- * org.apache.lucene.gdata.server.GDataResponse)
- */
- @Override
- public BaseEntry getSingleEntry(GDataRequest request, GDataResponse response)
- throws ServiceException {
- checkFeedIsRegisterd(request);
-
- try {
- BaseEntry entry = this.storage.getEntry(request.getEntryId(),
- request.getFeedId());
- if(entry == null)
- return null;
- addcontextPath(entry, request.getContextPath());
- return entry;
- } catch (StorageException e) {
- ServiceException ex = new ServiceException("Could not get feed", e);
- ex.setStackTrace(e.getStackTrace());
- throw ex;
- }
- }
-
-}
+ */
+public class GDataService implements Service {
+ private static final Log LOGGER = LogFactory.getLog(GDataService.class);
+
+ protected Storage storage;
+
+ protected GDataServerRegistry registry = GDataServerRegistry.getRegistry();
+
+ private static final Generator generator;
+
+ private static final String generatorName = "Lucene GData-Server";
+
+ private static final String generatorURI = "http://lucene.apache.org";
+
+ private static final String XMLMIME = "application/atom+xml";
+ static {
+ generator = new Generator();
+ generator.setName(generatorName);
+ generator.setUri(generatorURI);
+ generator.setVersion("0.1");
+ }
+
+ protected GDataService() throws ServiceException {
+ try {
+ StorageController controller = GDataServerRegistry.getRegistry()
+ .lookup(StorageController.class,
+ ComponentType.STORAGECONTROLLER);
+ if (controller == null)
+ throw new StorageException(
+ "StorageController is not registered");
+ this.storage = controller.getStorage();
+
+ } catch (StorageException e) {
+ LOGGER
+ .fatal(
+ "Can't get Storage Instance -- can't serve any requests",
+ e);
+ ServiceException ex = new ServiceException(
+ "Can't get Storage instance" + e.getMessage(), e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#createEntry(org.apache.lucene.gdata.server.GDataRequest,
+ * org.apache.lucene.gdata.server.GDataResponse)
+ */
+
+ public BaseEntry createEntry(GDataRequest request, GDataResponse response)
+ throws ServiceException {
+
+ if (LOGGER.isInfoEnabled())
+ LOGGER.info("create Entry for feedId: " + request.getFeedId());
+
+ ServerBaseEntry entry = buildEntry(request, response);
+ entry.setFeedId(request.getFeedId());
+ entry.setServiceConfig(request.getConfigurator());
+ setTimeStamps(entry.getEntry());
+ BaseEntry retVal = null;
+ try {
+ retVal = this.storage.storeEntry(entry);
+ } catch (Exception e) {
+ response.setError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ ServiceException ex = new ServiceException("Could not store entry",
+ e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ return retVal;
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#deleteEntry(org.apache.lucene.gdata.server.GDataRequest,
+ * org.apache.lucene.gdata.server.GDataResponse)
+ */
+
+ public BaseEntry deleteEntry(GDataRequest request, GDataResponse response)
+ throws ServiceException {
+
+ ServerBaseEntry entry = new ServerBaseEntry();
+ entry.setServiceConfig(request.getConfigurator());
+ entry.setFeedId(request.getFeedId());
+ entry.setId(request.getEntryId());
+ if (entry.getId() == null)
+ throw new ServiceException(
+ "entry id is null -- can not delete null entry");
+ try {
+ this.storage.deleteEntry(entry);
+ } catch (ResourceNotFoundException e) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ ServiceException ex = new ServiceException(
+ "Could not delete entry", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ } catch (Exception e) {
+ response.setError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ ServiceException ex = new ServiceException(
+ "Could not delete entry", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ return null;
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#updateEntry(org.apache.lucene.gdata.server.GDataRequest,
+ * org.apache.lucene.gdata.server.GDataResponse)
+ */
+
+ public BaseEntry updateEntry(GDataRequest request, GDataResponse response)
+ throws ServiceException {
+
+ ServerBaseEntry entry = buildEntry(request, response);
+ entry.setFeedId(request.getFeedId());
+
+ entry.setServiceConfig(request.getConfigurator());
+ if (LOGGER.isInfoEnabled())
+ LOGGER.info("update Entry" + entry.getId() + " for feedId: "
+ + request.getFeedId());
+ if (entry.getId() == null) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ throw new ServiceException("Entry id is null can not update entry");
+ }
+ if (!entry.getId().equals(request.getEntryId())) {
+ if (LOGGER.isInfoEnabled())
+ LOGGER
+ .info("Entry id in the entry xml does not match the requested resource -- XML-ID:"
+ + entry.getId()
+ + "; Requested resource: "
+ + request.getEntryId());
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ throw new ServiceException(
+ "Entry id in the entry xml does not match the requested resource");
+ }
+ setTimeStamps(entry.getEntry());
+ BaseEntry retVal = null;
+ try {
+ retVal = this.storage.updateEntry(entry);
+ } catch (ResourceNotFoundException e) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ ServiceException ex = new ServiceException(
+ "Could not update entry", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ } catch (StorageException e) {
+ response.setError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ ServiceException ex = new ServiceException(
+ "Could not update entry", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ return retVal;
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#getFeed(org.apache.lucene.gdata.server.GDataRequest,
+ * org.apache.lucene.gdata.server.GDataResponse)
+ */
+ @SuppressWarnings("unchecked")
+ public BaseFeed getFeed(GDataRequest request, GDataResponse response)
+ throws ServiceException {
+
+ ServerBaseFeed feed = new ServerBaseFeed();
+ feed.setId(request.getFeedId());
+ feed.setStartIndex(request.getStartIndex());
+ feed.setItemsPerPage(request.getItemsPerPage());
+ feed.setServiceConfig(request.getConfigurator());
+ try {
+ BaseFeed retVal = this.storage.getFeed(feed);
+ dynamicElementFeedStragey(retVal, request);
+
+ return retVal;
+ /*
+ * resouce not found will be detected in Gdata request.
+ * the request queries the storage for the feed to get the serivce for the feed
+ */
+ } catch (StorageException e) {
+ response.setError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ ServiceException ex = new ServiceException("Could not get feed", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+
+ }
+
+ private Link buildLink(String rel, String type, String href) {
+ Link retVal = new Link();
+ retVal.setHref(href);
+ retVal.setRel(rel);
+ retVal.setType(type);
+ return retVal;
+ }
+
+ private ServerBaseEntry buildEntry(final GDataRequest request,
+ final GDataResponse response) throws ServiceException {
+ try {
+ ServerBaseEntry entry = new ServerBaseEntry(GDataEntityBuilder
+ .buildEntry(request));
+ return entry;
+
+ } catch (ParseException e) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ ServiceException ex = new ServiceException(
+ "Could not parse entry from incoming request", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ } catch (IOException e) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ ServiceException ex = new ServiceException(
+ "Could not read or open input stream", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ }
+
+ private BaseEntry setTimeStamps(final BaseEntry entry) {
+ if (entry.getUpdated() == null)
+ entry.setUpdated(DateTime.now());
+ if (entry.getPublished() == null)
+ entry.setPublished(DateTime.now());
+ return entry;
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#getSingleEntry(org.apache.lucene.gdata.server.GDataRequest,
+ * org.apache.lucene.gdata.server.GDataResponse)
+ */
+
+ public BaseEntry getSingleEntry(GDataRequest request, GDataResponse response)
+ throws ServiceException {
+
+ try {
+ ServerBaseEntry entry = new ServerBaseEntry();
+ entry.setServiceConfig(request.getConfigurator());
+ entry.setFeedId(request.getFeedId());
+ entry.setId(request.getEntryId());
+ if(entry.getId() == null){
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ throw new ServiceException("entry is null can't get entry");
+ }
+
+ BaseEntry retVal = null;
+ retVal = this.storage.getEntry(entry);
+ dynamicElementEntryStragey(retVal, request);
+ return retVal;
+ } catch (ResourceNotFoundException e) {
+ response.setError(HttpServletResponse.SC_BAD_REQUEST);
+ ServiceException ex = new ServiceException(
+ "Could not get entry", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ } catch (StorageException e) {
+ ServiceException ex = new ServiceException("Could not get feed", e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+ }
+
+ /*
+ * adds all dynamic element to the entry
+ */
+ private void dynamicElementEntryStragey(final BaseEntry entry,
+ final GDataRequest request) {
+ setSelfLink(entry, request.getContextPath());
+ }
+
+ /*
+ * adds all dynamic element to the feed entries
+ */
+ @SuppressWarnings("unchecked")
+ private void dynamicElementFeedStragey(final BaseFeed feed,
+ final GDataRequest request) {
+ buildDynamicFeedElements(request, feed);
+ List<BaseEntry> entryList = feed.getEntries();
+ for (BaseEntry entry : entryList) {
+ String id = request.getContextPath() + entry.getId();
+ setSelfLink(entry, id);
+ }
+
+ }
+
+ /*
+ * The selfLink is build from a prefix and the entry id. The prefix is the
+ * context path of the requested feed. This will be used to request the
+ * entry directly
+ */@SuppressWarnings("unchecked")
+ private BaseEntry setSelfLink(final BaseEntry entry, String id) {
+ Link self = buildLink(Link.Rel.SELF, XMLMIME, id);
+ entry.getLinks().add(self);
+ return entry;
+ }
+
+ /*
+ * build the dynamic elements like self link and next link
+ */
+ private void buildDynamicFeedElements(final GDataRequest request,
+ final BaseFeed feed) {
+ feed.setGenerator(generator);
+ feed.setItemsPerPage(request.getItemsPerPage());
+ feed.setStartIndex(request.getStartIndex());
+ feed.setId(request.getContextPath());
+ feed.getLinks().add(
+ buildLink(Link.Rel.SELF, Link.Type.ATOM, request.getSelfId()));
+ feed.getLinks().add(
+ buildLink(Link.Rel.NEXT, XMLMIME, request.getNextId()));
+
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#close()
+ */
+ public void close() {
+ this.storage.close();
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#getFeedLastModified(java.lang.String)
+ */
+ public Date getFeedLastModified(final String feedId) throws ServiceException {
+ try {
+ return new Date(this.storage.getFeedLastModified(feedId));
+
+ } catch (StorageException e) {
+ ServiceException ex = new ServiceException(
+ "Could not get Last update for feed -- "+feedId, e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.Service#getEntryLastModified(java.lang.String, java.lang.String)
+ */
+ public Date getEntryLastModified(final String entryId,final String feedId) throws ServiceException {
+ try {
+ return new Date(this.storage.getEntryLastModified(entryId, feedId));
+
+
+
+ } catch (StorageException e) {
+ ServiceException ex = new ServiceException(
+ "Could not get Last update for entry -- "+entryId, e);
+ ex.setStackTrace(e.getStackTrace());
+ throw ex;
+ }
+
+ }
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/Service.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/Service.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/Service.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/Service.java Mon Jun 26 11:14:53 2006
@@ -16,6 +16,8 @@
package org.apache.lucene.gdata.server;
+import java.util.Date;
+
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
@@ -39,7 +41,7 @@
*
*
*/
-public abstract class Service {
+public interface Service {
/**
* Service method to create an entry in an already created and existing
@@ -133,6 +135,27 @@
public abstract BaseEntry getSingleEntry(final GDataRequest request, final GDataResponse response)
throws ServiceException;
+ /**
+ * will close the Service - service should not be used after this method has been called
+ */
+ public void close();
+
+ /**
+ * Retruns the date of the last modification for the given feed id
+ * @param feedId - the id of the feed
+ * @return - the last modified date or the current date if the date can not be retrieved
+ * @throws ServiceException - if the storage can not be accessed
+ */
+ public abstract Date getFeedLastModified(String feedId)throws ServiceException;
+
+ /**
+ * Retruns the date of the last modification for the given entry id
+ * @param entryId - the id of the entry
+ * @param feedId - the feed id this entry belongs to
+ * @return - the last modified date or the current date if the date can not be retrieved
+ * @throws ServiceException - if the storage can not be accessed
+ */
+ public abstract Date getEntryLastModified(String entryId, String feedId)throws ServiceException;
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceException.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceException.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceException.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceException.java Mon Jun 26 11:14:53 2006
@@ -12,52 +12,59 @@
* 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 org.apache.lucene.gdata.server;
-
-/**
- * @author Simon Willnauer
+ */
+
+package org.apache.lucene.gdata.server;
+
+/**
+ * The ServiceException is used to encapsulate all {@link java.lang.Exception}
+ * throw by underlaying layers of the
+ * {@link org.apache.lucene.gdata.server.Service} layer.
*
- */
-public class ServiceException extends Exception {
-
- /**
- *
- */
- private static final long serialVersionUID = -7099825107871876584L;
-
- /**
- *
- */
- public ServiceException() {
- super();
-
- }
-
- /**
- * @param arg0
- */
- public ServiceException(String arg0) {
- super(arg0);
-
- }
-
- /**
- * @param arg0
- * @param arg1
- */
- public ServiceException(String arg0, Throwable arg1) {
- super(arg0, arg1);
-
- }
-
- /**
- * @param arg0
- */
- public ServiceException(Throwable arg0) {
- super(arg0);
-
- }
-
-}
+ * @author Simon Willnauer
+ *
+ */
+public class ServiceException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7099825107871876584L;
+
+ /**
+ * Constructs a new ServiceException
+ */
+ public ServiceException() {
+ super();
+
+ }
+
+ /**
+ * Constructs a new ServiceException
+ * @param arg0 - the exception message
+ */
+ public ServiceException(String arg0) {
+ super(arg0);
+
+ }
+
+ /**
+ * Constructs a new ServiceException
+ * @param arg0 - the exceptin message
+ * @param arg1 - the exception cause
+ */
+ public ServiceException(String arg0, Throwable arg1) {
+ super(arg0, arg1);
+
+ }
+
+ /**
+ * Constructs a new ServiceException
+ * @param arg0 - the exception cause
+ */
+ public ServiceException(Throwable arg0) {
+ super(arg0);
+
+ }
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceFactory.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceFactory.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceFactory.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/ServiceFactory.java Mon Jun 26 11:14:53 2006
@@ -1,57 +1,92 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.server;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.gdata.server.administration.AdminService;
+import org.apache.lucene.gdata.server.administration.GDataAdminService;
+import org.apache.lucene.gdata.server.registry.Component;
+import org.apache.lucene.gdata.server.registry.ComponentType;
+import org.apache.lucene.gdata.server.registry.ServerComponent;
+
+
+/**
+ * The {@link ServiceFactory} creates {@link Service} implementations to access
+ * the GData - Server components.
+ * This class should not be access directy. The class will be registered in the {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry}.
+ * Use {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry#lookup(Class, ComponentType)}
*
- * 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
+ * @author Simon Willnauer
*
- * 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 org.apache.lucene.gdata.server;
-
-
-/**
- * The {@link ServiceFactory} creates {@link Service} implementations to access
- * the GData - Server components.
- *
- * @author Simon Willnauer
- *
- */
-public class ServiceFactory {
-
- private static ServiceFactory INSTANCE = null;
-
- /**
- * @return - a Singleton Instance of the factory
- */
- public static synchronized ServiceFactory getInstance() {
- if (INSTANCE == null)
- INSTANCE = new ServiceFactory();
- return INSTANCE;
-
- }
-
- private ServiceFactory() {
- // private constructor --> singleton
- }
-
- /**
- * Creates a {@link Service} implementation.
- *
- * @return a Service Implementation
- */
- public Service getService() {
- try{
- return new GDataService();
- }catch (Exception e) {
- //
- }
- return null;
- }
-}
+ */
+@Component(componentType=ComponentType.SERVICEFACTORY)
+public class ServiceFactory implements ServerComponent {
+
+ private static final Log LOG = LogFactory.getLog(ServiceFactory.class);
+
+
+
+ /**
+ * public constructor to enable loading via the registry
+ * @see org.apache.lucene.gdata.server.registry.Component
+ * @see org.apache.lucene.gdata.server.registry.GDataServerRegistry
+ */
+ public ServiceFactory() {
+ //
+ }
+
+ /**
+ * Creates a {@link Service} instance.
+ *
+ * @return a Service instance
+ */
+ public Service getService() {
+ try{
+ return new GDataService();
+ }catch (Exception e) {
+ //
+ }
+ return null;
+ }
+
+ /**
+ * Creates a {@link AdminService} instance
+ * @return a AdminService instance
+ */
+ public AdminService getAdminService(){
+ try {
+ return new GDataAdminService();
+ } catch (ServiceException e) {
+ LOG.warn("Factory method can not create GDataAdminService returning null-- "+e.getMessage(),e);
+ }
+ return null;
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.registry.ServerComponent#initialize()
+ */
+ public void initialize() {
+ //
+ }
+
+ /**
+ * @see org.apache.lucene.gdata.server.registry.ServerComponent#destroy()
+ */
+ public void destroy() {
+ //
+ }
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/DataBuilderException.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/DataBuilderException.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/DataBuilderException.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/DataBuilderException.java Mon Jun 26 11:14:53 2006
@@ -1,62 +0,0 @@
-/**
- * Copyright 2004 The Apache Software Foundation
- *
- * 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 org.apache.lucene.gdata.server.registry;
-
-/**
- * @author Simon Willnauer
- *
- */
-public class DataBuilderException extends RuntimeException {
-
- /**
- *
- */
- private static final long serialVersionUID = -3802958802500735198L;
-
- /**
- *
- */
- public DataBuilderException() {
- super();
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param message
- */
- public DataBuilderException(String message) {
- super(message);
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param message
- * @param cause
- */
- public DataBuilderException(String message, Throwable cause) {
- super(message, cause);
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param cause
- */
- public DataBuilderException(Throwable cause) {
- super(cause);
- // TODO Auto-generated constructor stub
- }
-
-}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/FeedInstanceConfigurator.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/FeedInstanceConfigurator.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/FeedInstanceConfigurator.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/FeedInstanceConfigurator.java Mon Jun 26 11:14:53 2006
@@ -1,66 +0,0 @@
-/**
- * Copyright 2004 The Apache Software Foundation
- *
- * 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 org.apache.lucene.gdata.server.registry;
-
-/**
- * @author Simon Willnauer
- *
- */
-public class FeedInstanceConfigurator {
- private Class feedType;
- private String feedId;
- private Class extensionProfileClass;
- /**
- * @return Returns the feedType.
- */
- public Class getFeedType() {
- return this.feedType;
- }
- /**
- * @param feedType The feedType to set.
- */
- public void setFeedType(Class feedType) {
- this.feedType = feedType;
- }
- /**
- * @return Returns the feedURL.
- */
- public String getFeedId() {
- return this.feedId;
- }
- /**
- * @param feedURL The feedURL to set.
- */
- public void setFeedId(String feedURL) {
- this.feedId = feedURL;
- }
-
- /**
- * @return - the extension profile for this feed
- */
- public Class getExtensionProfilClass(){
- return this.extensionProfileClass;
- }
-
- /**
- * @param extensionProfilClass
- */
- public void setExtensionProfileClass(Class extensionProfilClass){
- this.extensionProfileClass = extensionProfilClass;
- }
-
-
-}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/GDataServerRegistry.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/GDataServerRegistry.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/GDataServerRegistry.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/GDataServerRegistry.java Mon Jun 26 11:14:53 2006
@@ -1,154 +1,254 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.server.registry;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
*
- * 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
+ * The GDataServerRegistry represents the registry component of the GData
+ * Server. All provided services and server components will be registered here.
+ * The Gdata Server serves RSS / ATOM feeds for defined services. Each service
+ * provides <i>n</i> feeds of a defined subclass of
+ * {@link com.google.gdata.data.BaseFeed}. Each feed contains <i>m</i> entries
+ * of a defined subclass of {@link com.google.gdata.data.BaseEntry}. To
+ * generate RSS / ATOM formates a class of the type
+ * {@link com.google.gdata.data.ExtensionProfile} is also defined for a service.
+ * <p>
+ * The entry,feed and the ExtensionProfile classes are defined in the
+ * gdata-config.xml and will be loaded when the server starts up.
+ * </p>
+ * <p>
+ * The components defined in the gdata-config.xml will also be loaded and
+ * instanciated at startup. If a component can not be loaded or an Exception
+ * occures the server will not start up. To cause of the exception or error will
+ * be logged to the standart server output.
+ * </p>
+ * <p>The GDataServerRegistry is a Singleton</p>
*
- * 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 org.apache.lucene.gdata.server.registry;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.gdata.storage.StorageController;
-
-import com.google.gdata.data.ExtensionProfile;
-
-/**
- *
- * The FeedRegistry represents the registry component of the GData Server. All
- * feed configurations will be registered here. Feed configurations contain
- * several informationsa about GData feed like:
- * <ol>
- * <li>the feed id - where the feed can be accessed via http methodes</li>
- * <li>the feed type - feed types are implementations of the abstract
- * {@link com.google.gdata.data.BaseFeed}</li>
- * </ol>
- * The registry will be set up at start up of the server application and can be
- * accessed from other components to get configurations according to incoming
- * requests.
- *
- * @author Simon Willnauer
- *
- */
-public class GDataServerRegistry {
- private static GDataServerRegistry INSTANCE;
-
- private StorageController storageInstance;
-
- private static final Log LOGGER = LogFactory
- .getLog(GDataServerRegistry.class);
-
- private final Map<String, FeedInstanceConfigurator> feedTypMap = new HashMap<String, FeedInstanceConfigurator>();
-
- private GDataServerRegistry() {
- // private - singleton
- }
-
- /**
- * @return a Sinleton registry instance
- */
- public static synchronized GDataServerRegistry getRegistry() {
- if (INSTANCE == null)
- INSTANCE = new GDataServerRegistry();
- return INSTANCE;
- }
-
- /**
- * Registers a {@link FeedInstanceConfigurator}
- *
- * @param configurator -
- * the configurator to register in the registry
- */
- public void registerFeed(FeedInstanceConfigurator configurator) {
- if (configurator == null) {
- LOGGER.warn("Feedconfigurator is null -- skip registration");
- return;
- }
- this.feedTypMap.put(configurator.getFeedId(), configurator);
- }
-
- /**
- * Looks up the {@link FeedInstanceConfigurator} by the given feed id.
- *
- * @param feedId
- * @return - the {@link FeedInstanceConfigurator} or <code>null</code> if
- * the no configuration for this feed has been registered
- */
- public FeedInstanceConfigurator getFeedConfigurator(String feedId) {
- if (feedId == null)
- throw new IllegalArgumentException(
- "Feed URL is null - must not be null to get registered feedtype");
- return this.feedTypMap.get(feedId);
- }
-
- protected void flushRegistry() {
- this.feedTypMap.clear();
- }
-
- /**
- * @param feedId -
- * the id of the feed as the feed is registered
- * @return - <code>true</code> if and only if the feed is registered,
- * otherwise <code>false</code>.
- */
- public boolean isFeedRegistered(String feedId) {
- return this.feedTypMap.containsKey(feedId);
-
- }
-
- /**
- * @param storage
- */
- public void registerStorage(StorageController storage) {
- if (this.storageInstance != null)
- throw new IllegalStateException(
- "Storage already registered -- Instance of "
- + this.storageInstance.getClass());
- this.storageInstance = storage;
- }
-
- /**
- * Destroys the registry and release all resources
- */
- public void destroy() {
- flushRegistry();
- this.storageInstance.destroy();
- this.storageInstance = null;
-
- }
-
- /**
- * Creates the {@link ExtensionProfile} for a registered feed
- * @param feedId - the feed id
- * @return - the extension profil for this feed of <code>null</code> if
- * the feed is not registered or the extension profile could not be
- * instanciated
- */
- public ExtensionProfile getExtensionProfile(final String feedId) {
- FeedInstanceConfigurator configurator = this.feedTypMap.get(feedId);
- if (configurator == null)
- return null;
- Class clazz = configurator.getExtensionProfilClass();
- try {
- return (ExtensionProfile) clazz.newInstance();
- } catch (Exception e) {
- LOGGER
- .error("Can not create instance of ExtensionProfil for class: "
- + clazz + " -- feedId: " + feedId);
-
- }
- return null;
- }
-
-}
+ * @author Simon Willnauer
+ *
+ */
+public class GDataServerRegistry {
+ private static GDataServerRegistry INSTANCE;
+
+ private static final Log LOGGER = LogFactory
+ .getLog(GDataServerRegistry.class);
+
+ private final Map<String, ProvidedService> serviceTypeMap = new HashMap<String, ProvidedService>();
+
+ private final Map<ComponentType, ComponentBean> componentMap = new HashMap<ComponentType, ComponentBean>(
+ 10);
+
+ private GDataServerRegistry() {
+ // private - singleton
+ }
+
+ /**
+ * @return a Sinleton registry instance
+ */
+ public static synchronized GDataServerRegistry getRegistry() {
+ if (INSTANCE == null)
+ INSTANCE = new GDataServerRegistry();
+ return INSTANCE;
+ }
+
+ /**
+ * Registers a {@link ProvidedService}
+ *
+ * @param configurator -
+ * the configurator to register in the registry
+ */
+ public void registerService(ProvidedService configurator) {
+ if (configurator == null) {
+ LOGGER.warn("Feedconfigurator is null -- skip registration");
+ return;
+ }
+ this.serviceTypeMap.put(configurator.getName(), configurator);
+ }
+
+ /**
+ * Looks up the {@link ProvidedServiceConfig} by the given service name.
+ *
+ * @param service
+ * @return - the {@link ProvidedServiceConfig} or <code>null</code> if the
+ * no configuration for this service has been registered
+ */
+ public ProvidedService getProvidedService(String service) {
+ if (service == null)
+ throw new IllegalArgumentException(
+ "Service is null - must not be null to get registered feedtype");
+ return this.serviceTypeMap.get(service);
+ }
+
+ protected void flushRegistry() {
+ this.serviceTypeMap.clear();
+ this.componentMap.clear();
+ }
+
+ /**
+ * @param service -
+ * the name of the service
+ * @return - <code>true</code> if and only if the service is registered,
+ * otherwise <code>false</code>.
+ */
+ public boolean isServiceRegistered(String service) {
+ return this.serviceTypeMap.containsKey(service);
+
+ }
+
+ /**
+ * Destroys the registry and release all resources
+ */
+ public void destroy() {
+ for (ComponentBean component : this.componentMap.values()) {
+ component.getObject().destroy();
+ }
+ flushRegistry();
+
+ }
+
+ /**
+ * This method is the main interface to the Component Lookup Service of the
+ * registry. Every GDATA - Server component like STORAGE or the INDEXER
+ * component will be accessible via this method. To get a Component from the
+ * lookup service specify the expected Class as an argument and the
+ * component type of the component to return. For a lookup of the
+ * STORAGECONTORLER the code looks like:
+ * <p>
+ * <code> registryInstance.lookup(StorageController.class,ComponentType.STORAGECONTROLLER);</code>
+ * </p>
+ *
+ * @param <R>
+ * the type of the expected return value
+ * @param clazz -
+ * Class object of the expected return value
+ * @param compType -
+ * The component type
+ * @return the registered component or <code>null</code> if the component
+ * can not looked up.
+ */
+ @SuppressWarnings("unchecked")
+ public <R> R lookup(Class<R> clazz, ComponentType compType) {
+ ComponentBean bean = this.componentMap.get(compType);
+ if (bean == null)
+ return null;
+ if (bean.getSuperType().equals(clazz))
+ return (R) bean.getObject();
+ return null;
+ }
+
+ /**
+ * @param <E>
+ * @param componentClass
+ * @throws RegistryException
+ */
+ @SuppressWarnings("unchecked")
+ public <E extends ServerComponent> void registerComponent(final Class<E> componentClass)
+ throws RegistryException {
+
+ if (componentClass == null)
+ throw new IllegalArgumentException(
+ "component class must not be null");
+
+ if(!checkImplementsServerComponent(componentClass))
+ throw new RegistryException("can not register component. the given class does not implement ServerComponent interface -- "+componentClass.getName());
+ try {
+
+ Component annotation = componentClass.getAnnotation(Component.class);
+ if (annotation == null)
+ throw new RegistryException(
+ "can not register component. the given class is not a component -- "
+ + componentClass.getName());
+ ComponentType type = annotation.componentType();
+ if (this.componentMap.containsKey(type))
+ throw new RegistryException("component already registered -- "
+ + type.name());
+ Class superType = type.getClass().getField(type.name())
+ .getAnnotation(SuperType.class).superType();
+ if (!checkSuperType(componentClass, superType))
+ throw new RegistryException("Considered Supertype <"
+ + superType.getName() + "> is not a super type of <"
+ + componentClass + ">");
+ ServerComponent comp = componentClass.newInstance();
+ comp.initialize();
+ ComponentBean bean = new ComponentBean(comp, superType);
+
+ this.componentMap.put(type, bean);
+
+ } catch (Exception e) {
+ throw new RegistryException("Can not register component -- "
+ + e.getMessage(), e);
+ }
+
+ }
+
+ private static boolean checkImplementsServerComponent(Class type){
+ if(type == null)
+ return false;
+ if(type.equals(Object.class))
+ return false;
+ if(type.equals(ServerComponent.class))
+ return true;
+ Class[] compInterfaces = type.getInterfaces();
+ for (int i = 0; i < compInterfaces.length; i++) {
+ if(checkImplementsServerComponent(compInterfaces[i]))
+ return true;
+ }
+ return checkImplementsServerComponent(type.getSuperclass());
+
+ }
+
+ private static boolean checkSuperType(Class type, Class consideredSuperType) {
+
+ if (type.equals(Object.class))
+ return false;
+ if (type.equals(consideredSuperType))
+ return true;
+ Class[] interfaces = type.getInterfaces();
+ for (int i = 0; i < interfaces.length; i++) {
+ if (interfaces[i].equals(consideredSuperType))
+ return true;
+ }
+ return checkSuperType(type.getSuperclass(), consideredSuperType);
+ }
+
+ private class ComponentBean {
+ private final Class superType;
+
+ private final ServerComponent object;
+
+ ComponentBean(final ServerComponent object, final Class superType) {
+ this.superType = superType;
+ this.object = object;
+ }
+
+ ServerComponent getObject() {
+ return this.object;
+ }
+
+ Class getSuperType() {
+ return this.superType;
+ }
+
+ }
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryBuilder.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryBuilder.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryBuilder.java Mon Jun 26 11:14:53 2006
@@ -12,30 +12,59 @@
* 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 org.apache.lucene.gdata.server.registry;
-
-import com.google.gdata.data.ExtensionProfile;
-import com.google.gdata.data.Feed;
-
-/**
- * @author Simon Willnauer
+ */
+package org.apache.lucene.gdata.server.registry;
+
+import java.io.IOException;
+
+import org.apache.commons.digester.Digester;
+import org.xml.sax.SAXException;
+
+/**
+ * Reads the configuration file and creates the
+ * {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry} singleton
+ * instance. All services and components will be instanciated and registered in
+ * the registry.
*
- */
-public class RegistryBuilder {
-
- /**
- *
- */
- public static void buildRegistry(){
- // TODO Implement this!! -- just for develping purposes
- GDataServerRegistry reg = GDataServerRegistry.getRegistry();
- FeedInstanceConfigurator configurator = new FeedInstanceConfigurator();
- configurator.setFeedType(Feed.class);
- configurator.setFeedId("weblog");
- configurator.setExtensionProfileClass(ExtensionProfile.class);
- reg.registerFeed(configurator);
-
- }
-
-}
+ * @author Simon Willnauer
+ *
+ */
+class RegistryBuilder {
+
+ /**
+ * builds the {@link GDataServerRegistry} accessible via the
+ * {@link GDataServerRegistry#getRegistry()} method
+ *
+ * @throws IOException -
+ * if an IOException occures while reading the config file
+ * @throws SAXException -
+ * if the config file can not be parsed
+ */
+ static void buildRegistry() throws IOException, SAXException {
+
+ buildFromConfiguration(new Digester(), GDataServerRegistry
+ .getRegistry());
+
+ }
+
+ private static void buildFromConfiguration(Digester digester,
+ GDataServerRegistry registry) throws IOException, SAXException {
+
+ digester.setValidating(false);
+ digester.push(registry);
+ digester.addCallMethod("gdata/server-components/component",
+ "registerComponent", 0, new Class[] { Class.class });
+ digester.addObjectCreate("gdata/service", ProvidedServiceConfig.class);
+ digester.addSetProperties("gdata/service");
+ digester.addSetNext("gdata/service", "registerService");
+ digester.addBeanPropertySetter("gdata/service/feed-class", "feedType");
+ digester.addBeanPropertySetter("gdata/service/entry-class", "entryType");
+ digester.addBeanPropertySetter("gdata/service/extension-profile",
+ "extensionProfileClass");
+ digester.parse(RegistryBuilder.class
+ .getResourceAsStream("/gdata-config.xml"));
+ }
+
+
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryContextListener.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryContextListener.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryContextListener.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/RegistryContextListener.java Mon Jun 26 11:14:53 2006
@@ -1,65 +1,80 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.server.registry;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This Listener creates the
+ * {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry} when the
+ * context is loaded. The registry will be loaded before the
+ * {@link org.apache.lucene.gdata.servlet.RequestControllerServlet} is loaded.
+ * The Registry will be loaded and set up befor the REST interface is available.
+ * <p>
+ * This ContextListener has to be configured in the <code>web.xml</code>
+ * deployment descriptor.
+ * </p>
+ * <p>
+ * When the
+ * {@link javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)}
+ * method is called the registry will be destroyed using
+ * {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry#destroy()}
+ * method.
*
- * 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
+ * @author Simon Willnauer
*
- * 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 org.apache.lucene.gdata.server.registry;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * This Listener creates the
- * {@link org.apache.lucene.gdata.server.registry.GDataServerRegistry} when the
- * context is loaded. The registry will be loaded before the
- * {@link org.apache.lucene.gdata.servlet.RequestControllerServlet} is loaded.
- * The Registry will be loaded and set up befor the REST interface is available.
- * <p>
- * This ContextListener has to be configured in the <code>web.xml</code>
- * deployment descriptor.</p>
- *
- *
- * @author Simon Willnauer
- *
- */
-public class RegistryContextListener implements ServletContextListener {
- private GDataServerRegistry serverRegistry;
-
- private static final Log LOG = LogFactory
- .getLog(RegistryContextListener.class);
-
-
-
- /**
- * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
- */
- public void contextInitialized(ServletContextEvent arg0) {
- LOG.info("RegistryContextListener has been loaded");
- RegistryBuilder.buildRegistry();
- this.serverRegistry = GDataServerRegistry.getRegistry();
- }
-
- /**
- * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
- */
- public void contextDestroyed(ServletContextEvent arg0) {
- LOG.info("Destroying context");
- this.serverRegistry.destroy();
-
- }
-
-}
+ */
+public class RegistryContextListener implements ServletContextListener {
+ private GDataServerRegistry serverRegistry;
+
+ private static final Log LOG = LogFactory
+ .getLog(RegistryContextListener.class);
+
+ /**
+ * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
+ */
+ public void contextInitialized(ServletContextEvent arg0) {
+ LOG.info("RegistryContextListener has been loaded");
+
+ try {
+ RegistryBuilder.buildRegistry();
+ this.serverRegistry = GDataServerRegistry.getRegistry();
+ } catch (Exception e) {
+ this.serverRegistry.destroy();
+ LOG.error("can not register requiered components", e);
+ throw new RuntimeException("Can not register required components",
+ e);
+ }
+
+
+ }
+
+ /**
+ * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
+ */
+ public void contextDestroyed(ServletContextEvent arg0) {
+ LOG.info("Destroying context");
+ this.serverRegistry.destroy();
+
+ }
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/package.html
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/package.html?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/package.html (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/server/registry/package.html Mon Jun 26 11:14:53 2006
@@ -5,6 +5,6 @@
<meta name="Author" content="Simon Willnauer">
</head>
<body>
-Internal registry - registering feeds and configurations
+Internal registry - registering services and server components
</body>
</html>
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/AbstractGdataServlet.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/AbstractGdataServlet.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/AbstractGdataServlet.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/AbstractGdataServlet.java Mon Jun 26 11:14:53 2006
@@ -18,10 +18,15 @@
import java.io.IOException;
+import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+
+import org.apache.lucene.gdata.server.registry.ComponentType;
+import org.apache.lucene.gdata.server.registry.GDataServerRegistry;
+import org.apache.lucene.gdata.servlet.handler.RequestHandlerFactory;
/**
*
@@ -42,7 +47,9 @@
private static final String METHOD_POST = "POST";
- private static final String METHOD_PUT = "PUT";
+ private static final String METHOD_PUT = "PUT";
+
+ protected static RequestHandlerFactory HANDLER_FACTORY = null;
/**
* This overwrites the protected <code>service</code> method to dispatch
@@ -92,6 +99,17 @@
super.service(arg0, arg1);
}
+ }
+
+ /**
+ *
+ * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
+ */
+ public void init(ServletConfig arg0) throws ServletException {
+ HANDLER_FACTORY = GDataServerRegistry.getRegistry().lookup(RequestHandlerFactory.class,ComponentType.REQUESTHANDLERFACTORY);
+ if(HANDLER_FACTORY == null)
+ throw new ServletException("service not available");
+
}
}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/RequestControllerServlet.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/RequestControllerServlet.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/RequestControllerServlet.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/RequestControllerServlet.java Mon Jun 26 11:14:53 2006
@@ -1,122 +1,102 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.servlet;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.gdata.servlet.handler.GDataRequestHandler;
+
+/**
+ * Provides a clean basic interface for GDATA Client API and requests to the
+ * GDATA Server. This Servlet dispatches the incoming requests to defined GDATA
+ * request handlers. Each of the handler processes the incoming request and
+ * responds according to the requested action.
*
- * 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
+ * @author Simon Willnauer
*
- * 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 org.apache.lucene.gdata.servlet;
-
-import java.io.IOException;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.gdata.servlet.handler.DefaultRequestHandlerFactory;
-import org.apache.lucene.gdata.servlet.handler.GDataRequestHandler;
-import org.apache.lucene.gdata.servlet.handler.RequestHandlerFactory;
-
-/**
- * Provides a clean basic interface for GDATA Client API and requests to the
- * GDATA Server. This Servlet dispatches the incoming requests to defined GDATA
- * request handlers. Each of the handler processes the incoming request and
- * responds according to the requested action.
- *
- * @author Simon Willnauer
- *
- */
-public class RequestControllerServlet extends AbstractGdataServlet {
- private static RequestHandlerFactory HANDLER_FACTORY = null;
- private static final Log LOGGER = LogFactory.getLog(RequestControllerServlet.class);
-
- /**
- * Version ID since this class implements
- *
- * @see java.io.Serializable
- */
- private static final long serialVersionUID = 7540810742476175576L;
-
- /**
- * @see javax.servlet.http.HttpServlet#doDelete(javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
- */
- @Override
- protected void doDelete(HttpServletRequest arg0, HttpServletResponse arg1)
- throws ServletException, IOException {
- GDataRequestHandler hanlder = HANDLER_FACTORY.getDeleteHandler();
- if(LOGGER.isInfoEnabled())
- LOGGER.info("Process DELETE request");
-
- hanlder.processRequest(arg0, arg1);
- }
-
- /**
- * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
- */
- @Override
- protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
- throws ServletException, IOException {
- GDataRequestHandler hanlder = HANDLER_FACTORY.getQueryHandler();
- if(LOGGER.isInfoEnabled())
- LOGGER.info("Process GET request");
-
- hanlder.processRequest(arg0, arg1);
- }
-
- /**
- * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
- */
- @Override
- protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
- throws ServletException, IOException {
- GDataRequestHandler hanlder = HANDLER_FACTORY.getInsertHandler();
- if(LOGGER.isInfoEnabled())
- LOGGER.info("Process POST request");
- hanlder.processRequest(arg0, arg1);
- }
-
- /**
- * @see javax.servlet.http.HttpServlet#doPut(javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
- */
- @Override
- protected void doPut(HttpServletRequest arg0, HttpServletResponse arg1)
- throws ServletException, IOException {
- GDataRequestHandler hanlder = HANDLER_FACTORY.getUpdateHandler();
- if(LOGGER.isInfoEnabled())
- LOGGER.info("Process PUT request");
- hanlder.processRequest(arg0, arg1);
- }
-
- /**
- * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)
- */
- @Override
- public void init(ServletConfig arg0) {
- /*
- * The Factory implementation could be configured as an initial
- * parameter or by an external config file.
- *
- */
- HANDLER_FACTORY = RequestHandlerFactory
- .getInstance(DefaultRequestHandlerFactory.class);
-
- }
-
-
-}
+ */
+public class RequestControllerServlet extends AbstractGdataServlet {
+ private static final Log LOGGER = LogFactory.getLog(RequestControllerServlet.class);
+
+ /**
+ * Version ID since this class implements
+ *
+ * @see java.io.Serializable
+ */
+ private static final long serialVersionUID = 7540810742476175576L;
+
+ /**
+ * @see javax.servlet.http.HttpServlet#doDelete(javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ @Override
+ protected void doDelete(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws ServletException, IOException {
+ GDataRequestHandler hanlder = HANDLER_FACTORY.getEntryDeleteHandler();
+ if(LOGGER.isInfoEnabled())
+ LOGGER.info("Process DELETE request");
+
+ hanlder.processRequest(arg0, arg1);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ @Override
+ protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws ServletException, IOException {
+ GDataRequestHandler hanlder = HANDLER_FACTORY.getFeedQueryHandler();
+ if(LOGGER.isInfoEnabled())
+ LOGGER.info("Process GET request");
+ hanlder.processRequest(arg0, arg1);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ @Override
+ protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws ServletException, IOException {
+ GDataRequestHandler hanlder = HANDLER_FACTORY.getEntryInsertHandler();
+ if(LOGGER.isInfoEnabled())
+ LOGGER.info("Process POST request");
+ hanlder.processRequest(arg0, arg1);
+ }
+
+ /**
+ * @see javax.servlet.http.HttpServlet#doPut(javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ @Override
+ protected void doPut(HttpServletRequest arg0, HttpServletResponse arg1)
+ throws ServletException, IOException {
+ GDataRequestHandler hanlder = HANDLER_FACTORY.getEntryUpdateHandler();
+ if(LOGGER.isInfoEnabled())
+ LOGGER.info("Process PUT request");
+ hanlder.processRequest(arg0, arg1);
+ }
+
+
+}
Modified: lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/handler/AbstractGdataRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/handler/AbstractGdataRequestHandler.java?rev=417265&r1=417264&r2=417265&view=diff
==============================================================================
--- lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/handler/AbstractGdataRequestHandler.java (original)
+++ lucene/java/trunk/contrib/gdata-server/src/java/org/apache/lucene/gdata/servlet/handler/AbstractGdataRequestHandler.java Mon Jun 26 11:14:53 2006
@@ -1,96 +1,104 @@
-/**
- * Copyright 2004 The Apache Software Foundation
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.lucene.gdata.servlet.handler;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.lucene.gdata.server.GDataRequest;
+import org.apache.lucene.gdata.server.GDataRequestException;
+import org.apache.lucene.gdata.server.GDataResponse;
+import org.apache.lucene.gdata.server.Service;
+import org.apache.lucene.gdata.server.ServiceFactory;
+import org.apache.lucene.gdata.server.GDataRequest.GDataRequestType;
+import org.apache.lucene.gdata.server.registry.ComponentType;
+import org.apache.lucene.gdata.server.registry.GDataServerRegistry;
+
+/**
+ * @author Simon Willnauer
*
- * 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 org.apache.lucene.gdata.servlet.handler;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.gdata.server.GDataRequest;
-import org.apache.lucene.gdata.server.GDataRequestException;
-import org.apache.lucene.gdata.server.GDataResponse;
-import org.apache.lucene.gdata.server.Service;
-import org.apache.lucene.gdata.server.ServiceFactory;
-import org.apache.lucene.gdata.server.GDataRequest.GDataRequestType;
-
-/**
- * @author Simon Willnauer
- *
- */
-public abstract class AbstractGdataRequestHandler implements
- GDataRequestHandler {
- private final static Log LOG = LogFactory
- .getLog(AbstractGdataRequestHandler.class);
-
-
- protected GDataRequest feedRequest;
- protected GDataResponse feedResponse;
-
- /**
- * @see org.apache.lucene.gdata.servlet.handler.GDataRequestHandler#processRequest(javax.servlet.http.HttpServletRequest,
- * javax.servlet.http.HttpServletResponse)
- */
- public abstract void processRequest(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException;
-
- protected void initializeRequestHandler(final HttpServletRequest request, final HttpServletResponse response, final GDataRequestType type)
- throws GDataRequestException {
- this.feedRequest = new GDataRequest(request, type);
- this.feedResponse = new GDataResponse(response);
- try {
- this.feedRequest.initializeRequest();
- } catch (GDataRequestException e) {
- this.feedResponse.setError(HttpServletResponse.SC_NOT_FOUND);
- LOG.warn("Couldn't initialize FeedRequest - " + e.getMessage(), e);
- throw e;
- }
- }
-
-
-
- protected void sendError() throws IOException {
- this.feedResponse.sendError();
-
- }
-
- protected void setFeedResponseFormat() {
- this.feedResponse.setOutputFormat(this.feedRequest.getRequestedResponseFormat());
- }
-
- protected void setFeedResponseStatus(int status) {
- this.feedResponse.setResponseCode(status);
- }
-
- protected void setError(int error) {
- this.feedResponse.setError(error);
- }
-
- protected Service getService() throws ServletException {
- ServiceFactory serviceFactory = ServiceFactory.getInstance();
- Service service = serviceFactory.getService();
- if(service == null)
- throw new ServletException("Service not available");
- return service;
- }
-
-
-
-}
+ */
+public abstract class AbstractGdataRequestHandler extends RequestAuthenticator implements
+ GDataRequestHandler {
+ private final static Log LOG = LogFactory
+ .getLog(AbstractGdataRequestHandler.class);
+
+ protected Service service;
+ protected GDataRequest feedRequest;
+ protected GDataResponse feedResponse;
+
+ /**
+ * @see org.apache.lucene.gdata.servlet.handler.GDataRequestHandler#processRequest(javax.servlet.http.HttpServletRequest,
+ * javax.servlet.http.HttpServletResponse)
+ */
+ public abstract void processRequest(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException;
+
+ protected void initializeRequestHandler(final HttpServletRequest request, final HttpServletResponse response, final GDataRequestType type)
+ throws GDataRequestException, ServletException {
+ this.feedRequest = new GDataRequest(request, type);
+ this.feedResponse = new GDataResponse(response);
+ getService();
+ try {
+ this.feedRequest.initializeRequest();
+ } catch (GDataRequestException e) {
+ this.feedResponse.setError(HttpServletResponse.SC_NOT_FOUND);
+ LOG.warn("Couldn't initialize FeedRequest - " + e.getMessage(), e);
+ throw e;
+ }
+ }
+
+
+
+ protected void sendError() throws IOException {
+ this.feedResponse.sendError();
+
+ }
+
+ protected void setFeedResponseFormat() {
+ this.feedResponse.setOutputFormat(this.feedRequest.getRequestedResponseFormat());
+ }
+
+ protected void setFeedResponseStatus(int status) {
+ this.feedResponse.setResponseCode(status);
+ }
+
+ protected void setError(int error) {
+ this.feedResponse.setError(error);
+ }
+
+ private void getService() throws ServletException {
+ GDataServerRegistry registry = GDataServerRegistry.getRegistry();
+ ServiceFactory serviceFactory = registry.lookup(ServiceFactory.class,ComponentType.SERVICEFACTORY);
+ this.service = serviceFactory.getService();
+ if(this.service == null)
+ throw new ServletException("Service not available");
+
+ }
+
+ protected void closeService(){
+ this.service.close();
+ }
+
+
+
+}