Skip to main content



      Home
Home » Modeling » Graphiti » NPE after upgrading to eclipse mars
NPE after upgrading to eclipse mars [message #1699828] Fri, 26 June 2015 18:10 Go to next message
Eclipse UserFriend
Hi,
I've just migrated to eclipse mars and to Graphiti 0.12
When opening my old diagrams or just created I get following exception. It seems to be related to Palette and its icons. I will investigate problem, however maybe someone have seen the same problem and knows already what is wrong?
I get error when calling super method of:
	@Override
	public void createPartControl(Composite parent) {
		super.createPartControl(parent);
		// hides grid on diagram, but you can reenable it
		if (getGraphicalViewer() != null && getGraphicalViewer().getEditPartRegistry() != null) {
			ScalableFreeformRootEditPart rootEditPart = (ScalableFreeformRootEditPart) getGraphicalViewer().getEditPartRegistry().get(LayerManager.ID);
			IFigure gridFigure = ((LayerManager) rootEditPart).getLayer(LayerConstants.GRID_LAYER);
			gridFigure.setVisible(false);
		}
	}


java.lang.NullPointerException
	at org.eclipse.jface.resource.ImageDataImageDescriptor.hashCode(ImageDataImageDescriptor.java:84)
	at java.util.HashMap.hash(HashMap.java:362)
	at java.util.HashMap.getEntry(HashMap.java:462)
	at java.util.HashMap.get(HashMap.java:417)
	at org.eclipse.gef.ui.palette.editparts.PaletteEditPart$ImageCache.getImage(PaletteEditPart.java:430)
	at org.eclipse.gef.ui.palette.editparts.PaletteEditPart.setImageDescriptor(PaletteEditPart.java:388)
	at org.eclipse.gef.internal.ui.palette.editparts.ToolEntryEditPart.refreshVisuals(ToolEntryEditPart.java:469)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:725)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gef.internal.ui.palette.editparts.PinnablePaletteStackEditPart.addChild(PinnablePaletteStackEditPart.java:152)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:781)
	at org.eclipse.gef.internal.ui.palette.editparts.PinnablePaletteStackEditPart.refreshChildren(PinnablePaletteStackEditPart.java:195)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:726)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:781)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:726)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:781)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:726)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:644)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:253)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:212)
	at org.eclipse.gef.editparts.SimpleRootEditPart.setContents(SimpleRootEditPart.java:105)
	at org.eclipse.gef.ui.palette.PaletteViewer.setPaletteRoot(PaletteViewer.java:425)
	at org.eclipse.gef.EditDomain.setPaletteViewer(EditDomain.java:420)
	at org.eclipse.gef.ui.palette.PaletteViewerProvider.hookPaletteViewer(PaletteViewerProvider.java:86)
	at org.eclipse.gef.ui.palette.PaletteViewerProvider.createPaletteViewer(PaletteViewerProvider.java:65)
	at org.eclipse.gef.ui.palette.FlyoutPaletteComposite.setState(FlyoutPaletteComposite.java:618)
	at org.eclipse.gef.ui.palette.FlyoutPaletteComposite.updateState(FlyoutPaletteComposite.java:664)
	at org.eclipse.gef.ui.palette.FlyoutPaletteComposite.<init>(FlyoutPaletteComposite.java:206)
	at org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette.createPaletteComposite(GraphicalEditorWithFlyoutPalette.java:94)
	at org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette.createPartControl(GraphicalEditorWithFlyoutPalette.java:73)
	at org.eclipse.graphiti.ui.editor.DiagramEditor.createPartControl(DiagramEditor.java:320)
	at com.systemincloud.modeler.eclipse.editor.SystemInCloudEditor.createPartControl(SystemInCloudEditor.java:52)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:99)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:341)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:898)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:879)
	at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:121)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:345)
	at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:264)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:971)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:640)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:746)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:717)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:711)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:695)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:99)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:186)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4633)
	at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:211)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
	at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
	at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
	at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
	at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
	at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:85)
	at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
	at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:494)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:458)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:724)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:396)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1166)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3234)
	at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3149)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3131)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3126)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3090)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3080)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:541)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:500)
	at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:360)
	at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:167)
	at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:268)
	at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:233)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251)
	at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50)
	at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:229)
	at org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191)
	at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)
	at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:854)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
	at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:851)
	at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1168)
	at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:449)
	at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1275)
	at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278)
	at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4481)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1327)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3819)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3430)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1488)


Thanks,

Marek
Re: NPE after upgrading to eclipse mars [message #1700483 is a reply to message #1699828] Thu, 02 July 2015 16:41 Go to previous messageGo to next message
Eclipse UserFriend
Still not solved.
My observations:
My icons are rather URLImageDescriptor e.g.:
URLImageDescriptor(platform:/plugin/com.systemincloud.modeler.gui/bundleentry:/20.fwk806881132/icons/palette.outputport.png)

I see that in ImageService in createImageDescriptorForId descriptors are intended to be fixed:
	private ImageDescriptor fixImageDescriptor(ImageDescriptor descriptor) {
		// Typically the incoming ImageDescriptor is an URLImageDescriptor. The following lines create an ImageDataImageDescriptor
		// from it, which basically describes the same image. But that one works. So there seems to be an error in the
		// URLImageDescriptor.
		ImageData data = descriptor.getImageData();
		return ImageDescriptor.createFromImageData(data);

	}


But in my case getImageData() returns null and the ImageDataImageDescriptor has attribute data null.

Still digging ...

[UPDATE]:
Ok, I am blind. Urls are generated wrongly: (platform:/plugin/com.systemincloud.modeler.gui/bundleentry:/20.fwk806881132/icons/palette.outputport.png

[Updated on: Thu, 02 July 2015 17:30] by Moderator

Re: NPE after upgrading to eclipse mars [message #1700488 is a reply to message #1700483] Thu, 02 July 2015 17:54 Go to previous messageGo to next message
Eclipse UserFriend
Hi Michael,
Do you know maybe why it adds the main plugin (where my ImageProvider is defined) to path ?
My solution of icons is as I described in the topic: https://www.eclipse.org/forums/index.php/t/1067766/

Thanks for any hints,

Marek

[Updated on: Thu, 02 July 2015 18:14] by Moderator

Re: NPE after upgrading to eclipse mars [message #1700547 is a reply to message #1700488] Fri, 03 July 2015 08:42 Go to previous messageGo to next message
Eclipse UserFriend
Marek,

not sure, from a short look into the coding it should use the plugin ID of
the plugin defining the image provider extension. It is set from the
ExtensionManager on creating the image provider extension.

Michael
Re: NPE after upgrading to eclipse mars [message #1700570 is a reply to message #1700547] Fri, 03 July 2015 16:17 Go to previous messageGo to next message
Eclipse UserFriend
It is maybe not strictly connected to Graphiti.
This line:
imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, imageFilePath);

is giving me different results in luna and mars for the same set of parameters. My pluginId is indeed com.systemincloud.modeler.gui and imageFilePath is e.g. bundleentry://1324.fwk53210447/icons/palette.videofromfile.png in both eclipse.
In eclipse luna it returns URLImageDescriptor(bundleentry://1324.fwk53210447/icons/palette.videofromfile.png)
In eclipse mars it returns URLImageDescriptor(platform:/plugin/com.systemincloud.modeler.gui/bundleentry:/1324.fwk53210447/icons/palette.videofromfile.png)

I will dig now org.eclipse.ui.plugin.AbstractUIPlugin to understand this change.
Re: NPE after upgrading to eclipse mars [message #1700572 is a reply to message #1700570] Fri, 03 July 2015 17:20 Go to previous messageGo to next message
Eclipse UserFriend
There is my question in bugzilla related to change made in org.eclipse.ui.workbench: https://bugs.eclipse.org/bugs/show_bug.cgi?id=421383#c94
Re: NPE after upgrading to eclipse mars [message #1700573 is a reply to message #1700572] Fri, 03 July 2015 17:43 Go to previous messageGo to next message
Eclipse UserFriend
Michael,
As I see, before my solution was working maybe even by chance. You explicitly ask for ImageDescriptor in the main plugin. Wouldn't be possible to handle also in Graphiti my usecase where images are not in the main plugin and are indicated by protocol bundleentry? I can provide a contribution for that.

Marek

[Updated on: Sat, 04 July 2015 12:29] by Moderator

Re: NPE after upgrading to eclipse mars [message #1700913 is a reply to message #1700573] Wed, 08 July 2015 03:18 Go to previous messageGo to next message
Eclipse UserFriend
Marek,

thats sounds good. Just go ahead, create a Bugzilla for this and ideally a
Gerrit patchset or upload a patch to the bug and I'm pretty sure I can
include that.

Thanks for digging into this.

Michael
Re: NPE after upgrading to eclipse mars [message #1701032 is a reply to message #1700913] Wed, 08 July 2015 15:54 Go to previous messageGo to next message
Eclipse UserFriend
Issue created https://bugs.eclipse.org/bugs/show_bug.cgi?id=472219
Re: NPE after upgrading to eclipse mars [message #1703410 is a reply to message #1701032] Fri, 31 July 2015 07:27 Go to previous messageGo to next message
Eclipse UserFriend
Michael, Marek,

that solution solves the issue when having a URL starting with bundleentry:// which is the case when I grab the url of a bundle entry via the Bundle.getEntry() method.

In my case I used the Bundle.getResource() method and it returned a URL starting with bundleresource://. So your patch did not fix it for my case.

We could generalize that patch a bit more to also allow the usage of Bundle.getResource() method.

What do you think?

Lars


Re: NPE after upgrading to eclipse mars [message #1703474 is a reply to message #1703410] Fri, 31 July 2015 18:10 Go to previous messageGo to next message
Eclipse UserFriend
Hi,
I opened a bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=474072 for this change for Platform UI. But hope those two protocols are explicit list that we need to handle.

As a workaround technique I use equinox weaving as described here: https://wiki.eclipse.org/Equinox_Weaving_QuickStart

Marek
Re: NPE after upgrading to eclipse mars [message #1703572 is a reply to message #1703474] Mon, 03 August 2015 04:50 Go to previous messageGo to next message
Eclipse UserFriend
Wow, using aspects weaving for this kind of issue seems a bit like shooting sparrows with cannon balls. Smile Wondering what is the reason behind that change in platform ui.
Re: NPE after upgrading to eclipse mars [message #1703685 is a reply to message #1703572] Tue, 04 August 2015 05:20 Go to previous messageGo to next message
Eclipse UserFriend
So from what I understand from Markus Keller's comment to the Bugzilla the problem is to be fixed in ImageService class as formerly it only worked by accident. I'd suggest applying my patch so both bundleentry and bundleresource are working.
Re: NPE after upgrading to eclipse mars [message #1704978 is a reply to message #1703685] Tue, 11 August 2015 04:58 Go to previous message
Eclipse UserFriend
Lars,

that sounds good to me. I'm a little short on time currently, but will check
your contribution hopefully soon.

Thanks,
Michael
Previous Topic:Drag and Drop Multiple Pictogram elements from the Palette
Next Topic:Diagram update after model change
Goto Forum:
  


Current Time: Sun Mar 16 16:23:49 EDT 2025

Powered by FUDForum. Page generated in 0.04799 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top