From: <bra...@us...> - 2008-07-02 00:22:00
|
Revision: 2387 http://archive-access.svn.sourceforge.net/archive-access/?rev=2387&view=rev Author: bradtofel Date: 2008-07-01 17:22:06 -0700 (Tue, 01 Jul 2008) Log Message: ----------- REFACTOR: now uses UIReplayResult object to extract context Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ArchiveComment.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ClientSideJSInsert.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Disclaimer.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/JSLessTimeline.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ArchiveComment.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ArchiveComment.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ArchiveComment.jsp 2008-07-02 00:22:06 UTC (rev 2387) @@ -2,12 +2,12 @@ <%@ page import="java.util.Date" %> <%@ page import="org.archive.wayback.core.Timestamp" %> <%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> +<%@ page import="org.archive.wayback.replay.UIReplayResult" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> <% -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); +UIReplayResult results = (UIReplayResult) UIResults.getFromRequest(request); StringFormatter fmt = results.getFormatter(); -Date exactDate = results.getExactRequestedTimestamp().getDate(); +Date exactDate = results.getResult().getCaptureDate(); Date now = new Date(); String prettyDateFormat = "{0,date,H:mm:ss MMM d, yyyy}"; String prettyArchiveString = fmt.format(prettyDateFormat,exactDate); Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ClientSideJSInsert.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ClientSideJSInsert.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ClientSideJSInsert.jsp 2008-07-02 00:22:06 UTC (rev 2387) @@ -4,13 +4,12 @@ <%@ page import="org.archive.wayback.core.Timestamp" %> <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> +<%@ page import="org.archive.wayback.replay.UIReplayResult" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> <% -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); -ResultURIConverter uriConverter = results.getURIConverter(); -String requestDate = results.getExactRequestedTimestamp().getDateStr(); -String contextPath = uriConverter.makeReplayURI(requestDate, ""); +UIReplayResult results = (UIReplayResult) UIResults.getFromRequest(request); +String requestDate = results.getResult().getCaptureTimestamp(); +String contextPath = results.makeReplayUrl("",requestDate); String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Disclaimer.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Disclaimer.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Disclaimer.jsp 2008-07-02 00:22:06 UTC (rev 2387) @@ -2,21 +2,20 @@ <%@ page import="java.util.Date" %> <%@ page import="org.archive.wayback.WaybackConstants" %> <%@ page import="org.archive.wayback.core.Timestamp" %> -<%@ page import="org.archive.wayback.core.SearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> +<%@ page import="org.archive.wayback.replay.UIReplayResult" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> <% -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); +UIReplayResult results = (UIReplayResult) UIResults.getFromRequest(request); StringFormatter fmt = results.getFormatter(); -SearchResult result = results.getResult(); +CaptureSearchResult result = results.getResult(); String dupeMsg = ""; if(result != null) { - String dupeType = result.get(WaybackConstants.RESULT_DUPLICATE_ANNOTATION); - if(dupeType != null) { - String dupeDate = result.get(WaybackConstants.RESULT_DUPLICATE_STORED_DATE); + if(result.isDuplicateDigest()) { + String dupeDate = result.getDuplicateDigestStoredTimestamp(); String prettyDate = ""; if(dupeDate != null) { Timestamp dupeTS = Timestamp.parseBefore(dupeDate); @@ -29,10 +28,10 @@ } } -Date requestDate = results.getExactRequestedTimestamp().getDate(); -String requestUrl = results.getSearchUrl(); +Date resultDate = result.getCaptureDate(); +String resultUrl = result.getOriginalUrl(); -String wmNotice = fmt.format("ReplayView.banner", requestUrl, requestDate); +String wmNotice = fmt.format("ReplayView.banner", resultUrl, resultDate); String wmHideNotice = fmt.format("ReplayView.bannerHideLink"); String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/JSLessTimeline.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/JSLessTimeline.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/JSLessTimeline.jsp 2008-07-02 00:22:06 UTC (rev 2387) @@ -4,11 +4,12 @@ <%@ page import="java.util.Date" %> <%@ page import="java.text.ParseException" %> <%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.SearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> <%@ page import="org.archive.wayback.core.Timestamp" %> <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> +<%@ page import="org.archive.wayback.replay.UIReplayResult" %> <%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> <%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> @@ -17,40 +18,38 @@ String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); +UIReplayResult results = (UIReplayResult) UIResults.getFromRequest(request); StringFormatter fmt = results.getFormatter(); - -Timestamp searchStartTs = results.getStartTimestamp(); -Timestamp searchEndTs = results.getEndTimestamp(); -Timestamp exactTs = results.getExactRequestedTimestamp(); -String searchUrl = results.getSearchUrl(); -Date exactDate = exactTs.getDate(); - -String exactDateStr = exactTs.getDateStr(); WaybackRequest wbRequest = results.getWbRequest(); +CaptureSearchResults cResults = results.getResults(); + +String exactDateStr = wbRequest.get(WaybackConstants.REQUEST_DATE); +String searchUrl = wbRequest.get(WaybackConstants.REQUEST_URL); String resolution = wbRequest.get(WaybackConstants.REQUEST_RESOLUTION); +String metaMode = wbRequest.get(WaybackConstants.REQUEST_META_MODE); + +Date exactDate = Timestamp.parseBefore(exactDateStr).getDate(); + + if(resolution == null) { resolution = WaybackConstants.REQUEST_RESOLUTION_AUTO; } -String metaMode = wbRequest.get(WaybackConstants.REQUEST_META_MODE); String metaChecked = ""; if(metaMode != null && metaMode.equals("yes")) { metaChecked = "checked"; } -String searchString = results.getSearchUrl(); +CaptureSearchResult first = null; +CaptureSearchResult prev = null; +CaptureSearchResult next = null; +CaptureSearchResult last = null; -SearchResult first = null; -SearchResult prev = null; -SearchResult next = null; -SearchResult last = null; - -int resultCount = results.getResultsReturned(); +long resultCount = cResults.getReturnedCount(); int resultIndex = 1; -Iterator<SearchResult> it = results.resultsIterator(); +Iterator<CaptureSearchResult> it = cResults.iterator(); while(it.hasNext()) { - SearchResult res = it.next(); - String resDateStr = res.get(WaybackConstants.RESULT_CAPTURE_DATE); + CaptureSearchResult res = it.next(); + String resDateStr = res.getCaptureTimestamp(); int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); if(compared < 0) { resultIndex++; @@ -72,8 +71,7 @@ String hoursOptSelected = ""; String autoOptSelected = ""; -String minResolution = ResultsTimelinePartitionsFactory.getMinResolution( - results.getResults()); +String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); String optimal = ""; if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_HOURS)) { @@ -174,7 +172,7 @@ if(first != null) { titleString = "title=\"" + fmt.format("TimelineView.firstVersionTitle", - results.resultToDate(first)) + "\""; + first.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(first) %>"><% } %><img <%= titleString %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% @@ -185,7 +183,7 @@ if(prev != null) { titleString = "title=\"" + fmt.format("TimelineView.prevVersionTitle", - results.resultToDate(prev)) + "\""; + prev.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(prev) %>"><% } %><img <%= titleString %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% @@ -204,15 +202,15 @@ String prettyDateTime = null; if(numResults == 1) { imageUrl = contextRoot + "/images/mark_one.jpg"; - SearchResult result = (SearchResult) partitionResults.get(0); + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); } else if (numResults > 1) { imageUrl = contextRoot + "/images/mark_several.jpg"; - SearchResult result = (SearchResult) partitionResults.get(numResults - 1); + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); } if((i > 0) && (i < numPartitions)) { @@ -238,7 +236,7 @@ if(next != null) { titleString = "title=\"" + fmt.format("TimelineView.nextVersionTitle", - results.resultToDate(next)) + "\""; + next.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(next) %>"><% } %><img wmSpecial="1" <%= titleString %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% @@ -249,7 +247,7 @@ if(last != null) { titleString = "title=\"" + fmt.format("TimelineView.lastVersionTitle", - results.resultToDate(last)) + "\""; + last.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(last) %>"><% } %><img wmSpecial="1" <%= titleString %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp 2008-07-02 00:22:06 UTC (rev 2387) @@ -4,11 +4,12 @@ <%@ page import="java.util.Date" %> <%@ page import="java.text.ParseException" %> <%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.SearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> <%@ page import="org.archive.wayback.core.Timestamp" %> <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> +<%@ page import="org.archive.wayback.replay.UIReplayResult" %> <%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> <%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> @@ -17,53 +18,51 @@ String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); +UIReplayResult results = (UIReplayResult) UIResults.getFromRequest(request); StringFormatter fmt = results.getFormatter(); - -Timestamp searchStartTs = results.getStartTimestamp(); -Timestamp searchEndTs = results.getEndTimestamp(); -Timestamp exactTs = results.getExactRequestedTimestamp(); -String searchUrl = results.getSearchUrl(); -Date exactDate = exactTs.getDate(); - -String exactDateStr = exactTs.getDateStr(); WaybackRequest wbRequest = results.getWbRequest(); +CaptureSearchResults cResults = results.getResults(); + +String exactDateStr = wbRequest.get(WaybackConstants.REQUEST_DATE); +String searchUrl = wbRequest.get(WaybackConstants.REQUEST_URL); String resolution = wbRequest.get(WaybackConstants.REQUEST_RESOLUTION); +String metaMode = wbRequest.get(WaybackConstants.REQUEST_META_MODE); + +Date exactDate = Timestamp.parseBefore(exactDateStr).getDate(); + + if(resolution == null) { - resolution = WaybackConstants.REQUEST_RESOLUTION_AUTO; + resolution = WaybackConstants.REQUEST_RESOLUTION_AUTO; } -String metaMode = wbRequest.get(WaybackConstants.REQUEST_META_MODE); String metaChecked = ""; if(metaMode != null && metaMode.equals("yes")) { - metaChecked = "checked"; + metaChecked = "checked"; } -String searchString = results.getSearchUrl(); +CaptureSearchResult first = null; +CaptureSearchResult prev = null; +CaptureSearchResult next = null; +CaptureSearchResult last = null; -SearchResult first = null; -SearchResult prev = null; -SearchResult next = null; -SearchResult last = null; - -int resultCount = results.getResultsReturned(); +long resultCount = cResults.getReturnedCount(); int resultIndex = 1; -Iterator<SearchResult> it = results.resultsIterator(); +Iterator<CaptureSearchResult> it = cResults.iterator(); while(it.hasNext()) { - SearchResult res = it.next(); - String resDateStr = res.get(WaybackConstants.RESULT_CAPTURE_DATE); - int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); - if(compared < 0) { - resultIndex++; - prev = res; - if(first == null) { - first = res; - } - } else if(compared > 0) { - last = res; - if(next == null) { - next = res; - } - } + CaptureSearchResult res = it.next(); + String resDateStr = res.getCaptureTimestamp(); + int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); + if(compared < 0) { + resultIndex++; + prev = res; + if(first == null) { + first = res; + } + } else if(compared > 0) { + last = res; + if(next == null) { + next = res; + } + } } // string to indicate which select option is currently active String yearsOptSelected = ""; @@ -72,50 +71,49 @@ String hoursOptSelected = ""; String autoOptSelected = ""; -String minResolution = ResultsTimelinePartitionsFactory.getMinResolution( - results.getResults()); +String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); String optimal = ""; if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_HOURS)) { - optimal = fmt.format("TimelineView.timeRange.hours"); + optimal = fmt.format("TimelineView.timeRange.hours"); } else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_DAYS)) { - optimal = fmt.format("TimelineView.timeRange.days"); + optimal = fmt.format("TimelineView.timeRange.days"); } else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.months"); + optimal = fmt.format("TimelineView.timeRange.months"); } else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_TWO_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.twomonths"); + optimal = fmt.format("TimelineView.timeRange.twomonths"); } else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_YEARS)) { - optimal = fmt.format("TimelineView.timeRange.years"); + optimal = fmt.format("TimelineView.timeRange.years"); } else { - optimal = fmt.format("TimelineView.timeRange.unknown"); + optimal = fmt.format("TimelineView.timeRange.unknown"); } String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); ArrayList<ResultsPartition> partitions; if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_HOURS)) { - hoursOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getHour(results.getResults(), - wbRequest); + hoursOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getHour(results.getResults(), + wbRequest); } else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_DAYS)) { - daysOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getDay(results.getResults(), - wbRequest); + daysOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getDay(results.getResults(), + wbRequest); } else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getMonth(results.getResults(), - wbRequest); + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getMonth(results.getResults(), + wbRequest); } else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_TWO_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getTwoMonth(results.getResults(), - wbRequest); + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getTwoMonth(results.getResults(), + wbRequest); } else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_YEARS)) { - yearsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getYear(results.getResults(), - wbRequest); + yearsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getYear(results.getResults(), + wbRequest); } else { - autoOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getAuto(results.getResults(), - wbRequest); + autoOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getAuto(results.getResults(), + wbRequest); } int numPartitions = partitions.size(); ResultsPartition firstP = (ResultsPartition) partitions.get(0); @@ -196,7 +194,7 @@ if(first != null) { titleString = "title=\"" + fmt.format("TimelineView.firstVersionTitle", - results.resultToDate(first)) + "\""; + first.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(first) %>"><% } %><img <%= titleString %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% @@ -207,7 +205,7 @@ if(prev != null) { titleString = "title=\"" + fmt.format("TimelineView.prevVersionTitle", - results.resultToDate(prev)) + "\""; + prev.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(prev) %>"><% } %><img <%= titleString %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% @@ -226,15 +224,15 @@ String prettyDateTime = null; if(numResults == 1) { imageUrl = contextRoot + "/images/mark_one.jpg"; - SearchResult result = (SearchResult) partitionResults.get(0); + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); } else if (numResults > 1) { imageUrl = contextRoot + "/images/mark_several.jpg"; - SearchResult result = (SearchResult) partitionResults.get(numResults - 1); + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); } if((i > 0) && (i < numPartitions)) { @@ -260,7 +258,7 @@ if(next != null) { titleString = "title=\"" + fmt.format("TimelineView.nextVersionTitle", - results.resultToDate(next)) + "\""; + next.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(next) %>"><% } %><img wmSpecial="1" <%= titleString %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% @@ -271,7 +269,7 @@ if(last != null) { titleString = "title=\"" + fmt.format("TimelineView.lastVersionTitle", - results.resultToDate(last)) + "\""; + last.getCaptureDate()) + "\""; %><a wmSpecial="1" href="<%= results.resultToReplayUrl(last) %>"><% } %><img wmSpecial="1" <%= titleString %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |