From: <bra...@us...> - 2008-07-22 02:53:41
|
Revision: 2482 http://archive-access.svn.sourceforge.net/archive-access/?rev=2482&view=rev Author: bradtofel Date: 2008-07-22 02:53:50 +0000 (Tue, 22 Jul 2008) Log Message: ----------- INITIAL-REV: two custom ExceptionRenderer implementations which provide the ability to override specific the standard .jsp handlers, via a list of special-case hosts, or by consulting an external Oracle. The AnnotationExceptionRenderer is highly experimental. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java 2008-07-22 02:53:50 UTC (rev 2482) @@ -0,0 +1,130 @@ +/* AnnotationExceptionRenderer + * + * $Id$ + * + * Created on 7:17:24 PM Jun 10, 2008. + * + * Copyright (C) 2008 Internet Archive. + * + * This file is part of wayback. + * + * wayback is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * any later version. + * + * wayback is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser Public License for more details. + * + * You should have received a copy of the GNU Lesser Public License + * along with wayback; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package org.archive.wayback.exception; + +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.archive.accesscontrol.AccessControlClient; +import org.archive.accesscontrol.RuleOracleUnavailableException; +import org.archive.accesscontrol.model.Rule; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class AnnotationExceptionRenderer extends BaseExceptionRenderer { + private AccessControlClient client = null; + private String oracleUrl = null; + private String who = null; + public void init() { + client = new AccessControlClient(oracleUrl); + } + public String getExceptionHandler(HttpServletRequest httpRequest, + HttpServletResponse httpResponse, WaybackRequest wbRequest, + WaybackException exception) { + // the "standard HTML" response handler: + String jspPath = getCustomHandler(exception,wbRequest); + if(jspPath == null) { + jspPath = super.getExceptionHandler(httpRequest, httpResponse, + wbRequest, exception); + } + return jspPath; + } + + private String getCustomHandler(WaybackException e, WaybackRequest wbRequest) { + String jspPath = null; + if((e instanceof ResourceNotInArchiveException) + && wbRequest.isReplayRequest()) { + String url = wbRequest.getRequestUrl(); + Date captureDate = wbRequest.getReplayDate(); + try { + Rule rule = client.getRule(url,captureDate,new Date(),who); + jspPath = ruleToJspPath(rule); + } catch (RuleOracleUnavailableException e1) { + e1.printStackTrace(); + } + } + return jspPath; + } + + private String ruleToJspPath(Rule rule) { + if(rule != null) { + String pc = rule.getPublicComment(); + if(pc.startsWith("/")) { + return pc; + } + } + return null; + } + /** + * @return the client + */ + public AccessControlClient getClient() { + return client; + } + + /** + * @param client the client to set + */ + public void setClient(AccessControlClient client) { + client.setRobotLookupsEnabled(false); + this.client = client; + } + + /** + * @return the oracleUrl + */ + public String getOracleUrl() { + return oracleUrl; + } + + /** + * @param oracleUrl the oracleUrl to set + */ + public void setOracleUrl(String oracleUrl) { + this.oracleUrl = oracleUrl; + setClient(new AccessControlClient(oracleUrl)); + } + + /** + * @return the who + */ + public String getWho() { + return who; + } + + /** + * @param who the who to set + */ + public void setWho(String who) { + this.who = who; + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java 2008-07-22 02:53:50 UTC (rev 2482) @@ -0,0 +1,95 @@ +/* CustomNotInArchiveExceptionRenderer + * + * $Id$ + * + * Created on 1:21:49 PM Jul 8, 2008. + * + * Copyright (C) 2008 Internet Archive. + * + * This file is part of wayback. + * + * wayback is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * any later version. + * + * wayback is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser Public License for more details. + * + * You should have received a copy of the GNU Lesser Public License + * along with wayback; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package org.archive.wayback.exception; + +import java.util.HashMap; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.archive.wayback.core.WaybackRequest; +import org.archive.wayback.util.url.UrlOperations; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class CustomNotInArchiveExceptionRenderer extends BaseExceptionRenderer { + private HashMap<String,Object> hosts = null; + private String jspHandler = null; + + + public String getExceptionHandler(HttpServletRequest httpRequest, + HttpServletResponse httpResponse, WaybackRequest wbRequest, + WaybackException exception) { + String jspPath = getCustomHandler(exception,wbRequest); + if(jspPath == null) { + jspPath = super.getExceptionHandler(httpRequest, httpResponse, + wbRequest, exception); + } + return jspPath; + } + + + /** + * @param exception + * @param wbRequest + * @return + */ + private String getCustomHandler(WaybackException exception, + WaybackRequest wbRequest) { + if((exception instanceof ResourceNotInArchiveException) + && wbRequest.isReplayRequest()) { + String url = wbRequest.getRequestUrl(); + String host = UrlOperations.urlToHost(url); + if(hosts.containsKey(host)) { + return jspHandler; + } + } + return null; + } + + + public String getJspHandler() { + return jspHandler; + } + + + public void setJspHandler(String jspHandler) { + this.jspHandler = jspHandler; + } + public List<String> getHosts() { + return null; + } + public void setHosts(List<String> hosts) { + this.hosts = new HashMap<String,Object>(); + for(String host : hosts) { + this.hosts.put(host, null); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2010-03-29 21:50:48
|
Revision: 3007 http://archive-access.svn.sourceforge.net/archive-access/?rev=3007&view=rev Author: bradtofel Date: 2010-03-29 21:50:42 +0000 (Mon, 29 Mar 2010) Log Message: ----------- TWEAK: speling problem Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdministrativeAccessControlException.java Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdminstrativeAccessControlException.java Copied: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdministrativeAccessControlException.java (from rev 3006, trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdminstrativeAccessControlException.java) =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdministrativeAccessControlException.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdministrativeAccessControlException.java 2010-03-29 21:50:42 UTC (rev 3007) @@ -0,0 +1,40 @@ +/* AdministrativeAccessControlException + * + * $Id$: + * + * Created on Mar 25, 2010. + * + * Copyright (C) 2006 Internet Archive. + * + * This file is part of Wayback. + * + * Wayback is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * any later version. + * + * Wayback is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser Public License for more details. + * + * You should have received a copy of the GNU Lesser Public License + * along with Wayback; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package org.archive.wayback.exception; + +/** + * @author brad + * + */ +public class AdministrativeAccessControlException extends AccessControlException { + + /** + * @param message + */ + public AdministrativeAccessControlException(String message) { + super("Blocked Site Error",message); + } +} Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdminstrativeAccessControlException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdminstrativeAccessControlException.java 2010-03-26 03:22:05 UTC (rev 3006) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AdminstrativeAccessControlException.java 2010-03-29 21:50:42 UTC (rev 3007) @@ -1,40 +0,0 @@ -/* AdminstrativeAccessControlException - * - * $Id$: - * - * Created on Mar 25, 2010. - * - * Copyright (C) 2006 Internet Archive. - * - * This file is part of Wayback. - * - * Wayback is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * any later version. - * - * Wayback is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser Public License for more details. - * - * You should have received a copy of the GNU Lesser Public License - * along with Wayback; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -package org.archive.wayback.exception; - -/** - * @author brad - * - */ -public class AdminstrativeAccessControlException extends AccessControlException { - - /** - * @param message - */ - public AdminstrativeAccessControlException(String message) { - super("Blocked Site Error",message); - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2010-06-04 01:52:17
|
Revision: 3147 http://archive-access.svn.sourceforge.net/archive-access/?rev=3147&view=rev Author: bradtofel Date: 2010-06-04 01:52:10 +0000 (Fri, 04 Jun 2010) Log Message: ----------- Deprecated Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java 2010-06-03 23:31:35 UTC (rev 3146) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/AnnotationExceptionRenderer.java 2010-06-04 01:52:10 UTC (rev 3147) @@ -39,6 +39,7 @@ * * @author brad * @version $Date$, $Revision$ + * @deprecated */ public class AnnotationExceptionRenderer extends BaseExceptionRenderer { private AccessControlClient client = null; @@ -47,17 +48,17 @@ public void init() { client = new AccessControlClient(oracleUrl); } - public String getExceptionHandler(HttpServletRequest httpRequest, - HttpServletResponse httpResponse, WaybackRequest wbRequest, - WaybackException exception) { - // the "standard HTML" response handler: - String jspPath = getCustomHandler(exception,wbRequest); - if(jspPath == null) { - jspPath = super.getExceptionHandler(httpRequest, httpResponse, - wbRequest, exception); - } - return jspPath; - } +// public String getExceptionHandler(HttpServletRequest httpRequest, +// HttpServletResponse httpResponse, WaybackRequest wbRequest, +// WaybackException exception) { +// // the "standard HTML" response handler: +// String jspPath = getCustomHandler(exception,wbRequest); +// if(jspPath == null) { +// jspPath = super.getExceptionHandler(httpRequest, httpResponse, +// wbRequest, exception); +// } +// return jspPath; +// } private String getCustomHandler(WaybackException e, WaybackRequest wbRequest) { String jspPath = null; @@ -84,6 +85,7 @@ } return null; } + /** * @return the client */ Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java 2010-06-03 23:31:35 UTC (rev 3146) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/CustomNotInArchiveExceptionRenderer.java 2010-06-04 01:52:10 UTC (rev 3147) @@ -38,22 +38,23 @@ * * @author brad * @version $Date$, $Revision$ + * @deprecated */ public class CustomNotInArchiveExceptionRenderer extends BaseExceptionRenderer { private HashMap<String,Object> hosts = null; private String jspHandler = null; - public String getExceptionHandler(HttpServletRequest httpRequest, - HttpServletResponse httpResponse, WaybackRequest wbRequest, - WaybackException exception) { - String jspPath = getCustomHandler(exception,wbRequest); - if(jspPath == null) { - jspPath = super.getExceptionHandler(httpRequest, httpResponse, - wbRequest, exception); - } - return jspPath; - } +// public String getExceptionHandler(HttpServletRequest httpRequest, +// HttpServletResponse httpResponse, WaybackRequest wbRequest, +// WaybackException exception) { +// String jspPath = getCustomHandler(exception,wbRequest); +// if(jspPath == null) { +// jspPath = super.getExceptionHandler(httpRequest, httpResponse, +// wbRequest, exception); +// } +// return jspPath; +// } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2011-03-09 05:37:30
|
Revision: 3420 http://archive-access.svn.sourceforge.net/archive-access/?rev=3420&view=rev Author: bradtofel Date: 2011-03-09 05:37:24 +0000 (Wed, 09 Mar 2011) Log Message: ----------- INITIAL REV: additional Exception classes to specify some timeout and robot not available conditions Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java 2011-03-09 05:37:24 UTC (rev 3420) @@ -0,0 +1,16 @@ +package org.archive.wayback.exception; + +import javax.servlet.http.HttpServletResponse; + +public class LiveWebTimeoutException extends WaybackException { + + public LiveWebTimeoutException(String message) { + super(message); + } + /** + * @return the HTTP status code appropriate to this exception class. + */ + public int getStatus() { + return HttpServletResponse.SC_SERVICE_UNAVAILABLE; + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java 2011-03-09 05:37:24 UTC (rev 3420) @@ -0,0 +1,19 @@ +package org.archive.wayback.exception; + +import javax.servlet.http.HttpServletResponse; + +public class RobotNotAvailableException extends AccessControlException { + protected static final String ID = "accessWebNotAvailable"; + + public RobotNotAvailableException(String message) { + super(message); + id = ID; + } + /** + * @return the HTTP status code appropriate to this exception class. + */ + public int getStatus() { + return HttpServletResponse.SC_SERVICE_UNAVAILABLE; + } + +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java 2011-03-09 05:37:24 UTC (rev 3420) @@ -0,0 +1,21 @@ +package org.archive.wayback.exception; + +import javax.servlet.http.HttpServletResponse; + +public class RobotTimedOutAccessControlException extends AccessControlException { + protected static final String ID = "accessRobotTimeout"; + + /** + * @param message + */ + public RobotTimedOutAccessControlException(String message) { + super("Robot.txt timed out",message); + id = ID; + } + /** + * @return the HTTP status code appropriate to this exception class. + */ + public int getStatus() { + return HttpServletResponse.SC_SERVICE_UNAVAILABLE; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2011-03-09 05:39:11
|
Revision: 3421 http://archive-access.svn.sourceforge.net/archive-access/?rev=3421&view=rev Author: bradtofel Date: 2011-03-09 05:39:05 +0000 (Wed, 09 Mar 2011) Log Message: ----------- COMMENT: added license Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java 2011-03-09 05:37:24 UTC (rev 3420) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/LiveWebTimeoutException.java 2011-03-09 05:39:05 UTC (rev 3421) @@ -1,3 +1,22 @@ +/* + * This file is part of the Wayback archival access software + * (http://archive-access.sourceforge.net/projects/wayback/). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You 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.archive.wayback.exception; import javax.servlet.http.HttpServletResponse; Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java 2011-03-09 05:37:24 UTC (rev 3420) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotNotAvailableException.java 2011-03-09 05:39:05 UTC (rev 3421) @@ -1,3 +1,22 @@ +/* + * This file is part of the Wayback archival access software + * (http://archive-access.sourceforge.net/projects/wayback/). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You 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.archive.wayback.exception; import javax.servlet.http.HttpServletResponse; Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java 2011-03-09 05:37:24 UTC (rev 3420) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/RobotTimedOutAccessControlException.java 2011-03-09 05:39:05 UTC (rev 3421) @@ -1,3 +1,22 @@ +/* + * This file is part of the Wayback archival access software + * (http://archive-access.sourceforge.net/projects/wayback/). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You 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.archive.wayback.exception; import javax.servlet.http.HttpServletResponse; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |