You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/07/13 16:41:38 UTC

svn commit: r1146064 - in /wicket/trunk: wicket-core/src/main/java/org/apache/wicket/pageStore/ wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/ wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/

Author: mgrigorov
Date: Wed Jul 13 14:41:37 2011
New Revision: 1146064

URL: http://svn.apache.org/viewvc?rev=1146064&view=rev
Log:
WICKET-3865 Create a debug page with which the developer can browse the disk data store

Add posibility to show the stored pages for all sessions.
Add ajax timer that updates the table content every 5 seconds.


Added:
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/DataStoreHelper.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionsProviderModel.java
Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskDataStore.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/DebugDiskDataStore.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.html
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowDescription.java
    wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowProvider.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskDataStore.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskDataStore.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskDataStore.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/pageStore/DiskDataStore.java Wed Jul 13 14:41:37 2011
@@ -454,10 +454,11 @@ public class DiskDataStore implements ID
 	}
 
 	/**
+	 * This folder contains sub-folders named as the session id for which they hold the data.
 	 * 
-	 * @return folder
+	 * @return the folder where the pages are stored
 	 */
-	private File getStoreFolder()
+	protected File getStoreFolder()
 	{
 		return new File(fileStoreFolder, applicationName + "-filestore");
 	}

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/DebugDiskDataStore.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/DebugDiskDataStore.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/DebugDiskDataStore.java (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/DebugDiskDataStore.java Wed Jul 13 14:41:37 2011
@@ -65,6 +65,12 @@ public class DebugDiskDataStore extends 
 		return pageWindows;
 	}
 
+	@Override
+	public File getStoreFolder()
+	{
+		return super.getStoreFolder();
+	}
+
 	/**
 	 * 
 	 * @param application

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.html
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.html?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.html (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.html Wed Jul 13 14:41:37 2011
@@ -18,7 +18,11 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
 
-	<table wicket:id="table" border="1"></table>
+    <h3>Active sessions</h3>
+    <select wicket:id="sessions"></select> <a wicket:id="currentSessionLink" title="Selects the current session">Current session</a>
+
+    <h3>Stored pages</h3> <a wicket:id="refresh" title="Refreshes the content of the table below">refresh</a>
+	<table wicket:id="table" border="1" cellpadding="3" cellspacing="1"></table>
 
 </wicket:panel>
 </html>
\ No newline at end of file

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java Wed Jul 13 14:41:37 2011
@@ -19,9 +19,16 @@ package org.apache.wicket.devutils.disks
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
 
 /**
  * A panel that shows the data about pages in the data store
@@ -39,13 +46,69 @@ public class BrowserPanel extends Panel
 	{
 		super(id);
 
-		BrowserTable table = createTable("table");
+		final DropDownChoice<String> sessionsSelector = createSessionsSelector("sessions");
+		add(sessionsSelector);
+
+		final BrowserTable table = createTable("table", sessionsSelector.getModel());
 		add(table);
+
+		AjaxLink<Void> refreshLink = new AjaxLink<Void>("refresh")
+		{
+			@Override
+			public void onClick(AjaxRequestTarget target)
+			{
+				target.add(table);
+			}
+		};
+		add(refreshLink);
+
+		AjaxLink<Void> currentSessionLink = new AjaxLink<Void>("currentSessionLink")
+		{
+			@Override
+			public void onClick(AjaxRequestTarget target)
+			{
+				sessionsSelector.setModelObject(getCurrentSession().getObject());
+				target.add(sessionsSelector, table);
+			}
+
+			@Override
+			public boolean isVisible()
+			{
+				return BrowserPanel.this.getSession().isTemporary() == false;
+			}
+		};
+		currentSessionLink.setOutputMarkupPlaceholderTag(true);
+		add(currentSessionLink);
+
+		sessionsSelector.add(new AjaxFormComponentUpdatingBehavior("onchange")
+		{
+			@Override
+			protected void onUpdate(AjaxRequestTarget target)
+			{
+				target.add(table);
+			}
+		});
 	}
 
-	private BrowserTable createTable(String id)
+	private DropDownChoice<String> createSessionsSelector(String id)
 	{
-		PageWindowProvider provider = new PageWindowProvider();
+		IModel<String> defaultSession = getCurrentSession();
+
+		DropDownChoice<String> sessionsSelector = new DropDownChoice<String>("sessions",
+			defaultSession, new SessionsProviderModel());
+
+
+		return sessionsSelector;
+	}
+
+	private IModel<String> getCurrentSession()
+	{
+		return Model.of(getSession().getId());
+	}
+
+	private BrowserTable createTable(String id, IModel<String> sessionId)
+	{
+		PageWindowProvider provider = new PageWindowProvider(sessionId);
 
 		List<IColumn<PageWindowDescription>> columns = new ArrayList<IColumn<PageWindowDescription>>();
 
@@ -58,7 +121,12 @@ public class BrowserPanel extends Panel
 		PageWindowColumn pageSizeColumn = new PageWindowColumn(Model.of("Size"), "size");
 		columns.add(pageSizeColumn);
 
-		return new BrowserTable(id, columns, provider);
+		BrowserTable browserTable = new BrowserTable(id, columns, provider);
+		browserTable.setOutputMarkupId(true);
+
+		browserTable.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)));
+
+		return browserTable;
 	}
 
 }

Added: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/DataStoreHelper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/DataStoreHelper.java?rev=1146064&view=auto
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/DataStoreHelper.java (added)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/DataStoreHelper.java Wed Jul 13 14:41:37 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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.apache.wicket.devutils.diskstore.browser;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
+import org.apache.wicket.devutils.diskstore.DebugPageManagerProvider;
+
+/**
+ * A helper to work with {@link DebugDiskDataStore}
+ */
+public final class DataStoreHelper
+{
+
+	private DataStoreHelper()
+	{
+	}
+
+	/**
+	 * @return the configured {@link DebugDiskDataStore}
+	 */
+	public static DebugDiskDataStore getDataStore()
+	{
+		DebugPageManagerProvider pageManagerProvider = (DebugPageManagerProvider)Application.get()
+			.getPageManagerProvider();
+		DebugDiskDataStore dataStore = pageManagerProvider.getDataStore();
+		return dataStore;
+	}
+}

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowColumn.java Wed Jul 13 14:41:37 2011
@@ -17,7 +17,6 @@
 package org.apache.wicket.devutils.diskstore.browser;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.Session;
 import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
 import org.apache.wicket.devutils.diskstore.DebugPageManagerProvider;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
@@ -57,7 +56,7 @@ class PageWindowColumn extends PropertyC
 			DebugPageManagerProvider pageManagerProvider = (DebugPageManagerProvider)Application.get()
 				.getPageManagerProvider();
 			DebugDiskDataStore dataStore = pageManagerProvider.getDataStore();
