Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » Epsilon » Executing ETL inside Maven Plugin
Executing ETL inside Maven Plugin [message #1708936] Tue, 22 September 2015 14:59 Go to next message
Rolando Amarillo is currently offline Rolando AmarilloFriend
Messages: 4
Registered: September 2015
Junior Member
Hi,

I'm developing a Sonar-Maven plugin and executing a transformation inside it.

I take some code from
examples/standalone/etl/EtlStandaloneExample.java
and adapted to my needs:

The problem is that when sonar runs the plugin it shows this exception:

 ------------------------------------------------------------------------
 BUILD FAILURE
 ------------------------------------------------------------------------
 Total time: 02:30 min
 Finished at: 2015-09-22T08:46:00-05:00
 Final Memory: 40M/329M
 ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.6:sonar (d
efault-cli) on project build-default-product: null: MojoExecutionException: Exce
ptionInInitializerError: UnsupportedOperationException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.codehaus.mojo:sonar-maven-plugin:2.6:sonar (default-cli) on project build-def
ault-product: null
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:216)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThre
adedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
eStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun
cher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
a:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
uncher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
356)
Caused by: org.apache.maven.plugin.MojoExecutionException
        at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionH
andling.java:41)
        at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBoo
tstraper.java:139)
        at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:132)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default
BuildPluginManager.java:134)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:208)
        ... 20 more
Caused by: java.lang.ExceptionInInitializerError
        at org.eclipse.epsilon.emc.emf.EmfModel.loadModelFromUri(EmfModel.java:2
37)
        at org.eclipse.epsilon.emc.emf.EmfModel.loadModel(EmfModel.java:168)
        at org.eclipse.epsilon.eol.models.CachedModel.load(CachedModel.java:147)

        at org.eclipse.epsilon.emc.emf.EmfModel.load(EmfModel.java:152)
        at tools.sonarplugin.simplifieddecisionmetrics.transformer.EpsilonStanda
loneExecuter.createEmfModel(EpsilonStandaloneExecuter.java:92)
        at tools.sonarplugin.simplifieddecisionmetrics.transformer.SubKDM2SDMTra
nsformation.getModels(SubKDM2SDMTransformation.java:68)
        at tools.sonarplugin.simplifieddecisionmetrics.transformer.EpsilonStanda
loneExecuter.execute(EpsilonStandaloneExecuter.java:56)
        at tools.sonarplugin.simplifieddecisionmetrics.IDEMetadataSensor.analyse
(IDEMetadataSensor.java:37)
        at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.
java:59)
        at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:5
1)
        at org.sonar.batch.phases.DatabaseModePhaseExecutor.execute(DatabaseMode
PhaseExecutor.java:120)
        at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanConta
iner.java:264)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.j
ava:235)
        at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScan
Container.java:230)
        at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScan
Container.java:228)
        at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanCon
tainer.java:220)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:57)
        at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:45)
        at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.ja
va:135)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer
.java:158)
        at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
        at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
        at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java
:48)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher
.java:87)
        at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
        at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
        at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102
)
        at org.sonar.runner.api.Runner.execute(Runner.java:100)
        at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBoo
tstraper.java:135)
        ... 23 more
Caused by: java.lang.UnsupportedOperationException
        at org.eclipse.emf.ecore.impl.MinimalEObjectImpl.eBasicAdapters(MinimalE
ObjectImpl.java:295)
        at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotificationReq
uired(BasicNotifierImpl.java:261)
        at org.eclipse.emf.ecore.impl.EFactoryImpl.basicSetEPackage(EFactoryImpl
.java:138)
        at org.eclipse.emf.ecore.impl.EFactoryImpl.eInverseAdd(EFactoryImpl.java
:714)
        at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectI
mpl.java:1405)
        at org.eclipse.emf.ecore.impl.EPackageImpl.setEFactoryInstance(EPackageI
mpl.java:382)
        at org.eclipse.emf.ecore.impl.EPackageImpl.<init>(EPackageImpl.java:177)

        at org.eclipse.emf.ecore.impl.EcorePackageImpl.<init>(EcorePackageImpl.j
ava:79)
        at org.eclipse.emf.ecore.impl.EcorePackageImpl.init(EcorePackageImpl.jav
a:477)
        at org.eclipse.emf.ecore.EcorePackage.<clinit>(EcorePackage.java:67)
        ... 64 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
xception
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command

[ERROR]   mvn <goals> -rf :build-default-product


Here is my code:

package tools.sonarplugin.simplifieddecisionmetrics.transformer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreEList;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.eol.IEolExecutableModule;
import org.eclipse.epsilon.eol.models.IModel;
import org.eclipse.epsilon.etl.EtlModule;

public class SubKDM2SDMTransformation extends EpsilonStandaloneExecuter {

	public static void main(String[] args) throws Exception {
		EmfModel model = createEmfModel("sourcemodel",
				"/simplifieddecisionmetrics/kdmResultadoSub.xmi",
				"/simplifieddecisionmetrics/SubKDM.ecore", true, false);
		Collection<EObject> numberOfPackagesMeasures = model
				.getAllOfKind("NumberOfPackagesMeasure");
		Iterator<EObject> iter = numberOfPackagesMeasures.iterator();
		while (iter.hasNext()) {
			EObject object = iter.next();
			EStructuralFeature feature = object.eClass().getEStructuralFeature(
					"measurements");
			if (feature != null) {
				EcoreEList<EObject> measurements = (EcoreEList<EObject>) object
						.eGet(feature);
				for (EObject measurement : measurements) {
					feature = measurement.eClass().getEStructuralFeature(
							"value");
					String variableName = measurement.eClass().getName();
					Object variableNameObject = measurement.eGet(feature);
					String variableValue;
					if (variableNameObject != null) {
						variableValue = variableNameObject.toString();
					} else {
						variableValue = "";
					}
					variableName = variableName + ':' + variableValue;
					System.out.println(variableName);
				}
			}
		}
	}

	@Override
	public IEolExecutableModule createModule() {
		return new EtlModule();
	}

	@Override
	public String getSource() throws Exception {
		return "/simplifieddecisionmetrics/micro2sdm.etl";
	}

	@Override
	public List<IModel> getModels() throws Exception {
		List<IModel> models = new ArrayList<IModel>();
		models.add(createEmfModel("sourcemodel",
				"/simplifieddecisionmetrics/KdmSub.xmi",
				"/simplifieddecisionmetrics/SubKDM.ecore", true, true));
		return models;
	}

}


I can run the transformation as a Java Application correctly.
I'm packaging the plugin with this libraries:

org.eclipse.emf.ecore
org.eclipse.epsilon.common
org.eclipse.epsilon.emc.emf
org.eclipse.epsilon.eol.engine
org.eclipse.epsilon.erl.engine
org.eclipse.epsilon.etl.engine 


I don't know if I'm doing something wrong. Please help!

Rolando
Re: Executing ETL inside Maven Plugin [message #1709012 is a reply to message #1708936] Wed, 23 September 2015 10:07 Go to previous messageGo to next message
Dimitris Kolovos is currently offline Dimitris KolovosFriend
Messages: 2163
Registered: July 2009
Location: York, UK
Senior Member

Hi Rolando,

Caused by: java.lang.UnsupportedOperationException 
  at org.eclipse.emf.ecore.impl.MinimalEObjectImpl.eBasicAdapters(MinimalEObjectImpl.java:295)


indicates EMF code as the source of the error. Could you please try to load your model using pure EMF code and let me know if the problem persists? If it works fine with plain EMF, it'd be great if you could share with us a minimal example [1] we can use to investigate.

Cheers,
Dimitris

[1] http://www.eclipse.org/epsilon/doc/articles/minimal-examples/
Re: Executing ETL inside Maven Plugin [message #1709087 is a reply to message #1709012] Wed, 23 September 2015 20:36 Go to previous messageGo to next message
Rolando Amarillo is currently offline Rolando AmarilloFriend
Messages: 4
Registered: September 2015
Junior Member
Hi Dimitris,

Thank you for your fast response.

I don't understand what do you mean with pure EMF. Without any xmi file?

I made another test and changed the code to load the XMI file like this:

Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
			Map<String, Object> m = reg.getExtensionToFactoryMap();
			m.put("xmi", new XMIResourceFactoryImpl());

			// Obtain a new resource set
			ResourceSet resSet = new ResourceSetImpl();

			// Get the resource
			Resource resource = resSet
					.getResource(
							URI.createURI("/simplifieddecisionmetrics/kdmResultSub.xmi"),
							true);
			Iterator<EObject> iter = resource.getAllContents();


The problem still persists:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal o
rg.codehaus.mojo:sonar-maven-plugin:2.6:sonar (default-cli) on project build-def
ault-product: null
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:216)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThre
adedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Lifecycl
eStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Laun
cher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
a:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
uncher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
356)
Caused by: org.apache.maven.plugin.MojoExecutionException
        at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionH
andling.java:41)
        at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBoo
tstraper.java:139)
        at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:132)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default
BuildPluginManager.java:134)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor
.java:208)
        ... 20 more
Caused by: java.lang.ExceptionInInitializerError
        at tools.sonarplugin.simplifieddecisionmetrics.IDEMetadataSensor.analyse
(IDEMetadataSensor.java:54)
        at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.
java:59)
        at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:5
1)
        at org.sonar.batch.phases.DatabaseModePhaseExecutor.execute(DatabaseMode
PhaseExecutor.java:120)
        at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanConta
iner.java:264)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.j
ava:235)
        at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScan
Container.java:230)
        at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScan
Container.java:228)
        at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanCon
tainer.java:220)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:57)
        at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:45)
        at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.ja
va:135)
        at org.sonar.api.platform.ComponentContainer.startComponents(ComponentCo
ntainer.java:92)
        at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.
java:77)
        at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer
.java:158)
        at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
        at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
        at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java
:48)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher
.java:87)
        at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
        at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
        at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102
)
        at org.sonar.runner.api.Runner.execute(Runner.java:100)
        at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBoo
tstraper.java:135)
        ... 23 more
Caused by: java.lang.UnsupportedOperationException
        at org.eclipse.emf.ecore.impl.MinimalEObjectImpl.eBasicAdapters(MinimalE
ObjectImpl.java:295)
        at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotificationReq
uired(BasicNotifierImpl.java:261)
        at org.eclipse.emf.ecore.impl.EFactoryImpl.basicSetEPackage(EFactoryImpl
.java:138)
        at org.eclipse.emf.ecore.impl.EFactoryImpl.eInverseAdd(EFactoryImpl.java
:714)
        at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectI
mpl.java:1405)
        at org.eclipse.emf.ecore.impl.EPackageImpl.setEFactoryInstance(EPackageI
mpl.java:382)
        at org.eclipse.emf.ecore.impl.EPackageImpl.<init>(EPackageImpl.java:177)

        at subkdm.kdmObjects.impl.KdmObjectsPackageImpl.<init>(KdmObjectsPackage
Impl.java:310)
        at subkdm.kdmObjects.impl.KdmObjectsPackageImpl.init(KdmObjectsPackageIm
pl.java:336)
        at subkdm.kdmObjects.KdmObjectsPackage.<clinit>(KdmObjectsPackage.java:5
8)
        ... 57 more


This time the error shows the line in the generated file super(eNS_URI, KdmObjectsFactory.eINSTANCE);:

         /**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the
	 * package package URI value.
	 * <p>
	 * Note: the correct way to create the package is via the static factory
	 * method {@link #init init()}, which also performs initialization of the
	 * package, or returns the registered package, if one already exists. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see subkdm.kdmObjects.KdmObjectsPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private KdmObjectsPackageImpl() {
		super(eNS_URI, KdmObjectsFactory.eINSTANCE);
	}


I'm starting to think there is some kind of conflict between sonar-maven plugin and the epsilon libraries.

Also, do you know if epsilon libraries are available on any maven repositories?

Best Regards,

Rolando
Re: Executing ETL inside Maven Plugin [message #1709090 is a reply to message #1709087] Wed, 23 September 2015 21:17 Go to previous message
Dimitris Kolovos is currently offline Dimitris KolovosFriend
Messages: 2163
Registered: July 2009
Location: York, UK
Senior Member

Hi Rolando,

> I don't understand what do you mean with pure EMF. Without any xmi file?

I meant without using Epsilon - which is exactly what you did in your last message.

Since the problem persists even when Epsilon is not used it's unlikely that this is a bug in Epsilon. As such, I'd suggest sending a message to the EMF forum instead [1] (before doing this it may be worth trying to use EMF's Maven repository).

> Also, do you know if epsilon libraries are available on any maven repositories?

This is in our to-do list.

Cheers,
Dimitris

[1] https://www.eclipse.org/forums/index.php/f/108/
[2] http://mvnrepository.com/artifact/org.eclipse.emf
Previous Topic:EUnit possibilities
Next Topic:[ETL/EOL]: First EEnumLiteral of an EEnum will never be transformed
Goto Forum:
  


Current Time: Thu Apr 25 12:17:17 GMT 2024

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

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

Back to the top