-			String sessionId = Session.get().getId();
+			String sessionId = windowDescription.getSessionId();
 			byte[] data = dataStore.getData(sessionId, pageId);
 			ISerializer serializer = Application.get().getFrameworkSettings().getSerializer();
 			Object page = serializer.deserialize(data);

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowDescription.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowDescription.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowDescription.java (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowDescription.java Wed Jul 13 14:41:37 2011
@@ -30,23 +30,26 @@ class PageWindowDescription implements I
 	/** the page size */
 	private final int size;
 
-	PageWindowDescription(PageWindow pageWindow)
+	/** the id of the session for which this page has been used */
+	private final String sessionId;
+
+	PageWindowDescription(PageWindow pageWindow, String sessionId)
 	{
 		id = pageWindow.getPageId();
 		size = pageWindow.getFilePartSize();
+		this.sessionId = sessionId;
+	}
+
+	public String getSessionId()
+	{
+		return sessionId;
 	}
 
-	/**
-	 * @return the page id
-	 */
 	public int getId()
 	{
 		return id;
 	}
 
-	/**
-	 * @return the page size
-	 */
 	public int getSize()
 	{
 		return size;

Modified: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowProvider.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowProvider.java?rev=1146064&r1=1146063&r2=1146064&view=diff
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowProvider.java (original)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/PageWindowProvider.java Wed Jul 13 14:41:37 2011
@@ -20,10 +20,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.wicket.Application;
-import org.apache.wicket.Session;
 import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
-import org.apache.wicket.devutils.diskstore.DebugPageManagerProvider;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
 import org.apache.wicket.markup.repeater.data.IDataProvider;
@@ -38,6 +35,16 @@ class PageWindowProvider implements ISor
 {
 	private static final int MAX_PAGES_TO_READ = 1000;
 
+	/**
+	 * The model that brings the currently selected session id
+	 */
+	private final IModel<String> sessionId;
+
+	PageWindowProvider(final IModel<String> sessionId)
+	{
+		this.sessionId = sessionId;
+	}
+
 	public Iterator<? extends PageWindowDescription> iterator(int first, int count)
 	{
 		List<PageWindow> lastPageWindows = getPageWindows();
@@ -45,7 +52,7 @@ class PageWindowProvider implements ISor
 		List<PageWindowDescription> pageDescriptions = new ArrayList<PageWindowDescription>();
 		for (PageWindow pw : subList)
 		{
-			pageDescriptions.add(new PageWindowDescription(pw));
+			pageDescriptions.add(new PageWindowDescription(pw, sessionId.getObject()));
 		}
 
 		return pageDescriptions.iterator();
@@ -54,13 +61,12 @@ class PageWindowProvider implements ISor
 	private List<PageWindow> getPageWindows()
 	{
 		List<PageWindow> lastPageWindows = new ArrayList<PageWindow>();
-		if (Session.exists() && Session.get().isTemporary() == false)
+		if (sessionId != null && sessionId.getObject() != null)
 		{
-			String sessionId = Session.get().getId();
-			DebugPageManagerProvider pageManagerProvider = (DebugPageManagerProvider)Application.get()
-				.getPageManagerProvider();
-			DebugDiskDataStore dataStore = pageManagerProvider.getDataStore();
-			lastPageWindows.addAll(dataStore.getLastPageWindows(sessionId, MAX_PAGES_TO_READ));
+			String sessId = sessionId.getObject();
+			DebugDiskDataStore dataStore = DataStoreHelper.getDataStore();
+			List<PageWindow> pageWindows = dataStore.getLastPageWindows(sessId, MAX_PAGES_TO_READ);
+			lastPageWindows.addAll(pageWindows);
 		}
 		return lastPageWindows;
 	}
@@ -82,6 +88,7 @@ class PageWindowProvider implements ISor
 
 	public void detach()
 	{
+		sessionId.detach();
 	}
 
 	/*

Added: wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionsProviderModel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionsProviderModel.java?rev=1146064&view=auto
==============================================================================
--- wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionsProviderModel.java (added)
+++ wicket/trunk/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/SessionsProviderModel.java Wed Jul 13 14:41:37 2011
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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.apache.wicket.devutils.diskstore.browser;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.pageStore.DiskDataStore;
+
+/**
+ * A model that collects the session ids from the {@link DiskDataStore} folder
+ */
+public class SessionsProviderModel extends LoadableDetachableModel<List<String>>
+{
+
+	@Override
+	protected List<String> load()
+	{
+		List<String> sessionIds = new ArrayList<String>();
+		if (Application.exists())
+		{
+			DebugDiskDataStore dataStore = DataStoreHelper.getDataStore();
+			File appStoreFolder = dataStore.getStoreFolder();
+			if (appStoreFolder.isDirectory())
+			{
+				String[] sessionIdFileNames = appStoreFolder.list();
+				if (sessionIdFileNames != null)
+				{
+					for (String sessionId : sessionIdFileNames)
+					{
+						sessionIds.add(sessionId);
+					}
+				}
+			}
+		}
+
+		return sessionIds;
+	}
+}